aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile66
-rw-r--r--lib/asn1/Makefile2
-rw-r--r--lib/asn1/c_src/Makefile38
-rw-r--r--lib/asn1/c_src/asn1_erl_nif.c84
-rw-r--r--lib/asn1/doc/src/asn1ct.xml4
-rw-r--r--lib/asn1/doc/src/notes.xml38
-rw-r--r--lib/asn1/src/Makefile5
-rw-r--r--lib/asn1/src/asn1_db.erl116
-rw-r--r--lib/asn1/src/asn1ct.erl69
-rw-r--r--lib/asn1/src/asn1ct_check.erl67
-rw-r--r--lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl46
-rw-r--r--lib/asn1/src/asn1ct_constructed_per.erl1125
-rw-r--r--lib/asn1/src/asn1ct_eval_per.funcs2
-rw-r--r--lib/asn1/src/asn1ct_eval_uper.funcs2
-rw-r--r--lib/asn1/src/asn1ct_func.erl65
-rw-r--r--lib/asn1/src/asn1ct_gen.erl53
-rw-r--r--lib/asn1/src/asn1ct_gen_ber_bin_v2.erl38
-rw-r--r--lib/asn1/src/asn1ct_gen_per.erl921
-rw-r--r--lib/asn1/src/asn1ct_gen_per_rt2ct.erl461
-rw-r--r--lib/asn1/src/asn1ct_imm.erl1470
-rw-r--r--lib/asn1/src/asn1ct_value.erl8
-rw-r--r--lib/asn1/src/asn1rt_nif.erl2
-rw-r--r--lib/asn1/src/asn1rtt_ber.erl3
-rw-r--r--lib/asn1/src/asn1rtt_per.erl876
-rw-r--r--lib/asn1/src/asn1rtt_per_common.erl333
-rw-r--r--lib/asn1/src/asn1rtt_real_common.erl6
-rw-r--r--lib/asn1/src/asn1rtt_uper.erl915
-rw-r--r--lib/asn1/test/Makefile1
-rw-r--r--lib/asn1/test/asn1_SUITE.erl79
-rw-r--r--lib/asn1/test/asn1_SUITE_data/Fragmented.asn124
-rw-r--r--lib/asn1/test/asn1_SUITE_data/InfObj.asn47
-rw-r--r--lib/asn1/test/asn1_SUITE_data/Param.asn122
-rw-r--r--lib/asn1/test/asn1_SUITE_data/SeqOf.asn139
-rw-r--r--lib/asn1/test/asn1_SUITE_data/TConstr.asn134
-rw-r--r--lib/asn1/test/error_SUITE.erl47
-rw-r--r--lib/asn1/test/testDeepTConstr.erl28
-rw-r--r--lib/asn1/test/testFragmented.erl42
-rw-r--r--lib/asn1/test/testInfObj.erl62
-rw-r--r--lib/asn1/test/testParameterizedInfObj.erl10
-rw-r--r--lib/asn1/test/testPrimStrings.erl51
-rw-r--r--lib/asn1/test/testSeqOf.erl26
-rw-r--r--lib/asn1/vsn.mk2
-rw-r--r--lib/common_test/doc/src/common_test_app.xml54
-rw-r--r--lib/common_test/doc/src/config_file_chapter.xml16
-rw-r--r--lib/common_test/doc/src/cover_chapter.xml10
-rw-r--r--lib/common_test/doc/src/ct_hooks_chapter.xml40
-rw-r--r--lib/common_test/doc/src/ct_master_chapter.xml2
-rw-r--r--lib/common_test/doc/src/ct_run.xml6
-rw-r--r--lib/common_test/doc/src/event_handler_chapter.xml12
-rw-r--r--lib/common_test/doc/src/getting_started_chapter.xml12
-rw-r--r--lib/common_test/doc/src/install_chapter.xml4
-rw-r--r--lib/common_test/doc/src/notes.xml93
-rw-r--r--lib/common_test/doc/src/run_test_chapter.xml96
-rw-r--r--lib/common_test/doc/src/write_test_chapter.xml26
-rw-r--r--lib/common_test/include/ct.hrl4
-rw-r--r--lib/common_test/src/ct_hooks.erl7
-rw-r--r--lib/common_test/src/ct_logs.erl82
-rw-r--r--lib/common_test/src/ct_run.erl2
-rw-r--r--lib/common_test/src/ct_util.erl69
-rw-r--r--lib/common_test/src/cth_log_redirect.erl156
-rw-r--r--lib/common_test/test/Makefile1
-rw-r--r--lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl25
-rw-r--r--lib/common_test/test/ct_hooks_SUITE.erl49
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl124
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE.erl252
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl107
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl132
-rw-r--r--lib/common_test/test/ct_test_support.erl35
-rw-r--r--lib/common_test/test/ct_verbosity_SUITE.erl26
-rw-r--r--lib/common_test/vsn.mk2
-rw-r--r--lib/compiler/doc/src/compile.xml4
-rw-r--r--lib/compiler/doc/src/notes.xml61
-rw-r--r--lib/compiler/src/beam_bool.erl3
-rw-r--r--lib/compiler/src/beam_validator.erl1
-rw-r--r--lib/compiler/src/cerl_inline.erl39
-rw-r--r--lib/compiler/src/compile.erl31
-rw-r--r--lib/compiler/src/core_lint.erl4
-rwxr-xr-x[-rw-r--r--]lib/compiler/src/genop.tab244
-rw-r--r--lib/compiler/src/v3_core.erl6
-rw-r--r--lib/compiler/src/v3_kernel.erl2
-rw-r--r--lib/compiler/test/beam_validator_SUITE.erl9
-rw-r--r--lib/compiler/test/beam_validator_SUITE_data/bad_bin_match.S15
-rw-r--r--lib/compiler/test/compile_SUITE.erl4
-rw-r--r--lib/compiler/test/core_fold_SUITE.erl2
-rw-r--r--lib/compiler/test/guard_SUITE.erl8
-rw-r--r--lib/compiler/test/inline_SUITE.erl3
-rw-r--r--lib/compiler/test/inline_SUITE_data/fname.erl29
-rw-r--r--lib/compiler/test/warnings_SUITE.erl14
-rw-r--r--lib/compiler/vsn.mk2
-rw-r--r--lib/crypto/Makefile1
-rw-r--r--lib/crypto/c_src/Makefile.in34
-rw-r--r--lib/crypto/doc/src/notes.xml16
-rw-r--r--lib/crypto/vsn.mk2
-rw-r--r--lib/debugger/doc/src/notes.xml16
-rw-r--r--lib/debugger/vsn.mk2
-rw-r--r--lib/diameter/doc/src/diameter_dict.xml4
-rw-r--r--lib/diameter/doc/src/notes.xml46
-rw-r--r--lib/diameter/src/base/diameter_config.erl5
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm.erl2
-rw-r--r--lib/diameter/src/base/diameter_service.erl3
-rw-r--r--lib/diameter/src/base/diameter_types.erl68
-rw-r--r--lib/diameter/src/diameter.appup.src38
-rw-r--r--lib/diameter/test/diameter_codec_test.erl167
-rw-r--r--lib/diameter/vsn.mk2
-rw-r--r--lib/edoc/doc/src/notes.xml17
-rw-r--r--lib/edoc/vsn.mk2
-rw-r--r--lib/erl_docgen/doc/src/notes.xml19
-rw-r--r--lib/erl_docgen/priv/dtd/common.dtd2
-rw-r--r--lib/erl_docgen/priv/xsl/db_man.xsl12
-rw-r--r--lib/erl_docgen/vsn.mk2
-rw-r--r--lib/erl_interface/doc/src/notes.xml32
-rw-r--r--lib/erl_interface/src/Makefile.in4
-rw-r--r--lib/erl_interface/test/Makefile2
-rw-r--r--lib/erl_interface/test/ei_decode_encode_SUITE.erl2
-rw-r--r--lib/erl_interface/test/erl_interface_smoke.spec1
-rw-r--r--lib/erl_interface/vsn.mk2
-rw-r--r--lib/et/doc/src/notes.xml19
-rw-r--r--lib/et/vsn.mk2
-rw-r--r--lib/eunit/doc/src/notes.xml16
-rw-r--r--lib/eunit/include/eunit.hrl64
-rw-r--r--lib/eunit/vsn.mk2
-rw-r--r--lib/hipe/doc/src/notes.xml19
-rw-r--r--lib/hipe/vsn.mk2
-rw-r--r--lib/ic/c_src/Makefile.in4
-rw-r--r--lib/ic/doc/src/notes.xml20
-rw-r--r--lib/ic/test/Makefile2
-rw-r--r--lib/ic/test/ic_smoke.spec1
-rw-r--r--lib/ic/vsn.mk2
-rw-r--r--lib/inets/doc/src/httpc.xml6
-rw-r--r--lib/inets/doc/src/httpd.xml28
-rw-r--r--lib/inets/doc/src/httpd_util.xml4
-rw-r--r--lib/inets/doc/src/mod_alias.xml4
-rw-r--r--lib/inets/doc/src/notes.xml61
-rw-r--r--lib/inets/doc/src/notes_history.xml2
-rw-r--r--lib/inets/src/http_lib/http_transport.erl21
-rw-r--r--lib/inets/src/http_server/httpd_conf.erl18
-rw-r--r--lib/inets/src/http_server/httpd_request_handler.erl2
-rw-r--r--lib/inets/src/http_server/httpd_response.erl6
-rw-r--r--lib/inets/src/http_server/mod_cgi.erl2
-rw-r--r--lib/inets/src/http_server/mod_esi.erl2
-rw-r--r--lib/inets/test/Makefile2
-rw-r--r--lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem45
-rw-r--r--lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem45
-rw-r--r--lib/inets/test/httpd_SUITE.erl2
-rw-r--r--lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem45
-rw-r--r--lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem45
-rw-r--r--lib/inets/test/httpd_basic_SUITE.erl88
l---------lib/inets/test/httpd_basic_SUITE_data/printenv.bat1
l---------lib/inets/test/httpd_basic_SUITE_data/printenv.sh1
-rw-r--r--lib/inets/test/httpd_mod.erl15
-rw-r--r--lib/inets/test/httpd_test_lib.erl2
-rw-r--r--lib/inets/vsn.mk2
-rw-r--r--lib/jinterface/test/Makefile2
-rw-r--r--lib/jinterface/test/jinterface_smoke.spec1
-rw-r--r--lib/kernel/doc/src/application.xml27
-rw-r--r--lib/kernel/doc/src/inet.xml66
-rw-r--r--lib/kernel/doc/src/notes.xml60
-rw-r--r--lib/kernel/src/application.erl43
-rw-r--r--lib/kernel/src/hipe_unified_loader.erl47
-rw-r--r--lib/kernel/src/inet.erl114
-rw-r--r--lib/kernel/src/inet_int.hrl1
-rw-r--r--lib/kernel/src/inet_parse.erl4
-rw-r--r--lib/kernel/src/rpc.erl2
-rw-r--r--lib/kernel/test/Makefile2
-rw-r--r--lib/kernel/test/application_SUITE.erl107
-rw-r--r--lib/kernel/test/inet_SUITE.erl103
-rw-r--r--lib/kernel/test/interactive_shell_SUITE.erl51
-rw-r--r--lib/kernel/test/kernel_smoke.spec9
-rw-r--r--lib/megaco/doc/src/notes.xml18
-rw-r--r--lib/megaco/src/app/megaco.appup.src4
-rw-r--r--lib/megaco/vsn.mk2
-rw-r--r--lib/mnesia/doc/src/notes.xml31
-rw-r--r--lib/mnesia/src/mnesia_bup.erl6
-rw-r--r--lib/mnesia/src/mnesia_checkpoint.erl279
-rw-r--r--lib/mnesia/test/mnesia_consistency_test.erl28
-rw-r--r--lib/mnesia/vsn.mk2
-rw-r--r--lib/observer/doc/src/notes.xml17
-rw-r--r--lib/observer/vsn.mk2
-rw-r--r--lib/odbc/c_src/odbcserver.c12
-rw-r--r--lib/odbc/doc/src/notes.xml39
-rw-r--r--lib/odbc/doc/src/odbc.xml3
-rw-r--r--lib/odbc/test/odbc_connect_SUITE.erl2
-rw-r--r--lib/odbc/vsn.mk2
-rw-r--r--lib/os_mon/c_src/Makefile.in1
-rw-r--r--lib/os_mon/c_src/cpu_sup.c9
-rw-r--r--lib/os_mon/c_src/ferrule.c2
-rw-r--r--lib/os_mon/c_src/mod_syslog.c3
-rw-r--r--lib/os_mon/doc/src/notes.xml37
-rw-r--r--lib/os_mon/test/Makefile3
-rw-r--r--lib/os_mon/test/cpu_sup_SUITE.erl1
-rw-r--r--lib/os_mon/test/os_mon_smoke.spec3
-rw-r--r--lib/os_mon/vsn.mk2
-rw-r--r--lib/parsetools/doc/src/leex.xml14
-rw-r--r--lib/parsetools/doc/src/notes.xml35
-rw-r--r--lib/parsetools/src/leex.erl16
-rw-r--r--lib/parsetools/src/yecc.erl20
-rw-r--r--lib/parsetools/test/leex_SUITE.erl88
-rw-r--r--lib/parsetools/test/yecc_SUITE.erl96
-rw-r--r--lib/parsetools/vsn.mk2
-rw-r--r--lib/percept/doc/src/notes.xml17
-rw-r--r--lib/percept/vsn.mk2
-rw-r--r--lib/public_key/asn1/PKCS-7.asn176
-rw-r--r--lib/public_key/doc/src/notes.xml23
-rw-r--r--lib/public_key/src/pubkey_pbe.erl12
-rw-r--r--lib/public_key/src/public_key.erl7
-rw-r--r--lib/public_key/test/pbe_SUITE.erl8
-rw-r--r--lib/public_key/test/pbe_SUITE_data/aes_128_cbc_enc_key30
-rw-r--r--lib/public_key/test/public_key_SUITE.erl67
-rw-r--r--lib/public_key/test/public_key_SUITE_data/pkcs7_ext.pem62
-rw-r--r--lib/public_key/vsn.mk2
-rw-r--r--lib/reltool/doc/src/notes.xml21
-rw-r--r--lib/reltool/vsn.mk2
-rw-r--r--lib/runtime_tools/doc/src/dbg.xml2
-rw-r--r--lib/runtime_tools/doc/src/notes.xml29
-rw-r--r--lib/runtime_tools/src/dbg.erl4
-rw-r--r--lib/runtime_tools/vsn.mk2
-rw-r--r--lib/sasl/doc/src/notes.xml15
-rw-r--r--lib/sasl/doc/src/rb.xml34
-rw-r--r--lib/sasl/src/rb.erl56
-rw-r--r--lib/sasl/test/rb_SUITE.erl32
-rw-r--r--lib/snmp/doc/src/notes.xml69
-rw-r--r--lib/snmp/doc/src/snmpa.xml75
-rw-r--r--lib/snmp/doc/src/snmpa_mib_data.xml2
-rw-r--r--lib/snmp/src/agent/snmpa.erl70
-rw-r--r--lib/snmp/src/agent/snmpa_agent.erl32
-rw-r--r--lib/snmp/src/agent/snmpa_mib.erl49
-rw-r--r--lib/snmp/src/app/snmp.appup.src24
-rw-r--r--lib/snmp/test/snmp_agent_mibs_test.erl22
-rw-r--r--lib/snmp/test/snmp_agent_test.erl74
-rw-r--r--lib/snmp/test/snmp_agent_test_lib.erl74
-rw-r--r--lib/snmp/vsn.mk2
-rw-r--r--lib/ssh/doc/src/notes.xml35
-rw-r--r--lib/ssh/doc/src/ssh.xml1
-rw-r--r--lib/ssh/src/ssh.hrl3
-rw-r--r--lib/ssh/src/ssh_connection_handler.erl4
-rw-r--r--lib/ssh/src/ssh_transport.erl37
-rw-r--r--lib/ssh/test/ssh_basic_SUITE.erl23
-rw-r--r--lib/ssh/vsn.mk2
-rw-r--r--lib/ssl/doc/src/notes.xml81
-rw-r--r--lib/ssl/doc/src/ssl.xml6
-rw-r--r--lib/ssl/src/Makefile9
-rw-r--r--lib/ssl/src/dtls_connection.erl322
-rw-r--r--lib/ssl/src/dtls_handshake.erl410
-rw-r--r--lib/ssl/src/dtls_handshake.hrl18
-rw-r--r--lib/ssl/src/dtls_record.erl366
-rw-r--r--lib/ssl/src/dtls_v1.erl43
-rw-r--r--lib/ssl/src/ssl.app.src42
-rw-r--r--lib/ssl/src/ssl.appup.src2
-rw-r--r--lib/ssl/src/ssl.erl1
-rw-r--r--lib/ssl/src/ssl_cipher.erl37
-rw-r--r--lib/ssl/src/ssl_cipher.hrl3
-rw-r--r--lib/ssl/src/ssl_handshake.erl1650
-rw-r--r--lib/ssl/src/ssl_handshake.hrl34
-rw-r--r--lib/ssl/src/ssl_internal.hrl12
-rw-r--r--lib/ssl/src/ssl_manager.erl24
-rw-r--r--lib/ssl/src/ssl_record.erl439
-rw-r--r--lib/ssl/src/ssl_record.hrl24
-rw-r--r--lib/ssl/src/ssl_v2.erl (renamed from lib/ssl/src/ssl_ssl2.erl)16
-rw-r--r--lib/ssl/src/ssl_v3.erl (renamed from lib/ssl/src/ssl_ssl3.erl)28
-rw-r--r--lib/ssl/src/tls.erl8
-rw-r--r--lib/ssl/src/tls_connection.erl373
-rw-r--r--lib/ssl/src/tls_handshake.erl1702
-rw-r--r--lib/ssl/src/tls_handshake.hrl9
-rw-r--r--lib/ssl/src/tls_record.erl536
-rw-r--r--lib/ssl/src/tls_record.hrl1
-rw-r--r--lib/ssl/src/tls_v1.erl (renamed from lib/ssl/src/ssl_tls1.erl)42
-rw-r--r--lib/ssl/test/Makefile1
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE.erl225
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/CA.pem14
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/ec1.crt11
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/ec1.key8
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/ec2.crt11
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/ec2.key8
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/rsa1.crt20
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/rsa1.key51
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/rsa2.crt20
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE_data/rsa2.key51
-rw-r--r--lib/ssl/test/ssl_basic_SUITE.erl13
-rw-r--r--lib/ssl/test/ssl_handshake_SUITE.erl63
-rw-r--r--lib/ssl/test/ssl_npn_hello_SUITE.erl77
-rw-r--r--lib/ssl/test/ssl_packet_SUITE.erl24
-rw-r--r--lib/ssl/test/ssl_test_lib.erl42
-rw-r--r--lib/ssl/test/ssl_to_openssl_SUITE.erl94
-rw-r--r--lib/ssl/vsn.mk2
-rw-r--r--lib/stdlib/doc/src/filelib.xml6
-rw-r--r--lib/stdlib/doc/src/io_lib.xml3
-rw-r--r--lib/stdlib/doc/src/notes.xml88
-rw-r--r--lib/stdlib/doc/src/re.xml1821
-rw-r--r--lib/stdlib/src/dets.erl4
-rw-r--r--lib/stdlib/src/digraph.erl2
-rw-r--r--lib/stdlib/src/edlin.erl30
-rw-r--r--lib/stdlib/src/erl_compile.erl225
-rw-r--r--lib/stdlib/src/erl_lint.erl47
-rw-r--r--lib/stdlib/src/gen_server.erl2
-rw-r--r--lib/stdlib/src/io_lib.erl9
-rw-r--r--lib/stdlib/src/io_lib_fread.erl9
-rw-r--r--lib/stdlib/src/re.erl176
-rw-r--r--lib/stdlib/test/dets_SUITE.erl26
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl72
-rw-r--r--lib/stdlib/test/re_SUITE.erl480
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput12625
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput10252
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput24832
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput38
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput4312
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput51764
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput61397
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput78380
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput88584
-rw-r--r--lib/stdlib/test/re_SUITE_data/testoutput92650
-rw-r--r--lib/stdlib/test/re_testoutput1_replacement_test.erl9825
-rw-r--r--lib/stdlib/test/re_testoutput1_split_test.erl15979
-rw-r--r--lib/stdlib/test/run_pcre_tests.erl289
-rw-r--r--lib/test_server/doc/src/notes.xml56
-rw-r--r--lib/test_server/src/Makefile1
-rw-r--r--lib/test_server/src/test_server.app.src1
-rw-r--r--lib/test_server/src/test_server.erl1
-rw-r--r--lib/test_server/src/test_server_ctrl.erl45
-rw-r--r--lib/test_server/src/test_server_h.erl148
-rw-r--r--lib/test_server/src/test_server_io.erl200
-rw-r--r--lib/test_server/src/ts.erl26
-rw-r--r--lib/test_server/src/ts_benchmark.erl7
-rw-r--r--lib/test_server/src/ts_lib.erl12
-rw-r--r--lib/test_server/vsn.mk2
-rw-r--r--lib/tools/doc/src/notes.xml31
-rw-r--r--lib/tools/emacs/erlang.el47
-rw-r--r--lib/tools/emacs/test.erl.indented31
-rw-r--r--lib/tools/emacs/test.erl.orig31
-rw-r--r--lib/tools/vsn.mk2
-rw-r--r--lib/wx/api_gen/wx_extra/bugs.h10
-rw-r--r--lib/wx/api_gen/wx_gen.erl8
-rw-r--r--lib/wx/api_gen/wxapi.conf14
-rw-r--r--lib/wx/c_src/gen/wxe_events.cpp90
-rw-r--r--lib/wx/c_src/gen/wxe_funcs.cpp18
-rw-r--r--lib/wx/c_src/gen/wxe_macros.h6127
-rw-r--r--lib/wx/include/wx.hrl10
-rw-r--r--lib/wx/src/gen/wxClipboardTextEvent.erl87
-rw-r--r--lib/wx/src/gen/wxGrid.erl18
-rw-r--r--lib/wx/src/gen/wxHtmlWindow.erl18
-rw-r--r--lib/wx/src/gen/wxPanel.erl12
-rw-r--r--lib/wx/src/gen/wxPreviewCanvas.erl18
-rw-r--r--lib/wx/src/gen/wxPreviewControlBar.erl8
-rw-r--r--lib/wx/src/gen/wxScrolledWindow.erl8
-rw-r--r--lib/wx/src/gen/wxStatusBar.erl15
-rw-r--r--lib/wx/src/gen/wxe_debug.hrl6127
-rw-r--r--lib/wx/src/gen/wxe_funcs.hrl6127
-rw-r--r--lib/wx/test/wx_class_SUITE.erl19
-rw-r--r--lib/wx/test/wx_event_SUITE.erl26
-rw-r--r--lib/wx/vsn.mk2
-rw-r--r--lib/xmerl/doc/src/notes.xml16
-rw-r--r--lib/xmerl/doc/src/xmerl_ug.xmlsrc4
-rw-r--r--lib/xmerl/vsn.mk2
352 files changed, 58775 insertions, 40398 deletions
diff --git a/lib/Makefile b/lib/Makefile
index 9ddf3a0544..ec26a01dc6 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -19,39 +19,59 @@
include $(ERL_TOP)/make/target.mk
include $(ERL_TOP)/make/$(TARGET)/otp.mk
-ERTS_SUB_DIRECTORIES = stdlib sasl kernel compiler
-OTHER_SUB_DIRECTORIES = tools test_server common_test runtime_tools \
+
+# These have to be built first
+ERTS_APPLICATIONS = stdlib sasl kernel compiler
+
+# Then these have to be build
+ERLANG_APPLICATIONS = tools test_server common_test runtime_tools \
inets xmerl edoc erl_docgen
+
+# These are only build if -a is given to otp_build or make is used directly
+ALL_ERLANG_APPLICATIONS = snmp otp_mibs appmon erl_interface asn1 jinterface \
+ wx debugger reltool gs \
+ ic mnesia crypto orber os_mon parsetools syntax_tools \
+ pman public_key ssl toolbar tv observer odbc diameter \
+ cosTransactions cosEvent cosTime cosNotification \
+ cosProperty cosFileTransfer cosEventDomain et megaco webtool \
+ eunit ssh typer percept eldap dialyzer hipe
+
ifdef BUILD_ALL
- OTHER_SUB_DIRECTORIES += \
- snmp otp_mibs appmon erl_interface asn1 jinterface \
- wx debugger reltool gs \
- ic mnesia crypto orber os_mon parsetools syntax_tools \
- pman public_key ssl toolbar tv observer odbc diameter \
- cosTransactions cosEvent cosTime cosNotification \
- cosProperty cosFileTransfer cosEventDomain et megaco webtool \
- eunit ssh typer percept eldap dialyzer hipe
- EXTRA_FILE := $(wildcard EXTRA-APPLICATIONS)
- EXTRA_APPLICATIONS := $(if $(EXTRA_FILE),$(shell cat $(EXTRA_FILE)))
+ ERLANG_APPLICATIONS += $(ALL_ERLANG_APPLICATIONS)
+
+# We use whildcard */ to figure out if there are any other applications
+# in here.
+ EXPECTED_APPLICATIONS := $(ERTS_APPLICATIONS) $(ERLANG_APPLICATIONS) \
+ autom4te.cache
+ EXTRA_APPLICATIONS += $(filter-out $(EXPECTED_APPLICATIONS),\
+ $(subst /,,$(wildcard */)))
endif
-ifdef BOOTSTRAP
- SUB_DIRECTORIES = \
- kernel stdlib compiler
+ifdef BUILD_STATIC_LIBS
+ SUB_DIRECTORIES = asn1 crypto
else
- ifdef SECONDARY_BOOTSTRAP
- SUB_DIRECTORIES = hipe parsetools asn1/src
+ ifdef BOOTSTRAP
+ SUB_DIRECTORIES = \
+ kernel stdlib compiler
else
- ifdef TERTIARY_BOOTSTRAP
- SUB_DIRECTORIES = snmp sasl jinterface ic syntax_tools wx
- else # Not bootstrap build
- SUB_DIRECTORIES = $(ERTS_SUB_DIRECTORIES) \
- $(OTHER_SUB_DIRECTORIES) \
- $(EXTRA_APPLICATIONS)
+ ifdef SECONDARY_BOOTSTRAP
+ SUB_DIRECTORIES = hipe parsetools asn1/src
+ else
+ ifdef TERTIARY_BOOTSTRAP
+ SUB_DIRECTORIES = snmp sasl jinterface ic syntax_tools wx
+ else # Not bootstrap build
+ SUB_DIRECTORIES = $(ERTS_APPLICATIONS) \
+ $(ERLANG_APPLICATIONS) \
+ $(EXTRA_APPLICATIONS)
+ endif
endif
endif
endif
+# Any applications listed in SKIP-APPLICATIONS should be skipped
+SKIP_FILE := $(wildcard SKIP-APPLICATIONS)
+SKIP_APPLICATIONS := $(if $(SKIP_FILE),$(shell cat $(SKIP_FILE)))
+SUB_DIRECTORIES := $(filter-out $(SKIP_APPLICATIONS),$(SUB_DIRECTORIES))
# ----------------------------------------------------------------------
include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/lib/asn1/Makefile b/lib/asn1/Makefile
index 9c1b19605c..1bc303b73c 100644
--- a/lib/asn1/Makefile
+++ b/lib/asn1/Makefile
@@ -25,6 +25,8 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
#
SUB_DIRECTORIES = src doc/src c_src
+static_lib: SUB_DIRECTORIES = c_src
+
include vsn.mk
VSN = $(ASN1_VSN)
diff --git a/lib/asn1/c_src/Makefile b/lib/asn1/c_src/Makefile
index 70238335c4..ded4b73d1b 100644
--- a/lib/asn1/c_src/Makefile
+++ b/lib/asn1/c_src/Makefile
@@ -46,12 +46,11 @@ else
TYPEMARKER =
endif
-EI_LIBDIR = $(ERL_TOP)/lib/erl_interface/obj$(TYPEMARKER)/$(TARGET)
-
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
CFLAGS = $(DED_INCLUDES) $(EI_INCLUDES) $(DED_CFLAGS)
+STATIC_CFLAGS = $(DED_INCLUDES) $(EI_INCLUDES) $(DED_STATIC_CFLAGS)
LDFLAGS += $(DED_LDFLAGS)
# ----------------------------------------------------
@@ -59,18 +58,38 @@ LDFLAGS += $(DED_LDFLAGS)
# ----------------------------------------------------
NIF_OBJ_FILES = $(OBJDIR)/asn1_erl_nif.o
+NIF_STATIC_OBJ_FILES = $(OBJDIR)/asn1_erl_nif_static.o
-
+# Module and shared lib have to have same name of
+# static nifs to work
ifeq ($(TARGET),win32)
-NIF_SHARED_OBJ_FILE = $(LIBDIR)/asn1_erl_nif.dll
+NIF_SHARED_OBJ_FILE = $(LIBDIR)/asn1rt_nif.dll
+NIF_LIB_FILE = $(LIBDIR)/asn1rt_nif.lib
CLIB_FLAGS =
LN=cp
else
-NIF_SHARED_OBJ_FILE = $(LIBDIR)/asn1_erl_nif.so
+NIF_SHARED_OBJ_FILE = $(LIBDIR)/asn1rt_nif.so
+NIF_LIB_FILE = $(LIBDIR)/asn1rt_nif.a
CLIB_FLAGS = -lc
LN= ln -s
endif
+ifeq ($(USING_VC),yes)
+AR_OUT=-out:
+AR_FLAGS=
+else
+AR_OUT=
+ifeq ($(V),0)
+AR_FLAGS=rc
+else
+AR_FLAGS=rcv
+endif
+endif
+
+ifndef RANLIB
+RANLIB=true
+endif
+
# ----------------------------------------------------
# Targets
# ----------------------------------------------------
@@ -81,6 +100,8 @@ opt: $(NIF_SHARED_OBJ_FILE)
debug: opt
+static_lib: $(NIF_LIB_FILE)
+
clean:
rm -f core *~
rm -f $(LIBDIR)/*
@@ -96,6 +117,13 @@ docs:
$(OBJDIR)/%.o: %.c
$(V_CC) -c $(CFLAGS) -O3 -o $@ $<
+$(OBJDIR)/%_static.o: %.c
+ $(V_CC) -c $(STATIC_CFLAGS) -O3 -o $@ $<
+
+$(NIF_LIB_FILE): $(NIF_STATIC_OBJ_FILES)
+ $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(NIF_STATIC_OBJ_FILES)
+ $(V_RANLIB) $@
+
$(NIF_SHARED_OBJ_FILE): $(NIF_OBJ_FILES)
$(V_LD) $(LDFLAGS) -o $(NIF_SHARED_OBJ_FILE) $(NIF_OBJ_FILES) $(CLIB_FLAGS) $(LIBS)
diff --git a/lib/asn1/c_src/asn1_erl_nif.c b/lib/asn1/c_src/asn1_erl_nif.c
index b3dd312fed..0930010fda 100644
--- a/lib/asn1/c_src/asn1_erl_nif.c
+++ b/lib/asn1/c_src/asn1_erl_nif.c
@@ -57,54 +57,54 @@
#define MASK(X,M) (X & M)
/* PER COMPLETE */
-int per_complete(ErlNifBinary *, unsigned char *, int);
+static int per_complete(ErlNifBinary *, unsigned char *, int);
-int per_insert_octets(int, unsigned char **, unsigned char **, int *);
+static int per_insert_octets(int, unsigned char **, unsigned char **, int *);
-int per_insert_octets_except_unused(int, unsigned char **, unsigned char **,
+static int per_insert_octets_except_unused(int, unsigned char **, unsigned char **,
int *, int);
-int per_insert_octets_as_bits_exact_len(int, int, unsigned char **,
+static int per_insert_octets_as_bits_exact_len(int, int, unsigned char **,
unsigned char **, int *);
-int per_insert_octets_as_bits(int, unsigned char **, unsigned char **, int *);
+static int per_insert_octets_as_bits(int, unsigned char **, unsigned char **, int *);
-int per_pad_bits(int, unsigned char **, int *);
+static int per_pad_bits(int, unsigned char **, int *);
-int per_insert_least_sign_bits(int, unsigned char, unsigned char **, int *);
+static int per_insert_least_sign_bits(int, unsigned char, unsigned char **, int *);
-int per_insert_most_sign_bits(int, unsigned char, unsigned char **, int *);
+static int per_insert_most_sign_bits(int, unsigned char, unsigned char **, int *);
-int per_insert_bits_as_bits(int, int, unsigned char **, unsigned char **, int *);
+static int per_insert_bits_as_bits(int, int, unsigned char **, unsigned char **, int *);
-int per_insert_octets_unaligned(int, unsigned char **, unsigned char **, int);
+static int per_insert_octets_unaligned(int, unsigned char **, unsigned char **, int);
-int per_realloc_memory(ErlNifBinary *, int, unsigned char **);
+static int per_realloc_memory(ErlNifBinary *, int, unsigned char **);
/* BER DECODE */
-int ber_decode_begin(ErlNifEnv *, ERL_NIF_TERM *, unsigned char *, int,
+static int ber_decode_begin(ErlNifEnv *, ERL_NIF_TERM *, unsigned char *, int,
unsigned int *);
-int ber_decode(ErlNifEnv *, ERL_NIF_TERM *, unsigned char *, int *, int);
+static int ber_decode(ErlNifEnv *, ERL_NIF_TERM *, unsigned char *, int *, int);
-int ber_decode_tag(ErlNifEnv *, ERL_NIF_TERM *, unsigned char *, int, int *);
+static int ber_decode_tag(ErlNifEnv *, ERL_NIF_TERM *, unsigned char *, int, int *);
-int ber_decode_value(ErlNifEnv*, ERL_NIF_TERM *, unsigned char *, int *, int,
+static int ber_decode_value(ErlNifEnv*, ERL_NIF_TERM *, unsigned char *, int *, int,
int);
/* BER ENCODE */
typedef struct ber_encode_mem_chunk mem_chunk_t;
-int ber_encode(ErlNifEnv *, ERL_NIF_TERM , mem_chunk_t **, unsigned int *);
+static int ber_encode(ErlNifEnv *, ERL_NIF_TERM , mem_chunk_t **, unsigned int *);
-void ber_free_chunks(mem_chunk_t *chunk);
-mem_chunk_t *ber_new_chunk(unsigned int length);
-int ber_check_memory(mem_chunk_t **curr, unsigned int needed);
+static void ber_free_chunks(mem_chunk_t *chunk);
+static mem_chunk_t *ber_new_chunk(unsigned int length);
+static int ber_check_memory(mem_chunk_t **curr, unsigned int needed);
-int ber_encode_tag(ErlNifEnv *, ERL_NIF_TERM , unsigned int ,
+static int ber_encode_tag(ErlNifEnv *, ERL_NIF_TERM , unsigned int ,
mem_chunk_t **, unsigned int *);
-int ber_encode_length(size_t , mem_chunk_t **, unsigned int *);
+static int ber_encode_length(size_t , mem_chunk_t **, unsigned int *);
/*
*
@@ -113,7 +113,7 @@ int ber_encode_length(size_t , mem_chunk_t **, unsigned int *);
*
*/
-int per_complete(ErlNifBinary *out_binary, unsigned char *in_buf,
+static int per_complete(ErlNifBinary *out_binary, unsigned char *in_buf,
int in_buf_len) {
int counter = in_buf_len;
/* counter keeps track of number of bytes left in the
@@ -489,7 +489,7 @@ int per_complete(ErlNifBinary *out_binary, unsigned char *in_buf,
}
}
-int per_realloc_memory(ErlNifBinary *binary, int amount, unsigned char **ptr) {
+static int per_realloc_memory(ErlNifBinary *binary, int amount, unsigned char **ptr) {
int i = *ptr - binary->data;
@@ -502,7 +502,7 @@ int per_realloc_memory(ErlNifBinary *binary, int amount, unsigned char **ptr) {
return ASN1_OK;
}
-int per_insert_most_sign_bits(int no_bits, unsigned char val,
+static int per_insert_most_sign_bits(int no_bits, unsigned char val,
unsigned char **output_ptr, int *unused) {
unsigned char *ptr = *output_ptr;
@@ -523,7 +523,7 @@ int per_insert_most_sign_bits(int no_bits, unsigned char val,
return ASN1_OK;
}
-int per_insert_least_sign_bits(int no_bits, unsigned char val,
+static int per_insert_least_sign_bits(int no_bits, unsigned char val,
unsigned char **output_ptr, int *unused) {
unsigned char *ptr = *output_ptr;
int ret = 0;
@@ -552,7 +552,7 @@ int per_insert_least_sign_bits(int no_bits, unsigned char val,
/* per_pad_bits adds no_bits bits in the buffer that output_ptr
points at.
*/
-int per_pad_bits(int no_bits, unsigned char **output_ptr, int *unused) {
+static int per_pad_bits(int no_bits, unsigned char **output_ptr, int *unused) {
unsigned char *ptr = *output_ptr;
int ret = 0;
@@ -575,7 +575,7 @@ int per_pad_bits(int no_bits, unsigned char **output_ptr, int *unused) {
The unused parameter tells how many bits that are not set in the
actual byte in the output buffer. If desired_no is more bits than the
input buffer has in no_bytes bytes, then zero bits is padded.*/
-int per_insert_bits_as_bits(int desired_no, int no_bytes,
+static int per_insert_bits_as_bits(int desired_no, int no_bytes,
unsigned char **input_ptr, unsigned char **output_ptr, int *unused) {
unsigned char *in_ptr = *input_ptr;
unsigned char val;
@@ -615,7 +615,7 @@ int per_insert_bits_as_bits(int desired_no, int no_bytes,
}
/* per_insert_octets_as_bits_exact_len */
-int per_insert_octets_as_bits_exact_len(int desired_len, int in_buff_len,
+static int per_insert_octets_as_bits_exact_len(int desired_len, int in_buff_len,
unsigned char **in_ptr, unsigned char **ptr, int *unused) {
int ret = 0;
int ret2 = 0;
@@ -653,7 +653,7 @@ int per_insert_octets_as_bits_exact_len(int desired_len, int in_buff_len,
otherwise the function returns ASN1_ERROR. The output buffer is concatenated
without alignment.
*/
-int per_insert_octets_as_bits(int no_bytes, unsigned char **input_ptr,
+static int per_insert_octets_as_bits(int no_bytes, unsigned char **input_ptr,
unsigned char **output_ptr, int *unused) {
unsigned char *in_ptr = *input_ptr;
unsigned char *ptr = *output_ptr;
@@ -693,7 +693,7 @@ int per_insert_octets_as_bits(int no_bytes, unsigned char **input_ptr,
into the output buffer, *output_ptr. Before the first byte is
inserted the input buffer is aligned.
*/
-int per_insert_octets(int no_bytes, unsigned char **input_ptr,
+static int per_insert_octets(int no_bytes, unsigned char **input_ptr,
unsigned char **output_ptr, int *unused) {
unsigned char *in_ptr = *input_ptr;
unsigned char *ptr = *output_ptr;
@@ -718,7 +718,7 @@ int per_insert_octets(int no_bytes, unsigned char **input_ptr,
/* per_insert_octets_unaligned inserts bytes from the input buffer, *input_ptr,
into the output buffer, *output_ptr.No alignment is done.
*/
-int per_insert_octets_unaligned(int no_bytes, unsigned char **input_ptr,
+static int per_insert_octets_unaligned(int no_bytes, unsigned char **input_ptr,
unsigned char **output_ptr, int unused) {
unsigned char *in_ptr = *input_ptr;
unsigned char *ptr = *output_ptr;
@@ -742,7 +742,7 @@ int per_insert_octets_unaligned(int no_bytes, unsigned char **input_ptr,
return no_bytes;
}
-int per_insert_octets_except_unused(int no_bytes, unsigned char **input_ptr,
+static int per_insert_octets_except_unused(int no_bytes, unsigned char **input_ptr,
unsigned char **output_ptr, int *unused, int in_unused) {
unsigned char *in_ptr = *input_ptr;
unsigned char *ptr = *output_ptr;
@@ -835,7 +835,7 @@ int per_insert_octets_except_unused(int no_bytes, unsigned char **input_ptr,
* is the empty binary.
* If some error occured during the decoding of the in_buf an error is returned.
*/
-int ber_decode_begin(ErlNifEnv* env, ERL_NIF_TERM *term, unsigned char *in_buf,
+static int ber_decode_begin(ErlNifEnv* env, ERL_NIF_TERM *term, unsigned char *in_buf,
int in_buf_len, unsigned int *err_pos) {
int maybe_ret;
int ib_index = 0;
@@ -857,7 +857,7 @@ int ber_decode_begin(ErlNifEnv* env, ERL_NIF_TERM *term, unsigned char *in_buf,
return ASN1_OK;
}
-int ber_decode(ErlNifEnv* env, ERL_NIF_TERM *term, unsigned char *in_buf,
+static int ber_decode(ErlNifEnv* env, ERL_NIF_TERM *term, unsigned char *in_buf,
int *ib_index, int in_buf_len) {
int maybe_ret;
int form;
@@ -889,7 +889,7 @@ int ber_decode(ErlNifEnv* env, ERL_NIF_TERM *term, unsigned char *in_buf,
* decode_tag decodes the BER encoded tag in in_buf and creates an
* nif term tag
*/
-int ber_decode_tag(ErlNifEnv* env, ERL_NIF_TERM *tag, unsigned char *in_buf,
+static int ber_decode_tag(ErlNifEnv* env, ERL_NIF_TERM *tag, unsigned char *in_buf,
int in_buf_len, int *ib_index) {
int tag_no, tmp_tag, form;
@@ -936,7 +936,7 @@ int ber_decode_tag(ErlNifEnv* env, ERL_NIF_TERM *tag, unsigned char *in_buf,
* in_buf and puts the value part in the decode_buf as an Erlang
* nif term into value
*/
-int ber_decode_value(ErlNifEnv* env, ERL_NIF_TERM *value, unsigned char *in_buf,
+static int ber_decode_value(ErlNifEnv* env, ERL_NIF_TERM *value, unsigned char *in_buf,
int *ib_index, int form, int in_buf_len) {
int maybe_ret;
unsigned int len = 0;
@@ -1012,7 +1012,7 @@ struct ber_encode_mem_chunk {
char *curr;
};
-int ber_encode(ErlNifEnv *env, ERL_NIF_TERM term, mem_chunk_t **curr, unsigned int *count) {
+static int ber_encode(ErlNifEnv *env, ERL_NIF_TERM term, mem_chunk_t **curr, unsigned int *count) {
const ERL_NIF_TERM *tv;
unsigned int form;
@@ -1087,7 +1087,7 @@ int ber_encode(ErlNifEnv *env, ERL_NIF_TERM term, mem_chunk_t **curr, unsigned i
return ASN1_OK;
}
-int ber_encode_tag(ErlNifEnv *env, ERL_NIF_TERM tag, unsigned int form,
+static int ber_encode_tag(ErlNifEnv *env, ERL_NIF_TERM tag, unsigned int form,
mem_chunk_t **curr, unsigned int *count) {
unsigned int class_tag_no, head_tag;
if (!enif_get_uint(env, tag, &class_tag_no))
@@ -1122,7 +1122,7 @@ int ber_encode_tag(ErlNifEnv *env, ERL_NIF_TERM tag, unsigned int form,
}
}
-int ber_encode_length(size_t size, mem_chunk_t **curr, unsigned int *count) {
+static int ber_encode_length(size_t size, mem_chunk_t **curr, unsigned int *count) {
if (size < 128) {
if (ber_check_memory(curr, 1u))
return ASN1_ERROR;
@@ -1150,7 +1150,7 @@ int ber_encode_length(size_t size, mem_chunk_t **curr, unsigned int *count) {
return ASN1_OK;
}
-mem_chunk_t *ber_new_chunk(unsigned int length) {
+static mem_chunk_t *ber_new_chunk(unsigned int length) {
mem_chunk_t *new = enif_alloc(sizeof(mem_chunk_t));
if (new == NULL)
return NULL;
@@ -1165,7 +1165,7 @@ mem_chunk_t *ber_new_chunk(unsigned int length) {
return new;
}
-void ber_free_chunks(mem_chunk_t *chunk) {
+static void ber_free_chunks(mem_chunk_t *chunk) {
mem_chunk_t *curr, *next = chunk;
while (next != NULL) {
curr = next;
@@ -1175,7 +1175,7 @@ void ber_free_chunks(mem_chunk_t *chunk) {
}
}
-int ber_check_memory(mem_chunk_t **curr, unsigned int needed) {
+static int ber_check_memory(mem_chunk_t **curr, unsigned int needed) {
mem_chunk_t *new;
if ((*curr)->curr-needed >= (*curr)->top)
return ASN1_OK;
diff --git a/lib/asn1/doc/src/asn1ct.xml b/lib/asn1/doc/src/asn1ct.xml
index b020643149..6b6f46d39f 100644
--- a/lib/asn1/doc/src/asn1ct.xml
+++ b/lib/asn1/doc/src/asn1ct.xml
@@ -356,11 +356,11 @@ File3.asn </pre>
</item>
</list>
- <p>Schematically the following happens for each type in the module:
+ <p>Schematically the following happens for each type in the module:</p>
<code type="none">
{ok, Value} = asn1ct:value(Module, Type),
{ok, Bytes} = asn1ct:encode(Module, Type, Value),
-{ok, Value} = asn1ct:decode(Module, Type, Bytes).</code></p>
+{ok, Value} = asn1ct:decode(Module, Type, Bytes).</code>
<p>The <c>test</c> functions utilizes the <c>*.asn1db</c> files
for all included modules. If they are located in a different
diff --git a/lib/asn1/doc/src/notes.xml b/lib/asn1/doc/src/notes.xml
index f3c1ef862c..69e97019df 100644
--- a/lib/asn1/doc/src/notes.xml
+++ b/lib/asn1/doc/src/notes.xml
@@ -31,6 +31,44 @@
<p>This document describes the changes made to the asn1 application.</p>
+<section><title>Asn1 2.0.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Open types greater than 16383 bytes will now be correctly
+ encoded and decoded.</p>
+ <p>
+ Own Id: OTP-11262 Aux Id: seq12386, OTP-11223 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>For the PER and UPER formats, code generation
+ especially for encoding has been improved.</p>
+ <p>When encoding BIT STRINGs, values longer than the
+ maximum size for the BIT STRING type would be truncated
+ silently - they now cause an exception.</p>
+ <p>Open types greater than 16383 bytes will now be
+ correctly encoded and decoded.</p>
+ <p>IMPORTANT NOTE: For ASN.1 specifications that depend
+ on each other, such as the S1AP-* specifications, it is
+ important to recompile all specifications (compiling some
+ with this version of the compiler and some with an older
+ version will not work).</p>
+ <p>
+ Own Id: OTP-11300</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Asn1 2.0.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/asn1/src/Makefile b/lib/asn1/src/Makefile
index 33cd3cc4c3..3f24e15c04 100644
--- a/lib/asn1/src/Makefile
+++ b/lib/asn1/src/Makefile
@@ -43,9 +43,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/asn1-$(VSN)
EBIN = ../ebin
-EVAL_CT_MODULES = asn1ct_eval_ext \
- asn1ct_eval_per \
- asn1ct_eval_uper
+EVAL_CT_MODULES = asn1ct_eval_ext
CT_MODULES= \
asn1ct \
@@ -55,7 +53,6 @@ CT_MODULES= \
asn1ct_func \
asn1ct_gen \
asn1ct_gen_per \
- asn1ct_gen_per_rt2ct \
asn1ct_name \
asn1ct_constructed_per \
asn1ct_constructed_ber_bin_v2 \
diff --git a/lib/asn1/src/asn1_db.erl b/lib/asn1/src/asn1_db.erl
index 869b36ddbd..48d9dd16d7 100644
--- a/lib/asn1/src/asn1_db.erl
+++ b/lib/asn1/src/asn1_db.erl
@@ -19,25 +19,37 @@
%%
-module(asn1_db).
--export([dbstart/1,dbnew/1,dbsave/2,dbput/3,dbget/2]).
+-export([dbstart/1,dbnew/2,dbload/1,dbload/3,dbsave/2,dbput/3,dbget/2]).
-export([dbstop/0]).
-record(state, {parent, monitor, includes, table}).
%% Interface
-dbstart(Includes) ->
+dbstart(Includes0) ->
+ Includes = case Includes0 of
+ [] -> ["."];
+ [_|_] -> Includes0
+ end,
Parent = self(),
undefined = get(?MODULE), %Assertion.
put(?MODULE, spawn_link(fun() -> init(Parent, Includes) end)),
ok.
-dbnew(Module) -> req({new, Module}).
+dbload(Module, Erule, Mtime) ->
+ req({load, Module, Erule, Mtime}).
+
+dbload(Module) ->
+ req({load, Module, any, {{0,0,0},{0,0,0}}}).
+
+dbnew(Module, Erule) -> req({new, Module, Erule}).
dbsave(OutFile, Module) -> cast({save, OutFile, Module}).
dbput(Module, K, V) -> cast({set, Module, K, V}).
dbget(Module, K) -> req({get, Module, K}).
dbstop() -> Resp = req(stop), erase(?MODULE), Resp.
%% Internal functions
+-define(MAGIC_KEY, '__version_and_erule__').
+
req(Request) ->
DbPid = get(?MODULE),
Ref = erlang:monitor(process,DbPid),
@@ -71,47 +83,57 @@ loop(#state{parent = Parent, monitor = MRef, table = Table,
ets:insert(Modtab, {K2, V}),
loop(State);
{From, {get, Mod, K2}} ->
- Result = case ets:lookup(Table, Mod) of
- [] -> opentab(Table, Mod, Includes);
- [{_, Modtab}] -> {ok, Modtab}
- end,
- case Result of
- {ok, Newtab} -> reply(From, lookup(Newtab, K2));
- _Error -> reply(From, undefined)
+ %% XXX If there is no information for Mod, get_table/3
+ %% will attempt to load information from an .asn1db
+ %% file, without comparing its timestamp against the
+ %% source file. This is known to happen when check_*
+ %% functions for DER are generated, but it could possibly
+ %% happen in other circumstances. Ideally, this issue should
+ %% be rectified in some way, perhaps by ensuring that
+ %% the module has been loaded (using dbload/4) prior
+ %% to calling dbget/2.
+ case get_table(Table, Mod, Includes) of
+ {ok,Tab} -> reply(From, lookup(Tab, K2));
+ error -> reply(From, undefined)
end,
loop(State);
{save, OutFile, Mod} ->
[{_,Mtab}] = ets:lookup(Table, Mod),
ok = ets:tab2file(Mtab, OutFile),
loop(State);
- {From, {new, Mod}} ->
+ {From, {new, Mod, Erule}} ->
[] = ets:lookup(Table, Mod), %Assertion.
ModTableId = ets:new(list_to_atom(lists:concat(["asn1_",Mod])), []),
ets:insert(Table, {Mod, ModTableId}),
+ ets:insert(ModTableId, {?MAGIC_KEY, info(Erule)}),
reply(From, ok),
loop(State);
+ {From, {load, Mod, Erule, Mtime}} ->
+ case ets:member(Table, Mod) of
+ true ->
+ reply(From, ok);
+ false ->
+ case load_table(Mod, Erule, Mtime, Includes) of
+ {ok, ModTableId} ->
+ ets:insert(Table, {Mod, ModTableId}),
+ reply(From, ok);
+ error ->
+ reply(From, error)
+ end
+ end,
+ loop(State);
{From, stop} ->
reply(From, stopped); %% Nothing to store
{'DOWN', MRef, process, Parent, Reason} ->
exit(Reason)
end.
-opentab(Tab, Mod, []) ->
- opentab(Tab, Mod, ["."]);
-opentab(Tab, Mod, Includes) ->
- Base = lists:concat([Mod, ".asn1db"]),
- opentab2(Tab, Base, Mod, Includes, ok).
-
-opentab2(_Tab, _Base, _Mod, [], Error) ->
- Error;
-opentab2(Tab, Base, Mod, [Ih|It], _Error) ->
- File = filename:join(Ih, Base),
- case ets:file2tab(File) of
- {ok, Modtab} ->
- ets:insert(Tab, {Mod, Modtab}),
- {ok, Modtab};
- NewErr ->
- opentab2(Tab, Base, Mod, It, NewErr)
+get_table(Table, Mod, Includes) ->
+ case ets:lookup(Table, Mod) of
+ [{Mod,Tab}] ->
+ {ok,Tab};
+ [] ->
+ load_table(Mod, any, {{0,0,0},{0,0,0}}, Includes)
end.
lookup(Tab, K) ->
@@ -119,3 +141,43 @@ lookup(Tab, K) ->
[] -> undefined;
[{K,V}] -> V
end.
+
+info(Erule) ->
+ {asn1ct:vsn(),Erule}.
+
+load_table(Mod, Erule, Mtime, Includes) ->
+ Base = lists:concat([Mod, ".asn1db"]),
+ case path_find(Includes, Mtime, Base) of
+ error ->
+ error;
+ {ok,ModTab} when Erule =:= any ->
+ {ok,ModTab};
+ {ok,ModTab} ->
+ Vsn = asn1ct:vsn(),
+ case ets:lookup(ModTab, ?MAGIC_KEY) of
+ [{_,{Vsn,Erule}}] ->
+ %% Correct version and encoding rule.
+ {ok,ModTab};
+ _ ->
+ %% Missing key or wrong version/encoding rule.
+ ets:delete(ModTab),
+ error
+ end
+ end.
+
+path_find([H|T], Mtime, Base) ->
+ File = filename:join(H, Base),
+ case filelib:last_modified(File) of
+ 0 ->
+ path_find(T, Mtime, Base);
+ DbMtime when DbMtime >= Mtime ->
+ case ets:file2tab(File) of
+ {ok,_}=Ret ->
+ Ret;
+ _ ->
+ path_find(T, Mtime, Base)
+ end;
+ _ ->
+ path_find(T, Mtime, Base)
+ end;
+path_find([], _, _) -> error.
diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl
index 8e71a5697c..f2ccf5f212 100644
--- a/lib/asn1/src/asn1ct.erl
+++ b/lib/asn1/src/asn1ct.erl
@@ -893,17 +893,23 @@ parse_and_save(Module,S) ->
Options = S#state.options,
SourceDir = S#state.sourcedir,
Includes = [I || {i,I} <- Options],
+ Erule = S#state.erule,
case get_input_file(Module, [SourceDir|Includes]) of
%% search for asn1 source
{file,SuffixedASN1source} ->
- case dbfile_uptodate(SuffixedASN1source,Options) of
- false ->
- parse_and_save1(S, SuffixedASN1source, Options);
- _ -> ok
+ Mtime = filelib:last_modified(SuffixedASN1source),
+ case asn1_db:dbload(Module, Erule, Mtime) of
+ ok -> ok;
+ error -> parse_and_save1(S, SuffixedASN1source, Options)
end;
Err ->
- warning("could not do a consistency check of the ~p file: no asn1 source file was found.~n",
- [lists:concat([Module,".asn1db"])],Options),
+ case asn1_db:dbload(Module) of
+ ok ->
+ warning("could not do a consistency check of the ~p file: no asn1 source file was found.~n",
+ [lists:concat([Module,".asn1db"])],Options);
+ error ->
+ ok
+ end,
{error,{asn1,input_file_error,Err}}
end.
@@ -929,48 +935,6 @@ get_input_file(Module,[I|Includes]) ->
get_input_file(Module,Includes)
end.
-dbfile_uptodate(File,Options) ->
- EncodingRule = get_rule(Options),
- Ext = filename:extension(File),
- Base = filename:basename(File,Ext),
- DbFile = outfile(Base,"asn1db",Options),
- case file:read_file_info(DbFile) of
- {error,enoent} ->
- false;
- {ok,FileInfoDb} ->
- %% file exists, check date and finally encodingrule
- {ok,FileInfoAsn} = file:read_file_info(File),
- case FileInfoDb#file_info.mtime < FileInfoAsn#file_info.mtime of
- true ->
- %% date of asn1 spec newer than db file
- false;
- _ ->
- %% date ok,check that same erule was used
- Obase = case lists:keysearch(outdir, 1, Options) of
- {value, {outdir, Odir}} ->
- Odir;
- _NotFound -> ""
- end,
- BeamFileName = outfile(Base,"beam",Options),
- case file:read_file_info(BeamFileName) of
- {ok,_} ->
- code:add_path(Obase),
- BeamFile = list_to_atom(Base),
- BeamInfo = (catch BeamFile:info()),
- case catch lists:keysearch(options,1,BeamInfo) of
- {value,{options,OldOptions}} ->
- case get_rule(OldOptions) of
- EncodingRule -> true;
- _ -> false
- end;
- _ -> false
- end;
- _ -> false
- end
- end
- end.
-
-
input_file_type(Name,I) ->
case input_file_type(Name) of
{error,_} -> input_file_type2(filename:basename(Name),I);
@@ -1374,10 +1338,11 @@ get_value(Module, Type) ->
end.
check(Module, Includes) ->
- case asn1_db:dbget(Module,'MODULE') of
- undefined ->
- {error, {file_not_found, lists:concat([Module, ".asn1db"])}};
- M ->
+ case asn1_db:dbload(Module) of
+ error ->
+ {error,asn1db_missing_or_out_of_date};
+ ok ->
+ M = asn1_db:dbget(Module, 'MODULE'),
TypeOrVal = M#module.typeorval,
State = #state{mname = M#module.name,
module = M#module{typeorval=[]},
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl
index f94550b0a4..eddcda0018 100644
--- a/lib/asn1/src/asn1ct_check.erl
+++ b/lib/asn1/src/asn1ct_check.erl
@@ -1557,21 +1557,32 @@ check_objectdefn(S,Def,CDef) when is_record(CDef,classdef) ->
exit({error,{objectdefn,Other}})
end.
-check_defaultfields(S,Fields,ClassFields) ->
- check_defaultfields(S,Fields,ClassFields,[]).
+check_defaultfields(S, Fields, ClassFields) ->
+ Present = ordsets:from_list([F || {F,_} <- Fields]),
+ Mandatory0 = get_mandatory_class_fields(ClassFields),
+ Mandatory = ordsets:from_list(Mandatory0),
+ All = ordsets:from_list([element(2, F) || F <- ClassFields]),
+ #state{type=T,tname=Obj} = S,
+ case ordsets:subtract(Present, All) of
+ [] ->
+ ok;
+ [_|_]=Invalid ->
+ throw(asn1_error(S, T, {invalid_fields,Invalid,Obj}))
+ end,
+ case ordsets:subtract(Mandatory, Present) of
+ [] ->
+ check_defaultfields_1(S, Fields, ClassFields, []);
+ [_|_]=Missing ->
+ throw(asn1_error(S, T, {missing_mandatory_fields,Missing,Obj}))
+ end.
-check_defaultfields(_S,[],_ClassFields,Acc) ->
+check_defaultfields_1(_S, [], _ClassFields, Acc) ->
{object,defaultsyntax,lists:reverse(Acc)};
-check_defaultfields(S,[{FName,Spec}|Fields],ClassFields,Acc) ->
- case lists:keysearch(FName,2,ClassFields) of
- {value,CField} ->
- {NewField,RestFields} =
- convert_to_defaultfield(S,FName,[Spec|Fields],CField),
- check_defaultfields(S,RestFields,ClassFields,[NewField|Acc]);
- _ ->
- throw({error,{asn1,{'unvalid field in object',FName}}})
- end.
-%% {object,defaultsyntax,Fields}.
+check_defaultfields_1(S, [{FName,Spec}|Fields], ClassFields, Acc) ->
+ CField = lists:keyfind(FName, 2, ClassFields),
+ {NewField,RestFields} =
+ convert_to_defaultfield(S, FName, [Spec|Fields], CField),
+ check_defaultfields_1(S, RestFields, ClassFields, [NewField|Acc]).
convert_definedsyntax(_S,[],[],_ClassFields,Acc) ->
lists:reverse(Acc);
@@ -1587,6 +1598,23 @@ convert_definedsyntax(S,Fields,WithSyntax,ClassFields,Acc) ->
[MatchedField|Acc])
end.
+get_mandatory_class_fields([{fixedtypevaluefield,Name,_,_,'MANDATORY'}|T]) ->
+ [Name|get_mandatory_class_fields(T)];
+get_mandatory_class_fields([{objectfield,Name,_,_,'MANDATORY'}|T]) ->
+ [Name|get_mandatory_class_fields(T)];
+get_mandatory_class_fields([{objectsetfield,Name,_,'MANDATORY'}|T]) ->
+ [Name|get_mandatory_class_fields(T)];
+get_mandatory_class_fields([{typefield,Name,'MANDATORY'}|T]) ->
+ [Name|get_mandatory_class_fields(T)];
+get_mandatory_class_fields([{variabletypevaluefield,Name,_,'MANDATORY'}|T]) ->
+ [Name|get_mandatory_class_fields(T)];
+get_mandatory_class_fields([{variabletypevaluesetfield,
+ Name,_,'MANDATORY'}|T]) ->
+ [Name|get_mandatory_class_fields(T)];
+get_mandatory_class_fields([_|T]) ->
+ get_mandatory_class_fields(T);
+get_mandatory_class_fields([]) -> [].
+
match_field(S,Fields,WithSyntax,ClassFields) ->
match_field(S,Fields,WithSyntax,ClassFields,[]).
@@ -6798,7 +6826,7 @@ merge_tags2([], Acc) ->
storeindb(S,M) when is_record(M,module) ->
TVlist = M#module.typeorval,
NewM = M#module{typeorval=findtypes_and_values(TVlist)},
- asn1_db:dbnew(NewM#module.name),
+ asn1_db:dbnew(NewM#module.name, S#state.erule),
asn1_db:dbput(NewM#module.name,'MODULE', NewM),
Res = storeindb(#state{mname=NewM#module.name}, TVlist, []),
include_default_class(S,NewM#module.name),
@@ -6867,11 +6895,22 @@ asn1_error(#state{mname=Where}, Item, Error) ->
format_error({already_defined,Name,PrevLine}) ->
io_lib:format("the name ~p has already been defined at line ~p",
[Name,PrevLine]);
+format_error({invalid_fields,Fields,Obj}) ->
+ io_lib:format("invalid ~s in ~p", [format_fields(Fields),Obj]);
+format_error({missing_mandatory_fields,Fields,Obj}) ->
+ io_lib:format("missing mandatory ~s in ~p",
+ [format_fields(Fields),Obj]);
format_error({undefined,Name}) ->
io_lib:format("'~s' is referenced, but is not defined", [Name]);
format_error(Other) ->
io_lib:format("~p", [Other]).
+format_fields([F]) ->
+ io_lib:format("field &~s", [F]);
+format_fields([H|T]) ->
+ [io_lib:format("fields &~s", [H])|
+ [io_lib:format(", &~s", [F]) || F <- T]].
+
error({_,{structured_error,_,_,_}=SE,_}) ->
SE;
error({export,Msg,#state{mname=Mname,type=Ref,tname=Typename}}) ->
diff --git a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
index 761faa53c5..8359b81b33 100644
--- a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
@@ -122,8 +122,8 @@ gen_encode_sequence(Erules,Typename,D) when is_record(D,type) ->
asn1ct_gen:un_hyphen_var(lists:concat(['Obj',
AttrN])),
emit([ObjectEncode," = ",nl,
- " ",{asis,ObjSetMod},":'getenc_",ObjSetName,
- "'(",{asis,UniqueFieldName},", ",nl]),
+ " ",{asis,ObjSetMod},":'getenc_",ObjSetName,
+ "'("]),
ValueMatch = value_match(ValueIndex,
lists:concat(["Cindex",N])),
emit([indent(35),ValueMatch,"),",nl]),
@@ -198,7 +198,7 @@ gen_decode_sequence(Erules,Typename,D) when is_record(D,type) ->
asn1ct_name:new(tlv),
asn1ct_name:new(v),
- {DecObjInf,UniqueFName,ValueIndex} =
+ {DecObjInf,ValueIndex} =
case TableConsInfo of
#simpletableattributes{objectsetname=ObjectSetRef,
c_name=AttrN,
@@ -217,12 +217,12 @@ gen_decode_sequence(Erules,Typename,D) when is_record(D,type) ->
%% relation from a component to another components
%% subtype component
{{AttrN,{deep,ObjectSetRef,UniqueFieldName,ValIndex}},
- UniqueFieldName,ValIndex};
+ ValIndex};
false ->
- {{AttrN,ObjectSetRef},UniqueFieldName,ValIndex}
+ {{AttrN,ObjectSetRef},ValIndex}
end;
_ ->
- {false,false,false}
+ {false,false}
end,
RecordName = lists:concat([get_record_name_prefix(),
asn1ct_gen:list2rname(Typename)]),
@@ -246,7 +246,7 @@ gen_decode_sequence(Erules,Typename,D) when is_record(D,type) ->
{ObjSetMod,ObjSetName} = ObjSetRef,
emit([DecObj," =",nl,
" ",{asis,ObjSetMod},":'getdec_",ObjSetName,"'(",
- {asis,UniqueFName},", ",ValueMatch,"),",nl]),
+ ValueMatch,"),",nl]),
gen_dec_postponed_decs(DecObj,PostponedDecArgs)
end,
demit(["Result = "]), %dbg
@@ -357,7 +357,7 @@ gen_decode_set(Erules,Typename,D) when is_record(D,type) ->
asn1ct_name:new(v),
- {DecObjInf,UniqueFName,ValueIndex} =
+ {DecObjInf,ValueIndex} =
case TableConsInfo of
%% {ObjectSetRef,AttrN,_N,UniqueFieldName} ->%% N is index of attribute that determines constraint
#simpletableattributes{objectsetname=ObjectSetRef,
@@ -378,12 +378,12 @@ gen_decode_set(Erules,Typename,D) when is_record(D,type) ->
%% relation from a component to another components
%% subtype component
{{AttrN,{deep,ObjectSetRef,UniqueFieldName,ValIndex}},
- UniqueFieldName,ValIndex};
+ ValIndex};
false ->
- {{AttrN,ObjectSetRef},UniqueFieldName,ValIndex}
+ {{AttrN,ObjectSetRef},ValIndex}
end;
_ ->
- {false,false,false}
+ {false,false}
end,
case CompList of
@@ -425,7 +425,7 @@ gen_decode_set(Erules,Typename,D) when is_record(D,type) ->
{ObjSetMod,ObjSetName} = ObjSetRef,
emit([DecObj," =",nl,
" ",{asis,ObjSetMod},":'getdec_",ObjSetName,"'(",
- {asis,UniqueFName},", ",ValueMatch,"),",nl]),
+ ValueMatch,"),",nl]),
gen_dec_postponed_decs(DecObj,PostponedDecArgs)
end,
demit(["Result = "]), %dbg
@@ -577,6 +577,8 @@ gen_decode_choice(Erules,Typename,D) when is_record(D,type) ->
gen_enc_sequence_call(Erules,TopType,[#'ComponentType'{name=Cname,typespec=Type,prop=Prop,textual_order=Order}|Rest],Pos,Ext,EncObj) ->
asn1ct_name:new(encBytes),
asn1ct_name:new(encLen),
+ asn1ct_name:new(tmpBytes),
+ asn1ct_name:new(tmpLen),
CindexPos =
case Order of
undefined ->
@@ -706,8 +708,6 @@ emit_term_tlv('OPTIONAL',InnerType,DecObjInf) ->
emit_term_tlv(opt_or_def,InnerType,DecObjInf);
emit_term_tlv(Prop,{typefield,_},DecObjInf) ->
emit_term_tlv(Prop,type_or_object_field,DecObjInf);
-emit_term_tlv(Prop,{objectfield,_,_},DecObjInf) ->
- emit_term_tlv(Prop,type_or_object_field,DecObjInf);
emit_term_tlv(opt_or_def,type_or_object_field,NotFalse)
when NotFalse /= false ->
asn1ct_name:new(tmpterm),
@@ -789,6 +789,7 @@ gen_enc_choice2(Erules,TopType,[H1|T]) when is_record(H1,'ComponentType') ->
componentrelation)} of
{#'ObjectClassFieldType'{},{componentrelation,_,_}} ->
asn1ct_name:new(tmpBytes),
+ asn1ct_name:new(tmpLen),
asn1ct_name:new(encBytes),
asn1ct_name:new(encLen),
Emit = ["{",{curr,tmpBytes},", _} = "],
@@ -929,7 +930,6 @@ gen_enc_line(Erules,TopType,Cname,
when is_list(Element) ->
case asn1ct_gen:get_constraint(C,componentrelation) of
{componentrelation,_,_} ->
- asn1ct_name:new(tmpBytes),
gen_enc_line(Erules,TopType,Cname,Type,Element,Indent,OptOrMand,
["{",{curr,tmpBytes},",_} = "],EncObj);
_ ->
@@ -991,12 +991,8 @@ gen_enc_line(Erules,TopType,Cname,Type,Element,Indent,OptOrMand,Assign,EncObj)
{call,ber,encode_open_type,
[{curr,tmpBytes},{asis,Tag}]},nl]);
_ ->
- emit(["{",{next,tmpBytes},",",{curr,tmpLen},
- "} = ",
- {call,ber,encode_open_type,
- [{curr,tmpBytes},{asis,Tag}]},com,nl]),
- emit(IndDeep),
- emit(["{",{next,tmpBytes},", ",{curr,tmpLen},"}"])
+ emit([{call,ber,encode_open_type,
+ [{curr,tmpBytes},{asis,Tag}]}])
end;
Err ->
throw({asn1,{'internal error',Err}})
@@ -1213,22 +1209,18 @@ gen_dec_call({typefield,_},_,_,Cname,Type,BytesVar,Tag,_,_,_DecObjInf,OptOrMandC
(Type#type.def)#'ObjectClassFieldType'.fieldname,
[{Cname,RefedFieldName,asn1ct_gen:mk_var(asn1ct_name:curr(term)),
asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)),Tag,OptOrMandComp}];
-gen_dec_call({objectfield,PrimFieldName,PFNList},_,_,Cname,_,BytesVar,Tag,_,_,_,OptOrMandComp) ->
- call(decode_open_type, [BytesVar,{asis,Tag}]),
- [{Cname,{PrimFieldName,PFNList},asn1ct_gen:mk_var(asn1ct_name:curr(term)),
- asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)),Tag,OptOrMandComp}];
gen_dec_call(InnerType,Erules,TopType,Cname,Type,BytesVar,Tag,PrimOptOrMand,
OptOrMand,DecObjInf,_) ->
WhatKind = asn1ct_gen:type(InnerType),
gen_dec_call1(WhatKind,InnerType,Erules,TopType,Cname,Type,BytesVar,Tag,
PrimOptOrMand,OptOrMand),
case DecObjInf of
- {Cname,{_,OSet,UniqueFName,ValIndex}} ->
+ {Cname,{_,OSet,_UniqueFName,ValIndex}} ->
Term = asn1ct_gen:mk_var(asn1ct_name:curr(term)),
ValueMatch = value_match(ValIndex,Term),
{ObjSetMod,ObjSetName} = OSet,
emit([",",nl,"ObjFun = ",{asis,ObjSetMod},":'getdec_",ObjSetName,
- "'(",{asis,UniqueFName},", ",ValueMatch,")"]);
+ "'(",ValueMatch,")"]);
_ ->
ok
end,
diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl
index d279e9697f..8d4afc0a0b 100644
--- a/lib/asn1/src/asn1ct_constructed_per.erl
+++ b/lib/asn1/src/asn1ct_constructed_per.erl
@@ -43,10 +43,13 @@ gen_encode_set(Erules,TypeName,D) ->
gen_encode_sequence(Erules,TypeName,D) ->
gen_encode_constructed(Erules,TypeName,D).
-gen_encode_constructed(Erule,Typename,D) when is_record(D,type) ->
+gen_encode_constructed(Erule, Typename, #type{}=D) ->
asn1ct_name:start(),
- asn1ct_name:new(term),
- asn1ct_name:new(bytes),
+ Imm = gen_encode_constructed_imm(Erule, Typename, D),
+ asn1ct_imm:enc_cg(Imm, is_aligned(Erule)),
+ emit([".",nl]).
+
+gen_encode_constructed_imm(Erule, Typename, #type{}=D) ->
{ExtAddGroup,TmpCompList,TableConsInfo} =
case D#type.def of
#'SEQUENCE'{tablecinf=TCI,components=CL,extaddgroup=ExtAddGroup0} ->
@@ -65,74 +68,36 @@ gen_encode_constructed(Erule,Typename,D) when is_record(D,type) ->
[Comp#'ComponentType'{textual_order=undefined}||
Comp<-TmpCompList]
end,
- case Typename of
- ['EXTERNAL'] ->
- emit([{next,val}," = ",
- {call,ext,transform_to_EXTERNAL1990,
- [{curr,val}]},com,nl]),
- asn1ct_name:new(val);
- _ ->
- ok
- end,
- case {Optionals = optionals(to_textual_order(CompList)),CompList,
- is_optimized(Erule)} of
- {[],EmptyCL,_} when EmptyCL == {[],[],[]};EmptyCL == {[],[]};EmptyCL == [] ->
- ok;
- {[],_,_} ->
- emit([{next,val}," = ",{curr,val},",",nl]);
- {_,_,true} ->
- gen_fixoptionals(Optionals),
- FixOpts = param_map(fun(Var) ->
- {var,Var}
- end,asn1ct_name:all(fixopt)),
- emit({"{",{next,val},",Opt} = {",{curr,val},",[",FixOpts,"]},",nl});
- {_,_,false} ->
- asn1ct_func:need({Erule,fixoptionals,3}),
- Fixoptcall = ",Opt} = fixoptionals(",
- emit({"{",{next,val},Fixoptcall,
- {asis,Optionals},",",length(Optionals),
- ",",{curr,val},"),",nl})
- end,
- asn1ct_name:new(val),
+ ExternalImm =
+ case Typename of
+ ['EXTERNAL'] ->
+ Next = asn1ct_gen:mk_var(asn1ct_name:next(val)),
+ Curr = asn1ct_gen:mk_var(asn1ct_name:curr(val)),
+ asn1ct_name:new(val),
+ [{call,ext,transform_to_EXTERNAL1990,[{var,Curr}],{var,Next}}];
+ _ ->
+ []
+ end,
+ Aligned = is_aligned(Erule),
+ Value0 = asn1ct_gen:mk_var(asn1ct_name:curr(val)),
+ Optionals = optionals(to_textual_order(CompList)),
+ ImmOptionals = [asn1ct_imm:per_enc_optional(Value0, Opt, Aligned) ||
+ Opt <- Optionals],
Ext = extensible_enc(CompList),
- case Ext of
- {ext,_,NumExt} when NumExt > 0 ->
- case extgroup_pos_and_length(CompList) of
- {extgrouppos,[]} -> % no extenstionAdditionGroup
- ok;
- {extgrouppos,ExtGroupPosLenList} ->
- ExtGroupFun =
- fun({ExtActualGroupPos,ExtGroupVirtualPos,ExtGroupLen}) ->
- Elements =
- make_elements(ExtGroupVirtualPos+1,
- "Val1",
- lists:seq(1,ExtGroupLen)),
- emit([
- {next,val}," = case [X || X <- [",Elements,
- "],X =/= asn1_NOVALUE] of",nl,
- "[] -> setelement(",
- {asis,ExtActualGroupPos+1},",",
- {curr,val},",",
- "asn1_NOVALUE);",nl,
- "_ -> setelement(",{asis,ExtActualGroupPos+1},",",
- {curr,val},",",
- "{extaddgroup,", Elements,"})",nl,
- "end,",nl]),
- asn1ct_name:new(val)
- end,
- lists:foreach(ExtGroupFun,ExtGroupPosLenList)
- end,
- asn1ct_name:new(tmpval),
- emit(["Extensions = ",
- {call,Erule,fixextensions,[{asis,Ext},{curr,val}]},
- com,nl]);
- _ -> true
- end,
- EncObj =
+ ExtImm = case Ext of
+ {ext,ExtPos,NumExt} when NumExt > 0 ->
+ gen_encode_extaddgroup(CompList),
+ Value = asn1ct_gen:mk_var(asn1ct_name:curr(val)),
+ asn1ct_imm:per_enc_extensions(Value, ExtPos,
+ NumExt, Aligned);
+ _ ->
+ []
+ end,
+ {EncObj,ObjSetImm} =
case TableConsInfo of
#simpletableattributes{usedclassfield=Used,
uniqueclassfield=Unique} when Used /= Unique ->
- false;
+ {false,[]};
%% ObjectSet, name of the object set in constraints
%%
%%{ObjectSet,AttrN,N,UniqueFieldName} -> %% N is index of attribute that determines constraint
@@ -152,13 +117,10 @@ gen_encode_constructed(Erule,Typename,D) when is_record(D,type) ->
asn1ct_gen:un_hyphen_var(lists:concat(['Obj',AttrN])),
El = make_element(N+1, asn1ct_gen:mk_var(asn1ct_name:curr(val))),
ValueMatch = value_match(ValueIndex, El),
- emit([ObjectEncode," =",nl,
- " ",{asis,Module},":'getenc_",ObjSetName,"'(",
- {asis,UniqueFieldName},", ",nl,
- " ",ValueMatch,"),",nl]),
- {AttrN,ObjectEncode};
+ ObjSetImm0 = [{assign,{var,ObjectEncode},ValueMatch}],
+ {{AttrN,ObjectEncode},ObjSetImm0};
false ->
- false
+ {false,[]}
end;
_ ->
case D#type.tablecinf of
@@ -166,34 +128,52 @@ gen_encode_constructed(Erule,Typename,D) when is_record(D,type) ->
%% when the simpletableattributes was at an outer
%% level and the objfun has been passed through the
%% function call
- {"got objfun through args","ObjFun"};
+ {{"got objfun through args","ObjFun"},[]};
_ ->
- false
+ {false,[]}
end
end,
- emit({"[",nl}),
- MaybeComma1 =
+ ImmSetExt =
case Ext of
- {ext,_Pos,NumExt2} when NumExt2 > 0 ->
- call(Erule, setext, ["Extensions =/= []"]),
- ", ";
- {ext,_Pos,_} ->
- call(Erule, setext, ["false"]),
- ", ";
- _ ->
- ""
- end,
- MaybeComma2 =
- case optionals(CompList) of
- [] -> MaybeComma1;
- _ ->
- emit(MaybeComma1),
- emit("Opt"),
- {",",nl}
+ {ext,_Pos,NumExt2} when NumExt2 > 0 ->
+ asn1ct_imm:per_enc_extension_bit('Extensions', Aligned);
+ {ext,_Pos,_} ->
+ asn1ct_imm:per_enc_extension_bit([], Aligned);
+ _ ->
+ []
end,
- gen_enc_components_call(Erule,Typename,CompList,MaybeComma2,EncObj,Ext),
- emit({"].",nl}).
+ ImmBody = gen_enc_components_call(Erule, Typename, CompList, EncObj, Ext),
+ ExternalImm ++ ExtImm ++ ObjSetImm ++
+ asn1ct_imm:enc_append([ImmSetExt] ++ ImmOptionals ++ ImmBody).
+
+gen_encode_extaddgroup(CompList) ->
+ case extgroup_pos_and_length(CompList) of
+ {extgrouppos,[]} ->
+ ok;
+ {extgrouppos,ExtGroupPosLenList} ->
+ _ = [do_gen_encode_extaddgroup(G) || G <- ExtGroupPosLenList],
+ ok
+ end.
+do_gen_encode_extaddgroup({ActualGroupPos,GroupVirtualPos,GroupLen}) ->
+ Val = asn1ct_gen:mk_var(asn1ct_name:curr(val)),
+ Elements = make_elements(GroupVirtualPos+1,
+ Val,
+ lists:seq(1, GroupLen)),
+ Expr = any_non_value(GroupVirtualPos+1, Val, GroupLen, ""),
+ emit([{next,val}," = case ",Expr," of",nl,
+ "false -> setelement(",{asis,ActualGroupPos+1},", ",
+ {curr,val},", asn1_NOVALUE);",nl,
+ "true -> setelement(",{asis,ActualGroupPos+1},", ",
+ {curr,val},", {extaddgroup,", Elements,"})",nl,
+ "end,",nl]),
+ asn1ct_name:new(val).
+
+any_non_value(_, _, 0, _) ->
+ [];
+any_non_value(Pos, Val, N, Sep) ->
+ Sep ++ [make_element(Pos, Val)," =/= asn1_NOVALUE"] ++
+ any_non_value(Pos+1, Val, N-1, [" orelse",nl]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% generate decode function for SEQUENCE and SET
@@ -328,28 +308,29 @@ gen_dec_constructed_imm(Erule, Typename, #type{}=D) ->
EmitComp = gen_dec_components_call(Erule, Typename, CompList,
DecObjInf, Ext, length(Optionals)),
EmitRest = fun({AccTerm,AccBytes}) ->
- gen_dec_constructed_imm_2(Typename, CompList,
+ gen_dec_constructed_imm_2(Erule, Typename,
+ CompList,
ObjSetInfo,
AccTerm, AccBytes)
end,
[EmitExt,EmitOpt|EmitComp++[{safe,EmitRest}]].
-gen_dec_constructed_imm_2(Typename, CompList,
+gen_dec_constructed_imm_2(Erule, Typename, CompList,
ObjSetInfo, AccTerm, AccBytes) ->
- {_,UniqueFName,ValueIndex} = ObjSetInfo,
+ {_,_UniqueFName,ValueIndex} = ObjSetInfo,
case {AccTerm,AccBytes} of
{[],[]} ->
ok;
{_,[]} ->
ok;
{[{ObjSet,LeadingAttr,Term}],ListOfOpenTypes} ->
- DecObj = asn1ct_gen:un_hyphen_var(lists:concat(['DecObj',LeadingAttr,Term])),
- ValueMatch = value_match(ValueIndex,Term),
- {ObjSetMod,ObjSetName} = ObjSet,
- emit([DecObj," =",nl,
- " ",{asis,ObjSetMod},":'getdec_",ObjSetName,"'(",
- {asis,UniqueFName},", ",ValueMatch,"),",nl]),
- gen_dec_listofopentypes(DecObj,ListOfOpenTypes,false)
+ ValueMatch = value_match(ValueIndex, Term),
+ _ = [begin
+ gen_dec_open_type(Erule, ValueMatch, ObjSet,
+ LeadingAttr, T),
+ emit([com,nl])
+ end || T <- ListOfOpenTypes],
+ ok
end,
%% we don't return named lists any more Cnames = mkcnamelist(CompList),
demit({"Result = "}), %dbg
@@ -423,67 +404,143 @@ to_textual_order(Cs) when is_list(Cs) ->
to_textual_order(Cs) ->
Cs.
-gen_dec_listofopentypes(_,[],_) ->
- emit(nl);
-gen_dec_listofopentypes(DecObj,[{_Cname,{FirstPFN,PFNList},Term,TmpTerm,Prop}|Rest],_Update) ->
-
- asn1ct_name:new(tmpterm),
- asn1ct_name:new(reason),
-
- emit([Term," = ",nl]),
+gen_dec_open_type(Erule, Val, {Xmod,Xtype}, LeadingAttr,
+ {_,{Name,RestFieldNames},Term,TmpTerm,Prop}) ->
+ #typedef{typespec=ObjSet0} = asn1_db:dbget(Xmod, Xtype),
+ #'ObjectSet'{class=Class,set=ObjSet1} = ObjSet0,
+ #'Externaltypereference'{module=ClMod,type=ClType} = Class,
+ #classdef{typespec=ClassDef} = asn1_db:dbget(ClMod, ClType),
+ #objectclass{fields=ClassFields} = ClassDef,
+ Extensible = lists:member('EXTENSIONMARK', ObjSet1),
+ ObjSet2 = [{Key,fix_object_code(Name, Code, ClassFields)} ||
+ {_,Key,Code} <- ObjSet1],
+ ObjSet = lists:sort([P || {_,B}=P <- ObjSet2, B =/= none]),
+ Key = erlang:md5(term_to_binary({decode,ObjSet,RestFieldNames,
+ Prop,Extensible})),
+ Typename = [Name,ClType],
+ Gen = fun(_Fd, N) ->
+ dec_objset_optional(N, Prop),
+ dec_objset(Erule, N, ObjSet, RestFieldNames, Typename),
+ dec_objset_default(N, Name, LeadingAttr, Extensible)
+ end,
+ Prefix = lists:concat(["dec_os_",Name]),
+ F = asn1ct_func:call_gen(Prefix, Key, Gen),
+ emit([Term," = ",{asis,F},"(",TmpTerm,", ",Val,")"]).
+
+dec_objset_optional(N, {'DEFAULT',Val}) ->
+ dec_objset_optional_1(N, Val),
+ dec_objset_optional_1(N, asn1_DEFAULT);
+dec_objset_optional(N, 'OPTIONAL') ->
+ dec_objset_optional_1(N, asn1_NOVALUE);
+dec_objset_optional(_N, mandatory) -> ok.
+
+dec_objset_optional_1(N, Val) ->
+ emit([{asis,N},"(",{asis,Val},", _Id) ->",nl,
+ {asis,Val},";",nl]).
+
+dec_objset(_Erule, _N, [], _, _) ->
+ ok;
+dec_objset(Erule, N, [Obj|Objs], RestFields, Cl) ->
+ dec_objset_1(Erule, N, Obj, RestFields, Cl),
+ emit([";",nl]),
+ dec_objset(Erule, N, Objs, RestFields, Cl).
+
+dec_objset_default(N, C, LeadingAttr, false) ->
+ emit([{asis,N},"(Bytes, Id) ->",nl,
+ "exit({'Type not compatible with table constraint',"
+ "{{component,",{asis,C},"},"
+ "{value,Bytes},"
+ "{unique_name_and_value,",{asis,LeadingAttr},",Id}}}).",nl,nl]);
+dec_objset_default(N, _, _, true) ->
+ emit([{asis,N},"(Bytes, Id) ->",nl,
+ "Bytes.",nl,nl]).
+
+dec_objset_1(Erule, N, {Id,Obj}, RestFields, Typename) ->
+ emit([{asis,N},"(Bytes, ",{asis,Id},") ->",nl]),
+ dec_objset_2(Erule, Obj, RestFields, Typename).
+
+dec_objset_2(Erule, Obj, RestFields0, Typename) ->
+ case Obj of
+ #typedef{name={primitive,bif},typespec=Type} ->
+ Imm = asn1ct_gen_per:gen_dec_imm(Erule, Type),
+ {Term,_} = asn1ct_imm:dec_slim_cg(Imm, 'Bytes'),
+ emit([com,nl,Term]);
+ #typedef{name={constructed,bif},typespec=Def} ->
+ InnerType = asn1ct_gen:get_inner(Def#type.def),
+ case InnerType of
+ 'CHOICE' ->
+ asn1ct_name:start(),
+ asn1ct_name:new(bytes),
+ {'CHOICE',CompList} = Def#type.def,
+ Ext = extensible_enc(CompList),
+ emit(["{Result,_} = begin",nl]),
+ gen_dec_choice(Erule, Typename, CompList, Ext),
+ emit([nl,
+ "end",com,nl,
+ "Result"]);
+ 'SET' ->
+ Imm0 = gen_dec_constructed_imm(Erule, Typename, Def),
+ Imm = opt_imm(Imm0),
+ asn1ct_name:start(),
+ emit(["{Result,_} = begin",nl]),
+ emit_gen_dec_imm(Imm),
+ emit([nl,
+ "end",com,nl,
+ "Result"]);
+ 'SET OF' ->
+ asn1ct_name:start(),
+ do_gen_decode_sof(Erule, Typename, 'SET OF',
+ Def, false);
+ 'SEQUENCE' ->
+ Imm0 = gen_dec_constructed_imm(Erule, Typename, Def),
+ Imm = opt_imm(Imm0),
+ asn1ct_name:start(),
+ emit(["{Result,_} = begin",nl]),
+ emit_gen_dec_imm(Imm),
+ emit([nl,
+ "end",com,nl,
+ "Result"]);
+ 'SEQUENCE OF' ->
+ asn1ct_name:start(),
+ do_gen_decode_sof(Erule, Typename, 'SEQUENCE OF',
+ Def, false)
+ end;
+ #typedef{name=Type} ->
+ emit(["{Result,_} = ",{asis,enc_func("dec_", Type)},"(Bytes),",nl,
+ "Result"]);
+ #'Externaltypereference'{module=Mod,type=Type} ->
+ emit("{Term,_} = "),
+ Func = enc_func("dec_", Type),
+ case get(currmod) of
+ Mod ->
+ emit([{asis,Func},"(Bytes)"]);
+ _ ->
+ emit([{asis,Mod},":",{asis,Func},"(Bytes)"])
+ end,
+ emit([com,nl,
+ "Term"]);
+ #'Externalvaluereference'{module=Mod,value=Value} ->
+ case asn1_db:dbget(Mod, Value) of
+ #typedef{typespec=#'Object'{def=Def}} ->
+ {object,_,Fields} = Def,
+ [NextField|RestFields] = RestFields0,
+ {NextField,Typedef} = lists:keyfind(NextField, 1, Fields),
+ dec_objset_2(Erule, Typedef, RestFields, Typename)
+ end
+ end.
- N = case Prop of
- mandatory -> 0;
- 'OPTIONAL' ->
- emit_opt_or_mand_check(asn1_NOVALUE,TmpTerm),
- 6;
- {'DEFAULT',Val} ->
- emit_opt_or_mand_check(Val,TmpTerm),
- 6
- end,
+gen_encode_choice(Erule, TopType, D) ->
+ asn1ct_name:start(),
+ Imm = gen_encode_choice_imm(Erule, TopType, D),
+ asn1ct_imm:enc_cg(Imm, is_aligned(Erule)),
+ emit([".",nl]).
- emit([indent(N+3),"case (catch ",DecObj,"(",
- {asis,FirstPFN},", ",TmpTerm,", telltype,",{asis,PFNList},")) of",nl]),
- emit([indent(N+6),"{'EXIT', ",{curr,reason},"} ->",nl]),
- emit([indent(N+9),"exit({'Type not compatible with table constraint',",
- {curr,reason},"});",nl]),
- emit([indent(N+6),"{",{curr,tmpterm},",_} ->",nl]),
- emit([indent(N+9),{curr,tmpterm},nl]),
-
- case Prop of
- mandatory ->
- emit([indent(N+3),"end,",nl]);
- _ ->
- emit([indent(N+3),"end",nl,
- indent(3),"end,",nl])
- end,
- gen_dec_listofopentypes(DecObj,Rest,true).
-
-
-emit_opt_or_mand_check(Val,Term) ->
- emit([indent(3),"case ",Term," of",nl,
- indent(6),{asis,Val}," ->",{asis,Val},";",nl,
- indent(6),"_ ->",nl]).
-
-%% ENCODE GENERATOR FOR THE CHOICE TYPE *******
-%% assume Val = {Alternative,AltType}
-%% generate
-%%[
-%% ?RT_PER:set_choice(element(1,Val),Altnum,Altlist,ext),
-%%case element(1,Val) of
-%% alt1 ->
-%% encode_alt1(element(2,Val));
-%% alt2 ->
-%% encode_alt2(element(2,Val))
-%%end
-%%].
-
-gen_encode_choice(Erule,Typename,D) when is_record(D,type) ->
- {'CHOICE',CompList} = D#type.def,
- emit({"[",nl}),
+gen_encode_choice_imm(Erule, TopType, #type{def={'CHOICE',CompList}}) ->
Ext = extensible_enc(CompList),
- gen_enc_choice(Erule,Typename,CompList,Ext),
- emit({nl,"].",nl}).
+ Aligned = is_aligned(Erule),
+ Cs = gen_enc_choice(Erule, TopType, CompList, Ext),
+ [{assign,{expr,"{ChoiceTag,ChoiceVal}"},"Val"}|
+ asn1ct_imm:per_enc_choice('ChoiceTag', Cs, Aligned)].
gen_decode_choice(Erules,Typename,D) when is_record(D,type) ->
asn1ct_name:start(),
@@ -496,72 +553,48 @@ gen_decode_choice(Erules,Typename,D) when is_record(D,type) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Encode generator for SEQUENCE OF type
-
-gen_encode_sof(Erule,Typename,SeqOrSetOf,D) when is_record(D,type) ->
+gen_encode_sof(Erule, Typename, SeqOrSetOf, D) ->
asn1ct_name:start(),
- {_SeqOrSetOf,ComponentType} = D#type.def,
- emit({"[",nl}),
- SizeConstraint = asn1ct_imm:effective_constraint(bitstring,
- D#type.constraint),
- ObjFun =
- case D#type.tablecinf of
- [{objfun,_}|_R] ->
- ", ObjFun";
- _->
- ""
- end,
- gen_encode_length(Erule, SizeConstraint),
- emit({indent(3),"'enc_",asn1ct_gen:list2name(Typename),
- "_components'(Val",ObjFun,", [])"}),
- emit({nl,"].",nl}),
- gen_encode_sof_components(Erule, Typename, SeqOrSetOf, ComponentType).
-
-
-%% Logic copied from asn1_per_bin_rt2ct:encode_constrained_number
-gen_encode_length(per, {Lb,Ub}) when Ub =< 65535, Lb >= 0 ->
- Range = Ub - Lb + 1,
- V2 = ["(length(Val) - ",Lb,")"],
- Encode = if
- Range == 1 ->
- "[]";
- Range == 2 ->
- {"[",V2,"]"};
- Range =< 4 ->
- {"[10,2,",V2,"]"};
- Range =< 8 ->
- {"[10,3,",V2,"]"};
- Range =< 16 ->
- {"[10,4,",V2,"]"};
- Range =< 32 ->
- {"[10,5,",V2,"]"};
- Range =< 64 ->
- {"[10,6,",V2,"]"};
- Range =< 128 ->
- {"[10,7,",V2,"]"};
- Range =< 255 ->
- {"[10,8,",V2,"]"};
- Range =< 256 ->
- {"[20,1,",V2,"]"};
- Range =< 65536 ->
- {"[20,2,<<",V2,":16>>]"};
- true ->
- {call,per,encode_length,
- [{asis,{Lb,Ub}},"length(Val)"]}
- end,
- emit({nl,Encode,",",nl});
-gen_encode_length(Erules, SizeConstraint) ->
- emit([nl,indent(3),
- case SizeConstraint of
- no ->
- {call,Erules,encode_length,["length(Val)"]};
- _ ->
- {call,Erules,encode_length,
- [{asis,SizeConstraint},"length(Val)"]}
- end,
- com,nl]).
+ Imm = gen_encode_sof_imm(Erule, Typename, SeqOrSetOf, D),
+ asn1ct_imm:enc_cg(Imm, is_aligned(Erule)),
+ emit([".",nl,nl]).
-gen_decode_sof(Erules,Typename,SeqOrSetOf,D) when is_record(D,type) ->
+gen_encode_sof_imm(Erule, Typename, SeqOrSetOf, #type{}=D) ->
+ {_SeqOrSetOf,ComponentType} = D#type.def,
+ Aligned = is_aligned(Erule),
+ Constructed_Suffix =
+ asn1ct_gen:constructed_suffix(SeqOrSetOf,
+ ComponentType#type.def),
+ Conttype = asn1ct_gen:get_inner(ComponentType#type.def),
+ Currmod = get(currmod),
+ Imm0 = case asn1ct_gen:type(Conttype) of
+ {primitive,bif} ->
+ asn1ct_gen_per:gen_encode_prim_imm('Comp', ComponentType, Aligned);
+ {constructed,bif} ->
+ TypeName = [Constructed_Suffix|Typename],
+ Enc = enc_func(asn1ct_gen:list2name(TypeName)),
+ ObjArg = case D#type.tablecinf of
+ [{objfun,_}|_] -> [{var,"ObjFun"}];
+ _ -> []
+ end,
+ [{apply,Enc,[{var,"Comp"}|ObjArg]}];
+ #'Externaltypereference'{module=Currmod,type=Ename} ->
+ [{apply,enc_func(Ename),[{var,"Comp"}]}];
+ #'Externaltypereference'{module=EMod,type=Ename} ->
+ [{apply,{EMod,enc_func(Ename)},[{var,"Comp"}]}];
+ 'ASN1_OPEN_TYPE' ->
+ asn1ct_gen_per:gen_encode_prim_imm('Comp',
+ #type{def='ASN1_OPEN_TYPE'},
+ Aligned)
+ end,
+ asn1ct_imm:per_enc_sof('Val', D#type.constraint, 'Comp', Imm0, Aligned).
+
+gen_decode_sof(Erules, Typename, SeqOrSetOf, #type{}=D) ->
asn1ct_name:start(),
+ do_gen_decode_sof(Erules, Typename, SeqOrSetOf, D, true),
+ emit([".",nl,nl]).
+
+do_gen_decode_sof(Erules, Typename, SeqOrSetOf, D, NeedRest) ->
{_SeqOrSetOf,ComponentType} = D#type.def,
SizeConstraint = asn1ct_imm:effective_constraint(bitstring,
D#type.constraint),
@@ -573,10 +606,16 @@ gen_decode_sof(Erules,Typename,SeqOrSetOf,D) when is_record(D,type) ->
""
end,
{Num,Buf} = gen_decode_length(SizeConstraint, Erules),
+ Key = erlang:md5(term_to_binary({Typename,SeqOrSetOf,
+ ComponentType,NeedRest})),
+ Gen = fun(_Fd, Name) ->
+ gen_decode_sof_components(Erules, Name,
+ Typename, SeqOrSetOf,
+ ComponentType, NeedRest)
+ end,
+ F = asn1ct_func:call_gen("dec_components", Key, Gen),
emit([",",nl,
- "'dec_",asn1ct_gen:list2name(Typename),
- "_components'(",Num,", ",Buf,ObjFun,", []).",nl,nl]),
- gen_decode_sof_components(Erules, Typename, SeqOrSetOf, ComponentType).
+ {asis,F},"(",Num,", ",Buf,ObjFun,", [])"]).
is_aligned(per) -> true;
is_aligned(uper) -> false.
@@ -586,7 +625,7 @@ gen_decode_length(Constraint, Erule) ->
Imm = asn1ct_imm:per_dec_length(Constraint, true, is_aligned(Erule)),
asn1ct_imm:dec_slim_cg(Imm, "Bytes").
-gen_encode_sof_components(Erule,Typename,SeqOrSetOf,Cont) ->
+gen_decode_sof_components(Erule, Name, Typename, SeqOrSetOf, Cont, NeedRest) ->
{ObjFun,ObjFun_Var} =
case Cont#type.tablecinf of
[{objfun,_}|_R] ->
@@ -594,76 +633,38 @@ gen_encode_sof_components(Erule,Typename,SeqOrSetOf,Cont) ->
_ ->
{"",""}
end,
- emit({"'enc_",asn1ct_gen:list2name(Typename),"_components'([]",
- ObjFun_Var,", Acc) -> lists:reverse(Acc);",nl,nl}),
- emit({"'enc_",asn1ct_gen:list2name(Typename),"_components'([H|T]",
- ObjFun,", Acc) ->",nl}),
- emit({"'enc_",asn1ct_gen:list2name(Typename),"_components'(T"}),
- emit({ObjFun,", ["}),
- %% the component encoder
- Constructed_Suffix = asn1ct_gen:constructed_suffix(SeqOrSetOf,
- Cont#type.def),
-
- Conttype = asn1ct_gen:get_inner(Cont#type.def),
- Currmod = get(currmod),
- case asn1ct_gen:type(Conttype) of
- {primitive,bif} ->
- asn1ct_gen_per:gen_encode_prim(Erule, Cont, "H");
- {constructed,bif} ->
- NewTypename = [Constructed_Suffix|Typename],
- emit({"'enc_",asn1ct_gen:list2name(NewTypename),"'(H",
- ObjFun,")",nl,nl});
- #'Externaltypereference'{module=Currmod,type=Ename} ->
- emit({"'enc_",Ename,"'(H)",nl,nl});
- #'Externaltypereference'{module=EMod,type=EType} ->
- emit({"'",EMod,"':'enc_",EType,"'(H)",nl,nl});
- 'ASN1_OPEN_TYPE' ->
- asn1ct_gen_per:gen_encode_prim(Erule,
- #type{def='ASN1_OPEN_TYPE'},
- "H");
- _ ->
- emit({"'enc_",Conttype,"'(H)",nl,nl})
+ case NeedRest of
+ false ->
+ emit([{asis,Name},"(0, _Bytes",ObjFun_Var,", Acc) ->",nl,
+ "lists:reverse(Acc);",nl]);
+ true ->
+ emit([{asis,Name},"(0, Bytes",ObjFun_Var,", Acc) ->",nl,
+ "{lists:reverse(Acc),Bytes};",nl])
end,
- emit({" | Acc]).",nl}).
-
-gen_decode_sof_components(Erule,Typename,SeqOrSetOf,Cont) ->
- {ObjFun,ObjFun_Var} =
- case Cont#type.tablecinf of
- [{objfun,_}|_R] ->
- {", ObjFun",", _"};
- _ ->
- {"",""}
- end,
- emit({"'dec_",asn1ct_gen:list2name(Typename),
- "_components'(0, Bytes",ObjFun_Var,", Acc) ->",nl,
- indent(3),"{lists:reverse(Acc), Bytes};",nl}),
- emit({"'dec_",asn1ct_gen:list2name(Typename),
- "_components'(Num, Bytes",ObjFun,", Acc) ->",nl}),
- emit({indent(3),"{Term,Remain} = "}),
+ emit([{asis,Name},"(Num, Bytes",ObjFun,", Acc) ->",nl,
+ "{Term,Remain} = "]),
Constructed_Suffix = asn1ct_gen:constructed_suffix(SeqOrSetOf,
Cont#type.def),
Conttype = asn1ct_gen:get_inner(Cont#type.def),
- Ctgenmod = asn1ct_gen:ct_gen_module(Erule),
case asn1ct_gen:type(Conttype) of
{primitive,bif} ->
- Ctgenmod:gen_dec_prim(Erule,Cont,"Bytes"),
+ asn1ct_gen_per:gen_dec_prim(Erule, Cont, "Bytes"),
emit({com,nl});
{constructed,bif} ->
NewTypename = [Constructed_Suffix|Typename],
emit({"'dec_",asn1ct_gen:list2name(NewTypename),
- "'(Bytes, telltype",ObjFun,"),",nl});
+ "'(Bytes",ObjFun,"),",nl});
#'Externaltypereference'{}=Etype ->
asn1ct_gen_per:gen_dec_external(Etype, "Bytes"),
emit([com,nl]);
'ASN1_OPEN_TYPE' ->
- Ctgenmod:gen_dec_prim(Erule,#type{def='ASN1_OPEN_TYPE'},
- "Bytes"),
+ asn1ct_gen_per:gen_dec_prim(Erule, #type{def='ASN1_OPEN_TYPE'},
+ "Bytes"),
emit({com,nl});
_ ->
- emit({"'dec_",Conttype,"'(Bytes,telltype),",nl})
+ emit({"'dec_",Conttype,"'(Bytes),",nl})
end,
- emit({indent(3),"'dec_",asn1ct_gen:list2name(Typename),
- "_components'(Num-1, Remain",ObjFun,", [Term|Acc]).",nl}).
+ emit([{asis,Name},"(Num-1, Remain",ObjFun,", [Term|Acc]).",nl]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -754,27 +755,6 @@ gen_dec_optionals(Optionals) ->
end,
{imm,Imm0,E}.
-gen_fixoptionals([{Pos,Def}|R]) ->
- asn1ct_name:new(fixopt),
- emit({{curr,fixopt}," = case element(",{asis,Pos},",",{curr,val},") of",nl,
- "asn1_DEFAULT -> 0;",nl,
- {asis,Def}," -> 0;",nl,
- "_ -> 1",nl,
- "end,",nl}),
- gen_fixoptionals(R);
-gen_fixoptionals([Pos|R]) ->
- gen_fixoptionals([{Pos,asn1_NOVALUE}|R]);
-gen_fixoptionals([]) ->
- ok.
-
-
-param_map(Fun, [H]) ->
- [Fun(H)];
-param_map(Fun, [H|T]) ->
- [Fun(H),","|param_map(Fun,T)].
-
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Produce a list with positions (in the Value record) where
%% there are optional components, start with 2 because first element
@@ -788,15 +768,13 @@ optionals({L1,Ext,L2}) ->
optionals({L,_Ext}) -> optionals(L,[],2);
optionals(L) -> optionals(L,[],2).
-optionals([{'EXTENSIONMARK',_,_}|Rest],Acc,Pos) ->
- optionals(Rest,Acc,Pos); % optionals in extension are currently not handled
-optionals([#'ComponentType'{prop='OPTIONAL'}|Rest],Acc,Pos) ->
- optionals(Rest,[Pos|Acc],Pos+1);
-optionals([#'ComponentType'{prop={'DEFAULT',Val}}|Rest],Acc,Pos) ->
- optionals(Rest,[{Pos,Val}|Acc],Pos+1);
-optionals([#'ComponentType'{}|Rest],Acc,Pos) ->
- optionals(Rest,Acc,Pos+1);
-optionals([],Acc,_) ->
+optionals([#'ComponentType'{prop='OPTIONAL'}|Rest], Acc, Pos) ->
+ optionals(Rest, [Pos|Acc], Pos+1);
+optionals([#'ComponentType'{prop={'DEFAULT',Val}}|Rest], Acc, Pos) ->
+ optionals(Rest, [{Pos,Val}|Acc], Pos+1);
+optionals([#'ComponentType'{}|Rest], Acc, Pos) ->
+ optionals(Rest, Acc, Pos+1);
+optionals([], Acc, _) ->
lists:reverse(Acc).
%%%%%%%%%%%%%%%%%%%%%%
@@ -858,33 +836,32 @@ add_textual_order1(Cs,NumIn) ->
end,
NumIn,Cs).
-gen_enc_components_call(Erule,TopType,{Root,ExtList},MaybeComma,DynamicEnc,Ext) ->
- gen_enc_components_call(Erule,TopType,{Root,ExtList,[]},MaybeComma,DynamicEnc,Ext);
-gen_enc_components_call(Erule,TopType,CL={Root,ExtList,Root2},MaybeComma,DynamicEnc,Ext) ->
+gen_enc_components_call(Erule,TopType,{Root,ExtList}, DynamicEnc,Ext) ->
+ gen_enc_components_call(Erule,TopType,{Root,ExtList,[]}, DynamicEnc,Ext);
+gen_enc_components_call(Erule,TopType,CL={Root,ExtList,Root2}, DynamicEnc,Ext) ->
%% The type has extensionmarker
- Rpos = gen_enc_components_call1(Erule,TopType,Root++Root2,1,MaybeComma,DynamicEnc,noext),
- case Ext of
- {ext,_,ExtNum} when ExtNum > 0 ->
- emit([nl,
- ",Extensions",nl]);
-
- _ -> true
- end,
+ {Imm0,Rpos} = gen_enc_components_call1(Erule,TopType,Root++Root2,1, DynamicEnc,noext,[]),
+ ExtImm = case Ext of
+ {ext,_,ExtNum} when ExtNum > 0 ->
+ [{var,"Extensions"}];
+ _ ->
+ []
+ end,
%handle extensions
{extgrouppos,ExtGroupPosLen} = extgroup_pos_and_length(CL),
NewExtList = wrap_extensionAdditionGroups(ExtList,ExtGroupPosLen),
- gen_enc_components_call1(Erule,TopType,NewExtList,Rpos,MaybeComma,DynamicEnc,Ext);
-gen_enc_components_call(Erule,TopType, CompList, MaybeComma, DynamicEnc, Ext) ->
+ {Imm1,_} = gen_enc_components_call1(Erule,TopType,NewExtList,Rpos,DynamicEnc,Ext,[]),
+ Imm0 ++ [ExtImm|Imm1];
+gen_enc_components_call(Erule,TopType, CompList, DynamicEnc, Ext) ->
%% The type has no extensionmarker
- gen_enc_components_call1(Erule,TopType,CompList,1,MaybeComma,DynamicEnc,Ext).
+ {Imm,_} = gen_enc_components_call1(Erule,TopType,CompList,1,DynamicEnc,Ext,[]),
+ Imm.
gen_enc_components_call1(Erule,TopType,
[C=#'ComponentType'{name=Cname,typespec=Type,prop=Prop}|Rest],
Tpos,
- MaybeComma, DynamicEnc, Ext) ->
+ DynamicEnc, Ext, Acc) ->
- put(component_type,{true,C}),
- %% information necessary in asn1ct_gen_per_rt2ct:gen_encode_prim
TermNo =
case C#'ComponentType'.textual_order of
undefined ->
@@ -892,90 +869,48 @@ gen_enc_components_call1(Erule,TopType,
CanonicalNum ->
CanonicalNum
end,
- emit(MaybeComma),
- case Prop of
- 'OPTIONAL' ->
- gen_enc_component_optional(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext);
- {'DEFAULT',DefVal} ->
- gen_enc_component_default(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext,DefVal);
+ Element0 = make_element(TermNo+1, asn1ct_gen:mk_var(asn1ct_name:curr(val))),
+ {Imm0,Element} = asn1ct_imm:enc_bind_var(Element0),
+ Imm1 = gen_enc_line_imm(Erule, TopType, Cname, Type, Element, DynamicEnc, Ext),
+ Category = case {Prop,Ext} of
+ {'OPTIONAL',_} ->
+ optional;
+ {{'DEFAULT',DefVal},_} ->
+ {default,DefVal};
+ {_,{ext,ExtPos,_}} when Tpos >= ExtPos ->
+ optional;
+ {_,_} ->
+ mandatory
+ end,
+ Imm2 = case Category of
+ mandatory ->
+ Imm1;
+ optional ->
+ asn1ct_imm:enc_absent(Element, [asn1_NOVALUE], Imm1);
+ {default,Def} ->
+ asn1ct_imm:enc_absent(Element, [asn1_DEFAULT,Def], Imm1)
+ end,
+ Imm = case Imm2 of
+ [] -> [];
+ _ -> Imm0 ++ Imm2
+ end,
+ gen_enc_components_call1(Erule, TopType, Rest, Tpos+1, DynamicEnc, Ext, [Imm|Acc]);
+gen_enc_components_call1(_Erule,_TopType,[],Pos,_,_, Acc) ->
+ ImmList = lists:reverse(Acc),
+ {ImmList,Pos}.
+
+gen_enc_line_imm(Erule, TopType, Cname, Type, Element, DynamicEnc, Ext) ->
+ Imm0 = gen_enc_line_imm_1(Erule, TopType, Cname, Type,
+ Element, DynamicEnc),
+ Aligned = is_aligned(Erule),
+ case Ext of
+ {ext,_Ep2,_} ->
+ asn1ct_imm:per_enc_open_type(Imm0, Aligned);
_ ->
- case Ext of
- {ext,ExtPos,_} when Tpos >= ExtPos ->
- gen_enc_component_optional(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext);
- _ ->
- gen_enc_component_mandatory(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext)
- end
- end,
-
- erase(component_type),
+ Imm0
+ end.
- case Rest of
- [] ->
- Tpos+1;
- _ ->
- emit({com,nl}),
- gen_enc_components_call1(Erule,TopType,Rest,Tpos+1,"",DynamicEnc,Ext)
- end;
-gen_enc_components_call1(_Erule,_TopType,[],Pos,_,_,_) ->
- Pos.
-
-gen_enc_component_default(Erule,TopType,Cname,Type,Pos,DynamicEnc,Ext,DefaultVal) ->
- Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))),
- emit({"case ",Element," of",nl}),
-% emit({"asn1_DEFAULT -> [];",nl}),
- emit({"DFLT when DFLT == asn1_DEFAULT; DFLT == ",{asis,DefaultVal}," -> [];",nl}),
-
- asn1ct_name:new(tmpval),
- emit({{curr,tmpval}," ->",nl}),
- InnerType = asn1ct_gen:get_inner(Type#type.def),
- emit({nl,"%% attribute number ",Pos," with type ",
- InnerType,nl}),
- NextElement = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)),
- gen_enc_line(Erule,TopType,Cname,Type,NextElement, Pos,DynamicEnc,Ext),
- emit({nl,"end"}).
-
-gen_enc_component_optional(Erule,TopType,Cname,
- Type=#type{def=#'SEQUENCE'{
- extaddgroup=Number,
- components=_ExtGroupCompList}},
- Pos,DynamicEnc,Ext) when is_integer(Number) ->
-
- Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))),
- emit({"case ",Element," of",nl}),
-
- emit({"asn1_NOVALUE -> [];",nl}),
- asn1ct_name:new(tmpval),
- emit({{curr,tmpval}," ->",nl}),
- InnerType = asn1ct_gen:get_inner(Type#type.def),
- emit({nl,"%% attribute number ",Pos," with type ",
- InnerType,nl}),
- NextElement = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)),
- gen_enc_line(Erule,TopType,Cname,Type,NextElement, Pos,DynamicEnc,Ext),
- emit({nl,"end"});
-gen_enc_component_optional(Erule,TopType,Cname,Type,Pos,DynamicEnc,Ext) ->
- Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))),
- emit({"case ",Element," of",nl}),
-
- emit({"asn1_NOVALUE -> [];",nl}),
- asn1ct_name:new(tmpval),
- emit({{curr,tmpval}," ->",nl}),
- InnerType = asn1ct_gen:get_inner(Type#type.def),
- emit({nl,"%% attribute number ",Pos," with type ",
- InnerType,nl}),
- NextElement = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)),
- gen_enc_line(Erule,TopType,Cname,Type,NextElement, Pos,DynamicEnc,Ext),
- emit({nl,"end"}).
-
-gen_enc_component_mandatory(Erule,TopType,Cname,Type,Pos,DynamicEnc,Ext) ->
- InnerType = asn1ct_gen:get_inner(Type#type.def),
- emit({nl,"%% attribute number ",Pos," with type ",
- InnerType,nl}),
- gen_enc_line(Erule,TopType,Cname,Type,[],Pos,DynamicEnc,Ext).
-
-gen_enc_line(Erule,TopType, Cname, Type, [], Pos,DynamicEnc,Ext) ->
- Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))),
- gen_enc_line(Erule,TopType,Cname,Type,Element, Pos,DynamicEnc,Ext);
-gen_enc_line(Erule,TopType,Cname,Type,Element, _Pos,DynamicEnc,Ext) ->
+gen_enc_line_imm_1(Erule, TopType, Cname, Type, Element, DynamicEnc) ->
Atype =
case Type of
#type{def=#'ObjectClassFieldType'{type=InnerType}} ->
@@ -983,81 +918,157 @@ gen_enc_line(Erule,TopType,Cname,Type,Element, _Pos,DynamicEnc,Ext) ->
_ ->
asn1ct_gen:get_inner(Type#type.def)
end,
-
- case Ext of
- {ext,_Ep1,_} ->
- asn1ct_func:need({Erule,encode_open_type,1}),
- asn1ct_func:need({Erule,complete,1}),
- emit(["encode_open_type(complete("]);
- _ -> true
- end,
-
+ Aligned = is_aligned(Erule),
case Atype of
{typefield,_} ->
- case DynamicEnc of
- {_LeadingAttrName,Fun} ->
- case (Type#type.def)#'ObjectClassFieldType'.fieldname of
- {Name,RestFieldNames} when is_atom(Name) ->
- asn1ct_func:need({Erule,complete,1}),
- asn1ct_func:need({Erule,encode_open_type,1}),
- emit({"encode_open_type(complete(",nl}),
- emit({" ",Fun,"(",{asis,Name},", ",
- Element,", ",{asis,RestFieldNames},")))"});
- Other ->
- throw({asn1,{'internal error',Other}})
- end
- end;
- {objectfield,PrimFieldName1,PFNList} ->
- case DynamicEnc of
- {_LeadingAttrName,Fun} ->
- asn1ct_func:need({Erule,complete,1}),
- asn1ct_func:need({Erule,encode_open_type,1}),
- emit({"encode_open_type("
- "complete(",nl}),
- emit({" ",Fun,"(",{asis,PrimFieldName1},
- ", ",Element,", ",{asis,PFNList},")))"})
+ {_LeadingAttrName,Fun} = DynamicEnc,
+ case (Type#type.def)#'ObjectClassFieldType'.fieldname of
+ {Name,RestFieldNames} when is_atom(Name) ->
+ Imm = enc_var_type_call(Erule, Name, RestFieldNames,
+ Type, Fun, Element),
+ asn1ct_imm:per_enc_open_type(Imm, Aligned)
end;
_ ->
CurrMod = get(currmod),
case asn1ct_gen:type(Atype) of
- #'Externaltypereference'{module=Mod,type=EType} when
- (CurrMod==Mod) ->
- emit({"'enc_",EType,"'(",Element,")"});
+ #'Externaltypereference'{module=CurrMod,type=EType} ->
+ [{apply,enc_func(EType),[{expr,Element}]}];
#'Externaltypereference'{module=Mod,type=EType} ->
- emit({"'",Mod,"':'enc_",
- EType,"'(",Element,")"});
+ [{apply,{Mod,enc_func(EType)},[{expr,Element}]}];
{primitive,bif} ->
- asn1ct_gen_per:gen_encode_prim(Erule, Type, Element);
+ asn1ct_gen_per:gen_encode_prim_imm(Element, Type, Aligned);
'ASN1_OPEN_TYPE' ->
case Type#type.def of
#'ObjectClassFieldType'{type=OpenType} ->
- asn1ct_gen_per:gen_encode_prim(Erule,
- #type{def=OpenType},
- Element);
+ asn1ct_gen_per:gen_encode_prim_imm(Element,
+ #type{def=OpenType},
+ Aligned);
_ ->
- asn1ct_gen_per:gen_encode_prim(Erule, Type,
- Element)
+ asn1ct_gen_per:gen_encode_prim_imm(Element,
+ Type,
+ Aligned)
end;
{constructed,bif} ->
NewTypename = [Cname|TopType],
+ Enc = enc_func(asn1ct_gen:list2name(NewTypename)),
case {Type#type.tablecinf,DynamicEnc} of
{[{objfun,_}|_R],{_,EncFun}} ->
- emit({"'enc_",
- asn1ct_gen:list2name(NewTypename),
- "'(",Element,", ",EncFun,")"});
+ [{apply,Enc,[{expr,Element},{var,EncFun}]}];
_ ->
- emit({"'enc_",
- asn1ct_gen:list2name(NewTypename),
- "'(",Element,")"})
+ [{apply,Enc,[{expr,Element}]}]
end
end
- end,
- case Ext of
- {ext,_Ep2,_} ->
- emit("))");
- _ -> true
end.
+enc_func(Type) ->
+ enc_func("enc_", Type).
+
+enc_func(Prefix, Name) ->
+ list_to_atom(lists:concat([Prefix,Name])).
+
+enc_var_type_call(Erule, Name, RestFieldNames,
+ #type{tablecinf=TCI}, Fun, Val) ->
+ [{objfun,#'Externaltypereference'{module=Xmod,type=Xtype}}] = TCI,
+ #typedef{typespec=ObjSet0} = asn1_db:dbget(Xmod, Xtype),
+ #'ObjectSet'{class=Class,set=ObjSet1} = ObjSet0,
+ #'Externaltypereference'{module=ClMod,type=ClType} = Class,
+ #classdef{typespec=ClassDef} = asn1_db:dbget(ClMod, ClType),
+ #objectclass{fields=ClassFields} = ClassDef,
+ Extensible = lists:member('EXTENSIONMARK', ObjSet1),
+ ObjSet2 = [{Key,fix_object_code(Name, Code, ClassFields)} ||
+ {_,Key,Code} <- ObjSet1],
+ ObjSet = lists:sort([P || {_,B}=P <- ObjSet2, B =/= none]),
+ Key = erlang:md5(term_to_binary({encode,ObjSet,RestFieldNames,Extensible})),
+ Gen = fun(_Fd, N) ->
+ enc_objset(Erule, Name, N, ObjSet,
+ RestFieldNames, Extensible)
+ end,
+ Prefix = lists:concat(["enc_os_",Name]),
+ F = asn1ct_func:call_gen(Prefix, Key, Gen),
+ [{apply,F,[{var,atom_to_list(Val)},{var,Fun}]}].
+
+fix_object_code(Name, [{Name,B}|_], _ClassFields) ->
+ B;
+fix_object_code(Name, [_|T], ClassFields) ->
+ fix_object_code(Name, T, ClassFields);
+fix_object_code(Name, [], ClassFields) ->
+ case lists:keyfind(Name, 2, ClassFields) of
+ {typefield,Name,'OPTIONAL'} ->
+ none;
+ {objectfield,Name,_,_,'OPTIONAL'} ->
+ none;
+ {typefield,Name,{'DEFAULT',#type{}=Type}} ->
+ InnerType = asn1ct_gen:get_inner(Type#type.def),
+ case asn1ct_gen:type(InnerType) of
+ {primitive,bif} ->
+ #typedef{name={primitive,bif},typespec=Type};
+ {constructed,bif} ->
+ #typedef{name={constructed,bif},typespec=Type}
+ end
+ end.
+
+
+enc_objset(Erule, Component, Name, ObjSet, RestFieldNames, Extensible) ->
+ asn1ct_name:start(),
+ Aligned = is_aligned(Erule),
+ E = {error,
+ fun() ->
+ emit(["exit({'Type not compatible with table constraint',"
+ "{component,",{asis,Component},"},"
+ "{value,Val},"
+ "{unique_name_and_value,'_'}})",nl])
+ end},
+ Imm = [{'cond',
+ [[{eq,{var,"Id"},Key}|
+ enc_obj(Erule, Obj, RestFieldNames, Aligned)] ||
+ {Key,Obj} <- ObjSet] ++
+ [['_',case Extensible of
+ false -> E;
+ true -> {put_bits,{var,"Val"},binary,[1]}
+ end]]}],
+ emit([{asis,Name},"(Val, Id) ->",nl]),
+ asn1ct_imm:enc_cg(Imm, Aligned),
+ emit([".",nl]).
+
+enc_obj(Erule, Obj, RestFieldNames0, Aligned) ->
+ case Obj of
+ #typedef{name={primitive,bif},typespec=Def} ->
+ asn1ct_gen_per:gen_encode_prim_imm('Val', Def, Aligned);
+ #typedef{name={constructed,bif},typespec=Def} ->
+ InnerType = asn1ct_gen:get_inner(Def#type.def),
+ case InnerType of
+ 'CHOICE' ->
+ gen_encode_choice_imm(Erule, name, Def);
+ 'SET' ->
+ gen_encode_constructed_imm(Erule, name, Def);
+ 'SET OF' ->
+ gen_encode_sof_imm(Erule, name, InnerType, Def);
+ 'SEQUENCE' ->
+ gen_encode_constructed_imm(Erule, name, Def);
+ 'SEQUENCE OF' ->
+ gen_encode_sof_imm(Erule, name, InnerType, Def)
+ end;
+ #typedef{name=Type} ->
+ [{apply,enc_func(Type),[{var,"Val"}]}];
+ #'Externalvaluereference'{module=Mod,value=Value} ->
+ case asn1_db:dbget(Mod, Value) of
+ #typedef{typespec=#'Object'{def=Def}} ->
+ {object,_,Fields} = Def,
+ [NextField|RestFieldNames] = RestFieldNames0,
+ {NextField,Typedef} = lists:keyfind(NextField, 1, Fields),
+ enc_obj(Erule, Typedef, RestFieldNames, Aligned)
+ end;
+ #'Externaltypereference'{module=Mod,type=Type} ->
+ Func = enc_func(Type),
+ case get(currmod) of
+ Mod ->
+ [{apply,Func,[{var,"Val"}]}];
+ _ ->
+ [{apply,{Mod,Func},[{var,"Val"}]}]
+ end
+ end.
+
+
gen_dec_components_call(Erule, TopType, {Root,ExtList},
DecInfObj, Ext, NumberOfOptionals) ->
gen_dec_components_call(Erule,TopType,{Root,ExtList,[]},
@@ -1163,14 +1174,6 @@ gen_dec_comp_call(Comp, Erule, TopType, Tpos, OptTable, DecInfObj,
emit(["{",{curr,tmpterm},", ",{next,bytes},"} = "]),
St
end;
- %%{objectfield,_,_} when Ext == noext, Prop == mandatory ->
- {{objectfield,_,_},true} ->
- fun(St) ->
- asn1ct_name:new(term),
- asn1ct_name:new(tmpterm),
- emit(["{",{curr,tmpterm},", ",{next,bytes},"} = "]),
- St
- end;
_ ->
case Type of
#type{def=#'SEQUENCE'{
@@ -1350,25 +1353,19 @@ gen_dec_line_special(Erule, {typefield,_}, _TopType, Comp,
false -> % This is in a choice with typefield components
{Name,RestFieldNames} =
(Type#type.def)#'ObjectClassFieldType'.fieldname,
-
- asn1ct_name:new(reason),
Imm = asn1ct_imm:per_dec_open_type(is_aligned(Erule)),
BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(bytes)),
{TmpTerm,TempBuf} = asn1ct_imm:dec_slim_cg(Imm, BytesVar),
+ emit([com,nl]),
+ #type{tablecinf=[{objfun,
+ #'Externaltypereference'{module=Xmod,
+ type=Xtype}}]} =
+ Type,
+ gen_dec_open_type(Erule, "ObjFun", {Xmod,Xtype},
+ '_', {'_',{Name,RestFieldNames},
+ 'Result',TmpTerm,mandatory}),
emit([com,nl,
- {next,bytes}," = ",TempBuf,com,nl,
- indent(2),"case (catch ObjFun(",
- {asis,Name},",",TmpTerm,",telltype,",
- {asis,RestFieldNames},")) of", nl]),
- emit([indent(4),"{'EXIT',",{curr,reason},"} ->",nl]),
- emit([indent(6),"exit({'Type not ",
- "compatible with table constraint', ",
- {curr,reason},"});",nl]),
- asn1ct_name:new(tmpterm),
- emit([indent(4),"{",{curr,tmpterm},", _} ->",nl]),
- emit([indent(6),"{",{asis,Cname},", {",{curr,tmpterm},", ",
- {next,bytes},"}}",nl]),
- emit([indent(2),"end"]),
+ "{",{asis,Cname},",{Result,",TempBuf,"}}"]),
{[],PrevSt};
{"got objfun through args","ObjFun"} ->
%% this is when the generated code gots the
@@ -1388,27 +1385,22 @@ gen_dec_line_special(Erule, {typefield,_}, _TopType, Comp,
BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(bytes)),
asn1ct_imm:dec_code_gen(Imm, BytesVar),
emit([com,nl]),
+ #type{tablecinf=[{objfun,
+ #'Externaltypereference'{module=Xmod,
+ type=Xtype}}]} =
+ Type,
+ Term = asn1ct_gen:mk_var(asn1ct_name:curr(term)),
+ TmpTerm = asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)),
if
Prop =:= mandatory ->
- emit([{curr,term}," =",nl," "]);
- true ->
- emit([" {"])
- end,
- emit(["case (catch ObjFun(",{asis,Name},",",
- {curr,tmpterm},",telltype,",
- {asis,RestFieldNames},")) of", nl]),
- emit([" {'EXIT',",{curr,reason},"} ->",nl]),
- emit([indent(6),"exit({'Type not ",
- "compatible with table constraint', ",
- {curr,reason},"});",nl]),
- asn1ct_name:new(tmpterm),
- emit([indent(4),"{",{curr,tmpterm},", _} ->",nl]),
- emit([indent(6),{curr,tmpterm},nl]),
- emit([indent(2),"end"]),
- if
- Prop =:= mandatory ->
- ok;
+ gen_dec_open_type(Erule, "ObjFun", {Xmod,Xtype},
+ '_', {'_',{Name,RestFieldNames},
+ Term,TmpTerm,Prop});
true ->
+ emit([" {"]),
+ gen_dec_open_type(Erule, "ObjFun", {Xmod,Xtype},
+ '_', {'_',{Name,RestFieldNames},
+ '_',TmpTerm,Prop}),
emit([",",nl,{curr,tmpbytes},"}"])
end,
{[],PrevSt};
@@ -1425,19 +1417,6 @@ gen_dec_line_special(Erule, {typefield,_}, _TopType, Comp,
Prop}],PrevSt}
end
end;
-gen_dec_line_special(Erule, {objectfield,PrimFieldName1,PFNList}, _TopType,
- Comp, _DecInfObj) ->
- fun({_BytesVar,PrevSt}) ->
- Imm = asn1ct_imm:per_dec_open_type(is_aligned(Erule)),
- BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(bytes)),
- asn1ct_imm:dec_code_gen(Imm, BytesVar),
- #'ComponentType'{name=Cname,prop=Prop} = Comp,
- SaveBytes = [{Cname,{PrimFieldName1,PFNList},
- asn1ct_gen:mk_var(asn1ct_name:curr(term)),
- asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)),
- Prop}],
- {SaveBytes,PrevSt}
- end;
gen_dec_line_special(Erule, Atype, TopType, Comp, DecInfObj) ->
case gen_dec_line_other(Erule, Atype, TopType, Comp) of
Fun when is_function(Fun, 1) ->
@@ -1458,14 +1437,11 @@ gen_dec_line_special(Erule, Atype, TopType, Comp, DecInfObj) ->
gen_dec_line_dec_inf(Comp, DecInfObj) ->
#'ComponentType'{name=Cname} = Comp,
case DecInfObj of
- {Cname,{_,OSet,UniqueFName,ValIndex}} ->
+ {Cname,{_,_OSet,_UniqueFName,ValIndex}} ->
Term = asn1ct_gen:mk_var(asn1ct_name:curr(term)),
ValueMatch = value_match(ValIndex,Term),
- {ObjSetMod,ObjSetName} = OSet,
emit([",",nl,
- "ObjFun = ",{asis,ObjSetMod},
- ":'getdec_",ObjSetName,"'(",
- {asis,UniqueFName},", ",ValueMatch,")"]);
+ "ObjFun = ",ValueMatch]);
_ ->
ok
end.
@@ -1492,63 +1468,35 @@ gen_dec_line_other(Erule, Atype, TopType, Comp) ->
[{objfun,_}|_R] ->
fun(BytesVar) ->
emit({"'dec_",asn1ct_gen:list2name(NewTypename),
- "'(",BytesVar,", telltype, ObjFun)"})
+ "'(",BytesVar,", ObjFun)"})
end;
_ ->
fun(BytesVar) ->
emit({"'dec_",asn1ct_gen:list2name(NewTypename),
- "'(",BytesVar,", telltype)"})
+ "'(",BytesVar,")"})
end
end
end.
-gen_enc_choice(Erule,TopType,CompList,Ext) ->
- gen_enc_choice_tag(Erule, CompList, [], Ext),
- emit({com,nl}),
- emit({"case element(1,Val) of",nl}),
- gen_enc_choice2(Erule,TopType, CompList, Ext),
- emit({nl,"end"}).
-
-gen_enc_choice_tag(Erule, {C1,C2}, _, _) ->
- N1 = get_name_list(C1),
- N2 = get_name_list(C2),
- call(Erule,set_choice,
- ["element(1, Val)",
- {asis,{N1,N2}},
- {asis,{length(N1),length(N2)}}]);
-gen_enc_choice_tag(Erule, {C1,C2,C3}, _, _) ->
- N1 = get_name_list(C1),
- N2 = get_name_list(C2),
- N3 = get_name_list(C3),
- Root = N1 ++ N3,
- call(Erule,set_choice,
- ["element(1, Val)",
- {asis,{Root,N2}},
- {asis,{length(Root),length(N2)}}]);
-gen_enc_choice_tag(Erule, C, _, _) ->
- N = get_name_list(C),
- call(Erule,set_choice,
- ["element(1, Val)",
- {asis,N},{asis,length(N)}]).
-
-get_name_list(L) ->
- get_name_list(L,[]).
-
-get_name_list([#'ComponentType'{name=Name}|T], Acc) ->
- get_name_list(T,[Name|Acc]);
-get_name_list([], Acc) ->
- lists:reverse(Acc).
-
-
-gen_enc_choice2(Erule,TopType, {L1,L2}, Ext) ->
- gen_enc_choice2(Erule, TopType, L1 ++ L2, 0, [], Ext);
-gen_enc_choice2(Erule, TopType, {L1,L2,L3}, Ext) ->
- gen_enc_choice2(Erule, TopType, L1 ++ L3 ++ L2, 0, [], Ext);
-gen_enc_choice2(Erule,TopType, L, Ext) ->
- gen_enc_choice2(Erule,TopType, L, 0, [], Ext).
+gen_enc_choice(Erule, TopType, {Root,Exts}, Ext) ->
+ Constr = choice_constraint(Root),
+ gen_enc_choices(Root, Erule, TopType, 0, Constr, Ext) ++
+ gen_enc_choices(Exts, Erule, TopType, 0, ext, Ext);
+gen_enc_choice(Erule, TopType, {Root,Exts,[]}, Ext) ->
+ gen_enc_choice(Erule, TopType, {Root,Exts}, Ext);
+gen_enc_choice(Erule, TopType, Root, Ext) when is_list(Root) ->
+ Constr = choice_constraint(Root),
+ gen_enc_choices(Root, Erule, TopType, 0, Constr, Ext).
+
+choice_constraint(L) ->
+ case length(L) of
+ 0 -> [{'SingleValue',0}];
+ Len -> [{'ValueRange',{0,Len-1}}]
+ end.
-gen_enc_choice2(Erule, TopType, [H|T], Pos, Sep0, Ext) ->
+gen_enc_choices([H|T], Erule, TopType, Pos, Constr, Ext) ->
#'ComponentType'{name=Cname,typespec=Type} = H,
+ Aligned = is_aligned(Erule),
EncObj =
case asn1ct_gen:get_constraint(Type#type.constraint,
componentrelation) of
@@ -1562,16 +1510,25 @@ gen_enc_choice2(Erule, TopType, [H|T], Pos, Sep0, Ext) ->
_ ->
{no_attr,"ObjFun"}
end,
- emit([Sep0,{asis,Cname}," ->",nl]),
- DoExt = case Ext of
- {ext,ExtPos,_} when Pos + 1 < ExtPos -> noext;
- _ -> Ext
+ DoExt = case Constr of
+ ext -> Ext;
+ _ -> noext
end,
- gen_enc_line(Erule, TopType, Cname, Type, "element(2, Val)",
- Pos+1, EncObj, DoExt),
- Sep = [";",nl],
- gen_enc_choice2(Erule, TopType, T, Pos+1, Sep, Ext);
-gen_enc_choice2(_, _, [], _, _, _) -> ok.
+ Tag = case {Ext,Constr} of
+ {noext,_} ->
+ asn1ct_imm:per_enc_integer(Pos, Constr, Aligned);
+ {{ext,_,_},ext} ->
+ [{put_bits,1,1,[1]}|
+ asn1ct_imm:per_enc_small_number(Pos, Aligned)];
+ {{ext,_,_},_} ->
+ [{put_bits,0,1,[1]}|
+ asn1ct_imm:per_enc_integer(Pos, Constr, Aligned)]
+ end,
+ Body = gen_enc_line_imm(Erule, TopType, Cname, Type, 'ChoiceVal',
+ EncObj, DoExt),
+ Imm = Tag ++ Body,
+ [{Cname,Imm}|gen_enc_choices(T, Erule, TopType, Pos+1, Constr, Ext)];
+gen_enc_choices([], _, _, _, _, _) -> [].
%% Generate the code for CHOICE. If the CHOICE is extensible,
%% the structure of the generated code is as follows:
@@ -1704,9 +1661,6 @@ gen_dec_choice2(Erule, TopType, [H0|T], Pos, Sep0, Pre) ->
gen_dec_choice2(Erule, TopType, T, Pos+1, Sep, Pre);
gen_dec_choice2(_, _, [], _, _, _) -> ok.
-indent(N) ->
- lists:duplicate(N,32). % 32 = space
-
make_elements(I,Val,ExtCnames) ->
make_elements(I,Val,ExtCnames,[]).
@@ -1720,7 +1674,7 @@ make_elements(_I,_,[],Acc) ->
lists:reverse(Acc).
make_element(I, Val) ->
- io_lib:format("element(~w,~s)", [I,Val]).
+ lists:flatten(io_lib:format("element(~w, ~s)", [I,Val])).
emit_extaddgroupTerms(VarSeries,[_]) ->
asn1ct_name:new(VarSeries),
@@ -1787,6 +1741,3 @@ value_match1(Value,[],Acc,Depth) ->
Acc ++ Value ++ lists:concat(lists:duplicate(Depth,")"));
value_match1(Value,[{VI,_}|VIs],Acc,Depth) ->
value_match1(Value,VIs,Acc++lists:concat(["element(",VI,","]),Depth+1).
-
-is_optimized(per) -> true;
-is_optimized(uper) -> false.
diff --git a/lib/asn1/src/asn1ct_eval_per.funcs b/lib/asn1/src/asn1ct_eval_per.funcs
deleted file mode 100644
index a1ea5cd043..0000000000
--- a/lib/asn1/src/asn1ct_eval_per.funcs
+++ /dev/null
@@ -1,2 +0,0 @@
-{per,encode_constrained_number,2}.
-{per,encode_small_number,1}.
diff --git a/lib/asn1/src/asn1ct_eval_uper.funcs b/lib/asn1/src/asn1ct_eval_uper.funcs
deleted file mode 100644
index 884a486f40..0000000000
--- a/lib/asn1/src/asn1ct_eval_uper.funcs
+++ /dev/null
@@ -1,2 +0,0 @@
-{uper,encode_constrained_number,2}.
-{uper,encode_small_number,1}.
diff --git a/lib/asn1/src/asn1ct_func.erl b/lib/asn1/src/asn1ct_func.erl
index ab0dbcce8f..dbadedb683 100644
--- a/lib/asn1/src/asn1ct_func.erl
+++ b/lib/asn1/src/asn1ct_func.erl
@@ -19,7 +19,7 @@
%%
-module(asn1ct_func).
--export([start_link/0,need/1,call/3,generate/1]).
+-export([start_link/0,need/1,call/3,call_gen/3,call_gen/4,generate/1]).
-export([init/1,handle_call/3,handle_cast/2,terminate/2]).
start_link() ->
@@ -28,15 +28,33 @@ start_link() ->
ok.
call(M, F, Args) ->
- MFA = {M,F,length(Args)},
+ A = length(Args),
+ MFA = {M,F,A},
need(MFA),
- asn1ct_gen:emit([F,"(",call_args(Args, ""),")"]).
+ case M of
+ binary ->
+ asn1ct_gen:emit(["binary:",F,"(",call_args(Args, ""),")"]);
+ _ ->
+ asn1ct_gen:emit([F,"(",call_args(Args, ""),")"])
+ end.
+need({binary,_,_}) ->
+ ok;
+need({erlang,_,_}) ->
+ ok;
need(MFA) ->
asn1ct_rtt:assert_defined(MFA),
cast({need,MFA}).
+call_gen(Prefix, Key, Gen, Args) when is_function(Gen, 2) ->
+ F = req({gen_func,Prefix,Key,Gen}),
+ asn1ct_gen:emit([F,"(",call_args(Args, ""),")"]).
+
+call_gen(Prefix, Key, Gen) when is_function(Gen, 2) ->
+ req({gen_func,Prefix,Key,Gen}).
+
generate(Fd) ->
+ do_generate(Fd),
Used0 = req(get_used),
erase(?MODULE),
Used = sofs:set(Used0, [mfa]),
@@ -53,10 +71,13 @@ cast(Req) ->
%%% Internal functions.
--record(st, {used}).
+-record(st, {used, %Used functions
+ gen, %Dynamically generated functions
+ gc=1 %Counter for generated functions
+ }).
init([]) ->
- St = #st{used=gb_sets:empty()},
+ St = #st{used=gb_sets:empty(),gen=gb_trees:empty()},
{ok,St}.
handle_cast({need,MFA}, #st{used=Used0}=St) ->
@@ -69,7 +90,20 @@ handle_cast({need,MFA}, #st{used=Used0}=St) ->
end.
handle_call(get_used, _From, #st{used=Used}=St) ->
- {stop,normal,gb_sets:to_list(Used),St}.
+ {stop,normal,gb_sets:to_list(Used),St};
+handle_call(get_gen, _From, #st{gen=G0}=St) ->
+ {L,G} = do_get_gen(gb_trees:to_list(G0), [], []),
+ {reply,L,St#st{gen=gb_trees:from_orddict(G)}};
+handle_call({gen_func,Prefix,Key,GenFun}, _From, #st{gen=G0,gc=Gc0}=St) ->
+ case gb_trees:lookup(Key, G0) of
+ none ->
+ Name = list_to_atom(Prefix ++ integer_to_list(Gc0)),
+ Gc = Gc0 + 1,
+ G = gb_trees:insert(Key, {Name,GenFun}, G0),
+ {reply,Name,St#st{gen=G,gc=Gc}};
+ {value,{Name,_}} ->
+ {reply,Name,St}
+ end.
terminate(_, _) ->
ok.
@@ -98,3 +132,22 @@ update_worklist([H|T], Used, Ws) ->
update_worklist(T, Used, Ws)
end;
update_worklist([], _, Ws) -> Ws.
+
+do_get_gen([{_,{_,done}}=Keep|T], Gacc, Kacc) ->
+ do_get_gen(T, Gacc, [Keep|Kacc]);
+do_get_gen([{K,{Name,_}=V}|T], Gacc, Kacc) ->
+ do_get_gen(T, [V|Gacc], [{K,{Name,done}}|Kacc]);
+do_get_gen([], Gacc, Kacc) ->
+ {lists:sort(Gacc),lists:reverse(Kacc)}.
+
+do_generate(Fd) ->
+ case req(get_gen) of
+ [] ->
+ ok;
+ [_|_]=Gen ->
+ _ = [begin
+ ok = file:write(Fd, "\n"),
+ GenFun(Fd, Name)
+ end || {Name,GenFun} <- Gen],
+ do_generate(Fd)
+ end.
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index 9095e145a3..e6ec0cb12b 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -798,7 +798,12 @@ pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) ->
gen_exports1(Types,"enc_",1)
end,
emit({"-export([",nl}),
- gen_exports1(Types,"dec_",2)
+ case Erules of
+ ber ->
+ gen_exports1(Types, "dec_", 2);
+ _ ->
+ gen_exports1(Types, "dec_", 1)
+ end
end,
case [X || {n2n,X} <- get(encoding_options)] of
[] -> ok;
@@ -819,10 +824,7 @@ pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) ->
_ ->
case erule(Erules) of
per ->
- emit({"-export([",nl}),
- gen_exports1(Objects,"enc_",3),
- emit({"-export([",nl}),
- gen_exports1(Objects,"dec_",4);
+ ok;
ber ->
emit({"-export([",nl}),
gen_exports1(Objects,"enc_",3),
@@ -833,10 +835,15 @@ pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) ->
case ObjectSets of
[] -> ok;
_ ->
- emit({"-export([",nl}),
- gen_exports1(ObjectSets,"getenc_",2),
- emit({"-export([",nl}),
- gen_exports1(ObjectSets,"getdec_",2)
+ case erule(Erules) of
+ per ->
+ ok;
+ ber ->
+ emit({"-export([",nl}),
+ gen_exports1(ObjectSets, "getenc_",1),
+ emit({"-export([",nl}),
+ gen_exports1(ObjectSets, "getdec_",1)
+ end
end,
emit({"-export([info/0]).",nl}),
gen_partial_inc_decode_exports(),
@@ -916,15 +923,23 @@ pgen_dispatcher(Erules,_Module,{Types,_Values,_,_,_Objects,_ObjectSets}) ->
{["complete(encode_disp(Type, Data))"],"Bytes"}
end,
emit(["encode(Type,Data) ->",nl,
- "case catch ",Call," of",nl,
- " {'EXIT',{error,Reason}} ->",nl,
- " {error,Reason};",nl,
- " {'EXIT',Reason} ->",nl,
- " {error,{asn1,Reason}};",nl,
- " {Bytes,_Len} ->",nl,
- " {ok,",BytesAsBinary,"};",nl,
- " Bytes ->",nl,
- " {ok,",BytesAsBinary,"}",nl,
+ "try ",Call," of",nl,
+ case erule(Erules) of
+ ber ->
+ [" {Bytes,_Len} ->",nl,
+ " {ok,",BytesAsBinary,"}",nl];
+ per ->
+ [" Bytes ->",nl,
+ " {ok,",BytesAsBinary,"}",nl]
+ end,
+ " catch",nl,
+ " Class:Exception when Class =:= error; Class =:= exit ->",nl,
+ " case Exception of",nl,
+ " {error,Reason}=Error ->",nl,
+ " Error;",nl,
+ " Reason ->",nl,
+ " {error,{asn1,Reason}}",nl,
+ " end",nl,
"end.",nl,nl]),
Return_rest = lists:member(undec_rest,get(encoding_options)),
@@ -999,7 +1014,7 @@ pgen_dispatcher(Erules,_Module,{Types,_Values,_,_,_Objects,_ObjectSets}) ->
gen_partial_inc_dispatcher();
_PerOrPer_bin ->
gen_dispatcher(Types,"encode_disp","enc_",""),
- gen_dispatcher(Types,"decode_disp","dec_",",mandatory")
+ gen_dispatcher(Types,"decode_disp","dec_","")
end,
emit([nl]),
emit({nl,nl}).
diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
index 8ab49aec2c..de81259fcb 100644
--- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
@@ -196,8 +196,16 @@ gen_encode_prim(_Erules, #type{}=D, DoTag, Value) ->
emit(["case ",Value," of",nl]),
emit_enc_enumerated_cases(NamedNumberList,DoTag);
'REAL' ->
- emit([{call,ber,encode_tags,
- [DoTag,{call,real_common,ber_encode_real,[Value]}]}]);
+ asn1ct_name:new(realval),
+ asn1ct_name:new(realsize),
+ emit(["begin",nl,
+ {curr,realval}," = ",
+ {call,real_common,ber_encode_real,[Value]},com,nl,
+ {curr,realsize}," = ",
+ {call,erlang,byte_size,[{curr,realval}]},com,nl,
+ {call,ber,encode_tags,
+ [DoTag,{curr,realval},{curr,realsize}]},nl,
+ "end"]);
{'BIT STRING',NamedNumberList} ->
call(encode_bit_string,
[{asis,BitStringConstraint},Value,
@@ -637,9 +645,6 @@ gen_encode_objectfields(ClassName,[{typefield,Name,OptOrMand}|Rest],
% ", Val, RestPrimFieldName) ->",nl]),
MaybeConstr=
case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} -> %% this case is illegal
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
{false,'OPTIONAL'} ->
EmitFuncClause("Val"),
emit([" {Val,0}"]),
@@ -672,9 +677,6 @@ gen_encode_objectfields(ClassName,[{objectfield,Name,_,_,OptOrMand}|Rest],
% emit(["'enc_",ObjName,"'(",{asis,Name},
% ", Val,[H|T]) ->",nl]),
case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} ->
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
{false,'OPTIONAL'} ->
EmitFuncClause("_,_"),
emit([" exit({error,{'use of missing field in object', ",{asis,Name},
@@ -807,9 +809,6 @@ gen_decode_objectfields(ClassName,[{typefield,Name,OptOrMand}|Rest],
% ", Bytes, RestPrimFieldName) ->",nl]),
MaybeConstr=
case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} -> %% this case is illegal
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
{false,'OPTIONAL'} ->
EmitFuncClause(" Bytes"),
emit([" Bytes"]),
@@ -844,9 +843,6 @@ gen_decode_objectfields(ClassName,[{objectfield,Name,_,_,OptOrMand}|Rest],
% ", Bytes,[H|T]) ->",nl]),
% emit_tlv_format("Bytes"),
case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} ->
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
{false,'OPTIONAL'} ->
EmitFuncClause("_,_"),
emit([" exit({error,{'illegal use of missing field in object', ",{asis,Name},
@@ -1072,8 +1068,7 @@ gen_objset_enc(_,_,{unique,undefined},_,_,_,_,_) ->
gen_objset_enc(Erules, ObjSetName, UniqueName,
[{ObjName,Val,Fields}|T], ClName, ClFields,
NthObj,Acc)->
- emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},",",{asis,Val},
- ") ->",nl]),
+ emit(["'getenc_",ObjSetName,"'(",{asis,Val},") ->",nl]),
CurrMod = get(currmod),
{InternalFunc,NewNthObj}=
case ObjName of
@@ -1095,7 +1090,7 @@ gen_objset_enc(Erules, ObjSetName, UniqueName,
%% See X.681 Annex E for the following case
gen_objset_enc(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName,
_ClFields,_NthObj,Acc) ->
- emit({"'getenc_",ObjSetName,"'(_, _) ->",nl}),
+ emit(["'getenc_",ObjSetName,"'(_) ->",nl]),
emit({indent(3),"fun(_, Val, _RestPrimFieldName) ->",nl}),
emit({indent(6),"Len = case Val of",nl,indent(9),
"Bin when is_binary(Bin) -> byte_size(Bin);",nl,indent(9),
@@ -1113,7 +1108,7 @@ emit_ext_fun(EncDec,ModuleName,Name) ->
Name,"'(T,V,O) end"]).
emit_default_getenc(ObjSetName,UniqueName) ->
- emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]),
+ emit(["'getenc_",ObjSetName,"'(ErrV) ->",nl]),
emit([indent(3),"fun(C,V,_) -> exit({'Type not compatible with table constraint',{component,C},{value,V}, {unique_name_and_value,",{asis,UniqueName},", ErrV}}) end"]).
%% gen_inlined_enc_funs for each object iterates over all fields of a
@@ -1240,8 +1235,7 @@ gen_objset_dec(_,_,{unique,undefined},_,_,_,_) ->
ok;
gen_objset_dec(Erules, ObjSName, UniqueName, [{ObjName,Val,Fields}|T],
ClName, ClFields, NthObj)->
- emit(["'getdec_",ObjSName,"'(",{asis,UniqueName},",",
- {asis,Val},") ->",nl]),
+ emit(["'getdec_",ObjSName,"'(",{asis,Val},") ->",nl]),
CurrMod = get(currmod),
NewNthObj=
case ObjName of
@@ -1262,7 +1256,7 @@ gen_objset_dec(Erules, ObjSName, UniqueName, [{ObjName,Val,Fields}|T],
ClFields, NewNthObj);
gen_objset_dec(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName,
_ClFields,_NthObj) ->
- emit(["'getdec_",ObjSetName,"'(_, _) ->",nl]),
+ emit(["'getdec_",ObjSetName,"'(_) ->",nl]),
emit([indent(2),"fun(_,Bytes, _RestPrimFieldName) ->",nl]),
emit([indent(4),"case Bytes of",nl,
@@ -1279,7 +1273,7 @@ gen_objset_dec(_, ObjSetName, UniqueName, [], _, _, _) ->
ok.
emit_default_getdec(ObjSetName,UniqueName) ->
- emit(["'getdec_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]),
+ emit(["'getdec_",ObjSetName,"'(ErrV) ->",nl]),
emit([indent(2), "fun(C,V,_) -> exit({{component,C},{value,V},{unique_name_and_value,",{asis,UniqueName},", ErrV}}) end"]).
gen_inlined_dec_funs(Fields, ClFields, ObjSetName, NthObj) ->
diff --git a/lib/asn1/src/asn1ct_gen_per.erl b/lib/asn1/src/asn1ct_gen_per.erl
index 69d9d51bf1..8b999ddbf0 100644
--- a/lib/asn1/src/asn1ct_gen_per.erl
+++ b/lib/asn1/src/asn1ct_gen_per.erl
@@ -26,7 +26,7 @@
%-compile(export_all).
-export([gen_dec_imm/2]).
--export([gen_dec_prim/3,gen_encode_prim/3]).
+-export([gen_dec_prim/3,gen_encode_prim_imm/3]).
-export([gen_obj_code/3,gen_objectset_code/2]).
-export([gen_decode/2, gen_decode/3]).
-export([gen_encode/2, gen_encode/3]).
@@ -102,832 +102,106 @@ gen_encode_prim(Erules, D) ->
Value = asn1ct_gen:mk_var(asn1ct_name:curr(val)),
gen_encode_prim(Erules, D, Value).
-gen_encode_prim(Erules, #type{def={'ENUMERATED',{N1,N2}}}, Value) ->
- NewList = [{0,X} || {X,_} <- N1] ++ ['EXT_MARK'] ++
- [{1,X} || {X,_} <- N2],
- NewC = {0,length(N1)-1},
- emit(["case ",Value," of",nl]),
- emit_enc_enumerated_cases(Erules, NewC, NewList, 0);
-gen_encode_prim(Erules, #type{def={'ENUMERATED',NNL}}, Value) ->
- NewList = [X || {X,_} <- NNL],
- NewC = {0,length(NewList)-1},
- emit(["case ",Value," of",nl]),
- emit_enc_enumerated_cases(Erules, NewC, NewList, 0);
-gen_encode_prim(per=Erules, D, Value) ->
- asn1ct_gen_per_rt2ct:gen_encode_prim(Erules, D, Value);
gen_encode_prim(Erules, #type{}=D, Value) ->
- Constraint = D#type.constraint,
- SizeConstr = asn1ct_imm:effective_constraint(bitstring, Constraint),
- Pa = case lists:keyfind('PermittedAlphabet', 1, Constraint) of
- false -> no;
- {_,Pa0} -> Pa0
- end,
- case D#type.def of
+ Aligned = case Erules of
+ uper -> false;
+ per -> true
+ end,
+ Imm = gen_encode_prim_imm(Value, D, Aligned),
+ asn1ct_imm:enc_cg(Imm, Aligned).
+
+gen_encode_prim_imm(Val, #type{def=Type0,constraint=Constraint}, Aligned) ->
+ case simplify_type(Type0) of
+ k_m_string ->
+ Type = case Type0 of
+ 'GeneralizedTime' -> 'VisibleString';
+ 'UTCTime' -> 'VisibleString';
+ _ -> Type0
+ end,
+ asn1ct_imm:per_enc_k_m_string(Val, Type, Constraint, Aligned);
+ restricted_string ->
+ ToBinary = {erlang,iolist_to_binary},
+ asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned);
+ {'ENUMERATED',NNL} ->
+ asn1ct_imm:per_enc_enumerated(Val, NNL, Aligned);
'INTEGER' ->
- Args = [{asis,asn1ct_imm:effective_constraint(integer,Constraint)},
- Value],
- call(Erules, encode_integer, Args);
- {'INTEGER',NamedNumberList} ->
- Args = [{asis,asn1ct_imm:effective_constraint(integer,Constraint)},
- Value,{asis,NamedNumberList}],
- call(Erules, encode_integer, Args);
+ asn1ct_imm:per_enc_integer(Val, Constraint, Aligned);
+ {'INTEGER',NNL} ->
+ asn1ct_imm:per_enc_integer(Val, NNL, Constraint, Aligned);
'REAL' ->
- emit_enc_real(Erules, Value);
-
- {'BIT STRING',NamedNumberList} ->
- call(Erules, encode_bit_string,
- [{asis,SizeConstr},Value,
- {asis,NamedNumberList}]);
+ ToBinary = {real_common,encode_real},
+ asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned);
+ {'BIT STRING',NNL} ->
+ asn1ct_imm:per_enc_bit_string(Val, NNL, Constraint, Aligned);
'NULL' ->
- emit("[]");
+ asn1ct_imm:per_enc_null(Val, Aligned);
'OBJECT IDENTIFIER' ->
- call(Erules, encode_object_identifier, [Value]);
+ ToBinary = {per_common,encode_oid},
+ asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned);
'RELATIVE-OID' ->
- call(Erules, encode_relative_oid, [Value]);
- 'ObjectDescriptor' ->
- call(Erules, encode_ObjectDescriptor,
- [{asis,Constraint},Value]);
+ ToBinary = {per_common,encode_relative_oid},
+ asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned);
'BOOLEAN' ->
- call(Erules, encode_boolean, [Value]);
+ asn1ct_imm:per_enc_boolean(Val, Aligned);
'OCTET STRING' ->
- case SizeConstr of
- 0 ->
- emit("[]");
- no ->
- call(Erules, encode_octet_string, [Value]);
- C ->
- call(Erules, encode_octet_string, [{asis,C},Value])
- end;
- 'NumericString' ->
- call(Erules, encode_NumericString, [{asis,SizeConstr},
- {asis,Pa},Value]);
- TString when TString == 'TeletexString';
- TString == 'T61String' ->
- call(Erules, encode_TeletexString, [{asis,Constraint},Value]);
- 'VideotexString' ->
- call(Erules, encode_VideotexString, [{asis,Constraint},Value]);
- 'UTCTime' ->
- call(Erules, encode_VisibleString, [{asis,SizeConstr},
- {asis,Pa},Value]);
- 'GeneralizedTime' ->
- call(Erules, encode_VisibleString, [{asis,SizeConstr},
- {asis,Pa},Value]);
- 'GraphicString' ->
- call(Erules, encode_GraphicString, [{asis,Constraint},Value]);
- 'VisibleString' ->
- call(Erules, encode_VisibleString, [{asis,SizeConstr},
- {asis,Pa},Value]);
- 'GeneralString' ->
- call(Erules, encode_GeneralString, [{asis,Constraint},Value]);
- 'PrintableString' ->
- call(Erules, encode_PrintableString, [{asis,SizeConstr},
- {asis,Pa},Value]);
- 'IA5String' ->
- call(Erules, encode_IA5String, [{asis,SizeConstr},
- {asis,Pa},Value]);
- 'BMPString' ->
- call(Erules, encode_BMPString, [{asis,SizeConstr},
- {asis,Pa},Value]);
- 'UniversalString' ->
- call(Erules, encode_UniversalString, [{asis,SizeConstr},
- {asis,Pa},Value]);
- 'UTF8String' ->
- call(Erules, encode_UTF8String, [Value]);
+ asn1ct_imm:per_enc_octet_string(Val, Constraint, Aligned);
'ASN1_OPEN_TYPE' ->
- NewValue = case Constraint of
- [#'Externaltypereference'{type=Tname}] ->
- asn1ct_func:need({Erules,complete,1}),
- io_lib:format(
- "complete(enc_~s(~s))",[Tname,Value]);
- [#type{def=#'Externaltypereference'{type=Tname}}] ->
- asn1ct_func:need({Erules,complete,1}),
- io_lib:format(
- "complete(enc_~s(~s))",
- [Tname,Value]);
- _ ->
- io_lib:format("iolist_to_binary(~s)",
- [Value])
- end,
- call(Erules, encode_open_type, [NewValue])
- end.
-
-emit_enc_real(Erules, Real) ->
- asn1ct_name:new(tmpval),
- asn1ct_name:new(tmplen),
- emit(["begin",nl,
- "{",{curr,tmpval},com,{curr,tmplen},"} = ",
- {call,real_common,encode_real,[Real]},com,nl,
- "[",{call,Erules,encode_length,[{curr,tmplen}]},",",
- {curr,tmpval},"]",nl,
- "end"]).
-
-emit_enc_enumerated_cases(Erules, C, ['EXT_MARK'|T], _Count) ->
- %% Reset enumeration counter.
- emit_enc_enumerated_cases(Erules, C, T, 0);
-emit_enc_enumerated_cases(Erules, C, [H|T], Count) ->
- emit_enc_enumerated_case(Erules, C, H, Count),
- emit([";",nl]),
- emit_enc_enumerated_cases(Erules, C, T, Count+1);
-emit_enc_enumerated_cases(_Erules, _, [], _Count) ->
- emit(["EnumVal -> "
- "exit({error,{asn1,{enumerated_not_in_range, EnumVal}}})",nl,
- "end"]).
-
-emit_enc_enumerated_case(Erules, C, {0,EnumName}, Count) ->
- %% ENUMERATED with extensionmark; the value lies within then extension root
- Enc = enc_ext_and_val(Erules, 0, encode_constrained_number, [C,Count]),
- emit(["'",EnumName,"' -> ",{asis,Enc}]);
-emit_enc_enumerated_case(Erules, _C, {1,EnumName}, Count) ->
- %% ENUMERATED with extensionmark; the value is higher than extension root
- Enc = enc_ext_and_val(Erules, 1, encode_small_number, [Count]),
- emit(["'",EnumName,"' -> ",{asis,Enc}]);
-emit_enc_enumerated_case(Erules, C, EnumName, Count) ->
- %% ENUMERATED without extension
- EvalMod = eval_module(Erules),
- emit(["'",EnumName,"' -> ",
- {asis,EvalMod:encode_constrained_number(C, Count)}]).
-
-enc_ext_and_val(per, E, F, Args) ->
- [E|apply(asn1ct_eval_per, F, Args)];
-enc_ext_and_val(uper, E, F, Args) ->
- Bs = list_to_bitstring([apply(asn1ct_eval_uper, F, Args)]),
- <<E:1,Bs/bitstring>>.
-
-
-%% Object code generating for encoding and decoding
-%% ------------------------------------------------
-
-gen_obj_code(Erules,_Module,Obj) when is_record(Obj,typedef) ->
- ObjName = Obj#typedef.name,
- Def = Obj#typedef.typespec,
- #'Externaltypereference'{module=Mod,type=ClassName} =
- Def#'Object'.classname,
- Class = asn1_db:dbget(Mod,ClassName),
- {object,_,Fields} = Def#'Object'.def,
- emit({nl,nl,nl,"%%================================"}),
- emit({nl,"%% ",ObjName}),
- emit({nl,"%%================================",nl}),
- EncConstructed =
- gen_encode_objectfields(Erules, ClassName,get_class_fields(Class),
- ObjName,Fields,[]),
- emit(nl),
- gen_encode_constr_type(Erules,EncConstructed),
- emit(nl),
- DecConstructed =
- gen_decode_objectfields(Erules, ClassName, get_class_fields(Class),
- ObjName, Fields, []),
- emit(nl),
- gen_decode_constr_type(Erules,DecConstructed),
- emit(nl).
-
-
-gen_encode_objectfields(Erule, ClassName,
- [{typefield,Name,OptOrMand}|Rest],
- ObjName, ObjectFields, ConstrAcc) ->
- EmitFuncClause =
- fun(V) ->
- emit(["'enc_",ObjName,"'(",{asis,Name},
- ",",V,",_RestPrimFieldName) ->",nl])
- end,
-% emit(["'enc_",ObjName,"'(",{asis,Name},
-% ", Val, _RestPrimFieldName) ->",nl]),
- MaybeConstr =
- case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} -> %% this case is illegal
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
- {false,'OPTIONAL'} ->
- EmitFuncClause("Val"),
- case Erule of
- uper ->
- emit(" Val");
- per ->
- emit([" if",nl,
- " is_list(Val) ->",nl,
- " NewVal = list_to_binary(Val),",nl,
- " [20,byte_size(NewVal),NewVal];",nl,
- " is_binary(Val) ->",nl,
- " [20,byte_size(Val),Val]",nl,
- " end"])
- end,
- [];
- {false,{'DEFAULT',DefaultType}} ->
- EmitFuncClause("Val"),
- gen_encode_default_call(Erule, ClassName, Name, DefaultType);
- {{Name,TypeSpec},_} ->
- %% A specified field owerwrites any 'DEFAULT' or
- %% 'OPTIONAL' field in the class
- EmitFuncClause("Val"),
- gen_encode_field_call(Erule, ObjName, Name, TypeSpec)
- end,
- case more_genfields(Rest) of
- true ->
- emit([";",nl]);
- false ->
- emit([".",nl])
- end,
- gen_encode_objectfields(Erule,ClassName,Rest,ObjName,ObjectFields,
- MaybeConstr++ConstrAcc);
-gen_encode_objectfields(Erule,ClassName,[{objectfield,Name,_,_,OptOrMand}|Rest],
- ObjName,ObjectFields,ConstrAcc) ->
- CurrentMod = get(currmod),
- EmitFuncClause =
- fun(Attrs) ->
- emit(["'enc_",ObjName,"'(",{asis,Name},
- ",",Attrs,") ->",nl])
- end,
-% emit(["'enc_",ObjName,"'(",{asis,Name},
-% ", Val,[H|T]) ->",nl]),
- case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} ->
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
- {false,'OPTIONAL'} ->
- EmitFuncClause("_,_"),
- emit([" exit({error,{'use of missing field in object', ",{asis,Name},
- "}})"]);
- {false,{'DEFAULT',_DefaultObject}} ->
- exit({error,{asn1,{"not implemented yet",Name}}});
- {{Name,#'Externalvaluereference'{module=CurrentMod,
- value=TypeName}},_} ->
- EmitFuncClause(" Val, [H|T]"),
- emit({indent(3),"'enc_",TypeName,"'(H, Val, T)"});
- {{Name,#'Externalvaluereference'{module=M,value=TypeName}},_} ->
- EmitFuncClause(" Val, [H|T]"),
- emit({indent(3),"'",M,"':'enc_",TypeName,"'(H, Val, T)"});
- {{Name,TypeSpec},_} ->
- EmitFuncClause("Val,[H|T]"),
- case TypeSpec#typedef.name of
- {ExtMod,TypeName} ->
- emit({indent(3),"'",ExtMod,"':'enc_",TypeName,
- "'(H, Val, T)"});
- TypeName ->
- emit({indent(3),"'enc_",TypeName,"'(H, Val, T)"})
+ case Constraint of
+ [#'Externaltypereference'{type=Tname}] ->
+ EncFunc = enc_func(Tname),
+ Imm = [{apply,EncFunc,[{expr,Val}]}],
+ asn1ct_imm:per_enc_open_type(Imm, Aligned);
+ [] ->
+ Imm = [{call,erlang,iolist_to_binary,[{expr,Val}]}],
+ asn1ct_imm:per_enc_open_type(Imm, Aligned)
end
- end,
- case more_genfields(Rest) of
- true ->
- emit([";",nl]);
- false ->
- emit([".",nl])
- end,
- gen_encode_objectfields(Erule,ClassName,Rest,ObjName,ObjectFields,ConstrAcc);
-gen_encode_objectfields(Erule,ClassName,[_C|Cs],O,OF,Acc) ->
- gen_encode_objectfields(Erule,ClassName,Cs,O,OF,Acc);
-gen_encode_objectfields(_, _,[],_,_,Acc) ->
- Acc.
-
-
-gen_encode_constr_type(Erules,[TypeDef|Rest]) when is_record(TypeDef,typedef) ->
- case is_already_generated(enc,TypeDef#typedef.name) of
- true -> ok;
- _ ->
-%% FuncName = list_to_atom(lists:concat(["enc_",TypeDef#typedef.name])),
- FuncName = asn1ct_gen:list2rname(TypeDef#typedef.name ++ [enc]),
- emit(["'",FuncName,"'(Val) ->",nl]),
- Def = TypeDef#typedef.typespec,
- InnerType = asn1ct_gen:get_inner(Def#type.def),
- asn1ct_gen:gen_encode_constructed(Erules,TypeDef#typedef.name,
- InnerType,Def),
- gen_encode_constr_type(Erules,Rest)
- end;
-gen_encode_constr_type(_,[]) ->
- ok.
-
-gen_encode_field_call(_Erules, _ObjName, _FieldName,
- #'Externaltypereference'{module=M,type=T}) ->
- CurrentMod = get(currmod),
- if
- M == CurrentMod ->
- emit({" 'enc_",T,"'(Val)"}),
- [];
- true ->
- emit({" '",M,"':'enc_",T,"'(Val)"}),
- []
- end;
-gen_encode_field_call(Erules, ObjName, FieldName, Type) ->
- Def = Type#typedef.typespec,
- case Type#typedef.name of
- {primitive,bif} ->
- gen_encode_prim(Erules, Def, "Val"),
- [];
- {constructed,bif} ->
- emit({" 'enc_",ObjName,'_',FieldName,
- "'(Val)"}),
-%% [Type#typedef{name=list_to_atom(lists:concat([ObjName,'_',FieldName]))}];
- [Type#typedef{name=[FieldName,ObjName]}];
- {ExtMod,TypeName} ->
- emit({" '",ExtMod,"':'enc_",TypeName,
- "'(Val)"}),
- [];
- TypeName ->
- emit({" 'enc_",TypeName,"'(Val)"}),
- []
end.
-gen_encode_default_call(Erules, ClassName, FieldName, Type) ->
- CurrentMod = get(currmod),
- InnerType = asn1ct_gen:get_inner(Type#type.def),
- case asn1ct_gen:type(InnerType) of
- {constructed,bif} ->
-%% asn1ct_gen:gen_encode_constructed(Erules,Typename,InnerType,Type);
- emit([" 'enc_",ClassName,'_',FieldName,"'(Val)"]),
-%% [#typedef{name=list_to_atom(lists:concat([ClassName,'_',FieldName])),
- [#typedef{name=[FieldName,ClassName],
- typespec=Type}];
- {primitive,bif} ->
- gen_encode_prim(Erules, Type, "Val"),
- [];
- #'Externaltypereference'{module=CurrentMod,type=Etype} ->
- emit([" 'enc_",Etype,"'(Val)",nl]),
- [];
- #'Externaltypereference'{module=Emod,type=Etype} ->
- emit([" '",Emod,"':'enc_",Etype,"'(Val)",nl]),
- []
- end.
-
-
-gen_decode_objectfields(Erules, ClassName,
- [{typefield,Name,OptOrMand}|Rest],
- ObjName, ObjectFields, ConstrAcc) ->
- EmitFuncClause =
- fun(Bytes) ->
- emit(["'dec_",ObjName,"'(",{asis,Name},",",Bytes,
- ",_,_RestPrimFieldName) ->",nl])
- end,
- MaybeConstr=
- case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} -> %% this case is illegal
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
- {false,'OPTIONAL'} ->
- EmitFuncClause("Bytes"),
- emit([" {Bytes,[]}"]),
- [];
- {false,{'DEFAULT',DefaultType}} ->
- EmitFuncClause("Bytes"),
- gen_decode_default_call(Erules, ClassName, Name, "Bytes",
- DefaultType);
- {{Name,TypeSpec},_} ->
- %% A specified field owerwrites any 'DEFAULT' or
- %% 'OPTIONAL' field in the class
- EmitFuncClause("Bytes"),
- gen_decode_field_call(Erules, ObjName, Name, "Bytes", TypeSpec)
- end,
- case more_genfields(Rest) of
- true ->
- emit([";",nl]);
- false ->
- emit([".",nl])
- end,
- gen_decode_objectfields(Erules, ClassName, Rest, ObjName,
- ObjectFields, MaybeConstr++ConstrAcc);
-gen_decode_objectfields(Erules, ClassName,
- [{objectfield,Name,_,_,OptOrMand}|Rest],
- ObjName, ObjectFields, ConstrAcc) ->
- CurrentMod = get(currmod),
- EmitFuncClause =
- fun(Attrs) ->
- emit(["'dec_",ObjName,"'(",{asis,Name},
- ",",Attrs,") ->",nl])
- end,
-% emit(["'dec_",ObjName,"'(",{asis,Name},
-% ", Bytes,_,[H|T]) ->",nl]),
- case {get_object_field(Name,ObjectFields),OptOrMand} of
- {false,'MANDATORY'} ->
- exit({error,{asn1,{"missing mandatory field in object",
- ObjName}}});
- {false,'OPTIONAL'} ->
- EmitFuncClause("_,_,_"),
- emit([" exit({error,{'illegal use of missing field in object', ",{asis,Name},
- "}})"]);
- {false,{'DEFAULT',_DefaultObject}} ->
- exit({error,{asn1,{"not implemented yet",Name}}});
- {{Name,#'Externalvaluereference'{module=CurrentMod,
- value=TypeName}},_} ->
- EmitFuncClause("Bytes,_,[H|T]"),
- emit({indent(3),"'dec_",TypeName,"'(H, Bytes, telltype, T)"});
- {{Name,#'Externalvaluereference'{module=M,value=TypeName}},_} ->
- EmitFuncClause("Bytes,_,[H|T]"),
- emit({indent(3),"'",M,"':'dec_",TypeName,
- "'(H, Bytes, telltype, T)"});
- {{Name,TypeSpec},_} ->
- EmitFuncClause("Bytes,_,[H|T]"),
- case TypeSpec#typedef.name of
- {ExtMod,TypeName} ->
- emit({indent(3),"'",ExtMod,"':'dec_",TypeName,
- "'(H, Bytes, telltype, T)"});
- TypeName ->
- emit({indent(3),"'dec_",TypeName,"'(H, Bytes, telltype, T)"})
- end
- end,
- case more_genfields(Rest) of
- true ->
- emit([";",nl]);
- false ->
- emit([".",nl])
- end,
- gen_decode_objectfields(Erules, ClassName, Rest, ObjName,
- ObjectFields, ConstrAcc);
-gen_decode_objectfields(Erules, CN, [_C|Cs], O, OF, CAcc) ->
- gen_decode_objectfields(Erules, CN, Cs, O, OF, CAcc);
-gen_decode_objectfields(_, _, [], _, _, CAcc) ->
- CAcc.
-
-
-
-gen_decode_field_call(_Erules, _ObjName, _FieldName, Bytes,
- #'Externaltypereference'{}=Etype) ->
- emit(" "),
- gen_dec_external(Etype, Bytes),
- [];
-gen_decode_field_call(Erules, ObjName, FieldName, Bytes, Type) ->
- Def = Type#typedef.typespec,
- case Type#typedef.name of
- {primitive,bif} ->
- gen_dec_prim(Erules, Def, Bytes),
- [];
- {constructed,bif} ->
- emit({" 'dec_",ObjName,'_',FieldName,
- "'(",Bytes,",telltype)"}),
-%% [Type#typedef{name=list_to_atom(lists:concat([ObjName,'_',FieldName]))}];
- [Type#typedef{name=[FieldName,ObjName]}];
- {ExtMod,TypeName} ->
- emit({" '",ExtMod,"':'dec_",TypeName,
- "'(",Bytes,", telltype)"}),
- [];
- TypeName ->
- emit({" 'dec_",TypeName,"'(",Bytes,", telltype)"}),
- []
- end.
-
-gen_decode_default_call(Erules, ClassName, FieldName, Bytes, Type) ->
- InnerType = asn1ct_gen:get_inner(Type#type.def),
- case asn1ct_gen:type(InnerType) of
- {constructed,bif} ->
- emit([" 'dec_",ClassName,'_',FieldName,"'(",Bytes,", telltype)"]),
-%% [#typedef{name=list_to_atom(lists:concat([ClassName,'_',FieldName])),
- [#typedef{name=[FieldName,ClassName],
- typespec=Type}];
- {primitive,bif} ->
- gen_dec_prim(Erules, Type, Bytes),
- [];
- #'Externaltypereference'{}=Etype ->
- asn1ct_gen_per:gen_dec_external(Etype, Bytes),
- []
+dec_func(Tname) ->
+ list_to_atom(lists:concat(["dec_",Tname])).
+
+enc_func(Tname) ->
+ list_to_atom(lists:concat(["enc_",Tname])).
+
+simplify_type(Type) ->
+ case Type of
+ 'BMPString' -> k_m_string;
+ 'IA5String' -> k_m_string;
+ 'NumericString' -> k_m_string;
+ 'PrintableString' -> k_m_string;
+ 'VisibleString' -> k_m_string;
+ 'UniversalString' -> k_m_string;
+ 'GeneralizedTime' -> k_m_string;
+ 'UTCTime' -> k_m_string;
+ 'TeletexString' -> restricted_string;
+ 'T61String' -> restricted_string;
+ 'VideotexString' -> restricted_string;
+ 'GraphicString' -> restricted_string;
+ 'GeneralString' -> restricted_string;
+ 'UTF8String' -> restricted_string;
+ 'ObjectDescriptor' -> restricted_string;
+ Other -> Other
end.
+%% Object code generating for encoding and decoding
+%% ------------------------------------------------
-gen_decode_constr_type(Erules,[TypeDef|Rest]) when is_record(TypeDef,typedef) ->
- case is_already_generated(dec,TypeDef#typedef.name) of
- true -> ok;
- _ ->
- gen_decode(Erules,TypeDef#typedef{name=asn1ct_gen:list2rname(TypeDef#typedef.name)})
- end,
- gen_decode_constr_type(Erules,Rest);
-gen_decode_constr_type(_,[]) ->
+gen_obj_code(_Erules, _Module, #typedef{}) ->
ok.
-
-more_genfields([]) ->
- false;
-more_genfields([Field|Fields]) ->
- case element(1,Field) of
- typefield ->
- true;
- objectfield ->
- true;
- _ ->
- more_genfields(Fields)
- end.
-
%% Object Set code generating for encoding and decoding
%% ----------------------------------------------------
-gen_objectset_code(Erules,ObjSet) ->
- ObjSetName = ObjSet#typedef.name,
- Def = ObjSet#typedef.typespec,
-%% {ClassName,ClassDef} = Def#'ObjectSet'.class,
- #'Externaltypereference'{module=ClassModule,
- type=ClassName} = Def#'ObjectSet'.class,
- ClassDef = asn1_db:dbget(ClassModule,ClassName),
- UniqueFName = Def#'ObjectSet'.uniquefname,
- Set = Def#'ObjectSet'.set,
- emit({nl,nl,nl,"%%================================"}),
- emit({nl,"%% ",ObjSetName}),
- emit({nl,"%%================================",nl}),
- case ClassName of
- {_Module,ExtClassName} ->
- gen_objset_code(Erules,ObjSetName,UniqueFName,Set,
- ExtClassName,ClassDef);
- _ ->
- gen_objset_code(Erules,ObjSetName,UniqueFName,Set,
- ClassName,ClassDef)
- end,
- emit(nl).
-
-gen_objset_code(Erules,ObjSetName,UniqueFName,Set,ClassName,ClassDef)->
- ClassFields = (ClassDef#classdef.typespec)#objectclass.fields,
- InternalFuncs=
- gen_objset_enc(Erules,ObjSetName,UniqueFName,Set,ClassName,ClassFields,1,[]),
- gen_objset_dec(Erules, ObjSetName,UniqueFName,Set,ClassName,ClassFields,1),
- gen_internal_funcs(Erules,InternalFuncs).
-
-%% gen_objset_enc iterates over the objects of the object set
-gen_objset_enc(_,_,{unique,undefined},_,_,_,_,_) ->
- %% There is no unique field in the class of this object set
- %% don't bother about the constraint
- [];
-gen_objset_enc(Erule, ObjSetName, UniqueName, [{ObjName,Val,Fields}|T],
- ClName, ClFields, NthObj, Acc)->
- emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},",",{asis,Val},
- ") ->",nl]),
- CurrMod = get(currmod),
- {InternalFunc,NewNthObj}=
- case ObjName of
- {no_mod,no_name} ->
- gen_inlined_enc_funs(Erule, Fields, ClFields,
- ObjSetName, NthObj);
- {CurrMod,Name} ->
- emit({" fun 'enc_",Name,"'/3"}),
- {[],0};
- {ModName,Name} ->
- emit_ext_encfun(ModName,Name),
- {[],0};
- _Other ->
- emit({" fun 'enc_",ObjName,"'/3"}),
- {[],0}
- end,
- emit({";",nl}),
- gen_objset_enc(Erule, ObjSetName, UniqueName, T, ClName, ClFields,
- NewNthObj, InternalFunc ++ Acc);
-gen_objset_enc(uper, ObjSetName, _UniqueName, ['EXTENSIONMARK'],
- _ClName, _ClFields, _NthObj, Acc) ->
- emit({"'getenc_",ObjSetName,"'(_, _) ->",nl}),
- emit({indent(3),"fun(_, Val, _) ->",nl}),
- emit([indent(6),"Val",nl,
- indent(3),"end.",nl,nl]),
- Acc;
-gen_objset_enc(per, ObjSetName, _UniqueName, ['EXTENSIONMARK'],
- _ClName, _ClFields, _NthObj, Acc) ->
- emit(["'getenc_",ObjSetName,"'(_, _) ->",nl,
- indent(3),"fun(_, Val, _) ->",nl,
- indent(6),"BinVal = if",nl,
- indent(9),"is_list(Val) -> list_to_binary(Val);",nl,
- indent(9),"true -> Val",nl,
- indent(6),"end,",nl,
- indent(6),"Size = byte_size(BinVal),",nl,
- indent(6),"if",nl,
- indent(9),"Size < 256 ->",nl,
- indent(12),"[20,Size,BinVal];",nl,
- indent(9),"true ->",nl,
- indent(12),"[21,<<Size:16>>,Val]",nl,
- indent(6),"end",nl,
- indent(3),"end.",nl,nl]),
- Acc;
-gen_objset_enc(_, ObjSetName, UniqueName, [], _, _, _, Acc) ->
- emit_default_getenc(ObjSetName, UniqueName),
- emit([".",nl,nl]),
- Acc.
-
-emit_ext_encfun(ModuleName,Name) ->
- emit([indent(4),"fun(T,V,O) -> '",ModuleName,"':'enc_",
- Name,"'(T,V,O) end"]).
-
-emit_default_getenc(ObjSetName,UniqueName) ->
- emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]),
- emit([indent(4),"fun(C,V,_) -> exit({'Type not compatible with table constraint',{component,C},{value,V},{unique_name_and_value,",{asis,UniqueName},",ErrV}}) end"]).
-
-
-%% gen_inlined_enc_funs for each object iterates over all fields of a
-%% class, and for each typefield it checks if the object has that
-%% field and emits the proper code.
-gen_inlined_enc_funs(Erule, Fields, [{typefield,_,_}|_]=T,
- ObjSetName, NthObj) ->
- emit([indent(3),"fun(Type, Val, _) ->",nl,
- indent(6),"case Type of",nl]),
- gen_inlined_enc_funs1(Erule, Fields, T, ObjSetName, [], NthObj, []);
-gen_inlined_enc_funs(Erule,Fields,[_H|Rest],ObjSetName,NthObj) ->
- gen_inlined_enc_funs(Erule,Fields,Rest,ObjSetName,NthObj);
-gen_inlined_enc_funs(_,_,[],_,NthObj) ->
- {[],NthObj}.
-
-gen_inlined_enc_funs1(Erule, Fields, [{typefield,Name,_}|Rest], ObjSetName,
- Sep0, NthObj, Acc0) ->
- emit(Sep0),
- Sep = [";",nl],
- CurrentMod = get(currmod),
- InternalDefFunName = asn1ct_gen:list2name([NthObj,Name,ObjSetName]),
- {Acc,NAdd} =
- case lists:keyfind(Name, 1, Fields) of
- {_,#type{}=Type} ->
- {Ret,N} = emit_inner_of_fun(Erule, Type, InternalDefFunName),
- {Ret++Acc0,N};
- {_,#typedef{}=Type} ->
- emit([indent(9),{asis,Name}," ->",nl]),
- {Ret,N} = emit_inner_of_fun(Erule, Type, InternalDefFunName),
- {Ret++Acc0,N};
- {_,#'Externaltypereference'{module=CurrentMod,type=T}} ->
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"'enc_",T,"'(Val)"]),
- {Acc0,0};
- {_,#'Externaltypereference'{module=M,type=T}} ->
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"'",M,"'",":'enc_",T,"'(Val)"]),
- {Acc0,0};
- false when Erule =:= uper ->
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"Val",nl]),
- {Acc0,0};
- false when Erule =:= per ->
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"Size = case Val of",nl,
- indent(15),"B when is_binary(B) -> size(B);",nl,
- indent(15),"_ -> length(Val)",nl,
- indent(12),"end,",nl,
- indent(12),"if",nl,
- indent(15),"Size < 256 -> [20,Size,Val];",nl,
- indent(15),"true -> [21,<<Size:16>>,Val]",nl,
- indent(12),"end"]),
- {Acc0,0}
- end,
- gen_inlined_enc_funs1(Erule, Fields, Rest, ObjSetName, Sep,
- NthObj+NAdd, Acc);
-gen_inlined_enc_funs1(Erule, Fields, [_|T], ObjSetName, Sep, NthObj, Acc)->
- gen_inlined_enc_funs1(Erule, Fields, T, ObjSetName, Sep, NthObj, Acc);
-gen_inlined_enc_funs1(_, _, [], _, _, NthObj, Acc) ->
- emit([nl,indent(6),"end",nl,
- indent(3),"end"]),
- {Acc,NthObj}.
-
-emit_inner_of_fun(Erule, #typedef{name={ExtMod,Name},typespec=Type}=TDef,
- InternalDefFunName) ->
- case {ExtMod,Name} of
- {primitive,bif} ->
- emit(indent(12)),
- gen_encode_prim(Erule, Type, "Val"),
- {[],0};
- {constructed,bif} ->
- emit([indent(12),"'enc_",
- InternalDefFunName,"'(Val)"]),
- {[TDef#typedef{name=InternalDefFunName}],1};
- _ ->
- emit({indent(12),"'",ExtMod,"':'enc_",Name,"'(Val)"}),
- {[],0}
- end;
-emit_inner_of_fun(_Erule, #typedef{name=Name}, _) ->
- emit({indent(12),"'enc_",Name,"'(Val)"}),
- {[],0};
-emit_inner_of_fun(Erule, #type{}=Type, _) ->
- CurrMod = get(currmod),
- case Type#type.def of
- Def when is_atom(Def) ->
- emit({indent(9),Def," ->",nl,indent(12)}),
- gen_encode_prim(Erule, Type, "Val");
- #'Externaltypereference'{module=CurrMod,type=T} ->
- emit({indent(9),T," ->",nl,indent(12),"'enc_",T,"'(Val)"});
- #'Externaltypereference'{module=ExtMod,type=T} ->
- emit({indent(9),T," ->",nl,indent(12),ExtMod,":'enc_",
- T,"'(Val)"})
- end,
- {[],0}.
-
-indent(N) ->
- lists:duplicate(N,32). % 32 = space
-
-
-gen_objset_dec(_, _, {unique,undefined}, _, _, _, _) ->
- %% There is no unique field in the class of this object set
- %% don't bother about the constraint
- ok;
-gen_objset_dec(Erule, ObjSName, UniqueName, [{ObjName,Val,Fields}|T], ClName,
- ClFields, NthObj)->
- emit({"'getdec_",ObjSName,"'(",{asis,UniqueName},",",{asis,Val},
- ") ->",nl}),
- CurrMod = get(currmod),
- NewNthObj=
- case ObjName of
- {no_mod,no_name} ->
- gen_inlined_dec_funs(Erule, Fields, ClFields,
- ObjSName, NthObj);
- {CurrMod,Name} ->
- emit([" fun 'dec_",Name,"'/4"]),
- NthObj;
- {ModName,Name} ->
- emit_ext_decfun(ModName,Name),
- NthObj;
- _Other ->
- emit({" fun 'dec_",ObjName,"'/4"}),
- NthObj
- end,
- emit({";",nl}),
- gen_objset_dec(Erule, ObjSName, UniqueName, T, ClName, ClFields, NewNthObj);
-gen_objset_dec(_Erule, ObjSetName, _UniqueName, ['EXTENSIONMARK'],
- _ClName, _ClFields, _NthObj) ->
- emit({"'getdec_",ObjSetName,"'(_, _) ->",nl}),
- emit({indent(3),"fun(Attr1, Bytes, _,_) ->",nl}),
- emit({indent(6),"{Bytes,Attr1}",nl}),
- emit({indent(3),"end.",nl,nl}),
- ok;
-gen_objset_dec(_Erule, ObjSetName, UniqueName, [], _, _, _) ->
- emit_default_getdec(ObjSetName, UniqueName),
- emit([".",nl,nl]),
+gen_objectset_code(_Erules, _ObjSet) ->
ok.
-emit_ext_decfun(ModuleName,Name) ->
- emit([indent(3),"fun(T,V,O1,O2) -> '",ModuleName,"':'dec_",
- Name,"'(T,V,O1,O2) end"]).
-
-emit_default_getdec(ObjSetName,UniqueName) ->
- emit(["'getdec_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]),
- emit([indent(2), "fun(C,V,_,_) -> exit({{component,C},{value,V},{unique_name_and_value,",{asis,UniqueName},",ErrV}}) end"]).
-
-
-gen_inlined_dec_funs(Erule, Fields, List, ObjSetName, NthObj0) ->
- emit([indent(3),"fun(Type, Val, _, _) ->",nl,
- indent(6),"case Type of",nl]),
- NthObj = gen_inlined_dec_funs1(Erule, Fields, List,
- ObjSetName, "", NthObj0),
- emit([nl,indent(6),"end",nl,
- indent(3),"end"]),
- NthObj.
-
-gen_inlined_dec_funs1(Erule, Fields, [{typefield,Name,_}|Rest],
- ObjSetName, Sep0, NthObj) ->
- InternalDefFunName = [NthObj,Name,ObjSetName],
- emit(Sep0),
- Sep = [";",nl],
- N = case lists:keyfind(Name, 1, Fields) of
- {_,#type{}=Type} ->
- emit_inner_of_decfun(Erule, Type, InternalDefFunName);
- {_,#typedef{}=Type} ->
- emit([indent(9),{asis,Name}," ->",nl]),
- emit_inner_of_decfun(Erule, Type, InternalDefFunName);
- {_,#'Externaltypereference'{}=Etype} ->
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12)]),
- gen_dec_external(Etype, "Val"),
- 0;
- false ->
- emit([indent(9),{asis,Name}," -> {Val,Type}"]),
- 0
- end,
- gen_inlined_dec_funs1(Erule, Fields, Rest, ObjSetName, Sep, NthObj+N);
-gen_inlined_dec_funs1(Erule, Fields, [_|Rest], ObjSetName, Sep, NthObj) ->
- gen_inlined_dec_funs1(Erule, Fields, Rest, ObjSetName, Sep, NthObj);
-gen_inlined_dec_funs1(_, _, [], _, _, NthObj) -> NthObj.
-
-emit_inner_of_decfun(Erule, #typedef{name={ExtName,Name},typespec=Type},
- InternalDefFunName) ->
- case {ExtName,Name} of
- {primitive,bif} ->
- emit(indent(12)),
- gen_dec_prim(Erule, Type, "Val"),
- 0;
- {constructed,bif} ->
- emit({indent(12),"'dec_",
- asn1ct_gen:list2name(InternalDefFunName),"'(Val)"}),
- 1;
- _ ->
- emit({indent(12),"'",ExtName,"':'dec_",Name,"'(Val, telltype)"}),
- 0
- end;
-emit_inner_of_decfun(_Erule, #typedef{name=Name}, _) ->
- emit({indent(12),"'dec_",Name,"'(Val, telltype)"}),
- 0;
-emit_inner_of_decfun(Erule, #type{}=Type, _) ->
- CurrMod = get(currmod),
- case Type#type.def of
- Def when is_atom(Def) ->
- emit({indent(9),Def," ->",nl,indent(12)}),
- gen_dec_prim(Erule, Type, "Val");
- #'Externaltypereference'{module=CurrMod,type=T} ->
- emit({indent(9),T," ->",nl,indent(12),"'dec_",T,"'(Val)"});
- #'Externaltypereference'{module=ExtMod,type=T} ->
- emit({indent(9),T," ->",nl,indent(12),ExtMod,":'dec_",
- T,"'(Val)"})
- end,
- 0.
-
-
-gen_internal_funcs(_,[]) ->
- ok;
-gen_internal_funcs(Erules,[TypeDef|Rest]) ->
- gen_encode_user(Erules,TypeDef),
- emit([nl,nl,"'dec_",TypeDef#typedef.name,"'(Bytes) ->",nl]),
- gen_decode_user(Erules,TypeDef),
- gen_internal_funcs(Erules,Rest).
-
-
-
%% DECODING *****************************
%%***************************************
-gen_decode(Erules,Type) when is_record(Type,typedef) ->
- D = Type,
- emit({nl,nl}),
- emit({"'dec_",Type#typedef.name,"'(Bytes,_) ->",nl}),
+gen_decode(Erules, #typedef{}=Type) ->
+ DecFunc = dec_func(Type#typedef.name),
+ emit([nl,nl,{asis,DecFunc},"(Bytes) ->",nl]),
dbdec(Type#typedef.name),
- gen_decode_user(Erules,D).
+ gen_decode_user(Erules, Type).
gen_decode(Erules,Tname,#'ComponentType'{name=Cname,typespec=Type}) ->
NewTname = [Cname|Tname],
@@ -944,8 +218,9 @@ gen_decode(Erules,Typename,Type) when is_record(Type,type) ->
_ ->
""
end,
- emit({nl,"'dec_",asn1ct_gen:list2name(Typename),
- "'(Bytes,_",ObjFun,") ->",nl}),
+ emit([nl,
+ {asis,dec_func(asn1ct_gen:list2name(Typename))},
+ "(Bytes",ObjFun,") ->",nl]),
dbdec(Typename),
asn1ct_gen:gen_decode_constructed(Erules,Typename,InnerType,Type);
_ ->
@@ -982,8 +257,8 @@ gen_dec_external(Ext, BytesVar) ->
#'Externaltypereference'{module=Mod,type=Type} = Ext,
emit([case CurrMod of
Mod -> [];
- _ -> ["'",Mod,"':"]
- end,"'dec_",Type,"'(",BytesVar,",telltype)"]).
+ _ -> [{asis,Mod},":"]
+ end,{asis,dec_func(Type)},"(",BytesVar,")"]).
gen_dec_imm(Erule, #type{def=Name,constraint=C}) ->
Aligned = case Erule of
@@ -1103,35 +378,6 @@ gen_dec_prim(Erule, Type, BytesVar) ->
Imm = gen_dec_imm(Erule, Type),
asn1ct_imm:dec_code_gen(Imm, BytesVar).
-is_already_generated(Operation,Name) ->
- case get(class_default_type) of
- undefined ->
- put(class_default_type,[{Operation,Name}]),
- false;
- GeneratedList ->
- case lists:member({Operation,Name},GeneratedList) of
- true ->
- true;
- false ->
- put(class_default_type,[{Operation,Name}|GeneratedList]),
- false
- end
- end.
-
-get_class_fields(#classdef{typespec=ObjClass}) ->
- ObjClass#objectclass.fields;
-get_class_fields(#objectclass{fields=Fields}) ->
- Fields;
-get_class_fields(_) ->
- [].
-
-
-get_object_field(Name,ObjectFields) ->
- case lists:keysearch(Name,1,ObjectFields) of
- {value,Field} -> Field;
- false -> false
- end.
-
%% For PER the ExtensionAdditionGroup notation has significance for the encoding and decoding
%% the components within the ExtensionAdditionGroup is treated in a similar way as if they
@@ -1170,11 +416,8 @@ imm_dec_open_type_1(Type, Aligned) ->
asn1ct_name:new(tmpval),
emit(["begin",nl,
"{",{curr,tmpval},",_} = ",
- "dec_",Type,"(",OpenType,", mandatory),",nl,
+ {asis,dec_func(Type)},"(",OpenType,"),",nl,
"{",{curr,tmpval},com,Buf,"}",nl,
"end"])
end,
{call,D,asn1ct_imm:per_dec_open_type(Aligned)}.
-
-eval_module(per) -> asn1ct_eval_per;
-eval_module(uper) -> asn1ct_eval_uper.
diff --git a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl
deleted file mode 100644
index 012d54e7a1..0000000000
--- a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl
+++ /dev/null
@@ -1,461 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
--module(asn1ct_gen_per_rt2ct).
-
-%% Handle encoding of primitives for aligned PER.
-
--include("asn1_records.hrl").
-
--export([gen_encode_prim/3]).
-
--import(asn1ct_gen, [emit/1,demit/1]).
--import(asn1ct_func, [call/3]).
-
-gen_encode_prim(Erules, #type{}=D, Value) ->
- Constraint = D#type.constraint,
- case D#type.def of
- 'INTEGER' ->
- EffectiveConstr = effective_constraint(integer,Constraint),
- emit([" %%INTEGER with effective constraint: ",
- {asis,EffectiveConstr},nl]),
- emit_enc_integer(Erules,EffectiveConstr,Value);
- {'INTEGER',NamedNumberList} ->
- EffectiveConstr = effective_constraint(integer,Constraint),
- %% maybe an emit_enc_NNL_integer
- emit([" %%INTEGER with effective constraint: ",
- {asis,EffectiveConstr},nl]),
- emit_enc_integer_NNL(Erules,EffectiveConstr,Value,NamedNumberList);
- 'REAL' ->
- emit_enc_real(Erules, Value);
-
- {'BIT STRING',NamedNumberList} ->
- EffectiveC = effective_constraint(bitstring,Constraint),
- case EffectiveC of
- 0 ->
- emit({"[]"});
- _ ->
- call(Erules, encode_bit_string,
- [{asis,EffectiveC},Value,
- {asis,NamedNumberList}])
- end;
- 'NULL' ->
- emit("[]");
- 'OBJECT IDENTIFIER' ->
- call(Erules, encode_object_identifier, [Value]);
- 'RELATIVE-OID' ->
- call(Erules, encode_relative_oid, [Value]);
- 'ObjectDescriptor' ->
- call(Erules, encode_ObjectDescriptor,
- [{asis,Constraint},Value]);
- 'BOOLEAN' ->
- emit({"case ",Value," of",nl,
- " true -> [1];",nl,
- " false -> [0];",nl,
- " _ -> exit({error,{asn1,{encode_boolean,",Value,"}}})",nl,
- "end"});
- 'OCTET STRING' ->
- emit_enc_octet_string(Erules,Constraint,Value);
-
- 'NumericString' ->
- emit_enc_known_multiplier_string('NumericString',Constraint,Value);
- TString when TString == 'TeletexString';
- TString == 'T61String' ->
- call(Erules, encode_TeletexString, [{asis,Constraint},Value]);
- 'VideotexString' ->
- call(Erules, encode_VideotexString, [{asis,Constraint},Value]);
- 'UTCTime' ->
- emit_enc_known_multiplier_string('VisibleString',Constraint,Value);
- 'GeneralizedTime' ->
- emit_enc_known_multiplier_string('VisibleString',Constraint,Value);
- 'GraphicString' ->
- call(Erules, encode_GraphicString, [{asis,Constraint},Value]);
- 'VisibleString' ->
- emit_enc_known_multiplier_string('VisibleString',Constraint,Value);
- 'GeneralString' ->
- call(Erules, encode_GeneralString, [{asis,Constraint},Value]);
- 'PrintableString' ->
- emit_enc_known_multiplier_string('PrintableString',Constraint,Value);
- 'IA5String' ->
- emit_enc_known_multiplier_string('IA5String',Constraint,Value);
- 'BMPString' ->
- emit_enc_known_multiplier_string('BMPString',Constraint,Value);
- 'UniversalString' ->
- emit_enc_known_multiplier_string('UniversalString',Constraint,Value);
- 'UTF8String' ->
- call(Erules, encode_UTF8String, [Value]);
- 'ASN1_OPEN_TYPE' ->
- NewValue = case Constraint of
- [#'Externaltypereference'{type=Tname}] ->
- asn1ct_func:need({Erules,complete,1}),
- io_lib:format(
- "complete(enc_~s(~s))",[Tname,Value]);
- [#type{def=#'Externaltypereference'{type=Tname}}] ->
- asn1ct_func:need({Erules,complete,1}),
- io_lib:format(
- "complete(enc_~s(~s))",
- [Tname,Value]);
- _ ->
- io_lib:format("iolist_to_binary(~s)",
- [Value])
- end,
- call(Erules, encode_open_type, [NewValue])
- end.
-
-emit_enc_real(Erules, Real) ->
- asn1ct_name:new(tmpval),
- asn1ct_name:new(tmplen),
- emit(["begin",nl,
- "{",{curr,tmpval},com,{curr,tmplen},"} = ",
- {call,real_common,encode_real,[Real]},com,nl,
- "[",{call,Erules,encode_length,[{curr,tmplen}]},",",nl,
- {call,Erules,octets_to_complete,
- [{curr,tmplen},{curr,tmpval}]},"]",nl,
- "end"]).
-
-emit_enc_known_multiplier_string(StringType,C,Value) ->
- SizeC = effective_constraint(bitstring, C),
- PAlphabC = get_constraint(C,'PermittedAlphabet'),
- case {StringType,PAlphabC} of
- {'UniversalString',{_,_}} ->
- exit({error,{asn1,{'not implemented',"UniversalString with "
- "PermittedAlphabet constraint"}}});
- {'BMPString',{_,_}} ->
- exit({error,{asn1,{'not implemented',"BMPString with "
- "PermittedAlphabet constraint"}}});
- _ -> ok
- end,
- NumBits = get_NumBits(C,StringType),
- CharOutTab = get_CharOutTab(C,StringType),
- %% NunBits and CharOutTab for chars_encode
- emit_enc_k_m_string(SizeC, NumBits, CharOutTab, Value).
-
-emit_enc_k_m_string(0, _NumBits, _CharOutTab, _Value) ->
- emit({"[]"});
-emit_enc_k_m_string(SizeC, NumBits, CharOutTab, Value) ->
- call(per, encode_known_multiplier_string,
- [{asis,SizeC},NumBits,{asis,CharOutTab},Value]).
-
-
-%% copied from run time module
-
-get_CharOutTab(C, StringType) ->
- case get_constraint(C,'PermittedAlphabet') of
- {'SingleValue',Sv} ->
- get_CharTab2(C, StringType, hd(Sv), lists:max(Sv), Sv);
- no ->
- case StringType of
- 'IA5String' ->
- {0,16#7F,notab};
- 'VisibleString' ->
- get_CharTab2(C, StringType, 16#20, 16#7F, notab);
- 'PrintableString' ->
- Chars = lists:sort(
- " '()+,-./0123456789:=?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"),
- get_CharTab2(C, StringType, hd(Chars),
- lists:max(Chars), Chars);
- 'NumericString' ->
- get_CharTab2(C, StringType, 16#20, $9, " 0123456789");
- 'UniversalString' ->
- {0,16#FFFFFFFF,notab};
- 'BMPString' ->
- {0,16#FFFF,notab}
- end
- end.
-
-get_CharTab2(C, StringType, Min, Max, Chars) ->
- BitValMax = (1 bsl get_NumBits(C,StringType))-1,
- if
- Max =< BitValMax ->
- {0,Max,notab};
- true ->
- {Min,Max,create_char_tab(Min,Chars)}
- end.
-
-create_char_tab(Min,L) ->
- list_to_tuple(create_char_tab(Min,L,0)).
-create_char_tab(Min,[Min|T],V) ->
- [V|create_char_tab(Min+1,T,V+1)];
-create_char_tab(_Min,[],_V) ->
- [];
-create_char_tab(Min,L,V) ->
- [false|create_char_tab(Min+1,L,V)].
-
-get_NumBits(C,StringType) ->
- case get_constraint(C,'PermittedAlphabet') of
- {'SingleValue',Sv} ->
- charbits(length(Sv),aligned);
- no ->
- case StringType of
- 'IA5String' ->
- charbits(128,aligned); % 16#00..16#7F
- 'VisibleString' ->
- charbits(95,aligned); % 16#20..16#7E
- 'PrintableString' ->
- charbits(74,aligned); % [$\s,$',$(,$),$+,$,,$-,$.,$/,"0123456789",$:,$=,$?,$A..$Z,$a..$z
- 'NumericString' ->
- charbits(11,aligned); % $ ,"0123456789"
- 'UniversalString' ->
- 32;
- 'BMPString' ->
- 16
- end
- end.
-
-charbits(NumOfChars,aligned) ->
- case charbits(NumOfChars) of
- 1 -> 1;
- 2 -> 2;
- B when B =< 4 -> 4;
- B when B =< 8 -> 8;
- B when B =< 16 -> 16;
- B when B =< 32 -> 32
- end.
-
-charbits(NumOfChars) when NumOfChars =< 2 -> 1;
-charbits(NumOfChars) when NumOfChars =< 4 -> 2;
-charbits(NumOfChars) when NumOfChars =< 8 -> 3;
-charbits(NumOfChars) when NumOfChars =< 16 -> 4;
-charbits(NumOfChars) when NumOfChars =< 32 -> 5;
-charbits(NumOfChars) when NumOfChars =< 64 -> 6;
-charbits(NumOfChars) when NumOfChars =< 128 -> 7;
-charbits(NumOfChars) when NumOfChars =< 256 -> 8;
-charbits(NumOfChars) when NumOfChars =< 512 -> 9;
-charbits(NumOfChars) when NumOfChars =< 1024 -> 10;
-charbits(NumOfChars) when NumOfChars =< 2048 -> 11;
-charbits(NumOfChars) when NumOfChars =< 4096 -> 12;
-charbits(NumOfChars) when NumOfChars =< 8192 -> 13;
-charbits(NumOfChars) when NumOfChars =< 16384 -> 14;
-charbits(NumOfChars) when NumOfChars =< 32768 -> 15;
-charbits(NumOfChars) when NumOfChars =< 65536 -> 16;
-charbits(NumOfChars) when is_integer(NumOfChars) ->
- 16 + charbits1(NumOfChars bsr 16).
-
-charbits1(0) ->
- 0;
-charbits1(NumOfChars) ->
- 1 + charbits1(NumOfChars bsr 1).
-
-%% copied from run time module
-
-emit_enc_octet_string(Erules, Constraint, Value) ->
- case effective_constraint(bitstring, Constraint) of
- 0 ->
- emit({" []"});
- 1 ->
- asn1ct_name:new(tmpval),
- emit({" begin",nl}),
- emit({" [",{curr,tmpval},"] = ",Value,",",nl}),
- emit([" [[10,8],",{curr,tmpval},"]",nl]),
- emit(" end");
- 2 ->
- asn1ct_name:new(tmpval),
- emit([" begin",nl,
- " ",{curr,tmpval}," = ",Value,",",nl,
- " case length(",{curr,tmpval},") of",nl,
- " 2 ->",nl,
- " [[45,16,2]|",{curr,tmpval},"];",nl,
- " _ ->",nl,
- " exit({error,{value_out_of_bounds,",
- {curr,tmpval},"}})",nl,
- " end",nl,
- " end"]);
- Sv when is_integer(Sv), Sv < 256 ->
- asn1ct_name:new(tmpval),
- asn1ct_name:new(tmplen),
- emit([" begin",nl,
- " ",{curr,tmpval}," = ",Value,",",nl,
- " case length(",{curr,tmpval},") of",nl,
- " ",Sv,"=",{curr,tmplen}," ->",nl,
- " [20,",{curr,tmplen},"|",{curr,tmpval},"];",nl,
- " _ ->",nl,
- " exit({error,{value_out_of_bounds,",
- {curr,tmpval},"}})",nl,
- " end",nl,
- " end"]);
- Sv when is_integer(Sv),Sv =< 65535 ->
- asn1ct_name:new(tmpval),
- asn1ct_name:new(tmplen),
- emit([" begin",nl,
- " ",{curr,tmpval}," = ",Value,",",nl,
- " case length(",{curr,tmpval},") of",nl,
- " ",Sv,"=",{curr,tmplen}," ->",nl,
- " [<<21,",{curr,tmplen},":16>>|",Value,"];",nl,
- " _ ->",nl,
- " exit({error,{value_out_of_bounds,",
- {curr,tmpval},"}})",nl,
- " end",nl,
- " end"]);
- C ->
- call(Erules, encode_octet_string,
- [{asis,C},Value])
- end.
-
-emit_enc_integer_case(Value) ->
- case get(component_type) of
- {true,#'ComponentType'{prop=Prop}} ->
- emit({" begin",nl}),
- case Prop of
- Opt when Opt=='OPTIONAL';
- is_tuple(Opt),element(1,Opt)=='DEFAULT' ->
- emit({" case ",Value," of",nl}),
- ok;
- _ ->
- emit({" ",{curr,tmpval},"=",Value,",",nl}),
- emit({" case ",{curr,tmpval}," of",nl}),
- asn1ct_name:new(tmpval)
- end;
-% asn1ct_name:new(tmpval);
- _ ->
- emit({" case ",Value," of ",nl})
- end.
-emit_enc_integer_end_case() ->
- case get(component_type) of
- {true,_} ->
- emit({nl," end"}); % end of begin ... end
- _ -> ok
- end.
-
-
-emit_enc_integer_NNL(Erules,C,Value,NNL) ->
- EncVal = enc_integer_NNL_cases(Value,NNL),
- emit_enc_integer(Erules,C,EncVal).
-
-enc_integer_NNL_cases(Value,NNL) ->
- asn1ct_name:new(tmpval),
- TmpVal = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)),
- Cases=enc_integer_NNL_cases1(NNL),
- lists:flatten(io_lib:format("(case ~s of "++Cases++
- "~s when is_atom(~s)->exit({error,{asn1,{namednumber,~s}}});_->~s end)",[Value,TmpVal,TmpVal,TmpVal,Value])).
-
-enc_integer_NNL_cases1([{NNo,No}|Rest]) ->
- io_lib:format("~w->~w;",[NNo,No])++enc_integer_NNL_cases1(Rest);
-enc_integer_NNL_cases1([]) ->
- "".
-
-emit_enc_integer(_Erule,[{'SingleValue',Int}],Value) ->
- asn1ct_name:new(tmpval),
- emit_enc_integer_case(Value),% emit([" case ",Value," of",nl]),
- emit([" ",Int," -> [];",nl]),
- emit([" ",{curr,tmpval}," ->",nl]),
- emit([" exit({error,{value_out_of_bounds,",{curr,tmpval},"}})",
- nl," end",nl]),
- emit_enc_integer_end_case();
-
-emit_enc_integer(_Erule,[{_,{Lb,Ub},_Range,{bits,NoBs}}],Value) -> % Range =< 255
- asn1ct_name:new(tmpval),
- emit_enc_integer_case(Value),
- emit([" ",{curr,tmpval}," when ",{curr,tmpval},"=<",Ub,",",
- {curr,tmpval},">=",Lb," ->",nl]),
- emit([" [10,",NoBs,",",{curr,tmpval},"- ",Lb,"];",nl]),
- emit([" ",{curr,tmpval}," ->",nl]),
- emit([" exit({error,{value_out_of_bounds,",
- {curr,tmpval},"}})",nl," end",nl]),
- emit_enc_integer_end_case();
-
-emit_enc_integer(_Erule,[{_,{Lb,Ub},Range,_}],Value) when Range =< 256 ->
- asn1ct_name:new(tmpval),
- emit_enc_integer_case(Value),
- emit([" ",{curr,tmpval}," when ",{curr,tmpval},"=<",Ub,",",
- {curr,tmpval},">=",Lb," ->",nl]),
- emit([" [20,1,",{curr,tmpval},"- ",Lb,"];",nl]),
- emit([" ",{curr,tmpval}," ->",nl]),
- emit([" exit({error,{value_out_of_bounds,",{curr,tmpval},"}})",
- nl," end",nl]),
- emit_enc_integer_end_case();
-
-emit_enc_integer(_Erule,[{_,{Lb,Ub},Range,_}],Value) when Range =< 65536 ->
- asn1ct_name:new(tmpval),
- emit_enc_integer_case(Value),
- emit([" ",{curr,tmpval}," when ",{curr,tmpval},"=<",Ub,",",
- {curr,tmpval},">=",Lb," ->",nl]),
- emit([" [20,2,<<(",{curr,tmpval},"- ",Lb,"):16>>];",nl]),
- emit([" ",{curr,tmpval}," ->",nl]),
- emit([" exit({error,{value_out_of_bounds,",{curr,tmpval},"}})",
- nl," end",nl]),
- emit_enc_integer_end_case();
-
-emit_enc_integer(Erule, [{'ValueRange',{Lb,Ub}=VR}], Value)
- when is_integer(Lb), is_integer(Ub) ->
- call(Erule, encode_constrained_number, [{asis,VR},Value]);
-
-emit_enc_integer(Erule, C, Value) ->
- call(Erule, encode_integer, [{asis,C},Value]).
-
-
-get_constraint([{Key,V}],Key) ->
- V;
-get_constraint([],_) ->
- no;
-get_constraint(C,Key) ->
- case lists:keysearch(Key,1,C) of
- false ->
- no;
- {value,{_,V}} ->
- V
- end.
-
-%% effective_constraint(Type,C)
-%% Type = atom()
-%% C = [C1,...]
-%% C1 = {'SingleValue',SV} | {'ValueRange',VR} | {atom(),term()}
-%% SV = integer() | [integer(),...]
-%% VR = {Lb,Ub}
-%% Lb = 'MIN' | integer()
-%% Ub = 'MAX' | integer()
-%% Returns a single value if C only has a single value constraint, and no
-%% value range constraints, that constrains to a single value, otherwise
-%% returns a value range that has the lower bound set to the lowest value
-%% of all single values and lower bound values in C and the upper bound to
-%% the greatest value.
-effective_constraint(integer,[C={{_,_},_}|_Rest]) -> % extension
- [C]; %% [C|effective_constraint(integer,Rest)]; XXX what is possible ???
-effective_constraint(integer,C) ->
- pre_encode(integer, asn1ct_imm:effective_constraint(integer, C));
-effective_constraint(bitstring,C) ->
- asn1ct_imm:effective_constraint(bitstring, C).
-
-pre_encode(integer,[]) ->
- [];
-pre_encode(integer,C=[{'SingleValue',_}]) ->
- C;
-pre_encode(integer,C=[{'ValueRange',VR={Lb,Ub}}]) when is_integer(Lb),is_integer(Ub)->
- Range = Ub-Lb+1,
- if
- Range =< 255 ->
- NoBits = no_bits(Range),
- [{'ValueRange',VR,Range,{bits,NoBits}}];
- Range =< 256 ->
- [{'ValueRange',VR,Range,{octets,1}}];
- Range =< 65536 ->
- [{'ValueRange',VR,Range,{octets,2}}];
- true ->
- C
- end;
-pre_encode(integer,C) ->
- C.
-
-no_bits(2) -> 1;
-no_bits(N) when N=<4 -> 2;
-no_bits(N) when N=<8 -> 3;
-no_bits(N) when N=<16 -> 4;
-no_bits(N) when N=<32 -> 5;
-no_bits(N) when N=<64 -> 6;
-no_bits(N) when N=<128 -> 7;
-no_bits(N) when N=<255 -> 8.
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl
index bf362db843..892178f61b 100644
--- a/lib/asn1/src/asn1ct_imm.erl
+++ b/lib/asn1/src/asn1ct_imm.erl
@@ -26,6 +26,18 @@
per_dec_octet_string/2,per_dec_open_type/1,per_dec_real/1,
per_dec_restricted_string/1]).
-export([per_dec_constrained/3,per_dec_normally_small_number/1]).
+-export([per_enc_bit_string/4,per_enc_boolean/2,
+ per_enc_choice/3,per_enc_enumerated/3,
+ per_enc_integer/3,per_enc_integer/4,
+ per_enc_null/2,
+ per_enc_k_m_string/4,per_enc_octet_string/3,
+ per_enc_open_type/2,
+ per_enc_restricted_string/3,
+ per_enc_small_number/2]).
+-export([per_enc_extension_bit/2,per_enc_extensions/4,per_enc_optional/3]).
+-export([per_enc_sof/5]).
+-export([enc_absent/3,enc_append/1,enc_bind_var/1]).
+-export([enc_cg/2]).
-export([optimize_alignment/1,optimize_alignment/2,
dec_slim_cg/2,dec_code_gen/2]).
-export([effective_constraint/2]).
@@ -115,29 +127,18 @@ per_dec_named_integer(Constraint, NamedList0, Aligned) ->
per_dec_k_m_string(StringType, Constraint, Aligned) ->
SzConstr = effective_constraint(bitstring, Constraint),
N = string_num_bits(StringType, Constraint, Aligned),
- %% X.691 (07/2002) 27.5.7 says if the upper bound times the number
- %% of bits is greater than or equal to 16, then the bit field should
- %% be aligned.
- Imm = dec_string(SzConstr, N, Aligned, fun(_, Ub) -> Ub >= 16 end),
+ Imm = dec_string(SzConstr, N, Aligned, k_m_string),
Chars = char_tab(Constraint, StringType, N),
convert_string(N, Chars, Imm).
per_dec_octet_string(Constraint, Aligned) ->
- dec_string(Constraint, 8, Aligned,
- %% Aligned unless the size is fixed and =< 16.
- fun(Sv, Sv) -> Sv > 16;
- (_, _) -> true
- end).
+ dec_string(Constraint, 8, Aligned, 'OCTET STRING').
per_dec_raw_bitstring(Constraint, Aligned) ->
- dec_string(Constraint, 1, Aligned,
- fun(Sv, Sv) -> Sv > 16;
- (_, _) -> true
- end).
+ dec_string(Constraint, 1, Aligned, 'BIT STRING').
per_dec_open_type(Aligned) ->
- {get_bits,decode_unconstrained_length(true, Aligned),
- [8,binary,{align,Aligned}]}.
+ dec_string(no, 8, Aligned, open_type).
per_dec_real(Aligned) ->
Dec = fun(V, Buf) ->
@@ -152,26 +153,285 @@ per_dec_restricted_string(Aligned) ->
DecLen = decode_unconstrained_length(true, Aligned),
{get_bits,DecLen,[8,binary]}.
+%%%
+%%% Encoding.
+%%%
+
+per_enc_bit_string(Val0, [], Constraint0, Aligned) ->
+ {B,[Val,Bs,Bits]} = mk_vars(Val0, [bs,bits]),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ ExtraArgs = case constr_min_size(Constraint) of
+ no -> [];
+ Lb -> [Lb]
+ end,
+ B ++ [{call,per_common,to_bitstring,[Val|ExtraArgs],Bs},
+ {call,erlang,bit_size,[Bs],Bits}|
+ per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')];
+per_enc_bit_string(Val0, NNL0, Constraint0, Aligned) ->
+ {B,[Val,Bs,Bits,Positions]} = mk_vars(Val0, [bs,bits,positions]),
+ NNL = lists:keysort(2, NNL0),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ ExtraArgs = case constr_min_size(Constraint) of
+ no -> [];
+ Lb -> [Lb]
+ end,
+ B ++ [{'try',
+ [bit_string_name2pos_fun(NNL, Val)],
+ {Positions,
+ [{call,per_common,bitstring_from_positions,
+ [Positions|ExtraArgs]}]},
+ [{call,per_common,to_named_bitstring,[Val|ExtraArgs]}],Bs},
+ {call,erlang,bit_size,[Bs],Bits}|
+ per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')].
+
+per_enc_boolean(Val0, _Aligned) ->
+ {B,[Val]} = mk_vars(Val0, []),
+ B++build_cond([[{eq,Val,false},{put_bits,0,1,[1]}],
+ [{eq,Val,true},{put_bits,1,1,[1]}]]).
+
+per_enc_choice(Val0, Cs0, _Aligned) ->
+ {B,[Val]} = mk_vars(Val0, []),
+ Cs = [[{eq,Val,Tag}|opt_choice(Imm)] || {Tag,Imm} <- Cs0],
+ B++build_cond(Cs).
+
+per_enc_enumerated(Val0, {Root,Ext}, Aligned) ->
+ {B,[Val]} = mk_vars(Val0, []),
+ Constr = enumerated_constraint(Root),
+ RootCs = per_enc_enumerated_root(Root, [{put_bits,0,1,[1]}],
+ Val, Constr, Aligned),
+ ExtCs = per_enc_enumerated_ext(Ext, Val, Aligned),
+ B++[{'cond',RootCs++ExtCs++enumerated_error(Val)}];
+per_enc_enumerated(Val0, Root, Aligned) ->
+ {B,[Val]} = mk_vars(Val0, []),
+ Constr = enumerated_constraint(Root),
+ Cs = per_enc_enumerated_root(Root, [], Val, Constr, Aligned),
+ B++[{'cond',Cs++enumerated_error(Val)}].
+
+enumerated_error(Val) ->
+ [['_',{error,Val}]].
+
+per_enc_integer(Val0, Constraint0, Aligned) ->
+ {B,[Val]} = mk_vars(Val0, []),
+ Constraint = effective_constraint(integer, Constraint0),
+ B ++ per_enc_integer_1(Val, Constraint, Aligned).
+
+per_enc_integer(Val0, NNL, Constraint0, Aligned) ->
+ {B,[Val]} = mk_vars(Val0, []),
+ Constraint = effective_constraint(integer, Constraint0),
+ Cs = [[{eq,Val,N}|per_enc_integer_1(V, Constraint, Aligned)] ||
+ {N,V} <- NNL],
+ case per_enc_integer_1(Val, Constraint, Aligned) of
+ [{'cond',IntCs}] ->
+ B ++ [{'cond',Cs++IntCs}];
+ Other ->
+ B ++ [{'cond',Cs++[['_'|Other]]}]
+ end.
+
+per_enc_null(_Val, _Aligned) ->
+ [].
+
+per_enc_k_m_string(Val0, StringType, Constraint, Aligned) ->
+ {B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]),
+ SzConstraint = effective_constraint(bitstring, Constraint),
+ Unit = string_num_bits(StringType, Constraint, Aligned),
+ Chars0 = char_tab(Constraint, StringType, Unit),
+ Args = case enc_char_tab(Chars0) of
+ notab -> [Val,Unit];
+ Chars -> [Val,Unit,Chars]
+ end,
+ Enc = case Unit of
+ 16 ->
+ {call,per_common,encode_chars_16bit,[Val],Bin};
+ 32 ->
+ {call,per_common,encode_big_chars,[Val],Bin};
+ 8 ->
+ {call,erlang,list_to_binary,[Val],Bin};
+ _ ->
+ {call,per_common,encode_chars,Args,Bin}
+ end,
+ case Unit of
+ 8 ->
+ B ++ [Enc,{call,erlang,byte_size,[Bin],Len}];
+ _ ->
+ B ++ [{call,erlang,length,[Val],Len},Enc]
+ end ++ per_enc_length(Bin, Unit, Len, SzConstraint, Aligned, k_m_string).
+
+per_enc_open_type([], Aligned) ->
+ [{put_bits,1,8,unit(1, Aligned)},{put_bits,0,8,[1]}];
+per_enc_open_type([{'cond',
+ [['_',
+ {put_bits,0,0,_},
+ {call,per_common,encode_unconstrained_number,_}=Call]]}],
+ Aligned) ->
+ %% We KNOW that encode_unconstrained_number/1 will return an IO list;
+ %% therefore the call to complete/1 can be replaced with a cheaper
+ %% call to iolist_to_binary/1.
+ {Dst,Imm} = per_enc_open_type_output([Call], []),
+ ToBin = {erlang,iolist_to_binary},
+ Imm ++ per_enc_open_type(Dst, ToBin, Aligned);
+per_enc_open_type([{call,erlang,iolist_to_binary,Args}], Aligned) ->
+ {_,[_,Bin,Len]} = mk_vars('dummy', [bin,len]),
+ [{call,erlang,iolist_to_binary,Args,Bin},
+ {call,erlang,byte_size,[Bin],Len}|per_enc_length(Bin, 8, Len, Aligned)];
+per_enc_open_type(Imm0, Aligned) ->
+ try
+ {Prefix,Imm1} = split_off_nonbuilding(Imm0),
+ Prefix ++ enc_open_type(Imm1, Aligned)
+ catch
+ throw:impossible ->
+ {Dst,Imm} = per_enc_open_type_output(Imm0, []),
+ ToBin = {enc_mod(Aligned),complete},
+ Imm ++ per_enc_open_type(Dst, ToBin, Aligned)
+ end.
+
+per_enc_octet_string(Val0, Constraint0, Aligned) ->
+ {B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ B ++ [{call,erlang,iolist_to_binary,[Val],Bin},
+ {call,erlang,byte_size,[Bin],Len}|
+ per_enc_length(Bin, 8, Len, Constraint, Aligned, 'OCTET STRING')].
+
+per_enc_restricted_string(Val0, {M,F}, Aligned) ->
+ {B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]),
+ B ++ [{call,M,F,[Val],Bin},
+ {call,erlang,byte_size,[Bin],Len}|
+ per_enc_length(Bin, 8, Len, Aligned)].
+
+per_enc_small_number(Val, Aligned) ->
+ build_cond([[{lt,Val,64},{put_bits,Val,7,[1]}],
+ ['_',{put_bits,1,1,[1]}|
+ per_enc_unsigned(Val, Aligned)]]).
+
+per_enc_extension_bit(Val0, _Aligned) ->
+ {B,[Val]} = mk_vars(Val0, []),
+ B++build_cond([[{eq,Val,[]},{put_bits,0,1,[1]}],
+ ['_',{put_bits,1,1,[1]}]]).
+
+per_enc_extensions(Val0, Pos0, NumBits, Aligned) when NumBits > 0 ->
+ Pos = Pos0 + 1,
+ {B,[Val,Bitmap]} = mk_vars(Val0, [bitmap]),
+ Length = per_enc_small_length(NumBits, Aligned),
+ PutBits = case NumBits of
+ 1 -> [{put_bits,1,1,[1]}];
+ _ -> [{put_bits,Bitmap,NumBits,[1]}]
+ end,
+ B++[{call,per_common,extension_bitmap,[Val,Pos,Pos+NumBits],Bitmap},
+ {'cond',[[{eq,Bitmap,0}],
+ ['_'|Length ++ PutBits]],{var,"Extensions"}}].
+
+per_enc_optional(Val0, {Pos,Def}, _Aligned) when is_integer(Pos) ->
+ Val1 = lists:concat(["element(",Pos,", ",Val0,")"]),
+ {B,[Val]} = mk_vars(Val1, []),
+ Zero = {put_bits,0,1,[1]},
+ One = {put_bits,1,1,[1]},
+ B++[{'cond',[[{eq,Val,asn1_DEFAULT},Zero],
+ [{eq,Val,Def},Zero],
+ ['_',One]]}];
+per_enc_optional(Val0, Pos, _Aligned) when is_integer(Pos) ->
+ Val1 = lists:concat(["element(",Pos,", ",Val0,")"]),
+ {B,[Val]} = mk_vars(Val1, []),
+ Zero = {put_bits,0,1,[1]},
+ One = {put_bits,1,1,[1]},
+ B++[{'cond',[[{eq,Val,asn1_NOVALUE},Zero],
+ ['_',One]]}].
+
+per_enc_sof(Val0, Constraint, ElementVar, ElementImm, Aligned) ->
+ {B,[Val,Len]} = mk_vars(Val0, [len]),
+ SzConstraint = effective_constraint(bitstring, Constraint),
+ LenImm = enc_length(Len, SzConstraint, Aligned),
+ Lc0 = [{lc,ElementImm,{var,atom_to_list(ElementVar)},Val}],
+ Lc = opt_lc(Lc0, LenImm),
+ PreBlock = B ++ [{call,erlang,length,[Val],Len}],
+ case LenImm of
+ [{'cond',[[C|Action]]}] ->
+ PreBlock ++ [{'cond',[[C|Action++Lc]]}];
+ [{sub,_,_,_}=Sub,{'cond',[[C|Action]]}] ->
+ PreBlock ++
+ [Sub,{'cond',[[C|Action++Lc]]}];
+ EncLen ->
+ PreBlock ++ EncLen ++ Lc
+ end.
+
+enc_absent(Val0, AbsVals, Body) ->
+ {B,[Var]} = mk_vars(Val0, []),
+ Cs = [[{eq,Var,Aval}] || Aval <- AbsVals] ++ [['_'|Body]],
+ B++build_cond(Cs).
+
+enc_append([[]|T]) ->
+ enc_append(T);
+enc_append([[{put_bits,_,_,_}|_]=Pb|[Imm|T]=T0]) ->
+ case opt_choice(Pb++Imm) of
+ [{put_bits,_,_,_}|_] ->
+ [{block,Pb}|enc_append(T0)];
+ Opt ->
+ enc_append([Opt|T])
+ end;
+enc_append([Imm0|[Imm1|T]=T0]) ->
+ try combine_imms(Imm0, Imm1) of
+ Imm ->
+ enc_append([Imm|T])
+ catch
+ throw:impossible ->
+ [{block,Imm0}|enc_append(T0)]
+ end;
+enc_append([H|T]) ->
+ [{block,H}|enc_append(T)];
+enc_append([]) -> [].
+
+enc_bind_var(Val) ->
+ {B,[{var,Var}]} = mk_vars(Val, []),
+ {B,list_to_atom(Var)}.
+
+enc_cg(Imm0, false) ->
+ Imm1 = enc_cse(Imm0),
+ Imm = enc_pre_cg(Imm1),
+ enc_cg(Imm);
+enc_cg(Imm0, true) ->
+ Imm1 = enc_cse(Imm0),
+ Imm2 = enc_hoist_align(Imm1),
+ Imm3 = enc_opt_al(Imm2),
+ Imm4 = per_fixup(Imm3),
+ Imm = enc_pre_cg(Imm4),
+ enc_cg(Imm).
%%%
%%% Local functions.
%%%
-dec_string(Sv, U, Aligned0, AF) when is_integer(Sv) ->
+%% is_aligned(StringType, LowerBound, UpperBound) -> boolean()
+%% StringType = 'OCTET STRING' | 'BIT STRING' | k_m_string
+%% LowerBound = UpperBound = number of bits
+%% Determine whether a string should be aligned in PER.
+
+is_aligned(T, Lb, Ub) when T =:= 'OCTET STRING'; T =:= 'BIT STRING' ->
+ %% OCTET STRINGs and BIT STRINGs are aligned to a byte boundary
+ %% unless the size is fixed and less than or equal to 16 bits.
+ Lb =/= Ub orelse Lb > 16;
+is_aligned(k_m_string, _Lb, Ub) ->
+ %% X.691 (07/2002) 27.5.7 says if the upper bound times the number
+ %% of bits is greater than or equal to 16, then the bit field should
+ %% be aligned.
+ Ub >= 16.
+
+%%%
+%%% Generating the intermediate format format for decoding.
+%%%
+
+dec_string(Sv, U, Aligned0, T) when is_integer(Sv) ->
Bits = U*Sv,
- Aligned = Aligned0 andalso AF(Bits, Bits),
+ Aligned = Aligned0 andalso is_aligned(T, Bits, Bits),
{get_bits,Sv,[U,binary,{align,Aligned}]};
-dec_string({{Sv,Sv},[]}, U, Aligned, AF) ->
- bit_case(dec_string(Sv, U, Aligned, AF),
- dec_string(no, U, Aligned, AF));
-dec_string({{_,_}=C,[]}, U, Aligned, AF) ->
- bit_case(dec_string(C, U, Aligned, AF),
- dec_string(no, U, Aligned, AF));
-dec_string({Lb,Ub}, U, Aligned0, AF) ->
+dec_string({{Sv,Sv},[]}, U, Aligned, T) ->
+ bit_case(dec_string(Sv, U, Aligned, T),
+ dec_string(no, U, Aligned, T));
+dec_string({{_,_}=C,[]}, U, Aligned, T) ->
+ bit_case(dec_string(C, U, Aligned, T),
+ dec_string(no, U, Aligned, T));
+dec_string({Lb,Ub}, U, Aligned0, T) ->
Len = per_dec_constrained(Lb, Ub, Aligned0),
- Aligned = Aligned0 andalso AF(Lb*U, Ub*U),
+ Aligned = Aligned0 andalso is_aligned(T, Lb*U, Ub*U),
{get_bits,Len,[U,binary,{align,Aligned}]};
-dec_string(_, U, Aligned, _AF) ->
+dec_string(_, U, Aligned, _T) ->
Al = [{align,Aligned}],
DecRest = fun(V, Buf) ->
asn1ct_func:call(per_common,
@@ -692,6 +952,1164 @@ mk_dest(I) when is_integer(I) ->
integer_to_list(I);
mk_dest(S) -> S.
+%%%
+%%% Constructing the intermediate format for encoding.
+%%%
+
+split_off_nonbuilding(Imm) ->
+ lists:splitwith(fun is_nonbuilding/1, Imm).
+
+is_nonbuilding({apply,_,_,_}) -> true;
+is_nonbuilding({assign,_,_}) -> true;
+is_nonbuilding({call,_,_,_,_}) -> true;
+is_nonbuilding({'cond',_,_}) -> true;
+is_nonbuilding({lc,_,_,_,_}) -> true;
+is_nonbuilding({sub,_,_,_}) -> true;
+is_nonbuilding({'try',_,_,_,_}) -> true;
+is_nonbuilding(_) -> false.
+
+mk_vars(Input0, Temps) ->
+ asn1ct_name:new(enc),
+ Curr = asn1ct_name:curr(enc),
+ [H|T] = atom_to_list(Curr),
+ Base = [H - ($a - $A)|T ++ "@"],
+ if
+ is_atom(Input0) ->
+ Input = {var,atom_to_list(Input0)},
+ {[],[Input|mk_vars_1(Base, Temps)]};
+ is_integer(Input0) ->
+ {[],[Input0|mk_vars_1(Base, Temps)]};
+ Input0 =:= [] ->
+ {[],[Input0|mk_vars_1(Base, Temps)]};
+ true ->
+ Input = mk_var(Base, input),
+ {[{assign,Input,Input0}],[Input|mk_vars_1(Base, Temps)]}
+ end.
+
+mk_vars_1(Base, Vars) ->
+ [mk_var(Base, V) || V <- Vars].
+
+mk_var(Base, V) ->
+ {var,Base ++ atom_to_list(V)}.
+
+per_enc_integer_1(Val, [], Aligned) ->
+ [{'cond',[['_'|per_enc_unconstrained(Val, Aligned)]]}];
+per_enc_integer_1(Val0, [{{_,_}=Constr,[]}], Aligned) ->
+ {Prefix,Check,Action} = per_enc_integer_2(Val0, Constr, Aligned),
+ Prefix++build_cond([[Check,{put_bits,0,1,[1]}|Action],
+ ['_',{put_bits,1,1,[1]}|
+ per_enc_unconstrained(Val0, Aligned)]]);
+per_enc_integer_1(Val0, [Constr], Aligned) ->
+ {Prefix,Check,Action} = per_enc_integer_2(Val0, Constr, Aligned),
+ Prefix++build_cond([[Check|Action],
+ ['_',{error,Val0}]]).
+
+per_enc_integer_2(Val, {'SingleValue',Sv}, Aligned) ->
+ per_enc_constrained(Val, Sv, Sv, Aligned);
+per_enc_integer_2(Val0, {'ValueRange',{Lb,'MAX'}}, Aligned)
+ when is_integer(Lb) ->
+ {Prefix,Val} = sub_lb(Val0, Lb),
+ {Prefix,{ge,Val,0},per_enc_unsigned(Val, Aligned)};
+per_enc_integer_2(Val, {'ValueRange',{Lb,Ub}}, Aligned)
+ when is_integer(Lb), is_integer(Ub) ->
+ per_enc_constrained(Val, Lb, Ub, Aligned).
+
+per_enc_constrained(Val, Sv, Sv, _Aligned) ->
+ {[],{eq,Val,Sv},[]};
+per_enc_constrained(Val0, Lb, Ub, false) ->
+ {Prefix,Val} = sub_lb(Val0, Lb),
+ Range = Ub - Lb + 1,
+ NumBits = uper_num_bits(Range),
+ Check = {ult,Val,Range},
+ Put = [{put_bits,Val,NumBits,[1]}],
+ {Prefix,Check,Put};
+per_enc_constrained(Val0, Lb, Ub, true) ->
+ {Prefix,Val} = sub_lb(Val0, Lb),
+ Range = Ub - Lb + 1,
+ if
+ Range < 256 ->
+ NumBits = per_num_bits(Range),
+ Check = {ult,Val,Range},
+ Put = [{put_bits,Val,NumBits,[1]}],
+ {Prefix,Check,Put};
+ Range =:= 256 ->
+ NumBits = 8,
+ Check = {ult,Val,Range},
+ Put = [{put_bits,Val,NumBits,[1,align]}],
+ {Prefix,Check,Put};
+ Range =< 65536 ->
+ Check = {ult,Val,Range},
+ Put = [{put_bits,Val,16,[1,align]}],
+ {Prefix,Check,Put};
+ true ->
+ {var,VarBase} = Val,
+ Bin = {var,VarBase++"@bin"},
+ BinSize0 = {var,VarBase++"@bin_size0"},
+ BinSize = {var,VarBase++"@bin_size"},
+ Check = {ult,Val,Range},
+ RangeOctsLen = byte_size(binary:encode_unsigned(Range - 1)),
+ BitsNeeded = per_num_bits(RangeOctsLen),
+ Enc = [{call,binary,encode_unsigned,[Val],Bin},
+ {call,erlang,byte_size,[Bin],BinSize0},
+ {sub,BinSize0,1,BinSize},
+ {'cond',[['_',
+ {put_bits,BinSize,BitsNeeded,[1]},
+ {put_bits,Bin,binary,[8,align]}]]}],
+ {Prefix,Check,Enc}
+ end.
+
+per_enc_unconstrained(Val, Aligned) ->
+ case Aligned of
+ false -> [];
+ true -> [{put_bits,0,0,[1,align]}]
+ end ++ [{call,per_common,encode_unconstrained_number,[Val]}].
+
+per_enc_unsigned(Val, Aligned) ->
+ case is_integer(Val) of
+ false ->
+ {var,VarBase} = Val,
+ Bin = {var,VarBase++"@bin"},
+ BinSize = {var,VarBase++"@bin_size"},
+ [{call,binary,encode_unsigned,[Val],Bin},
+ {call,erlang,byte_size,[Bin],BinSize}|
+ per_enc_length(Bin, 8, BinSize, Aligned)];
+ true ->
+ Bin = binary:encode_unsigned(Val),
+ Len = byte_size(Bin),
+ per_enc_length(Bin, 8, Len, Aligned)
+ end.
+
+%% Encode a length field without any constraint.
+per_enc_length(Bin, Unit, Len, Aligned) ->
+ U = unit(1, Aligned),
+ PutBits = put_bits_binary(Bin, Unit, Aligned),
+ EncFragmented = {call,per_common,encode_fragmented,[Bin,Unit]},
+ Al = case Aligned of
+ false -> [];
+ true -> [{put_bits,0,0,[1,align]}]
+ end,
+ build_cond([[{lt,Len,128},
+ {put_bits,Len,8,U},PutBits],
+ [{lt,Len,16384},
+ {put_bits,2,2,U},{put_bits,Len,14,[1]},PutBits],
+ ['_'|Al++[EncFragmented]]]).
+
+per_enc_length(Bin, Unit, Len, no, Aligned, _Type) ->
+ per_enc_length(Bin, Unit, Len, Aligned);
+per_enc_length(Bin, Unit, Len, {{Lb,Ub},[]}, Aligned, Type) ->
+ {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned),
+ NoExt = {put_bits,0,1,[1]},
+ U = unit(Unit, Aligned, Type, Lb*Unit, Ub*Unit),
+ PutBits = [{put_bits,Bin,binary,U}],
+ [{'cond',ExtConds0}] = per_enc_length(Bin, Unit, Len, Aligned),
+ Ext = {put_bits,1,1,[1]},
+ ExtConds = prepend_to_cond(ExtConds0, Ext),
+ build_length_cond(Prefix, [[Check,NoExt|PutLen++PutBits]|ExtConds]);
+per_enc_length(Bin, Unit, Len, {Lb,Ub}, Aligned, Type)
+ when is_integer(Lb) ->
+ {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned),
+ U = unit(Unit, Aligned, Type, Lb*Unit, Ub*Unit),
+ PutBits = [{put_bits,Bin,binary,U}],
+ build_length_cond(Prefix, [[Check|PutLen++PutBits]]);
+per_enc_length(Bin, Unit, Len, Sv, Aligned, Type) when is_integer(Sv) ->
+ NumBits = Sv*Unit,
+ U = unit(Unit, Aligned, Type, NumBits, NumBits),
+ Pb = {put_bits,Bin,binary,U},
+ [{'cond',[[{eq,Len,Sv},Pb]]}].
+
+enc_length(Len, no, Aligned) ->
+ U = unit(1, Aligned),
+ build_cond([[{lt,Len,128},
+ {put_bits,Len,8,U}],
+ [{lt,Len,16384},
+ {put_bits,2,2,U},{put_bits,Len,14,[1]}]]);
+enc_length(Len, {{Lb,Ub},[]}, Aligned) ->
+ {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned),
+ NoExt = {put_bits,0,1,[1]},
+ [{'cond',ExtConds0}] = enc_length(Len, no, Aligned),
+ Ext = {put_bits,1,1,[1]},
+ ExtConds = prepend_to_cond(ExtConds0, Ext),
+ build_length_cond(Prefix, [[Check,NoExt|PutLen]|ExtConds]);
+enc_length(Len, {Lb,Ub}, Aligned) when is_integer(Lb) ->
+ {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned),
+ build_length_cond(Prefix, [[Check|PutLen]]);
+enc_length(Len, Sv, _Aligned) when is_integer(Sv) ->
+ [{'cond',[[{eq,Len,Sv}]]}].
+
+put_bits_binary(Bin, _Unit, Aligned) when is_binary(Bin) ->
+ Sz = byte_size(Bin),
+ <<Int:Sz/unit:8>> = Bin,
+ {put_bits,Int,8*Sz,unit(1, Aligned)};
+put_bits_binary(Bin, Unit, Aligned) ->
+ {put_bits,Bin,binary,unit(Unit, Aligned)}.
+
+sub_lb(Val, 0) ->
+ {[],Val};
+sub_lb({var,Var}=Val0, Lb) ->
+ Val = {var,Var++"@sub"},
+ {[{sub,Val0,Lb,Val}],Val};
+sub_lb(Val, Lb) when is_integer(Val) ->
+ {[],Val-Lb}.
+
+build_length_cond([{sub,Var0,Base,Var}]=Prefix, Cs) ->
+ %% Non-zero lower bound, such as: SIZE (50..200, ...)
+ Prefix++[{'cond',opt_length_nzlb(Cs, {Var0,Var,Base}, 0)}];
+build_length_cond([], Cs) ->
+ %% Zero lower bound, such as: SIZE (0..200, ...)
+ [{'cond',opt_length_zlb(Cs, 0)}].
+
+opt_length_zlb([[{ult,Var,Val}|Actions]|T], Ub) ->
+ %% Since the SIZE constraint is zero-based, Var
+ %% must be greater than zero, and we can use
+ %% the slightly cheaper signed less than operator.
+ opt_length_zlb([[{lt,Var,Val}|Actions]|T], Ub);
+opt_length_zlb([[{lt,_,Val}|_]=H|T], Ub) ->
+ if
+ Val =< Ub ->
+ %% A previous test has already matched.
+ opt_length_zlb(T, Ub);
+ true ->
+ [H|opt_length_zlb(T, max(Ub, Val))]
+ end;
+opt_length_zlb([H|T], Ub) ->
+ [H|opt_length_zlb(T, Ub)];
+opt_length_zlb([], _) -> [].
+
+opt_length_nzlb([[{ult,Var,Val}|_]=H|T], {_,Var,Base}=St, _Ub) ->
+ [H|opt_length_nzlb(T, St, Base+Val)];
+opt_length_nzlb([[{lt,Var0,Val}|_]=H|T], {Var0,_,_}=St, Ub) ->
+ if
+ Val =< Ub ->
+ %% A previous test has already matched.
+ opt_length_nzlb(T, St, Ub);
+ true ->
+ [H|opt_length_nzlb(T, St, Val)]
+ end;
+opt_length_nzlb([H|T], St, Ub) ->
+ [H|opt_length_nzlb(T, St, Ub)];
+opt_length_nzlb([], _, _) -> [].
+
+build_cond(Conds0) ->
+ case eval_cond(Conds0, gb_sets:empty()) of
+ [['_'|Actions]] ->
+ Actions;
+ Conds ->
+ [{'cond',Conds}]
+ end.
+
+eval_cond([['_',{'cond',Cs}]], Seen) ->
+ eval_cond(Cs, Seen);
+eval_cond([[Cond|Actions]=H|T], Seen0) ->
+ case gb_sets:is_element(Cond, Seen0) of
+ false ->
+ Seen = gb_sets:insert(Cond, Seen0),
+ case eval_cond_1(Cond) of
+ false ->
+ eval_cond(T, Seen);
+ true ->
+ [['_'|Actions]];
+ maybe ->
+ [H|eval_cond(T, Seen)]
+ end;
+ true ->
+ eval_cond(T, Seen0)
+ end;
+eval_cond([], _) -> [].
+
+eval_cond_1({ult,I,N}) when is_integer(I), is_integer(N) ->
+ 0 =< I andalso I < N;
+eval_cond_1({eq,[],[]}) ->
+ true;
+eval_cond_1({eq,I,N}) when is_integer(I), is_integer(N) ->
+ I =:= N;
+eval_cond_1({lt,I,N}) when is_integer(I), is_integer(N) ->
+ I < N;
+eval_cond_1(_) -> maybe.
+
+prepend_to_cond([H|T], Code) ->
+ [prepend_to_cond_1(H, Code)|prepend_to_cond(T, Code)];
+prepend_to_cond([], _) -> [].
+
+prepend_to_cond_1([Check|T], Code) ->
+ [Check,Code|T].
+
+enc_char_tab(notab) ->
+ notab;
+enc_char_tab(Tab0) ->
+ Tab = tuple_to_list(Tab0),
+ First = hd(Tab),
+ {First-1,list_to_tuple(enc_char_tab_1(Tab, First, 0))}.
+
+enc_char_tab_1([H|T], H, I) ->
+ [I|enc_char_tab_1(T, H+1, I+1)];
+enc_char_tab_1([_|_]=T, H, I) ->
+ [ill|enc_char_tab_1(T, H+1, I)];
+enc_char_tab_1([], _, _) -> [].
+
+enumerated_constraint([_]) ->
+ [{'SingleValue',0}];
+enumerated_constraint(Root) ->
+ [{'ValueRange',{0,length(Root)-1}}].
+
+per_enc_enumerated_root(NNL, Prefix, Val, Constr, Aligned) ->
+ per_enc_enumerated_root_1(NNL, Prefix, Val, Constr, Aligned, 0).
+
+per_enc_enumerated_root_1([{H,_}|T], Prefix, Val, Constr, Aligned, N) ->
+ [[{eq,Val,H}|Prefix++per_enc_integer_1(N, Constr, Aligned)]|
+ per_enc_enumerated_root_1(T, Prefix, Val, Constr, Aligned, N+1)];
+per_enc_enumerated_root_1([], _, _, _, _, _) -> [].
+
+per_enc_enumerated_ext(NNL, Val, Aligned) ->
+ per_enc_enumerated_ext_1(NNL, Val, Aligned, 0).
+
+per_enc_enumerated_ext_1([{H,_}|T], Val, Aligned, N) ->
+ [[{eq,Val,H},{put_bits,1,1,[1]}|per_enc_small_number(N, Aligned)]|
+ per_enc_enumerated_ext_1(T, Val, Aligned, N+1)];
+per_enc_enumerated_ext_1([], _, _, _) -> [].
+
+per_enc_small_length(Val0, Aligned) ->
+ {Sub,Val} = sub_lb(Val0, 1),
+ U = unit(1, Aligned),
+ Sub ++ build_cond([[{lt,Val,64},{put_bits,Val,7,[1]}],
+ [{lt,Val0,128},{put_bits,1,1,[1]},
+ {put_bits,Val0,8,U}],
+ ['_',{put_bits,1,1,[1]},
+ {put_bits,2,2,U},{put_bits,Val0,14,[1]}]]).
+
+constr_min_size(no) -> no;
+constr_min_size({{Lb,_},[]}) when is_integer(Lb) -> Lb;
+constr_min_size({Lb,_}) when is_integer(Lb) -> Lb;
+constr_min_size(Sv) when is_integer(Sv) -> Sv.
+
+enc_mod(false) -> uper;
+enc_mod(true) -> per.
+
+unit(U, false) -> [U];
+unit(U, true) -> [U,align].
+
+unit(U, Aligned, Type, Lb, Ub) ->
+ case Aligned andalso is_aligned(Type, Lb, Ub) of
+ true -> [U,align];
+ false -> [U]
+ end.
+
+opt_choice(Imm) ->
+ {Pb,T0} = lists:splitwith(fun({put_bits,V,_,_}) when is_integer(V) ->
+ true;
+ (_) ->
+ false
+ end, Imm),
+ try
+ {Prefix,T} = split_off_nonbuilding(T0),
+ Prefix ++ opt_choice_1(T, Pb)
+ catch
+ throw:impossible ->
+ Imm
+ end.
+
+opt_choice_1([{'cond',Cs0}], Pb) ->
+ case Cs0 of
+ [[C|Act]] ->
+ [{'cond',[[C|Pb++Act]]}];
+ [[C|Act],['_',{error,_}]=Error] ->
+ [{'cond',[[C|Pb++Act],Error]}];
+ _ ->
+ [{'cond',opt_choice_2(Cs0, Pb)}]
+ end;
+opt_choice_1(_, _) -> throw(impossible).
+
+opt_choice_2([[C|[{put_bits,_,_,_}|_]=Act]|T], Pb) ->
+ [[C|Pb++Act]|opt_choice_2(T, Pb)];
+opt_choice_2([[_,{error,_}]=H|T], Pb) ->
+ [H|opt_choice_2(T, Pb)];
+opt_choice_2([_|_], _) ->
+ throw(impossible);
+opt_choice_2([], _) -> [].
+
+
+%%%
+%%% Helper functions for code generation of open types.
+%%%
+
+per_enc_open_type(Val0, {ToBinMod,ToBinFunc}, Aligned) ->
+ {B,[Val,Len,Bin]} = mk_vars(Val0, [len,bin]),
+ B ++ [{call,ToBinMod,ToBinFunc,[Val],Bin},
+ {call,erlang,byte_size,[Bin],Len}|
+ per_enc_length(Bin, 8, Len, Aligned)].
+
+enc_open_type([{'cond',Cs}], Aligned) ->
+ [{'cond',[[C|enc_open_type_1(Act, Aligned)] || [C|Act] <- Cs]}];
+enc_open_type(_, _) ->
+ throw(impossible).
+
+enc_open_type_1([{error,_}]=Imm, _) ->
+ Imm;
+enc_open_type_1(Imm, Aligned) ->
+ NumBits = num_bits(Imm, 0),
+ Pad = case 8 - (NumBits rem 8) of
+ 8 -> [];
+ Pad0 -> [{put_bits,0,Pad0,[1]}]
+ end,
+ NumBytes = (NumBits+7) div 8,
+ enc_length(NumBytes, no, Aligned) ++ Imm ++ Pad.
+
+num_bits([{put_bits,_,N,[U|_]}|T], Sum) when is_integer(N) ->
+ num_bits(T, Sum+N*U);
+num_bits([_|_], _) ->
+ throw(impossible);
+num_bits([], Sum) -> Sum.
+
+per_enc_open_type_output([{apply,F,A}], Acc) ->
+ Dst = output_var(),
+ {Dst,lists:reverse(Acc, [{apply,F,A,{var,atom_to_list(Dst)}}])};
+per_enc_open_type_output([{call,M,F,A}], Acc) ->
+ Dst = output_var(),
+ {Dst,lists:reverse(Acc, [{call,M,F,A,{var,atom_to_list(Dst)}}])};
+per_enc_open_type_output([{'cond',Cs}], Acc) ->
+ Dst = output_var(),
+ {Dst,lists:reverse(Acc, [{'cond',Cs,{var,atom_to_list(Dst)}}])};
+per_enc_open_type_output([H|T], Acc) ->
+ per_enc_open_type_output(T, [H|Acc]).
+
+output_var() ->
+ asn1ct_name:new(enc),
+ Curr = asn1ct_name:curr(enc),
+ [H|T] = atom_to_list(Curr),
+ list_to_atom([H - ($a - $A)|T ++ "@output"]).
+
+
+%%%
+%%% Optimize list comprehensions (SEQUENCE OF/SET OF).
+%%%
+
+opt_lc([{lc,[{call,erlang,iolist_to_binary,[Var],Bin},
+ {call,erlang,byte_size,[Bin],LenVar},
+ {'cond',[[{eq,LenVar,Len},{put_bits,Bin,_,[_|Align]}]]}],
+ Var,Val}]=Lc, LenImm) ->
+ %% Given a sequence of a fixed length string, such as
+ %% SEQUENCE OF OCTET STRING (SIZE (4)), attempt to rewrite to
+ %% a list comprehension that just checks the size, followed by
+ %% a conversion to binary:
+ %%
+ %% _ = [if length(Comp) =:= 4; byte_size(Comp) =:= 4 -> [] end ||
+ %% Comp <- Sof],
+ %% [align|iolist_to_binary(Sof)]
+
+ CheckImm = [{'cond',[[{eq,{expr,"length("++mk_val(Var)++")"},Len}],
+ [{eq,{expr,"byte_size("++mk_val(Var)++")"},Len}]]}],
+ Al = case Align of
+ [] ->
+ [];
+ [align] ->
+ [{put_bits,0,0,[1|Align]}]
+ end,
+ case Al =:= [] orelse
+ is_end_aligned(LenImm) orelse
+ lb_is_nonzero(LenImm) of
+ false ->
+ %% Not possible because an empty SEQUENCE OF would be
+ %% improperly aligned. Example:
+ %%
+ %% SEQUENCE (SIZE (0..3)) OF ...
+
+ Lc;
+ true ->
+ %% Examples:
+ %%
+ %% SEQUENCE (SIZE (1..4)) OF ...
+ %% (OK because there must be at least one element)
+ %%
+ %% SEQUENCE OF ...
+ %% (OK because the length field will force alignment)
+ %%
+ Al ++ [{lc,CheckImm,Var,Val,{var,"_"}},
+ {call,erlang,iolist_to_binary,[Val]}]
+ end;
+opt_lc([{lc,ElementImm0,V,L}]=Lc, LenImm) ->
+ %% Attempt to hoist the alignment, putting after the length
+ %% and before the list comprehension:
+ %%
+ %% [Length,
+ %% align,
+ %% [Encode(Comp) || Comp <- Sof]]
+ %%
+
+ case enc_opt_al_1(ElementImm0, 0) of
+ {ElementImm,0} ->
+ case is_end_aligned(LenImm) orelse
+ (is_beginning_aligned(ElementImm0) andalso
+ lb_is_nonzero(LenImm)) of
+ false ->
+ %% Examples:
+ %%
+ %% SEQUENCE (SIZE (0..3)) OF OCTET STRING
+ %% (An empty SEQUENCE OF would be improperly aligned)
+ %%
+ %% SEQUENCE (SIZE (1..3)) OF OCTET STRING (SIZE (0..4))
+ %% (There would be an improper alignment before the
+ %% first element)
+
+ Lc;
+ true ->
+ %% Examples:
+ %%
+ %% SEQUENCE OF INTEGER
+ %% SEQUENCE (SIZE (1..4)) OF INTEGER
+ %% SEQUENCE (SIZE (1..4)) OF INTEGER (0..256)
+
+ [{put_bits,0,0,[1,align]},{lc,ElementImm,V,L}]
+ end;
+ _ ->
+ %% Unknown alignment, no alignment, or not aligned at the end.
+ %% Examples:
+ %%
+ %% SEQUENCE OF SomeConstructedType
+ %% SEQUENCE OF INTEGER (0..15)
+
+ Lc
+ end.
+
+is_beginning_aligned([{'cond',Cs}]) ->
+ lists:all(fun([_|Act]) -> is_beginning_aligned(Act) end, Cs);
+is_beginning_aligned([{error,_}|_]) -> true;
+is_beginning_aligned([{put_bits,_,_,U}|_]) ->
+ case U of
+ [_,align] -> true;
+ [_] -> false
+ end;
+is_beginning_aligned(Imm0) ->
+ case split_off_nonbuilding(Imm0) of
+ {[],_} -> false;
+ {[_|_],Imm} -> is_beginning_aligned(Imm)
+ end.
+
+is_end_aligned(Imm) ->
+ case enc_opt_al_1(Imm, unknown) of
+ {_,0} -> true;
+ {_,_} -> false
+ end.
+
+lb_is_nonzero([{sub,_,_,_}|_]) -> true;
+lb_is_nonzero(_) -> false.
+
+%%%
+%%% Attempt to combine two chunks of intermediate code.
+%%%
+
+combine_imms(ImmA0, ImmB0) ->
+ {Prefix0,ImmA} = split_off_nonbuilding(ImmA0),
+ {Prefix1,ImmB} = split_off_nonbuilding(ImmB0),
+ Prefix = Prefix0 ++ Prefix1,
+ Combined = do_combine(ImmA ++ ImmB, 3.0),
+ Prefix ++ Combined.
+
+do_combine([{error,_}=Imm|_], _Budget) ->
+ [Imm];
+do_combine([{'cond',Cs0}|T], Budget0) ->
+ Budget = debit(Budget0, num_clauses(Cs0, 0)),
+ Cs = [[C|do_combine(Act++T, Budget)] || [C|Act] <- Cs0],
+ [{'cond',Cs}];
+do_combine([{put_bits,V,_,_}|_]=L, Budget) when is_integer(V) ->
+ {Pb,T} = collect_put_bits(L),
+ do_combine_put_bits(Pb, T,Budget);
+do_combine(_, _) ->
+ throw(impossible).
+
+do_combine_put_bits(Pb, [], _Budget) ->
+ Pb;
+do_combine_put_bits(Pb, [{'cond',Cs0}|T], Budget) ->
+ Cs = [case Act of
+ [{error,_}] ->
+ [C|Act];
+ _ ->
+ [C|do_combine(Pb++Act, Budget)]
+ end || [C|Act] <- Cs0],
+ do_combine([{'cond',Cs}|T], Budget);
+do_combine_put_bits(_, _, _) ->
+ throw(impossible).
+
+debit(Budget0, Alternatives) ->
+ case Budget0 - log2(Alternatives) of
+ Budget when Budget > 0.0 ->
+ Budget;
+ _ ->
+ throw(impossible)
+ end.
+
+num_clauses([[_,{error,_}]|T], N) ->
+ num_clauses(T, N);
+num_clauses([_|T], N) ->
+ num_clauses(T, N+1);
+num_clauses([], N) -> N.
+
+log2(N) ->
+ math:log(N) / math:log(2.0).
+
+collect_put_bits(Imm) ->
+ lists:splitwith(fun({put_bits,V,_,_}) when is_integer(V) -> true;
+ (_) -> false
+ end, Imm).
+
+%%%
+%%% Simple common subexpression elimination to avoid fetching
+%%% the same element twice.
+%%%
+
+enc_cse([{assign,{var,V},E}=H|T]) ->
+ [H|enc_cse_1(T, E, V)];
+enc_cse(Imm) -> Imm.
+
+enc_cse_1([{assign,Dst,E}|T], E, V) ->
+ [{assign,Dst,V}|enc_cse_1(T, E, V)];
+enc_cse_1([{block,Bl}|T], E, V) ->
+ [{block,enc_cse_1(Bl, E, V)}|enc_cse_1(T, E, V)];
+enc_cse_1([H|T], E, V) ->
+ [H|enc_cse_1(T, E, V)];
+enc_cse_1([], _, _) -> [].
+
+
+%%%
+%%% Pre-process the intermediate code to simplify code generation.
+%%%
+
+enc_pre_cg(Imm) ->
+ enc_pre_cg_1(Imm, outside_list, in_seq).
+
+enc_pre_cg_1([], _StL, _StB) ->
+ nil;
+enc_pre_cg_1([H], StL, StB) ->
+ enc_pre_cg_2(H, StL, StB);
+enc_pre_cg_1([H0|T0], StL, StB) ->
+ case is_nonbuilding(H0) of
+ true ->
+ H = enc_pre_cg_nonbuilding(H0, StL),
+ Seq = {seq,H,enc_pre_cg_1(T0, StL, in_seq)},
+ case StB of
+ outside_seq -> {block,Seq};
+ in_seq -> Seq
+ end;
+ false ->
+ H = enc_pre_cg_2(H0, in_head, outside_seq),
+ T = enc_pre_cg_1(T0, in_tail, outside_seq),
+ enc_make_cons(H, T)
+ end.
+
+enc_pre_cg_2(align, StL, _StB) ->
+ case StL of
+ in_head -> align;
+ in_tail -> {cons,align,nil}
+ end;
+enc_pre_cg_2({apply,_,_}=Imm, _, _) ->
+ Imm;
+enc_pre_cg_2({block,Bl0}, StL, StB) ->
+ enc_pre_cg_1(Bl0, StL, StB);
+enc_pre_cg_2({call,_,_,_}=Imm, _, _) ->
+ Imm;
+enc_pre_cg_2({call_gen,_,_,_,_}=Imm, _, _) ->
+ Imm;
+enc_pre_cg_2({'cond',Cs0}, StL, _StB) ->
+ Cs = [{C,enc_pre_cg_1(Act, StL, outside_seq)} || [C|Act] <- Cs0],
+ {'cond',Cs};
+enc_pre_cg_2({error,_}=E, _, _) ->
+ E;
+enc_pre_cg_2({lc,B0,V,L}, StL, _StB) ->
+ B = enc_pre_cg_1(B0, StL, outside_seq),
+ {lc,B,V,L};
+enc_pre_cg_2({put_bits,V,8,[1]}, StL, _StB) ->
+ case StL of
+ in_head -> {integer,V};
+ in_tail -> {cons,{integer,V},nil};
+ outside_list -> {cons,{integer,V},nil}
+ end;
+enc_pre_cg_2({put_bits,V,binary,_}, _StL, _StB) ->
+ V;
+enc_pre_cg_2({put_bits,_,_,[_]}=PutBits, _StL, _StB) ->
+ {binary,[PutBits]};
+enc_pre_cg_2({var,_}=Imm, _, _) -> Imm.
+
+enc_make_cons({binary,H}, {binary,T}) ->
+ {binary,H++T};
+enc_make_cons({binary,H0}, {cons,{binary,H1},T}) ->
+ {cons,{binary,H0++H1},T};
+enc_make_cons({integer,Int}, {binary,T}) ->
+ {binary,[{put_bits,Int,8,[1]}|T]};
+enc_make_cons(H, T) ->
+ {cons,H,T}.
+
+enc_pre_cg_nonbuilding({'cond',Cs0,Dst}, StL) ->
+ Cs = [{C,enc_pre_cg_1(Act, StL, outside_seq)} || [C|Act] <- Cs0],
+ {'cond',Cs,Dst};
+enc_pre_cg_nonbuilding({lc,B0,Var,List,Dst}, StL) ->
+ B = enc_pre_cg_1(B0, StL, outside_seq),
+ {lc,B,Var,List,Dst};
+enc_pre_cg_nonbuilding({'try',Try0,{P,Succ0},Else0,Dst}, StL) ->
+ Try = enc_pre_cg_1(Try0, StL, outside_seq),
+ Succ = enc_pre_cg_1(Succ0, StL, outside_seq),
+ Else = enc_pre_cg_1(Else0, StL, outside_seq),
+ {'try',Try,{P,Succ},Else,Dst};
+enc_pre_cg_nonbuilding(Imm, _) -> Imm.
+
+
+%%%
+%%% Code generation for encoding.
+%%%
+
+enc_cg({cons,_,_}=Cons) ->
+ enc_cg_cons(Cons);
+enc_cg({block,Imm}) ->
+ emit(["begin",nl]),
+ enc_cg(Imm),
+ emit([nl,
+ "end"]);
+enc_cg({seq,First,Then}) ->
+ enc_cg(First),
+ emit([com,nl]),
+ enc_cg(Then);
+enc_cg(align) ->
+ emit(align);
+enc_cg({apply,F0,As0}) ->
+ As = enc_call_args(As0, ""),
+ case F0 of
+ {M,F} ->
+ emit([{asis,M},":",{asis,F},"(",As,")"]);
+ F when is_atom(F) ->
+ emit([{asis,F},"(",As,")"])
+ end;
+enc_cg({apply,F0,As0,Dst}) ->
+ As = enc_call_args(As0, ""),
+ emit([mk_val(Dst)," = "]),
+ case F0 of
+ {M,F} ->
+ emit([{asis,M},":",{asis,F},"(",As,")"]);
+ F when is_atom(F) ->
+ emit([{asis,F},"(",As,")"])
+ end;
+enc_cg({assign,Dst0,Expr}) ->
+ Dst = mk_val(Dst0),
+ emit([Dst," = ",Expr]);
+enc_cg({binary,PutBits}) ->
+ emit(["<<",enc_cg_put_bits(PutBits, ""),">>"]);
+enc_cg({call,M,F,As0}) ->
+ As = [mk_val(A) || A <- As0],
+ asn1ct_func:call(M, F, As);
+enc_cg({call,M,F,As0,Dst}) ->
+ As = [mk_val(A) || A <- As0],
+ emit([mk_val(Dst)," = "]),
+ asn1ct_func:call(M, F, As);
+enc_cg({call_gen,Prefix,Key,Gen,As0}) ->
+ As = [mk_val(A) || A <- As0],
+ asn1ct_func:call_gen(Prefix, Key, Gen, As);
+enc_cg({'cond',Cs}) ->
+ enc_cg_cond(Cs);
+enc_cg({'cond',Cs,Dst0}) ->
+ Dst = mk_val(Dst0),
+ emit([Dst," = "]),
+ enc_cg_cond(Cs);
+enc_cg({error,Error}) when is_function(Error, 0) ->
+ Error();
+enc_cg({error,Var0}) ->
+ Var = mk_val(Var0),
+ emit(["exit({error,{asn1,{illegal_value,",Var,"}}})"]);
+enc_cg({integer,Int}) ->
+ emit(mk_val(Int));
+enc_cg({lc,Body,Var,List}) ->
+ emit("["),
+ enc_cg(Body),
+ emit([" || ",mk_val(Var)," <- ",mk_val(List),"]"]);
+enc_cg({lc,Body,Var,List,Dst}) ->
+ emit([mk_val(Dst)," = ["]),
+ enc_cg(Body),
+ emit([" || ",mk_val(Var)," <- ",mk_val(List),"]"]);
+enc_cg(nil) ->
+ emit("[]");
+enc_cg({sub,Src0,Int,Dst0}) ->
+ Src = mk_val(Src0),
+ Dst = mk_val(Dst0),
+ emit([Dst," = ",Src," - ",Int]);
+enc_cg({'try',Try,{P,Succ},Else,Dst}) ->
+ emit([mk_val(Dst)," = try "]),
+ enc_cg(Try),
+ emit([" of",nl,
+ mk_val(P)," ->",nl]),
+ enc_cg(Succ),
+ emit([nl,
+ "catch throw:invalid ->",nl]),
+ enc_cg(Else),
+ emit([nl,
+ "end"]);
+enc_cg({var,V}) ->
+ emit(V).
+
+enc_cg_cons(Cons) ->
+ emit("["),
+ enc_cg_cons_1(Cons),
+ emit("]").
+
+enc_cg_cons_1({cons,H,{cons,_,_}=T}) ->
+ enc_cg(H),
+ emit([com,nl]),
+ enc_cg_cons_1(T);
+enc_cg_cons_1({cons,H,nil}) ->
+ enc_cg(H);
+enc_cg_cons_1({cons,H,T}) ->
+ enc_cg(H),
+ emit("|"),
+ enc_cg(T).
+
+enc_call_args([A|As], Sep) ->
+ [Sep,mk_val(A)|enc_call_args(As, ", ")];
+enc_call_args([], _) -> [].
+
+enc_cg_cond([{'_',Action}]) ->
+ enc_cg(Action);
+enc_cg_cond(Cs) ->
+ emit("if "),
+ enc_cg_cond(Cs, ""),
+ emit([nl,
+ "end"]).
+
+enc_cg_cond([C|Cs], Sep) ->
+ emit(Sep),
+ enc_cg_cond_1(C),
+ enc_cg_cond(Cs, [";",nl]);
+enc_cg_cond([], _) -> ok.
+
+enc_cg_cond_1({Cond,Action}) ->
+ enc_cond_term(Cond),
+ emit([" ->",nl]),
+ enc_cg(Action).
+
+enc_cond_term('_') ->
+ emit("true");
+enc_cond_term({ult,Var0,Int}) ->
+ Var = mk_val(Var0),
+ N = uper_num_bits(Int),
+ case 1 bsl N of
+ Int ->
+ emit([Var," bsr ",N," =:= 0"]);
+ _ ->
+ emit(["0 =< ",Var,", ",Var," < ",Int])
+ end;
+enc_cond_term({eq,Var0,Term}) ->
+ Var = mk_val(Var0),
+ emit([Var," =:= ",{asis,Term}]);
+enc_cond_term({ge,Var0,Int}) ->
+ Var = mk_val(Var0),
+ emit([Var," >= ",Int]);
+enc_cond_term({lt,Var0,Int}) ->
+ Var = mk_val(Var0),
+ emit([Var," < ",Int]).
+
+enc_cg_put_bits([{put_bits,Val0,N,[1]}|T], Sep) ->
+ Val = mk_val(Val0),
+ [[Sep,Val,":",integer_to_list(N)]|enc_cg_put_bits(T, ",")];
+enc_cg_put_bits([], _) -> [].
+
+mk_val({var,Str}) -> Str;
+mk_val({expr,Str}) -> Str;
+mk_val(Int) when is_integer(Int) -> integer_to_list(Int);
+mk_val(Other) -> {asis,Other}.
+
+%%%
+%%% Generate a function that maps a name of a bit position
+%%% to the bit position.
+%%%
+
+bit_string_name2pos_fun(NNL, Src) ->
+ {call_gen,"bit_string_name2pos_",NNL,
+ fun(Fd, Name) -> gen_name2pos(Fd, Name, NNL) end,[Src]}.
+
+gen_name2pos(Fd, Name, Names) ->
+ Cs0 = gen_name2pos_cs(Names, Name),
+ Cs = Cs0 ++ [bit_clause(Name),nil_clause(),invalid_clause()],
+ F = {function,1,Name,1,Cs},
+ file:write(Fd, [erl_pp:function(F)]).
+
+gen_name2pos_cs([{K,V}|T], Name) ->
+ P = [{cons,0,{atom,0,K},{var,0,'T'}}],
+ B = [{cons,0,{integer,0,V},{call,0,{atom,0,Name},[{var,0,'T'}]}}],
+ [{clause,0,P,[],B}|gen_name2pos_cs(T, Name)];
+gen_name2pos_cs([], _) -> [].
+
+bit_clause(Name) ->
+ VarT = {var,0,'T'},
+ VarPos = {var,0,'Pos'},
+ P = [{cons,0,{tuple,0,[{atom,0,bit},VarPos]},VarT}],
+ G = [[{call,0,{atom,0,is_integer},[VarPos]}]],
+ B = [{cons,0,VarPos,{call,0,{atom,0,Name},[VarT]}}],
+ {clause,0,P,G,B}.
+
+nil_clause() ->
+ P = B = [{nil,0}],
+ {clause,0,P,[],B}.
+
+invalid_clause() ->
+ P = [{var,0,'_'}],
+ B = [{call,0,{atom,0,throw},[{atom,0,invalid}]}],
+ {clause,0,P,[],B}.
+
+%%%
+%%% Hoist alignment to reduce the number of list elements in
+%%% encode. Fewer lists elements means faster traversal in
+%%% complete/{2,3}.
+%%%
+%%% For example, the following data sequence:
+%%%
+%%% [align,<<1:1,0:1>>,[align,<<Len:16>>|Data]]
+%%%
+%%% can be rewritten to:
+%%%
+%%% [align,<<1:1,0:1,0:6>>,[<<Len:16>>|Data]]
+%%%
+%%% The change from the literal <<1:1,0:1>> to <<1:1,0:1,0:6>>
+%%% comes for free, and we have eliminated one element of the
+%%% sub list.
+%%%
+%%% We must be careful not to rewrite:
+%%%
+%%% [<<1:1,0:1>>,[align,<<Len:16>>|Data]]
+%%%
+%%% to:
+%%%
+%%% [[<<1:1,0:1>>,align],[<<Len:16>>|Data]]
+%%%
+%%% because even though [<<1:0,0:1>>,align] is a literal and does
+%%% not add any additional construction cost, there is one more
+%%% sub list that needs to be traversed.
+%%%
+
+enc_hoist_align(Imm0) ->
+ Imm = enc_hoist_align_reverse(Imm0, []),
+ enc_hoist_align(Imm, false, []).
+
+enc_hoist_align_reverse([H|T], Acc) ->
+ case enc_opt_al_1([H], 0) of
+ {[H],_} ->
+ enc_hoist_align_reverse(T, [H|Acc]);
+ {_,_} ->
+ lists:reverse(T, [H,stop|Acc])
+ end;
+enc_hoist_align_reverse([], Acc) -> Acc.
+
+enc_hoist_align([stop|T], _Aligned, Acc) ->
+ lists:reverse(T, Acc);
+enc_hoist_align([{block,Bl0}|T], Aligned, Acc) ->
+ Bl = case Aligned of
+ false -> Bl0;
+ true -> enc_hoist_block(Bl0)
+ end,
+ case is_beginning_aligned(Bl) of
+ false ->
+ enc_hoist_align(T, false, [{block,Bl}|Acc]);
+ true ->
+ enc_hoist_align(T, true, [{put_bits,0,0,[1,align]},
+ {block,Bl}|Acc])
+ end;
+enc_hoist_align([H|T], _, Acc) ->
+ enc_hoist_align(T, false, [H|Acc]);
+enc_hoist_align([], _, Acc) -> Acc.
+
+enc_hoist_block(Bl) ->
+ try
+ enc_hoist_block_1(lists:reverse(Bl))
+ catch
+ throw:impossible ->
+ Bl
+ end.
+
+enc_hoist_block_1([{'cond',Cs0}|T]) ->
+ Cs = [[C|enc_hoist_block_2(Act)] || [C|Act] <- Cs0],
+ H = {'cond',Cs},
+ lists:reverse(T, [H]);
+enc_hoist_block_1(_) ->
+ throw(impossible).
+
+enc_hoist_block_2([{'cond',_}|_]=L) ->
+ enc_hoist_block(L);
+enc_hoist_block_2([{error,_}]=L) ->
+ L;
+enc_hoist_block_2([]) ->
+ [{put_bits,0,0,[1,align]}];
+enc_hoist_block_2(L) ->
+ case lists:last(L) of
+ {put_bits,_,_,_} ->
+ L ++ [{put_bits,0,0,[1,align]}];
+ _ ->
+ throw(impossible)
+ end.
+
+%%%
+%%% Optimize alignment for encoding.
+%%%
+
+enc_opt_al(Imm0) ->
+ {Imm,_} = enc_opt_al_1(Imm0, unknown),
+ Imm.
+
+enc_opt_al_1([{'cond',Cs0,Dst},{call,per,complete,[Dst],Bin}|T0], Al0) ->
+ {Cs1,{M,F}} = enc_opt_al_prepare_cond(Cs0),
+ {Cs,_} = enc_opt_al_cond(Cs1, 0),
+ {T,Al} = enc_opt_al_1([{call,M,F,[Dst],Bin}|T0], Al0),
+ {[{'cond',Cs,Dst}|T],Al};
+enc_opt_al_1([H0|T0], Al0) ->
+ {H,Al1} = enc_opt_al(H0, Al0),
+ {T,Al} = enc_opt_al_1(T0, Al1),
+ {H++T,Al};
+enc_opt_al_1([], Al) -> {[],Al}.
+
+enc_opt_al({apply,_,_,_}=Imm, Al) ->
+ {[Imm],Al};
+enc_opt_al({assign,_,_}=Imm, Al) ->
+ {[Imm],Al};
+enc_opt_al({block,Bl0}, Al0) ->
+ {Bl,Al} = enc_opt_al_1(Bl0, Al0),
+ {[{block,Bl}],Al};
+enc_opt_al({call,erlang,iolist_to_binary,[_]}=Imm, Al) ->
+ {[Imm],Al};
+enc_opt_al({call,per_common,encode_fragmented,[_,U]}=Call, Al) ->
+ case U rem 8 of
+ 0 -> {[Call],Al};
+ _ -> {[Call],unknown}
+ end;
+enc_opt_al({call,per_common,encode_unconstrained_number,[_]}=Call, _) ->
+ {[Call],0};
+enc_opt_al({call,_,_,_,_}=Call, Al) ->
+ {[Call],Al};
+enc_opt_al({'cond',Cs0}, Al0) ->
+ {Cs,Al} = enc_opt_al_cond(Cs0, Al0),
+ {[{'cond',Cs}],Al};
+enc_opt_al({error,_}=Imm, Al) ->
+ {[Imm],Al};
+enc_opt_al({put_bits,V,N,[U,align]}, Al0) when Al0 rem 8 =:= 0 ->
+ Al = if
+ is_integer(N) -> N*U;
+ N =:= binary, U rem 8 =:= 0 -> 0;
+ true -> unknown
+ end,
+ {[{put_bits,V,N,[U]}],Al};
+enc_opt_al({put_bits,V,binary,[U,align]}, Al0) when is_integer(Al0) ->
+ N = 8 - (Al0 rem 8),
+ Al = case U rem 8 of
+ 0 -> 0;
+ _ -> unknown
+ end,
+ {[{put_bits,0,N,[1]},{put_bits,V,binary,[U]}],Al};
+enc_opt_al({put_bits,V,N0,[U,align]}, Al0) when is_integer(N0), is_integer(Al0) ->
+ N = N0 + (8 - Al0 rem 8),
+ Al = N0*U,
+ {[{put_bits,V,N,[1]}],Al};
+enc_opt_al({put_bits,_,N,[U,align]}=PutBits, _) when is_integer(N) ->
+ {[PutBits],N*U};
+enc_opt_al({put_bits,_,binary,[U,align]}=PutBits, _) when U rem 8 =:= 0 ->
+ {[PutBits],0};
+enc_opt_al({put_bits,_,N,[U]}=PutBits, Al) when is_integer(N), is_integer(Al) ->
+ {[PutBits],Al+N*U};
+enc_opt_al({put_bits,_,binary,[U]}=PutBits, Al) when U rem 8 =:= 0 ->
+ {[PutBits],Al};
+enc_opt_al({sub,_,_,_}=Imm, Al) ->
+ {[Imm],Al};
+enc_opt_al(Imm, _) ->
+ {[Imm],unknown}.
+
+enc_opt_al_cond(Cs0, Al0) ->
+ enc_opt_al_cond_1(Cs0, Al0, [], []).
+
+enc_opt_al_cond_1([['_',{error,_}]=C|Cs], Al, CAcc, AAcc) ->
+ enc_opt_al_cond_1(Cs, Al, [C|CAcc], AAcc);
+enc_opt_al_cond_1([[C|Act0]|Cs0], Al0, CAcc, AAcc) ->
+ {Act,Al1} = enc_opt_al_1(Act0, Al0),
+ Al = if
+ Al1 =:= unknown -> Al1;
+ true -> Al1 rem 8
+ end,
+ enc_opt_al_cond_1(Cs0, Al0, [[C|Act]|CAcc], [Al|AAcc]);
+enc_opt_al_cond_1([], _, CAcc, AAcc) ->
+ Al = case lists:usort(AAcc) of
+ [] -> unknown;
+ [Al0] -> Al0;
+ [_|_] -> unknown
+ end,
+ {lists:reverse(CAcc),Al}.
+
+enc_opt_al_prepare_cond(Cs0) ->
+ try enc_opt_al_prepare_cond_1(Cs0) of
+ Cs ->
+ {Cs,{erlang,iolist_to_binary}}
+ catch
+ throw:impossible ->
+ {Cs0,{per,complete}}
+ end.
+
+enc_opt_al_prepare_cond_1(Cs) ->
+ [[C|enc_opt_al_prepare_cond_2(Act)] || [C|Act] <- Cs].
+
+enc_opt_al_prepare_cond_2([{put_bits,_,binary,[U|_]}|_]) when U rem 8 =/= 0 ->
+ throw(impossible);
+enc_opt_al_prepare_cond_2([{put_bits,_,_,_}=H|T]) ->
+ [H|enc_opt_al_prepare_cond_2(T)];
+enc_opt_al_prepare_cond_2([{call,per_common,encode_fragmented,_}=H|T]) ->
+ [H|enc_opt_al_prepare_cond_2(T)];
+enc_opt_al_prepare_cond_2([_|_]) ->
+ throw(impossible);
+enc_opt_al_prepare_cond_2([]) ->
+ [{put_bits,0,0,[1,align]}].
+
+
+%%%
+%%% For the aligned PER format, fix up the intermediate format
+%%% before code generation. Code generation will be somewhat
+%%% easier if 'align' appear as a separate instruction.
+%%%
+
+per_fixup([{apply,_,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{apply,_,_,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{block,Block}|T]) ->
+ [{block,per_fixup(Block)}|per_fixup(T)];
+per_fixup([{'assign',_,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{'cond',Cs0}|T]) ->
+ Cs = [[C|per_fixup(Act)] || [C|Act] <- Cs0],
+ [{'cond',Cs}|per_fixup(T)];
+per_fixup([{'cond',Cs0,Dst}|T]) ->
+ Cs = [[C|per_fixup(Act)] || [C|Act] <- Cs0],
+ [{'cond',Cs,Dst}|per_fixup(T)];
+per_fixup([{call,_,_,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{call,_,_,_,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{call_gen,_,_,_,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{error,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{lc,B,V,L}|T]) ->
+ [{lc,per_fixup(B),V,L}|per_fixup(T)];
+per_fixup([{lc,B,V,L,Dst}|T]) ->
+ [{lc,per_fixup(B),V,L,Dst}|per_fixup(T)];
+per_fixup([{sub,_,_,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([{'try',Try0,{P,Succ0},Else0,Dst}|T]) ->
+ Try = per_fixup(Try0),
+ Succ = per_fixup(Succ0),
+ Else = per_fixup(Else0),
+ [{'try',Try,{P,Succ},Else,Dst}|per_fixup(T)];
+per_fixup([{put_bits,_,_,_}|_]=L) ->
+ fixup_put_bits(L);
+per_fixup([{var,_}=H|T]) ->
+ [H|per_fixup(T)];
+per_fixup([]) -> [].
+
+fixup_put_bits([{put_bits,0,0,[_,align]}|T]) ->
+ [align|fixup_put_bits(T)];
+fixup_put_bits([{put_bits,0,0,_}|T]) ->
+ fixup_put_bits(T);
+fixup_put_bits([{put_bits,V,N,[U,align]}|T]) ->
+ [align,{put_bits,V,N,[U]}|fixup_put_bits(T)];
+fixup_put_bits([{put_bits,_,_,_}=H|T]) ->
+ [H|fixup_put_bits(T)];
+fixup_put_bits(Other) -> per_fixup(Other).
+
%% effective_constraint(Type,C)
%% Type = atom()
%% C = [C1,...]
diff --git a/lib/asn1/src/asn1ct_value.erl b/lib/asn1/src/asn1ct_value.erl
index ecdfa3f645..992210232f 100644
--- a/lib/asn1/src/asn1ct_value.erl
+++ b/lib/asn1/src/asn1ct_value.erl
@@ -32,11 +32,11 @@
from_type(M,Typename) ->
- case asn1_db:dbget(M,Typename) of
- undefined ->
+ case asn1_db:dbload(M) of
+ error ->
{error,{not_found,{M,Typename}}};
- Tdef when is_record(Tdef,typedef) ->
- Type = Tdef#typedef.typespec,
+ ok ->
+ #typedef{typespec=Type} = asn1_db:dbget(M, Typename),
from_type(M,[Typename],Type);
Vdef when is_record(Vdef,valuedef) ->
from_value(Vdef);
diff --git a/lib/asn1/src/asn1rt_nif.erl b/lib/asn1/src/asn1rt_nif.erl
index c1879e3dcf..1a44f1a27c 100644
--- a/lib/asn1/src/asn1rt_nif.erl
+++ b/lib/asn1/src/asn1rt_nif.erl
@@ -30,7 +30,7 @@
-define(ASN1_NIF_VSN,1).
load_nif() ->
- LibBaseName = "asn1_erl_nif",
+ LibBaseName = "asn1rt_nif",
PrivDir = code:priv_dir(asn1),
LibName = case erlang:system_info(build_type) of
opt ->
diff --git a/lib/asn1/src/asn1rtt_ber.erl b/lib/asn1/src/asn1rtt_ber.erl
index b5429fe324..583ff790b7 100644
--- a/lib/asn1/src/asn1rtt_ber.erl
+++ b/lib/asn1/src/asn1rtt_ber.erl
@@ -22,8 +22,7 @@
%% encoding / decoding of BER
-export([ber_decode_nif/1,ber_decode_erlang/1,match_tags/2,ber_encode/1]).
--export([encode_tags/2,
- encode_tags/3,
+-export([encode_tags/3,
skip_ExtensionAdditions/2]).
-export([encode_boolean/2,decode_boolean/2,
encode_integer/2,encode_integer/3,
diff --git a/lib/asn1/src/asn1rtt_per.erl b/lib/asn1/src/asn1rtt_per.erl
index 9f4b7500d8..672c84593c 100644
--- a/lib/asn1/src/asn1rtt_per.erl
+++ b/lib/asn1/src/asn1rtt_per.erl
@@ -18,62 +18,7 @@
%%
-module(asn1rtt_per).
--export([setext/1, fixextensions/2,
- skipextensions/3,
- set_choice/3,encode_integer/2,
- encode_small_number/1,
- encode_constrained_number/2,
- encode_length/1,
- encode_length/2,
- encode_bit_string/3,
- encode_object_identifier/1,
- encode_relative_oid/1,
- complete/1,
- encode_open_type/1,
- encode_GeneralString/2,
- encode_GraphicString/2,
- encode_TeletexString/2,
- encode_VideotexString/2,
- encode_ObjectDescriptor/2,
- encode_UTF8String/1,
- encode_octet_string/2,
- encode_known_multiplier_string/4,
- octets_to_complete/2]).
-
--define('16K',16384).
--define('32K',32768).
--define('64K',65536).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% setext(true|false) -> CompleteList
-%%
-
-setext(false) ->
- [0];
-setext(true) ->
- [1].
-
-fixextensions({ext,ExtPos,ExtNum},Val) ->
- case fixextensions(ExtPos,ExtNum+ExtPos,Val,0) of
- 0 -> [];
- ExtBits ->
- [encode_small_length(ExtNum)|pre_complete_bits(ExtNum,ExtBits)]
- end.
-
-fixextensions(Pos,MaxPos,_,Acc) when Pos >= MaxPos ->
- Acc;
-fixextensions(Pos,ExtPos,Val,Acc) ->
- Bit = case catch(element(Pos+1,Val)) of
- asn1_NOVALUE ->
- 0;
- asn1_NOEXTVALUE ->
- 0;
- {'EXIT',_} ->
- 0;
- _ ->
- 1
- end,
- fixextensions(Pos+1,ExtPos,Val,(Acc bsl 1)+Bit).
+-export([skipextensions/3,complete/1]).
skipextensions(Bytes0, Nr, ExtensionBitstr) when is_bitstring(ExtensionBitstr) ->
Prev = Nr - 1,
@@ -95,270 +40,6 @@ align(BitStr) when is_bitstring(BitStr) ->
<<_:AlignBits,Rest/binary>> = BitStr,
Rest.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% set_choice(Alt,Choices,Altnum) -> ListofBitSettings
-%% Alt = atom()
-%% Altnum = integer() | {integer(),integer()}% number of alternatives
-%% Choices = [atom()] | {[atom()],[atom()]}
-%% When Choices is a tuple the first list is the Rootset and the
-%% second is the Extensions and then Altnum must also be a tuple with the
-%% lengths of the 2 lists
-%%
-set_choice(Alt,{L1,L2},{Len1,_Len2}) ->
- case set_choice_tag(Alt,L1) of
- N when is_integer(N), Len1 > 1 ->
- [0, % the value is in the root set
- encode_constrained_number({0,Len1-1},N)];
- N when is_integer(N) ->
- [0]; % no encoding if only 0 or 1 alternative
- false ->
- [1, % extension value
- case set_choice_tag(Alt, L2) of
- N2 when is_integer(N2) ->
- encode_small_number(N2);
- false ->
- unknown_choice_alt
- end]
- end;
-set_choice(Alt, L, Len) ->
- case set_choice_tag(Alt, L) of
- N when is_integer(N), Len > 1 ->
- encode_constrained_number({0,Len-1},N);
- N when is_integer(N) ->
- []; % no encoding if only 0 or 1 alternative
- false ->
- [unknown_choice_alt]
- end.
-
-set_choice_tag(Alt,Choices) ->
- set_choice_tag(Alt,Choices,0).
-
-set_choice_tag(Alt,[Alt|_Rest],Tag) ->
- Tag;
-set_choice_tag(Alt,[_H|Rest],Tag) ->
- set_choice_tag(Alt,Rest,Tag+1);
-set_choice_tag(_Alt,[],_Tag) ->
- false.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_open_type(Constraint, Value) -> CompleteList
-%% Value = list of bytes of an already encoded value (the list must be flat)
-%% | binary
-%% Contraint = not used in this version
-%%
-encode_open_type(Val) ->
- case byte_size(Val) of
- Size when Size > 255 ->
- [encode_length(Size),21,<<Size:16>>,Val]; % octets implies align
- Size ->
- [encode_length(Size),20,Size,Val]
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_integer(Constraint, Value) -> CompleteList
-%%
-encode_integer([{Rc,_Ec}],Val) when is_tuple(Rc) ->
- try
- [0|encode_integer([Rc], Val)]
- catch
- _:{error,{asn1,_}} ->
- [1|encode_unconstrained_number(Val)]
- end;
-encode_integer([], Val) ->
- encode_unconstrained_number(Val);
-%% The constraint is the effective constraint, and in this case is a number
-encode_integer([{'SingleValue',V}], V) ->
- [];
-encode_integer([{'ValueRange',{Lb,Ub}=VR,Range,PreEnc}],Val)
- when Val >= Lb, Ub >= Val ->
- %% this case when NamedNumberList
- encode_constrained_number(VR, Range, PreEnc, Val);
-encode_integer([{'ValueRange',{Lb,'MAX'}}], Val) when Lb =< Val ->
- encode_semi_constrained_number(Lb, Val);
-encode_integer([{'ValueRange',{'MIN',_}}], Val) ->
- encode_unconstrained_number(Val);
-encode_integer([{'ValueRange',VR={_Lb,_Ub}}], Val) ->
- encode_constrained_number(VR, Val);
-encode_integer(_,Val) ->
- exit({error,{asn1,{illegal_value,Val}}}).
-
-
-%% X.691:10.6 Encoding of a normally small non-negative whole number
-%% Use this for encoding of CHOICE index if there is an extension marker in
-%% the CHOICE
-encode_small_number(Val) when Val < 64 ->
- [10,7,Val];
-encode_small_number(Val) ->
- [1|encode_semi_constrained_number(0, Val)].
-
-%% X.691:10.7 Encoding of a semi-constrained whole number
-encode_semi_constrained_number(Lb, Val) ->
- Val2 = Val - Lb,
- Oct = eint_positive(Val2),
- Len = length(Oct),
- if
- Len < 128 ->
- [20,Len+1,Len|Oct];
- Len < 256 ->
- [encode_length(Len),20,Len|Oct];
- true ->
- [encode_length(Len),21,<<Len:16>>|Oct]
- end.
-
-encode_constrained_number({Lb,_Ub},_Range,{bits,N},Val) ->
- Val2 = Val-Lb,
- [10,N,Val2];
-encode_constrained_number({Lb,_Ub},_Range,{octets,N},Val) when N < 256->
- %% N is 8 or 16 (1 or 2 octets)
- Val2 = Val-Lb,
- [20,N,Val2];
-encode_constrained_number({Lb,_Ub},_Range,{octets,N},Val) -> % N>255
- %% N is 8 or 16 (1 or 2 octets)
- Val2 = Val-Lb,
- [21,<<N:16>>,Val2];
-encode_constrained_number({Lb,_Ub},Range,_,Val) ->
- Val2 = Val-Lb,
- if
- Range =< 16#1000000 -> % max 3 octets
- Octs = eint_positive(Val2),
- L = length(Octs),
- [encode_length({1,3},L),[20,L,Octs]];
- Range =< 16#100000000 -> % max 4 octets
- Octs = eint_positive(Val2),
- L = length(Octs),
- [encode_length({1,4},L),[20,L,Octs]];
- Range =< 16#10000000000 -> % max 5 octets
- Octs = eint_positive(Val2),
- L = length(Octs),
- [encode_length({1,5},L),[20,L,Octs]];
- true ->
- exit({not_supported,{integer_range,Range}})
- end.
-
-encode_constrained_number({Lb,Ub}, Val) when Val >= Lb, Ub >= Val ->
- Range = Ub - Lb + 1,
- Val2 = Val - Lb,
- if
- Range == 1 -> [];
- Range == 2 ->
- [Val2];
- Range =< 4 ->
- [10,2,Val2];
- Range =< 8 ->
- [10,3,Val2];
- Range =< 16 ->
- [10,4,Val2];
- Range =< 32 ->
- [10,5,Val2];
- Range =< 64 ->
- [10,6,Val2];
- Range =< 128 ->
- [10,7,Val2];
- Range =< 255 ->
- [10,8,Val2];
- Range =< 256 ->
- [20,1,Val2];
- Range =< 65536 ->
- [20,2,<<Val2:16>>];
- Range =< (1 bsl (255*8)) ->
- Octs = binary:encode_unsigned(Val2),
- RangeOcts = binary:encode_unsigned(Range - 1),
- OctsLen = byte_size(Octs),
- RangeOctsLen = byte_size(RangeOcts),
- LengthBitsNeeded = minimum_bits(RangeOctsLen - 1),
- [10,LengthBitsNeeded,OctsLen-1,20,OctsLen,Octs];
- true ->
- exit({not_supported,{integer_range,Range}})
- end;
-encode_constrained_number({_,_},Val) ->
- exit({error,{asn1,{illegal_value,Val}}}).
-
-%% For some reason the minimum bits needed in the length field in
-%% the encoding of constrained whole numbers must always be at least 2?
-minimum_bits(N) when N < 4 -> 2;
-minimum_bits(N) when N < 8 -> 3;
-minimum_bits(N) when N < 16 -> 4;
-minimum_bits(N) when N < 32 -> 5;
-minimum_bits(N) when N < 64 -> 6;
-minimum_bits(N) when N < 128 -> 7;
-minimum_bits(_N) -> 8.
-
-%% X.691:10.8 Encoding of an unconstrained whole number
-
-encode_unconstrained_number(Val) ->
- Oct = if
- Val >= 0 ->
- eint(Val, []);
- true ->
- enint(Val, [])
- end,
- Len = length(Oct),
- if
- Len < 128 ->
- [20,Len + 1,Len|Oct];
- Len < 256 ->
- [20,Len + 2,<<2:2,Len:14>>|Oct];
- true ->
- [encode_length(Len),21,<<Len:16>>|Oct]
- end.
-
-%% used for positive Values which don't need a sign bit
-%% returns a list
-eint_positive(Val) ->
- case eint(Val,[]) of
- [0,B1|T] ->
- [B1|T];
- T ->
- T
- end.
-
-
-eint(0, [B|Acc]) when B < 128 ->
- [B|Acc];
-eint(N, Acc) ->
- eint(N bsr 8, [N band 16#ff| Acc]).
-
-enint(-1, [B1|T]) when B1 > 127 ->
- [B1|T];
-enint(N, Acc) ->
- enint(N bsr 8, [N band 16#ff|Acc]).
-
-%% X.691:10.9 Encoding of a length determinant
-%%encode_small_length(undefined,Len) -> % null means no UpperBound
-%% encode_small_number(Len).
-
-%% X.691:10.9.3.5
-%% X.691:10.9.3.7
-encode_length(Len) -> % unconstrained
- if
- Len < 128 ->
- [20,1,Len];
- Len < 16384 ->
- <<20,2,2:2,Len:14>>;
- true -> % should be able to endode length >= 16384 i.e. fragmented length
- exit({error,{asn1,{encode_length,{nyi,above_16k}}}})
- end.
-
-encode_length({C,[]}, Len) ->
- case C of
- {Lb,Ub}=Vr when Lb =< Len, Len =< Ub ->
- [0|encode_constrained_number(Vr, Len)];
- _ ->
- [1|encode_length(Len)]
- end;
-encode_length(Len, Len) ->
- [];
-encode_length(Vr, Len) ->
- encode_constrained_number(Vr, Len).
-
-%% X.691 10.9.3.4 (only used for length of bitmap that prefixes extension
-%% additions in a sequence or set
-encode_small_length(Len) when Len =< 64 ->
- [10,7,Len-1];
-encode_small_length(Len) ->
- [1,encode_length(Len)].
-
-
decode_length(Buffer) -> % un-constrained
case align(Buffer) of
<<0:1,Oct:7,Rest/binary>> ->
@@ -370,511 +51,70 @@ decode_length(Buffer) -> % un-constrained
exit({error,{asn1,{decode_length,{nyi,above_16k}}}})
end.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% bitstring NamedBitList
-%% Val can be of:
-%% - [identifiers] where only named identifers are set to one,
-%% the Constraint must then have some information of the
-%% bitlength.
-%% - [list of ones and zeroes] all bits
-%% - integer value representing the bitlist
-%% C is constraint Len, only valid when identifiers
-
-
-%% when the value is a list of {Unused,BinBits}, where
-%% Unused = integer(),
-%% BinBits = binary().
-
-encode_bit_string(C, Bits, NamedBitList) when is_bitstring(Bits) ->
- PadLen = (8 - (bit_size(Bits) band 7)) band 7,
- Compact = {PadLen,<<Bits/bitstring,0:PadLen>>},
- encode_bin_bit_string(C, Compact, NamedBitList);
-encode_bit_string(C, {Unused,BinBits}=Bin, NamedBitList)
- when is_integer(Unused), is_binary(BinBits) ->
- encode_bin_bit_string(C,Bin,NamedBitList);
-
-%% when the value is a list of named bits
-
-encode_bit_string(C, LoNB=[FirstVal | _RestVal], NamedBitList) when is_atom(FirstVal) ->
- ToSetPos = get_all_bitposes(LoNB, NamedBitList, []),
- BitList = make_and_set_list(ToSetPos,0),
- encode_bit_string(C,BitList,NamedBitList);% consider the constraint
-
-encode_bit_string(C, BL=[{bit,_} | _RestVal], NamedBitList) ->
- ToSetPos = get_all_bitposes(BL, NamedBitList, []),
- BitList = make_and_set_list(ToSetPos,0),
- encode_bit_string(C,BitList,NamedBitList);
-
-%% when the value is a list of ones and zeroes
-encode_bit_string(Int, BitListValue, _)
- when is_list(BitListValue),is_integer(Int),Int =< 16 ->
- %% The type is constrained by a single value size constraint
- %% range_check(Int,length(BitListValue)),
- [40,Int,length(BitListValue),BitListValue];
-encode_bit_string(Int, BitListValue, _)
- when is_list(BitListValue),is_integer(Int), Int =< 255 ->
- %% The type is constrained by a single value size constraint
- %% range_check(Int,length(BitListValue)),
- [2,40,Int,length(BitListValue),BitListValue];
-encode_bit_string(Int, BitListValue, _)
- when is_list(BitListValue),is_integer(Int), Int < ?'64K' ->
- {Code,DesiredLength,Length} =
- case length(BitListValue) of
- B1 when B1 > Int ->
- exit({error,{'BIT_STRING_length_greater_than_SIZE',
- Int,BitListValue}});
- B1 when B1 =< 255,Int =< 255 ->
- {40,Int,B1};
- B1 when B1 =< 255 ->
- {42,<<Int:16>>,B1};
- B1 ->
- {43,<<Int:16>>,<<B1:16>>}
- end,
- %% The type is constrained by a single value size constraint
- [2,Code,DesiredLength,Length,BitListValue];
-encode_bit_string(no, BitListValue,[])
- when is_list(BitListValue) ->
- [encode_length(length(BitListValue)),
- 2|BitListValue];
-encode_bit_string({{Fix,Fix},Ext}, BitListValue,[])
- when is_integer(Fix), is_list(Ext) ->
- case length(BitListValue) of
- Len when Len =< Fix ->
- [0|encode_bit_string(Fix, BitListValue, [])];
- _ ->
- [1|encode_bit_string(no, BitListValue, [])]
- end;
-encode_bit_string(C, BitListValue,[])
- when is_list(BitListValue) ->
- [encode_length(C, length(BitListValue)),
- 2|BitListValue];
-encode_bit_string(no, BitListValue,_NamedBitList)
- when is_list(BitListValue) ->
- %% this case with an unconstrained BIT STRING can be made more efficient
- %% if the complete driver can take a special code so the length field
- %% is encoded there.
- NewBitLVal = lists:reverse(lists:dropwhile(fun(0)->true;(1)->false end,
- lists:reverse(BitListValue))),
- [encode_length(length(NewBitLVal)),2|NewBitLVal];
-encode_bit_string({{Fix,Fix},Ext}, BitListValue, NamedBitList)
- when is_integer(Fix), is_list(Ext) ->
- case length(BitListValue) of
- Len when Len =< Fix ->
- [0|encode_bit_string(Fix, BitListValue, NamedBitList)];
- _ ->
- [1|encode_bit_string(no, BitListValue, NamedBitList)]
- end;
-encode_bit_string(C, BitListValue, _NamedBitList)
- when is_list(BitListValue) -> % C = {_,'MAX'}
- NewBitLVal = bit_string_trailing_zeros(BitListValue, C),
- [encode_length(C, length(NewBitLVal)),2|NewBitLVal];
-
-
-%% when the value is an integer
-encode_bit_string(C, IntegerVal, NamedBitList) when is_integer(IntegerVal)->
- BitList = int_to_bitlist(IntegerVal),
- encode_bit_string(C,BitList,NamedBitList).
-
-bit_string_trailing_zeros(BitList,C) when is_integer(C) ->
- bit_string_trailing_zeros1(BitList,C,C);
-bit_string_trailing_zeros(BitList,{Lb,Ub}) when is_integer(Lb) ->
- bit_string_trailing_zeros1(BitList,Lb,Ub);
-bit_string_trailing_zeros(BitList,{{Lb,Ub},_}) when is_integer(Lb) ->
- bit_string_trailing_zeros1(BitList,Lb,Ub);
-bit_string_trailing_zeros(BitList,_) ->
- BitList.
-
-bit_string_trailing_zeros1(BitList,Lb,Ub) ->
- case length(BitList) of
- Lb -> BitList;
- B when B < Lb -> BitList++lists:duplicate(Lb-B, 0);
- D -> F = fun(L,LB,LB,_,_)->lists:reverse(L);
- ([0|R],L1,LB,UB,Fun)->Fun(R,L1-1,LB,UB,Fun);
- (L,L1,_,UB,_)when L1 =< UB -> lists:reverse(L);
- (_,_L1,_,_,_) ->exit({error,{list_length_BIT_STRING,
- BitList}}) end,
- F(lists:reverse(BitList),D,Lb,Ub,F)
- end.
-
-%% encode_bin_bit_string/3, when value is a tuple of Unused and BinBits.
-%% Unused = integer(),i.e. number unused bits in least sign. byte of
-%% BinBits = binary().
-encode_bin_bit_string(C, {Unused,BinBits}, _NamedBitList)
- when is_integer(C),C=<16 ->
- range_check(C, bit_size(BinBits) - Unused),
- [45,C,byte_size(BinBits),BinBits];
-encode_bin_bit_string(C, {Unused,BinBits}, _NamedBitList)
- when is_integer(C), C =< 255 ->
- range_check(C, bit_size(BinBits) - Unused),
- [2,45,C,byte_size(BinBits),BinBits];
-encode_bin_bit_string(C, {Unused,BinBits}, _NamedBitList)
- when is_integer(C), C =< 65535 ->
- range_check(C, bit_size(BinBits) - Unused),
- case byte_size(BinBits) of
- Size when Size =< 255 ->
- [2,46,<<C:16>>,Size,BinBits];
- Size ->
- [2,47,<<C:16>>,<<Size:16>>,BinBits]
- end;
-encode_bin_bit_string(C,UnusedAndBin={_,_},NamedBitList) ->
- {Unused1,Bin1} =
- %% removes all trailing bits if NamedBitList is not empty
- remove_trailing_bin(NamedBitList,UnusedAndBin),
- case C of
- {Lb,Ub} when is_integer(Lb),is_integer(Ub) ->
- Size = byte_size(Bin1),
- [encode_length({Lb,Ub}, Size*8 - Unused1),
- 2,octets_unused_to_complete(Unused1,Size,Bin1)];
- no ->
- Size = byte_size(Bin1),
- [encode_length(Size*8 - Unused1),
- 2|octets_unused_to_complete(Unused1, Size, Bin1)];
- {{Fix,Fix},Ext} when is_integer(Fix),is_list(Ext) ->
- case byte_size(Bin1)*8 - Unused1 of
- Size when Size =< Fix ->
- [0|encode_bin_bit_string(Fix,UnusedAndBin,NamedBitList)];
- _Size ->
- [1|encode_bin_bit_string(no,UnusedAndBin,NamedBitList)]
- end;
- Sc ->
- Size = byte_size(Bin1),
- [encode_length(Sc, Size*8 - Unused1),
- 2|octets_unused_to_complete(Unused1,Size,Bin1)]
- end.
-
-range_check(C,C) when is_integer(C) ->
- ok;
-range_check(C1,C2) when is_integer(C1) ->
- exit({error,{asn1,{bit_string_out_of_range,{C1,C2}}}}).
-
-remove_trailing_bin([], {Unused,Bin}) ->
- {Unused,Bin};
-remove_trailing_bin(_NamedNumberList,{_Unused,<<>>}) ->
- {0,<<>>};
-remove_trailing_bin(NamedNumberList, {_Unused,Bin}) ->
- Size = byte_size(Bin)-1,
- <<Bfront:Size/binary, LastByte:8>> = Bin,
- %% clear the Unused bits to be sure
- Unused1 = trailingZeroesInNibble(LastByte band 15),
- Unused2 =
- case Unused1 of
- 4 ->
- 4 + trailingZeroesInNibble(LastByte bsr 4);
- _ -> Unused1
- end,
- case Unused2 of
- 8 ->
- remove_trailing_bin(NamedNumberList,{0,Bfront});
- _ ->
- {Unused2,Bin}
- end.
-
-
-trailingZeroesInNibble(0) ->
- 4;
-trailingZeroesInNibble(1) ->
- 0;
-trailingZeroesInNibble(2) ->
- 1;
-trailingZeroesInNibble(3) ->
- 0;
-trailingZeroesInNibble(4) ->
- 2;
-trailingZeroesInNibble(5) ->
- 0;
-trailingZeroesInNibble(6) ->
- 1;
-trailingZeroesInNibble(7) ->
- 0;
-trailingZeroesInNibble(8) ->
- 3;
-trailingZeroesInNibble(9) ->
- 0;
-trailingZeroesInNibble(10) ->
- 1;
-trailingZeroesInNibble(11) ->
- 0;
-trailingZeroesInNibble(12) -> %#1100
- 2;
-trailingZeroesInNibble(13) ->
- 0;
-trailingZeroesInNibble(14) ->
- 1;
-trailingZeroesInNibble(15) ->
- 0.
-
-
-%%%%%%%%%%%%%%%
-%%
-
-int_to_bitlist(Int) when is_integer(Int), Int > 0 ->
- [Int band 1 | int_to_bitlist(Int bsr 1)];
-int_to_bitlist(0) ->
- [].
-
-
-%%%%%%%%%%%%%%%%%%
-%% get_all_bitposes([list of named bits to set], named_bit_db, []) ->
-%% [sorted_list_of_bitpositions_to_set]
-
-get_all_bitposes([{bit,ValPos}|Rest], NamedBitList, Ack) ->
- get_all_bitposes(Rest, NamedBitList, [ValPos | Ack ]);
-
-get_all_bitposes([Val | Rest], NamedBitList, Ack) ->
- case lists:keyfind(Val, 1, NamedBitList) of
- {_ValName, ValPos} ->
- get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]);
- false ->
- exit({error,{asn1, {bitstring_namedbit, Val}}})
- end;
-get_all_bitposes([], _NamedBitList, Ack) ->
- lists:sort(Ack).
-
-%%%%%%%%%%%%%%%%%%
-%% make_and_set_list([list of positions to set to 1])->
-%% returns list with all in SetPos set.
-%% in positioning in list the first element is 0, the second 1 etc.., but
-%%
-
-make_and_set_list([XPos|SetPos], XPos) ->
- [1 | make_and_set_list(SetPos, XPos + 1)];
-make_and_set_list([Pos|SetPos], XPos) ->
- [0 | make_and_set_list([Pos | SetPos], XPos + 1)];
-make_and_set_list([], _) ->
- [].
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% X.691:16
-%% encode_octet_string(Constraint, Val)
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-encode_octet_string({{Sv,Sv},Ext}=SZ, Val) when is_list(Ext), Sv =< 2 ->
- Len = length(Val),
- try
- case encode_length(SZ, Len) of
- [0|_]=EncLen ->
- [EncLen,45,Sv*8,Sv,Val];
- [_|_]=EncLen ->
- [EncLen|octets_to_complete(Len, Val)]
- end
- catch
- exit:{error,{asn1,{encode_length,_}}} ->
- encode_fragmented_octet_string(Val)
- end;
-encode_octet_string({_,_}=SZ, Val) ->
- Len = length(Val),
- try
- [encode_length(SZ, Len),2|octets_to_complete(Len, Val)]
- catch
- exit:{error,{asn1,{encode_length,_}}} ->
- encode_fragmented_octet_string(Val)
- end;
-encode_octet_string(Sv, Val) when is_integer(Sv) ->
- encode_fragmented_octet_string(Val);
-encode_octet_string(no, Val) ->
- Len = length(Val),
- try
- [encode_length(Len),2|octets_to_complete(Len, Val)]
- catch
- exit:{error,{asn1,{encode_length,_}}} ->
- encode_fragmented_octet_string(Val)
- end.
-
-encode_fragmented_octet_string(Val) ->
- Bin = iolist_to_binary(Val),
- efos_1(Bin).
-
-efos_1(<<B1:16#C000/binary,B2:16#4000/binary,T/binary>>) ->
- [20,1,<<3:2,4:6>>,
- octets_to_complete(16#C000, B1),
- octets_to_complete(16#4000, B2)|efos_1(T)];
-efos_1(<<B:16#C000/binary,T/binary>>) ->
- [20,1,<<3:2,3:6>>,octets_to_complete(16#C000, B)|efos_1(T)];
-efos_1(<<B:16#8000/binary,T/binary>>) ->
- [20,1,<<3:2,2:6>>,octets_to_complete(16#8000, B)|efos_1(T)];
-efos_1(<<B:16#4000/binary,T/binary>>) ->
- [20,1,<<3:2,1:6>>,octets_to_complete(16#4000, B)|efos_1(T)];
-efos_1(<<>>) ->
- [20,1,0];
-efos_1(<<B/bitstring>>) ->
- Len = byte_size(B),
- [encode_length(Len)|octets_to_complete(Len, B)].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Restricted char string types
-%% (NumericString, PrintableString,VisibleString,IA5String,BMPString,UniversalString)
-%% X.691:26 and X.680:34-36
-
-encode_restricted_string(Val) when is_list(Val)->
- Len = length(Val),
- [encode_length(Len)|octets_to_complete(Len, Val)].
-
-encode_known_multiplier_string(SizeC, NumBits, CharOutTab, Val) ->
- Result = chars_encode2(Val, NumBits, CharOutTab),
- case SizeC of
- Ub when is_integer(Ub), Ub*NumBits < 16 ->
- Result;
- Ub when is_integer(Ub) ->
- [2,Result];
- {{_,Ub},Ext}=SZ when is_list(Ext) ->
- Len = length(Val),
- case encode_length(SZ, Len) of
- [0|_]=EncLen when Ub*NumBits < 16 ->
- [EncLen,45,Len*NumBits,Len,Val];
- [_|_]=EncLen ->
- [EncLen,2|Result]
- end;
- {_,Ub}=Range ->
- [encode_length(Range, length(Val))|
- if
- Ub*NumBits < 16 -> Result;
- true -> [2|Result]
- end];
- no ->
- [encode_length(length(Val)),2,Result]
- end.
-
-encode_GeneralString(_C,Val) ->
- encode_restricted_string(Val).
-
-encode_GraphicString(_C,Val) ->
- encode_restricted_string(Val).
-
-encode_ObjectDescriptor(_C,Val) ->
- encode_restricted_string(Val).
-
-encode_TeletexString(_C,Val) -> % equivalent with T61String
- encode_restricted_string(Val).
-
-encode_VideotexString(_C,Val) ->
- encode_restricted_string(Val).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% chars_encode(C,StringType,Value) -> ValueList
-%%
-%% encodes chars according to the per rules taking the constraint
-%% PermittedAlphabet into account.
-%%
-%% This function only encodes the value part and NOT the length.
-
-chars_encode2([H|T],NumBits,T1={Min,Max,notab}) when H =< Max, H >= Min ->
- [pre_complete_bits(NumBits,H-Min)|chars_encode2(T,NumBits,T1)];
-chars_encode2([H|T],NumBits,T1={Min,Max,Tab}) when H =< Max, H >= Min ->
- [pre_complete_bits(NumBits,exit_if_false(H,element(H-Min+1,Tab)))|
- chars_encode2(T,NumBits,T1)];
-chars_encode2([{A,B,C,D}|T],NumBits,T1={Min,_Max,notab}) ->
- %% no value range check here (ought to be, but very expensive)
- [pre_complete_bits(NumBits,
- ((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min)|
- chars_encode2(T,NumBits,T1)];
-chars_encode2([H={A,B,C,D}|T],NumBits,{Min,Max,Tab}) ->
- %% no value range check here (ought to be, but very expensive)
- [pre_complete_bits(NumBits,exit_if_false(H,element(((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min,Tab)))|chars_encode2(T,NumBits,{Min,Max,notab})];
-chars_encode2([H|_T],_NumBits,{_Min,_Max,_Tab}) ->
- exit({error,{asn1,{illegal_char_value,H}}});
-chars_encode2([],_,_) ->
- [].
-
-exit_if_false(V,false)->
- exit({error,{asn1,{"illegal value according to Permitted alphabet constraint",V}}});
-exit_if_false(_,V) ->V.
-
-pre_complete_bits(NumBits,Val) when NumBits =< 8 ->
- [10,NumBits,Val];
-pre_complete_bits(NumBits,Val) when NumBits =< 16 ->
- [10,NumBits-8,Val bsr 8,10,8,(Val band 255)];
-pre_complete_bits(NumBits,Val) when NumBits =< 2040 -> % 255 * 8
- Unused = (8 - (NumBits rem 8)) rem 8,
- Len = NumBits + Unused,
- [30,Unused,Len div 8,<<(Val bsl Unused):Len>>].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_UTF8String(Val) -> CompleteList
-%% Val -> <<utf8encoded binary>>
-%% CompleteList -> [apropriate codes and values for driver complete]
-%%
-encode_UTF8String(Val) when is_binary(Val) ->
- Sz = byte_size(Val),
- [encode_length(Sz),octets_to_complete(Sz, Val)];
-encode_UTF8String(Val) ->
- encode_UTF8String(list_to_binary(Val)).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_object_identifier(Val) -> CompleteList
-%% encode_object_identifier({Name,Val}) -> CompleteList
-%% Val -> {Int1,Int2,...,IntN} % N >= 2
-%% Name -> atom()
-%% Int1 -> integer(0..2)
-%% Int2 -> integer(0..39) when Int1 (0..1) else integer()
-%% Int3-N -> integer()
-%% CompleteList -> [{bits,8,Val}|{octets,Ol}|align|...]
-%%
-encode_object_identifier(Val) ->
- OctetList = e_object_identifier(Val),
- Octets = list_to_binary(OctetList),
- Sz = byte_size(Octets),
- [encode_length(Sz),
- octets_to_complete(Sz, Octets)].
-
-e_object_identifier({'OBJECT IDENTIFIER',V}) ->
- e_object_identifier(V);
-e_object_identifier(V) when is_tuple(V) ->
- e_object_identifier(tuple_to_list(V));
-
-%% E1 = 0|1|2 and (E2 < 40 when E1 = 0|1)
-e_object_identifier([E1,E2|Tail]) when E1 >= 0, E1 < 2, E2 < 40 ; E1==2 ->
- Head = 40*E1 + E2, % weird
- e_object_elements([Head|Tail],[]);
-e_object_identifier(Oid=[_,_|_Tail]) ->
- exit({error,{asn1,{'illegal_value',Oid}}}).
-
-e_object_elements([],Acc) ->
- lists:reverse(Acc);
-e_object_elements([H|T],Acc) ->
- e_object_elements(T,[e_object_element(H)|Acc]).
-
-e_object_element(Num) when Num < 128 ->
- [Num];
-e_object_element(Num) ->
- [e_o_e(Num bsr 7)|[Num band 2#1111111]].
-e_o_e(Num) when Num < 128 ->
- Num bor 2#10000000;
-e_o_e(Num) ->
- [e_o_e(Num bsr 7)|[(Num band 2#1111111) bor 2#10000000]].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_relative_oid(Val) -> CompleteList
-%% encode_relative_oid({Name,Val}) -> CompleteList
-encode_relative_oid(Val) when is_tuple(Val) ->
- encode_relative_oid(tuple_to_list(Val));
-encode_relative_oid(Val) when is_list(Val) ->
- Octets = list_to_binary([e_object_element(X)||X <- Val]),
- Sz = byte_size(Octets),
- [encode_length(Sz)|octets_to_complete(Sz, Octets)].
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% complete(InList) -> ByteList
%% Takes a coded list with bits and bytes and converts it to a list of bytes
%% Should be applied as the last step at encode of a complete ASN.1 type
%%
-complete(L) ->
- case asn1rt_nif:encode_per_complete(L) of
+complete(L0) ->
+ L = complete(L0, []),
+ case list_to_bitstring(L) of
<<>> -> <<0>>;
Bin -> Bin
end.
-octets_to_complete(Len,Val) when Len < 256 ->
- [20,Len,Val];
-octets_to_complete(Len,Val) ->
- [21,<<Len:16>>,Val].
-
-octets_unused_to_complete(Unused,Len,Val) when Len < 256 ->
- [30,Unused,Len,Val];
-octets_unused_to_complete(Unused,Len,Val) ->
- [31,Unused,<<Len:16>>,Val].
+complete([], []) ->
+ [];
+complete([], [H|More]) ->
+ complete(H, More);
+complete([align|T], More) ->
+ complete(T, More);
+complete([[]|T], More) ->
+ complete(T, More);
+complete([[_|_]=H], More) ->
+ complete(H, More);
+complete([[_|_]=H|T], More) ->
+ complete(H, [T|More]);
+complete([H|T], More) when is_integer(H); is_binary(H) ->
+ [H|complete(T, More)];
+complete([H|T], More) ->
+ [H|complete(T, bit_size(H), More)];
+complete(Bin, More) when is_binary(Bin) ->
+ [Bin|complete([], More)];
+complete(Bin, More) ->
+ [Bin|complete([], bit_size(Bin), More)].
+
+complete([], Bits, []) ->
+ case Bits band 7 of
+ 0 -> [];
+ N -> [<<0:(8-N)>>]
+ end;
+complete([], Bits, [H|More]) ->
+ complete(H, Bits, More);
+complete([align|T], Bits, More) ->
+ case Bits band 7 of
+ 0 -> complete(T, More);
+ 1 -> [<<0:7>>|complete(T, More)];
+ 2 -> [<<0:6>>|complete(T, More)];
+ 3 -> [<<0:5>>|complete(T, More)];
+ 4 -> [<<0:4>>|complete(T, More)];
+ 5 -> [<<0:3>>|complete(T, More)];
+ 6 -> [<<0:2>>|complete(T, More)];
+ 7 -> [<<0:1>>|complete(T, More)]
+ end;
+complete([[]|T], Bits, More) ->
+ complete(T, Bits, More);
+complete([[_|_]=H], Bits, More) ->
+ complete(H, Bits, More);
+complete([[_|_]=H|T], Bits, More) ->
+ complete(H, Bits, [T|More]);
+complete([H|T], Bits, More) when is_integer(H);
+ is_binary(H) ->
+ [H|complete(T, Bits, More)];
+complete([H|T], Bits, More) ->
+ [H|complete(T, Bits+bit_size(H), More)];
+complete(Bin, Bits, More) when is_binary(Bin) ->
+ [Bin|complete([], Bits, More)];
+complete(Bin, Bits, More) ->
+ [Bin|complete([], Bits+bit_size(Bin), More)].
diff --git a/lib/asn1/src/asn1rtt_per_common.erl b/lib/asn1/src/asn1rtt_per_common.erl
index e7edc2b65f..9e9fd87ec3 100644
--- a/lib/asn1/src/asn1rtt_per_common.erl
+++ b/lib/asn1/src/asn1rtt_per_common.erl
@@ -28,7 +28,16 @@
decode_chars/2,decode_chars/3,
decode_chars_16bit/1,
decode_big_chars/2,
- decode_oid/1,decode_relative_oid/1]).
+ decode_oid/1,decode_relative_oid/1,
+ encode_chars/2,encode_chars/3,
+ encode_chars_16bit/1,encode_big_chars/1,
+ encode_fragmented/2,
+ encode_oid/1,encode_relative_oid/1,
+ encode_unconstrained_number/1,
+ bitstring_from_positions/1,bitstring_from_positions/2,
+ to_bitstring/1,to_bitstring/2,
+ to_named_bitstring/1,to_named_bitstring/2,
+ extension_bitmap/3]).
-define('16K',16384).
@@ -90,6 +99,182 @@ decode_oid(Octets) ->
decode_relative_oid(Octets) ->
list_to_tuple(dec_subidentifiers(Octets, 0, [])).
+encode_chars(Val, NumBits) ->
+ << <<C:NumBits>> || C <- Val >>.
+
+encode_chars(Val, NumBits, {Lb,Tab}) ->
+ << <<(enc_char(C, Lb, Tab)):NumBits>> || C <- Val >>.
+
+encode_chars_16bit(Val) ->
+ L = [case C of
+ {0,0,A,B} -> [A,B];
+ C when is_integer(C) -> [0,C]
+ end || C <- Val],
+ iolist_to_binary(L).
+
+encode_big_chars(Val) ->
+ L = [case C of
+ {_,_,_,_} -> tuple_to_list(C);
+ C when is_integer(C) -> [<<0,0,0>>,C]
+ end || C <- Val],
+ iolist_to_binary(L).
+
+encode_fragmented(Bin, Unit) ->
+ encode_fragmented_1(Bin, Unit, 4).
+
+encode_oid(Val) when is_tuple(Val) ->
+ encode_oid(tuple_to_list(Val));
+encode_oid(Val) ->
+ iolist_to_binary(e_object_identifier(Val)).
+
+encode_relative_oid(Val) when is_tuple(Val) ->
+ encode_relative_oid(tuple_to_list(Val));
+encode_relative_oid(Val) when is_list(Val) ->
+ list_to_binary([e_object_element(X)||X <- Val]).
+
+encode_unconstrained_number(Val) when Val >= 0 ->
+ if
+ Val < 16#80 ->
+ [1,Val];
+ Val < 16#100 ->
+ [<<2,0>>,Val];
+ true ->
+ case binary:encode_unsigned(Val) of
+ <<0:1,_/bitstring>>=Bin ->
+ case byte_size(Bin) of
+ Sz when Sz < 128 ->
+ [Sz,Bin];
+ Sz when Sz < 16384 ->
+ [<<2:2,Sz:14>>,Bin]
+ end;
+ <<1:1,_/bitstring>>=Bin ->
+ case byte_size(Bin)+1 of
+ Sz when Sz < 128 ->
+ [Sz,0,Bin];
+ Sz when Sz < 16384 ->
+ [<<2:2,Sz:14,0:8>>,Bin]
+ end
+ end
+ end;
+encode_unconstrained_number(Val) ->
+ Oct = enint(Val, []),
+ Len = length(Oct),
+ if
+ Len < 128 ->
+ [Len|Oct];
+ Len < 16384 ->
+ [<<2:2,Len:14>>|Oct]
+ end.
+
+%% bitstring_from_positions([Position]) -> BitString
+%% Given an unsorted list of bit positions (0..MAX), construct
+%% a BIT STRING. The rightmost bit will always be a one.
+
+bitstring_from_positions([]) -> <<>>;
+bitstring_from_positions([_|_]=L0) ->
+ L1 = lists:sort(L0),
+ L = diff(L1, -1),
+ << <<1:(N+0)>> || N <- L >>.
+
+%% bitstring_from_positions([Position], Lb) -> BitString
+%% Given an unsorted list of bit positions (0..MAX) and a lower bound
+%% for the number of bits, construct BIT STRING (zero-padded on the
+%% right side if needed).
+
+bitstring_from_positions(L0, Lb) ->
+ L1 = lists:sort(L0),
+ L = diff(L1, -1, Lb-1),
+ << <<B:(N+0)>> || {B,N} <- L >>.
+
+%% to_bitstring(Val) -> BitString
+%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer
+%% Given one of the possible representations for a BIT STRING,
+%% return a bitstring (without adding or removing any zero bits
+%% at the right end).
+
+to_bitstring({0,Bs}) when is_binary(Bs) ->
+ Bs;
+to_bitstring({Unused,Bs0}) when is_binary(Bs0) ->
+ Sz = bit_size(Bs0) - Unused,
+ <<Bs:Sz/bits,_/bits>> = Bs0,
+ Bs;
+to_bitstring(Bs) when is_bitstring(Bs) ->
+ Bs;
+to_bitstring(Int) when is_integer(Int), Int >= 0 ->
+ L = int_to_bitlist(Int),
+ << <<B:1>> || B <- L >>;
+to_bitstring(L) when is_list(L) ->
+ << <<B:1>> || B <- L >>.
+
+%% to_bitstring(Val, Lb) -> BitString
+%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer
+%% Lb = Integer
+%% Given one of the possible representations for a BIT STRING
+%% and the lower bound for the number of bits,
+%% return a bitstring at least Lb bits long (padded with zeroes
+%% if needed).
+
+to_bitstring({0,Bs}, Lb) when is_binary(Bs) ->
+ case bit_size(Bs) of
+ Sz when Sz < Lb ->
+ <<Bs/bits,0:(Lb-Sz)>>;
+ _ ->
+ Bs
+ end;
+to_bitstring({Unused,Bs0}, Lb) when is_binary(Bs0) ->
+ Sz = bit_size(Bs0) - Unused,
+ if
+ Sz < Lb ->
+ <<Bs0:Sz/bits,0:(Lb-Sz)>>;
+ true ->
+ <<Bs:Sz/bits,_/bits>> = Bs0,
+ Bs
+ end;
+to_bitstring(Bs, Lb) when is_bitstring(Bs) ->
+ adjust_size(Bs, Lb);
+to_bitstring(Int, Lb) when is_integer(Int), Int >= 0 ->
+ L = int_to_bitlist(Int),
+ Bs = << <<B:1>> || B <- L >>,
+ adjust_size(Bs, Lb);
+to_bitstring(L, Lb) when is_list(L) ->
+ Bs = << <<B:1>> || B <- L >>,
+ adjust_size(Bs, Lb).
+
+%% to_named_bitstring(Val) -> BitString
+%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer
+%% Given one of the possible representations for a BIT STRING,
+%% return a bitstring where any trailing zeroes have been stripped.
+
+to_named_bitstring(Val) ->
+ Bs = to_bitstring(Val),
+ bs_drop_trailing_zeroes(Bs).
+
+%% to_named_bitstring(Val, Lb) -> BitString
+%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer
+%% Lb = Integer
+%% Given one of the possible representations for a BIT STRING
+%% and the lower bound for the number of bits,
+%% return a bitstring that is at least Lb bits long. There will
+%% be zeroes at the right only if needed to reach the lower bound
+%% for the number of bits.
+
+to_named_bitstring({0,Bs}, Lb) when is_binary(Bs) ->
+ adjust_trailing_zeroes(Bs, Lb);
+to_named_bitstring({Unused,Bs0}, Lb) when is_binary(Bs0) ->
+ Sz = bit_size(Bs0) - Unused,
+ <<Bs:Sz/bits,_/bits>> = Bs0,
+ adjust_trailing_zeroes(Bs, Lb);
+to_named_bitstring(Bs, Lb) when is_bitstring(Bs) ->
+ adjust_trailing_zeroes(Bs, Lb);
+to_named_bitstring(Val, Lb) ->
+ %% Obsolete representations: list or integer. Optimize
+ %% for correctness, not speed.
+ adjust_trailing_zeroes(to_bitstring(Val), Lb).
+
+
+extension_bitmap(Val, Pos, Limit) ->
+ extension_bitmap(Val, Pos, Limit, 0).
+
%%%
%%% Internal functions.
%%%
@@ -124,3 +309,149 @@ dec_subidentifiers([H|T], Av, Al) ->
dec_subidentifiers(T, 0, [(Av bsl 7) bor H|Al]);
dec_subidentifiers([], _Av, Al) ->
lists:reverse(Al).
+
+enc_char(C0, Lb, Tab) ->
+ try element(C0-Lb, Tab) of
+ ill ->
+ illegal_char_error();
+ C ->
+ C
+ catch
+ error:badarg ->
+ illegal_char_error()
+ end.
+
+illegal_char_error() ->
+ error({error,{asn1,"value forbidden by FROM constraint"}}).
+
+encode_fragmented_1(Bin, Unit, N) ->
+ SegSz = Unit * N * ?'16K',
+ case Bin of
+ <<B:SegSz/bitstring,T/bitstring>> ->
+ [<<3:2,N:6>>,B|encode_fragmented_1(T, Unit, N)];
+ _ when N > 1 ->
+ encode_fragmented_1(Bin, Unit, N-1);
+ _ ->
+ case bit_size(Bin) div Unit of
+ Len when Len < 128 ->
+ [Len,Bin];
+ Len when Len < 16384 ->
+ [<<2:2,Len:14>>,Bin]
+ end
+ end.
+
+%% E1 = 0|1|2 and (E2 < 40 when E1 = 0|1)
+e_object_identifier([E1,E2|Tail]) when E1 >= 0, E1 < 2, E2 < 40; E1 =:= 2 ->
+ Head = 40*E1 + E2,
+ e_object_elements([Head|Tail], []);
+e_object_identifier([_,_|_Tail]=Oid) ->
+ exit({error,{asn1,{'illegal_value',Oid}}}).
+
+e_object_elements([], Acc) ->
+ lists:reverse(Acc);
+e_object_elements([H|T], Acc) ->
+ e_object_elements(T, [e_object_element(H)|Acc]).
+
+e_object_element(Num) when Num < 128 ->
+ [Num];
+e_object_element(Num) ->
+ [e_o_e(Num bsr 7)|[Num band 2#1111111]].
+
+e_o_e(Num) when Num < 128 ->
+ Num bor 2#10000000;
+e_o_e(Num) ->
+ [e_o_e(Num bsr 7)|[(Num band 2#1111111) bor 2#10000000]].
+
+enint(-1, [B1|T]) when B1 > 127 ->
+ [B1|T];
+enint(N, Acc) ->
+ enint(N bsr 8, [N band 16#ff|Acc]).
+
+diff([H|T], Prev) ->
+ [H-Prev|diff(T, H)];
+diff([], _) -> [].
+
+diff([H|T], Prev, Last) ->
+ [{1,H-Prev}|diff(T, H, Last)];
+diff([], Prev, Last) when Last >= Prev ->
+ [{0,Last-Prev}];
+diff([], _, _) -> [].
+
+int_to_bitlist(0) -> [];
+int_to_bitlist(Int) -> [Int band 1|int_to_bitlist(Int bsr 1)].
+
+adjust_size(Bs, Lb) ->
+ case bit_size(Bs) of
+ Sz when Sz < Lb ->
+ <<Bs:Sz/bits,0:(Lb-Sz)>>;
+ _ ->
+ Bs
+ end.
+
+adjust_trailing_zeroes(Bs0, Lb) ->
+ case bit_size(Bs0) of
+ Sz when Sz < Lb ->
+ %% Too short - pad with zeroes.
+ <<Bs0:Sz/bits,0:(Lb-Sz)>>;
+ Lb ->
+ %% Exactly the right size - nothing to do.
+ Bs0;
+ _ ->
+ %% Longer than the lower bound - drop trailing zeroes.
+ <<_:Lb/bits,Tail/bits>> = Bs0,
+ Sz = Lb + bit_size(bs_drop_trailing_zeroes(Tail)),
+ <<Bs:Sz/bits,_/bits>> = Bs0,
+ Bs
+ end.
+
+bs_drop_trailing_zeroes(Bs) ->
+ bs_drop_trailing_zeroes(Bs, bit_size(Bs)).
+
+bs_drop_trailing_zeroes(Bs0, Sz0) when Sz0 < 8 ->
+ <<Byte:Sz0>> = Bs0,
+ Sz = Sz0 - ntz(Byte),
+ <<Bs:Sz/bits,_/bits>> = Bs0,
+ Bs;
+bs_drop_trailing_zeroes(Bs0, Sz0) ->
+ Sz1 = Sz0 - 8,
+ <<Bs1:Sz1/bits,Byte:8>> = Bs0,
+ case ntz(Byte) of
+ 8 ->
+ bs_drop_trailing_zeroes(Bs1, Sz1);
+ Ntz ->
+ Sz = Sz0 - Ntz,
+ <<Bs:Sz/bits,_:Ntz/bits>> = Bs0,
+ Bs
+ end.
+
+%% ntz(Byte) -> Number of trailing zeroes.
+ntz(Byte) ->
+ %% The table was calculated like this:
+ %% NTZ = fun (B, N, NTZ) when B band 1 =:= 0 -> NTZ(B bsr 1, N+1, NTZ); (_, N, _) -> N end.
+ %% io:format("~w\n", [list_to_tuple([NTZ(B+256, 0, NTZ) || B <- lists:seq(0, 255)])]).
+ T = {8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
+ 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0},
+ element(Byte+1, T).
+
+extension_bitmap(_Val, Pos, Limit, Acc) when Pos >= Limit ->
+ Acc;
+extension_bitmap(Val, Pos, Limit, Acc) ->
+ Bit = case element(Pos, Val) of
+ asn1_NOVALUE -> 0;
+ _ -> 1
+ end,
+ extension_bitmap(Val, Pos+1, Limit, (Acc bsl 1) bor Bit).
diff --git a/lib/asn1/src/asn1rtt_real_common.erl b/lib/asn1/src/asn1rtt_real_common.erl
index 22a1f4c4dd..12ca165ecd 100644
--- a/lib/asn1/src/asn1rtt_real_common.erl
+++ b/lib/asn1/src/asn1rtt_real_common.erl
@@ -105,8 +105,7 @@ encode_real(_C, {Mantissa, Base, Exponent}) when Base =:= 2 ->
true -> list_to_binary(real_mininum_octets(-(Man))) % signbit keeps track of sign
end,
%% ok = io:format("LenMask: ~w EOctets: ~w~nFirstOctet: ~w OctMantissa: ~w OctExpLen: ~w~n", [LenMask, EOctets, FirstOctet, OctMantissa, OctExpLen]),
- Bin = <<FirstOctet/binary, EOctets/binary, OctMantissa/binary>>,
- {Bin, size(Bin)};
+ <<FirstOctet/binary, EOctets/binary, OctMantissa/binary>>;
encode_real(C, {Mantissa,Base,Exponent})
when Base =:= 10, is_integer(Mantissa), is_integer(Exponent) ->
%% always encode as NR3 due to DER on the format
@@ -176,8 +175,7 @@ encode_real_as_string(_C, Mantissa, Exponent)
end,
ManBin = list_to_binary(TruncMant),
NR3 = 3,
- {<<NR3,ManBin/binary,$.,ExpBin/binary>>,
- 2 + byte_size(ManBin) + byte_size(ExpBin)}.
+ <<NR3,ManBin/binary,$.,ExpBin/binary>>.
remove_trailing_zeros(IntStr) ->
case lists:dropwhile(fun($0)-> true;
diff --git a/lib/asn1/src/asn1rtt_uper.erl b/lib/asn1/src/asn1rtt_uper.erl
index a5035c6660..68a89c70e1 100644
--- a/lib/asn1/src/asn1rtt_uper.erl
+++ b/lib/asn1/src/asn1rtt_uper.erl
@@ -19,95 +19,8 @@
%%
-module(asn1rtt_uper).
--export([setext/1, fixoptionals/3,
- fixextensions/2,
- skipextensions/3]).
--export([set_choice/3, encode_integer/2, encode_integer/3]).
--export([encode_small_number/1, encode_constrained_number/2,
- encode_boolean/1,
- encode_length/1, encode_length/2,
- encode_bit_string/3]).
--export([encode_octet_string/1,encode_octet_string/2,
- encode_relative_oid/1,
- encode_object_identifier/1,
- complete/1, complete_NFP/1]).
-
- -export([encode_open_type/1]).
-
- -export([encode_UniversalString/3,
- encode_PrintableString/3,
- encode_GeneralString/2,
- encode_GraphicString/2,
- encode_TeletexString/2,
- encode_VideotexString/2,
- encode_VisibleString/3,
- encode_UTF8String/1,
- encode_BMPString/3,
- encode_IA5String/3,
- encode_NumericString/3,
- encode_ObjectDescriptor/2
- ]).
-
--define('16K',16384).
--define('32K',32768).
--define('64K',65536).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% setext(true|false) -> CompleteList
-%%
-
-setext(false) ->
- <<0:1>>;
-setext(true) ->
- <<1:1>>.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% This is the new fixoptionals/3 which is used by the new generates
-%%
-fixoptionals(OptList,OptLength,Val) when is_tuple(Val) ->
- Bits = fixoptionals(OptList,Val,0),
- {Val,<<Bits:OptLength>>};
-
-fixoptionals([],_Val,Acc) ->
- %% Optbits
- Acc;
-fixoptionals([{Pos,DefVal}|Ot],Val,Acc) ->
- case element(Pos,Val) of
- asn1_DEFAULT -> fixoptionals(Ot,Val,Acc bsl 1);
- DefVal -> fixoptionals(Ot,Val,Acc bsl 1);
- _ -> fixoptionals(Ot,Val,(Acc bsl 1) + 1)
- end;
-fixoptionals([Pos|Ot],Val,Acc) ->
- case element(Pos,Val) of
- asn1_NOVALUE -> fixoptionals(Ot,Val,Acc bsl 1);
- asn1_DEFAULT -> fixoptionals(Ot,Val,Acc bsl 1);
- _ -> fixoptionals(Ot,Val,(Acc bsl 1) + 1)
- end.
-
-
-fixextensions({ext,ExtPos,ExtNum},Val) ->
- case fixextensions(ExtPos,ExtNum+ExtPos,Val,0) of
- 0 -> [];
- ExtBits ->
- [encode_small_length(ExtNum),<<ExtBits:ExtNum>>]
- end.
-
-fixextensions(Pos,MaxPos,_,Acc) when Pos >= MaxPos ->
- Acc;
-fixextensions(Pos,ExtPos,Val,Acc) ->
- Bit = case catch(element(Pos+1,Val)) of
- asn1_NOVALUE ->
- 0;
- asn1_NOEXTVALUE ->
- 0;
- {'EXIT',_} ->
- 0;
- _ ->
- 1
- end,
- fixextensions(Pos+1,ExtPos,Val,(Acc bsl 1)+Bit).
+-export([skipextensions/3]).
+-export([complete/1, complete_NFP/1]).
skipextensions(Bytes0, Nr, ExtensionBitstr) when is_bitstring(ExtensionBitstr) ->
Prev = Nr - 1,
@@ -122,249 +35,6 @@ skipextensions(Bytes0, Nr, ExtensionBitstr) when is_bitstring(ExtensionBitstr) -
Bytes0
end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% set_choice(Alt,Choices,Altnum) -> ListofBitSettings
-%% Alt = atom()
-%% Altnum = integer() | {integer(),integer()}% number of alternatives
-%% Choices = [atom()] | {[atom()],[atom()]}
-%% When Choices is a tuple the first list is the Rootset and the
-%% second is the Extensions and then Altnum must also be a tuple with the
-%% lengths of the 2 lists
-%%
-set_choice(Alt, {L1,L2}, {Len1,_Len2}) ->
- case set_choice_tag(Alt, L1) of
- N when is_integer(N), Len1 > 1 ->
- [<<0:1>>, % the value is in the root set
- encode_integer([{'ValueRange',{0,Len1-1}}],N)];
- N when is_integer(N) ->
- <<0:1>>; % no encoding if only 0 or 1 alternative
- false ->
- [<<1:1>>, % extension value
- case set_choice_tag(Alt,L2) of
- N2 when is_integer(N2) ->
- encode_small_number(N2);
- false ->
- unknown_choice_alt
- end]
- end;
-set_choice(Alt,L,Len) ->
- case set_choice_tag(Alt,L) of
- N when is_integer(N), Len > 1 ->
- encode_integer([{'ValueRange',{0,Len-1}}],N);
- N when is_integer(N) ->
- []; % no encoding if only 0 or 1 alternative
- false ->
- [unknown_choice_alt]
- end.
-
-set_choice_tag(Alt,Choices) ->
- set_choice_tag(Alt,Choices,0).
-
-set_choice_tag(Alt,[Alt|_Rest],Tag) ->
- Tag;
-set_choice_tag(Alt,[_H|Rest],Tag) ->
- set_choice_tag(Alt,Rest,Tag+1);
-set_choice_tag(_Alt,[],_Tag) ->
- false.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_open_type(Constraint, Value) -> CompleteList
-%% Value = list of bytes of an already encoded value (the list must be flat)
-%% | binary
-%% Contraint = not used in this version
-%%
-encode_open_type(Val) ->
- [encode_length(byte_size(Val)),Val].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_integer(Constraint,Value,NamedNumberList) -> CompleteList
-%% encode_integer(Constraint,Value) -> CompleteList
-%% encode_integer(Constraint,{Name,Value}) -> CompleteList
-%%
-%%
-encode_integer(C, V, NamedNumberList) when is_atom(V) ->
- case lists:keyfind(V, 1, NamedNumberList) of
- {_,NewV} ->
- encode_integer(C, NewV);
- false ->
- exit({error,{asn1,{namednumber,V}}})
- end;
-encode_integer(C, V, _NamedNumberList) when is_integer(V) ->
- encode_integer(C, V).
-
-encode_integer([{Rc,_Ec}],Val) when is_tuple(Rc) ->
- try
- [<<0:1>>,encode_integer([Rc], Val)]
- catch
- _:{error,{asn1,_}} ->
- [<<1:1>>,encode_unconstrained_number(Val)]
- end;
-encode_integer(C, Val) when is_list(C) ->
- case get_constraint(C, 'SingleValue') of
- no ->
- encode_integer1(C,Val);
- V when is_integer(V), V =:= Val ->
- []; % a type restricted to a single value encodes to nothing
- V when is_list(V) ->
- case lists:member(Val,V) of
- true ->
- encode_integer1(C,Val);
- _ ->
- exit({error,{asn1,{illegal_value,Val}}})
- end;
- _ ->
- exit({error,{asn1,{illegal_value,Val}}})
- end.
-
-encode_integer1(C, Val) ->
- case VR = get_constraint(C, 'ValueRange') of
- no ->
- encode_unconstrained_number(Val);
- {Lb,'MAX'} when Lb =< Val ->
- encode_semi_constrained_number(Lb, Val);
- %% positive with range
- {Lb,Ub} when Val >= Lb, Ub >= Val ->
- encode_constrained_number(VR,Val);
- _ ->
- exit({error,{asn1,{illegal_value,VR,Val}}})
- end.
-
-%% X.691:10.6 Encoding of a normally small non-negative whole number
-%% Use this for encoding of CHOICE index if there is an extension marker in
-%% the CHOICE
-encode_small_number(Val) when Val < 64 ->
- <<Val:7>>;
-encode_small_number(Val) ->
- [<<1:1>>|encode_semi_constrained_number(0, Val)].
-
-%% X.691:10.7 Encoding of a semi-constrained whole number
-encode_semi_constrained_number(Lb, Val) ->
- %% encoding in minimum number of octets preceeded by a length
- Val2 = Val - Lb,
- Bin = eint_bin_positive(Val2),
- Size = byte_size(Bin),
- if
- Size < 128 ->
- [<<Size>>,Bin];
- Size < 16384 ->
- [<<2:2,Size:14>>,Bin];
- true ->
- [encode_length(Size),Bin]
- end.
-
-encode_constrained_number({Lb,Ub}, Val) when Val >= Lb, Ub >= Val ->
- Range = Ub - Lb + 1,
- Val2 = Val - Lb,
- NumBits = num_bits(Range),
- <<Val2:NumBits>>;
-encode_constrained_number(Range,Val) ->
- exit({error,{asn1,{integer_range,Range,value,Val}}}).
-
-%% X.691:10.8 Encoding of an unconstrained whole number
-
-encode_unconstrained_number(Val) when Val >= 0 ->
- Oct = eint_bin_2Cs(Val),
- Len = byte_size(Oct),
- if
- Len < 128 ->
- [<<Len>>,Oct]; % equiv with encode_length(undefined,Len) but faster
- Len < 16384 ->
- [<<2:2,Len:14>>,Oct];
- true ->
- [encode_length(Len),<<Len:16>>,Oct]
- end;
-encode_unconstrained_number(Val) -> % negative
- Oct = enint(Val,[]),
- Len = byte_size(Oct),
- if
- Len < 128 ->
- [<<Len>>,Oct]; % equiv with encode_length(undefined,Len) but faster
- Len < 16384 ->
- [<<2:2,Len:14>>,Oct];
- true ->
- [encode_length(Len),Oct]
- end.
-
-
-eint_bin_2Cs(Int) ->
- case eint_bin_positive(Int) of
- <<B,_/binary>> = Bin when B > 16#7f ->
- <<0,Bin/binary>>;
- Bin -> Bin
- end.
-
-%% returns the integer as a binary
-eint_bin_positive(Val) when Val < 16#100 ->
- <<Val>>;
-eint_bin_positive(Val) when Val < 16#10000 ->
- <<Val:16>>;
-eint_bin_positive(Val) when Val < 16#1000000 ->
- <<Val:24>>;
-eint_bin_positive(Val) when Val < 16#100000000 ->
- <<Val:32>>;
-eint_bin_positive(Val) ->
- list_to_binary([eint_bin_positive2(Val bsr 32),<<Val:32>>]).
-
-eint_bin_positive2(Val) when Val < 16#100 ->
- <<Val>>;
-eint_bin_positive2(Val) when Val < 16#10000 ->
- <<Val:16>>;
-eint_bin_positive2(Val) when Val < 16#1000000 ->
- <<Val:24>>;
-eint_bin_positive2(Val) when Val < 16#100000000 ->
- <<Val:32>>;
-eint_bin_positive2(Val) ->
- [eint_bin_positive2(Val bsr 32),<<Val:32>>].
-
-
-
-
-enint(-1, [B1|T]) when B1 > 127 ->
- list_to_binary([B1|T]);
-enint(N, Acc) ->
- enint(N bsr 8, [N band 16#ff|Acc]).
-
-
-%% X.691:10.9 Encoding of a length determinant
-%%encode_small_length(undefined,Len) -> % null means no UpperBound
-%% encode_small_number(Len).
-
-%% X.691:10.9.3.5
-%% X.691:10.9.3.7
-encode_length(Len) -> % un-constrained
- if
- Len < 128 ->
- <<Len>>;
- Len < 16384 ->
- <<2:2,Len:14>>;
- true -> % should be able to endode length >= 16384
- error({error,{asn1,{encode_length,{nyi,above_16k}}}})
- end.
-
-encode_length({C,[]}, Len) ->
- case C of
- {Lb,Ub}=Vr when Lb =< Len, Len =< Ub ->
- [<<0:1>>|encode_constrained_number(Vr, Len)];
- _ ->
- [<<1:1>>|encode_length(Len)]
- end;
-encode_length(Len, Len) ->
- [];
-encode_length(Vr, Len) ->
- encode_constrained_number(Vr, Len).
-
-
-%% X.691 10.9.3.4 (only used for length of bitmap that prefixes extension
-%% additions in a sequence or set
-encode_small_length(Len) when Len =< 64 ->
- <<(Len-1):7>>;
-encode_small_length(Len) ->
- [<<1:1>>,encode_length(Len)].
-
-
%% un-constrained
decode_length(<<0:1,Oct:7,Rest/bitstring>>) ->
{Oct,Rest};
@@ -373,575 +43,20 @@ decode_length(<<2:2,Val:14,Rest/bitstring>>) ->
decode_length(<<3:2,_:14,_Rest/bitstring>>) ->
exit({error,{asn1,{decode_length,{nyi,above_16k}}}}).
- % X.691:11
-encode_boolean(true) ->
- <<1:1>>;
-encode_boolean(false) ->
- <<0:1>>;
-encode_boolean(Val) ->
- exit({error,{asn1,{encode_boolean,Val}}}).
-
-
-%%============================================================================
-%%============================================================================
-%% Bitstring value, ITU_T X.690 Chapter 8.5
-%%============================================================================
-%%============================================================================
-
-%%============================================================================
-%% encode bitstring value
-%%============================================================================
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% bitstring NamedBitList
-%% Val can be of:
-%% - [identifiers] where only named identifers are set to one,
-%% the Constraint must then have some information of the
-%% bitlength.
-%% - [list of ones and zeroes] all bits
-%% - integer value representing the bitlist
-%% C is constraint Len, only valid when identifiers are present
-
-
-%% when the value is a list of {Unused,BinBits}, where
-%% Unused = integer(),
-%% BinBits = binary().
-
-encode_bit_string(C, Bits, NamedBitList) when is_bitstring(Bits) ->
- PadLen = (8 - (bit_size(Bits) band 7)) band 7,
- Compact = {PadLen,<<Bits/bitstring,0:PadLen>>},
- encode_bit_string(C, Compact, NamedBitList);
-encode_bit_string(C, {Unused,BinBits}=Bin, NamedBitList)
- when is_integer(Unused), is_binary(BinBits) ->
- encode_bin_bit_string(C, Bin, NamedBitList);
-
-encode_bit_string(C, BitListVal, NamedBitList) ->
- encode_bit_string1(C, BitListVal, NamedBitList).
-
-%% when the value is a list of named bits
-encode_bit_string1(C, [FirstVal|_RestVal]=LoNB, NamedBitList)
- when is_atom(FirstVal) ->
- ToSetPos = get_all_bitposes(LoNB, NamedBitList, []),
- BitList = make_and_set_list(ToSetPos, 0),
- encode_bit_string1(C, BitList, NamedBitList);
-encode_bit_string1(C, [{bit,_No}|_RestVal]=BL, NamedBitList) ->
- ToSetPos = get_all_bitposes(BL, NamedBitList, []),
- BitList = make_and_set_list(ToSetPos, 0),
- encode_bit_string1(C, BitList, NamedBitList);
-%% when the value is a list of ones and zeroes
-encode_bit_string1(Int, BitListValue, _)
- when is_list(BitListValue), is_integer(Int) ->
- %% The type is constrained by a single value size constraint
- bit_list2bitstr(Int, BitListValue);
-encode_bit_string1(no, BitListValue, [])
- when is_list(BitListValue) ->
- Len = length(BitListValue),
- [encode_length(Len),bit_list2bitstr(Len,BitListValue)];
-encode_bit_string1(C, BitListValue,[])
- when is_list(BitListValue) ->
- Len = length(BitListValue),
- [encode_length(C, Len),bit_list2bitstr(Len,BitListValue)];
-encode_bit_string1(no, BitListValue,_NamedBitList)
- when is_list(BitListValue) ->
- NewBitLVal = lists:reverse(lists:dropwhile(fun(0)->true;(1)->false end,
- lists:reverse(BitListValue))),
- Len = length(NewBitLVal),
- [encode_length(Len),bit_list2bitstr(Len,NewBitLVal)];
-encode_bit_string1(C, BitListValue, _NamedBitList)
- when is_list(BitListValue) ->% C = {_,'MAX'}
- NewBitStr = bitstr_trailing_zeros(BitListValue, C),
- [encode_length(C, bit_size(NewBitStr)),NewBitStr];
-
-
-%% when the value is an integer
-encode_bit_string1(C, IntegerVal, NamedBitList) when is_integer(IntegerVal)->
- BitList = int_to_bitlist(IntegerVal),
- encode_bit_string1(C, BitList, NamedBitList).
-
-bit_list2bitstr(Len,BitListValue) ->
- case length(BitListValue) of
- Len ->
- << <<B:1>> || B <- BitListValue>>;
- L when L > Len -> % truncate
- <<(<< <<B:1>> || B <- BitListValue>>):Len/bitstring>>;
- L -> % Len > L -> pad
- <<(<< <<B:1>> || B <- BitListValue>>)/bitstring,0:(Len-L)>>
- end.
-
-adjust_trailing_zeros(Len, Bin) when Len =:= bit_size(Bin) ->
- Bin;
-adjust_trailing_zeros(Len, Bin) when Len > bit_size(Bin) ->
- <<Bin/bitstring,0:(Len-bit_size(Bin))>>;
-adjust_trailing_zeros(Len,Bin) ->
- <<Bin:Len/bitstring>>.
-
-bitstr_trailing_zeros(BitList, C) when is_integer(C) ->
- bitstr_trailing_zeros1(BitList, C, C);
-bitstr_trailing_zeros(BitList, {Lb,Ub}) when is_integer(Lb) ->
- bitstr_trailing_zeros1(BitList,Lb,Ub);
-bitstr_trailing_zeros(BitList, {{Lb,Ub},_}) when is_integer(Lb) ->
- bitstr_trailing_zeros1(BitList, Lb, Ub);
-bitstr_trailing_zeros(BitList, _) ->
- bit_list2bitstr(length(BitList), BitList).
-
-bitstr_trailing_zeros1(BitList, Lb, Ub) ->
- case length(BitList) of
- Lb -> bit_list2bitstr(Lb, BitList);
- B when B < Lb -> bit_list2bitstr(Lb, BitList);
- D -> F = fun(L,LB,LB,_,_)->bit_list2bitstr(LB,lists:reverse(L));
- ([0|R],L1,LB,UB,Fun)->Fun(R,L1-1,LB,UB,Fun);
- (L,L1,_,UB,_)when L1 =< UB ->
- bit_list2bitstr(L1,lists:reverse(L));
- (_,_L1,_,_,_) ->exit({error,{list_length_BIT_STRING,
- BitList}}) end,
- F(lists:reverse(BitList),D,Lb,Ub,F)
- end.
-
-%% encode_bin_bit_string/3, when value is a tuple of Unused and BinBits.
-%% Unused = integer(),i.e. number unused bits in least sign. byte of
-%% BinBits = binary().
-encode_bin_bit_string(C, {_,BinBits}, _NamedBitList)
- when is_integer(C), C =< 16 ->
- adjust_trailing_zeros(C, BinBits);
-encode_bin_bit_string(C, {_Unused,BinBits}, _NamedBitList)
- when is_integer(C) ->
- adjust_trailing_zeros(C, BinBits);
-encode_bin_bit_string(C, {_,_}=UnusedAndBin, NamedBitList) ->
- %% removes all trailing bits if NamedBitList is not empty
- BitStr = remove_trailing_bin(NamedBitList, UnusedAndBin),
- case C of
- {Lb,Ub} when is_integer(Lb),is_integer(Ub) ->
- [encode_length({Lb,Ub},bit_size(BitStr)),BitStr];
- no ->
- [encode_length(bit_size(BitStr)),BitStr];
- Sc ->
- [encode_length(Sc,bit_size(BitStr)),BitStr]
- end.
-
-
-remove_trailing_bin([], {Unused,Bin}) ->
- BS = bit_size(Bin)-Unused,
- <<BitStr:BS/bitstring,_:Unused>> = Bin,
- BitStr;
-remove_trailing_bin(_NamedNumberList, {_Unused,<<>>}) ->
- <<>>;
-remove_trailing_bin(NamedNumberList, {_Unused,Bin}) ->
- Size = byte_size(Bin)-1,
- <<Bfront:Size/binary, LastByte:8>> = Bin,
-
- %% clear the Unused bits to be sure
- Unused1 = trailingZeroesInNibble(LastByte band 15),
- Unused2 =
- case Unused1 of
- 4 ->
- 4 + trailingZeroesInNibble(LastByte bsr 4);
- _ -> Unused1
- end,
- case Unused2 of
- 8 ->
- remove_trailing_bin(NamedNumberList,{0,Bfront});
- _ ->
- BS = bit_size(Bin) - Unused2,
- <<BitStr:BS/bitstring,_:Unused2>> = Bin,
- BitStr
- end.
-
-trailingZeroesInNibble(0) ->
- 4;
-trailingZeroesInNibble(1) ->
- 0;
-trailingZeroesInNibble(2) ->
- 1;
-trailingZeroesInNibble(3) ->
- 0;
-trailingZeroesInNibble(4) ->
- 2;
-trailingZeroesInNibble(5) ->
- 0;
-trailingZeroesInNibble(6) ->
- 1;
-trailingZeroesInNibble(7) ->
- 0;
-trailingZeroesInNibble(8) ->
- 3;
-trailingZeroesInNibble(9) ->
- 0;
-trailingZeroesInNibble(10) ->
- 1;
-trailingZeroesInNibble(11) ->
- 0;
-trailingZeroesInNibble(12) -> %#1100
- 2;
-trailingZeroesInNibble(13) ->
- 0;
-trailingZeroesInNibble(14) ->
- 1;
-trailingZeroesInNibble(15) ->
- 0.
-
-
-%%%%%%%%%%%%%%%
-%%
-
-int_to_bitlist(Int) when is_integer(Int), Int > 0 ->
- [Int band 1 | int_to_bitlist(Int bsr 1)];
-int_to_bitlist(0) ->
- [].
-
-
-%%%%%%%%%%%%%%%%%%
-%% get_all_bitposes([list of named bits to set], named_bit_db, []) ->
-%% [sorted_list_of_bitpositions_to_set]
-
-get_all_bitposes([{bit,ValPos}|Rest], NamedBitList, Ack) ->
- get_all_bitposes(Rest, NamedBitList, [ValPos | Ack ]);
-
-get_all_bitposes([Val | Rest], NamedBitList, Ack) ->
- case lists:keyfind(Val, 1, NamedBitList) of
- {_ValName, ValPos} ->
- get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]);
- false ->
- exit({error,{asn1, {bitstring_namedbit, Val}}})
- end;
-get_all_bitposes([], _NamedBitList, Ack) ->
- lists:sort(Ack).
-
-%%%%%%%%%%%%%%%%%%
-%% make_and_set_list([list of positions to set to 1])->
-%% returns list with all in SetPos set.
-%% in positioning in list the first element is 0, the second 1 etc.., but
-%%
-
-make_and_set_list([XPos|SetPos], XPos) ->
- [1 | make_and_set_list(SetPos, XPos + 1)];
-make_and_set_list([Pos|SetPos], XPos) ->
- [0 | make_and_set_list([Pos | SetPos], XPos + 1)];
-make_and_set_list([], _) ->
- [].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% X.691:16
-%% encode_octet_string(Val)
-%% encode_octet_string(Constraint, Val)
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-encode_octet_string(Val) ->
- try
- [encode_length(length(Val)),list_to_binary(Val)]
- catch
- error:{error,{asn1,{encode_length,_}}} ->
- encode_fragmented_octet_string(Val)
- end.
-
-encode_octet_string(C, Val) ->
- case C of
- {_,_}=VR ->
- try
- [encode_length(VR, length(Val)),list_to_binary(Val)]
- catch
- error:{error,{asn1,{encode_length,_}}} ->
- encode_fragmented_octet_string(Val)
- end;
- Sv when is_integer(Sv), Sv =:= length(Val) -> % fixed length
- list_to_binary(Val)
- end.
-
-
-encode_fragmented_octet_string(Val) ->
- Bin = list_to_binary(Val),
- efos_1(Bin).
-
-efos_1(<<B:16#10000/binary,T/binary>>) ->
- [<<3:2,4:6>>,B|efos_1(T)];
-efos_1(<<B:16#C000/binary,T/binary>>) ->
- [<<3:2,3:6>>,B|efos_1(T)];
-efos_1(<<B:16#8000/binary,T/binary>>) ->
- [<<3:2,2:6>>,B|efos_1(T)];
-efos_1(<<B:16#4000/binary,T/binary>>) ->
- [<<3:2,1:6>>,B|efos_1(T)];
-efos_1(<<B/bitstring>>) ->
- Len = byte_size(B),
- [encode_length(Len),B].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Restricted char string types
-%% (NumericString, PrintableString,VisibleString,IA5String,BMPString,UniversalString)
-%% X.691:26 and X.680:34-36
-%%encode_restricted_string('BMPString',Constraints,Extension,Val)
-
-
-encode_restricted_string(Val) when is_list(Val)->
- [encode_length(length(Val)),list_to_binary(Val)].
-
-encode_known_multiplier_string(StringType, C, Pa, Val) ->
- Result = chars_encode(Pa, StringType, Val),
- case C of
- Ub when is_integer(Ub) ->
- Result;
- {_,_}=Range ->
- [encode_length(Range, length(Val)),Result];
- no ->
- [encode_length(length(Val)),Result]
- end.
-
-encode_NumericString(C, Pa, Val) ->
- encode_known_multiplier_string('NumericString', C, Pa, Val).
-
-encode_PrintableString(C, Pa, Val) ->
- encode_known_multiplier_string('PrintableString', C, Pa, Val).
-
-encode_VisibleString(C, Pa, Val) -> % equivalent with ISO646String
- encode_known_multiplier_string('VisibleString', C, Pa, Val).
-
-encode_IA5String(C, Pa, Val) ->
- encode_known_multiplier_string('IA5String', C, Pa, Val).
-
-encode_BMPString(C, Pa, Val) ->
- encode_known_multiplier_string('BMPString', C, Pa, Val).
-
-encode_UniversalString(C, Pa, Val) ->
- encode_known_multiplier_string('UniversalString', C, Pa, Val).
-
-
-%% end of known-multiplier strings for which PER visible constraints are
-%% applied
-
-encode_GeneralString(_C,Val) ->
- encode_restricted_string(Val).
-
-encode_GraphicString(_C,Val) ->
- encode_restricted_string(Val).
-
-encode_ObjectDescriptor(_C,Val) ->
- encode_restricted_string(Val).
-
-encode_TeletexString(_C,Val) -> % equivalent with T61String
- encode_restricted_string(Val).
-
-encode_VideotexString(_C,Val) ->
- encode_restricted_string(Val).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% chars_encode(C,StringType,Value) -> ValueList
-%%
-%% encodes chars according to the per rules taking the constraint PermittedAlphabet
-%% into account.
-%% This function does only encode the value part and NOT the length
-
-chars_encode(Pa, StringType, Value) ->
- case {StringType,Pa} of
- {'UniversalString',{_,_Sv}} ->
- exit({error,{asn1,{'not implemented',"UniversalString with PermittedAlphabet constraint"}}});
- {'BMPString',{_,_Sv}} ->
- exit({error,{asn1,{'not implemented',"BMPString with PermittedAlphabet constraint"}}});
- _ ->
- {NumBits,CharOutTab} = {get_NumBits(Pa, StringType),
- get_CharOutTab(Pa, StringType)},
- chars_encode2(Value,NumBits,CharOutTab)
- end.
-
-chars_encode2([H|T],NumBits,{Min,Max,notab}) when H =< Max, H >= Min ->
- [<<(H-Min):NumBits>>|chars_encode2(T,NumBits,{Min,Max,notab})];
-chars_encode2([H|T],NumBits,{Min,Max,Tab}) when H =< Max, H >= Min ->
- Ch = exit_if_false(H,element(H-Min+1,Tab)),
- [<<Ch:NumBits>>|chars_encode2(T,NumBits,{Min,Max,Tab})];
-chars_encode2([{A,B,C,D}|T],NumBits,{Min,Max,notab}) ->
- %% no value range check here (ought to be, but very expensive)
- Ch = ((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min,
- [<<Ch:NumBits>>|chars_encode2(T,NumBits,{Min,Max,notab})];
-chars_encode2([{A,B,C,D}|T],NumBits,{Min,Max,Tab}) ->
- %% no value range check here (ought to be, but very expensive)
- Ch = exit_if_false({A,B,C,D},element(((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min,Tab)),
- [<<Ch:NumBits>>|chars_encode2(T,NumBits,{Min,Max,notab})];
-chars_encode2([H|_T],_,{_,_,_}) ->
- exit({error,{asn1,{illegal_char_value,H}}});
-chars_encode2([],_,_) ->
- [].
-
-exit_if_false(V,false)->
- exit({error,{asn1,{"illegal value according to Permitted alphabet constraint",V}}});
-exit_if_false(_,V) ->V.
-
-
-get_NumBits(Pa, StringType) ->
- case Pa of
- {'SingleValue',Sv} ->
- charbits(length(Sv));
- no ->
- case StringType of
- 'IA5String' ->
- charbits(128); % 16#00..16#7F
- 'VisibleString' ->
- charbits(95); % 16#20..16#7E
- 'PrintableString' ->
- charbits(74); % [$\s,$',$(,$),$+,$,,$-,$.,$/,"0123456789",$:,$=,$?,$A..$Z,$a..$z
- 'NumericString' ->
- charbits(11); % $ ,"0123456789"
- 'UniversalString' ->
- 32;
- 'BMPString' ->
- 16
- end
- end.
-
-get_CharOutTab(Pa, StringType) ->
- case Pa of
- {'SingleValue',Sv} ->
- get_CharTab2(Pa, StringType, hd(Sv), lists:max(Sv), Sv);
- no ->
- case StringType of
- 'IA5String' ->
- {0,16#7F,notab};
- 'VisibleString' ->
- get_CharTab2(Pa, StringType, 16#20, 16#7F, notab);
- 'PrintableString' ->
- Chars = lists:sort(
- " '()+,-./0123456789:=?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"),
- get_CharTab2(Pa, StringType, hd(Chars),
- lists:max(Chars), Chars);
- 'NumericString' ->
- get_CharTab2(Pa, StringType, 16#20, $9, " 0123456789");
- 'UniversalString' ->
- {0,16#FFFFFFFF,notab};
- 'BMPString' ->
- {0,16#FFFF,notab}
- end
- end.
-
-get_CharTab2(C,StringType,Min,Max,Chars) ->
- BitValMax = (1 bsl get_NumBits(C,StringType))-1,
- if
- Max =< BitValMax ->
- {0,Max,notab};
- true ->
- {Min,Max,create_char_tab(Min,Chars)}
- end.
-
-create_char_tab(Min,L) ->
- list_to_tuple(create_char_tab(Min,L,0)).
-create_char_tab(Min,[Min|T],V) ->
- [V|create_char_tab(Min+1,T,V+1)];
-create_char_tab(_Min,[],_V) ->
- [];
-create_char_tab(Min,L,V) ->
- [false|create_char_tab(Min+1,L,V)].
-
-%% See Table 20.3 in Dubuisson
-charbits(NumOfChars) when NumOfChars =< 2 -> 1;
-charbits(NumOfChars) when NumOfChars =< 4 -> 2;
-charbits(NumOfChars) when NumOfChars =< 8 -> 3;
-charbits(NumOfChars) when NumOfChars =< 16 -> 4;
-charbits(NumOfChars) when NumOfChars =< 32 -> 5;
-charbits(NumOfChars) when NumOfChars =< 64 -> 6;
-charbits(NumOfChars) when NumOfChars =< 128 -> 7;
-charbits(NumOfChars) when NumOfChars =< 256 -> 8;
-charbits(NumOfChars) when NumOfChars =< 512 -> 9;
-charbits(NumOfChars) when NumOfChars =< 1024 -> 10;
-charbits(NumOfChars) when NumOfChars =< 2048 -> 11;
-charbits(NumOfChars) when NumOfChars =< 4096 -> 12;
-charbits(NumOfChars) when NumOfChars =< 8192 -> 13;
-charbits(NumOfChars) when NumOfChars =< 16384 -> 14;
-charbits(NumOfChars) when NumOfChars =< 32768 -> 15;
-charbits(NumOfChars) when NumOfChars =< 65536 -> 16;
-charbits(NumOfChars) when is_integer(NumOfChars) ->
- 16 + charbits1(NumOfChars bsr 16).
-
-charbits1(0) ->
- 0;
-charbits1(NumOfChars) ->
- 1 + charbits1(NumOfChars bsr 1).
-
-
-%% UTF8String
-encode_UTF8String(Val) when is_binary(Val) ->
- [encode_length(byte_size(Val)),Val];
-encode_UTF8String(Val) ->
- Bin = list_to_binary(Val),
- encode_UTF8String(Bin).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_object_identifier(Val) -> CompleteList
-%% encode_object_identifier({Name,Val}) -> CompleteList
-%% Val -> {Int1,Int2,...,IntN} % N >= 2
-%% Name -> atom()
-%% Int1 -> integer(0..2)
-%% Int2 -> integer(0..39) when Int1 (0..1) else integer()
-%% Int3-N -> integer()
-%% CompleteList -> [binary()|bitstring()|list()]
-%%
-encode_object_identifier(Val) ->
- OctetList = e_object_identifier(Val),
- Octets = list_to_binary(OctetList), % performs a flatten at the same time
- [encode_length(byte_size(Octets)),Octets].
-
-%% This code is copied from asn1_encode.erl (BER) and corrected and modified
-
-e_object_identifier({'OBJECT IDENTIFIER',V}) ->
- e_object_identifier(V);
-e_object_identifier(V) when is_tuple(V) ->
- e_object_identifier(tuple_to_list(V));
-
-%% E1 = 0|1|2 and (E2 < 40 when E1 = 0|1)
-e_object_identifier([E1,E2|Tail]) when E1 >= 0, E1 < 2, E2 < 40 ; E1==2 ->
- Head = 40*E1 + E2, % weird
- e_object_elements([Head|Tail],[]);
-e_object_identifier(Oid=[_,_|_Tail]) ->
- exit({error,{asn1,{'illegal_value',Oid}}}).
-
-e_object_elements([],Acc) ->
- lists:reverse(Acc);
-e_object_elements([H|T],Acc) ->
- e_object_elements(T,[e_object_element(H)|Acc]).
-
-e_object_element(Num) when Num < 128 ->
- [Num];
-e_object_element(Num) ->
- [e_o_e(Num bsr 7)|[Num band 2#1111111]].
-e_o_e(Num) when Num < 128 ->
- Num bor 2#10000000;
-e_o_e(Num) ->
- [e_o_e(Num bsr 7)|[(Num band 2#1111111) bor 2#10000000]].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% encode_relative_oid(Val) -> CompleteList
-%% encode_relative_oid({Name,Val}) -> CompleteList
-encode_relative_oid(Val) when is_tuple(Val) ->
- encode_relative_oid(tuple_to_list(Val));
-encode_relative_oid(Val) when is_list(Val) ->
- Octets = list_to_binary([e_object_element(X)||X <- Val]),
- [encode_length(byte_size(Octets)),Octets].
-
-
-get_constraint([{Key,V}],Key) ->
- V;
-get_constraint([],_Key) ->
- no;
-get_constraint(C,Key) ->
- case lists:keyfind(Key, 1, C) of
- false ->
- no;
- {_,V} ->
- V
- end.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% complete(InList) -> ByteList
%% Takes a coded list with bits and bytes and converts it to a list of bytes
%% Should be applied as the last step at encode of a complete ASN.1 type
%%
complete(InList) when is_list(InList) ->
- case complete1(InList) of
+ case list_to_bitstring(InList) of
<<>> ->
<<0>>;
Res ->
- case bit_size(Res) band 7 of
+ Sz = bit_size(Res),
+ case Sz band 7 of
0 -> Res;
- Bits -> <<Res/bitstring,0:(8-Bits)>>
+ Bits -> <<Res:Sz/bitstring,0:(8-Bits)>>
end
end;
complete(Bin) when is_binary(Bin) ->
@@ -950,24 +65,12 @@ complete(Bin) when is_binary(Bin) ->
_ -> Bin
end;
complete(InList) when is_bitstring(InList) ->
- PadLen = 8 - (bit_size(InList) band 7),
- <<InList/bitstring,0:PadLen>>.
-
-complete1(L) when is_list(L) ->
- list_to_bitstring(L).
+ Sz = bit_size(InList),
+ PadLen = 8 - (Sz band 7),
+ <<InList:Sz/bitstring,0:PadLen>>.
%% Special version of complete that does not align the completed message.
complete_NFP(InList) when is_list(InList) ->
list_to_bitstring(InList);
complete_NFP(InList) when is_bitstring(InList) ->
InList.
-
-%% unaligned helpers
-
-%% 10.5.6 NOTE: If "range" satisfies the inequality 2^m < "range" =<
-%% 2^(m+1) then the number of bits = m + 1
-
-num_bits(N) -> num_bits(N, 1, 0).
-
-num_bits(N,T,B) when N =< T -> B;
-num_bits(N,T,B) -> num_bits(N, T bsl 1, B+1).
diff --git a/lib/asn1/test/Makefile b/lib/asn1/test/Makefile
index 15b97df972..a3fa4f2968 100644
--- a/lib/asn1/test/Makefile
+++ b/lib/asn1/test/Makefile
@@ -82,6 +82,7 @@ MODULES= \
testInfObjectClass \
testInfObj \
testParameterizedInfObj \
+ testFragmented \
testMergeCompile \
testMultipleLevels \
testDeepTConstr \
diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl
index f00b23a8b2..9a149a495a 100644
--- a/lib/asn1/test/asn1_SUITE.erl
+++ b/lib/asn1/test/asn1_SUITE.erl
@@ -150,6 +150,7 @@ groups() ->
per_open_type,
testInfObjectClass,
testParameterizedInfObj,
+ testFragmented,
testMergeCompile,
testobj,
testDeepTConstr,
@@ -186,8 +187,7 @@ groups() ->
{performance, [],
[testTimer_ber,
testTimer_per,
- testTimer_uper,
- smp]}].
+ testTimer_uper]}].
parallel(Options) ->
case erlang:system_info(smp_support) andalso
@@ -360,7 +360,8 @@ testPrimStrings_cases(Rule) ->
testPrimStrings:universal_string(Rule),
testPrimStrings:bmp_string(Rule),
testPrimStrings:times(Rule),
- testPrimStrings:utf8_string(Rule).
+ testPrimStrings:utf8_string(Rule),
+ testPrimStrings:fragmented(Rule).
testPrimExternal(Config) -> test(Config, fun testPrimExternal/3).
testPrimExternal(Config, Rule, Opts) ->
@@ -452,7 +453,7 @@ testSeqDefault(Config, Rule, Opts) ->
asn1_test_lib:compile("SeqDefault", Config, [Rule|Opts]),
testSeqDefault:main(Rule).
-testSeqExtension(Config) -> test(Config, fun testSeqExtension/3).
+testSeqExtension(Config) -> test(Config, fun testSeqExtension/3, [ber,uper]).
testSeqExtension(Config, Rule, Opts) ->
asn1_test_lib:compile_all(["External",
"SeqExtension",
@@ -830,6 +831,12 @@ testParameterizedInfObj(Config, Rule, Opts) ->
asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
testParameterizedInfObj:main(Config, Rule).
+testFragmented(Config) ->
+ test(Config, fun testFragmented/3).
+testFragmented(Config, Rule, Opts) ->
+ asn1_test_lib:compile("Fragmented", Config, [Rule|Opts]),
+ testFragmented:main(Rule).
+
testMergeCompile(Config) -> test(Config, fun testMergeCompile/3).
testMergeCompile(Config, Rule, Opts) ->
Files = ["MS.set.asn", "RANAPSET.set.asn1", "Mvrasn4.set.asn",
@@ -1230,70 +1237,6 @@ ticket_7407(Config) ->
[uper, no_final_padding]),
asn1_test_lib:ticket_7407_code(false).
-smp(suite) -> [];
-smp(Config) ->
- case erlang:system_info(smp_support) of
- true ->
- NumOfProcs = erlang:system_info(schedulers),
- io:format("smp starting ~p workers\n",[NumOfProcs]),
-
- Msg = {initiatingMessage, testNBAPsystem:cell_setup_req_msg()},
- ok = testNBAPsystem:compile(Config, [per]),
-
- enc_dec(NumOfProcs,Msg,2),
-
- N = 10000,
-
- {Time1,ok} = timer:tc(?MODULE,enc_dec,[NumOfProcs,Msg, N]),
- {Time1S,ok} = timer:tc(?MODULE,enc_dec,[1, Msg, NumOfProcs * N]),
-
- ok = testNBAPsystem:compile(Config, [ber]),
- {Time3,ok} = timer:tc(?MODULE,enc_dec,[NumOfProcs,Msg, N]),
-
- {Time3S,ok} = timer:tc(?MODULE,enc_dec,[1, Msg, NumOfProcs * N]),
-
- {comment,lists:flatten(
- io_lib:format(
- "Encode/decode time parallell with ~p cores: ~p [microsecs]~n"
- "Encode/decode time sequential: ~p [microsecs]",
- [NumOfProcs,Time1+Time3,Time1S+Time3S]))};
- false ->
- {skipped,"No smp support"}
- end.
-
-enc_dec(1, Msg, N) ->
- worker_loop(N, Msg);
-enc_dec(NumOfProcs,Msg, N) ->
- pforeach(fun(_) ->
- worker_loop(N, Msg)
- end, [I || I <- lists:seq(1,NumOfProcs)]).
-
-worker_loop(0, _Msg) ->
- ok;
-worker_loop(N, Msg) ->
- {ok,B}=asn1_wrapper:encode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',
- Msg),
- {ok,_Msg}=asn1_wrapper:decode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',
- B),
- worker_loop(N - 1, Msg).
-
-
-pforeach(Fun, List) ->
- pforeach(Fun, List, []).
-pforeach(Fun, [], [{Pid,Ref}|Pids]) ->
- receive
- {'DOWN', Ref, process, Pid, normal} ->
- pforeach(Fun, [], Pids)
- end;
-pforeach(Fun, [H|T], Pids) ->
- Pid = spawn(fun() -> Fun(H) end),
- Ref = erlang:monitor(process, Pid),
- pforeach(Fun, T, [{Pid, Ref}|Pids]);
-pforeach(_Fun,[],[]) ->
- ok.
-
-record('InitiatingMessage',{procedureCode,criticality,value}).
-record('Iu-ReleaseCommand',{first,second}).
diff --git a/lib/asn1/test/asn1_SUITE_data/Fragmented.asn1 b/lib/asn1/test/asn1_SUITE_data/Fragmented.asn1
new file mode 100644
index 0000000000..bfc939737f
--- /dev/null
+++ b/lib/asn1/test/asn1_SUITE_data/Fragmented.asn1
@@ -0,0 +1,24 @@
+Fragmented DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+FUNCTION ::= CLASS {
+ &code INTEGER UNIQUE,
+ &b BOOLEAN,
+ &ArgumentType
+}
+
+SS ::= SEQUENCE OF OCTET STRING
+
+val1 FUNCTION ::= {
+ &code 1, &b FALSE, &ArgumentType SS
+}
+
+ObjSet FUNCTION ::= { val1 }
+
+PDU ::= SEQUENCE {
+ code FUNCTION.&code ({ObjSet}),
+ b FUNCTION.&b ({ObjSet}{@code}),
+ arg FUNCTION.&ArgumentType ({ObjSet}{@code})
+}
+
+END
diff --git a/lib/asn1/test/asn1_SUITE_data/InfObj.asn b/lib/asn1/test/asn1_SUITE_data/InfObj.asn
index 53e5043cb7..880e81c3b1 100644
--- a/lib/asn1/test/asn1_SUITE_data/InfObj.asn
+++ b/lib/asn1/test/asn1_SUITE_data/InfObj.asn
@@ -202,7 +202,11 @@ constructed2 CONSTRUCTED-DEFAULT ::= { &id 2, &ok false }
ConstructedDefaultSet CONSTRUCTED-DEFAULT ::= {
constructed1 |
constructed2 |
- { &id 3, &Type BOOLEAN }
+ { &id 3, &Type BOOLEAN } |
+ { &id 4, &Type SET { a INTEGER, b BIT STRING } } |
+ { &id 5, &Type CHOICE { i INTEGER, b BIT STRING } } |
+ { &id 6, &Type SEQUENCE OF INTEGER (1..16) } |
+ { &id 7, &Type SET OF INTEGER (1..64) }
}
ConstructedPdu ::= SEQUENCE {
@@ -210,6 +214,47 @@ ConstructedPdu ::= SEQUENCE {
content CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id})
}
+ConstructedSet ::= SET {
+ id [0] CONSTRUCTED-DEFAULT.&id ({ConstructedDefaultSet}),
+ content [1] CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id})
+}
+
+-- Test OPTIONAL and DEFAULT
+
+OptionalInSeq ::= SEQUENCE {
+ id CONSTRUCTED-DEFAULT.&id ({ConstructedDefaultSet}),
+ content CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id}) OPTIONAL
+}
+
+DefaultInSeq ::= SEQUENCE {
+ id CONSTRUCTED-DEFAULT.&id ({ConstructedDefaultSet}),
+ content CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id})
+ DEFAULT BOOLEAN:TRUE
+}
+
+-- Test more than one optional typefield table constraint in a SEQUENCE.
+
+MULTIPLE-OPTIONALS ::= CLASS {
+ &id INTEGER UNIQUE,
+ &T1,
+ &T2,
+ &T3
+}
+
+multiple-optionals-1 MULTIPLE-OPTIONALS ::=
+ {&id 1, &T1 INTEGER, &T2 BOOLEAN, &T3 OCTET STRING}
+
+Multiple-Optionals-Set MULTIPLE-OPTIONALS ::= {
+ multiple-optionals-1
+}
+
+Multiple-Optionals ::= SEQUENCE {
+ id MULTIPLE-OPTIONALS.&id ({Multiple-Optionals-Set}),
+ t1 [0] MULTIPLE-OPTIONALS.&T1 ({Multiple-Optionals-Set}{@id}) OPTIONAL,
+ t2 [1] MULTIPLE-OPTIONALS.&T2 ({Multiple-Optionals-Set}{@id}) OPTIONAL,
+ t3 [2] MULTIPLE-OPTIONALS.&T3 ({Multiple-Optionals-Set}{@id}) OPTIONAL
+}
+
END
diff --git a/lib/asn1/test/asn1_SUITE_data/Param.asn1 b/lib/asn1/test/asn1_SUITE_data/Param.asn1
index b2987a7885..4eff0da781 100644
--- a/lib/asn1/test/asn1_SUITE_data/Param.asn1
+++ b/lib/asn1/test/asn1_SUITE_data/Param.asn1
@@ -88,6 +88,28 @@ POS2 {CONFIG-DATA:obj} ::= OCTET STRING (SIZE(obj.&minLevel .. obj.&maxLevel))
OS2 ::= POS2 {config-data}
+--
+-- Test a CLASS without the user-friendly syntax.
+--
+
+CL ::= CLASS {
+ &code INTEGER UNIQUE,
+ &Data
+}
+
+P{T} ::= CHOICE { a INTEGER, b T }
+
+o1 CL ::= {
+ &code 42,
+ &Data P{BOOLEAN}
+}
+
+SetCL CL ::= { o1 }
+
+Scl ::= SEQUENCE {
+ code CL.&code ({SetCL}),
+ data CL.&Data ({SetCL}{@code})
+}
END
diff --git a/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1 b/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1
index 888dbe5dd7..670f827f5e 100644
--- a/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1
+++ b/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1
@@ -31,7 +31,43 @@ Seq4 ::= SEQUENCE
seq43 [43] SEQUENCE OF SeqIn DEFAULT {}
}
+Seq5 ::= SEQUENCE {
+ b BOOLEAN,
+ s SEQUENCE SIZE (0..3) OF OCTET STRING (SIZE (0..3)),
+ -- If 's' is empty, 'magic' should not be aligned.
+ magic INTEGER (0..127)
+}
+
+Seq6 ::= SEQUENCE {
+ a SEQUENCE OF INTEGER (0..7),
+ b SEQUENCE (SIZE (0..7)) OF INTEGER (0..7),
+ -- 'magic' should never be aligned.
+ magic INTEGER (0..127)
+}
+Seq7 ::= SEQUENCE {
+ a SEQUENCE OF INTEGER (1..512),
+ b SEQUENCE (SIZE (0..255)) OF INTEGER (1..512),
+ i INTEGER
+}
+
+Seq8 ::= SEQUENCE {
+ sof SEQUENCE (SIZE (0..3)) OF OCTET STRING (SIZE (3)),
+ -- Not aligned here if the size of 'sof' is zero.
+ i INTEGER (0..127)
+}
+
+Seq9 ::= SEQUENCE {
+ b BOOLEAN,
+ s SEQUENCE SIZE (0..3) OF OCTET STRING (SIZE (0..3)),
+ magic INTEGER (0..127)
+}
+
+Seq10 ::= SEQUENCE {
+ b BOOLEAN,
+ s SEQUENCE SIZE (1..3) OF OCTET STRING (SIZE (0..3)),
+ magic INTEGER (0..127)
+}
SeqIn ::= SEQUENCE
{
@@ -50,9 +86,6 @@ SeqCho ::= SEQUENCE OF CHOICE {bool BOOLEAN,
SeqOfInt ::= SEQUENCE OF INTEGER
-
-
-
SeqEmp ::= SEQUENCE
{
seq1 SEQUENCE OF Empty DEFAULT {}
diff --git a/lib/asn1/test/asn1_SUITE_data/TConstr.asn1 b/lib/asn1/test/asn1_SUITE_data/TConstr.asn1
index e2e0a11dc4..b2b2de2f56 100644
--- a/lib/asn1/test/asn1_SUITE_data/TConstr.asn1
+++ b/lib/asn1/test/asn1_SUITE_data/TConstr.asn1
@@ -58,6 +58,40 @@ Deeper ::= SEQUENCE {
b SEQUENCE {ba INTEGER, bb MYCLASS.&Type ({ObjectSet}{@a.s.ab})}
}
+Seq3 ::= SEQUENCE {
+ a SEQUENCE {
+ aa INTEGER,
+ ab MYCLASS.&id ({ObjectSet})
+ },
+ -- Multiple references from the same SEQUENCE...
+ b SEQUENCE {
+ ba MYCLASS.&Type ({ObjectSet}{@a.ab}),
+ bb MYCLASS.&Result ({ObjectSet}{@a.ab}),
+ -- ... and references from multiple SEQUENCEs...
+ bc SEQUENCE {
+ bca MYCLASS.&Result ({ObjectSet}{@a.ab}),
+ bcb MYCLASS.&Type ({ObjectSet}{@a.ab})
+ }
+ }
+}
+
+Seq3-Opt ::= SEQUENCE {
+ a SEQUENCE {
+ aa INTEGER,
+ ab MYCLASS.&id ({ObjectSet})
+ },
+ -- Multiple references from the same SEQUENCE...
+ b SEQUENCE {
+ ba MYCLASS.&Type ({ObjectSet}{@a.ab}) OPTIONAL,
+ bb MYCLASS.&Result ({ObjectSet}{@a.ab}) OPTIONAL,
+ -- ... and references from multiple SEQUENCEs...
+ bc SEQUENCE {
+ bca MYCLASS.&Result ({ObjectSet}{@a.ab}),
+ bcb MYCLASS.&Type ({ObjectSet}{@a.ab})
+ } OPTIONAL
+ }
+}
+
-- following from Peter's definitions
diff --git a/lib/asn1/test/error_SUITE.erl b/lib/asn1/test/error_SUITE.erl
index a94a6d95a0..6451f81c01 100644
--- a/lib/asn1/test/error_SUITE.erl
+++ b/lib/asn1/test/error_SUITE.erl
@@ -19,7 +19,7 @@
-module(error_SUITE).
-export([suite/0,all/0,groups/0,
- already_defined/1,enumerated/1]).
+ already_defined/1,enumerated/1,objects/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -30,7 +30,8 @@ all() ->
groups() ->
[{p,parallel(),[already_defined,
- enumerated]}].
+ enumerated,
+ objects]}].
parallel() ->
case erlang:system_info(schedulers) > 1 of
@@ -95,6 +96,48 @@ enumerated(Config) ->
} = run(P, Config),
ok.
+objects(Config) ->
+ M = 'Objects',
+ P = {M,
+ <<"Objects DEFINITIONS AUTOMATIC TAGS ::= BEGIN\n"
+ " obj1 CL ::= { &wrong 42 }\n"
+ " obj2 CL ::= { &wrong 1, &Wrong INTEGER }\n"
+ " obj3 CL ::= { &Data OCTET STRING }\n"
+ " obj4 SMALL ::= { &code 42 }\n"
+ " InvalidSet CL ::= { obj1 }\n"
+
+ " CL ::= CLASS {\n"
+ " &code INTEGER UNIQUE,\n"
+ " &enum ENUMERATED { a, b, c},\n"
+ " &Data,\n"
+ " &object CL,\n"
+ " &Set CL,\n"
+ " &vartypevalue &Data,\n"
+ " &VarTypeValue &Data\n"
+ " }\n"
+
+ " SMALL ::= CLASS {\n"
+ " &code INTEGER UNIQUE,\n"
+ " &i INTEGER\n"
+ " }\n"
+ "END\n">>},
+ {error,
+ [
+ {structured_error,{M,2},asn1ct_check,
+ {invalid_fields,[wrong],obj1}},
+ {structured_error,{M,3},asn1ct_check,
+ {invalid_fields,['Wrong',wrong],obj2}},
+ {structured_error,{M,4},asn1ct_check,
+ {missing_mandatory_fields,['Set','VarTypeValue',code,
+ enum,object,vartypevalue],obj3}},
+ {structured_error,{M,5},asn1ct_check,
+ {missing_mandatory_fields,[i],obj4}},
+ {structured_error,{M,6},asn1ct_check,
+ {invalid_fields,[wrong],'InvalidSet'}}
+ ]
+ } = run(P, Config),
+ ok.
+
run({Mod,Spec}, Config) ->
diff --git a/lib/asn1/test/testDeepTConstr.erl b/lib/asn1/test/testDeepTConstr.erl
index f17dedc043..620b5f3356 100644
--- a/lib/asn1/test/testDeepTConstr.erl
+++ b/lib/asn1/test/testDeepTConstr.erl
@@ -40,8 +40,7 @@ main(_Erule) ->
{any,"DK"},
{final,"NO"}]}},
- {ok,Bytes1} = 'TConstrChoice':encode('FilterItem', Val1),
- {error,Reason} = asn1_wrapper:decode('TConstrChoice','FilterItem',Bytes1),
+ Reason = must_fail('TConstrChoice', 'FilterItem', Val1),
io:format("Reason: ~p~n~n",[Reason]),
{ok,Bytes2} = 'TConstrChoice':encode('FilterItem', Val2),
{ok,Res} = 'TConstrChoice':decode('FilterItem', Bytes2),
@@ -70,6 +69,21 @@ main(_Erule) ->
{'Deeper_a',12,
{'Deeper_a_s',{2,4},42}},
{'Deeper_b',13,{'Type-object1',14,true}}}),
+
+ roundtrip('TConstr', 'Seq3',
+ {'Seq3',
+ {'Seq3_a',42,'TConstr':'id-object1'()},
+ {'Seq3_b',
+ {'Type-object1',-777,true},
+ 12345,
+ {'Seq3_b_bc',12345789,{'Type-object1',-999,true}}}}),
+ roundtrip('TConstr', 'Seq3-Opt',
+ {'Seq3-Opt',
+ {'Seq3-Opt_a',42,'TConstr':'id-object1'()},
+ {'Seq3-Opt_b',
+ {'Type-object1',-777,true},
+ 12345,
+ {'Seq3-Opt_b_bc',12345789,{'Type-object1',-999,true}}}}),
ok.
@@ -77,3 +91,13 @@ roundtrip(M, T, V) ->
{ok,E} = M:encode(T, V),
{ok,V} = M:decode(T, E),
ok.
+
+%% Either encoding or decoding must fail.
+must_fail(M, T, V) ->
+ case M:encode(T, V) of
+ {ok,E} ->
+ {error,Reason} = M:decode(T, E),
+ Reason;
+ {error,Reason} ->
+ Reason
+ end.
diff --git a/lib/asn1/test/testFragmented.erl b/lib/asn1/test/testFragmented.erl
new file mode 100644
index 0000000000..c391ba8305
--- /dev/null
+++ b/lib/asn1/test/testFragmented.erl
@@ -0,0 +1,42 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+-module(testFragmented).
+
+-export([main/1]).
+
+main(_Erule) ->
+ roundtrip('PDU', {'PDU',1,false,["abc","def"]}),
+ B256 = lists:seq(0, 255),
+ K1 = lists:duplicate(4, B256),
+ K8 = binary_to_list(iolist_to_binary(lists:duplicate(8, K1))),
+ roundtrip('PDU', {'PDU',1,false,[K8,K8]}),
+ roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8]}),
+ roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8]}),
+ roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8,K8,K8]}),
+ roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8,K8,K8,
+ K8,K8,K8,K8,K8,K8]}),
+ roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8,K8,K8,
+ K8,K8,K8,K8,K8,K8,K8,K8]}),
+ ok.
+
+roundtrip(T, V) ->
+ {ok,E} = 'Fragmented':encode(T, V),
+ {ok,V} = 'Fragmented':decode(T, E),
+ ok.
diff --git a/lib/asn1/test/testInfObj.erl b/lib/asn1/test/testInfObj.erl
index c7b19a0cbb..76f216fdad 100644
--- a/lib/asn1/test/testInfObj.erl
+++ b/lib/asn1/test/testInfObj.erl
@@ -59,13 +59,73 @@ main(_Erule) ->
{'ConstructedPdu',2,{'CONSTRUCTED-DEFAULT_Type',999,false}}),
roundtrip('InfObj', 'ConstructedPdu',
{'ConstructedPdu',3,true}),
+ {'ConstructedPdu',4,{_,42,<<13:7>>}} =
+ enc_dec('InfObj', 'ConstructedPdu',
+ {'ConstructedPdu',4,{'',42,<<13:7>>}}),
+ roundtrip('InfObj', 'ConstructedPdu',
+ {'ConstructedPdu',5,{i,-250138}}),
+ roundtrip('InfObj', 'ConstructedPdu',
+ {'ConstructedPdu',5,{b,<<13456:15>>}}),
+ roundtrip('InfObj', 'ConstructedPdu',
+ {'ConstructedPdu',6,[]}),
+ roundtrip('InfObj', 'ConstructedPdu',
+ {'ConstructedPdu',6,[10,7,16,1,5,13,12]}),
+ roundtrip('InfObj', 'ConstructedPdu',
+ {'ConstructedPdu',7,[]}),
+ roundtrip('InfObj', 'ConstructedPdu',
+ {'ConstructedPdu',7,[64,1,19,17,35]}),
+
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',1,{'CONSTRUCTED-DEFAULT_Type',-2001,true}}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',2,{'CONSTRUCTED-DEFAULT_Type',999,false}}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',3,true}),
+ {'ConstructedSet',4,{_,42,<<13:7>>}} =
+ enc_dec('InfObj', 'ConstructedSet',
+ {'ConstructedSet',4,{'',42,<<13:7>>}}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',5,{i,-250138}}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',5,{b,<<13456:15>>}}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',6,[]}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',6,[10,7,16,1,5,13,12]}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',7,[]}),
+ roundtrip('InfObj', 'ConstructedSet',
+ {'ConstructedSet',7,[64,1,19,17,35]}),
roundtrip('InfObj', 'Seq2',
{'Seq2',42,[true,false,false,true],
- [false,true,false]}).
+ [false,true,false]}),
+
+ roundtrip('InfObj', 'OptionalInSeq', {'OptionalInSeq',3,true}),
+ roundtrip('InfObj', 'OptionalInSeq', {'OptionalInSeq',3,asn1_NOVALUE}),
+
+ roundtrip('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,false}),
+ roundtrip('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,true}),
+ {'DefaultInSeq',3,true} =
+ enc_dec('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,asn1_DEFAULT}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,42,true,"abc"}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,asn1_NOVALUE,true,"abc"}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,42,asn1_NOVALUE,"abc"}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,42,true,asn1_NOVALUE}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}).
roundtrip(M, T, V) ->
{ok,Enc} = M:encode(T, V),
{ok,V} = M:decode(T, Enc),
ok.
+
+enc_dec(M, T, V0) ->
+ {ok,Enc} = M:encode(T, V0),
+ {ok,V} = M:decode(T, Enc),
+ V.
diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl
index 1dfa52f401..02847e502b 100644
--- a/lib/asn1/test/testParameterizedInfObj.erl
+++ b/lib/asn1/test/testParameterizedInfObj.erl
@@ -86,8 +86,18 @@ param(Erule) ->
asn1_wrapper:encode('Param','OS1',[1,2,3,4])
end,
+ roundtrip('Scl', {'Scl',42,{a,9738654}}),
+ roundtrip('Scl', {'Scl',42,{b,false}}),
+ roundtrip('Scl', {'Scl',42,{b,true}}),
+
+ ok.
+
+roundtrip(T, V) ->
+ {ok,Enc} = 'Param':encode(T, V),
+ {ok,V} = 'Param':decode(T, Enc),
ok.
+
ranap(_Erule) ->
PIEVal2 = [{'ProtocolIE-Field',4,ignore,{radioNetwork,'rab-pre-empted'}}],
?line Val2 =
diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl
index e2322c92a9..1762e34599 100644
--- a/lib/asn1/test/testPrimStrings.erl
+++ b/lib/asn1/test/testPrimStrings.erl
@@ -28,9 +28,46 @@
-export([bmp_string/1]).
-export([times/1]).
-export([utf8_string/1]).
+-export([fragmented/1]).
-include_lib("test_server/include/test_server.hrl").
+fragmented(Rules) ->
+ Lens = fragmented_lengths(),
+ fragmented_octet_string(Rules, Lens),
+ case Rules of
+ per ->
+ %% NYI.
+ ok;
+ _ ->
+ fragmented_strings(Lens)
+ end.
+
+fragmented_strings(Lens) ->
+ Types = ['Ns','Ps','Ps11','Vis','IA5'],
+ [fragmented_strings(Len, Types) || Len <- Lens],
+ ok.
+
+fragmented_strings(Len, Types) ->
+ Str = make_ns_value(Len),
+ [roundtrip(Type, Str) || Type <- Types],
+ ok.
+
+make_ns_value(0) -> [];
+make_ns_value(N) -> [($0 - 1) + random:uniform(10)|make_ns_value(N-1)].
+
+fragmented_lengths() ->
+ K16 = 1 bsl 14,
+ K32 = K16 + K16,
+ K48 = K32 + K16,
+ K64 = K48 + K16,
+ [0,1,14,15,16,17,127,128,
+ K16-1,K16,K16+1,K16+(1 bsl 7)-1,K16+(1 bsl 7),K16+(1 bsl 7)+1,
+ K32-1,K32,K32+1,K32+(1 bsl 7)-1,K32+(1 bsl 7),K32+(1 bsl 7)+1,
+ K48-1,K48,K48+1,K48+(1 bsl 7)-1,K48+(1 bsl 7),K48+(1 bsl 7)+1,
+ K64-1,K64,K64+1,K64+(1 bsl 7)-1,K64+(1 bsl 7),K64+(1 bsl 7)+1,
+ K64+K16-1,K64+K16,K64+K16+1].
+
bit_string(Rules) ->
%%==========================================================
@@ -311,8 +348,6 @@ octet_string(Rules) ->
ok
end,
- fragmented_octet_string(Rules),
-
S255 = lists:seq(1, 255),
Strings = {type,true,"","1","12","345",true,
S255,[$a|S255],[$a,$b|S255],397},
@@ -324,17 +359,7 @@ octet_string(Rules) ->
p_roundtrip('OsVarStringsExt', ShortenedStrings),
ok.
-fragmented_octet_string(Erules) ->
- K16 = 1 bsl 14,
- K32 = K16 + K16,
- K48 = K32 + K16,
- K64 = K48 + K16,
- Lens = [0,1,14,15,16,17,127,128,
- K16-1,K16,K16+1,K16+(1 bsl 7)-1,K16+(1 bsl 7),K16+(1 bsl 7)+1,
- K32-1,K32,K32+1,K32+(1 bsl 7)-1,K32+(1 bsl 7),K32+(1 bsl 7)+1,
- K48-1,K48,K48+1,K48+(1 bsl 7)-1,K48+(1 bsl 7),K48+(1 bsl 7)+1,
- K64-1,K64,K64+1,K64+(1 bsl 7)-1,K64+(1 bsl 7),K64+(1 bsl 7)+1,
- K64+K16-1,K64+K16,K64+K16+1],
+fragmented_octet_string(Erules, Lens) ->
Types = ['Os','OsFrag','OsFragExt'],
[fragmented_octet_string(Erules, Types, L) || L <- Lens],
fragmented_octet_string(Erules, ['FixedOs65536'], 65536),
diff --git a/lib/asn1/test/testSeqOf.erl b/lib/asn1/test/testSeqOf.erl
index db537b1478..c50cc27f6f 100644
--- a/lib/asn1/test/testSeqOf.erl
+++ b/lib/asn1/test/testSeqOf.erl
@@ -83,6 +83,32 @@ main(_Rules) ->
roundtrip('Seq4', #'Seq4'{seq43=SeqIn3},
#'Seq4'{seq41=[],seq42=[],
seq43=SeqIn3}),
+
+ roundtrip('Seq5', {'Seq5',true,[],77}),
+ roundtrip('Seq5', {'Seq5',true,[""],77}),
+ roundtrip('Seq5', {'Seq5',true,["a"],77}),
+ roundtrip('Seq5', {'Seq5',true,["ab"],77}),
+ roundtrip('Seq5', {'Seq5',true,["abc"],77}),
+
+ roundtrip('Seq6', {'Seq6',[],[],101}),
+ roundtrip('Seq6', {'Seq6',[],[7],101}),
+ roundtrip('Seq6', {'Seq6',[],[1,7],101}),
+ roundtrip('Seq6', {'Seq6',[1],[],101}),
+ roundtrip('Seq6', {'Seq6',[2],[7],101}),
+ roundtrip('Seq6', {'Seq6',[3],[1,7],101}),
+
+ roundtrip('Seq8', {'Seq8',[],37}),
+
+ roundtrip('Seq9', {'Seq9',true,[],97}),
+ roundtrip('Seq9', {'Seq9',true,[""],97}),
+ roundtrip('Seq9', {'Seq9',true,["x"],97}),
+ roundtrip('Seq9', {'Seq9',true,["xy"],97}),
+ roundtrip('Seq9', {'Seq9',true,["xyz"],97}),
+
+ roundtrip('Seq10', {'Seq10',true,[""],97}),
+ roundtrip('Seq10', {'Seq10',true,["a"],97}),
+ roundtrip('Seq10', {'Seq10',true,["a","b"],97}),
+ roundtrip('Seq10', {'Seq10',true,["a","b","c"],97}),
roundtrip('SeqEmp', #'SeqEmp'{seq1=[#'Empty'{}]}),
diff --git a/lib/asn1/vsn.mk b/lib/asn1/vsn.mk
index b75de179dc..0861fc2681 100644
--- a/lib/asn1/vsn.mk
+++ b/lib/asn1/vsn.mk
@@ -1,2 +1,2 @@
#next version number to use is 2.0
-ASN1_VSN = 2.0.2
+ASN1_VSN = 2.0.3
diff --git a/lib/common_test/doc/src/common_test_app.xml b/lib/common_test/doc/src/common_test_app.xml
index 84adbb5723..ea4522c40b 100644
--- a/lib/common_test/doc/src/common_test_app.xml
+++ b/lib/common_test/doc/src/common_test_app.xml
@@ -99,11 +99,11 @@
be executed by Common Test. A test case is represented by an atom,
the name of the test case function. A test case group is
represented by a <c>group</c> tuple, where <c>GroupName</c>,
- an atom, is the name of the group (defined in <c><seealso marker="#Module:groups-0">groups/0</seealso></c>).
+ an atom, is the name of the group (defined in <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>).
Execution properties for groups may also be specified, both
for a top level group and for any of its sub-groups.
Group execution properties specified here, will override
- properties in the group definition (see <c><seealso marker="#Module:groups-0">groups/0</seealso></c>).
+ properties in the group definition (see <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>).
(With value <c>default</c>, the group definition properties
will be used).</p>
@@ -186,8 +186,8 @@
test cases in the suite).</p>
<p>The <c>timetrap</c> tag sets the maximum time each
- test case is allowed to execute (including <c><seealso marker="#Module:init_per_testcase-2">init_per_testcase/2</seealso></c>
- and <c><seealso marker="#Module:end_per_testcase-2">end_per_testcase/2</seealso></c>). If the timetrap time is
+ test case is allowed to execute (including <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>). If the timetrap time is
exceeded, the test case fails with reason
<c>timetrap_timeout</c>. A <c>TimeFunc</c> function can be used to
set a new timetrap by returning a <c>TimeVal</c>. It may also be
@@ -203,11 +203,11 @@
in any of the configuration files, all test cases are skipped. For more
information about the 'require' functionality, see the
reference manual for the function
- <c><seealso marker="ct#require-1">ct:require/1/2</seealso></c>.</p>
+ <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.</p>
<p>With <c>userdata</c>, it is possible for the user to
specify arbitrary test suite related information which can be
- read by calling <c><seealso marker="ct#userdata-2">ct:userdata/2</seealso></c>.</p>
+ read by calling <seealso marker="ct#userdata-2"><c>ct:userdata/2</c></seealso>.</p>
<p>The <c>ct_hooks</c> tag specifies which
<seealso marker="ct_hooks_chapter">Common Test Hooks</seealso>
@@ -266,7 +266,7 @@
<p>This function is called as the last test case in the
suite. It is meant to be used for cleaning up after
- <c><seealso marker="#Module:init_per_suite-1">init_per_suite/1</seealso></c>.
+ <seealso marker="#Module:init_per_suite-1"><c>init_per_suite/1</c></seealso>.
For information on <c>save_config</c>, please see
<seealso marker="dependencies_chapter#save_config">Dependencies
between Test Cases and Suites</seealso> in the User's Guide.</p>
@@ -313,13 +313,13 @@
return a list of tagged tuples that specify various properties
related to the execution of a test case group (i.e. its test cases
and sub-groups). Properties set by
- <c><seealso marker="#Module:group-1">group/1</seealso></c> override
+ <seealso marker="#Module:group-1"><c>group/1</c></seealso> override
properties with the same key that have been previously set by
- <c><seealso marker="#Module:suite-0">suite/0</seealso></c>.</p>
+ <seealso marker="#Module:suite-0"><c>suite/0</c></seealso>.</p>
<p>The <c>timetrap</c> tag sets the maximum time each
- test case is allowed to execute (including <c><seealso marker="#Module:init_per_testcase-2">init_per_testcase/2</seealso></c>
- and <c><seealso marker="#Module:end_per_testcase-2">end_per_testcase/2</seealso></c>). If the timetrap time is
+ test case is allowed to execute (including <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>). If the timetrap time is
exceeded, the test case fails with reason
<c>timetrap_timeout</c>. A <c>TimeFunc</c> function can be used to
set a new timetrap by returning a <c>TimeVal</c>. It may also be
@@ -334,11 +334,11 @@
in any of the configuration files, all test cases in this group are skipped.
For more information about the 'require' functionality, see the
reference manual for the function
- <c><seealso marker="ct#require-1">ct:require/1/2</seealso></c>.</p>
+ <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.</p>
<p>With <c>userdata</c>, it is possible for the user to
specify arbitrary test case group related information which can be
- read by calling <c><seealso marker="ct#userdata-2">ct:userdata/2</seealso></c>.</p>
+ read by calling <seealso marker="ct#userdata-2"><c>ct:userdata/2</c></seealso>.</p>
<p>The <c>ct_hooks</c> tag specifies which
<seealso marker="ct_hooks_chapter">Common Test Hooks</seealso>
@@ -371,7 +371,7 @@
test case group. It typically contains initializations which are
common for all test cases and sub-groups in the group, and which
shall only be performed once. <c>GroupName</c> is the name of the
- group, as specified in the group definition (see <c><seealso marker="#Module:groups-0">groups/0</seealso></c>). The
+ group, as specified in the group definition (see <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>). The
<c>Config</c> parameter is the configuration data which can be modified
here. The return value of this function is given as <c>Config</c>
to all test cases and sub-groups in the group. If <c>{skip,Reason}</c>
@@ -400,10 +400,10 @@
<p> OPTIONAL </p>
<p>This function is called after the execution of a test case group is finished.
- It is meant to be used for cleaning up after <c><seealso marker="#Module:init_per_group-2">init_per_group/2</seealso></c>.
+ It is meant to be used for cleaning up after <seealso marker="#Module:init_per_group-2"><c>init_per_group/2</c></seealso>.
By means of <c>{return_group_result,Status}</c>, it is possible to return a
status value for a nested sub-group. The status can be retrieved in
- <c><seealso marker="#Module:end_per_group-2">end_per_group/2</seealso></c> for the group on the level above. The status will also
+ <seealso marker="#Module:end_per_group-2"><c>end_per_group/2</c></seealso> for the group on the level above. The status will also
be used by Common Test for deciding if execution of a group should proceed in
case the property <c>sequence</c> or <c>repeat_until_*</c> is set.</p>
@@ -454,7 +454,7 @@
<p> OPTIONAL </p>
<p> This function is called after each test case, and can be used
- to clean up after <c><seealso marker="#Module:init_per_testcase-2">init_per_testcase/2</seealso></c> and the test case.
+ to clean up after <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso> and the test case.
Any return value (besides <c>{fail,Reason}</c> and <c>{save_config,SaveConfig}</c>)
is ignored. By returning <c>{fail,Reason}</c>, <c>TestCase</c> will be marked as
failed (even though it was actually successful in the sense that it returned
@@ -496,15 +496,15 @@
<p>This is the test case info function. It is supposed to
return a list of tagged tuples that specify various properties
related to the execution of this particular test case.
- Properties set by <c><seealso marker="#Module:Testcase-0">Testcase/0</seealso></c> override
+ Properties set by <seealso marker="#Module:Testcase-0"><c>Testcase/0</c></seealso> override
properties that have been previously set for the test case
- by <c><seealso marker="#Module:group-1">group/1</seealso></c> or <c><seealso marker="#Module:suite-0">suite/0</seealso></c>.</p>
+ by <seealso marker="#Module:group-1"><c>group/1</c></seealso> or <seealso marker="#Module:suite-0"><c>suite/0</c></seealso>.</p>
<p>The <c>timetrap</c> tag sets the maximum time the
test case is allowed to execute. If the timetrap time is
exceeded, the test case fails with reason
- <c>timetrap_timeout</c>. <c><seealso marker="#Module:init_per_testcase-2">init_per_testcase/2</seealso></c>
- and <c><seealso marker="#Module:end_per_testcase-2">end_per_testcase/2</seealso></c> are included in the
+ <c>timetrap_timeout</c>. <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso> are included in the
timetrap time. A <c>TimeFunc</c> function can be used to
set a new timetrap by returning a <c>TimeVal</c>. It may also be
used to trigger a timetrap timeout by, at some point, returning a
@@ -518,15 +518,15 @@
configuration files, the test case is skipped. For more
information about the 'require' functionality, see the
reference manual for the function
- <c><seealso marker="ct#require-1">ct:require/1/2</seealso></c>.</p>
+ <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.</p>
<p>If <c>timetrap</c> and/or <c>require</c> is not set, the
- default values specified by <c><seealso marker="#Module:suite-0">suite/0</seealso></c> (or
- <c><seealso marker="#Module:group-1">group/1</seealso></c>) will be used.</p>
+ default values specified by <seealso marker="#Module:suite-0"><c>suite/0</c></seealso> (or
+ <seealso marker="#Module:group-1"><c>group/1</c></seealso>) will be used.</p>
<p>With <c>userdata</c>, it is possible for the user to
specify arbitrary test case related information which can be
- read by calling <c><seealso marker="ct#userdata-3">ct:userdata/3</seealso></c>.</p>
+ read by calling <seealso marker="ct#userdata-3"><c>ct:userdata/3</c></seealso>.</p>
<p>Other tuples than the ones defined will simply be ignored.</p>
@@ -554,7 +554,7 @@
<p>This is the implementation of a test case. Here you must
call the functions you want to test, and do whatever you
need to check the result. If something fails, make sure the
- function causes a runtime error, or call <c><seealso marker="ct#fail-1">ct:fail/1/2</seealso></c>
+ function causes a runtime error, or call <seealso marker="ct#fail-1"><c>ct:fail/1/2</c></seealso>
(which also causes the test case process to terminate).</p>
<p>Elements from the <c>Config</c> list can e.g. be read
@@ -582,7 +582,7 @@
Test Cases and Suites</seealso> in the User's Guide.</p>
</desc>
</func>
-
+
</funcs>
</erlref>
diff --git a/lib/common_test/doc/src/config_file_chapter.xml b/lib/common_test/doc/src/config_file_chapter.xml
index 1849c17bb8..d3068db17b 100644
--- a/lib/common_test/doc/src/config_file_chapter.xml
+++ b/lib/common_test/doc/src/config_file_chapter.xml
@@ -80,7 +80,7 @@
test is skipped (unless a default value has been specified, see the
<seealso marker="write_test_chapter#info_function">test case info
function</seealso> chapter for details). There is also a function
- <c><seealso marker="ct#require-1">ct:require/1/2</seealso></c> which can be called from a test case
+ <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso> which can be called from a test case
in order to check if a specific variable is available. The return
value from this function must be checked explicitly and appropriate
action be taken depending on the result (e.g. to skip the test case
@@ -90,7 +90,7 @@
info-list should look like this:
<c>{require,CfgVarName}</c> or <c>{require,AliasName,CfgVarName}</c>.
The arguments <c>AliasName</c> and <c>CfgVarName</c> are the same as the
- arguments to <c><seealso marker="ct#require-1">ct:require/1/2</seealso></c> which are described in the
+ arguments to <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso> which are described in the
reference manual for <seealso marker="ct">ct</seealso>.
<c>AliasName</c> becomes an alias for the configuration variable,
and can be used as reference to the configuration data value.
@@ -103,7 +103,7 @@
(or test case) and improve readability.</item>
</list>
<p>To read the value of a config variable, use the function
- <c><seealso marker="ct#get_config-1">get_config/1/2/3</seealso></c>
+ <seealso marker="ct#get_config-1"><c>get_config/1/2/3</c></seealso>
which is also described in the reference
manual for <seealso marker="ct">ct</seealso>.</p>
<p>Example:</p>
@@ -121,7 +121,7 @@
<section>
<title>Using configuration variables defined in multiple files</title>
<p>If a configuration variable is defined in multiple files and you
- want to access all possible values, you may use the <c><seealso marker="ct#get_config-3">ct:get_config/3</seealso></c>
+ want to access all possible values, you may use the <seealso marker="ct#get_config-3"><c>ct:get_config/3</c></seealso>
function and specify <c>all</c> in the options list. The values will then
be returned in a list and the order of the elements corresponds to the order
that the config files were specified at startup. Please see
@@ -133,7 +133,7 @@
<marker id="encrypted_config_files"></marker>
<p>It is possible to encrypt configuration files containing sensitive data
if these files must be stored in open and shared directories.</p>
- <p>Call <c><seealso marker="ct#encrypt_config_file-2">ct:encrypt_config_file/2/3</seealso></c> to have Common Test encrypt a
+ <p>Call <seealso marker="ct#encrypt_config_file-2"><c>ct:encrypt_config_file/2/3</c></seealso> to have Common Test encrypt a
specified file using the DES3 function in the OTP <c>crypto</c> application.
The encrypted file can then be used as a regular configuration file,
in combination with other encrypted files or normal text files. The key
@@ -142,7 +142,7 @@
<c>decrypt_file</c> flag/option, or a key file in a predefined location.</p>
<p>Common Test also provides decryption functions,
- <c><seealso marker="ct#decrypt_config_file-2">ct:decrypt_config_file/2/3</seealso></c>, for recreating the original text
+ <seealso marker="ct#decrypt_config_file-2"><c>ct:decrypt_config_file/2/3</c></seealso>, for recreating the original text
files.</p>
<p>Please see the <seealso marker="ct">ct</seealso> reference manual for
@@ -152,8 +152,8 @@
<section>
<title>Opening connections by using configuration data</title>
<p>There are two different methods for opening a connection
- by means of the support functions in e.g. <c><seealso marker="ct_ssh">ct_ssh</seealso></c>, <c><seealso marker="ct_ftp">ct_ftp</seealso></c>,
- and <c><seealso marker="ct_telnet">ct_telnet</seealso></c>:</p>
+ by means of the support functions in e.g. <seealso marker="ct_ssh"><c>ct_ssh</c></seealso>, <seealso marker="ct_ftp"><c>ct_ftp</c></seealso>,
+ and <seealso marker="ct_telnet"><c>ct_telnet</c></seealso>:</p>
<list>
<item>Using a configuration target name (an alias) as reference.</item>
<item>Using the configuration variable as reference.</item>
diff --git a/lib/common_test/doc/src/cover_chapter.xml b/lib/common_test/doc/src/cover_chapter.xml
index 2d504b485f..a215c8c2f3 100644
--- a/lib/common_test/doc/src/cover_chapter.xml
+++ b/lib/common_test/doc/src/cover_chapter.xml
@@ -94,7 +94,7 @@
<p><c>$ ct_run -dir $TESTOBJS/db -cover $TESTOBJS/db/config/db.coverspec</c></p>
<p>You may also pass the cover specification file name in a
- call to <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>, by adding a <c>{cover,CoverSpec}</c>
+ call to <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, by adding a <c>{cover,CoverSpec}</c>
tuple to the <c>Opts</c> argument. Also, you can of course
enable code coverage in your test specifications (read
more in the chapter about
@@ -102,8 +102,8 @@
specifications</seealso>).</p>
</section>
- <marker id="cover_stop"></marker>
<section>
+ <marker id="cover_stop"></marker>
<title>Stopping the cover tool when tests are completed</title>
<p>By default the Cover tool is automatically stopped when the
tests are completed. This causes the original (non cover
@@ -120,8 +120,8 @@
<p>The option can be set by using the <c>-cover_stop</c> flag with
<c>ct_run</c>, by adding <c>{cover_stop,true|false}</c> to the
- Opts argument to <c><seealso
- marker="ct#run_test-1">ct:run_test/1</seealso></c>, or by adding
+ Opts argument to <seealso
+ marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, or by adding
a <c>cover_stop</c> term in your test specification (see chapter
about <seealso
marker="run_test_chapter#test_specifications">test
@@ -189,8 +189,8 @@
specification file for Common Test).</p>
</section>
- <marker id="cross_cover"/>
<section>
+ <marker id="cross_cover"/>
<title>Cross cover analysis</title>
<p>The cross cover mechanism allows cover analysis of modules
across multiple tests. It is useful if some code, e.g. a library
diff --git a/lib/common_test/doc/src/ct_hooks_chapter.xml b/lib/common_test/doc/src/ct_hooks_chapter.xml
index fe871eb516..60cd9be918 100644
--- a/lib/common_test/doc/src/ct_hooks_chapter.xml
+++ b/lib/common_test/doc/src/ct_hooks_chapter.xml
@@ -192,12 +192,12 @@
<section>
<title>External configuration data and Logging</title>
<p>It's possible in the CTH to read configuration data values
- by calling <c><seealso marker="ct#get_config-1">ct:get_config/1/2/3</seealso></c> (as explained in the
+ by calling <seealso marker="ct#get_config-1"><c>ct:get_config/1/2/3</c></seealso> (as explained in the
<seealso marker="config_file_chapter#require_config_data">
External configuration data</seealso>
chapter). The config variables in question must, as always, first have been
<c>required</c> by means of a suite-, group-, or test case info function,
- or the <c><seealso marker="ct#require-1">ct:require/1/2</seealso></c> function. Note that the latter can also be used
+ or the <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso> function. Note that the latter can also be used
in CT hook functions.</p>
<p>The CT hook functions may call any of the logging functions available
in the <c>ct</c> interface to print information to the log files, or to
@@ -252,13 +252,13 @@
{ok, Handle} -&gt;
{[{db_handle, Handle} | Config], CTHState#state{ handle = Handle }}
end.</code>
- <note>If using multiple CTHs, the first part of the return tuple will be
+ <note><p>If using multiple CTHs, the first part of the return tuple will be
used as input for the next CTH. So in the case above the next CTH might
get <c>{fail,Reason}</c> as the second parameter. If you have many CTHs
which interact, it might be a good idea to not let each CTH return
<c>fail</c> or <c>skip</c>. Instead return that an action should be taken
through the <c>Config</c> list and implement a CTH which at the end takes
- the correct action. </note>
+ the correct action.</p></note>
</section>
@@ -301,9 +301,9 @@ post_end_per_testcase(_TC, Config, Return, CTHState) -&gt;
%% Do nothing if tc does not crash.
{Return, CTHState}.</code>
- <note>Recovering from a testcase failure using CTHs should only be done as
+ <note><p>Recovering from a testcase failure using CTHs should only be done as
a last resort. If used wrongly it could become very difficult to
- determine which tests pass or fail in a test run</note>
+ determine which tests pass or fail in a test run</p></note>
</section>
@@ -322,6 +322,34 @@ post_end_per_testcase(_TC, Config, Return, CTHState) -&gt;
</section>
+ <marker id="synchronizing"/>
+ <section>
+ <title>Synchronizing external user applications with Common Test</title>
+ <p>CTHs can be used to synchronize test runs with external user applications.
+ The init function may e.g. start and/or communicate with an application that
+ has the purpose of preparing the SUT for an upcoming test run, or maybe
+ initialize a database for saving test data to during the test run. The
+ terminate function may similarly order such an application to reset the SUT
+ after the test run, and/or tell the application to finish active sessions
+ and terminate.
+ Any system error- or progress reports generated during the init- or
+ termination stage will be saved in the
+ <seealso marker="run_test_chapter#pre_post_test_io_log">Pre-
+ and post test I/O log</seealso>. (This is also true for any printouts made
+ with <c>ct:log/2</c> and <c>ct:pal/2</c>).</p>
+ <p>In order to ensure that Common Test doesn't start executing tests, or
+ closes its log files and shuts down, before the external application
+ is ready for it, Common Test may be synchronized with the application.
+ During startup and shutdown, Common Test can be suspended, simply by
+ having a CTH evaluate a <c>receive</c> expression in the init- or terminate
+ function. The macros <c>?CT_HOOK_INIT_PROCESS</c> (the process executing the hook
+ init function) and <c>?CT_HOOK_TERMINATE_PROCESS</c> (the process executing
+ the hook terminate function), each specifies the name of the correct Common Test
+ process to send a message to in order to return from the <c>receive</c>.
+ These macros are defined in <c>ct.hrl</c>.
+ </p>
+ </section>
+
<marker id="example"/>
<section>
<title>Example CTH</title>
diff --git a/lib/common_test/doc/src/ct_master_chapter.xml b/lib/common_test/doc/src/ct_master_chapter.xml
index e95823a560..37a0805055 100644
--- a/lib/common_test/doc/src/ct_master_chapter.xml
+++ b/lib/common_test/doc/src/ct_master_chapter.xml
@@ -220,6 +220,7 @@
<p>The default <seealso marker="ct_slave">ct_slave</seealso> callback module,
which is part of the Common Test application, has the following features:
+ </p>
<list>
<item>Starting Erlang target nodes on local or remote hosts
(ssh is used for communication).
@@ -237,7 +238,6 @@
Functions can be given as a list of {Module, Function, Arguments} tuples.
</item>
</list>
- </p>
<p>Note that it is possible to specify an <c>eval</c> term for the node as well
as <c>startup_functions</c> in the <c>node_start</c> options list. In this
case first the node will be started, then the <c>startup_functions</c> are
diff --git a/lib/common_test/doc/src/ct_run.xml b/lib/common_test/doc/src/ct_run.xml
index a6e61984e6..39259b092a 100644
--- a/lib/common_test/doc/src/ct_run.xml
+++ b/lib/common_test/doc/src/ct_run.xml
@@ -36,8 +36,6 @@
OS command line.
</comsummary>
- <marker id="top"></marker>
-
<description>
<p>The <c>ct_run</c> program is automatically installed with Erlang/OTP
and Common Test (please see the Installation chapter in the Common
@@ -48,7 +46,7 @@
particular mode.</p>
<p>There is an interface function that corresponds to this program,
- called <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>, for starting Common Test from the Erlang
+ called <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, for starting Common Test from the Erlang
shell (or an Erlang program). Please see the <c>ct</c> man page for
details.</p>
@@ -83,9 +81,9 @@
<p>it prints all valid start flags to stdout.</p>
</description>
- <marker id="ct_run"></marker>
<section>
+ <marker id="ct_run"></marker>
<title>Run tests from command line</title>
<pre>
ct_run [-dir TestDir1 TestDir2 .. TestDirN] |
diff --git a/lib/common_test/doc/src/event_handler_chapter.xml b/lib/common_test/doc/src/event_handler_chapter.xml
index 824240ef7d..65cc2a4042 100644
--- a/lib/common_test/doc/src/event_handler_chapter.xml
+++ b/lib/common_test/doc/src/event_handler_chapter.xml
@@ -64,7 +64,7 @@
<marker id="usage"></marker>
<title>Usage</title>
<p>Event handlers may be installed by means of an <c>event_handler</c>
- start flag (<c>ct_run</c>) or option (<c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>), where the
+ start flag (<c>ct_run</c>) or option (<seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>), where the
argument specifies the names of one or more event handler modules.
Example:</p>
<p><c>$ ct_run -suite test/my_SUITE -event_handler handlers/my_evh1
@@ -78,7 +78,7 @@
example).</p>
<p>An event_handler tuple in the argument <c>Opts</c> has the following
- definition (see also <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c> in the reference manual):</p>
+ definition (see also <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> in the reference manual):</p>
<pre>
{event_handler,EventHandlers}
@@ -224,8 +224,9 @@
<c>end_per_testcase</c> for the case failed.
</p></item>
+ <item>
<marker id="tc_auto_skip"></marker>
- <item><c>#event{name = tc_auto_skip, data = {Suite,Func,Reason}}</c>
+ <c>#event{name = tc_auto_skip, data = {Suite,Func,Reason}}</c>
<p><c>Suite = atom()</c>, the name of the suite.</p>
<p><c>Func = atom()</c>, the name of the test case or configuration function.</p>
<p><c>Reason = {failed,FailReason} |
@@ -251,8 +252,9 @@
the <c>tc_done</c> event.
</p></item>
+ <item>
<marker id="tc_user_skip"></marker>
- <item><c>#event{name = tc_user_skip, data = {Suite,TestCase,Comment}}</c>
+ <c>#event{name = tc_user_skip, data = {Suite,TestCase,Comment}}</c>
<p><c>Suite = atom()</c>, name of the suite.</p>
<p><c>TestCase = atom()</c>, name of the test case.</p>
<p><c>Comment = string()</c>, reason for skipping the test case.</p>
@@ -308,7 +310,7 @@
manager can look like.</p>
<note><p>To ensure that printouts to standard out (or printouts made with
- <c><seealso marker="ct#log-2">ct:log/2/3</seealso></c> or <c><seealso marker="ct:pal-2">ct:pal/2/3</seealso></c>) get written to the test case log
+ <seealso marker="ct#log-2"><c>ct:log/2/3</c></seealso> or <seealso marker="ct:pal-2"><c>ct:pal/2/3</c></seealso>) get written to the test case log
file, and not to the Common Test framework log, you can syncronize
with the Common Test server by matching on the <c>tc_start</c> and <c>tc_done</c>
events. In the period between these events, all IO gets directed to the
diff --git a/lib/common_test/doc/src/getting_started_chapter.xml b/lib/common_test/doc/src/getting_started_chapter.xml
index 06610bef25..445c731d01 100644
--- a/lib/common_test/doc/src/getting_started_chapter.xml
+++ b/lib/common_test/doc/src/getting_started_chapter.xml
@@ -61,13 +61,11 @@
<title>Test case execution</title>
<p>Execution of test cases is handled this way:</p>
- <p>
<image file="tc_execution.gif">
<icaption>
Successful vs unsuccessful test case execution.
</icaption>
</image>
- </p>
<p>For each test case that Common Test is told to execute, it spawns a
dedicated process on which the test case function in question starts
@@ -90,7 +88,7 @@
<p>As you can understand from the illustration above, Common Test requires
that a test case generates a runtime error to indicate failure (e.g.
by causing a bad match error or by calling <c>exit/1</c>, preferrably
- through the <c><seealso marker="ct#fail-1">ct:fail/1,2</seealso></c> help function). A succesful execution is
+ through the <seealso marker="ct#fail-1"><c>ct:fail/1,2</c></seealso> help function). A succesful execution is
indicated by means of a normal return from the test case function.
</p>
</section>
@@ -100,13 +98,15 @@
<p>As you've seen in the basics chapter, the test suite module implements
<seealso marker="common_test">callback functions</seealso>
(mandatory or optional) for various purposes, e.g:
+ </p>
<list>
<item>Init/end configuration function for the test suite</item>
<item>Init/end configuration function for a test case</item>
<item>Init/end configuration function for a test case group</item>
<item>Test cases</item>
</list>
- The configuration functions are optional and if you don't need them for
+ <p>
+ The configuration functions are optional and if you don't need them for
your test, a test suite with one simple test case could look like this:
</p>
<pre>
@@ -136,13 +136,11 @@
"lower level"). The data flow looks like this:
</p>
- <p>
<image file="config.gif">
<icaption>
Config data flow in the suite.
</icaption>
</image>
- </p>
<p>
Here's an example of a test suite which uses configuration functions
@@ -203,13 +201,11 @@
shows the log file structure:
</p>
- <p>
<image file="html_logs.gif">
<icaption>
HTML log file structure.
</icaption>
</image>
- </p>
</section>
<section>
diff --git a/lib/common_test/doc/src/install_chapter.xml b/lib/common_test/doc/src/install_chapter.xml
index ca15cba511..7f8c606324 100644
--- a/lib/common_test/doc/src/install_chapter.xml
+++ b/lib/common_test/doc/src/install_chapter.xml
@@ -56,13 +56,13 @@
shell script version run_test, however, this script needs to be
generated first, according to the instructions below.</p>
- <p><note>Before reading on, please note that since Common Test version
+ <note><p>Before reading on, please note that since Common Test version
1.5, the run_test shell script is no longer required for starting
tests with Common Test from the OS command line. The ct_run
program (descibed above) is the new recommended command line interface
for Common Test. The shell script exists mainly for legacy reasons and
may not be updated in future releases of Common Test. It may even be removed.
- </note></p>
+ </p></note>
<p>Optional step to generate a shell script for starting Common Test:</p>
<p>To generate the run_test shell script, navigate to the
diff --git a/lib/common_test/doc/src/notes.xml b/lib/common_test/doc/src/notes.xml
index cc3c5231a5..b4a5c610cf 100644
--- a/lib/common_test/doc/src/notes.xml
+++ b/lib/common_test/doc/src/notes.xml
@@ -32,6 +32,99 @@
<file>notes.xml</file>
</header>
+<section><title>Common_Test 1.7.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Documentation is added for ct_netconfc:send and
+ ct_netconfc:send_rpc.</p>
+ <p>
+ Own Id: OTP-11132</p>
+ </item>
+ <item>
+ <p>
+ ct_netconfc:create_subscription only allowed one XML
+ element inside the 'filter' element. According to RFC5277
+ it should be allowed to add any number of elements inside
+ the filter, so this is now corrected.</p>
+ <p>
+ Own Id: OTP-11166</p>
+ </item>
+ <item>
+ <p>
+ The error handler installed by the Common Test hook
+ cth_log_redirect did not respond to init:stop/1/2. This
+ has been corrected.</p>
+ <p>
+ Own Id: OTP-11175 Aux Id: seq12356 </p>
+ </item>
+ <item>
+ <p>
+ Calling ct:pal/2 or ct:print/2 when Common Test was not
+ running, would cause an exit. This has been changed and
+ the string is now simply printed to stdout instead.</p>
+ <p>
+ Own Id: OTP-11176</p>
+ </item>
+ <item>
+ <p>
+ Fixed problem with the cth_log_redirect hook making calls
+ to an undefined function in ct_logs.</p>
+ <p>
+ Own Id: OTP-11238</p>
+ </item>
+ <item>
+ <p>
+ When running tests with the 'repeat' option, the Common
+ Test utility process did not always terminate quickly
+ enough after a test run, causing the start of the next
+ run to fail. A monitor is now used to ensure termination
+ of the utility process after each test run.</p>
+ <p>
+ Own Id: OTP-11244 Aux Id: seq12396 </p>
+ </item>
+ <item>
+ <p>
+ Test Server installed an error handler (test_server_h)
+ only to be able to write the name of the current test
+ case to stdout whenever it received an error- or progress
+ report. This functionality was not useful and has been
+ removed. The built-in Common Test hook, cth_log_redirect,
+ has instead been improved to now also tag all error- and
+ progress reports in the log with suite-, group-, and/or
+ test case name.</p>
+ <p>
+ Own Id: OTP-11263 Aux Id: seq12251 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ A new log, the "Pre- and Post Test I/O Log", has been
+ introduced, which makes it possible to capture error- and
+ progress reports, as well as printouts made with ct:log/2
+ and ct:pal/2, before and after a test run. (Some minor
+ improvements of the logging system have been made at the
+ same time). Links to the new log are found on the Common
+ Test Framework Log page. The Common Test User's Guide has
+ been updated with information about the new log and also
+ with a new section on how to synchronize external
+ applications with Common Test by means of the CT Hook
+ init and terminate functions.</p>
+ <p>
+ Own Id: OTP-11272</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Common_Test 1.7.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/common_test/doc/src/run_test_chapter.xml b/lib/common_test/doc/src/run_test_chapter.xml
index 4f826d4e31..03d98eb371 100644
--- a/lib/common_test/doc/src/run_test_chapter.xml
+++ b/lib/common_test/doc/src/run_test_chapter.xml
@@ -21,7 +21,7 @@
</legalnotice>
- <title>Running Tests</title>
+ <title>Running Tests and Analyzing Results</title>
<prepared>Peter Andersson, Kenneth Lundin</prepared>
<docno></docno>
<date></date>
@@ -105,8 +105,8 @@
RPC from a remote node.</p>
</section>
- <marker id="ct_run"></marker>
<section>
+ <marker id="ct_run"></marker>
<title>Running tests from the OS command line</title>
<p>The <c>ct_run</c> program can be used for running tests from
@@ -225,15 +225,15 @@
<p>Common Test provides an Erlang API for running tests. The main (and most
flexible) function for specifying and executing tests is called
- <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>.
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>.
This function takes the same start parameters as
- the <c><seealso marker="run_test_chapter#ct_run">ct_run</seealso></c>
+ the <seealso marker="run_test_chapter#ct_run"><c>ct_run</c></seealso>
program described above, only the flags are instead
given as options in a list of key-value tuples. E.g. a test specified
with <c>ct_run</c> like:</p>
<p><c>$ ct_run -suite ./my_SUITE -logdir ./results</c></p>
- <p>is with <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c> specified as:</p>
+ <p>is with <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> specified as:</p>
<p><c>1> ct:run_test([{suite,"./my_SUITE"},{logdir,"./results"}]).</c></p>
<p>The function returns the test result, represented by the tuple:
@@ -245,7 +245,7 @@
<section>
<title>Releasing the Erlang shell</title>
<p>During execution of tests, started with
- <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>,
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
the Erlang shell process, controlling stdin, will remain the top
level process of the Common Test system of processes. The result
is that the Erlang shell is not available for interaction during
@@ -260,19 +260,19 @@
<c>ct:run_test/1</c> returns the pid of this process rather than the
test result - which instead is printed to tty at the end of the test run.</p>
<note><p>Note that in order to use the
- <c><seealso marker="ct#break-1">ct:break/1/2</seealso></c> and
- <c><seealso marker="ct#continue-0">ct:continue/0/1</seealso></c> functions,
+ <seealso marker="ct#break-1"><c>ct:break/1/2</c></seealso> and
+ <seealso marker="ct#continue-0"><c>ct:continue/0/1</c></seealso> functions,
<c>release_shell</c> <em>must</em> be set to <c>true</c>.</p></note>
</section>
<p>For detailed documentation about
- <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>,
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
please see the
- <c><seealso marker="ct#run_test-1">ct</seealso></c> manual page.</p>
+ <seealso marker="ct#run_test-1"><c>ct</c></seealso> manual page.</p>
</section>
- <marker id="group_execution"></marker>
<section>
+ <marker id="group_execution"></marker>
<title>Test case group execution</title>
<p>With the <c>ct_run</c> flag, or <c>ct:run_test/1</c> option <c>group</c>,
@@ -442,9 +442,9 @@
for trying out various operations during test suite development.</p>
<p>To invoke the interactive shell mode, you can start an Erlang shell
- manually and call <c><seealso marker="ct#install-1">ct:install/1</seealso></c> to install any configuration
+ manually and call <seealso marker="ct#install-1"><c>ct:install/1</c></seealso> to install any configuration
data you might need (use <c>[]</c> as argument otherwise), then
- call <c><seealso marker="ct#start_interactive-0">ct:start_interactive/0</seealso></c> to start Common Test. If you use
+ call <seealso marker="ct#start_interactive-0"><c>ct:start_interactive/0</c></seealso> to start Common Test. If you use
the <c>ct_run</c> program, you may start the Erlang shell and Common Test
in the same go by using the <c>-shell</c> and, optionally, the <c>-config</c>
and/or <c>-userconfig</c> flag. Examples:
@@ -463,8 +463,8 @@
<p>If any functions using "required config data" (e.g. ct_telnet or
ct_ftp functions) are to be called from the erlang shell, config
- data must first be required with <c><seealso marker="ct#require-1">
- ct:require/1/2</seealso></c>. This is
+ data must first be required with <seealso marker="ct#require-1"><c>
+ ct:require/1/2</c></seealso>. This is
equivalent to a <c>require</c> statement in the <seealso
marker="write_test_chapter#suite">Test Suite Info
Function</seealso> or in the <seealso
@@ -491,11 +491,11 @@
is not supported.</p>
<p>If you wish to exit the interactive mode (e.g. to start an
- automated test run with <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>), call the function
- <c><seealso marker="ct#stop_interactive-0">ct:stop_interactive/0</seealso></c>. This shuts down the
+ automated test run with <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>), call the function
+ <seealso marker="ct#stop_interactive-0"><c>ct:stop_interactive/0</c></seealso>. This shuts down the
running <c>ct</c> application. Associations between
configuration names and data created with <c>require</c> are
- consequently deleted. <c><seealso marker="ct#start_interactive-0">ct:start_interactive/0</seealso></c> will get you
+ consequently deleted. <seealso marker="ct#start_interactive-0"><c>ct:start_interactive/0</c></seealso> will get you
back into interactive mode, but the previous state is not restored.</p>
</section>
@@ -503,7 +503,7 @@
<title>Step by step execution of test cases with the Erlang Debugger</title>
<p>By means of <c>ct_run -step [opts]</c>, or by passing the
- <c>{step,Opts}</c> option to <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>, it is possible
+ <c>{step,Opts}</c> option to <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, it is possible
to get the Erlang Debugger started automatically and use its
graphical interface to investigate the state of the current test
case and to execute it step by step and/or set execution breakpoints.</p>
@@ -527,17 +527,17 @@
with <c>dir</c>.</p>
</section>
- <marker id="test_specifications"></marker>
<section>
+ <marker id="test_specifications"></marker>
<title>Test Specifications</title>
<section>
<title>General description</title>
<p>The most flexible way to specify what to test, is to use a so
called test specification. A test specification is a sequence of
Erlang terms. The terms are normally declared in one or more text files
- (see <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c>), but
+ (see <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>), but
may also be passed to Common Test on the form of a list (see
- <c><seealso marker="ct#run_testspec-1">ct:run_testspec/1</seealso></c>).
+ <seealso marker="ct#run_testspec-1"><c>ct:run_testspec/1</c></seealso>).
There are two general types of terms: configuration terms and test
specification terms.</p>
<p>With configuration terms it is possible to e.g. label the test
@@ -989,7 +989,7 @@
<c>ct_run</c>. This forces Common Test to ignore unrecognizable terms.
Note that in this mode, Common Test is not able to check the specification
for errors as efficiently as if the scanner runs in default mode.
- If <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c> is used
+ If <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> is used
for starting the tests, the relaxed scanner
mode is enabled by means of the tuple: <c>{allow_user_terms,true}</c></p>
</section>
@@ -999,7 +999,7 @@
<title>Running tests from the Web based GUI</title>
<p>The web based GUI, VTS, is started with the
- <c><seealso marker="run_test_chapter#ct_run">ct_run</seealso></c>
+ <seealso marker="run_test_chapter#ct_run"><c>ct_run</c></seealso>
program. From the GUI you can load config files, and select
directories, suites and cases to run. You can also state the
config files, directories, suites and cases on the command line
@@ -1087,18 +1087,18 @@
</list>
<p>On the test run index page there is a link to the Common Test
- Framework log file in which information about imported
- configuration data and general test progress is written. This
- log file is useful to get snapshot information about the test
- run during execution. It can also be very helpful when
- analyzing test results or debugging test suites.</p>
+ Framework Log file in which information about imported
+ configuration data and general test progress is written. This
+ log file is useful to get snapshot information about the test
+ run during execution. It can also be very helpful when
+ analyzing test results or debugging test suites.</p>
<p>On the test run index page it is noted if a test has missing
suites (i.e. suites that Common Test has failed to
compile). Names of the missing suites can be found in the
- Common Test Framework log file.</p>
+ Common Test Framework Log file.</p>
- <p>The major logfile shows a detailed report of the test run. It
+ <p>The major log file shows a detailed report of the test run. It
includes test suite and test case names, execution time, the
exact reason for failures etc. The information is available in both
a file with textual and with HTML representation. The HTML file shows a
@@ -1172,6 +1172,40 @@
<url href="http://tablesorter.com">tablesorter</url> plugin, with customized sorting
functions, for this implementation.</p>
</section>
+
+ <section>
+ <title>The Unexpected I/O Log</title>
+ <p>On the test suites overview page you find a link to the Unexpected I/O Log.
+ In this log, Common Test saves printouts made with
+ <c>ct:log/2</c> and <c>ct:pal/2</c>, as well as captured system error- and
+ progress reports, that cannot be associated with particular test cases and
+ therefore cannot be written to individual test case log files. This happens e.g.
+ if a log printout is made from an external process (not a test case process),
+ or if an error- or progress report comes in, during a short interval while Common
+ Test is not executing a test case or configuration function, <em>or</em> while
+ Common Test is currently executing a parallell test case group.</p>
+ </section>
+
+ <section>
+ <marker id="pre_post_test_io_log"></marker>
+ <title>The Pre- and Post Test I/O Log</title>
+ <p>On the Common Test Framework Log page you find links to the so called
+ Pre- and Post Test I/O Log. In this log, Common Test saves printouts made with
+ <c>ct:log/2</c> and <c>ct:pal/2</c>, as well as captured system error-
+ and progress reports, that take place before - and after - the actual test run.
+ Examples of this are printouts from a CT hook init- or terminate function, or
+ progress reports generated when an OTP application is started from a CT hook
+ init function. Another example is an error report generated due to
+ a failure when an external application is stopped from a CT hook terminate function.
+ All information in these examples ends up in the Pre- and Post Test I/O Log.
+ For more information on how to synchronize test runs with external user
+ applications, please see the
+ <seealso marker="ct_hooks_chapter#synchronizing">Synchronizing</seealso>
+ section in the Common Test Hooks chapter.</p>
+ <p>Note that logging to file with <c>ct:log/2</c> or <c>ct:pal/2</c>
+ only works when Common Test is running. Printouts with <c>ct:pal/2</c>
+ are however always displayed on screen.</p>
+ </section>
</section>
<section>
diff --git a/lib/common_test/doc/src/write_test_chapter.xml b/lib/common_test/doc/src/write_test_chapter.xml
index 69b17f3c4b..055fb90641 100644
--- a/lib/common_test/doc/src/write_test_chapter.xml
+++ b/lib/common_test/doc/src/write_test_chapter.xml
@@ -129,8 +129,8 @@
</p>
</section>
- <marker id="per_testcase"/>
<section>
+ <marker id="per_testcase"/>
<title>Init and end per test case</title>
<p>Each test suite module can contain the optional configuration functions
@@ -173,7 +173,7 @@
</p>
<p>The <c>end_per_testcase/2</c> function is called even after a
- test case terminates due to a call to <c><seealso marker="ct#abort_current_testcase-1">ct:abort_current_testcase/1</seealso></c>,
+ test case terminates due to a call to <seealso marker="ct#abort_current_testcase-1"><c>ct:abort_current_testcase/1</c></seealso>,
or after a timetrap timeout. However, <c>end_per_testcase</c>
will then execute on a different process than the test case
function, and in this situation, <c>end_per_testcase</c> will
@@ -243,8 +243,8 @@
<note><p>The test case function argument <c>Config</c> should not be
confused with the information that can be retrieved from
- configuration files (using <c><seealso marker="ct#get_config-1">
- ct:get_config/1/2</seealso></c>). The Config argument
+ configuration files (using <seealso marker="ct#get_config-1"><c>
+ ct:get_config/1/2</c></seealso>). The Config argument
should be used for runtime configuration of the test suite and the
test cases, while configuration files should typically contain data
related to the SUT. These two types of configuration data are handled
@@ -303,7 +303,7 @@
<item>
<p>
Use this to specify arbitrary data related to the testcase. This
- data can be retrieved at any time using the <c><seealso marker="ct#userdata-3">ct:userdata/3</seealso></c>
+ data can be retrieved at any time using the <seealso marker="ct#userdata-3"><c>ct:userdata/3</c></seealso>
utility function.
</p>
</item>
@@ -348,8 +348,8 @@
</taglist>
<p>See the <seealso marker="config_file_chapter#require_config_data">Config files</seealso>
- chapter and the <c><seealso marker="ct#require-1">
- ct:require/1/2</seealso></c> function in the
+ chapter and the <seealso marker="ct#require-1"><c>
+ ct:require/1/2</c></seealso> function in the
<seealso marker="ct">ct</seealso> reference manual for more information about
<c>require</c>.</p>
@@ -826,14 +826,16 @@
Common Test to create one dedicated private directory per
test case and execution instead. This is accomplished by means of
the flag/option: <c>create_priv_dir</c> (to be used with the
- <c>ct_run</c> program, the <c><seealso marker="ct#run_test-1">ct:run_test/1</seealso></c> function, or
+ <c>ct_run</c> program, the <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> function, or
as test specification term). There are three possible values
for this option:
+ </p>
<list>
<item><c>auto_per_run</c></item>
<item><c>auto_per_tc</c></item>
<item><c>manual_per_tc</c></item>
</list>
+ <p>
The first value indicates the default priv_dir behaviour, i.e.
one private directory created per test run. The two latter
values tell Common Test to generate a unique test directory name
@@ -842,7 +844,7 @@
become very inefficient for test runs with many test cases and/or
repetitions. Therefore, in case the manual version is instead used, the
test case must tell Common Test to create priv_dir when it needs it.
- It does this by calling the function <c><seealso marker="ct#make_priv_dir-0">ct:make_priv_dir/0</seealso></c>.
+ It does this by calling the function <seealso marker="ct#make_priv_dir-0"><c>ct:make_priv_dir/0</c></seealso>.
</p>
<note><p>You should not depend on current working directory for
@@ -890,7 +892,7 @@
<p>It is also possible to dynamically set/reset a timetrap during the
excution of a test case, or configuration function. This is done by calling
- <c><seealso marker="ct#timetrap-1">ct:timetrap/1</seealso></c>. This function cancels the current timetrap
+ <seealso marker="ct#timetrap-1"><c>ct:timetrap/1</c></seealso>. This function cancels the current timetrap
and starts a new one (that stays active until timeout, or end of the
current function).</p>
@@ -903,12 +905,12 @@
<p>If a test case needs to suspend itself for a time that also gets
multipled by <c>multiply_timetraps</c> (and possibly also scaled up if
- <c>scale_timetraps</c> is enabled), the function <c><seealso marker="ct#sleep-1">ct:sleep/1</seealso></c>
+ <c>scale_timetraps</c> is enabled), the function <seealso marker="ct#sleep-1"><c>ct:sleep/1</c></seealso>
may be used (instead of e.g. <c>timer:sleep/1</c>).</p>
<p>A function (<c>fun/0</c> or <c>MFA</c>) may be specified as
timetrap value in the suite-, group- and test case info function, as
- well as argument to the <c><seealso marker="ct#timetrap-1">ct:timetrap/1</seealso></c> function. Examples:</p>
+ well as argument to the <seealso marker="ct#timetrap-1"><c>ct:timetrap/1</c></seealso> function. Examples:</p>
<p><c>{timetrap,{my_test_utils,timetrap,[?MODULE,system_start]}}</c></p>
<p><c>ct:timetrap(fun() -> my_timetrap(TestCaseName, Config) end)</c></p>
diff --git a/lib/common_test/include/ct.hrl b/lib/common_test/include/ct.hrl
index bde2709ad1..44cc33f01e 100644
--- a/lib/common_test/include/ct.hrl
+++ b/lib/common_test/include/ct.hrl
@@ -32,3 +32,7 @@
-define(STD_VERBOSITY, 50 ).
-define(HI_VERBOSITY, 75 ).
-define(MAX_VERBOSITY, 100).
+
+%% name of process executing the CT Hook init and terminate function
+-define(CT_HOOK_INIT_PROCESS, ct_util_server).
+-define(CT_HOOK_TERMINATE_PROCESS, ct_util_server).
diff --git a/lib/common_test/src/ct_hooks.erl b/lib/common_test/src/ct_hooks.erl
index 3d87a82e24..e845e9e908 100644
--- a/lib/common_test/src/ct_hooks.erl
+++ b/lib/common_test/src/ct_hooks.erl
@@ -50,9 +50,8 @@
-spec init(State :: term()) -> ok |
{fail, Reason :: term()}.
init(Opts) ->
- call(get_new_hooks(Opts, undefined) ++ get_builtin_hooks(Opts),
+ call(get_builtin_hooks(Opts) ++ get_new_hooks(Opts, undefined),
ok, init, []).
-
%% @doc Called after all suites are done.
-spec terminate(Hooks :: term()) ->
@@ -276,8 +275,10 @@ get_new_hooks(Config, Fun) ->
end, get_new_hooks(Config)).
get_new_hooks(Config) when is_list(Config) ->
- lists:flatmap(fun({?config_name, HookConfigs}) ->
+ lists:flatmap(fun({?config_name, HookConfigs}) when is_list(HookConfigs) ->
HookConfigs;
+ ({?config_name, HookConfig}) when is_atom(HookConfig) ->
+ [HookConfig];
(_) ->
[]
end, Config);
diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl
index f5355bfefe..1a6e4d31a8 100644
--- a/lib/common_test/src/ct_logs.erl
+++ b/lib/common_test/src/ct_logs.erl
@@ -61,6 +61,7 @@
-define(index_name, "index.html").
-define(totals_name, "totals.info").
-define(log_cache_name, "ct_log_cache").
+-define(misc_io_log, "misc_io.log.html").
-define(table_color1,"#ADD8E6").
-define(table_color2,"#E4F0FE").
@@ -446,6 +447,8 @@ tc_print(Category,Importance,Format,Args) ->
ct_util:get_verbosity('$unspecified');
{error,bad_invocation} ->
?MAX_VERBOSITY;
+ {error,_Failure} ->
+ ?MAX_VERBOSITY;
Val ->
Val
end,
@@ -521,7 +524,7 @@ int_footer() ->
div_header(Class) ->
div_header(Class,"User").
div_header(Class,Printer) ->
- "<div class=\"" ++ atom_to_list(Class) ++ "\"><b>*** " ++ Printer ++
+ "\n<div class=\"" ++ atom_to_list(Class) ++ "\"><b>*** " ++ Printer ++
" " ++ log_timestamp(now()) ++ " ***</b>".
div_footer() ->
"</div>".
@@ -615,6 +618,34 @@ logger(Parent, Mode, Verbosity) ->
end
end
end,
+
+ test_server_io:start_link(),
+ MiscIoName = filename:join(Dir, ?misc_io_log),
+ {ok,MiscIoFd} = file:open(MiscIoName,
+ [write,{encoding,utf8}]),
+ test_server_io:set_fd(unexpected_io, MiscIoFd),
+
+ {MiscIoHeader,MiscIoFooter} =
+ case get_ts_html_wrapper("Pre/post-test I/O log", Dir, false,
+ Dir, undefined, utf8) of
+ {basic_html,UH,UF} ->
+ {UH,UF};
+ {xhtml,UH,UF} ->
+ {UH,UF}
+ end,
+ io:put_chars(MiscIoFd,
+ [MiscIoHeader,
+ "<a name=\"pretest\"></a>\n",
+ xhtml("<br>\n<h2>Pre-test Log</h2>",
+ "<br />\n<h3>PRE-TEST LOG</h3>"),
+ "\n<pre>\n"]),
+ MiscIoDivider =
+ "\n<a name=\"posttest\"></a>\n"++
+ xhtml("</pre>\n<br><h2>Post-test Log</h2>\n<pre>\n",
+ "</pre>\n<br />\n<h3>POST-TEST LOG</h3>\n<pre>\n"),
+ ct_util:set_testdata_async({misc_io_log,{filename:absname(MiscIoName),
+ MiscIoDivider,MiscIoFooter}}),
+
ct_event:notify(#event{name=start_logging,node=node(),
data=AbsDir}),
make_all_runs_index(start),
@@ -625,7 +656,7 @@ logger(Parent, Mode, Verbosity) ->
end,
file:set_cwd(Dir),
make_last_run_index(Time),
- CtLogFd = open_ctlog(),
+ CtLogFd = open_ctlog(?misc_io_log),
io:format(CtLogFd,int_header()++int_footer(),
[log_timestamp(now()),"Common Test Logger started"]),
Parent ! {started,self(),{Time,filename:absname("")}},
@@ -690,14 +721,15 @@ logger_loop(State) ->
false ->
%% Group leader is dead, so write to the
%% CtLog or unexpected_io log instead
- unexpected_io(Pid,Category,List,State),
+ unexpected_io(Pid,Category,Importance,
+ List,State),
logger_loop(State)
end;
{ct_log,_Fd,TCGLs} ->
%% If category is ct_internal then write
%% to ct_log, else write to unexpected_io
%% log
- unexpected_io(Pid,Category,List,State),
+ unexpected_io(Pid,Category,Importance,List,State),
logger_loop(State#logger_state{
tc_groupleaders = TCGLs})
end;
@@ -798,7 +830,7 @@ print_to_log(sync, FromPid, Category, TCGL, List, State) ->
IoFun = create_io_fun(FromPid, State),
io:format(TCGL,"~ts", [lists:foldl(IoFun, [], List)]);
true ->
- unexpected_io(FromPid,Category,List,State)
+ unexpected_io(FromPid,Category,?MAX_IMPORTANCE,List,State)
end,
State;
@@ -814,7 +846,8 @@ print_to_log(async, FromPid, Category, TCGL, List, State) ->
end;
true ->
fun() ->
- unexpected_io(FromPid,Category,List,State)
+ unexpected_io(FromPid,Category,?MAX_IMPORTANCE,
+ List,State)
end
end,
case State#logger_state.async_print_jobs of
@@ -918,7 +951,7 @@ set_evmgr_gl(GL) ->
EvMgrPid -> group_leader(GL,EvMgrPid)
end.
-open_ctlog() ->
+open_ctlog(MiscIoName) ->
{ok,Fd} = file:open(?ct_log_name,[write,{encoding,utf8}]),
io:format(Fd, header("Common Test Framework Log", {[],[1,2],[]}), []),
case file:consult(ct_run:variables_file_name("../")) of
@@ -933,10 +966,21 @@ open_ctlog() ->
"No configuration found for test!!\n",
[Variables,Reason])
end,
+ io:format(Fd,
+ xhtml("<br><br><h2>Pre/post-test I/O Log</h2>\n",
+ "<br /><br />\n<h4>PRE/POST TEST I/O LOG</h4>\n"), []),
+ io:format(Fd,
+ "\n<ul>\n"
+ "<li><a href=\"~ts#pretest\">"
+ "View I/O logged before the test run</a></li>\n"
+ "<li><a href=\"~ts#posttest\">"
+ "View I/O logged after the test run</a></li>\n</ul>\n",
+ [MiscIoName,MiscIoName]),
+
print_style(Fd,undefined),
io:format(Fd,
- xhtml("<br><br><h2>Progress Log</h2>\n<pre>\n",
- "<br /><br /><h4>PROGRESS LOG</h4>\n<pre>\n"), []),
+ xhtml("<br><h2>Progress Log</h2>\n<pre>\n",
+ "<br />\n<h4>PROGRESS LOG</h4>\n<pre>\n"), []),
Fd.
print_style(Fd,undefined) ->
@@ -2852,6 +2896,9 @@ make_relative1(DirTs, CwdTs) ->
%%% @doc
%%%
get_ts_html_wrapper(TestName, PrintLabel, Cwd, TableCols, Encoding) ->
+ get_ts_html_wrapper(TestName, undefined, PrintLabel, Cwd, TableCols, Encoding).
+
+get_ts_html_wrapper(TestName, Logdir, PrintLabel, Cwd, TableCols, Encoding) ->
TestName1 = if is_list(TestName) ->
lists:flatten(TestName);
true ->
@@ -2872,7 +2919,12 @@ get_ts_html_wrapper(TestName, PrintLabel, Cwd, TableCols, Encoding) ->
end
end,
CTPath = code:lib_dir(common_test),
- {ok,CtLogdir} = get_log_dir(true),
+
+ {ok,CtLogdir} =
+ if Logdir == undefined -> get_log_dir(true);
+ true -> {ok,Logdir}
+ end,
+
AllRuns = make_relative(filename:join(filename:dirname(CtLogdir),
?all_runs_name), Cwd),
TestIndex = make_relative(filename:join(filename:dirname(CtLogdir),
@@ -3066,10 +3118,12 @@ html_encoding(latin1) ->
html_encoding(utf8) ->
"utf-8".
-unexpected_io(Pid,ct_internal,List,#logger_state{ct_log_fd=Fd}=State) ->
+unexpected_io(Pid,ct_internal,_Importance,List,State) ->
IoFun = create_io_fun(Pid,State),
- io:format(Fd, "~ts", [lists:foldl(IoFun, [], List)]);
-unexpected_io(Pid,_Category,List,State) ->
+ io:format(State#logger_state.ct_log_fd, "~ts",
+ [lists:foldl(IoFun, [], List)]);
+unexpected_io(Pid,_Category,_Importance,List,State) ->
IoFun = create_io_fun(Pid,State),
Data = io_lib:format("~ts", [lists:foldl(IoFun, [], List)]),
- test_server_io:print_unexpected(Data).
+ test_server_io:print_unexpected(Data),
+ ok.
diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl
index 266ca73417..7c797be03e 100644
--- a/lib/common_test/src/ct_run.erl
+++ b/lib/common_test/src/ct_run.erl
@@ -1883,7 +1883,7 @@ verify_suites(TestSuites) ->
atom_to_list(
Suite)),
io:format(user,
- "Suite ~w not found"
+ "Suite ~w not found "
"in directory ~ts~n",
[Suite,TestDir]),
{Found,[{DS,[Name]}|NotFound]}
diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl
index 68e76c2396..bcc4caa62e 100644
--- a/lib/common_test/src/ct_util.erl
+++ b/lib/common_test/src/ct_util.erl
@@ -187,6 +187,7 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
false ->
ok
end,
+
{StartTime,TestLogDir} = ct_logs:init(Mode, Verbosity),
ct_event:notify(#event{name=test_start,
@@ -198,12 +199,26 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
ok ->
Parent ! {self(),started};
{fail,CTHReason} ->
- ct_logs:tc_print('Suite Callback',CTHReason,[]),
+ ErrorInfo = if is_atom(CTHReason) ->
+ io_lib:format("{~p,~p}",
+ [CTHReason,
+ erlang:get_stacktrace()]);
+ true ->
+ CTHReason
+ end,
+ ct_logs:tc_print('Suite Callback',ErrorInfo,[]),
self() ! {{stop,{self(),{user_error,CTHReason}}},
{Parent,make_ref()}}
catch
_:CTHReason ->
- ct_logs:tc_print('Suite Callback',CTHReason,[]),
+ ErrorInfo = if is_atom(CTHReason) ->
+ io_lib:format("{~p,~p}",
+ [CTHReason,
+ erlang:get_stacktrace()]);
+ true ->
+ CTHReason
+ end,
+ ct_logs:tc_print('Suite Callback',ErrorInfo,[]),
self() ! {{stop,{self(),{user_error,CTHReason}}},
{Parent,make_ref()}}
end,
@@ -286,14 +301,23 @@ get_start_dir() ->
%% handle verbosity outside ct_util_server (let the client read
%% the verbosity table) to avoid possible deadlock situations
set_verbosity(Elem = {_Category,_Level}) ->
- ets:insert(?verbosity_table, Elem),
- ok.
+ try ets:insert(?verbosity_table, Elem) of
+ _ ->
+ ok
+ catch
+ _:Reason ->
+ {error,Reason}
+ end.
+
get_verbosity(Category) ->
- case ets:lookup(?verbosity_table, Category) of
+ try ets:lookup(?verbosity_table, Category) of
[{Category,Level}] ->
Level;
_ ->
undefined
+ catch
+ _:Reason ->
+ {error,Reason}
end.
loop(Mode,TestData,StartDir) ->
@@ -383,19 +407,38 @@ loop(Mode,TestData,StartDir) ->
return(From,StartDir),
loop(From,TestData,StartDir);
{{stop,Info},From} ->
+ test_server_io:reset_state(),
+ {MiscIoName,MiscIoDivider,MiscIoFooter} =
+ proplists:get_value(misc_io_log,TestData),
+ {ok,MiscIoFd} = file:open(MiscIoName,
+ [append,{encoding,utf8}]),
+ io:put_chars(MiscIoFd, MiscIoDivider),
+ test_server_io:set_fd(unexpected_io, MiscIoFd),
+
Time = calendar:local_time(),
ct_event:sync_notify(#event{name=test_done,
node=node(),
data=Time}),
- Callbacks = ets:lookup_element(?suite_table,
- ct_hooks,
- #suite_data.value),
+ Callbacks =
+ try ets:lookup_element(?suite_table,
+ ct_hooks,
+ #suite_data.value) of
+ CTHMods -> CTHMods
+ catch
+ %% this is because ct_util failed in init
+ error:badarg -> []
+ end,
ct_hooks:terminate(Callbacks),
close_connections(ets:tab2list(?conn_table)),
ets:delete(?conn_table),
ets:delete(?board_table),
ets:delete(?suite_table),
ets:delete(?verbosity_table),
+
+ io:put_chars(MiscIoFd, "\n</pre>\n"++MiscIoFooter),
+ test_server_io:stop([unexpected_io]),
+ test_server_io:finish(),
+
ct_logs:close(Info, StartDir),
ct_event:stop(),
ct_config:stop(),
@@ -670,8 +713,14 @@ reset_silent_connections() ->
%%% @see ct
stop(Info) ->
case whereis(ct_util_server) of
- undefined -> ok;
- _ -> call({stop,Info})
+ undefined ->
+ ok;
+ CtUtilPid ->
+ Ref = monitor(process, CtUtilPid),
+ call({stop,Info}),
+ receive
+ {'DOWN',Ref,_,_,_} -> ok
+ end
end.
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/src/cth_log_redirect.erl b/lib/common_test/src/cth_log_redirect.erl
index 958b7a94c7..4ee7e48a67 100644
--- a/lib/common_test/src/cth_log_redirect.erl
+++ b/lib/common_test/src/cth_log_redirect.erl
@@ -25,16 +25,29 @@
%% CTH Callbacks
--export([id/1, init/2, post_init_per_group/4, pre_end_per_group/3,
- post_end_per_testcase/4]).
+-export([id/1, init/2,
+ pre_init_per_suite/3, pre_end_per_suite/3, post_end_per_suite/4,
+ pre_init_per_group/3, post_init_per_group/4,
+ pre_end_per_group/3, post_end_per_group/4,
+ pre_init_per_testcase/3, post_end_per_testcase/4]).
%% Event handler Callbacks
-export([init/1,
handle_event/2, handle_call/2, handle_info/2,
terminate/1]).
+%% Other
+-export([handle_remote_events/1]).
+
-include("ct.hrl").
+-record(eh_state, {log_func,
+ curr_suite,
+ curr_group,
+ curr_func,
+ parallel_tcs = false,
+ handle_remote_events = false}).
+
id(_Opts) ->
?MODULE.
@@ -42,36 +55,62 @@ init(?MODULE, _Opts) ->
error_logger:add_report_handler(?MODULE),
tc_log_async.
+pre_init_per_suite(Suite, Config, State) ->
+ set_curr_func({Suite,init_per_suite}, Config),
+ {Config, State}.
+
+pre_end_per_suite(Suite, Config, State) ->
+ set_curr_func({Suite,end_per_suite}, Config),
+ {Config, State}.
+
+post_end_per_suite(_Suite, Config, Return, State) ->
+ set_curr_func(undefined, Config),
+ {Return, State}.
+
+pre_init_per_group(Group, Config, State) ->
+ set_curr_func({group,Group,init_per_group}, Config),
+ {Config, State}.
+
post_init_per_group(Group, Config, Result, tc_log_async) ->
case lists:member(parallel,proplists:get_value(
tc_group_properties,Config,[])) of
true ->
- {Result, {set_log_func(ct_log),Group}};
+ {Result, {set_log_func(tc_log),Group}};
false ->
{Result, tc_log_async}
end;
post_init_per_group(_Group, _Config, Result, State) ->
{Result, State}.
+pre_init_per_testcase(TC, Config, State) ->
+ set_curr_func(TC, Config),
+ {Config, State}.
+
post_end_per_testcase(_TC, _Config, Result, State) ->
%% Make sure that the event queue is flushed
%% before ending this test case.
gen_event:call(error_logger, ?MODULE, flush, 300000),
{Result, State}.
-pre_end_per_group(Group, Config, {ct_log, Group}) ->
+pre_end_per_group(Group, Config, {tc_log, Group}) ->
+ set_curr_func({group,Group,end_per_group}, Config),
{Config, set_log_func(tc_log_async)};
-pre_end_per_group(_Group, Config, State) ->
+pre_end_per_group(Group, Config, State) ->
+ set_curr_func({group,Group,end_per_group}, Config),
{Config, State}.
+post_end_per_group(_Group, Config, Return, State) ->
+ set_curr_func({group,undefined}, Config),
+ {Return, State}.
%% Copied and modified from sasl_report_tty_h.erl
init(_Type) ->
- {ok, tc_log_async}.
+ {ok, #eh_state{log_func = tc_log_async}}.
-handle_event({_Type, GL, _Msg}, State) when node(GL) /= node() ->
+handle_event({_Type,GL,_Msg}, #eh_state{handle_remote_events = false} = State)
+ when node(GL) /= node() ->
{ok, State};
-handle_event(Event, LogFunc) ->
+handle_event(Event, #eh_state{log_func = LogFunc} = State) ->
case lists:keyfind(sasl, 1, application:which_applications()) of
false ->
sasl_not_started;
@@ -80,7 +119,8 @@ handle_event(Event, LogFunc) ->
SReport = sasl_report:format_report(group_leader(), ErrLogType,
tag_event(Event)),
if is_list(SReport) ->
- ct_logs:LogFunc(sasl, ?STD_IMPORTANCE, "System", SReport, []);
+ SaslHeader = format_header(State),
+ ct_logs:LogFunc(sasl, ?STD_IMPORTANCE, SaslHeader, SReport, []);
true -> %% Report is an atom if no logging is to be done
ignore
end
@@ -88,20 +128,61 @@ handle_event(Event, LogFunc) ->
EReport = error_logger_tty_h:write_event(
tag_event(Event),io_lib),
if is_list(EReport) ->
- ct_logs:LogFunc(error_logger, ?STD_IMPORTANCE, "System", EReport, []);
+ ErrHeader = format_header(State),
+ ct_logs:LogFunc(error_logger, ?STD_IMPORTANCE, ErrHeader, EReport, []);
true -> %% Report is an atom if no logging is to be done
ignore
end,
- {ok, LogFunc}.
-
+ {ok, State}.
+
+handle_info({'EXIT',User,killed}, State) ->
+ case whereis(user) of
+ %% init:stop/1/2 has been called, let's finish!
+ undefined ->
+ remove_handler;
+ User ->
+ remove_handler;
+ _ ->
+ {ok,State}
+ end;
-handle_info(_,State) -> {ok, State}.
+handle_info(_, State) ->
+ {ok,State}.
handle_call(flush,State) ->
{ok, ok, State};
-handle_call({set_logfunc,NewLogFunc},_) ->
- {ok, NewLogFunc, NewLogFunc};
-handle_call(_Query, _State) -> {error, bad_query}.
+
+handle_call({set_curr_func,{group,Group,Conf},Config}, State) ->
+ Parallel = case proplists:get_value(tc_group_properties, Config) of
+ undefined -> false;
+ Props -> lists:member(parallel, Props)
+ end,
+ {ok, ok, State#eh_state{curr_group = Group,
+ curr_func = Conf,
+ parallel_tcs = Parallel}};
+handle_call({set_curr_func,{group,undefined},_Config}, State) ->
+ {ok, ok, State#eh_state{curr_group = undefined,
+ curr_func = undefined,
+ parallel_tcs = false}};
+handle_call({set_curr_func,{Suite,Conf},_Config}, State) ->
+ {ok, ok, State#eh_state{curr_suite = Suite,
+ curr_func = Conf,
+ parallel_tcs = false}};
+handle_call({set_curr_func,undefined,_Config}, State) ->
+ {ok, ok, State#eh_state{curr_suite = undefined,
+ curr_func = undefined,
+ parallel_tcs = false}};
+handle_call({set_curr_func,TC,_Config}, State) ->
+ {ok, ok, State#eh_state{curr_func = TC}};
+
+handle_call({set_logfunc,NewLogFunc}, State) ->
+ {ok, NewLogFunc, State#eh_state{log_func = NewLogFunc}};
+
+handle_call({handle_remote_events,Bool}, State) ->
+ {ok, ok, State#eh_state{handle_remote_events = Bool}};
+
+handle_call(_Query, _State) ->
+ {error, bad_query}.
terminate(_State) ->
error_logger:delete_report_handler(?MODULE),
@@ -110,5 +191,48 @@ terminate(_State) ->
tag_event(Event) ->
{calendar:local_time(), Event}.
+set_curr_func(CurrFunc, Config) ->
+ gen_event:call(error_logger, ?MODULE, {set_curr_func, CurrFunc, Config}).
+
set_log_func(Func) ->
gen_event:call(error_logger, ?MODULE, {set_logfunc, Func}).
+
+handle_remote_events(Bool) ->
+ gen_event:call(error_logger, ?MODULE, {handle_remote_events, Bool}).
+
+%%%-----------------------------------------------------------------
+
+format_header(#eh_state{curr_suite = undefined,
+ curr_group = undefined,
+ curr_func = undefined}) ->
+ io_lib:format("System report", []);
+
+format_header(#eh_state{curr_suite = Suite,
+ curr_group = undefined,
+ curr_func = undefined}) ->
+ io_lib:format("System report during ~w", [Suite]);
+
+format_header(#eh_state{curr_suite = Suite,
+ curr_group = undefined,
+ curr_func = TcOrConf}) ->
+ io_lib:format("System report during ~w:~w/1",
+ [Suite,TcOrConf]);
+
+format_header(#eh_state{curr_suite = Suite,
+ curr_group = Group,
+ curr_func = Conf}) when Conf == init_per_group;
+ Conf == end_per_group ->
+ io_lib:format("System report during ~w:~w/2 for ~w",
+ [Suite,Conf,Group]);
+
+format_header(#eh_state{curr_suite = Suite,
+ curr_group = Group,
+ parallel_tcs = true}) ->
+ io_lib:format("System report during ~w in ~w",
+ [Group,Suite]);
+
+format_header(#eh_state{curr_suite = Suite,
+ curr_group = Group,
+ curr_func = TC}) ->
+ io_lib:format("System report during ~w:~w/1 in ~w",
+ [Suite,TC,Group]).
diff --git a/lib/common_test/test/Makefile b/lib/common_test/test/Makefile
index 9d2edcd653..085f19d023 100644
--- a/lib/common_test/test/Makefile
+++ b/lib/common_test/test/Makefile
@@ -51,6 +51,7 @@ MODULES= \
ct_master_SUITE \
ct_misc_1_SUITE \
ct_hooks_SUITE \
+ ct_pre_post_test_io_SUITE \
ct_netconfc_SUITE \
ct_basic_html_SUITE \
ct_auto_compile_SUITE \
diff --git a/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl b/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl
index 8fcd35e0a4..1d08ce167b 100644
--- a/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl
+++ b/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl
@@ -1,10 +1,21 @@
-%%% @author Peter Andersson <[email protected]>
-%%% @copyright (C) 2013, Peter Andersson
-%%% @doc
-%%%
-%%% @end
-%%% Created : 24 May 2013 by Peter Andersson <[email protected]>
-
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2012. 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(proto).
-compile(export_all).
diff --git a/lib/common_test/test/ct_hooks_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE.erl
index 796a0832d7..596bfe3ff0 100644
--- a/lib/common_test/test/ct_hooks_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE.erl
@@ -84,7 +84,7 @@ all(suite) ->
skip_post_suite_cth, recover_post_suite_cth, update_config_cth,
state_update_cth, options_cth, same_id_cth,
fail_n_skip_with_minimal_cth, prio_cth, no_config,
- data_dir
+ data_dir, cth_log
]
).
@@ -222,7 +222,32 @@ data_dir(Config) when is_list(Config) ->
do_test(data_dir, "ct_data_dir_SUITE.erl",
[verify_data_dir_cth],Config).
-
+cth_log(Config) when is_list(Config) ->
+ %% test that cth_log_redirect writes properly to
+ %% unexpected I/O log
+ StartOpts = do_test(cth_log, "cth_log_SUITE.erl", [], Config),
+ Logdir = proplists:get_value(logdir, StartOpts),
+ UnexpIoLogs =
+ filelib:wildcard(
+ filename:join(Logdir,
+ "ct_run*/cth.tests*/run*/unexpected_io.log.html")),
+ lists:foreach(
+ fun(UnexpIoLog) ->
+ {ok,Bin} = file:read_file(UnexpIoLog),
+ Ts = string:tokens(binary_to_list(Bin),[$\n]),
+ Matches = lists:foldl(fun([$=,$E,$R,$R,$O,$R|_], N) ->
+ N+1;
+ ([$L,$o,$g,$g,$e,$r|_], N) ->
+ N+1;
+ (_, N) -> N
+ end, 0, Ts),
+ ct:pal("~p matches in ~tp", [Matches,UnexpIoLog]),
+ if Matches > 10 -> ok;
+ true -> exit({no_unexpected_io_found,UnexpIoLog})
+ end
+ end, UnexpIoLogs),
+ ok.
+
%%%-----------------------------------------------------------------
%%% HELP FUNCTIONS
@@ -251,7 +276,8 @@ do_test(Tag, SuiteWildCard, CTHs, Config, Res, EC) ->
Opts),
TestEvents = events_to_check(Tag, EC),
- ok = ct_test_support:verify_events(TestEvents, Events, Config).
+ ok = ct_test_support:verify_events(TestEvents, Events, Config),
+ Opts.
setup(Test, Config) ->
Opts0 = ct_test_support:get_opts(Config),
@@ -1187,6 +1213,23 @@ test_events(data_dir) ->
{?eh,stop_logging,[]}
];
+test_events(cth_log) ->
+ [{?eh,start_logging,{'DEF','RUNDIR'}},
+ {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
+ {?eh,tc_start,{cth_log_SUITE,init_per_suite}},
+
+ {parallel,
+ [{?eh,tc_start,{ct_framework,{init_per_group,g1,[parallel]}}},
+ {?eh,tc_done,{ct_framework,{init_per_group,g1,[parallel]},ok}},
+ {?eh,test_stats,{30,0,{0,0}}},
+ {?eh,tc_start,{ct_framework,{end_per_group,g1,[parallel]}}},
+ {?eh,tc_done,{ct_framework,{end_per_group,g1,[parallel]},ok}}]},
+
+ {?eh,tc_done,{cth_log_SUITE,end_per_suite,ok}},
+ {?eh,test_done,{'DEF','STOP_TIME'}},
+ {?eh,stop_logging,[]}
+ ];
+
test_events(ok) ->
ok.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
new file mode 100644
index 0000000000..18dd07e87e
--- /dev/null
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
@@ -0,0 +1,124 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010-2011. 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(cth_log_SUITE).
+
+-compile(export_all).
+
+-include_lib("common_test/include/ct.hrl").
+
+%%--------------------------------------------------------------------
+%% @spec suite() -> Info
+%% Info = [tuple()]
+%% @end
+%%--------------------------------------------------------------------
+suite() ->
+ [{timetrap,{seconds,30}}].
+
+%%--------------------------------------------------------------------
+%% @spec init_per_suite(Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%% Config0 = Config1 = [tuple()]
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ Gen = spawn(fun() -> gen() end),
+ [{gen,Gen}|Config].
+
+%%--------------------------------------------------------------------
+%% @spec end_per_suite(Config0) -> void() | {save_config,Config1}
+%% Config0 = Config1 = [tuple()]
+%% @end
+%%--------------------------------------------------------------------
+end_per_suite(Config) ->
+ Gen = proplists:get_value(gen, Config),
+ exit(Gen, kill),
+ timer:sleep(100),
+ ok.
+
+%%--------------------------------------------------------------------
+%% @spec init_per_testcase(TestCase, Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%% TestCase = atom()
+%% Config0 = Config1 = [tuple()]
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+init_per_testcase(_TestCase, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% @spec end_per_testcase(TestCase, Config0) ->
+%% void() | {save_config,Config1} | {fail,Reason}
+%% TestCase = atom()
+%% Config0 = Config1 = [tuple()]
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% @spec groups() -> [Group]
+%% Group = {GroupName,Properties,GroupsAndTestCases}
+%% GroupName = atom()
+%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
+%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
+%% TestCase = atom()
+%% Shuffle = shuffle | {shuffle,{integer(),integer(),integer()}}
+%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
+%% repeat_until_any_ok | repeat_until_any_fail
+%% N = integer() | forever
+%% @end
+%%--------------------------------------------------------------------
+groups() ->
+ [{g1,[parallel,{repeat,10}],[tc1,tc2,tc3]}].
+
+%%--------------------------------------------------------------------
+%% @spec all() -> GroupsAndTestCases | {skip,Reason}
+%% GroupsAndTestCases = [{group,GroupName} | TestCase]
+%% GroupName = atom()
+%% TestCase = atom()
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+all() ->
+ [{group,g1}].
+
+tc1(_) ->
+ ct:sleep(100),
+ ok.
+tc2(_) ->
+ ct:sleep(100),
+ ok.
+tc3(_) ->
+ ct:sleep(100),
+ ok.
+
+%%%-----------------------------------------------------------------
+
+gen() ->
+ gen_loop(1).
+
+gen_loop(N) ->
+ ct:log("Logger iteration: ~p", [N]),
+ error_logger:error_report(N),
+ ct:sleep(200),
+ gen_loop(N+1).
diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE.erl
new file mode 100644
index 0000000000..84341a0b99
--- /dev/null
+++ b/lib/common_test/test/ct_pre_post_test_io_SUITE.erl
@@ -0,0 +1,252 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2012. 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: ct_pre_post_test_io_SUITE
+%%%
+%%% Description:
+%%%
+%%% Test that ct:log/2 printouts and error/progress reports that happen
+%%% before or after the test run are saved in the pre/post test IO log.
+%%%-------------------------------------------------------------------
+-module(ct_pre_post_test_io_SUITE).
+
+-compile(export_all).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+-define(eh, ct_test_support_eh).
+
+%%--------------------------------------------------------------------
+%% TEST SERVER CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+
+%%--------------------------------------------------------------------
+%% Description: Since Common Test starts another Test Server
+%% instance, the tests need to be performed on a separate node (or
+%% there will be clashes with logging processes etc).
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ DataDir = ?config(data_dir, Config),
+ CTH = filename:join(DataDir, "cth_ctrl.erl"),
+ ct:pal("Compiling ~p: ~p",
+ [CTH,compile:file(CTH,[{outdir,DataDir},debug_info])]),
+ ct_test_support:init_per_suite([{path_dirs,[DataDir]},
+ {start_sasl,true} | Config]).
+
+end_per_suite(Config) ->
+ ct_test_support:end_per_suite(Config).
+
+init_per_testcase(TestCase, Config) ->
+ ct_test_support:init_per_testcase(TestCase, Config).
+
+end_per_testcase(TestCase, Config) ->
+ ct_test_support:end_per_testcase(TestCase, Config).
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ [
+ pre_post_io
+ ].
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+%%%-----------------------------------------------------------------
+%%%
+pre_post_io(Config) ->
+ TC = pre_post_io,
+ DataDir = ?config(data_dir, Config),
+ Suite = filename:join(DataDir, "dummy_SUITE"),
+ {Opts,ERPid} = setup([{suite,Suite},{label,TC},{ct_hooks,[cth_ctrl]}],
+ Config),
+
+ %%!--------------------------------------------------------------------
+ %%! Note that error reports will not start showing up in the pre-test
+ %%! io log until handle_remote_events has been set to true (see below).
+ %%! The reason is that the error logger has its group leader on the
+ %%! test_server node (not the ct node) and cth_log_redirect ignores
+ %%! events with remote destination until told otherwise.
+ %%!--------------------------------------------------------------------
+
+ spawn(fun() ->
+ %% --- test run 1 ---
+ ct:sleep(3000),
+ ct_test_support:ct_rpc({cth_log_redirect,
+ handle_remote_events,
+ [true]}, Config),
+ ct:sleep(2000),
+ io:format(user, "Starting test run!~n", []),
+ ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config),
+ ct:sleep(6000),
+ io:format(user, "Finishing off!~n", []),
+ ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config),
+ %% --- test run 2 ---
+ ct:sleep(3000),
+ ct_test_support:ct_rpc({cth_log_redirect,
+ handle_remote_events,
+ [true]}, Config),
+ ct:sleep(2000),
+ io:format(user, "Starting test run!~n", []),
+ ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config),
+ ct:sleep(6000),
+ io:format(user, "Finishing off!~n", []),
+ ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config)
+ end),
+ ct_test_support:run(Opts, Config),
+ Events = ct_test_support:get_events(ERPid, Config),
+ ct_test_support:log_events(TC,
+ reformat(Events, ?eh),
+ ?config(priv_dir, Config),
+ Opts),
+ TestEvents = events_to_check(TC),
+ ok = ct_test_support:verify_events(TestEvents, Events, Config),
+
+ LogDirs = lists:flatmap(fun({_EH,#event{name=start_logging,data=Dir}}) ->
+ [Dir];
+ (_) ->
+ []
+ end, Events),
+ PrePostIoFiles =
+ [filename:join(LogDir, "misc_io.log.html") || LogDir <- LogDirs],
+ lists:foreach(
+ fun(PrePostIoFile) ->
+ ct:log("Reading Pre/Post Test IO Log file: ~ts", [PrePostIoFile]),
+ {ok,Bin} = file:read_file(PrePostIoFile),
+ Ts = string:tokens(binary_to_list(Bin),[$\n]),
+ PrePostIOEntries =
+ lists:foldl(fun([$L,$o,$g,$g,$e,$r|_],
+ {pre,PreLogN,PreErrN,0,0}) ->
+ {pre,PreLogN+1,PreErrN,0,0};
+ ([$=,$E,$R,$R,$O,$R|_],
+ {pre,PreLogN,PreErrN,0,0}) ->
+ {pre,PreLogN,PreErrN+1,0,0};
+ ([_,_,_,_,$P,$O,$S,$T,$-,$T,$E,$S,$T|_],
+ {pre,PreLogN,PreErrN,0,0}) ->
+ {post,PreLogN,PreErrN,0,0};
+ ([$L,$o,$g,$g,$e,$r|_],
+ {post,PreLogN,PreErrN,PostLogN,PostErrN}) ->
+ {post,PreLogN,PreErrN,PostLogN+1,PostErrN};
+ ([$=,$E,$R,$R,$O,$R|_],
+ {post,PreLogN,PreErrN,PostLogN,PostErrN}) ->
+ {post,PreLogN,PreErrN,PostLogN,PostErrN+1};
+ (_, Counters) ->
+ Counters
+ end, {pre,0,0,0,0}, Ts),
+ [_|Counters] = tuple_to_list(PrePostIOEntries),
+ ct:log("Entries in the Pre/Post Test IO Log: ~p", [Counters]),
+ case [C || C <- Counters, C < 2] of
+ [] ->
+ ok;
+ _ ->
+ exit("Not enough entries in the Pre/Post Test IO Log!")
+ end
+ end, PrePostIoFiles),
+
+ UnexpIoFiles =
+ [filelib:wildcard(
+ filename:join(LogDir,
+ "*dummy_SUITE.logs/run.*/"
+ "unexpected_io.log.html")) || LogDir <- LogDirs],
+ lists:foreach(
+ fun(UnexpIoFile) ->
+ ct:log("Reading Unexpected IO Log file: ~ts", [UnexpIoFile]),
+ {ok,Bin} = file:read_file(UnexpIoFile),
+ Ts = string:tokens(binary_to_list(Bin),[$\n]),
+ UnexpIOEntries =
+ lists:foldl(fun([$L,$o,$g,$g,$e,$r|_], [LogN,ErrN]) ->
+ [LogN+1,ErrN];
+ ([$=,$E,$R,$R,$O,$R|_], [LogN,ErrN]) ->
+ [LogN,ErrN+1];
+ (_, Counters) -> Counters
+ end, [0,0], Ts),
+ ct:log("Entries in the Unexpected IO Log: ~p", [UnexpIOEntries]),
+ case [N || N <- UnexpIOEntries, N < 2] of
+ [] ->
+ ok;
+ _ ->
+ exit("Not enough entries in the Unexpected IO Log!")
+ end
+ end, UnexpIoFiles),
+ ok.
+
+%%%-----------------------------------------------------------------
+%%% HELP FUNCTIONS
+%%%-----------------------------------------------------------------
+
+setup(Test, Config) ->
+ Opts0 = ct_test_support:get_opts(Config),
+ Level = ?config(trace_level, Config),
+ EvHArgs = [{cbm,ct_test_support},{trace_level,Level}],
+ Opts = Opts0 ++ [{event_handler,{?eh,EvHArgs}}|Test],
+ ERPid = ct_test_support:start_event_receiver(Config),
+ {Opts,ERPid}.
+
+reformat(Events, EH) ->
+ ct_test_support:reformat(Events, EH).
+
+%%%-----------------------------------------------------------------
+%%% TEST EVENTS
+%%%-----------------------------------------------------------------
+
+events_to_check(pre_post_io) ->
+ [
+ {?eh,start_logging,{'DEF','RUNDIR'}},
+ {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
+ {?eh,start_info,{1,1,7}},
+ {?eh,tc_start,{dummy_SUITE,init_per_suite}},
+ {?eh,tc_done,{dummy_SUITE,init_per_suite,ok}},
+ {parallel,
+ [{?eh,tc_start,{dummy_SUITE,{init_per_group,g1,[parallel]}}},
+ {?eh,tc_done,
+ {dummy_SUITE,{init_per_group,g1,[parallel]},ok}},
+ {?eh,tc_start,{dummy_SUITE,tc1}},
+ {?eh,tc_start,{dummy_SUITE,tc2}},
+ {?eh,tc_start,{dummy_SUITE,tc3}},
+ {?eh,tc_done,{dummy_SUITE,tc2,ok}},
+ {?eh,tc_done,{dummy_SUITE,tc1,ok}},
+ {?eh,tc_done,{dummy_SUITE,tc3,ok}},
+ {?eh,test_stats,{1,0,{0,0}}},
+ {?eh,test_stats,{2,0,{0,0}}},
+ {?eh,test_stats,{3,0,{0,0}}},
+ {?eh,tc_start,{dummy_SUITE,{end_per_group,g1,[parallel]}}},
+ {?eh,tc_done,{dummy_SUITE,{end_per_group,g1,[parallel]},ok}}]},
+ {?eh,tc_start,{dummy_SUITE,tc1}},
+ {?eh,tc_done,{dummy_SUITE,tc1,ok}},
+ {?eh,test_stats,{4,0,{0,0}}},
+ {?eh,tc_start,{dummy_SUITE,tc2}},
+ {?eh,tc_done,{dummy_SUITE,tc2,ok}},
+ {?eh,test_stats,{5,0,{0,0}}},
+ [{?eh,tc_start,{dummy_SUITE,{init_per_group,g2,[]}}},
+ {?eh,tc_done,{dummy_SUITE,{init_per_group,g2,[]},ok}},
+ {?eh,tc_start,{dummy_SUITE,tc4}},
+ {?eh,tc_done,{dummy_SUITE,tc4,ok}},
+ {?eh,test_stats,{6,0,{0,0}}},
+ {?eh,tc_start,{dummy_SUITE,tc5}},
+ {?eh,tc_done,{dummy_SUITE,tc5,ok}},
+ {?eh,test_stats,{7,0,{0,0}}},
+ {?eh,tc_start,{dummy_SUITE,{end_per_group,g2,[]}}},
+ {?eh,tc_done,{dummy_SUITE,{end_per_group,g2,[]},ok}}],
+ {?eh,tc_start,{dummy_SUITE,end_per_suite}},
+ {?eh,tc_done,{dummy_SUITE,end_per_suite,ok}},
+ {?eh,test_done,{'DEF','STOP_TIME'}},
+ {?eh,stop_logging,[]}].
diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl
new file mode 100644
index 0000000000..c8c08a5735
--- /dev/null
+++ b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl
@@ -0,0 +1,107 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2012. 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(cth_ctrl).
+
+-export([proceed/0,
+ init/2, terminate/1]).
+
+-include_lib("common_test/include/ct.hrl").
+
+%%%===================================================================
+%%% API
+%%%===================================================================
+
+proceed() ->
+ ?MODULE ! proceed.
+
+%%--------------------------------------------------------------------
+%% Hook functions
+%%--------------------------------------------------------------------
+init(_Id, _Opts) ->
+ case lists:keyfind(sasl, 1, application:which_applications()) of
+ false ->
+ exit(sasl_not_started);
+ _Else ->
+ ok
+ end,
+ WhoAmI = self(),
+ WhoAmI = whereis(?CT_HOOK_INIT_PROCESS),
+ DispPid = spawn_link(fun() -> dispatcher(WhoAmI) end),
+ register(?MODULE, DispPid),
+ ct:pal("~n~n+++ Startup of ~w on ~p finished, "
+ "call ~w:proceed() to run tests...~n",
+ [?MODULE,node(),?MODULE]),
+ start_external_logger(cth_logger),
+ receive
+ {?MODULE,proceed} -> ok
+ after
+ 10000 ->
+ ok
+ end,
+ {ok,[],ct_last}.
+
+terminate(_State) ->
+ WhoAmI = whereis(?CT_HOOK_TERMINATE_PROCESS),
+ WhoAmI = self(),
+ ct:pal("~n~n+++ Tests finished, call ~w:proceed() to shut down...~n",
+ [?MODULE]),
+ receive
+ {?MODULE,proceed} -> ok
+ after
+ 10000 ->
+ ok
+ end,
+ stop_external_logger(cth_logger),
+ stop_dispatcher(),
+ ok.
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================
+
+start_external_logger(Name) ->
+ case whereis(Name) of
+ undefined -> ok;
+ Pid -> exit(Pid, kill)
+ end,
+ spawn(fun() -> init_logger(Name) end).
+
+stop_external_logger(Name) ->
+ catch exit(whereis(Name), kill).
+
+init_logger(Name) ->
+ register(Name, self()),
+ logger_loop(1).
+
+logger_loop(N) ->
+ ct:log("Logger iteration: ~p", [N]),
+ error_logger:error_report(N),
+ timer:sleep(250),
+ logger_loop(N+1).
+
+%%%-----------------------------------------------------------------
+
+dispatcher(SendTo) ->
+ receive Msg -> SendTo ! {?MODULE,Msg} end,
+ dispatcher(SendTo).
+
+stop_dispatcher() ->
+ catch exit(whereis(?MODULE), kill).
+
+
diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl
new file mode 100644
index 0000000000..ac9c4efd31
--- /dev/null
+++ b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl
@@ -0,0 +1,132 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2012. 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(dummy_SUITE).
+
+-compile(export_all).
+
+-include_lib("common_test/include/ct.hrl").
+
+%%--------------------------------------------------------------------
+%% @spec suite() -> Info
+%% Info = [tuple()]
+%% @end
+%%--------------------------------------------------------------------
+suite() ->
+ [{timetrap,{seconds,30}}].
+
+%%--------------------------------------------------------------------
+%% @spec init_per_suite(Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%% Config0 = Config1 = [tuple()]
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% @spec end_per_suite(Config0) -> void() | {save_config,Config1}
+%% Config0 = Config1 = [tuple()]
+%% @end
+%%--------------------------------------------------------------------
+end_per_suite(_Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% @spec init_per_group(GroupName, Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%% GroupName = atom()
+%% Config0 = Config1 = [tuple()]
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+init_per_group(_GroupName, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% @spec end_per_group(GroupName, Config0) ->
+%% void() | {save_config,Config1}
+%% GroupName = atom()
+%% Config0 = Config1 = [tuple()]
+%% @end
+%%--------------------------------------------------------------------
+end_per_group(_GroupName, _Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% @spec init_per_testcase(TestCase, Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%% TestCase = atom()
+%% Config0 = Config1 = [tuple()]
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+init_per_testcase(_TestCase, Config) ->
+ ct:sleep(500),
+ Config.
+
+%%--------------------------------------------------------------------
+%% @spec end_per_testcase(TestCase, Config0) ->
+%% void() | {save_config,Config1} | {fail,Reason}
+%% TestCase = atom()
+%% Config0 = Config1 = [tuple()]
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% @spec groups() -> [Group]
+%% Group = {GroupName,Properties,GroupsAndTestCases}
+%% GroupName = atom()
+%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
+%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
+%% TestCase = atom()
+%% Shuffle = shuffle | {shuffle,{integer(),integer(),integer()}}
+%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
+%% repeat_until_any_ok | repeat_until_any_fail
+%% N = integer() | forever
+%% @end
+%%--------------------------------------------------------------------
+groups() ->
+ [{g1,[parallel],[tc1,tc2,tc3]},
+ {g2,[],[tc4,tc5]}].
+
+%%--------------------------------------------------------------------
+%% @spec all() -> GroupsAndTestCases | {skip,Reason}
+%% GroupsAndTestCases = [{group,GroupName} | TestCase]
+%% GroupName = atom()
+%% TestCase = atom()
+%% Reason = term()
+%% @end
+%%--------------------------------------------------------------------
+all() ->
+ [{group,g1},tc1,tc2,{group,g2}].
+
+tc1(_C) ->
+ ok.
+tc2(_C) ->
+ ok.
+tc3(_C) ->
+ ok.
+tc4(_C) ->
+ ok.
+tc5(_C) ->
+ ok.
diff --git a/lib/common_test/test/ct_test_support.erl b/lib/common_test/test/ct_test_support.erl
index 6bcac12326..67e430f821 100644
--- a/lib/common_test/test/ct_test_support.erl
+++ b/lib/common_test/test/ct_test_support.erl
@@ -36,7 +36,9 @@
verify_events/3, verify_events/4, reformat/2, log_events/4,
join_abs_dirs/2]).
--export([ct_test_halt/1]).
+-export([start_slave/3, slave_stop/1]).
+
+-export([ct_test_halt/1, ct_rpc/2]).
-include_lib("kernel/include/file.hrl").
@@ -63,13 +65,16 @@ init_per_suite(Config, Level) ->
_ ->
ok
end,
-
start_slave(Config, Level).
-start_slave(Config,Level) ->
+start_slave(Config, Level) ->
+ start_slave(ct, Config, Level).
+
+start_slave(NodeName, Config, Level) ->
[_,Host] = string:tokens(atom_to_list(node()), "@"),
- test_server:format(0, "Trying to start ~s~n", ["ct@"++Host]),
- case slave:start(Host, ct, []) of
+ test_server:format(0, "Trying to start ~s~n",
+ [atom_to_list(NodeName)++"@"++Host]),
+ case slave:start(Host, NodeName, []) of
{error,Reason} ->
test_server:fail(Reason);
{ok,CTNode} ->
@@ -77,7 +82,7 @@ start_slave(Config,Level) ->
IsCover = test_server:is_cover(),
if IsCover ->
cover:start(CTNode);
- true->
+ true ->
ok
end,
@@ -97,6 +102,14 @@ start_slave(Config,Level) ->
test_server:format(Level, "Dirs added to code path (on ~w):~n",
[CTNode]),
[io:format("~s~n", [D]) || D <- PathDirs],
+
+ case proplists:get_value(start_sasl, Config) of
+ true ->
+ rpc:call(CTNode, application, start, [sasl]),
+ test_server:format(Level, "SASL started on ~w~n", [CTNode]);
+ _ ->
+ ok
+ end,
TraceFile = filename:join(DataDir, "ct.trace"),
case file:read_file_info(TraceFile) of
@@ -372,6 +385,16 @@ wait_for_ct_stop(Retries, CTNode) ->
end.
%%%-----------------------------------------------------------------
+%%% ct_rpc/1
+ct_rpc({M,F,A}, Config) ->
+ CTNode = proplists:get_value(ct_node, Config),
+ Level = proplists:get_value(trace_level, Config),
+ test_server:format(Level, "~nCalling ~w:~w(~p) on ~p...",
+ [M,F,A, CTNode]),
+ rpc:call(CTNode, M, F, A).
+
+
+%%%-----------------------------------------------------------------
%%% EVENT HANDLING
handle_event(EH, Event) ->
diff --git a/lib/common_test/test/ct_verbosity_SUITE.erl b/lib/common_test/test/ct_verbosity_SUITE.erl
index 32488b1db9..1aa71953ec 100644
--- a/lib/common_test/test/ct_verbosity_SUITE.erl
+++ b/lib/common_test/test/ct_verbosity_SUITE.erl
@@ -53,9 +53,19 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
ct_test_support:end_per_suite(Config).
+init_per_testcase(no_crashing, Config) ->
+ Opts = ct_test_support:start_slave(ctX, Config, 50),
+ XNode = proplists:get_value(ct_node, Opts),
+ ct:pal("Node ~p started!", [XNode]),
+ [{xnode,XNode} | Config];
init_per_testcase(TestCase, Config) ->
ct_test_support:init_per_testcase(TestCase, Config).
+end_per_testcase(no_crashing, Config) ->
+ XNode = proplists:get_value(xnode, Config),
+ ct_test_support:slave_stop(XNode),
+ ct:pal("Node ~p stopped!", [XNode]),
+ ok;
end_per_testcase(TestCase, Config) ->
ct_test_support:end_per_testcase(TestCase, Config).
@@ -72,7 +82,8 @@ all() ->
combine_categories,
testspec_only,
merge_with_testspec,
- possible_deadlock
+ possible_deadlock,
+ no_crashing
].
%%--------------------------------------------------------------------
@@ -189,6 +200,19 @@ possible_deadlock(Config) ->
%%%-----------------------------------------------------------------
+%%%
+no_crashing(Config) ->
+ XNode = proplists:get_value(xnode, Config),
+ ok = rpc:call(XNode, ct, print, ["hello",[]]),
+ ok = rpc:call(XNode, ct, pal, ["hello",[]]),
+ ok = rpc:call(XNode, ct, log, ["hello",[]]),
+ Data = io_lib:format("hello", []),
+ {badrpc,{'EXIT',{noproc,_}}} =
+ (catch rpc:call(XNode, test_server_io, print_unexpected, [Data])),
+ ok.
+
+
+%%%-----------------------------------------------------------------
%%% HELP FUNCTIONS
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/vsn.mk b/lib/common_test/vsn.mk
index d60b4ba675..c810a0d98d 100644
--- a/lib/common_test/vsn.mk
+++ b/lib/common_test/vsn.mk
@@ -1 +1 @@
-COMMON_TEST_VSN = 1.7.2
+COMMON_TEST_VSN = 1.7.3
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml
index 96907f6b10..73d75851cf 100644
--- a/lib/compiler/doc/src/compile.xml
+++ b/lib/compiler/doc/src/compile.xml
@@ -859,6 +859,10 @@ pi() -> 3.1416.
{ErrorLine, Module, ErrorDescriptor}
</code>
+ <p><c>ErrorLine</c> will be the atom <c>none</c> if the error does
+ not correspond to a specific line (e.g. if the source file does
+ not exist).</p>
+
<p>A string describing the error is obtained with the following
call:</p>
<code>
diff --git a/lib/compiler/doc/src/notes.xml b/lib/compiler/doc/src/notes.xml
index 837fcf4368..eb5fa8b398 100644
--- a/lib/compiler/doc/src/notes.xml
+++ b/lib/compiler/doc/src/notes.xml
@@ -31,6 +31,67 @@
<p>This document describes the changes made to the Compiler
application.</p>
+<section><title>Compiler 4.9.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Expressions such as <c>'B = is_integer(V), if B and B
+ -&gt; ok end'</c> would crash the compiler.</p>
+ <p>
+ Own Id: OTP-11240</p>
+ </item>
+ <item>
+ <p>
+ <c>compile:file2/2</c> with the option
+ <c>report_errors</c> could return ErrorInfo tuples with
+ only two elements, while the documentation says that the
+ ErrorInfo tuple always has three elements. Also updated
+ the documentation to add that the first element may be
+ '<c>none</c>' if no line number is applicable.</p>
+ <p>
+ Own Id: OTP-11304 Aux Id: seq12412 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fix matching of floating point middle-endian machines.
+ Thanks to Johannes Weissl.</p>
+ <p>
+ Own Id: OTP-11201</p>
+ </item>
+ <item>
+ <p>
+ Restrict inlining of local fun references. Thanks to
+ Anthony Ramine.</p>
+ <p>
+ Own Id: OTP-11211</p>
+ </item>
+ <item>
+ <p>
+ Silence a misleading warning with some comprehensions.
+ Thanks to Anthony Ramine.</p>
+ <p>
+ Own Id: OTP-11212</p>
+ </item>
+ <item>
+ <p>
+ Forbid returning a match context in beam_validator.
+ Thanks to Anthony Ramine.</p>
+ <p>
+ Own Id: OTP-11247</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Compiler 4.9.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index cf5455dfde..124abd13c1 100644
--- a/lib/compiler/src/beam_bool.erl
+++ b/lib/compiler/src/beam_bool.erl
@@ -425,6 +425,9 @@ bopt_tree([], Forest, Pre) ->
safe_bool_op(N, Ar) ->
erl_internal:new_type_test(N, Ar) orelse erl_internal:comp_op(N, Ar).
+bopt_bool_args([V0,V0], Forest0) ->
+ {V,Forest} = bopt_bool_arg(V0, Forest0),
+ {[V,V],Forest};
bopt_bool_args(As, Forest) ->
mapfoldl(fun bopt_bool_arg/2, Forest, As).
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index eb72290306..70279ab658 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -628,6 +628,7 @@ valfun_4({gc_bif,Op,{f,Fail},Live,Src,Dst}, #vst{current=St0}=Vst0) ->
Type = bif_type(Op, Src, Vst),
set_type_reg(Type, Dst, Vst);
valfun_4(return, #vst{current=#st{numy=none}}=Vst) ->
+ assert_term({x,0}, Vst),
kill_state(Vst);
valfun_4(return, #vst{current=#st{numy=NumY}}) ->
error({stack_frame,NumY});
diff --git a/lib/compiler/src/cerl_inline.erl b/lib/compiler/src/cerl_inline.erl
index 2e7554c1ff..c6de63c69f 100644
--- a/lib/compiler/src/cerl_inline.erl
+++ b/lib/compiler/src/cerl_inline.erl
@@ -52,7 +52,7 @@
clause_pats/1, clause_vars/1, concrete/1, cons_hd/1,
cons_tl/1, data_arity/1, data_es/1, data_type/1,
fun_body/1, fun_vars/1, get_ann/1, int_val/1,
- is_c_atom/1, is_c_cons/1, is_c_fun/1, is_c_int/1,
+ is_c_atom/1, is_c_cons/1, is_c_fname/1, is_c_int/1,
is_c_list/1, is_c_seq/1, is_c_tuple/1, is_c_var/1,
is_data/1, is_literal/1, is_literal_term/1, let_arg/1,
let_body/1, let_vars/1, letrec_body/1, letrec_defs/1,
@@ -1578,7 +1578,7 @@ make_let_binding_1(R, E, S) ->
%% completely.
copy(R, Opnd, E, Ctxt, Env, S) ->
- case is_c_var(E) of
+ case is_c_var(E) andalso not is_c_fname(E) of
true ->
%% The operand reduces to another variable - get its
%% ref-structure and attempt to propagate further.
@@ -1628,12 +1628,12 @@ copy_var(R, Ctxt, Env, S) ->
end.
copy_1(R, Opnd, E, Ctxt, Env, S) ->
- %% Fun-expression (lambdas) are a bit special; they are copyable,
- %% but should preferably not be duplicated, so they should not be
- %% copy propagated except into application contexts, where they can
- %% be inlined.
- case is_c_fun(E) of
- true ->
+ case type(E) of
+ 'fun' ->
+ %% Fun-expression (lambdas) are a bit special; they are copyable,
+ %% but should preferably not be duplicated, so they should not be
+ %% copy propagated except into application contexts, where they can
+ %% be inlined.
case Ctxt of
#app{} ->
%% First test if the operand is "outer-pending"; if
@@ -1649,7 +1649,28 @@ copy_1(R, Opnd, E, Ctxt, Env, S) ->
_ ->
residualize_var(R, S)
end;
- false ->
+ var ->
+ %% Variables at this point only refer to local functions; they are
+ %% copyable but can't appear in guards, so they should not be
+ %% copy propagated except into application contexts, where they can
+ %% be inlined.
+ case Ctxt of
+ #app{} ->
+ %% First test if the operand is "outer-pending"; if
+ %% so, don't inline.
+ case st__test_outer_pending(Opnd#opnd.loc, S) of
+ false ->
+ R1 = env__get(var_name(E), Opnd#opnd.env),
+ copy_var(R1, Ctxt, Env, S);
+ true ->
+ %% Cyclic reference forced inlining to stop
+ %% (avoiding infinite unfolding).
+ residualize_var(R, S)
+ end;
+ _ ->
+ residualize_var(R, S)
+ end;
+ _ ->
%% We have no other cases to handle here
residualize_var(R, S)
end.
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 2ca403de54..802e3dfa2f 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -41,7 +41,8 @@
-type option() :: atom() | {atom(), term()} | {'d', atom(), term()}.
--type err_info() :: {erl_scan:line(), module(), term()}. %% ErrorDescriptor
+-type err_info() :: {erl_scan:line() | 'none',
+ module(), term()}. %% ErrorDescriptor
-type errors() :: [{file:filename(), [err_info()]}].
-type warnings() :: [{file:filename(), [err_info()]}].
-type mod_ret() :: {'ok', module()}
@@ -1290,10 +1291,10 @@ native_compile_1(St) ->
{error,R} ->
case IgnoreErrors of
true ->
- Ws = [{St#compile.ifile,[{?MODULE,{native,R}}]}],
+ Ws = [{St#compile.ifile,[{none,?MODULE,{native,R}}]}],
{ok,St#compile{warnings=St#compile.warnings ++ Ws}};
false ->
- Es = [{St#compile.ifile,[{?MODULE,{native,R}}]}],
+ Es = [{St#compile.ifile,[{none,?MODULE,{native,R}}]}],
{error,St#compile{errors=St#compile.errors ++ Es}}
end
catch
@@ -1302,7 +1303,7 @@ native_compile_1(St) ->
case IgnoreErrors of
true ->
Ws = [{St#compile.ifile,
- [{?MODULE,{native_crash,R,Stk}}]}],
+ [{none,?MODULE,{native_crash,R,Stk}}]}],
{ok,St#compile{warnings=St#compile.warnings ++ Ws}};
false ->
erlang:raise(Class, R, Stk)
@@ -1349,7 +1350,7 @@ save_binary(#compile{module=Mod,ofile=Outfile,
save_binary_1(St);
_ ->
Es = [{St#compile.ofile,
- [{?MODULE,{module_name,Mod,Base}}]}],
+ [{none,?MODULE,{module_name,Mod,Base}}]}],
{error,St#compile{errors=St#compile.errors ++ Es}}
end
end.
@@ -1363,20 +1364,20 @@ save_binary_1(St) ->
ok ->
{ok,St};
{error,RenameError} ->
- Es0 = [{Ofile,[{?MODULE,{rename,Tfile,Ofile,
- RenameError}}]}],
+ Es0 = [{Ofile,[{none,?MODULE,{rename,Tfile,Ofile,
+ RenameError}}]}],
Es = case file:delete(Tfile) of
ok -> Es0;
{error,DeleteError} ->
Es0 ++
[{Ofile,
- [{?MODULE,{delete_temp,Tfile,
- DeleteError}}]}]
+ [{none,?MODULE,{delete_temp,Tfile,
+ DeleteError}}]}]
end,
{error,St#compile{errors=St#compile.errors ++ Es}}
end;
{error,_Error} ->
- Es = [{Tfile,[{compile,write_error}]}],
+ Es = [{Tfile,[{none,compile,write_error}]}],
{error,St#compile{errors=St#compile.errors ++ Es}}
end.
@@ -1419,6 +1420,9 @@ report_warnings(#compile{options=Opts,warnings=Ws0}) ->
false -> ok
end.
+format_message(F, P, [{none,Mod,E}|Es]) ->
+ M = {none,io_lib:format("~ts: ~s~ts\n", [F,P,Mod:format_error(E)])},
+ [M|format_message(F, P, Es)];
format_message(F, P, [{{Line,Column}=Loc,Mod,E}|Es]) ->
M = {{F,Loc},io_lib:format("~ts:~w:~w ~s~ts\n",
[F,Line,Column,P,Mod:format_error(E)])},
@@ -1428,12 +1432,17 @@ format_message(F, P, [{Line,Mod,E}|Es]) ->
[F,Line,P,Mod:format_error(E)])},
[M|format_message(F, P, Es)];
format_message(F, P, [{Mod,E}|Es]) ->
+ %% Not documented and not expected to be used any more, but
+ %% keep a while just in case.
M = {none,io_lib:format("~ts: ~s~ts\n", [F,P,Mod:format_error(E)])},
[M|format_message(F, P, Es)];
format_message(_, _, []) -> [].
%% list_errors(File, ErrorDescriptors) -> ok
+list_errors(F, [{none,Mod,E}|Es]) ->
+ io:fwrite("~ts: ~ts\n", [F,Mod:format_error(E)]),
+ list_errors(F, Es);
list_errors(F, [{{Line,Column},Mod,E}|Es]) ->
io:fwrite("~ts:~w:~w: ~ts\n", [F,Line,Column,Mod:format_error(E)]),
list_errors(F, Es);
@@ -1441,6 +1450,8 @@ list_errors(F, [{Line,Mod,E}|Es]) ->
io:fwrite("~ts:~w: ~ts\n", [F,Line,Mod:format_error(E)]),
list_errors(F, Es);
list_errors(F, [{Mod,E}|Es]) ->
+ %% Not documented and not expected to be used any more, but
+ %% keep a while just in case.
io:fwrite("~ts: ~ts\n", [F,Mod:format_error(E)]),
list_errors(F, Es);
list_errors(_F, []) -> ok.
diff --git a/lib/compiler/src/core_lint.erl b/lib/compiler/src/core_lint.erl
index 1e8983f594..67d37ff1fc 100644
--- a/lib/compiler/src/core_lint.erl
+++ b/lib/compiler/src/core_lint.erl
@@ -68,7 +68,7 @@
| {'undefined_function', fa(), fa()}
| {'tail_segment_not_at_end', fa()}.
--type error() :: {module(), err_desc()}.
+-type error() :: {'none', module(), err_desc()}.
-type warning() :: {module(), term()}.
%%-----------------------------------------------------------------------
@@ -162,7 +162,7 @@ return_status(St) ->
%% add_warning(ErrorDescriptor, State) -> State'
%% Note that we don't use line numbers here.
-add_error(E, St) -> St#lint{errors=[{?MODULE,E}|St#lint.errors]}.
+add_error(E, St) -> St#lint{errors=[{none,?MODULE,E}|St#lint.errors]}.
%%add_warning(W, St) -> St#lint{warnings=[{none,core_lint,W}|St#lint.warnings]}.
diff --git a/lib/compiler/src/genop.tab b/lib/compiler/src/genop.tab
index 75ac91907a..ebc9b1c85b 100644..100755
--- a/lib/compiler/src/genop.tab
+++ b/lib/compiler/src/genop.tab
@@ -23,45 +23,148 @@ BEAM_FORMAT_NUMBER=0
# arity or semantics, the format number above must be bumped.
#
+## @spec label Lbl
+## @doc Specify a module local label.
+## Label gives this code address a name (Lbl) and marks the start of
+## a basic block.
1: label/1
+
+## @spec func_info M F A
+## @doc Define a function M:F/A
2: func_info/3
+
3: int_code_end/0
#
# Function and BIF calls.
#
+
+## @spec call Arity Label
+## @doc Call the function at Label.
+## Save the next instruction as the return address in the CP register.
4: call/2
+
+## @spec call_last Arity Label Dellocate
+## @doc Deallocate and do a tail recursive call to the function at Label.
+## Do not update the CP register.
+## Before the call deallocate Deallocate words of stack.
5: call_last/3
+
+## @spec call_only Arity Label
+## @doc Do a tail recursive call to the function at Label.
+## Do not update the CP register.
6: call_only/2
+## @spec call_ext Arity Destination
+## @doc Call the function of arity Arity pointed to by Destination.
+## Save the next instruction as the return address in the CP register.
7: call_ext/2
+
+## @spec call_ext_last Arity Destination Deallocate
+## @doc Deallocate and do a tail call to function of arity Arity
+## pointed to by Destination.
+## Do not update the CP register.
+## Deallocate Deallocate words from the stack before the call.
8: call_ext_last/3
+## @spec bif0 Bif Reg
+## @doc Call the bif Bif and store the result in Reg.
9: bif0/2
+
+## @spec bif1 Lbl Bif Arg Reg
+## @doc Call the bif Bif with the argument Arg, and store the result in Reg.
+## On failure jump to Lbl.
10: bif1/4
+
+## @spec bif2 Lbl Bif Arg1 Arg2 Reg
+## @doc Call the bif Bif with the arguments Arg1 and Arg2,
+## and store the result in Reg.
+## On failure jump to Lbl.
11: bif2/5
#
# Allocating, deallocating and returning.
#
+
+## @spec allocate StackNeed Live
+## @doc Allocate space for StackNeed words on the stack. If a GC is needed
+## during allocation there are Live number of live X registers.
+## Also save the continuation pointer (CP) on the stack.
12: allocate/2
+
+## @spec allocate_heap StackNeed HeapNeed Live
+## @doc Allocate space for StackNeed words on the stack and ensure there is
+## space for HeapNeed words on the heap. If a GC is needed
+## save Live number of X registers.
+## Also save the continuation pointer (CP) on the stack.
13: allocate_heap/3
+
+## @spec allocate_zero StackNeed Live
+## @doc Allocate space for StackNeed words on the stack. If a GC is needed
+## during allocation there are Live number of live X registers.
+## Clear the new stack words. (By writing NIL.)
+## Also save the continuation pointer (CP) on the stack.
14: allocate_zero/2
+
+## @spec allocate_heap_zero StackNeed HeapNeed Live
+## @doc Allocate space for StackNeed words on the stack and HeapNeed words
+## on the heap. If a GC is needed
+## during allocation there are Live number of live X registers.
+## Clear the new stack words. (By writing NIL.)
+## Also save the continuation pointer (CP) on the stack.
15: allocate_heap_zero/3
+
+## @spec test_heap HeapNeed Live
+## @doc Ensure there is space for HeapNeed words on the heap. If a GC is needed
+## save Live number of X registers.
16: test_heap/2
+
+## @spec init N
+## @doc Clear the Nth stack word. (By writing NIL.)
17: init/1
+
+## @spec deallocate N
+## @doc Restore the continuation pointer (CP) from the stack and deallocate
+## N+1 words from the stack (the + 1 is for the CP).
18: deallocate/1
+
+## @spec return
+## @doc Return to the address in the continuation pointer (CP).
19: return/0
#
# Sending & receiving.
#
+## @spec send
+## @doc Send argument in x(0) as a message to the destination process in x(0).
+## The message in x(1) ends up as the result of the send in x(0).
20: send/0
+
+## @spec remove_message
+## @doc Unlink the current message from the message queue and store a
+## pointer to the message in x(0). Remove any timeout.
21: remove_message/0
+
+## @spec timeout
+## @doc Reset the save point of the mailbox and clear the timeout flag.
22: timeout/0
+
+## @spec loop_rec Label Source
+## @doc Loop over the message queue, if it is empty jump to Label.
23: loop_rec/2
+
+## @spec loop_rec_end Label
+## @doc Advance the save pointer to the next message and jump back to Label.
24: loop_rec_end/1
+
+## @spec wait Label
+## @doc Suspend the processes and set the entry point to the beginning of the
+## receive loop at Label.
25: wait/1
+
+## @spec wait_timeout Lable Time
+## @doc Sets up a timeout of Time milllisecons and saves the address of the
+## following instruction as the entry point if the timeout triggers.
26: wait_timeout/2
#
@@ -83,36 +186,106 @@ BEAM_FORMAT_NUMBER=0
#
# Comparision operators.
#
+
+## @spec is_lt Lbl Arg1 Arg2
+## @doc Compare two terms and jump to Lbl if Arg1 is not less than Arg2.
39: is_lt/3
+
+## @spec is_ge Lbl Arg1 Arg2
+## @doc Compare two terms and jump to Lbl if Arg1 is less than Arg2.
40: is_ge/3
+
+## @spec is_eq Lbl Arg1 Arg2
+## @doc Compare two terms and jump to Lbl if Arg1 is not (numerically) equal to Arg2.
41: is_eq/3
+
+## @spec is_ne Lbl Arg1 Arg2
+## @doc Compare two terms and jump to Lbl if Arg1 is (numerically) equal to Arg2.
42: is_ne/3
+
+## @spec is_eq_exact Lbl Arg1 Arg2
+## @doc Compare two terms and jump to Lbl if Arg1 is not exactly equal to Arg2.
43: is_eq_exact/3
+
+## @spec is_ne_exact Lbl Arg1 Arg2
+## @doc Compare two terms and jump to Lbl if Arg1 is exactly equal to Arg2.
44: is_ne_exact/3
#
# Type tests.
#
+
+## @spec is_integer Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not an integer.
45: is_integer/2
+
+## @spec is_float Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a float.
46: is_float/2
+
+## @spec is_number Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a number.
47: is_number/2
+
+## @spec is_atom Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not an atom.
48: is_atom/2
+
+## @spec is_pid Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a pid.
49: is_pid/2
+
+## @spec is_reference Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a reference.
50: is_reference/2
+
+## @spec is_port Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a port.
51: is_port/2
+
+## @spec is_nil Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not nil.
52: is_nil/2
+
+## @spec is_binary Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a binary.
53: is_binary/2
+
54: -is_constant/2
+
+## @spec is_list Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a cons or nil.
55: is_list/2
+
+## @spec is_nonempty_list Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a cons.
56: is_nonempty_list/2
+
+## @spec is_tuple Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a tuple.
57: is_tuple/2
+
+## @spec test_arity Lbl Arg1 Arity
+## @doc Test the arity of (the tuple in) Arg1 and jump
+## to Lbl if it is not equal to Arity.
58: test_arity/3
#
# Indexing & jumping.
#
+
+## @spec select_val Arg FailLabel Destinations
+## @doc Jump to the destination label corresponding to Arg
+## in the Destinations list, if no arity matches, jump to FailLabel.
59: select_val/3
+
+## @spec select_tuple_arity Tuple FailLabel Destinations
+## @doc Check the arity of the tuple Tuple and jump to the corresponding
+## destination label, if no arity matches, jump to FailLabel.
60: select_tuple_arity/3
+
+## @spec jump Label
+## @doc Jump to Label.
61: jump/1
#
@@ -124,9 +297,26 @@ BEAM_FORMAT_NUMBER=0
#
# Moving, extracting, modifying.
#
+
+## @spec move Source Destination
+## @doc Move the source Source (a literal or a register) to
+## the destination register Destination.
64: move/2
+
+## @spec get_list Source Head Tail
+## @doc Get the head and tail (or car and cdr) parts of a list
+## (a cons cell) from Source and put them into the registers
+## Head and Tail.
65: get_list/3
+
+## @spec get_tuple_element Source Element Destination
+## @doc Get element number Element from the tuple in Source and put
+## it in the destination register Destination.
66: get_tuple_element/3
+
+## @spec set_tuple_element NewElement Tuple Position
+## @doc Update the element at postition Position of the tuple Tuple
+## with the new element NewElement.
67: set_tuple_element/3
#
@@ -147,13 +337,26 @@ BEAM_FORMAT_NUMBER=0
#
# 'fun' support.
#
+## @spec call_fun Arity
+## @doc Call a fun of arity Arity. Assume arguments in
+## registers x(0) to x(Arity-1) and that the fun is in x(Arity).
+## Save the next instruction as the return address in the CP register.
75: call_fun/1
+
76: -make_fun/3
+
+## @spec is_function Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a
+## function (i.e. fun or closure).
77: is_function/2
#
# Late additions to R5.
#
+
+## @spec call_ext_only Arity Label
+## Do a tail recursive call to the function at Label.
+## Do not update the CP register.
78: call_ext_only/2
#
@@ -212,9 +415,14 @@ BEAM_FORMAT_NUMBER=0
111: bs_add/5
112: apply/1
113: apply_last/2
+## @spec is_boolean Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a Boolean.
114: is_boolean/2
# New instructions in R10B-6.
+## @spec is_function2 Lbl Arg1 Arity
+## @doc Test the type of Arg1 and jump to Lbl if it is not a
+## function of arity Arity.
115: is_function2/3
# New bit syntax matching in R11B.
@@ -229,7 +437,20 @@ BEAM_FORMAT_NUMBER=0
123: bs_restore2/2
# New GC bifs introduced in R11B.
+
+## @spec gc_bif1 Lbl Live Bif Arg Reg
+## @doc Call the bif Bif with the argument Arg, and store the result in Reg.
+## On failure jump to Lbl.
+## Do a garbage collection if necessary to allocate space on the heap
+## for the result (saving Live number of X registers).
124: gc_bif1/5
+
+## @spec gc_bif2 Lbl Live Bif Arg1 Arg2 Reg
+## @doc Call the bif Bif with the arguments Arg1 and Arg2,
+## and store the result in Reg.
+## On failure jump to Lbl.
+## Do a garbage collection if necessary to allocate space on the heap
+## for the result (saving Live number of X registers).
125: gc_bif2/6
# Experimental new bit_level bifs introduced in R11B.
@@ -241,6 +462,8 @@ BEAM_FORMAT_NUMBER=0
128: -put_literal/2
# R11B-5
+## @spec is_bitstr Lbl Arg1
+## @doc Test the type of Arg1 and jump to Lbl if it is not a bit string.
129: is_bitstr/2
# R12B
@@ -250,7 +473,12 @@ BEAM_FORMAT_NUMBER=0
133: bs_init_writable/0
134: bs_append/8
135: bs_private_append/6
+
+## @spec trim N Remaining
+## @doc Reduce the stack usage by N words,
+## keeping the CP on the top of the stack.
136: trim/2
+
137: bs_init_bits/6
# R12B-5
@@ -277,8 +505,24 @@ BEAM_FORMAT_NUMBER=0
# R14A
+## @spec recv_mark Label
+## @doc Save the end of the message queue and the address of
+## the label Label so that a recv_set instruction can start
+## scanning the inbox from this position.
150: recv_mark/1
+
+## @spec recv_set Label
+## @doc Check that the saved mark points to Label and set the
+## save pointer in the message queue to the last position
+## of the message queue saved by the recv_mark instruction.
151: recv_set/1
+
+## @spec gc_bif3 Lbl Live Bif Arg1 Arg2 Arg3 Reg
+## @doc Call the bif Bif with the arguments Arg1, Arg2 and Arg3,
+## and store the result in Reg.
+## On failure jump to Lbl.
+## Do a garbage collection if necessary to allocate space on the heap
+## for the result (saving Live number of X registers).
152: gc_bif3/7
# R15A
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index 70822f348e..89319af502 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -962,7 +962,8 @@ lc_tq(Line, E, [Fil0|Qs0], Mc, St0) ->
args=[],
clauses=[#iclause{anno=LAnno,pats=[],
guard=Gs,body=Lps ++ [Lc]}],
- fc=#iclause{anno=LAnno,pats=[],guard=[],body=[Mc]}},
+ fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]},
+ pats=[],guard=[],body=[Mc]}},
[],St2};
false ->
{Lc,Lps,St1} = lc_tq(Line, E, Qs0, Mc, St0),
@@ -1107,7 +1108,8 @@ bc_tq1(Line, E, [Fil0|Qs0], AccVar, St0) ->
clauses=[#iclause{anno=LAnno,
pats=[],
guard=Gs,body=Bps ++ [Bc]}],
- fc=#iclause{anno=LAnno,pats=[],guard=[],body=[AccVar]}},
+ fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]},
+ pats=[],guard=[],body=[AccVar]}},
[],St};
false ->
{Bc,Bps,St1} = bc_tq1(Line, E, Qs0, AccVar, St0),
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl
index 5f1c108f7c..2b2b8bf550 100644
--- a/lib/compiler/src/v3_kernel.erl
+++ b/lib/compiler/src/v3_kernel.erl
@@ -1875,7 +1875,7 @@ format_error(bad_segment_size) ->
add_warning(none, Term, Anno, #kern{ws=Ws}=St) ->
File = get_file(Anno),
- St#kern{ws=[{File,[{?MODULE,Term}]}|Ws]};
+ St#kern{ws=[{File,[{none,?MODULE,Term}]}|Ws]};
add_warning(Line, Term, Anno, #kern{ws=Ws}=St) ->
File = get_file(Anno),
St#kern{ws=[{File,[{Line,?MODULE,Term}]}|Ws]}.
diff --git a/lib/compiler/test/beam_validator_SUITE.erl b/lib/compiler/test/beam_validator_SUITE.erl
index bc1a9e2b3b..626f89ba7a 100644
--- a/lib/compiler/test/beam_validator_SUITE.erl
+++ b/lib/compiler/test/beam_validator_SUITE.erl
@@ -28,7 +28,7 @@
overwrite_catchtag/1,overwrite_trytag/1,accessing_tags/1,bad_catch_try/1,
cons_guard/1,
freg_range/1,freg_uninit/1,freg_state/1,
- bin_match/1,bin_aligned/1,bad_dsetel/1,
+ bin_match/1,bad_bin_match/1,bin_aligned/1,bad_dsetel/1,
state_after_fault_in_catch/1,no_exception_in_catch/1,
undef_label/1,illegal_instruction/1,failing_gc_guard_bif/1]).
@@ -56,7 +56,7 @@ groups() ->
unsafe_catch,dead_code,mult_labels,
overwrite_catchtag,overwrite_trytag,accessing_tags,
bad_catch_try,cons_guard,freg_range,freg_uninit,
- freg_state,bin_match,bin_aligned,bad_dsetel,
+ freg_state,bin_match,bad_bin_match,bin_aligned,bad_dsetel,
state_after_fault_in_catch,no_exception_in_catch,
undef_label,illegal_instruction,failing_gc_guard_bif]}].
@@ -317,6 +317,11 @@ bin_match(Config) when is_list(Config) ->
{{t,x,1},{{bs_restore,1},16,{no_save_point,1}}}] = Errors,
ok.
+bad_bin_match(Config) when is_list(Config) ->
+ [{{t,t,1},{return,5,{match_context,{x,0}}}}] =
+ do_val(bad_bin_match, Config),
+ ok.
+
bin_aligned(Config) when is_list(Config) ->
Errors = do_val(bin_aligned, Config),
?line
diff --git a/lib/compiler/test/beam_validator_SUITE_data/bad_bin_match.S b/lib/compiler/test/beam_validator_SUITE_data/bad_bin_match.S
new file mode 100644
index 0000000000..a60ca1e89a
--- /dev/null
+++ b/lib/compiler/test/beam_validator_SUITE_data/bad_bin_match.S
@@ -0,0 +1,15 @@
+{module, bad_bin_match}. %% version = 0
+
+{exports, [{t,1}]}.
+
+{attributes, []}.
+
+{labels, 3}.
+
+
+{function, t, 1, 2}.
+ {label,1}.
+ {func_info,{atom,t},{atom,t},1}.
+ {label,2}.
+ {test,bs_start_match2,{f,1},1,[{x,0},0],{x,0}}.
+ return.
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index da8aecdc8b..66ce6c00ab 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -139,8 +139,8 @@ forms_2(Config) when is_list(Config) ->
module_mismatch(Config) when is_list(Config) ->
?line DataDir = ?config(data_dir, Config),
?line File = filename:join(DataDir, "wrong_module_name.erl"),
- ?line {error,[{"wrong_module_name.beam",
- [{compile,{module_name,arne,"wrong_module_name"}}]}],
+ {error,[{"wrong_module_name.beam",
+ [{none,compile,{module_name,arne,"wrong_module_name"}}]}],
[]} = compile:file(File, [return]),
?line error = compile:file(File, [report]),
diff --git a/lib/compiler/test/core_fold_SUITE.erl b/lib/compiler/test/core_fold_SUITE.erl
index abc9ab6a72..a5a4e62a42 100644
--- a/lib/compiler/test/core_fold_SUITE.erl
+++ b/lib/compiler/test/core_fold_SUITE.erl
@@ -299,7 +299,7 @@ unused_multiple_values_error(Config) when is_list(Config) ->
Opts = [no_copt,clint,return,from_core,{outdir,PrivDir}
|test_lib:opt_opts(?MODULE)],
{error,[{unused_multiple_values_error,
- [{core_lint,{return_mismatch,{hello,1}}}]}],
+ [{none,core_lint,{return_mismatch,{hello,1}}}]}],
[]} = c:c(Core, Opts),
ok.
diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl
index 5656d23090..a0a9bb7ddd 100644
--- a/lib/compiler/test/guard_SUITE.erl
+++ b/lib/compiler/test/guard_SUITE.erl
@@ -813,8 +813,16 @@ and_guard(Config) when is_list(Config) ->
?line ok = relprod({'Set',a,b}, {'Set',a,b}),
+ ok = and_same_var(42),
+ {'EXIT',{if_clause,_}} = (catch and_same_var(x)),
ok.
+and_same_var(V) ->
+ B = is_integer(V),
+ if
+ B or B -> ok
+ end.
+
relprod(R1, R2) when (erlang:size(R1) =:= 3) and (erlang:element(1,R1) =:= 'Set'), (erlang:size(R2) =:= 3) and (erlang:element(1,R2) =:= 'Set') ->
ok.
diff --git a/lib/compiler/test/inline_SUITE.erl b/lib/compiler/test/inline_SUITE.erl
index d9b92766e4..e5c2d4f73a 100644
--- a/lib/compiler/test/inline_SUITE.erl
+++ b/lib/compiler/test/inline_SUITE.erl
@@ -36,7 +36,7 @@ all() ->
groups() ->
[{p,test_lib:parallel(),
- [attribute,bsdecode,bsdes,barnes2,decode1,smith,
+ [attribute,bsdecode,bsdes,barnes2,decode1,smith,fname,
itracer,pseudoknot,comma_splitter,lists,really_inlined,otp_7223,
coverage]}].
@@ -84,6 +84,7 @@ attribute(Config) when is_list(Config) ->
?comp(itracer).
?comp(pseudoknot).
?comp(comma_splitter).
+?comp(fname).
try_inline(Mod, Config) ->
Node = ?config(testing_node, Config),
diff --git a/lib/compiler/test/inline_SUITE_data/fname.erl b/lib/compiler/test/inline_SUITE_data/fname.erl
new file mode 100644
index 0000000000..7ad4446bf3
--- /dev/null
+++ b/lib/compiler/test/inline_SUITE_data/fname.erl
@@ -0,0 +1,29 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(fname).
+-export([?MODULE/0]).
+
+?MODULE() ->
+ F = fun bar/1,
+ G = lists:last([(fun (X) when F =:= X -> X end)]),
+ F = G(F),
+ ok.
+
+bar(X) ->
+ X.
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index f00bfe663b..810b2b48c9 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -37,7 +37,7 @@
-export([pattern/1,pattern2/1,pattern3/1,pattern4/1,
guard/1,bad_arith/1,bool_cases/1,bad_apply/1,
- files/1,effect/1,bin_opt_info/1,bin_construction/1]).
+ files/1,effect/1,bin_opt_info/1,bin_construction/1, comprehensions/1]).
% Default timetrap timeout (set in init_per_testcase).
-define(default_timeout, ?t:minutes(2)).
@@ -61,7 +61,7 @@ groups() ->
[{p,test_lib:parallel(),
[pattern,pattern2,pattern3,pattern4,guard,
bad_arith,bool_cases,bad_apply,files,effect,
- bin_opt_info,bin_construction]}].
+ bin_opt_info,bin_construction,comprehensions]}].
init_per_suite(Config) ->
Config.
@@ -536,6 +536,16 @@ bin_construction(Config) when is_list(Config) ->
ok.
+comprehensions(Config) when is_list(Config) ->
+ Ts = [{tautologic_guards,
+ <<"
+ f() -> [ true || true ].
+ g() -> << <<1>> || true >>.
+ ">>,
+ [], []}],
+ run(Config, Ts),
+ ok.
+
%%%
%%% End of test cases.
%%%
diff --git a/lib/compiler/vsn.mk b/lib/compiler/vsn.mk
index 1c6f49d89b..8cfd8d294e 100644
--- a/lib/compiler/vsn.mk
+++ b/lib/compiler/vsn.mk
@@ -1 +1 @@
-COMPILER_VSN = 4.9.2
+COMPILER_VSN = 4.9.3
diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile
index 13eebea6a9..2adcfd7f31 100644
--- a/lib/crypto/Makefile
+++ b/lib/crypto/Makefile
@@ -24,6 +24,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
#
SUB_DIRECTORIES = src c_src doc/src
+static_lib: SUB_DIRECTORIES = c_src
include vsn.mk
VSN = $(CRYPTO_VSN)
diff --git a/lib/crypto/c_src/Makefile.in b/lib/crypto/c_src/Makefile.in
index a20ddff05c..124d088056 100644
--- a/lib/crypto/c_src/Makefile.in
+++ b/lib/crypto/c_src/Makefile.in
@@ -70,6 +70,10 @@ RELSYSDIR = $(RELEASE_PATH)/lib/crypto-$(VSN)
CRYPTO_OBJS = $(OBJDIR)/crypto$(TYPEMARKER).o
CALLBACK_OBJS = $(OBJDIR)/crypto_callback$(TYPEMARKER).o
NIF_MAKEFILE = $(PRIVDIR)/Makefile
+CRYPTO_STATIC_OBJS = $(OBJDIR)/crypto_static$(TYPEMARKER).o\
+ $(OBJDIR)/crypto_callback_static$(TYPEMARKER).o
+
+NIF_ARCHIVE = $(LIBDIR)/crypto$(TYPEMARKER).a
ifeq ($(findstring win32,$(TARGET)), win32)
NIF_LIB = $(LIBDIR)/crypto$(TYPEMARKER).dll
@@ -97,7 +101,24 @@ CALLBACK_OBJS =
CALLBACK_LIB =
endif
+ifeq ($(USING_VC),yes)
+AR_OUT=-out:
+AR_FLAGS=
+else
+AR_OUT=
+ifeq ($(V),0)
+AR_FLAGS=rc
+else
+AR_FLAGS=rcv
+endif
+endif
+
+ifndef RANLIB
+RANLIB=true
+endif
+
ALL_CFLAGS = $(TYPE_FLAGS) $(EXTRA_FLAGS) $(INCLUDES)
+ALL_STATIC_CFLAGS = $(DED_STATIC_CFLAGS) $(INCLUDES)
# ----------------------------------------------------
# Targets
@@ -107,6 +128,8 @@ _create_dirs := $(shell mkdir -p $(OBJDIR) $(LIBDIR))
debug opt valgrind: $(NIF_LIB) $(CALLBACK_LIB)
+static_lib: $(NIF_ARCHIVE)
+
$(OBJDIR)/%$(TYPEMARKER).o: %.c
$(V_at)$(INSTALL_DIR) $(OBJDIR)
$(V_CC) -c -o $@ $(ALL_CFLAGS) $<
@@ -115,6 +138,14 @@ $(LIBDIR)/crypto$(TYPEMARKER).so: $(CRYPTO_OBJS)
$(V_at)$(INSTALL_DIR) $(LIBDIR)
$(V_LD) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(CRYPTO_LINK_LIB)
+$(OBJDIR)/%_static$(TYPEMARKER).o: %.c
+ $(V_at)$(INSTALL_DIR) $(OBJDIR)
+ $(V_CC) -c -o $@ $(ALL_STATIC_CFLAGS) $<
+
+$(LIBDIR)/crypto$(TYPEMARKER).a: $(CRYPTO_STATIC_OBJS)
+ $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(CRYPTO_STATIC_OBJS)
+ $(V_RANLIB) $@
+
$(LIBDIR)/crypto$(TYPEMARKER).dll: $(CRYPTO_OBJS)
$(V_at)$(INSTALL_DIR) $(LIBDIR)
$(V_LD) $(LDFLAGS) -o $@ $(SSL_DED_LD_RUNTIME_LIBRARY_PATH) -L$(SSL_LIBDIR) $(CRYPTO_OBJS) -l$(SSL_CRYPTO_LIBNAME) -l$(SSL_SSL_LIBNAME)
@@ -145,8 +176,11 @@ else
rm -f $(LIBDIR)/crypto_callback.valgrind.so
endif
rm -f $(OBJDIR)/crypto.o
+ rm -f $(OBJDIR)/crypto_static.o
rm -f $(OBJDIR)/crypto.debug.o
+ rm -f $(OBJDIR)/crypto_static.debug.o
rm -f $(OBJDIR)/crypto.valgrind.o
+ rm -f $(OBJDIR)/crypto_static.valgrind.o
rm -f $(OBJDIR)/crypto_callback.o
rm -f $(OBJDIR)/crypto_callback.debug.o
rm -f $(OBJDIR)/crypto_callback.valgrind.o
diff --git a/lib/crypto/doc/src/notes.xml b/lib/crypto/doc/src/notes.xml
index 6abe19eac5..0ff0c8aa96 100644
--- a/lib/crypto/doc/src/notes.xml
+++ b/lib/crypto/doc/src/notes.xml
@@ -30,6 +30,22 @@
</header>
<p>This document describes the changes made to the Crypto application.</p>
+<section><title>Crypto 3.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Refactor ecdsa cipher to simplify code and improve
+ performance.</p>
+ <p>
+ Own Id: OTP-11320</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Crypto 3.0</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/crypto/vsn.mk b/lib/crypto/vsn.mk
index d5d7c8a128..3bd2f9b4bf 100644
--- a/lib/crypto/vsn.mk
+++ b/lib/crypto/vsn.mk
@@ -1 +1 @@
-CRYPTO_VSN = 3.0
+CRYPTO_VSN = 3.1
diff --git a/lib/debugger/doc/src/notes.xml b/lib/debugger/doc/src/notes.xml
index 5f1d411db2..a3543a1e11 100644
--- a/lib/debugger/doc/src/notes.xml
+++ b/lib/debugger/doc/src/notes.xml
@@ -32,6 +32,22 @@
<p>This document describes the changes made to the Debugger
application.</p>
+<section><title>Debugger 3.2.12</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fix matching of floating point middle-endian machines.
+ Thanks to Johannes Weissl.</p>
+ <p>
+ Own Id: OTP-11201</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Debugger 3.2.11</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/debugger/vsn.mk b/lib/debugger/vsn.mk
index c3e3579e2c..a245e26a55 100644
--- a/lib/debugger/vsn.mk
+++ b/lib/debugger/vsn.mk
@@ -1 +1 @@
-DEBUGGER_VSN = 3.2.11
+DEBUGGER_VSN = 3.2.12
diff --git a/lib/diameter/doc/src/diameter_dict.xml b/lib/diameter/doc/src/diameter_dict.xml
index 7b27046352..c7994ad774 100644
--- a/lib/diameter/doc/src/diameter_dict.xml
+++ b/lib/diameter/doc/src/diameter_dict.xml
@@ -609,7 +609,9 @@ UTF8String() = [integer()]
<p>
List elements are the UTF-8 encodings of the individual characters
in the string.
-Invalid codepoints will result in encode/decode failure.</p>
+Invalid codepoints will result in encode/decode failure.
+On encode, a UTF8String() can be specified as a binary, or as a nested
+list of binaries and codepoints.</p>
<marker id="DiameterIdentity"/>
<pre>
diff --git a/lib/diameter/doc/src/notes.xml b/lib/diameter/doc/src/notes.xml
index 6e79a9589a..274a3f594c 100644
--- a/lib/diameter/doc/src/notes.xml
+++ b/lib/diameter/doc/src/notes.xml
@@ -42,6 +42,52 @@ first.</p>
<!-- ===================================================================== -->
+<section><title>diameter 1.4.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix UTF8String encode.</p>
+ <p>
+ Encode now accepts any nested list of codepoints and
+ binaries. A list containing a binary was previously
+ misinterpreted and the documentation was incomplete.</p>
+ <p>
+ Own Id: OTP-11172</p>
+ </item>
+ <item>
+ <p>
+ Ensure DWR isn't sent immediately after DWA.</p>
+ <p>
+ This was possible if the timing was unfortunate. An
+ incoming DWR now properly resets the watchdog timer.</p>
+ <p>
+ Own Id: OTP-11184</p>
+ </item>
+ <item>
+ <p>
+ Fix faulty encode of Failed-AVP</p>
+ <p>
+ Reception of a CER, DWR or DPR that has decode failures
+ caused encode of the corresponding answer message to
+ fail.</p>
+ <p>
+ Own Id: OTP-11293</p>
+ </item>
+ <item>
+ <p>
+ Fix broken service_opt() spawn_opt.</p>
+ <p>
+ The option was ignored.</p>
+ <p>
+ Own Id: OTP-11299</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>diameter 1.4.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/diameter/src/base/diameter_config.erl b/lib/diameter/src/base/diameter_config.erl
index fc5c284bf2..34b40c3a29 100644
--- a/lib/diameter/src/base/diameter_config.erl
+++ b/lib/diameter/src/base/diameter_config.erl
@@ -651,8 +651,9 @@ make_opts(Opts, Defs) ->
[{K, opt(K,V)} || {K,V} <- Known].
-opt(spawn_opt, L) ->
- is_list(L);
+opt(spawn_opt, L)
+ when is_list(L) ->
+ L;
opt(K, false = B)
when K /= sequence ->
diff --git a/lib/diameter/src/base/diameter_peer_fsm.erl b/lib/diameter/src/base/diameter_peer_fsm.erl
index 2b99ecc59c..282276827f 100644
--- a/lib/diameter/src/base/diameter_peer_fsm.erl
+++ b/lib/diameter/src/base/diameter_peer_fsm.erl
@@ -741,7 +741,7 @@ rejected(N, T, S) ->
rejected({N, []}, T, S).
failed_avp(RC, [{RC, Avp} | _]) ->
- [{'Failed-AVP', [{'AVP', [Avp]}]}];
+ [{'Failed-AVP', [[{'AVP', [Avp]}]]}];
failed_avp(RC, [_ | Es]) ->
failed_avp(RC, Es);
failed_avp(_, [] = No) ->
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl
index 9dd8aafc61..47e03cd0a0 100644
--- a/lib/diameter/src/base/diameter_service.erl
+++ b/lib/diameter/src/base/diameter_service.erl
@@ -673,7 +673,8 @@ service_options(Opts) ->
{use_shared_peers, get_value(use_shared_peers, Opts)},
{restrict_connections, proplists:get_value(restrict_connections,
Opts,
- ?RESTRICT)}].
+ ?RESTRICT)},
+ {spawn_opt, proplists:get_value(spawn_opt, Opts, [])}].
%% The order of options is significant since we match against the list.
mref(false = No) ->
diff --git a/lib/diameter/src/base/diameter_types.erl b/lib/diameter/src/base/diameter_types.erl
index 9ae289034c..8c07e84777 100644
--- a/lib/diameter/src/base/diameter_types.erl
+++ b/lib/diameter/src/base/diameter_types.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -250,13 +250,10 @@
'Address'(encode, zero) ->
<<0:48>>;
-'Address'(decode, <<1:16, B/binary>>)
- when size(B) == 4 ->
- list_to_tuple(binary_to_list(B));
-
-'Address'(decode, <<2:16, B/binary>>)
- when size(B) == 16 ->
- list_to_tuple(v6dec(B, []));
+'Address'(decode, <<A:16, B/binary>>)
+ when 1 == A, 4 == size(B);
+ 2 == A, 16 == size(B) ->
+ list_to_tuple([N || <<N:A/unit:8>> <= B]);
'Address'(decode, <<A:16, _/binary>> = B)
when 1 == A;
@@ -264,30 +261,10 @@
?INVALID_LENGTH(B);
'Address'(encode, T) ->
- ipenc(diameter_lib:ipaddr(T)).
-
-ipenc(T)
- when is_tuple(T), size(T) == 4 ->
- B = list_to_binary(tuple_to_list(T)),
- <<1:16, B/binary>>;
-
-ipenc(T)
- when is_tuple(T), size(T) == 8 ->
- B = v6enc(lists:reverse(tuple_to_list(T)), <<>>),
- <<2:16, B/binary>>.
-
-v6dec(<<N:16, B/binary>>, Acc) ->
- v6dec(B, [N | Acc]);
-
-v6dec(<<>>, Acc) ->
- lists:reverse(Acc).
-
-v6enc([N | Rest], B)
- when ?UINT(16,N) ->
- v6enc(Rest, <<N:16, B/binary>>);
-
-v6enc([], B) ->
- B.
+ Ns = tuple_to_list(diameter_lib:ipaddr(T)), %% length 4 or 8
+ A = length(Ns) div 4, %% 1 or 2
+ B = << <<N:A/unit:8>> || N <- Ns >>,
+ <<A:16, B/binary>>.
%% --------------------
@@ -354,36 +331,13 @@ v6enc([], B) ->
%% --------------------
'UTF8String'(decode, Bin) ->
- udec(Bin, []);
+ tl([0|_] = unicode:characters_to_list([0, Bin])); %% assert list return
'UTF8String'(encode = M, zero) ->
'UTF8String'(M, []);
'UTF8String'(encode, S) ->
- uenc(S, []).
-
-udec(<<>>, Acc) ->
- lists:reverse(Acc);
-
-udec(<<C/utf8, Rest/binary>>, Acc) ->
- udec(Rest, [C | Acc]).
-
-uenc(E, Acc)
- when E == [];
- E == <<>> ->
- list_to_binary(lists:reverse(Acc));
-
-uenc(<<C/utf8, Rest/binary>>, Acc) ->
- uenc(Rest, [<<C/utf8>> | Acc]);
-
-uenc([[] | Rest], Acc) ->
- uenc(Rest, Acc);
-
-uenc([[H|T] | Rest], Acc) ->
- uenc([H, T | Rest], Acc);
-
-uenc([C | Rest], Acc) ->
- uenc(Rest, [<<C/utf8>> | Acc]).
+ <<_/binary>> = unicode:characters_to_binary(S). %% assert binary return
%% --------------------
diff --git a/lib/diameter/src/diameter.appup.src b/lib/diameter/src/diameter.appup.src
index 62ace16faa..c6828e6705 100644
--- a/lib/diameter/src/diameter.appup.src
+++ b/lib/diameter/src/diameter.appup.src
@@ -29,38 +29,13 @@
{"1.3", [{restart_application, diameter}]}, %% R15B03
{"1.3.1", [{restart_application, diameter}]},
{"1.4", [{restart_application, diameter}]}, %% R16A
- {"1.4.1", [{load_module, diameter_reg}, %% R16B
- {load_module, diameter_stats},
- {load_module, diameter_traffic},
- {load_module, diameter_service},
+ {"1.4.1", [{restart_application, diameter}]}, %% R16B
+ {"1.4.1.1", [{restart_application, diameter}]},
+ {"1.4.2", [{load_module, diameter_types}, %% R16B01
{load_module, diameter_config},
- {load_module, diameter_peer},
+ {load_module, diameter_service},
{load_module, diameter_peer_fsm},
- {load_module, diameter_watchdog},
- {load_module, diameter_capx},
- {load_module, diameter_codec},
- {load_module, diameter_gen_base_rfc3588},
- {load_module, diameter_gen_base_accounting},
- {load_module, diameter_gen_base_rfc6733},
- {load_module, diameter_gen_base_acct6733},
- {load_module, diameter_tcp},
- {load_module, diameter_lib},
- {load_module, diameter}]},
- {"1.4.1.1", [{load_module, diameter_traffic},
- {load_module, diameter_service},
- {load_module, diameter_config},
- {load_module, diameter_peer},
- {load_module, diameter_peer_fsm},
- {load_module, diameter_watchdog},
- {load_module, diameter_capx},
- {load_module, diameter_codec},
- {load_module, diameter_gen_base_rfc3588},
- {load_module, diameter_gen_base_accounting},
- {load_module, diameter_gen_base_rfc6733},
- {load_module, diameter_gen_base_acct6733},
- {load_module, diameter_tcp},
- {load_module, diameter_lib},
- {load_module, diameter}]}
+ {load_module, diameter_watchdog}]}
],
[
{"0.9", [{restart_application, diameter}]},
@@ -73,6 +48,7 @@
{"1.3.1", [{restart_application, diameter}]},
{"1.4", [{restart_application, diameter}]},
{"1.4.1", [{restart_application, diameter}]},
- {"1.4.1.1", [{restart_application, diameter}]}
+ {"1.4.1.1", [{restart_application, diameter}]},
+ {"1.4.2", [{restart_application, diameter}]}
]
}.
diff --git a/lib/diameter/test/diameter_codec_test.erl b/lib/diameter/test/diameter_codec_test.erl
index 24d4c7665e..295d23912b 100644
--- a/lib/diameter/test/diameter_codec_test.erl
+++ b/lib/diameter/test/diameter_codec_test.erl
@@ -1,3 +1,4 @@
+%% coding: utf-8
%%
%% %CopyrightBegin%
%%
@@ -19,7 +20,9 @@
-module(diameter_codec_test).
--compile(export_all).
+-export([base/0,
+ gen/1,
+ lib/0]).
%%
%% Test encode/decode of dictionary-related modules.
@@ -38,37 +41,34 @@
%% Interface.
base() ->
- [] = run([{?MODULE, [base, T]} || T <- [zero, decode]]).
+ [] = run([[fun base/1, T] || T <- [zero, decode]]).
gen(Mod) ->
Fs = [{Mod, F, []} || F <- [name, id, vendor_id, vendor_name]],
- [] = run(Fs ++ [{?MODULE, [gen, Mod, T]} || T <- [messages,
- command_codes,
- avp_types,
- grouped,
- enum,
- import_avps,
- import_groups,
- import_enums]]).
+ [] = run(Fs ++ [[fun gen/2, Mod, T] || T <- [messages,
+ command_codes,
+ avp_types,
+ grouped,
+ enum,
+ import_avps,
+ import_groups,
+ import_enums]]).
lib() ->
- Vs = {_,_} = values('Address'),
- [] = run([[fun lib/2, N, Vs] || N <- [1,2]]).
+ Vs = {_,_,_} = values('Address'),
+ [] = run([[fun lib/2, N, Vs] || N <- [{1, true}, {3, false}]]).
%% ===========================================================================
%% Internal functions.
-lib(N, {_,_} = T) ->
- B = 1 == N rem 2,
- [] = run([[fun lib/2, A, B] || A <- element(N,T)]);
+lib({N,B}, {_,_,_} = T) ->
+ [] = run([[fun lib/2, A, B] || A <- element(N,T), is_tuple(A)]);
lib(IP, B) ->
- LA = tuple_to_list(IP),
- {SA,Fun} = ip(LA),
- [] = run([[fun lib/4, IP, B, Fun, A] || A <- [IP, SA]]).
+ [] = run([[fun lib/3, IP, B, A] || A <- [IP, ntoa(tuple_to_list(IP))]]).
-lib(IP, B, Fun, A) ->
- try Fun(A) of
+lib(IP, B, A) ->
+ try diameter_lib:ipaddr(A) of
IP when B ->
ok
catch
@@ -76,12 +76,12 @@ lib(IP, B, Fun, A) ->
ok
end.
-ip([_,_,_,_] = A) ->
+ntoa([_,_,_,_] = A) ->
[$.|S] = lists:append(["." ++ integer_to_list(N) || N <- A]),
- {S, fun diameter_lib:ipaddr/1};
-ip([_,_,_,_,_,_,_,_] = A) ->
+ S;
+ntoa([_,_,_,_,_,_,_,_] = A) ->
[$:|S] = lists:flatten([":" ++ io_lib:format("~.16B", [N]) || N <- A]),
- {S, fun diameter_lib:ipaddr/1}.
+ S.
%% ------------------------------------------------------------------------
%% base/1
@@ -90,7 +90,7 @@ ip([_,_,_,_,_,_,_,_] = A) ->
%% ------------------------------------------------------------------------
base(T) ->
- [] = run([{?MODULE, [base, T, F]} || F <- types()]).
+ [] = run([[fun base/2, T, F] || F <- types()]).
%% Ensure that 'zero' values encode only zeros.
base(zero = T, F) ->
@@ -100,32 +100,23 @@ base(zero = T, F) ->
%% Ensure that we can decode what we encode and vice-versa, and that
%% we can't decode invalid values.
base(decode, F) ->
- {Eq, Vs, Ns} = b(values(F)),
- [] = run([{?MODULE, [base_decode, F, Eq, V]} || V <- Vs]),
- [] = run([{?MODULE, [base_invalid, F, Eq, V]} || V <- Ns]).
+ {Ts, Fs, Is} = values(F),
+ [] = run([[fun base_decode/3, F, true, V] || V <- Ts]),
+ [] = run([[fun base_decode/3, F, false, V] || V <- Fs]),
+ [] = run([[fun base_invalid/2, F, V] || V <- Is]).
base_decode(F, Eq, Value) ->
d(fun(X,V) -> diameter_types:F(X,V) end, Eq, Value).
-base_invalid(F, Eq, Value) ->
+base_invalid(F, Value) ->
try
- base_decode(F, Eq, Value),
+ base_decode(F, false, Value),
exit(nok)
catch
error: _ ->
ok
end.
-b({_,_,_} = T) ->
- T;
-b({B,Vs})
- when is_atom(B) ->
- {B,Vs,[]};
-b({Vs,Ns}) ->
- {true, Vs, Ns};
-b(Vs) ->
- {true, Vs, []}.
-
types() ->
[F || {F,2} <- diameter_types:module_info(exports)].
@@ -136,7 +127,7 @@ types() ->
%% ------------------------------------------------------------------------
gen(M, T) ->
- [] = run(lists:map(fun(X) -> {?MODULE, [gen, M, T, X]} end,
+ [] = run(lists:map(fun(X) -> [fun gen/3, M, T, X] end,
fetch(T, dict(M)))).
fetch(T, Spec) ->
@@ -197,18 +188,20 @@ gen(M, enum = T, {Name, ED})
gen(M, T, {?A(Name), lists:map(fun({E,D}) -> {?A(E), D} end, ED)});
gen(M, enum, {Name, ED}) ->
- [] = run([{?MODULE, [enum, M, Name, T]} || T <- ED]);
+ [] = run([[fun enum/3, M, Name, T] || T <- ED]);
gen(M, Tag, {_Mod, L}) ->
T = retag(Tag),
- [] = run([{?MODULE, [gen, M, T, I]} || I <- L]).
+ [] = run([[fun gen/3, M, T, I] || I <- L]).
%% avp_decode/3
avp_decode(Mod, Type, Name) ->
- {Eq, Vs, _} = b(values(Type, Name, Mod)),
- [] = run([{?MODULE, [avp_decode, Mod, Name, Type, Eq, V]}
- || V <- v(Vs)]).
+ {Ts, Fs, _} = values(Type, Name, Mod),
+ [] = run([[fun avp_decode/5, Mod, Name, Type, true, V]
+ || V <- v(Ts)]),
+ [] = run([[fun avp_decode/5, Mod, Name, Type, false, V]
+ || V <- v(Fs)]).
avp_decode(Mod, Name, Type, Eq, Value) ->
d(fun(X,V) -> avp(Mod, X, V, Name, Type) end, Eq, Value).
@@ -250,7 +243,7 @@ v(N, Ord, E, Acc) ->
arity(M, Name, Rname) ->
Rec = M:'#new-'(Rname),
- [] = run([{?MODULE, [arity, M, Name, F, Rec]}
+ [] = run([[fun arity/4, M, Name, F, Rec]
|| F <- M:'#info-'(Rname, fields)]).
arity(M, Name, AvpName, Rec) ->
@@ -299,68 +292,93 @@ z(B) ->
%% tested.)
values('OctetString' = T) ->
- {["", atom_to_list(T)], [-1, 256]};
+ {["", atom_to_list(T)],
+ [],
+ [-1, 256]};
values('Integer32') ->
Mx = (1 bsl 31) - 1,
Mn = -1*Mx,
- {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]};
+ {[Mn, 0, random(Mn,Mx), Mx],
+ [],
+ [Mn - 1, Mx + 1]};
values('Integer64') ->
Mx = (1 bsl 63) - 1,
Mn = -1*Mx,
- {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]};
+ {[Mn, 0, random(Mn,Mx), Mx],
+ [],
+ [Mn - 1, Mx + 1]};
values('Unsigned32') ->
M = (1 bsl 32) - 1,
- {[0, random(M), M], [-1, M + 1]};
+ {[0, random(M), M],
+ [],
+ [-1, M + 1]};
values('Unsigned64') ->
M = (1 bsl 64) - 1,
- {[0, random(M), M], [-1, M + 1]};
+ {[0, random(M), M],
+ [],
+ [-1, M + 1]};
values('Float32') ->
E = (1 bsl 8) - 2,
F = (1 bsl 23) - 1,
<<Mx:32/float>> = <<0:1, E:8, F:23>>,
<<Mn:32/float>> = <<1:1, E:8, F:23>>,
- {[0.0, infinity, '-infinity', Mx, Mn], [0]};
+ {[0.0, infinity, '-infinity', Mx, Mn],
+ [],
+ [0]};
values('Float64') ->
E = (1 bsl 11) - 2,
F = (1 bsl 52) - 1,
<<Mx:64/float>> = <<0:1, E:11, F:52>>,
<<Mn:64/float>> = <<1:1, E:11, F:52>>,
- {[0.0, infinity, '-infinity', Mx, Mn], [0]};
+ {[0.0, infinity, '-infinity', Mx, Mn],
+ [],
+ [0]};
values('Address') ->
{[{255,0,random(16#FF),1}, {65535,0,0,random(16#FFFF),0,0,0,1}],
- [{256,0,0,1}, {65536,0,0,0,0,0,0,1}]};
+ ["127.0.0.1", "FFFF:FF::1.2.3.4"],
+ [{256,0,0,1}, {65536,0,0,0,0,0,0,1}, "256.0.0.1", "10000::1"]};
values('DiameterIdentity') ->
- {["x", "diameter.com"], [""]};
+ {["x", "diameter.com"],
+ [],
+ [""]};
values('DiameterURI') ->
- {false, ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr
- || S <- ["", "s"],
- P <- ["", ":1234"],
- Tr <- ["" | [";transport=" ++ X
- || X <- ["tcp", "sctp", "udp"]]],
- Pr <- ["" | [";protocol=" ++ X
- || X <- ["diameter","radius","tacacs+"]]]]};
+ {[],
+ ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr
+ || S <- ["", "s"],
+ P <- ["", ":1234"],
+ Tr <- ["" | [";transport=" ++ X
+ || X <- ["tcp", "sctp", "udp"]]],
+ Pr <- ["" | [";protocol=" ++ X
+ || X <- ["diameter","radius","tacacs+"]]]],
+ []};
values(T)
when T == 'IPFilterRule';
T == 'QoSFilterRule' ->
- ["deny in 0 from 127.0.0.1 to 10.0.0.1"];
+ {["deny in 0 from 127.0.0.1 to 10.0.0.1"],
+ [],
+ []};
%% RFC 3629 defines the UTF-8 encoding of U+0000 through U+10FFFF with the
%% exception of U+D800 through U+DFFF.
values('UTF8String') ->
+ S = "ᚠᚢᚦᚨᚱᚲ",
+ B = unicode:characters_to_binary(S),
{[[],
+ S,
lists:seq(0,16#1FF),
[0,16#D7FF,16#E000,16#10FFFF],
[random(16#D7FF), random(16#E000,16#10FFFF)]],
+ [B, [B, S, hd(S)], [S, B]],
[[-1],
[16#D800],
[16#DFFF],
@@ -372,6 +390,7 @@ values('Time') ->
{{2036,2,7},{6,28,15}},
{{2036,2,7},{6,28,16}}, %% 19000101T000000 + 2 bsl 31
{{2104,2,26},{9,42,23}}],
+ [],
[{{1968,1,20},{3,14,7}},
{{2104,2,26},{9,42,24}}]}. %% 19000101T000000 + 3 bsl 31
@@ -382,18 +401,24 @@ values('Time') ->
values('Enumerated', Name, Mod) ->
{_Name, Vals} = lists:keyfind(?S(Name), 1, types(enum, Mod)),
- lists:map(fun({_,N}) -> N end, Vals);
+ {lists:map(fun({_,N}) -> N end, Vals),
+ [],
+ []};
values('Grouped', Name, Mod) ->
Rname = Mod:name2rec(Name),
Rec = Mod:'#new-'(Rname),
Avps = Mod:'#info-'(Rname, fields),
- Enum = diameter_enum:combine(lists:map(fun({_,Vs,_}) -> to_enum(Vs) end,
+ Enum = diameter_enum:combine(lists:map(fun({Vs,_,_}) -> to_enum(Vs) end,
[values(F, Mod) || F <- Avps])),
- {false, diameter_enum:append(group(Mod, Name, Rec, Avps, Enum))};
+ {[],
+ diameter_enum:append(group(Mod, Name, Rec, Avps, Enum)),
+ []};
values(_, 'Framed-IP-Address', _) ->
- [{127,0,0,1}];
+ {[{127,0,0,1}],
+ [],
+ []};
values(Type, _, _) ->
values(Type).
@@ -407,12 +432,14 @@ to_enum(E) ->
%% values/2
values('AVP', _) ->
- {true, [#diameter_avp{code = 0, data = <<0>>}], []};
+ {[#diameter_avp{code = 0, data = <<0>>}],
+ [],
+ []};
values(Name, Mod) ->
Avps = types(avp_types, Mod),
{_Name, _Code, Type, _Flags} = lists:keyfind(?S(Name), 1, Avps),
- b(values(?A(Type), Name, Mod)).
+ values(?A(Type), Name, Mod).
%% group/5
%%
diff --git a/lib/diameter/vsn.mk b/lib/diameter/vsn.mk
index f7462c3916..e003fe76b9 100644
--- a/lib/diameter/vsn.mk
+++ b/lib/diameter/vsn.mk
@@ -18,5 +18,5 @@
# %CopyrightEnd%
APPLICATION = diameter
-DIAMETER_VSN = 1.4.2
+DIAMETER_VSN = 1.4.3
APP_VSN = $(APPLICATION)-$(DIAMETER_VSN)$(PRE_VSN)
diff --git a/lib/edoc/doc/src/notes.xml b/lib/edoc/doc/src/notes.xml
index d2ec82efc8..394e7af09c 100644
--- a/lib/edoc/doc/src/notes.xml
+++ b/lib/edoc/doc/src/notes.xml
@@ -31,6 +31,23 @@
<p>This document describes the changes made to the EDoc
application.</p>
+<section><title>Edoc 0.7.12.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The encoding of the <c>notes.xml</c> file has been
+ changed from latin1 to utf-8 to avoid future merge
+ problems.</p>
+ <p>
+ Own Id: OTP-11310</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Edoc 0.7.12</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/edoc/vsn.mk b/lib/edoc/vsn.mk
index af2aa2203f..2fcc97e406 100644
--- a/lib/edoc/vsn.mk
+++ b/lib/edoc/vsn.mk
@@ -1 +1 @@
-EDOC_VSN = 0.7.12
+EDOC_VSN = 0.7.12.1
diff --git a/lib/erl_docgen/doc/src/notes.xml b/lib/erl_docgen/doc/src/notes.xml
index 2ae5f93165..24d12b2bb7 100644
--- a/lib/erl_docgen/doc/src/notes.xml
+++ b/lib/erl_docgen/doc/src/notes.xml
@@ -30,7 +30,24 @@
</header>
<p>This document describes the changes made to the <em>erl_docgen</em> application.</p>
- <section><title>Erl_Docgen 0.3.4</title>
+ <section><title>Erl_Docgen 0.3.4.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The encoding of the <c>notes.xml</c> file has been
+ changed from latin1 to utf-8 to avoid future merge
+ problems.</p>
+ <p>
+ Own Id: OTP-11310</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erl_Docgen 0.3.4</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
diff --git a/lib/erl_docgen/priv/dtd/common.dtd b/lib/erl_docgen/priv/dtd/common.dtd
index fdc02c55a1..f999ef8ea4 100644
--- a/lib/erl_docgen/priv/dtd/common.dtd
+++ b/lib/erl_docgen/priv/dtd/common.dtd
@@ -67,7 +67,7 @@
<!-- References -->
-<!ELEMENT seealso (#PCDATA) >
+<!ELEMENT seealso (#PCDATA|c|em)* >
<!ATTLIST seealso marker CDATA #REQUIRED >
<!ELEMENT url (#PCDATA) >
<!ATTLIST url href CDATA #REQUIRED >
diff --git a/lib/erl_docgen/priv/xsl/db_man.xsl b/lib/erl_docgen/priv/xsl/db_man.xsl
index 33808859c7..3bcdd11c35 100644
--- a/lib/erl_docgen/priv/xsl/db_man.xsl
+++ b/lib/erl_docgen/priv/xsl/db_man.xsl
@@ -454,13 +454,21 @@
<!-- *ref/Section -->
<xsl:template match="erlref/section|comref/section|cref/section|fileref/section|appref/section">
- <xsl:text>&#10;.SH "</xsl:text><xsl:value-of select="translate(title, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/><xsl:text>"&#10;</xsl:text>
+ <xsl:text>&#10;.SH "</xsl:text><xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="translate(title, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
+ <xsl:with-param name="replace" select="&quot;\&quot;" />
+ <xsl:with-param name="with" select="&quot;\\\&quot;" />
+ </xsl:call-template><xsl:text>"&#10;</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<!-- *ref/Subsection -->
<xsl:template match="section/section">
- <xsl:text>&#10;.SS "</xsl:text><xsl:value-of select="title"/><xsl:text>"&#10;</xsl:text>
+ <xsl:text>&#10;.SS "</xsl:text><xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="title" />
+ <xsl:with-param name="replace" select="&quot;\&quot;" />
+ <xsl:with-param name="with" select="&quot;\\\&quot;" />
+ </xsl:call-template><xsl:text>"&#10;</xsl:text>
<xsl:apply-templates/>
</xsl:template>
diff --git a/lib/erl_docgen/vsn.mk b/lib/erl_docgen/vsn.mk
index a2262198dc..cda8671cfd 100644
--- a/lib/erl_docgen/vsn.mk
+++ b/lib/erl_docgen/vsn.mk
@@ -1 +1 @@
-ERL_DOCGEN_VSN = 0.3.4
+ERL_DOCGEN_VSN = 0.3.4.1
diff --git a/lib/erl_interface/doc/src/notes.xml b/lib/erl_interface/doc/src/notes.xml
index 930b24c26a..f05456bbbd 100644
--- a/lib/erl_interface/doc/src/notes.xml
+++ b/lib/erl_interface/doc/src/notes.xml
@@ -30,6 +30,38 @@
</header>
<p>This document describes the changes made to the Erl_interface application.</p>
+<section><title>Erl_Interface 3.7.14</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Introduced functionality for inspection of system and
+ build configuration.</p>
+ <p>
+ Own Id: OTP-11196</p>
+ </item>
+ <item>
+ <p>
+ Header and library files from ic and erl_interface are
+ now installed into usr/{include,lib}. Note that these
+ directories are unversioned, so the latest installed
+ version will be the one in the directory.</p>
+ <p>
+ Own Id: OTP-11284</p>
+ </item>
+ <item>
+ <p>
+ Fix location of true binary under Mac OSX. Thanks to
+ Simon Cornish.</p>
+ <p>
+ Own Id: OTP-11289</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erl_Interface 3.7.13</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/erl_interface/src/Makefile.in b/lib/erl_interface/src/Makefile.in
index ebacc1cee0..e36b39c1fb 100644
--- a/lib/erl_interface/src/Makefile.in
+++ b/lib/erl_interface/src/Makefile.in
@@ -866,8 +866,12 @@ release: opt
$(INSTALL_DIR) "$(RELSYSDIR)/src/misc"
$(INSTALL_DIR) "$(RELSYSDIR)/src/prog"
$(INSTALL_DIR) "$(RELSYSDIR)/src/registry"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/usr/include"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/usr/lib"
$(INSTALL_DATA) $(HEADERS) "$(RELSYSDIR)/include"
+ $(INSTALL_DATA) $(HEADERS) "$(RELEASE_PATH)/usr/include"
$(INSTALL_DATA) $(OBJ_TARGETS) "$(RELSYSDIR)/lib"
+ $(INSTALL_DATA) $(OBJ_TARGETS) "$(RELEASE_PATH)/usr/lib"
ifneq ($(EXE_TARGETS),)
$(INSTALL_PROGRAM) $(EXE_TARGETS) "$(RELSYSDIR)/bin"
endif
diff --git a/lib/erl_interface/test/Makefile b/lib/erl_interface/test/Makefile
index 2b85dfc571..1ed34c74a0 100644
--- a/lib/erl_interface/test/Makefile
+++ b/lib/erl_interface/test/Makefile
@@ -42,7 +42,7 @@ MODULES= \
runner
SPEC_FILES = \
- erl_interface.spec
+ erl_interface.spec erl_interface_smoke.spec
COVER_FILE = erl_interface.cover
diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE.erl b/lib/erl_interface/test/ei_decode_encode_SUITE.erl
index 2271278291..c7830f58f2 100644
--- a/lib/erl_interface/test/ei_decode_encode_SUITE.erl
+++ b/lib/erl_interface/test/ei_decode_encode_SUITE.erl
@@ -68,6 +68,8 @@ test_ei_decode_encode(Config) when is_list(Config) ->
Port = case os:type() of
{win32,_} ->
open_port({spawn,"sort"},[]);
+ {unix, darwin} ->
+ open_port({spawn,"/usr/bin/true"},[]);
_ ->
open_port({spawn,"/bin/true"},[])
end,
diff --git a/lib/erl_interface/test/erl_interface_smoke.spec b/lib/erl_interface/test/erl_interface_smoke.spec
new file mode 100644
index 0000000000..bfaea2b279
--- /dev/null
+++ b/lib/erl_interface/test/erl_interface_smoke.spec
@@ -0,0 +1 @@
+{suites,"../erl_interface_test",[ei_decode_encode_SUITE]}.
diff --git a/lib/erl_interface/vsn.mk b/lib/erl_interface/vsn.mk
index 6f08d380ca..5cde054a49 100644
--- a/lib/erl_interface/vsn.mk
+++ b/lib/erl_interface/vsn.mk
@@ -1 +1 @@
-EI_VSN = 3.7.13
+EI_VSN = 3.7.14
diff --git a/lib/et/doc/src/notes.xml b/lib/et/doc/src/notes.xml
index 7b9d3fcf81..815dfada5e 100644
--- a/lib/et/doc/src/notes.xml
+++ b/lib/et/doc/src/notes.xml
@@ -36,6 +36,23 @@
one section in this document. The title of each section is the
version number of <c>Event Tracer (ET)</c>.</p>
+<section><title>ET 1.4.4.5</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The encoding of the <c>notes.xml</c> file has been
+ changed from latin1 to utf-8 to avoid future merge
+ problems.</p>
+ <p>
+ Own Id: OTP-11310</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>ET 1.4.4.4</title>
<section><title>Improvements and New Features</title>
@@ -43,7 +60,7 @@
<item>
<p>
Use erlang:demonitor(Ref, [flush]) where applicable.
- Thanks to Lo�c Hoguin.</p>
+ Thanks to Loïc Hoguin.</p>
<p>
Own Id: OTP-11039</p>
</item>
diff --git a/lib/et/vsn.mk b/lib/et/vsn.mk
index 40cdc2b298..282991aa49 100644
--- a/lib/et/vsn.mk
+++ b/lib/et/vsn.mk
@@ -1 +1 @@
-ET_VSN = 1.4.4.4
+ET_VSN = 1.4.4.5
diff --git a/lib/eunit/doc/src/notes.xml b/lib/eunit/doc/src/notes.xml
index d5675574fc..21f759c4b1 100644
--- a/lib/eunit/doc/src/notes.xml
+++ b/lib/eunit/doc/src/notes.xml
@@ -32,6 +32,22 @@
</header>
<p>This document describes the changes made to the EUnit application.</p>
+<section><title>Eunit 2.2.5</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Wrap eunit macros into begin ... end blocks. Thanks to
+ Anthony Ramine.</p>
+ <p>
+ Own Id: OTP-11217</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Eunit 2.2.4</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl
index cae0ceed05..9e8d34567a 100644
--- a/lib/eunit/include/eunit.hrl
+++ b/lib/eunit/include/eunit.hrl
@@ -101,7 +101,7 @@
%% X gets a new, local binding.
%% (Note that lowercase 'let' is a reserved word.)
-ifndef(LET).
--define(LET(X,Y,Z), ((fun(X)->(Z)end)(Y))).
+-define(LET(X,Y,Z), begin ((fun(X)->(Z)end)(Y)) end).
-endif.
%% It is important that testing code is short and readable.
@@ -109,13 +109,13 @@
%% Compare: case f(X) of true->g(X); false->h(X) end
%% and: ?IF(f(X), g(Y), h(Z))
-ifndef(IF).
--define(IF(B,T,F), (case (B) of true->(T); false->(F) end)).
+-define(IF(B,T,F), begin (case (B) of true->(T); false->(F) end) end).
-endif.
%% This macro yields 'true' if the value of E matches the guarded
%% pattern G, otherwise 'false'.
-ifndef(MATCHES).
--define(MATCHES(G,E), (case (E) of G -> true; _ -> false end)).
+-define(MATCHES(G,E), begin (case (E) of G -> true; _ -> false end) end).
-endif.
%% This macro can be used at any time to check whether or not the code
@@ -139,6 +139,7 @@
%% for clauses that cannot match, even if the expression is a constant.
-undef(assert).
-define(assert(BoolExpr),
+ begin
((fun () ->
case (BoolExpr) of
true -> ok;
@@ -151,7 +152,8 @@
_ -> {not_a_boolean,__V}
end}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(assertNot(BoolExpr), ?assert(not (BoolExpr))).
@@ -167,6 +169,7 @@
-define(assertMatch(Guard, Expr), ok).
-else.
-define(assertMatch(Guard, Expr),
+ begin
((fun () ->
case (Expr) of
Guard -> ok;
@@ -177,7 +180,8 @@
{pattern, (??Guard)},
{value, __V}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertMatch(Guard, Expr), ?_test(?assertMatch(Guard, Expr))).
@@ -186,6 +190,7 @@
-define(assertNotMatch(Guard, Expr), ok).
-else.
-define(assertNotMatch(Guard, Expr),
+ begin
((fun () ->
__V = (Expr),
case __V of
@@ -197,7 +202,8 @@
{value, __V}]});
_ -> ok
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertNotMatch(Guard, Expr), ?_test(?assertNotMatch(Guard, Expr))).
@@ -207,6 +213,7 @@
-define(assertEqual(Expect, Expr), ok).
-else.
-define(assertEqual(Expect, Expr),
+ begin
((fun (__X) ->
case (Expr) of
__X -> ok;
@@ -217,7 +224,8 @@
{expected, __X},
{value, __V}]})
end
- end)(Expect))).
+ end)(Expect))
+ end).
-endif.
-define(_assertEqual(Expect, Expr), ?_test(?assertEqual(Expect, Expr))).
@@ -226,6 +234,7 @@
-define(assertNotEqual(Unexpected, Expr), ok).
-else.
-define(assertNotEqual(Unexpected, Expr),
+ begin
((fun (__X) ->
case (Expr) of
__X -> erlang:error({assertNotEqual_failed,
@@ -235,7 +244,8 @@
{value, __X}]});
_ -> ok
end
- end)(Unexpected))).
+ end)(Unexpected))
+ end).
-endif.
-define(_assertNotEqual(Unexpected, Expr),
?_test(?assertNotEqual(Unexpected, Expr))).
@@ -246,6 +256,7 @@
-define(assertException(Class, Term, Expr), ok).
-else.
-define(assertException(Class, Term, Expr),
+ begin
((fun () ->
try (Expr) of
__V -> erlang:error({assertException_failed,
@@ -270,7 +281,8 @@
{__C, __T,
erlang:get_stacktrace()}}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(assertError(Term, Expr), ?assertException(error, Term, Expr)).
@@ -290,6 +302,7 @@
-define(assertNotException(Class, Term, Expr), ok).
-else.
-define(assertNotException(Class, Term, Expr),
+ begin
((fun () ->
try (Expr) of
_ -> ok
@@ -315,7 +328,8 @@
_ -> ok
end
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertNotException(Class, Term, Expr),
?_test(?assertNotException(Class, Term, Expr))).
@@ -326,6 +340,7 @@
%% these can be used for simply running commands in a controlled way
-define(_cmd_(Cmd), (eunit_lib:command(Cmd))).
-define(cmdStatus(N, Cmd),
+ begin
((fun () ->
case ?_cmd_(Cmd) of
{(N), __Out} -> __Out;
@@ -336,7 +351,8 @@
{expected_status,(N)},
{status,__N}]})
end
- end)())).
+ end)())
+ end).
-define(_cmdStatus(N, Cmd), ?_test(?cmdStatus(N, Cmd))).
-define(cmd(Cmd), ?cmdStatus(0, Cmd)).
-define(_cmd(Cmd), ?_test(?cmd(Cmd))).
@@ -347,6 +363,7 @@
-define(assertCmdStatus(N, Cmd), ok).
-else.
-define(assertCmdStatus(N, Cmd),
+ begin
((fun () ->
case ?_cmd_(Cmd) of
{(N), _} -> ok;
@@ -357,7 +374,8 @@
{expected_status,(N)},
{status,__N}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(assertCmd(Cmd), ?assertCmdStatus(0, Cmd)).
@@ -365,6 +383,7 @@
-define(assertCmdOutput(T, Cmd), ok).
-else.
-define(assertCmdOutput(T, Cmd),
+ begin
((fun () ->
case ?_cmd_(Cmd) of
{_, (T)} -> ok;
@@ -375,7 +394,8 @@
{expected_output,(T)},
{output,__T}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertCmdStatus(N, Cmd), ?_test(?assertCmdStatus(N, Cmd))).
@@ -393,26 +413,30 @@
-define(debugTime(S, E), (E)).
-else.
-define(debugMsg(S),
- (begin
- io:fwrite(user, <<"~s:~w:~w: ~s\n">>,
- [?FILE, ?LINE, self(), S]),
- ok
- end)).
+ begin
+ io:fwrite(user, <<"~s:~w:~w: ~s\n">>,
+ [?FILE, ?LINE, self(), S]),
+ ok
+ end).
-define(debugHere, (?debugMsg("<-"))).
-define(debugFmt(S, As), (?debugMsg(io_lib:format((S), (As))))).
-define(debugVal(E),
+ begin
((fun (__V) ->
?debugFmt(<<"~s = ~P">>, [(??E), __V, 15]),
__V
- end)(E))).
+ end)(E))
+ end).
-define(debugTime(S, E),
+ begin
((fun () ->
{__T0, _} = statistics(wall_clock),
__V = (E),
{__T1, _} = statistics(wall_clock),
?debugFmt(<<"~s: ~.3f s">>, [(S), (__T1-__T0)/1000]),
__V
- end)())).
+ end)())
+ end).
-endif.
diff --git a/lib/eunit/vsn.mk b/lib/eunit/vsn.mk
index 798196f8cf..be06c81559 100644
--- a/lib/eunit/vsn.mk
+++ b/lib/eunit/vsn.mk
@@ -1 +1 @@
-EUNIT_VSN = 2.2.4
+EUNIT_VSN = 2.2.5
diff --git a/lib/hipe/doc/src/notes.xml b/lib/hipe/doc/src/notes.xml
index 52c5e068e1..2f8f1782cc 100644
--- a/lib/hipe/doc/src/notes.xml
+++ b/lib/hipe/doc/src/notes.xml
@@ -30,6 +30,23 @@
</header>
<p>This document describes the changes made to HiPE.</p>
+<section><title>Hipe 3.10.2.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The encoding of the <c>notes.xml</c> file has been
+ changed from latin1 to utf-8 to avoid future merge
+ problems.</p>
+ <p>
+ Own Id: OTP-11310</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Hipe 3.10.2</title>
<section><title>Improvements and New Features</title>
@@ -37,7 +54,7 @@
<item>
<p>
Fix the title of hipe_app documentation page. Thanks to
- Lo�c Hoguin.</p>
+ Loïc Hoguin.</p>
<p>
Own Id: OTP-10904</p>
</item>
diff --git a/lib/hipe/vsn.mk b/lib/hipe/vsn.mk
index deb16b02fd..d9ed0b299f 100644
--- a/lib/hipe/vsn.mk
+++ b/lib/hipe/vsn.mk
@@ -1 +1 @@
-HIPE_VSN = 3.10.2
+HIPE_VSN = 3.10.2.1
diff --git a/lib/ic/c_src/Makefile.in b/lib/ic/c_src/Makefile.in
index 856823b1b3..6e65f06114 100644
--- a/lib/ic/c_src/Makefile.in
+++ b/lib/ic/c_src/Makefile.in
@@ -149,9 +149,13 @@ release_spec: opt
$(INSTALL_DIR) "$(RELSYSDIR)/c_src"
$(INSTALL_DIR) "$(RELSYSDIR)/include"
$(INSTALL_DIR) "$(RELSYSDIR)/priv/lib"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/usr/include"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/usr/lib"
$(INSTALL_DATA) ic.c ic_tmo.c "$(RELSYSDIR)/c_src"
$(INSTALL_DATA) $(IDL_FILES) $(H_FILES) "$(RELSYSDIR)/include"
$(INSTALL_DATA) $(LIBRARY) "$(RELSYSDIR)/priv/lib"
+ $(INSTALL_DATA) $(IDL_FILES) $(H_FILES) "$(RELEASE_PATH)/usr/include"
+ $(INSTALL_DATA) $(LIBRARY) "$(RELEASE_PATH)/usr/lib"
release_docs_spec:
diff --git a/lib/ic/doc/src/notes.xml b/lib/ic/doc/src/notes.xml
index 7169a58543..112c0aff09 100644
--- a/lib/ic/doc/src/notes.xml
+++ b/lib/ic/doc/src/notes.xml
@@ -30,7 +30,25 @@
<file>notes.xml</file>
</header>
- <section><title>IC 4.3.2</title>
+ <section><title>IC 4.3.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Header and library files from ic and erl_interface are
+ now installed into usr/{include,lib}. Note that these
+ directories are unversioned, so the latest installed
+ version will be the one in the directory.</p>
+ <p>
+ Own Id: OTP-11284</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>IC 4.3.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
diff --git a/lib/ic/test/Makefile b/lib/ic/test/Makefile
index 54ac186c16..63af6ed9f1 100644
--- a/lib/ic/test/Makefile
+++ b/lib/ic/test/Makefile
@@ -33,7 +33,7 @@ RELSYSDIR = $(RELEASE_PATH)/ic_test
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
-TEST_SPEC_FILE = ic.spec
+TEST_SPEC_FILE = ic.spec ic_smoke.spec
IDL_FILES =
diff --git a/lib/ic/test/ic_smoke.spec b/lib/ic/test/ic_smoke.spec
new file mode 100644
index 0000000000..ec3b5758b1
--- /dev/null
+++ b/lib/ic/test/ic_smoke.spec
@@ -0,0 +1 @@
+{suites,"../ic_test",[ic_SUITE]}.
diff --git a/lib/ic/vsn.mk b/lib/ic/vsn.mk
index 53b81ad731..d1969ef3d8 100644
--- a/lib/ic/vsn.mk
+++ b/lib/ic/vsn.mk
@@ -1 +1 @@
-IC_VSN = 4.3.2
+IC_VSN = 4.3.3
diff --git a/lib/inets/doc/src/httpc.xml b/lib/inets/doc/src/httpc.xml
index 48b2d45bf4..39860a4cc2 100644
--- a/lib/inets/doc/src/httpc.xml
+++ b/lib/inets/doc/src/httpc.xml
@@ -300,11 +300,11 @@ filename() = string()
process or to a file. When streaming to the calling process
using the option <c>self</c> the following stream messages
will be sent to that process: <c>{http, {RequestId,
- stream_start, Headers}, {http, {RequestId, stream,
- BinBodyPart}, {http, {RequestId, stream_end, Headers}</c>. When
+ stream_start, Headers}}, {http, {RequestId, stream,
+ BinBodyPart}}, {http, {RequestId, stream_end, Headers}}</c>. When
streaming to to the calling processes using the option
<c>{self, once}</c> the first message will have an additional
- element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}</c>,
+ element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}}</c>,
this is the process id that should be used as an argument to
<c>http:stream_next/1</c> to trigger the next message to be sent to
the calling process. </p>
diff --git a/lib/inets/doc/src/httpd.xml b/lib/inets/doc/src/httpd.xml
index 0847c82390..3830b2e5ab 100644
--- a/lib/inets/doc/src/httpd.xml
+++ b/lib/inets/doc/src/httpd.xml
@@ -251,14 +251,14 @@
</item>
<marker id="prop_max_uri"></marker>
- <tag>{max_uri, integer()}</tag>
+ <tag>{max_uri_size, integer()}</tag>
<item>
<p>Limits the size of the HTTP request URI. By
default there is no limit. </p>
</item>
<marker id="prop_max_keep_alive_req"></marker>
- <tag>{max_keep_alive_requests, integer()}</tag>
+ <tag>{max_keep_alive_request, integer()}</tag>
<item>
<p>The number of request that a client can do on one
connection. When the server has responded to the number of
@@ -406,7 +406,7 @@ bytes
begins with url-path is mapped to local files that begins with
directory-filename, for example:
- <code>{alias, {"/image", "/ftp/pub/image"}</code>
+ <code>{alias, {"/image", "/ftp/pub/image"}}</code>
and an access to http://your.server.org/image/foo.gif would refer to
the file /ftp/pub/image/foo.gif. </p>
@@ -421,7 +421,7 @@ bytes
by re:replace/3 to produce a path in the local filesystem.
For example:
- <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}</code>
+ <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}}</code>
and an access to http://your.server.org/~bob/foo.gif would refer to
the file /home/bob/public/foo.gif.
@@ -468,7 +468,7 @@ bytes
scripts. URLs with a path beginning with url-path are mapped to
scripts beginning with directory-filename, for example:
- <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}</code>
+ <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}}</code>
and an access to http://your.server.org/cgi-bin/foo would cause
the server to run the script /web/cgi-bin/foo. </p>
@@ -483,7 +483,7 @@ bytes
scripts. URLs with a path beginning with url-path are mapped to
scripts beginning with directory-filename, for example:
- <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}</code>
+ <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}}</code>
and an access to http://your.server.org/cgi-bin/17/foo would cause
the server to run the script /web/17/cgi-bin/foo. </p>
@@ -517,7 +517,7 @@ bytes
the standard CGI PATH_INFO and PATH_TRANSLATED environment
variables.
- <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}</code>
+ <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}}</code>
</p>
</item>
@@ -532,7 +532,7 @@ bytes
the standard CGI PATH_INFO and PATH_TRANSLATED environment
variables.
- <code>{script, {"PUT", "/cgi-bin/put"}</code>
+ <code>{script, {"PUT", "/cgi-bin/put"}}</code>
</p>
</item>
@@ -549,7 +549,7 @@ bytes
scheme scripts. A matching URL is mapped into a specific module
and function. For example:
- <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]}
+ <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]}}
</code>
and a request to
@@ -632,7 +632,7 @@ bytes
</item>
<marker id="prop_edlog"></marker>
- <tag>{error_disk_log, internal | external}</tag>
+ <tag>{error_disk_log, path()}</tag>
<item>
<p>Defines the filename of the (disk_log(3)) error log file
to be used to log server errors. If the filename does not begin
@@ -706,7 +706,7 @@ bytes
For example:
- <code>{allow_from, ["123.34.56.11", "150.100.23"] </code>
+ <code>{allow_from, ["123.34.56.11", "150.100.23"]}</code>
The host 123.34.56.11 and all machines on the 150.100.23
subnet are allowed access. </p>
@@ -719,7 +719,7 @@ bytes
which should be denied access to a given directory.
For example:
- <code>{deny_from, ["123.34.56.11", "150.100.23"] </code>
+ <code>{deny_from, ["123.34.56.11", "150.100.23"]}</code>
The host 123.34.56.11 and all machines on the 150.100.23
subnet are not allowed access. </p>
@@ -835,7 +835,7 @@ bytes
<p><em>Security properties - requires mod_security </em></p>
<marker id="prop_sec_dir"></marker>
- <p><em>{security_directory, {path(), [{property(), term()}]}</em></p>
+ <p><em>{security_directory, {path(), [{property(), term()}]}}</em></p>
<marker id="props_sdir"></marker>
<p>Here follows the valid properties for security directories</p>
@@ -1067,7 +1067,7 @@ bytes
<fsummary>Called for each request to the Web server.</fsummary>
<type>
<v>OldData = list()</v>
- <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}] </v>
+ <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}}] </v>
<v>StausCode = integer()</v>
<v>Body = io_list() | nobody | {Fun, Arg}</v>
<v>Head = [HeaderOption]</v>
diff --git a/lib/inets/doc/src/httpd_util.xml b/lib/inets/doc/src/httpd_util.xml
index 0295892862..1236576ca8 100644
--- a/lib/inets/doc/src/httpd_util.xml
+++ b/lib/inets/doc/src/httpd_util.xml
@@ -337,10 +337,10 @@
<func>
<name>rfc1123_date() -> RFC1123Date</name>
- <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}}) -> RFC1123Date</name>
+ <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}) -> RFC1123Date</name>
<fsummary>Return the current date in RFC 1123 format.</fsummary>
<type>
- <v>YYYY = MM = DD = Hour = Min =Sec = integer()</v>
+ <v>YYYY = MM = DD = Hour = Min = Sec = integer()</v>
<v>RFC1123Date = string()</v>
</type>
<desc>
diff --git a/lib/inets/doc/src/mod_alias.xml b/lib/inets/doc/src/mod_alias.xml
index d7fd7fd300..e4c78a5b15 100644
--- a/lib/inets/doc/src/mod_alias.xml
+++ b/lib/inets/doc/src/mod_alias.xml
@@ -118,7 +118,7 @@
</func>
<func>
- <name>real_script_name(ConfigDB,RequestURI,ScriptAliases) -> Ret</name>
+ <name>real_script_name(ConfigDB, RequestURI, ScriptAliases) -> Ret</name>
<fsummary>Expand a request uri using ScriptAlias config directives.</fsummary>
<type>
<v>ConfigDB = config_db()</v>
@@ -129,7 +129,7 @@
</type>
<desc>
<marker id="real_script_name"></marker>
- <p><c>real_name/3</c> traverses <c>ScriptAliases</c>,
+ <p><c>real_script_name/3</c> traverses <c>ScriptAliases</c>,
typically extracted from <c>ConfigDB</c>, and matches each
<c>FakeName</c> with <c>RequestURI</c>. If a match is found
<c>FakeName</c> is replaced with <c>RealName</c> in the
diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml
index ed07f80d37..4e0dc8bd37 100644
--- a/lib/inets/doc/src/notes.xml
+++ b/lib/inets/doc/src/notes.xml
@@ -32,7 +32,51 @@
<file>notes.xml</file>
</header>
- <section><title>Inets 5.9.5</title>
+ <section><title>Inets 5.9.6</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ httpc: Allow content body in DELETE requests. Thanks to
+ James Wheare.</p>
+ <p>
+ Own Id: OTP-11190</p>
+ </item>
+ <item>
+ <p>
+ Add missing brackets to report formatting on ftp_progress
+ process exit. Thanks to Artur Wilniewczyc.</p>
+ <p>
+ Own Id: OTP-11202</p>
+ </item>
+ <item>
+ <p>
+ Fix some errors in the inets documentation. Thanks to
+ Johannes Weissl.</p>
+ <p>
+ Own Id: OTP-11210</p>
+ </item>
+ <item>
+ <p>
+ Fix various typos in httpd, inets. Thanks to Tomohiko
+ Aono.</p>
+ <p>
+ Own Id: OTP-11226</p>
+ </item>
+ <item>
+ <p>
+ Fix httpd config option 'erl_script_nocache'. Thanks to
+ Johannes Weissl.</p>
+ <p>
+ Own Id: OTP-11260</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 5.9.5</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
@@ -45,8 +89,6 @@
</item>
</list>
</section>
-
-
<section><title>Improvements and New Features</title>
<list>
<item>
@@ -158,7 +200,20 @@
</section>
</section>
+<section><title>Inets 5.9.2.2</title>
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Make log_alert configurable as option in ssl, SSLLogLevel
+ added as option to inets conf file</p>
+ <p>
+ Own Id: OTP-11259</p>
+ </item>
+ </list>
+ </section>
+</section>
<section><title>Inets 5.9.2.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/inets/doc/src/notes_history.xml b/lib/inets/doc/src/notes_history.xml
index 6a7bb35b38..2903b753a1 100644
--- a/lib/inets/doc/src/notes_history.xml
+++ b/lib/inets/doc/src/notes_history.xml
@@ -834,7 +834,7 @@
<list type="bulleted">
<item>
<p>[ftp, client] - A new option {progress, {CBmodule,
- CBFunction, InitProgressTerm} has been added to allow
+ CBFunction, InitProgressTerm}} has been added to allow
users to create things such as progress bars in there
GUI's. The option affects ftp:send/[3,4] and
ftp:recv/[3,4].</p>
diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl
index df58fa1b81..7e679531cf 100644
--- a/lib/inets/src/http_lib/http_transport.erl
+++ b/lib/inets/src/http_lib/http_transport.erl
@@ -159,7 +159,7 @@ listen(ip_comm = _SocketType, Addr, Port, Fd, IpFamily) ->
listen_ip_comm(Addr, Port, Fd, IpFamily);
listen({essl, SSLConfig}, Addr, Port, Fd, IpFamily) ->
- listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily).
+ listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily, []).
listen(ip_comm = _SocketType, Addr, Port, IpFamily) ->
listen_ip_comm(Addr, Port, undefined, IpFamily);
@@ -178,7 +178,13 @@ listen({essl, SSLConfig}, Addr, Port, IpFamily) ->
[{addr, Addr},
{port, Port},
{ssl_config, SSLConfig}]),
- listen_ssl(Addr, Port, undefined, SSLConfig, IpFamily).
+ {SSLConfig2, ExtraOpts} = case proplists:get_value(log_alert, SSLConfig, undefined) of
+ undefined ->
+ {SSLConfig, []};
+ LogAlert ->
+ {proplists:delete(log_alert, SSLConfig), [{log_alert, LogAlert}]}
+ end,
+ listen_ssl(Addr, Port, undefined, SSLConfig2, IpFamily, ExtraOpts).
listen_ip_comm(Addr, Port, Fd, IpFamily) ->
case (catch do_listen_ip_comm(Addr, Port, Fd, IpFamily)) of
@@ -221,24 +227,23 @@ do_listen_ip_comm(Addr, Port, Fd, IpFamily) ->
gen_tcp:listen(NewPort, Opts2)
end.
-
-listen_ssl(Addr, Port, Fd, Opts0, IpFamily) ->
+listen_ssl(Addr, Port, Fd, Opts0, IpFamily, ExtraOpts) ->
{NewPort, SockOpt} = get_socket_info(Addr, Port, Fd),
Opts = SockOpt ++ Opts0,
case IpFamily of
inet6fb4 ->
- Opts2 = [inet6 | Opts],
+ Opts2 = [inet6 | Opts] ++ ExtraOpts,
?hlrt("try ipv6 listen", [{opts, Opts2}]),
case (catch ssl:listen(Port, Opts2)) of
{error, Reason} when ((Reason =:= nxdomain) orelse
(Reason =:= eafnosupport)) ->
- Opts3 = [inet | Opts],
+ Opts3 = [inet | Opts] ++ ExtraOpts,
?hlrt("ipv6 listen failed - try ipv4 instead",
[{reason, Reason}, {opts, Opts3}]),
ssl:listen(NewPort, Opts3);
{'EXIT', Reason} ->
- Opts3 = [inet | Opts],
+ Opts3 = [inet | Opts] ++ ExtraOpts,
?hlrt("ipv6 listen exit - try ipv4 instead",
[{reason, Reason}, {opts, Opts3}]),
ssl:listen(NewPort, Opts3);
@@ -251,7 +256,7 @@ listen_ssl(Addr, Port, Fd, Opts0, IpFamily) ->
_ ->
Opts2 = [IpFamily | Opts],
?hlrt("listen", [{opts, Opts2}]),
- ssl:listen(NewPort, Opts2)
+ ssl:listen(NewPort, Opts2 ++ ExtraOpts)
end.
diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl
index d45f3c0048..b3ca13e2fe 100644
--- a/lib/inets/src/http_server/httpd_conf.erl
+++ b/lib/inets/src/http_server/httpd_conf.erl
@@ -390,6 +390,13 @@ load("SSLCertificateFile " ++ SSLCertificateFile, []) ->
{error, ?NICE(clean(SSLCertificateFile)++
" is an invalid SSLCertificateFile")}
end;
+load("SSLLogLevel " ++ SSLLogAlert, []) ->
+ case SSLLogAlert of
+ "none" ->
+ {ok, [], {ssl_log_alert, false}};
+ _ ->
+ {ok, [], {ssl_log_alert, true}}
+ end;
load("SSLCertificateKeyFile " ++ SSLCertificateKeyFile, []) ->
case is_file(clean(SSLCertificateKeyFile)) of
{ok, File} ->
@@ -948,7 +955,8 @@ ssl_config(ConfigDB) ->
ssl_ciphers(ConfigDB) ++
ssl_password(ConfigDB) ++
ssl_verify_depth(ConfigDB) ++
- ssl_ca_certificate_file(ConfigDB).
+ ssl_ca_certificate_file(ConfigDB) ++
+ ssl_log_level(ConfigDB).
@@ -1214,6 +1222,14 @@ ssl_certificate_key_file(ConfigDB) ->
[{keyfile,SSLCertificateKeyFile}]
end.
+ssl_log_level(ConfigDB) ->
+ case httpd_util:lookup(ConfigDB,ssl_log_alert) of
+ undefined ->
+ [];
+ SSLLogLevel ->
+ [{log_alert,SSLLogLevel}]
+ end.
+
ssl_verify_client(ConfigDB) ->
case httpd_util:lookup(ConfigDB,ssl_verify_client) of
undefined ->
diff --git a/lib/inets/src/http_server/httpd_request_handler.erl b/lib/inets/src/http_server/httpd_request_handler.erl
index 0f47d785ef..cb20159794 100644
--- a/lib/inets/src/http_server/httpd_request_handler.erl
+++ b/lib/inets/src/http_server/httpd_request_handler.erl
@@ -106,7 +106,7 @@ init([Manager, ConfigDB, AcceptTimeout]) ->
case http_transport:negotiate(SocketType, Socket, TimeOut) of
{error, Error} ->
?hdrd("negotiation failed", [{error, Error}]),
- exit(Error); %% Can be 'normal'.
+ exit(shutdown); %% Can be 'normal'.
ok ->
?hdrt("negotiation successfull", []),
NewTimeout = TimeOut - timer:now_diff(now(),Then) div 1000,
diff --git a/lib/inets/src/http_server/httpd_response.erl b/lib/inets/src/http_server/httpd_response.erl
index 6b6532266b..a45b04f275 100644
--- a/lib/inets/src/http_server/httpd_response.erl
+++ b/lib/inets/src/http_server/httpd_response.erl
@@ -20,7 +20,7 @@
-module(httpd_response).
-export([generate_and_send_response/1, send_status/3, send_header/3,
send_body/3, send_chunk/3, send_final_chunk/2, split_header/2,
- is_disable_chunked_send/1, cache_headers/1]).
+ is_disable_chunked_send/1, cache_headers/2]).
-export([map_status_code/2]).
-include("httpd.hrl").
@@ -266,8 +266,8 @@ get_connection(false,"HTTP/1.1") ->
get_connection(_,_) ->
"".
-cache_headers(#mod{config_db = Db}) ->
- case httpd_util:lookup(Db, script_nocache, false) of
+cache_headers(#mod{config_db = Db}, NoCacheType) ->
+ case httpd_util:lookup(Db, NoCacheType, false) of
true ->
Date = httpd_util:rfc1123_date(),
[{"cache-control", "no-cache"},
diff --git a/lib/inets/src/http_server/mod_cgi.erl b/lib/inets/src/http_server/mod_cgi.erl
index c854166c29..f1b73810e6 100644
--- a/lib/inets/src/http_server/mod_cgi.erl
+++ b/lib/inets/src/http_server/mod_cgi.erl
@@ -295,7 +295,7 @@ receive_headers(Port, Module, Function, Args, Timeout) ->
end.
send_headers(ModData, {StatusCode, _}, HTTPHeaders) ->
- ExtraHeaders = httpd_response:cache_headers(ModData),
+ ExtraHeaders = httpd_response:cache_headers(ModData, script_nocache),
httpd_response:send_header(ModData, StatusCode,
ExtraHeaders ++ HTTPHeaders).
diff --git a/lib/inets/src/http_server/mod_esi.erl b/lib/inets/src/http_server/mod_esi.erl
index e36c33b282..b11df34f9e 100644
--- a/lib/inets/src/http_server/mod_esi.erl
+++ b/lib/inets/src/http_server/mod_esi.erl
@@ -440,7 +440,7 @@ receive_headers(Timeout) ->
end.
send_headers(ModData, StatusCode, HTTPHeaders) ->
- ExtraHeaders = httpd_response:cache_headers(ModData),
+ ExtraHeaders = httpd_response:cache_headers(ModData, erl_script_nocache),
httpd_response:send_header(ModData, StatusCode,
ExtraHeaders ++ HTTPHeaders).
diff --git a/lib/inets/test/Makefile b/lib/inets/test/Makefile
index dfa86906fd..2f2f6ec16e 100644
--- a/lib/inets/test/Makefile
+++ b/lib/inets/test/Makefile
@@ -215,7 +215,7 @@ INETS_FILES = inets.config $(INETS_SPECS)
# inets_tftp_suite
INETS_DATADIRS = inets_SUITE_data inets_sup_SUITE_data
-HTTPD_DATADIRS = httpd_test_data httpd_SUITE_data
+HTTPD_DATADIRS = httpd_test_data httpd_SUITE_data httpd_basic_SUITE_data
HTTPC_DATADIRS = httpc_SUITE_data httpc_proxy_SUITE_data
FTP_DATADIRS = ftp_SUITE_data
diff --git a/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem b/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem
index f274d2021d..427447958d 100644
--- a/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem
+++ b/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem
@@ -1,22 +1,31 @@
-----BEGIN RSA PRIVATE KEY-----
-MIIBOwIBAAJBANz7eFvORmJDi1XJMM2U3uHC5wmp/DXTLMw08XaEvtZ73wgVg84E
-V0oyX3Kh1thRE3Hch9AyrHjgpizCj9/Ra38CAwEAAQJACzpz2SZYCTIpaEh6xFdm
-I86FcsZCXHHIeu/NvRntoHQ+nfM7Np379+z6XNJWIcWh/QgG/jNJalR1BO+eyc6/
-YQIhAP3m8M0LDxJwSgHFtGAGatQqaqw9l48Kq5xdMFqvdpiHAiEA3s7lld6yCJYu
-6q7fZjTH+eKUwgg0vpgJutP7Fsok60kCIHHesQBEhW3vjkFdOZgXSLH+k/jLZr1w
-O6bU5GrHZpjhAiEAyTvGYcjDtTunXjDY9l+fadK6FlEBCk8ZIpNIiTnDhHkCIQDr
-QxxLLuNHRj8iWNbuVVZ99SJy8zC33pMgPFaFKaZesQ==
+MIICXQIBAAKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSVwC+n
+0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53h2Zr
+3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwIDAQAB
+AoGACdIVYe/LTeydUihtInC8lZ2QuPgJmoBNocRjqJFipEihoL4scHAx25n1bBvB
+I0HZphffzBkGp28oBAtl2LRPWXqu527unc/RWRfLMqSK1xNSq1DxD1a30zkrZPna
+QiV65vEJuNSJTtlDy/Zqc/BVZXCpxWlzYQedZgkmf0Qse8ECQQCmaz02Yur8zC9f
+eSQKU5OSzGw3bSIumEzziCfHdTheK6MEoccf5TCAyLXhZwA7QlKja4tFXfeyVxws
+/LlnUJN9AkEA4j+xnOeYUyGKXL5i+BAbnqpI4MzPiq+IoCYkaRlD/wAws24r5HNI
+ZQmEHWqD/NNzOf/A2XuyLtMiTGJPW/DftwJBAKKpJP6Ytuh6xz8BUCnLwO12Y7vV
+LtjuQiCzD3aUa5EYA9HOMqxJPxxRkf0LyR0i2VUkE8+sZiPpov+R0cJa7p0CQQCj
+40GUiArGRSiF7/+e84QeVfl+pb29F1QftiFv5DZmFEwy3Z572KpbTh5edJbxYHY6
+UDHxGHJFCvnwXNJhpkVXAkBJqfEfiMJ3Q/E5Gpf3sQizacouW92iiN8ojlF1oB80
+t34RysJH7SgI3gdMhTribCo2UUaV0StjR6yodPN+TB2J
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-MIIB7jCCAZgCAQAwDQYJKoZIhvcNAQEEBQAwgYExCzAJBgNVBAYTAlNFMRIwEAYD
-VQQHEwlTdG9ja2hvbG0xETAPBgNVBAoTCEVyaWNzc29uMQwwCgYDVQQLEwNFVFgx
-FjAUBgNVBAMTDUhlbGVuIEFpcml5YW4xJTAjBgkqhkiG9w0BCQEWFmhlbGVuQGVy
-aXguZXJpY3Nzb24uc2UwHhcNOTcwNzI4MDcxNDI1WhcNOTgxMjEwMDcxNDI1WjCB
-gTELMAkGA1UEBhMCU0UxEjAQBgNVBAcTCVN0b2NraG9sbTERMA8GA1UEChMIRXJp
-Y3Nzb24xDDAKBgNVBAsTA0VUWDEWMBQGA1UEAxMNSGVsZW4gQWlyaXlhbjElMCMG
-CSqGSIb3DQEJARYWaGVsZW5AZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEB
-AQUAA0sAMEgCQQDc+3hbzkZiQ4tVyTDNlN7hwucJqfw10yzMNPF2hL7We98IFYPO
-BFdKMl9yodbYURNx3IfQMqx44KYswo/f0Wt/AgMBAAEwDQYJKoZIhvcNAQEEBQAD
-QQC2++hLIaQJ4ChCjFE9UCfXO9cZ3Vq/FT9VjE+G4MRBDo4LQ5mBKNXcPF6EFZmi
-7XrlvopXkVPlRguTi2SLRPkY
+MIIChzCCAfCgAwIBAgIGAIsapa8BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT
+BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE
+BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD
+VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw
+MDAwWjB7MQ8wDQYDVQQDEwZjbGllbnQxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl
+cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
+VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSV
+wC+n0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53
+h2Zr3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwID
+AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAG8t6f1A
+PF7xayGxtUpG2r6W5ETylC3ZIKPS2kfJk9aYi7AZNTp7/xTU6SgqvFBN8aBPzxCD
+4jHrSNC8DSb4X1x9uimarb6qdZDHEdij+DRAd2eygJHZxEf7+8B4Fx34thQeU9hZ
+S1Izke5AlsyFMkvB7h0anE4k9BfuU70vl6v5
-----END CERTIFICATE-----
diff --git a/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem b/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem
index f01b6c992b..4aac86db49 100644
--- a/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem
+++ b/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem
@@ -1,22 +1,31 @@
-----BEGIN RSA PRIVATE KEY-----
-MIIBOQIBAAJBAMe2WhP6s+JeKOwWPEjI9susfN4Vjn2dd1X4QUlOETcWVLoF916m
-M4JU+ms7+ciMR8GRNCsIeqZGY8/GSqm74ccCAwEAAQJAF08YKlbLYfM9cXiS5qfV
-7iWemUkIzW5wfC8yZ3zeE4Cp6R9ViUfs/dadQ/23Cw0Bpo2t8UdTUdCa4KpmqOem
-cQIhAOnxTWZ5eo6h6PXDp7L5FZUACg8+wT3qf5f2is2mbSZPAiEA2orUY8JZDTSk
-Rm7q9WxLiLNtORsXdTCmnCWhqBOYpwkCIErdowRxScxNekz0IT3AQqzdR1rbnWHg
-IpcSGhd39CQ3AiA1XvQxjLP8wp9fyBS/bPwhXVhOOuyGpSP7PEF3b5m3KQIgGQWc
-/a5wuWx3pc3mLx0ILwNoJr2ubFEuW1PJPsPJPv0=
+MIICXQIBAAKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9Adq6
+7k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ4UAt
+NHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQIDAQAB
+AoGAQIlma0r6W6bcRj4+Wd4fXCFvHuq5Psu1fYEeC5Yvz8761xVjjSfbrDHJZ9pm
+FjOEgedK+s5lbDXqYVyjbdyZSugStBRocSmbG8SQHcAsxR2ZIkNzX2hYzB+lslWo
+T3YJojDyB134O7XJznCu+ZFXP86jyJ1JT6k6a+OIHcwnJ+ECQQDYn57dY4Px3mEd
+VBLStN3YkRF5oFyT+xk7IaKeLLB6n4gCnoVbBoHut7PFbPYPzoNzEwPk3MQKDIHb
+Kig3S5CpAkEAvPA1VmoJWAlN6kUi+F2L8HXEArzE8x7vwdsslrwMKUe4dFS+ZC/7
+5iDOaxcZ7TYkCgwzBt341++DCgP6j3fY1QJBALB6AcOcwi52m6l4B8mu3ZkEPjdX
+BHTuONTqhv/TqoaLlxODL2NDvvDKqeMp7KBd/srt79swW2lQXS4+fvrlTdkCQQCm
+zxj4O1QWkthkfje6ubSkTwUIOatUzrp1F9GNH2dJRtX2dx9FCwxGCC7WY6XzRXqa
+GF0wsedSllbGD+82nWQlAkAicMGqCqRq4hKR/cVmFatOqKVWCVkx6OFF2FhuiI5Z
+h5eIOPGCt8dVRs1P9DNSld/D98Sfm65m85z8BtXovvYV
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-MIIB7jCCAZgCAQAwDQYJKoZIhvcNAQEEBQAwgYExCzAJBgNVBAYTAlNFMRIwEAYD
-VQQHEwlTdG9ja2hvbG0xETAPBgNVBAoTCEVyaWNzc29uMQwwCgYDVQQLEwNFVFgx
-FjAUBgNVBAMTDUhlbGVuIEFpcml5YW4xJTAjBgkqhkiG9w0BCQEWFmhlbGVuQGVy
-aXguZXJpY3Nzb24uc2UwHhcNOTcwNzI4MDcyMTAwWhcNOTgxMjEwMDcyMTAwWjCB
-gTELMAkGA1UEBhMCU0UxEjAQBgNVBAcTCVN0b2NraG9sbTERMA8GA1UEChMIRXJp
-Y3Nzb24xDDAKBgNVBAsTA0VUWDEWMBQGA1UEAxMNSGVsZW4gQWlyaXlhbjElMCMG
-CSqGSIb3DQEJARYWaGVsZW5AZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEB
-AQUAA0sAMEgCQQDHtloT+rPiXijsFjxIyPbLrHzeFY59nXdV+EFJThE3FlS6Bfde
-pjOCVPprO/nIjEfBkTQrCHqmRmPPxkqpu+HHAgMBAAEwDQYJKoZIhvcNAQEEBQAD
-QQCnU1TkxmfbLdUwjdECb5x9QHCevAR7AmTms4Csn2oOEyPX+bgF2d94xhrV1sxO
-Rs0yigk1PtN17Ci0Dey0LYkR
+MIIChzCCAfCgAwIBAgIGANUxXM9BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT
+BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE
+BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD
+VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw
+MDAwWjB7MQ8wDQYDVQQDEwZzZXJ2ZXIxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl
+cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
+VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9
+Adq67k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ
+4UAtNHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQID
+AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAGF5Pfwk
+QDdwJup/mVITPxbBls4Yl7anDooUQsq8066lA1g54H/PRfXscGkyCFGh1ifXvf1L
+psMRoBAdDHL/wSJplk3rRavkC94eBgnTFZmfKL6844g1j53yameiYL8IEVExYMBg
+/XGyc0qwq57WT8B/K4aElrvlBlQ0wF3wN54M
-----END CERTIFICATE-----
diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl
index 1efa78a63e..5dca76b76b 100644
--- a/lib/inets/test/httpd_SUITE.erl
+++ b/lib/inets/test/httpd_SUITE.erl
@@ -1919,7 +1919,7 @@ ticket_5865(Config) ->
" HTTP/1.1\r\nHost:"
++Host++"\r\n\r\n",
[{statuscode, 200},
- {no_last_modified,
+ {no_header,
"last-modified"}]),
ok;
{error, Reason} ->
diff --git a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem
index 8221139eb4..427447958d 100644
--- a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem
+++ b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem
@@ -1,22 +1,31 @@
-----BEGIN RSA PRIVATE KEY-----
-MIIBPAIBAAJBAL6Ym/bgUvhhnPkw08sggGg8Tnp759ThGMEjkmDzhuJ3w3PfnF65
-mgHcgunku4G6LxAQfEUougJWf9Phmjj3oRUCAwEAAQJBAKMjvVvzZxFzfAlP4flc
-OI0AEayFokp04dtvtzuFN09f+aBo2dP18xHmKLCZvxrBOaRAROoQYscALiIVpN07
-GAECIQDfi+sSfAFaDlT3vzpL3xE5UEH6IzY8jWpaZfM1QaToJQIhANpEF50H4wGO
-8Sbh7dUutNd+s+NYUjsMySW2DjLKMsoxAiEAzzb2ftrdsempD0F+O0gZwiPIFKLB
-Kp33YLYyHEKuJtUCIDGi+pvDh2R7VWw6RRQOIyI+tjolg83aAoSI+oGiahqBAiEA
-xzmNNajwoaokvWvlaz0na8rhxu45grOvDrflBT9XvSQ=
+MIICXQIBAAKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSVwC+n
+0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53h2Zr
+3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwIDAQAB
+AoGACdIVYe/LTeydUihtInC8lZ2QuPgJmoBNocRjqJFipEihoL4scHAx25n1bBvB
+I0HZphffzBkGp28oBAtl2LRPWXqu527unc/RWRfLMqSK1xNSq1DxD1a30zkrZPna
+QiV65vEJuNSJTtlDy/Zqc/BVZXCpxWlzYQedZgkmf0Qse8ECQQCmaz02Yur8zC9f
+eSQKU5OSzGw3bSIumEzziCfHdTheK6MEoccf5TCAyLXhZwA7QlKja4tFXfeyVxws
+/LlnUJN9AkEA4j+xnOeYUyGKXL5i+BAbnqpI4MzPiq+IoCYkaRlD/wAws24r5HNI
+ZQmEHWqD/NNzOf/A2XuyLtMiTGJPW/DftwJBAKKpJP6Ytuh6xz8BUCnLwO12Y7vV
+LtjuQiCzD3aUa5EYA9HOMqxJPxxRkf0LyR0i2VUkE8+sZiPpov+R0cJa7p0CQQCj
+40GUiArGRSiF7/+e84QeVfl+pb29F1QftiFv5DZmFEwy3Z572KpbTh5edJbxYHY6
+UDHxGHJFCvnwXNJhpkVXAkBJqfEfiMJ3Q/E5Gpf3sQizacouW92iiN8ojlF1oB80
+t34RysJH7SgI3gdMhTribCo2UUaV0StjR6yodPN+TB2J
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-MIICDDCCAbYCAQAwDQYJKoZIhvcNAQEEBQAwgZAxCzAJBgNVBAYTAlNFMRIwEAYD
-VQQIEwlTdG9ja2hvbG0xDzANBgNVBAcTBkFsdnNqbzEMMAoGA1UEChMDRVRYMQ4w
-DAYDVQQLEwVETi9TUDEXMBUGA1UEAxMOSm9ha2ltIEdyZWJlbm8xJTAjBgkqhkiG
-9w0BCQEWFmpvY2tlQGVyaXguZXJpY3Nzb24uc2UwHhcNOTcwNzE1MTUzNDM2WhcN
-MDMwMjIyMTUzNDM2WjCBkDELMAkGA1UEBhMCU0UxEjAQBgNVBAgTCVN0b2NraG9s
-bTEPMA0GA1UEBxMGQWx2c2pvMQwwCgYDVQQKEwNFVFgxDjAMBgNVBAsTBUROL1NQ
-MRcwFQYDVQQDEw5Kb2FraW0gR3JlYmVubzElMCMGCSqGSIb3DQEJARYWam9ja2VA
-ZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC+mJv24FL4
-YZz5MNPLIIBoPE56e+fU4RjBI5Jg84bid8Nz35xeuZoB3ILp5LuBui8QEHxFKLoC
-Vn/T4Zo496EVAgMBAAEwDQYJKoZIhvcNAQEEBQADQQBYxQVfTydyZCE0UXvZd7Ei
-josNsAaWJk9fFIJaG9uyXCEfg2dVgoT2eBk3D9DI+7OB+78isM5CVlFbL7hilvP8
+MIIChzCCAfCgAwIBAgIGAIsapa8BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT
+BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE
+BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD
+VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw
+MDAwWjB7MQ8wDQYDVQQDEwZjbGllbnQxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl
+cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
+VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSV
+wC+n0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53
+h2Zr3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwID
+AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAG8t6f1A
+PF7xayGxtUpG2r6W5ETylC3ZIKPS2kfJk9aYi7AZNTp7/xTU6SgqvFBN8aBPzxCD
+4jHrSNC8DSb4X1x9uimarb6qdZDHEdij+DRAd2eygJHZxEf7+8B4Fx34thQeU9hZ
+S1Izke5AlsyFMkvB7h0anE4k9BfuU70vl6v5
-----END CERTIFICATE-----
diff --git a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem
index fe739c15f7..4aac86db49 100644
--- a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem
+++ b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem
@@ -1,22 +1,31 @@
-----BEGIN RSA PRIVATE KEY-----
-MIIBOwIBAAJBAL9Bozj3BIjL5Cy8b3rjMT2kPZRychX4wz9bHoIIiKnKo1xXHYjw
-g3N9zWM1f1ZzMADwVry1uAInA8q09+7hL20CAwEAAQJACwu2ao7RozjrV64WXimK
-6X131P/7GMvCMwGHNIlbozqoOqmZcYrbKaF61l+XuwA2QvTo3ywW1Ivxcyr6TeAr
-PQIhAOX+WXT6yiqqwjt08kjBCJyMgfZtdAO6pc/6pKjNWiZfAiEA1OH1iPW/OQe5
-tlQXpiRVdLyneNsPygPRJc4Bdwu3hbMCIQDbI5pA56QxOzqOREOGJsb5wrciAfAE
-jZbnr72sSN2YqQIgAWFpvzagw9Tp/mWzNY+cwkIK7/yzsIKv04fveH8p9IMCIQCr
-td4IiukeUwXmPSvYM4uCE/+J89wEL9qU8Mlc3gDLXA==
+MIICXQIBAAKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9Adq6
+7k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ4UAt
+NHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQIDAQAB
+AoGAQIlma0r6W6bcRj4+Wd4fXCFvHuq5Psu1fYEeC5Yvz8761xVjjSfbrDHJZ9pm
+FjOEgedK+s5lbDXqYVyjbdyZSugStBRocSmbG8SQHcAsxR2ZIkNzX2hYzB+lslWo
+T3YJojDyB134O7XJznCu+ZFXP86jyJ1JT6k6a+OIHcwnJ+ECQQDYn57dY4Px3mEd
+VBLStN3YkRF5oFyT+xk7IaKeLLB6n4gCnoVbBoHut7PFbPYPzoNzEwPk3MQKDIHb
+Kig3S5CpAkEAvPA1VmoJWAlN6kUi+F2L8HXEArzE8x7vwdsslrwMKUe4dFS+ZC/7
+5iDOaxcZ7TYkCgwzBt341++DCgP6j3fY1QJBALB6AcOcwi52m6l4B8mu3ZkEPjdX
+BHTuONTqhv/TqoaLlxODL2NDvvDKqeMp7KBd/srt79swW2lQXS4+fvrlTdkCQQCm
+zxj4O1QWkthkfje6ubSkTwUIOatUzrp1F9GNH2dJRtX2dx9FCwxGCC7WY6XzRXqa
+GF0wsedSllbGD+82nWQlAkAicMGqCqRq4hKR/cVmFatOqKVWCVkx6OFF2FhuiI5Z
+h5eIOPGCt8dVRs1P9DNSld/D98Sfm65m85z8BtXovvYV
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-MIICDDCCAbYCAQAwDQYJKoZIhvcNAQEEBQAwgZAxCzAJBgNVBAYTAlNFMRIwEAYD
-VQQIEwlTdG9ja2hvbG0xDzANBgNVBAcTBkFsdnNqbzEMMAoGA1UEChMDRVRYMQ4w
-DAYDVQQLEwVETi9TUDEXMBUGA1UEAxMOSm9ha2ltIEdyZWJlbm8xJTAjBgkqhkiG
-9w0BCQEWFmpvY2tlQGVyaXguZXJpY3Nzb24uc2UwHhcNOTcwNzE1MTUzMzQxWhcN
-MDMwMjIyMTUzMzQxWjCBkDELMAkGA1UEBhMCU0UxEjAQBgNVBAgTCVN0b2NraG9s
-bTEPMA0GA1UEBxMGQWx2c2pvMQwwCgYDVQQKEwNFVFgxDjAMBgNVBAsTBUROL1NQ
-MRcwFQYDVQQDEw5Kb2FraW0gR3JlYmVubzElMCMGCSqGSIb3DQEJARYWam9ja2VA
-ZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC/QaM49wSI
-y+QsvG964zE9pD2UcnIV+MM/Wx6CCIipyqNcVx2I8INzfc1jNX9WczAA8Fa8tbgC
-JwPKtPfu4S9tAgMBAAEwDQYJKoZIhvcNAQEEBQADQQAmXDY1CyJjzvQZX442kkHG
-ic9QFY1UuVfzokzNMwlHYl1Qx9zaodx0cJCrcH5GF9O9LJbhhV77LzoxT1Q5wZp5
+MIIChzCCAfCgAwIBAgIGANUxXM9BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT
+BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE
+BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD
+VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw
+MDAwWjB7MQ8wDQYDVQQDEwZzZXJ2ZXIxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl
+cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
+VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9
+Adq67k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ
+4UAtNHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQID
+AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAGF5Pfwk
+QDdwJup/mVITPxbBls4Yl7anDooUQsq8066lA1g54H/PRfXscGkyCFGh1ifXvf1L
+psMRoBAdDHL/wSJplk3rRavkC94eBgnTFZmfKL6844g1j53yameiYL8IEVExYMBg
+/XGyc0qwq57WT8B/K4aElrvlBlQ0wF3wN54M
-----END CERTIFICATE-----
diff --git a/lib/inets/test/httpd_basic_SUITE.erl b/lib/inets/test/httpd_basic_SUITE.erl
index 523cf9d38c..b1fe373cff 100644
--- a/lib/inets/test/httpd_basic_SUITE.erl
+++ b/lib/inets/test/httpd_basic_SUITE.erl
@@ -19,6 +19,7 @@
%%
-module(httpd_basic_SUITE).
+-include_lib("kernel/include/file.hrl").
-include_lib("common_test/include/ct.hrl").
-include("inets_test_lib.hrl").
@@ -33,7 +34,9 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[
uri_too_long_414,
- header_too_long_413,
+ header_too_long_413,
+ erl_script_nocache_opt,
+ script_nocache,
escaped_url_in_error_body,
slowdose
].
@@ -62,6 +65,7 @@ init_per_suite(Config) ->
"~n Config: ~p", [Config]),
ok = inets:start(),
PrivDir = ?config(priv_dir, Config),
+ DataDir = ?config(data_dir, Config),
Dummy =
"<HTML>
@@ -74,6 +78,18 @@ DUMMY
</HTML>",
DummyFile = filename:join([PrivDir,"dummy.html"]),
+ CgiDir = filename:join(PrivDir, "cgi-bin"),
+ ok = file:make_dir(CgiDir),
+ Cgi = case test_server:os_type() of
+ {win32, _} ->
+ "printenv.bat";
+ _ ->
+ "printenv.sh"
+ end,
+ inets_test_lib:copy_file(Cgi, DataDir, CgiDir),
+ AbsCgi = filename:join([CgiDir, Cgi]),
+ {ok, FileInfo} = file:read_file_info(AbsCgi),
+ ok = file:write_file_info(AbsCgi, FileInfo#file_info{mode = 8#00755}),
{ok, Fd} = file:open(DummyFile, [write]),
ok = file:write(Fd, Dummy),
ok = file:close(Fd),
@@ -84,7 +100,7 @@ DUMMY
{document_root, PrivDir},
{bind_address, "localhost"}],
- [{httpd_conf, HttpdConf} | Config].
+ [{httpd_conf, HttpdConf}, {cgi_dir, CgiDir}, {cgi_script, Cgi} | Config].
%%--------------------------------------------------------------------
%% Function: end_per_suite(Config) -> _
@@ -178,6 +194,74 @@ header_too_long_413(Config) when is_list(Config) ->
{version, "HTTP/1.1"}]),
inets:stop(httpd, Pid).
+%%-------------------------------------------------------------------------
+%%-------------------------------------------------------------------------
+
+erl_script_nocache_opt(doc) ->
+ ["Test that too long headers's get 413 HTTP code"];
+erl_script_nocache_opt(suite) ->
+ [];
+erl_script_nocache_opt(Config) when is_list(Config) ->
+ HttpdConf = ?config(httpd_conf, Config),
+ {ok, Pid} = inets:start(httpd, [{port, 0}, {erl_script_nocache, true} | HttpdConf]),
+ Info = httpd:info(Pid),
+ Port = proplists:get_value(port, Info),
+ _Address = proplists:get_value(bind_address, Info),
+ URL1 = ?URL_START ++ integer_to_list(Port),
+ case httpc:request(get, {URL1 ++ "/dummy.html", []},
+ [{url_encode, false},
+ {version, "HTTP/1.0"}],
+ [{full_result, false}]) of
+ {ok, {200, _}} ->
+ ok
+ end,
+ inets:stop(httpd, Pid).
+
+%%-------------------------------------------------------------------------
+%%-------------------------------------------------------------------------
+
+script_nocache(doc) ->
+ ["Test nocache option for mod_cgi and mod_esi"];
+script_nocache(suite) ->
+ [];
+script_nocache(Config) when is_list(Config) ->
+ Normal = {no_header, "cache-control"},
+ NoCache = {header, "cache-control", "no-cache"},
+ verify_script_nocache(Config, false, false, Normal, Normal),
+ verify_script_nocache(Config, true, false, NoCache, Normal),
+ verify_script_nocache(Config, false, true, Normal, NoCache),
+ verify_script_nocache(Config, true, true, NoCache, NoCache),
+ ok.
+
+verify_script_nocache(Config, CgiNoCache, EsiNoCache, CgiOption, EsiOption) ->
+ HttpdConf = ?config(httpd_conf, Config),
+ CgiScript = ?config(cgi_script, Config),
+ CgiDir = ?config(cgi_dir, Config),
+ {ok, Pid} = inets:start(httpd, [{port, 0},
+ {script_alias,
+ {"/cgi-bin/", CgiDir ++ "/"}},
+ {script_nocache, CgiNoCache},
+ {erl_script_alias,
+ {"/cgi-bin/erl", [httpd_example,io]}},
+ {erl_script_nocache, EsiNoCache}
+ | HttpdConf]),
+ Info = httpd:info(Pid),
+ Port = proplists:get_value(port, Info),
+ Address = proplists:get_value(bind_address, Info),
+ ok = httpd_test_lib:verify_request(ip_comm, Address, Port, node(),
+ "GET /cgi-bin/" ++ CgiScript ++
+ " HTTP/1.0\r\n\r\n",
+ [{statuscode, 200},
+ CgiOption,
+ {version, "HTTP/1.0"}]),
+ ok = httpd_test_lib:verify_request(ip_comm, Address, Port, node(),
+ "GET /cgi-bin/erl/httpd_example:get "
+ "HTTP/1.0\r\n\r\n",
+ [{statuscode, 200},
+ EsiOption,
+ {version, "HTTP/1.0"}]),
+ inets:stop(httpd, Pid).
+
%%-------------------------------------------------------------------------
%%-------------------------------------------------------------------------
diff --git a/lib/inets/test/httpd_basic_SUITE_data/printenv.bat b/lib/inets/test/httpd_basic_SUITE_data/printenv.bat
new file mode 120000
index 0000000000..1bc8e52059
--- /dev/null
+++ b/lib/inets/test/httpd_basic_SUITE_data/printenv.bat
@@ -0,0 +1 @@
+../httpd_SUITE_data/server_root/cgi-bin/printenv.bat \ No newline at end of file
diff --git a/lib/inets/test/httpd_basic_SUITE_data/printenv.sh b/lib/inets/test/httpd_basic_SUITE_data/printenv.sh
new file mode 120000
index 0000000000..0136a3fa23
--- /dev/null
+++ b/lib/inets/test/httpd_basic_SUITE_data/printenv.sh
@@ -0,0 +1 @@
+../httpd_SUITE_data/server_root/cgi-bin/printenv.sh \ No newline at end of file
diff --git a/lib/inets/test/httpd_mod.erl b/lib/inets/test/httpd_mod.erl
index df4ed6b179..7d3326fb65 100644
--- a/lib/inets/test/httpd_mod.erl
+++ b/lib/inets/test/httpd_mod.erl
@@ -842,6 +842,14 @@ cgi(Type, Port, Host, Node) ->
{version, "HTTP/1.0"}]),
%% tsp("cgi -> done"),
+
+ %% Check "ScriptNoCache" directive (default: false)
+ ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
+ "GET /cgi-bin/" ++ Script ++
+ " HTTP/1.0\r\n\r\n",
+ [{statuscode, 200},
+ {no_header, "cache-control"},
+ {version, "HTTP/1.0"}]),
ok.
@@ -899,6 +907,13 @@ esi(Type, Port, Host, Node) ->
" HTTP/1.0\r\n\r\n",
[{statuscode, 302},
{version, "HTTP/1.0"}]),
+ %% Check "ErlScriptNoCache" directive (default: false)
+ ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
+ "GET /cgi-bin/erl/httpd_example:get"
+ " HTTP/1.0\r\n\r\n",
+ [{statuscode, 200},
+ {no_header, "cache-control"},
+ {version, "HTTP/1.0"}]),
ok.
diff --git a/lib/inets/test/httpd_test_lib.erl b/lib/inets/test/httpd_test_lib.erl
index 13584c50f6..3e82324a30 100644
--- a/lib/inets/test/httpd_test_lib.erl
+++ b/lib/inets/test/httpd_test_lib.erl
@@ -361,7 +361,7 @@ do_validate(Header, [{header, HeaderField, Value}|Rest],N,P) ->
tsf({wrong_header_field_value, LowerHeaderField, Header})
end,
do_validate(Header, Rest, N, P);
-do_validate(Header,[{no_last_modified, HeaderField}|Rest],N,P) ->
+do_validate(Header,[{no_header, HeaderField}|Rest],N,P) ->
case lists:keysearch(HeaderField,1,Header) of
{value,_} ->
tsf({wrong_header_field_value, HeaderField, Header});
diff --git a/lib/inets/vsn.mk b/lib/inets/vsn.mk
index 3f464c8684..36463d9388 100644
--- a/lib/inets/vsn.mk
+++ b/lib/inets/vsn.mk
@@ -18,7 +18,7 @@
# %CopyrightEnd%
APPLICATION = inets
-INETS_VSN = 5.9.5
+INETS_VSN = 5.9.6
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(INETS_VSN)$(PRE_VSN)"
diff --git a/lib/jinterface/test/Makefile b/lib/jinterface/test/Makefile
index d9ff406994..90d4e01035 100644
--- a/lib/jinterface/test/Makefile
+++ b/lib/jinterface/test/Makefile
@@ -32,7 +32,7 @@ RELSYSDIR = $(RELEASE_PATH)/jinterface_test
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
-TEST_SPEC_FILE = jinterface.spec
+TEST_SPEC_FILE = jinterface.spec jinterface_smoke.spec
COVER_FILE = jinterface.cover
MODULES = nc_SUITE \
diff --git a/lib/jinterface/test/jinterface_smoke.spec b/lib/jinterface/test/jinterface_smoke.spec
new file mode 100644
index 0000000000..4a76cce4cd
--- /dev/null
+++ b/lib/jinterface/test/jinterface_smoke.spec
@@ -0,0 +1 @@
+{cases,"../jinterface_test",jinterface_SUITE,[java_erlang_send_receive]}.
diff --git a/lib/kernel/doc/src/application.xml b/lib/kernel/doc/src/application.xml
index da16964d61..29eaf348a9 100644
--- a/lib/kernel/doc/src/application.xml
+++ b/lib/kernel/doc/src/application.xml
@@ -253,15 +253,30 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
</warning>
</desc>
</func>
- <func>
+ <func>
<name name="ensure_started" arity="1"/>
<name name="ensure_started" arity="2"/>
<fsummary>Load and start an application</fsummary>
- <desc>
- <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except
- it returns <c>ok</c> for already started applications.</p>
- </desc>
- </func>
+ <desc>
+ <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except
+ it returns <c>ok</c> for already started applications.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="ensure_all_started" arity="1"/>
+ <name name="ensure_all_started" arity="2"/>
+ <fsummary>Load and start an application and its dependencies, recursively</fsummary>
+ <desc>
+ <p>Equivalent to calling <seealso marker="#start/2"><c>application:start/1,2</c></seealso>
+ repeatedly on all dependencies that have not yet been started for an application.
+ The function returns <c>{ok, AppNames}</c> for a successful start or for an already started
+ application (which are however omitted from the <c>AppNames</c> list), and reports
+ <c>{error, {AppName,Reason}}</c> for errors, where <c>Reason</c> is any possible reason
+ returned by <seealso marker="#start/2"><c>application:start/1,2</c></seealso> when starting a
+ specific dependency. In case of an error, the applications that were started by the
+ function are stopped to bring the set of running applications back to its initial state.</p>
+ </desc>
+ </func>
<func>
<name name="start" arity="1"/>
<name name="start" arity="2"/>
diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml
index 119d7d8df9..e1b0b34888 100644
--- a/lib/kernel/doc/src/inet.xml
+++ b/lib/kernel/doc/src/inet.xml
@@ -76,11 +76,11 @@ FFFF::192.168.42.2
{16#3ffe,16#b80,16#1f8d,16#2,16#204,16#acff,16#fe17,16#bf38}
fe80::204:acff:fe17:bf38
{16#fe80,0,0,0,0,16#204,16#acff,16#fe17,16#bf38}</code>
- <p>A function that may be useful is <c>inet_parse:address/1</c>:</p>
+ <p>A function that may be useful is <seealso marker="#parse_address/1">parse_address/1</seealso>:</p>
<pre>
-1> <input>inet_parse:address("192.168.42.2").</input>
+1> <input>inet:parse_address("192.168.42.2").</input>
{ok,{192,168,42,2}}
-2> <input>inet_parse:address("FFFF::192.168.42.2").</input>
+2> <input>inet:parse_address("FFFF::192.168.42.2").</input>
{ok,{65535,0,0,0,0,0,49320,10754}}</pre>
</description>
@@ -375,6 +375,13 @@ fe80::204:acff:fe17:bf38
</desc>
</func>
<func>
+ <name name="ntoa" arity="1" />
+ <fsummary>Convert IPv6 / IPV4 adress to ascii</fsummary>
+ <desc>
+ <p>Parses an <a href="#type-ip_address">ip_address()</a> and returns an IPv4 or IPv6 address string.</p>
+ </desc>
+ </func>
+ <func>
<name name="parse_ipv4_address" arity="1" />
<fsummary>Parse an IPv4 address</fsummary>
<desc>
@@ -715,6 +722,59 @@ fe80::204:acff:fe17:bf38
<p>Received <c>Packet</c> is delivered as defined by Mode.</p>
</item>
+ <tag><c>{netns, Namespace :: file:filename_all()}</c></tag>
+ <item>
+ <p>Set a network namespace for the socket. The <c>Namespace</c>
+ parameter is a filename defining the namespace for example
+ <c>"/var/run/netns/example"</c> typically created by the command
+ <c>ip netns add example</c>. This option must be used in a
+ function call that creates a socket i.e
+ <seealso marker="gen_tcp#connect/3">
+ gen_tcp:connect/3,4</seealso>,
+ <seealso marker="gen_tcp#listen/2">
+ gen_tcp:listen/2</seealso>,
+ <seealso marker="gen_udp#open/1">
+ gen_udp:open/1,2</seealso> or
+ <seealso marker="gen_sctp#open/0">
+ gen_sctp:open/0-2</seealso>.
+ </p>
+ <p>This option uses the Linux specific syscall
+ <c>setns()</c> such as in Linux kernel 3.0 or later
+ and therefore only exists when the runtime system
+ has been compiled for such an operating system.
+ </p>
+ <p>
+ The virtual machine also needs elevated privileges either
+ running as superuser or (for Linux) having the capability
+ <c>CAP_SYS_ADMIN</c> according to the documentation for setns(2).
+ However, during testing also <c>CAP_SYS_PTRACE</c>
+ and <c>CAP_DAC_READ_SEARCH</c> has proven to be necessary.
+ Example:<code>
+setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp
+</code>
+ Note also that the filesystem containing the virtual machine
+ executable (<c>beam.smp</c> in the example above) has to be local,
+ mounted without the <c>nosetuid</c> flag,
+ support extended attributes and that
+ the kernel has to support file capabilities.
+ All this runs out of the box on at least Ubuntu 12.04 LTS,
+ except that SCTP sockets appears to not support
+ network namespaces.
+ </p>
+ <p>The <c>Namespace</c> is a file name and is encoded
+ and decoded as discussed in
+ <seealso marker="file">file</seealso>
+ except that the emulator flag <c>+fnu</c> is ignored and
+ <seealso marker="#getopts/2">getopts/2</seealso>
+ for this option will return a binary for the filename
+ if the stored filename can not be decoded,
+ which should only happen if you set the option using a binary
+ that can not be decoded with the emulator's filename encoding:
+ <seealso marker="file#native_name_encoding/0">
+ file:native_name_encoding/0</seealso>.
+ </p>
+ </item>
+
<tag><c>list</c></tag>
<item>
<p>Received <c>Packet</c> is delivered as a list.</p>
diff --git a/lib/kernel/doc/src/notes.xml b/lib/kernel/doc/src/notes.xml
index 6b703b7c2b..6cdc3a9d17 100644
--- a/lib/kernel/doc/src/notes.xml
+++ b/lib/kernel/doc/src/notes.xml
@@ -30,6 +30,66 @@
</header>
<p>This document describes the changes made to the Kernel application.</p>
+<section><title>Kernel 2.16.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix indentation of User switch command help in Erlang
+ shell. Thanks to Sylvain Benner.</p>
+ <p>
+ Own Id: OTP-11209</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The previous undocumented function ntoa/1 has been added
+ to inet docs and exported in the inet module.</p>
+ <p>
+ Own Id: OTP-10676 Aux Id: OTP-10314 </p>
+ </item>
+ <item>
+ <p>
+ Fix typo in abcast() function comment. Thanks to Johannes
+ Weissl.</p>
+ <p>
+ Own Id: OTP-11219</p>
+ </item>
+ <item>
+ <p>
+ Add application:ensure_all_started/1-2. Thanks to Fred
+ Hebert.</p>
+ <p>
+ Own Id: OTP-11250</p>
+ </item>
+ <item>
+ <p>
+ Make edlin understand a few important control keys.
+ Thanks to Stefan Zegenhagen.</p>
+ <p>
+ Own Id: OTP-11251</p>
+ </item>
+ <item>
+ <p>
+ Cleanup of hipe_unified_loader, eliminating uses of
+ is_subtype/2 in specs, change module-local void functions
+ to return 'ok' instead of [] and made sure there are no
+ dialyzer warnings with --Wunmatched_returns. Thanks to
+ Kostis Sagonas.</p>
+ <p>
+ Own Id: OTP-11301</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Kernel 2.16.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/kernel/src/application.erl b/lib/kernel/src/application.erl
index 5dd6b73857..4e8ba1b78a 100644
--- a/lib/kernel/src/application.erl
+++ b/lib/kernel/src/application.erl
@@ -18,7 +18,8 @@
%%
-module(application).
--export([start/1, start/2, start_boot/1, start_boot/2, stop/1,
+-export([ensure_all_started/1, ensure_all_started/2, start/1, start/2,
+ start_boot/1, start_boot/2, stop/1,
load/1, load/2, unload/1, takeover/2,
which_applications/0, which_applications/1,
loaded_applications/0, permit/2]).
@@ -113,6 +114,46 @@ load1(Application, DistNodes) ->
unload(Application) ->
application_controller:unload_application(Application).
+
+-spec ensure_all_started(Application) -> {'ok', Started} | {'error', Reason} when
+ Application :: atom(),
+ Started :: [atom()],
+ Reason :: term().
+ensure_all_started(Application) ->
+ ensure_all_started(Application, temporary).
+
+-spec ensure_all_started(Application, Type) -> {'ok', Started} | {'error', Reason} when
+ Application :: atom(),
+ Type :: restart_type(),
+ Started :: [atom()],
+ Reason :: term().
+ensure_all_started(Application, Type) ->
+ case ensure_all_started(Application, Type, []) of
+ {ok, Started} ->
+ {ok, lists:reverse(Started)};
+ {error, Reason, Started} ->
+ [stop(App) || App <- Started],
+ {error, Reason}
+ end.
+
+ensure_all_started(Application, Type, Started) ->
+ case start(Application, Type) of
+ ok ->
+ {ok, [Application | Started]};
+ {error, {already_started, Application}} ->
+ {ok, Started};
+ {error, {not_started, Dependency}} ->
+ case ensure_all_started(Dependency, Type, Started) of
+ {ok, NewStarted} ->
+ ensure_all_started(Application, Type, NewStarted);
+ Error ->
+ Error
+ end;
+ {error, Reason} ->
+ {error, {Application, Reason}, Started}
+ end.
+
+
-spec start(Application) -> 'ok' | {'error', Reason} when
Application :: atom(),
Reason :: term().
diff --git a/lib/kernel/src/hipe_unified_loader.erl b/lib/kernel/src/hipe_unified_loader.erl
index cc51b5ae07..e111cb800e 100644
--- a/lib/kernel/src/hipe_unified_loader.erl
+++ b/lib/kernel/src/hipe_unified_loader.erl
@@ -85,7 +85,7 @@ chunk_name(Architecture) ->
%%========================================================================
-spec load_native_code(Mod, binary()) -> 'no_native' | {'module', Mod}
- when is_subtype(Mod, atom()).
+ when Mod :: atom().
%% @doc
%% Loads the native code of a module Mod.
%% Returns {module,Mod} on success (for compatibility with
@@ -148,8 +148,8 @@ version_check(Version, Mod) when is_atom(Mod) ->
%%========================================================================
--spec load_module(Mod, binary(), _) -> 'bad_crc' | {'module',Mod}
- when is_subtype(Mod,atom()).
+-spec load_module(Mod, binary(), _) -> 'bad_crc' | {'module', Mod}
+ when Mod :: atom().
load_module(Mod, Bin, Beam) ->
erlang:system_flag(multi_scheduling, block),
try
@@ -169,8 +169,8 @@ load_module(Mod, Bin, Beam, OldReferencesToPatch) ->
%%========================================================================
--spec load(Mod, binary()) -> 'bad_crc' | {'module',Mod}
- when is_subtype(Mod,atom()).
+-spec load(Mod, binary()) -> 'bad_crc' | {'module', Mod} when Mod :: atom().
+
load(Mod, Bin) ->
erlang:system_flag(multi_scheduling, block),
try
@@ -204,15 +204,17 @@ load_common(Mod, Bin, Beam, OldReferencesToPatch) ->
bad_crc;
true ->
%% Create data segment
- {ConstAddr,ConstMap2} = create_data_segment(ConstAlign, ConstSize, ConstMap),
+ {ConstAddr,ConstMap2} =
+ create_data_segment(ConstAlign, ConstSize, ConstMap),
%% Find callees for which we may need trampolines.
CalleeMFAs = find_callee_mfas(Refs),
%% Write the code to memory.
- {CodeAddress,Trampolines} = enter_code(CodeSize, CodeBinary, CalleeMFAs, Mod, Beam),
+ {CodeAddress,Trampolines} =
+ enter_code(CodeSize, CodeBinary, CalleeMFAs, Mod, Beam),
%% Construct CalleeMFA-to-trampoline mapping.
TrampolineMap = mk_trampoline_map(CalleeMFAs, Trampolines),
%% Patch references to code labels in data seg.
- patch_consts(LabelMap, ConstAddr, CodeAddress),
+ ok = patch_consts(LabelMap, ConstAddr, CodeAddress),
%% Find out which functions are being loaded (and where).
%% Note: Addresses are sorted descending.
{MFAs,Addresses} = exports(ExportMap, CodeAddress),
@@ -221,7 +223,7 @@ load_common(Mod, Bin, Beam, OldReferencesToPatch) ->
ok = remove_refs_from(MFAs),
%% Patch all dynamic references in the code.
%% Function calls, Atoms, Constants, System calls
- patch(Refs, CodeAddress, ConstMap2, Addresses, TrampolineMap),
+ ok = patch(Refs, CodeAddress, ConstMap2, Addresses, TrampolineMap),
%% Tell the system where the loaded funs are.
%% (patches the BEAM code to redirect to native.)
case Beam of
@@ -324,7 +326,7 @@ trampoline_map_get(MFA, Map) -> gb_trees:get(MFA, Map).
trampoline_map_lookup(_, []) -> []; % archs not using trampolines
trampoline_map_lookup(Primop, Map) ->
case gb_trees:lookup(Primop, Map) of
- {value,X} -> X;
+ {value, X} -> X;
_ -> []
end.
@@ -371,7 +373,7 @@ offsets_to_addresses(Os, Base) ->
find_closure_patches([{Type,Refs} | Rest]) ->
case ?EXT2PATCH_TYPE(Type) of
load_address ->
- find_closure_refs(Refs,Rest);
+ find_closure_refs(Refs, Rest);
_ ->
find_closure_patches(Rest)
end;
@@ -406,16 +408,17 @@ export_funs([FunDef | Addresses]) ->
hipe_bifs:set_native_address(MFA, Address, IsClosure),
export_funs(Addresses);
export_funs([]) ->
- true.
+ ok.
export_funs(Mod, Beam, Addresses, ClosuresToPatch) ->
- Fs = [{F,A,Address} || #fundef{address=Address, mfa={_M,F,A}} <- Addresses],
- code:make_stub_module(Mod, Beam, {Fs,ClosuresToPatch}).
+ Fs = [{F,A,Address} || #fundef{address=Address, mfa={_M,F,A}} <- Addresses],
+ Mod = code:make_stub_module(Mod, Beam, {Fs,ClosuresToPatch}),
+ ok.
%%========================================================================
%% Patching
%% @spec patch(refs(), BaseAddress::integer(), ConstAndZone::term(),
-%% Addresses::term(), TrampolineMap::term()) -> term()
+%% Addresses::term(), TrampolineMap::term()) -> 'ok'.
%% @type refs()=[{RefType::integer(), Reflist::reflist()} | refs()]
%%
%% @type reflist()= [{Data::term(), Offsets::offests()}|reflist()]
@@ -428,7 +431,7 @@ export_funs(Mod, Beam, Addresses, ClosuresToPatch) ->
%%
patch([{Type,SortedRefs}|Rest], CodeAddress, ConstMap2, Addresses, TrampolineMap) ->
- ?debug_msg("Patching ~w at [~w+offset] with ~w\n",
+ ?debug_msg("Patching ~w at [~w+offset] with ~w\n",
[Type,CodeAddress,SortedRefs]),
case ?EXT2PATCH_TYPE(Type) of
call_local ->
@@ -439,7 +442,7 @@ patch([{Type,SortedRefs}|Rest], CodeAddress, ConstMap2, Addresses, TrampolineMap
patch_all(Other, SortedRefs, CodeAddress, {ConstMap2,CodeAddress}, Addresses)
end,
patch(Rest, CodeAddress, ConstMap2, Addresses, TrampolineMap);
-patch([], _, _, _, _) -> true.
+patch([], _, _, _, _) -> ok.
%%----------------------------------------------------------------
%% Handle a 'call_local' or 'call_remote' patch.
@@ -461,14 +464,14 @@ patch_call([{DestMFA,Offsets}|SortedRefs], BaseAddress, Addresses, RemoteOrLocal
end,
patch_call(SortedRefs, BaseAddress, Addresses, RemoteOrLocal, TrampolineMap);
patch_call([], _, _, _, _) ->
- true.
+ ok.
patch_bif_call_list([Offset|Offsets], BaseAddress, BifAddress, Trampoline) ->
CallAddress = BaseAddress+Offset,
?ASSERT(assert_local_patch(CallAddress)),
patch_call_insn(CallAddress, BifAddress, Trampoline),
patch_bif_call_list(Offsets, BaseAddress, BifAddress, Trampoline);
-patch_bif_call_list([], _, _, _) -> [].
+patch_bif_call_list([], _, _, _) -> ok.
patch_mfa_call_list([Offset|Offsets], BaseAddress, DestMFA, DestAddress, Addresses, RemoteOrLocal, Trampoline) ->
CallAddress = BaseAddress+Offset,
@@ -476,7 +479,7 @@ patch_mfa_call_list([Offset|Offsets], BaseAddress, DestMFA, DestAddress, Address
?ASSERT(assert_local_patch(CallAddress)),
patch_call_insn(CallAddress, DestAddress, Trampoline),
patch_mfa_call_list(Offsets, BaseAddress, DestMFA, DestAddress, Addresses, RemoteOrLocal, Trampoline);
-patch_mfa_call_list([], _, _, _, _, _, _) -> [].
+patch_mfa_call_list([], _, _, _, _, _, _) -> ok.
patch_call_insn(CallAddress, DestAddress, Trampoline) ->
%% This assertion is false when we're called from redirect/2.
@@ -489,7 +492,7 @@ patch_call_insn(CallAddress, DestAddress, Trampoline) ->
patch_all(Type, [{Dest,Offsets}|Rest], BaseAddress, ConstAndZone, Addresses)->
patch_all_offsets(Type, Dest, Offsets, BaseAddress, ConstAndZone, Addresses),
patch_all(Type, Rest, BaseAddress, ConstAndZone, Addresses);
-patch_all(_, [], _, _, _) -> true.
+patch_all(_, [], _, _, _) -> ok.
patch_all_offsets(Type, Data, [Offset|Offsets], BaseAddress,
ConstAndZone, Addresses) ->
@@ -499,7 +502,7 @@ patch_all_offsets(Type, Data, [Offset|Offsets], BaseAddress,
patch_offset(Type, Data, Address, ConstAndZone, Addresses),
?debug_msg("Patching done\n",[]),
patch_all_offsets(Type, Data, Offsets, BaseAddress, ConstAndZone, Addresses);
-patch_all_offsets(_, _, [], _, _, _) -> true.
+patch_all_offsets(_, _, [], _, _, _) -> ok.
%%----------------------------------------------------------------
%% Handle any patch type except 'call_local' or 'call_remote'.
diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl
index 6f65968fc2..9cfd3819f0 100644
--- a/lib/kernel/src/inet.erl
+++ b/lib/kernel/src/inet.erl
@@ -32,7 +32,7 @@
ip/1, stats/0, options/0,
pushf/3, popf/1, close/1, gethostname/0, gethostname/1,
parse_ipv4_address/1, parse_ipv6_address/1, parse_ipv4strict_address/1,
- parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1]).
+ parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1, ntoa/1]).
-export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]).
@@ -200,7 +200,14 @@ send(Socket, Packet) ->
Options :: [socket_setopt()].
setopts(Socket, Opts) ->
- prim_inet:setopts(Socket, Opts).
+ SocketOpts =
+ [case Opt of
+ {netns,NS} ->
+ {netns,filename2binary(NS)};
+ _ ->
+ Opt
+ end || Opt <- Opts],
+ prim_inet:setopts(Socket, SocketOpts).
-spec getopts(Socket, Options) ->
{'ok', OptionValues} | {'error', posix()} when
@@ -209,7 +216,18 @@ setopts(Socket, Opts) ->
OptionValues :: [socket_setopt()].
getopts(Socket, Opts) ->
- prim_inet:getopts(Socket, Opts).
+ case prim_inet:getopts(Socket, Opts) of
+ {ok,OptionValues} ->
+ {ok,
+ [case OptionValue of
+ {netns,Bin} ->
+ {netns,binary2filename(Bin)};
+ _ ->
+ OptionValue
+ end || OptionValue <- OptionValues]};
+ Other ->
+ Other
+ end.
-spec getifaddrs(Socket :: socket()) ->
{'ok', [string()]} | {'error', posix()}.
@@ -529,6 +547,13 @@ getservbyname(Name, Protocol) when is_atom(Name) ->
Error -> Error
end.
+-spec ntoa(IpAddress) ->
+ {ok, Address} | {error, einval} when
+ Address :: string(),
+ IpAddress :: ip_address().
+ntoa(Addr) ->
+ inet_parse:ntoa(Addr).
+
-spec parse_ipv4_address(Address) ->
{ok, IPv4Address} | {error, einval} when
Address :: string(),
@@ -634,6 +659,14 @@ con_opt([Opt | Opts], R, As) ->
{tcp_module,_} -> con_opt(Opts, R, As);
inet -> con_opt(Opts, R, As);
inet6 -> con_opt(Opts, R, As);
+ {netns,NS} ->
+ BinNS = filename2binary(NS),
+ case prim_inet:is_sockopt_val(netns, BinNS) of
+ true ->
+ con_opt(Opts, R#connect_opts { fd = [{netns,BinNS}] }, As);
+ false ->
+ {error, badarg}
+ end;
{Name,Val} when is_atom(Name) -> con_add(Name, Val, R, Opts, As);
_ -> {error, badarg}
end;
@@ -692,6 +725,14 @@ list_opt([Opt | Opts], R, As) ->
{tcp_module,_} -> list_opt(Opts, R, As);
inet -> list_opt(Opts, R, As);
inet6 -> list_opt(Opts, R, As);
+ {netns,NS} ->
+ BinNS = filename2binary(NS),
+ case prim_inet:is_sockopt_val(netns, BinNS) of
+ true ->
+ list_opt(Opts, R#listen_opts { fd = [{netns,BinNS}] }, As);
+ false ->
+ {error, badarg}
+ end;
{Name,Val} when is_atom(Name) -> list_add(Name, Val, R, Opts, As);
_ -> {error, badarg}
end;
@@ -738,6 +779,14 @@ udp_opt([Opt | Opts], R, As) ->
{udp_module,_} -> udp_opt(Opts, R, As);
inet -> udp_opt(Opts, R, As);
inet6 -> udp_opt(Opts, R, As);
+ {netns,NS} ->
+ BinNS = filename2binary(NS),
+ case prim_inet:is_sockopt_val(netns, BinNS) of
+ true ->
+ list_opt(Opts, R#udp_opts { fd = [{netns,BinNS}] }, As);
+ false ->
+ {error, badarg}
+ end;
{Name,Val} when is_atom(Name) -> udp_add(Name, Val, R, Opts, As);
_ -> {error, badarg}
end;
@@ -807,6 +856,17 @@ sctp_opt([Opt|Opts], Mod, R, As) ->
{sctp_module,_} -> sctp_opt (Opts, Mod, R, As); % Done with
inet -> sctp_opt (Opts, Mod, R, As); % Done with
inet6 -> sctp_opt (Opts, Mod, R, As); % Done with
+ {netns,NS} ->
+ BinNS = filename2binary(NS),
+ case prim_inet:is_sockopt_val(netns, BinNS) of
+ true ->
+ sctp_opt(
+ Opts, Mod,
+ R#sctp_opts { fd = [{netns,BinNS}] },
+ As);
+ false ->
+ {error, badarg}
+ end;
{Name,Val} -> sctp_opt (Opts, Mod, R, As, Name, Val);
_ -> {error,badarg}
end;
@@ -851,6 +911,39 @@ add_opt(Name, Val, Opts, As) ->
end.
+%% Passthrough all unknown - catch type errors later
+filename2binary(List) when is_list(List) ->
+ OutEncoding = file:native_name_encoding(),
+ try unicode:characters_to_binary(List, unicode, OutEncoding) of
+ Bin when is_binary(Bin) ->
+ Bin;
+ _ ->
+ List
+ catch
+ error:badarg ->
+ List
+ end;
+filename2binary(Bin) ->
+ Bin.
+
+binary2filename(Bin) ->
+ InEncoding = file:native_name_encoding(),
+ case unicode:characters_to_list(Bin, InEncoding) of
+ Filename when is_list(Filename) ->
+ Filename;
+ _ ->
+ %% For getopt/setopt of netns this should only happen if
+ %% a binary with wrong encoding was used when setting the
+ %% option, hence the user shall eat his/her own medicine.
+ %%
+ %% I.e passthrough here too for now.
+ %% Future usecases will most probably not want this,
+ %% rather Unicode error or warning
+ %% depending on emulator flag instead.
+ Bin
+ end.
+
+
translate_ip(any, inet) -> {0,0,0,0};
translate_ip(loopback, inet) -> {127,0,0,1};
translate_ip(any, inet6) -> {0,0,0,0,0,0,0,0};
@@ -1063,7 +1156,7 @@ gethostbyaddr_tm_native(Addr, Timer, Opts) ->
Result -> Result
end.
--spec open(Fd :: integer(),
+-spec open(Fd_or_OpenOpts :: integer() | list(),
Addr :: ip_address(),
Port :: port_number(),
Opts :: [socket_setopt()],
@@ -1073,8 +1166,14 @@ gethostbyaddr_tm_native(Addr, Timer, Opts) ->
Module :: atom()) ->
{'ok', socket()} | {'error', posix()}.
-open(Fd, Addr, Port, Opts, Protocol, Family, Type, Module) when Fd < 0 ->
- case prim_inet:open(Protocol, Family, Type) of
+open(FdO, Addr, Port, Opts, Protocol, Family, Type, Module)
+ when is_integer(FdO), FdO < 0;
+ is_list(FdO) ->
+ OpenOpts =
+ if is_list(FdO) -> FdO;
+ true -> []
+ end,
+ case prim_inet:open(Protocol, Family, Type, OpenOpts) of
{ok,S} ->
case prim_inet:setopts(S, Opts) of
ok ->
@@ -1097,7 +1196,8 @@ open(Fd, Addr, Port, Opts, Protocol, Family, Type, Module) when Fd < 0 ->
Error ->
Error
end;
-open(Fd, _Addr, _Port, Opts, Protocol, Family, Type, Module) ->
+open(Fd, _Addr, _Port, Opts, Protocol, Family, Type, Module)
+ when is_integer(Fd) ->
fdopen(Fd, Opts, Protocol, Family, Type, Module).
bindx(S, [Addr], Port0) ->
diff --git a/lib/kernel/src/inet_int.hrl b/lib/kernel/src/inet_int.hrl
index 67a99913a1..18a4a61b2f 100644
--- a/lib/kernel/src/inet_int.hrl
+++ b/lib/kernel/src/inet_int.hrl
@@ -143,6 +143,7 @@
-define(INET_LOPT_TCP_SEND_TIMEOUT_CLOSE, 35).
-define(INET_LOPT_MSGQ_HIWTRMRK, 36).
-define(INET_LOPT_MSGQ_LOWTRMRK, 37).
+-define(INET_LOPT_NETNS, 38).
% Specific SCTP options: separate range:
-define(SCTP_OPT_RTOINFO, 100).
-define(SCTP_OPT_ASSOCINFO, 101).
diff --git a/lib/kernel/src/inet_parse.erl b/lib/kernel/src/inet_parse.erl
index d24bda0c3d..a88c94a453 100644
--- a/lib/kernel/src/inet_parse.erl
+++ b/lib/kernel/src/inet_parse.erl
@@ -722,7 +722,9 @@ ntoa({0,0,0,0,0,16#ffff,A,B}) ->
"::FFFF:" ++ dig_to_dec(A) ++ "." ++ dig_to_dec(B);
ntoa({_,_,_,_,_,_,_,_}=T) ->
%% Find longest sequence of zeros, at least 2, to replace with "::"
- ntoa(tuple_to_list(T), []).
+ ntoa(tuple_to_list(T), []);
+ntoa(_) ->
+ {error, einval}.
%% Find first double zero
ntoa([], R) ->
diff --git a/lib/kernel/src/rpc.erl b/lib/kernel/src/rpc.erl
index 78fec2aa2b..7dc51495f7 100644
--- a/lib/kernel/src/rpc.erl
+++ b/lib/kernel/src/rpc.erl
@@ -407,7 +407,7 @@ cast(Node, Mod, Fun, Args) ->
true.
-%% Asynchronous broadcast, returns nothing, it's just send'n prey
+%% Asynchronous broadcast, returns nothing, it's just send 'n' pray
-spec abcast(Name, Msg) -> abcast when
Name :: atom(),
Msg :: term().
diff --git a/lib/kernel/test/Makefile b/lib/kernel/test/Makefile
index cb11d4e899..f1b8a105ed 100644
--- a/lib/kernel/test/Makefile
+++ b/lib/kernel/test/Makefile
@@ -145,7 +145,7 @@ release_tests_spec: make_emakefile
$(INSTALL_DIR) "$(RELSYSDIR)"
$(INSTALL_DATA) $(ERL_FILES) "$(RELSYSDIR)"
$(INSTALL_DATA) $(APP_FILES) "$(RELSYSDIR)"
- $(INSTALL_DATA) kernel.spec $(EMAKEFILE)\
+ $(INSTALL_DATA) kernel.spec kernel_smoke.spec $(EMAKEFILE)\
$(COVERFILE) "$(RELSYSDIR)"
chmod -R u+w "$(RELSYSDIR)"
@tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
diff --git a/lib/kernel/test/application_SUITE.erl b/lib/kernel/test/application_SUITE.erl
index 1ff291be54..9ec8a15861 100644
--- a/lib/kernel/test/application_SUITE.erl
+++ b/lib/kernel/test/application_SUITE.erl
@@ -35,7 +35,7 @@
-export([config_change/1,
distr_changed_tc1/1, distr_changed_tc2/1,
- ensure_started/1,
+ ensure_started/1, ensure_all_started/1,
shutdown_func/1, do_shutdown/1, shutdown_timeout/1]).
-define(TESTCASE, testcase_name).
@@ -52,7 +52,7 @@ all() ->
[failover, failover_comp, permissions, load,
load_use_cache, ensure_started, {group, reported_bugs}, start_phases,
script_start, nodedown_start, permit_false_start_local,
- permit_false_start_dist, get_key, get_env,
+ permit_false_start_dist, get_key, get_env, ensure_all_started,
{group, distr_changed}, config_change, shutdown_func, shutdown_timeout].
groups() ->
@@ -978,6 +978,85 @@ ensure_started(Conf) ->
ok = application:unload(app1),
ok.
+ensure_all_started(suite) -> [];
+ensure_all_started(doc) -> ["Test application:ensure_all_started/1-2."];
+ensure_all_started(Conf) ->
+
+ {ok, Fd1} = file:open("app1.app", [write]),
+ w_app1(Fd1),
+ file:close(Fd1),
+ {ok, Fd9} = file:open("app9.app", [write]),
+ w_app9(Fd9),
+ file:close(Fd9),
+ {ok, Fd10} = file:open("app10.app", [write]),
+ w_app10_dep9(Fd10),
+ file:close(Fd10),
+ {ok, FdErr} = file:open("app_chain_error.app", [write]),
+ w_app(FdErr, app_chain_error()),
+ file:close(FdErr),
+ {ok, FdErr2} = file:open("app_chain_error2.app", [write]),
+ w_app(FdErr2, app_chain_error2()),
+ file:close(FdErr2),
+
+ %% Single app start/stop
+ false = lists:keyfind(app1, 1, application:which_applications()),
+ {ok, [app1]} = application:ensure_all_started(app1), % app1 started
+ {app1, _, _} = lists:keyfind(app1, 1, application:which_applications()),
+ {ok, []} = application:ensure_all_started(app1), % no start needed
+ ok = application:stop(app1),
+ false = lists:keyfind(app1, 1, application:which_applications()),
+ ok = application:unload(app1),
+
+ %% App or dependency not found.
+ Name = hopefully_not_an_existing_app_file,
+ {error,{Name, {"no such file or directory", _ }}} =
+ application:ensure_all_started(Name),
+
+ %% Start dependencies.
+ {error, {not_started, app9}} = application:start(app10),
+ {ok, [app9,app10]} = application:ensure_all_started(app10, temporary),
+ {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()),
+ {app10, _, _} = lists:keyfind(app10, 1, application:which_applications()),
+ %% Only report apps/dependencies that actually needed to start
+ ok = application:stop(app10),
+ ok = application:unload(app10),
+ {ok, [app10]} = application:ensure_all_started(app10, temporary),
+ ok = application:stop(app9),
+ ok = application:unload(app9),
+ ok = application:stop(app10),
+ ok = application:unload(app10),
+
+ %% Deeper failure chain. We have the following dependencies:
+ %% app_chain_error -> app_chain_error2
+ %% app_chain_error2 -> app10
+ %% app_chain_error2 -> hopefully_not_an_existing_app
+ %% app10 -> app 9
+ %% First we have none running and we expect to have neither app9
+ %% nor app10 running after failing to start
+ %% hopefully_not_an_existing_app
+ {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}=
+ application:ensure_all_started(app_chain_error),
+ false = lists:keyfind(app9, 1, application:which_applications()),
+ false = lists:keyfind(app10, 1, application:which_applications()),
+ false = lists:keyfind(app_chain_error2,1,application:which_applications()),
+ false = lists:keyfind(app_chain_error, 1, application:which_applications()),
+ %% Here we will have app9 already running, and app10 should be
+ %% able to boot fine.
+ %% In this dependency failing, we expect app9 to still be running, but
+ %% not app10 after failing to start hopefully_not_an_existing_app
+ {ok, [app9]} = application:ensure_all_started(app9, temporary),
+ {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}=
+ application:ensure_all_started(app_chain_error),
+ {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()),
+ false = lists:keyfind(app10, 1, application:which_applications()),
+ false = lists:keyfind(app_chain_error2,1,application:which_applications()),
+ false = lists:keyfind(app_chain_error, 1, application:which_applications()),
+ ok = application:stop(app9),
+ ok = application:unload(app9),
+ ok = application:unload(app10),
+ ok = application:unload(app_chain_error2),
+ ok = application:unload(app_chain_error),
+ ok.
%%%-----------------------------------------------------------------
%%% Testing of reported bugs and other tickets.
@@ -2125,6 +2204,24 @@ app_start_error() ->
{applications, [kernel]},
{mod, {app_start_error, []}}]}.
+app_chain_error() ->
+ {application, app_chain_error,
+ [{description, "ERTS CXC 138 ce"},
+ {vsn, "2.0"},
+ {modules, []},
+ {registered, []},
+ {applications, [kernel, app_chain_error2]},
+ {mod, {ch_sup, {app_chain_error, 20,20}}}]}.
+
+app_chain_error2() ->
+ {application, app_chain_error2,
+ [{description, "ERTS CXC 138 ce2"},
+ {vsn, "2.0"},
+ {modules, []},
+ {registered, []},
+ {applications, [kernel, app10, hopefully_not_an_existing_app]},
+ {mod, {ch_sup, {app_chain_error2, 21,21}}}]}.
+
app_group_leader() ->
{application, group_leader,
[{description, "GROUP_LEADER CXC 138 11"},
@@ -2374,6 +2471,12 @@ w_app7(Fd) ->
w_app8(Fd) ->
io:format(Fd, "~p.\n", [app8()]).
+w_app9(Fd) ->
+ io:format(Fd, "~p.\n", [app9()]).
+
+w_app10_dep9(Fd) ->
+ io:format(Fd, "~p.\n", [app10_dep9()]).
+
w_app_start_error(Fd) ->
io:format(Fd, "~p.\n", [app_start_error()]).
diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl
index 62ba95e1a3..ed43749cc0 100644
--- a/lib/kernel/test/inet_SUITE.erl
+++ b/lib/kernel/test/inet_SUITE.erl
@@ -38,10 +38,10 @@
gethostnative_debug_level/0, gethostnative_debug_level/1,
getif/1,
getif_ifr_name_overflow/1,getservbyname_overflow/1, getifaddrs/1,
- parse_strict_address/1]).
+ parse_strict_address/1, simple_netns/1]).
-export([get_hosts/1, get_ipv6_hosts/1, parse_hosts/1, parse_address/1,
- kill_gethost/0, parallell_gethost/0]).
+ kill_gethost/0, parallell_gethost/0, test_netns/0]).
-export([init_per_testcase/2, end_per_testcase/2]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -53,7 +53,7 @@ all() ->
t_gethostnative, gethostnative_parallell, cname_loop,
gethostnative_debug_level, gethostnative_soft_restart,
getif, getif_ifr_name_overflow, getservbyname_overflow,
- getifaddrs, parse_strict_address].
+ getifaddrs, parse_strict_address, simple_netns].
groups() ->
[{parse, [], [parse_hosts, parse_address]}].
@@ -226,7 +226,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_addr_list = [IP4]} = HEnt4,
{ok,IP46} =
inet_parse:ipv6_address(
- "::ffff:" ++ inet_parse:ntoa(IP4)),
+ "::ffff:" ++ inet:ntoa(IP4)),
check_elems(
[{HEnt#hostent.h_name,[Name,FullName]}])
end,
@@ -246,7 +246,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_addr_list = [IP4F]} = HEnt4F,
{ok,IP46F} =
inet_parse:ipv6_address(
- "::ffff:" ++ inet_parse:ntoa(IP4F)),
+ "::ffff:" ++ inet:ntoa(IP4F)),
check_elems(
[{HEntF#hostent.h_name,[Name,FullName]}])
end;
@@ -1099,3 +1099,96 @@ toupper([C|Cs]) when is_integer(C) ->
end;
toupper([]) ->
[].
+
+
+simple_netns(Config) when is_list(Config) ->
+ {ok,U} = gen_udp:open(0),
+ case inet:setopts(U, [{netns,""}]) of
+ ok ->
+ jog_netns_opt(U),
+ ok = gen_udp:close(U),
+ %%
+ {ok,L} = gen_tcp:listen(0, []),
+ jog_netns_opt(L),
+ ok = gen_tcp:close(L),
+ %%
+ {ok,S} = gen_sctp:open(),
+ jog_netns_opt(S),
+ ok = gen_sctp:close(S);
+ {error,einval} ->
+ {skip,"setns() not supported"}
+ end.
+
+jog_netns_opt(S) ->
+ %% This is just jogging the option mechanics
+ ok = inet:setopts(S, [{netns,""}]),
+ {ok,[{netns,""}]} = inet:getopts(S, [netns]),
+ ok = inet:setopts(S, [{netns,"/proc/self/ns/net"}]),
+ {ok,[{netns,"/proc/self/ns/net"}]} = inet:getopts(S, [netns]),
+ ok.
+
+
+%% Manual test to be run outside test_server in an emulator
+%% started by root, in a machine with setns() support...
+test_netns() ->
+ DefaultIF = v1,
+ DefaultIP = {192,168,1,17},
+ Namespace = "test",
+ NamespaceIF = v2,
+ NamespaceIP = {192,168,1,18},
+ %%
+ DefaultIPString = inet_parse:ntoa(DefaultIP),
+ NamespaceIPString = inet_parse:ntoa(NamespaceIP),
+ cmd("ip netns add ~s",
+ [Namespace]),
+ cmd("ip link add name ~w type veth peer name ~w netns ~s",
+ [DefaultIF,NamespaceIF,Namespace]),
+ cmd("ip netns exec ~s ip addr add ~s/30 dev ~w",
+ [Namespace,NamespaceIPString,NamespaceIF]),
+ cmd("ip netns exec ~s ip link set ~w up",
+ [Namespace,NamespaceIF]),
+ cmd("ip addr add ~s/30 dev ~w",
+ [DefaultIPString,DefaultIF]),
+ cmd("ip link set ~w up",
+ [DefaultIF]),
+ try test_netns(
+ {DefaultIF,DefaultIP},
+ filename:join("/var/run/netns/", Namespace),
+ {NamespaceIF,NamespaceIP}) of
+ Result ->
+ io:put_chars(["#### Test done",io_lib:nl()]),
+ Result
+ after
+ cmd("ip link delete ~w type veth",
+ [DefaultIF]),
+ cmd("ip netns delete ~s",
+ [Namespace])
+ end.
+
+test_netns({DefaultIF,DefaultIP}, Namespace, {NamespaceIF,NamespaceIP}) ->
+ {ok,ListenSocket} = gen_tcp:listen(0, [{active,false}]),
+ {ok,[{addr,DefaultIP}]} = inet:ifget(ListenSocket, DefaultIF, [addr]),
+ {ok,ListenPort} = inet:port(ListenSocket),
+ {ok,ConnectSocket} =
+ gen_tcp:connect(
+ DefaultIP, ListenPort, [{active,false},{netns,Namespace}], 3000),
+ {ok,[{addr,NamespaceIP}]} = inet:ifget(ConnectSocket, NamespaceIF, [addr]),
+ {ok,ConnectPort} = inet:port(ConnectSocket),
+ {ok,AcceptSocket} = gen_tcp:accept(ListenSocket, 0),
+ {ok,AcceptPort} = inet:port(AcceptSocket),
+ {ok,{NamespaceIP,ConnectPort}} = inet:peername(AcceptSocket),
+ {ok,{DefaultIP,AcceptPort}} = inet:peername(ConnectSocket),
+ ok = gen_tcp:send(ConnectSocket, "data"),
+ ok = gen_tcp:close(ConnectSocket),
+ {ok,"data"} = gen_tcp:recv(AcceptSocket, 4, 1000),
+ {error,closed} = gen_tcp:recv(AcceptSocket, 1, 1000),
+ ok = gen_tcp:close(AcceptSocket),
+ ok = gen_tcp:close(ListenSocket).
+
+cmd(Cmd, Args) ->
+ cmd(io_lib:format(Cmd, Args)).
+%%
+cmd(CmdString) ->
+ io:put_chars(["# ",CmdString,io_lib:nl()]),
+ io:put_chars([os:cmd(CmdString++" ; echo ' =>' $?")]),
+ ok.
diff --git a/lib/kernel/test/interactive_shell_SUITE.erl b/lib/kernel/test/interactive_shell_SUITE.erl
index d7d9434b1f..a375adceea 100644
--- a/lib/kernel/test/interactive_shell_SUITE.erl
+++ b/lib/kernel/test/interactive_shell_SUITE.erl
@@ -22,7 +22,7 @@
init_per_group/2,end_per_group/2,
get_columns_and_rows/1, exit_initial/1, job_control_local/1,
job_control_remote/1,
- job_control_remote_noshell/1]).
+ job_control_remote_noshell/1,ctrl_keys/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
%% For spawn
@@ -41,7 +41,8 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[get_columns_and_rows, exit_initial, job_control_local,
- job_control_remote, job_control_remote_noshell].
+ job_control_remote, job_control_remote_noshell,
+ ctrl_keys].
groups() ->
[].
@@ -289,7 +290,51 @@ job_control_remote_noshell(Config) when is_list(Config) ->
?line stop_noshell_node(NSNode),
?line Res
end.
-
+
+ctrl_keys(suite) -> [];
+ctrl_keys(doc) -> ["Tests various control keys"];
+ctrl_keys(_Conf) when is_list(_Conf) ->
+ Cu=[$\^u],
+ Cw=[$\^w],
+ Home=[27,$O,$H],
+ End=[27,$O,$F],
+ rtnode([{putline,""},
+ {putline,"2."},
+ {getline,"2"},
+ {putline,"\"hello "++Cw++"world\"."}, % test <CTRL>+W
+ {getline,"\"world\""},
+ {putline,"\"hello "++Cu++"\"world\"."}, % test <CTRL>+U
+ {getline,"\"world\""},
+ {putline,"world\"."++Home++"\"hello "}, % test <HOME>
+ {getline,"\"hello world\""},
+ {putline,"world"++Home++"\"hello "++End++"\"."}, % test <END>
+ {getline,"\"hello world\""}]
+ ++wordLeft()++wordRight(),[]).
+
+
+wordLeft() ->
+ L1=[27,27,$[,$D],
+ L2=[27]++"[5D",
+ L3=[27]++"[1;5D",
+ wordLeft(L1)++wordLeft(L2)++wordLeft(L3).
+
+wordLeft(Chars) ->
+ End=[27,$O,$F],
+ [{putline,"\"world\""++Chars++"hello "++End++"."},
+ {getline,"\"hello world\""}].
+
+wordRight() ->
+ R1=[27,27,$[,$C],
+ R2=[27]++"[5C",
+ R3=[27]++"[1;5C",
+ wordRight(R1)++wordRight(R2)++wordRight(R3).
+
+wordRight(Chars) ->
+ Home=[27,$O,$H],
+ [{putline,"world"++Home++"\"hello "++Chars++"\"."},
+ {getline,"\"hello world\""}].
+
+
rtnode(C,N) ->
rtnode(C,N,[]).
rtnode(Commands,Nodename,ErlPrefix) ->
diff --git a/lib/kernel/test/kernel_smoke.spec b/lib/kernel/test/kernel_smoke.spec
new file mode 100644
index 0000000000..e5d8273c56
--- /dev/null
+++ b/lib/kernel/test/kernel_smoke.spec
@@ -0,0 +1,9 @@
+{config, "../test_server/ts.config"}.
+{config, "../test_server/ts.unix.config"}.
+
+{cases,"../kernel_test", inet_SUITE,[t_gethostbyaddr,t_gethostbyname,
+ t_gethostbyaddr_v6,t_gethostbyname_v6,t_gethostnative,getifaddrs]}.
+{cases,"../kernel_test", inet_res_SUITE,[gethostbyaddr,gethostbyname,
+ gethostbyaddr_v6,gethostbyname_v6,basic]}.
+{cases,"../kernel_test", gen_tcp_echo_SUITE,[active_echo]}.
+{cases,"../kernel_test", heart_SUITE,[reboot]}.
diff --git a/lib/megaco/doc/src/notes.xml b/lib/megaco/doc/src/notes.xml
index 50b2661c57..a1039cbda0 100644
--- a/lib/megaco/doc/src/notes.xml
+++ b/lib/megaco/doc/src/notes.xml
@@ -36,7 +36,23 @@
section is the version number of Megaco.</p>
- <section><title>Megaco 3.17.0.1</title>
+ <section><title>Megaco 3.17.0.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Introduced functionality for inspection of system and
+ build configuration.</p>
+ <p>
+ Own Id: OTP-11196</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Megaco 3.17.0.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/megaco/src/app/megaco.appup.src b/lib/megaco/src/app/megaco.appup.src
index b3659366a4..da171e0c18 100644
--- a/lib/megaco/src/app/megaco.appup.src
+++ b/lib/megaco/src/app/megaco.appup.src
@@ -170,6 +170,8 @@
{"%VSN%",
[
+ {"3.17.0.1", []},
+ {"3.17", []},
{"3.16.0.3",
[
{update, megaco_flex_scanner_handler, {advanced, upgrade_from_pre_3_17},
@@ -178,6 +180,8 @@
}
],
[
+ {"3.17.0.1", []},
+ {"3.17", []},
{"3.16.0.3",
[
{update, megaco_flex_scanner_handler, {advanced, downgrade_to_pre_3_17},
diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk
index db956102a6..ea4e9f2eb8 100644
--- a/lib/megaco/vsn.mk
+++ b/lib/megaco/vsn.mk
@@ -18,6 +18,6 @@
# %CopyrightEnd%
APPLICATION = megaco
-MEGACO_VSN = 3.17.0.1
+MEGACO_VSN = 3.17.0.2
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)"
diff --git a/lib/mnesia/doc/src/notes.xml b/lib/mnesia/doc/src/notes.xml
index 99a26dd281..da66a647f5 100644
--- a/lib/mnesia/doc/src/notes.xml
+++ b/lib/mnesia/doc/src/notes.xml
@@ -38,7 +38,36 @@
thus constitutes one section in this document. The title of each
section is the version number of Mnesia.</p>
- <section><title>Mnesia 4.9</title>
+ <section><title>Mnesia 4.10</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix timing issues in checkpoint creation.</p>
+ <p>
+ Own Id: OTP-10957</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fixed a problem where the fallback BUP file is removed
+ when calling mnesia:uninstall_fallback and mnesia is not
+ started.</p>
+ <p>
+ Own Id: OTP-11241</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Mnesia 4.9</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
diff --git a/lib/mnesia/src/mnesia_bup.erl b/lib/mnesia/src/mnesia_bup.erl
index fd87be1759..3b084e7371 100644
--- a/lib/mnesia/src/mnesia_bup.erl
+++ b/lib/mnesia/src/mnesia_bup.erl
@@ -1052,11 +1052,7 @@ local_uninstall_fallback(Master, FA) ->
Tmp = FA2#fallback_args.fallback_tmp,
Bup = FA2#fallback_args.fallback_bup,
file:delete(Tmp),
- Res =
- case fallback_exists(Bup) of
- true -> file:delete(Bup);
- false -> ok
- end,
+ Res = file:delete(Bup),
?eval_debug_fun({?MODULE, uninstall_fallback2, post_delete}, []),
Master ! {self(), Res},
unlink(Master),
diff --git a/lib/mnesia/src/mnesia_checkpoint.erl b/lib/mnesia/src/mnesia_checkpoint.erl
index eb8fe38908..173e3be2f5 100644
--- a/lib/mnesia/src/mnesia_checkpoint.erl
+++ b/lib/mnesia/src/mnesia_checkpoint.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013
%%
%% 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
@@ -31,8 +31,7 @@
tm_retain/5,
tm_enter_pending/1,
tm_enter_pending/3,
- tm_exit_pending/1,
- convert_cp_record/1
+ tm_exit_pending/1
]).
%% Public interface
@@ -88,25 +87,6 @@
pid
}).
-%% Old record definition
--record(checkpoint, {name,
- allow_remote,
- ram_overrides_dump,
- nodes,
- node,
- now,
- min,
- max,
- pending_tab,
- wait_for_old,
- is_activated,
- ignore_new,
- retainers,
- iterators,
- supervisor,
- pid
- }).
-
-record(retainer, {cp_name, tab_name, store, writers = [], really_retain = true}).
-record(iter, {tab_name, oid_tab, main_tab, retainer_tab, source, val, pid}).
@@ -129,15 +109,6 @@ tm_prepare(Cp) when is_record(Cp, checkpoint_args) ->
start_retainer(Cp);
true ->
{error, {already_exists, Name, node()}}
- end;
-tm_prepare(Cp) when is_record(Cp, checkpoint) ->
- %% Node with old protocol sent an old checkpoint record
- %% and we have to convert it
- case convert_cp_record(Cp) of
- {ok, NewCp} ->
- tm_prepare(NewCp);
- {error, Reason} ->
- {error, Reason}
end.
tm_mnesia_down(Node) ->
@@ -156,6 +127,7 @@ tm_enter_pending(Pending) ->
tm_enter_pending([], Pending) ->
Pending;
tm_enter_pending([Tab | Tabs], Pending) ->
+ %% io:format("Add ~p ~p ~p~n",[Tab, Pending, hd(tl(element(2, process_info(self(), current_stacktrace))))]),
catch ?ets_insert(Tab, Pending),
tm_enter_pending(Tabs, Pending).
@@ -371,9 +343,7 @@ activate(Args) ->
end.
args2cp(Args) when is_list(Args)->
- case catch lists:foldl(fun check_arg/2, #checkpoint_args{}, Args) of
- {'EXIT', Reason} ->
- {error, Reason};
+ try lists:foldl(fun check_arg/2, #checkpoint_args{}, Args) of
Cp ->
case check_tables(Cp) of
{error, Reason} ->
@@ -381,6 +351,10 @@ args2cp(Args) when is_list(Args)->
{ok, Overriders, AllTabs} ->
arrange_retainers(Cp, Overriders, AllTabs)
end
+ catch exit:Reason ->
+ {error, Reason};
+ error:Reason ->
+ {error, Reason}
end;
args2cp(Args) ->
{error, {badarg, Args}}.
@@ -390,10 +364,10 @@ check_arg({name, Name}, Cp) ->
true ->
exit({already_exists, Name});
false ->
- case catch tab2retainer({foo, Name}) of
- List when is_list(List) ->
- Cp#checkpoint_args{name = Name};
- _ ->
+ try
+ [_|_] = tab2retainer({foo, Name}),
+ Cp#checkpoint_args{name = Name}
+ catch _:_ ->
exit({badarg, Name})
end
end;
@@ -641,11 +615,7 @@ init(Cp) ->
process_flag(priority, high), %% Needed dets files might starve the system
Name = Cp#checkpoint_args.name,
Props = [set, public, {keypos, 2}],
- case catch ?ets_new_table(mnesia_pending_checkpoint, Props) of
- {'EXIT', Reason} -> %% system limit
- Msg = "Cannot create an ets table for pending transactions",
- Error = {error, {system_limit, Name, Msg, Reason}},
- proc_lib:init_ack(Cp#checkpoint_args.supervisor, Error);
+ try ?ets_new_table(mnesia_pending_checkpoint, Props) of
PendingTab ->
Rs = [prepare_tab(Cp, R) || R <- Cp#checkpoint_args.retainers],
Cp2 = Cp#checkpoint_args{retainers = Rs,
@@ -658,6 +628,10 @@ init(Cp) ->
dbg_out("Checkpoint ~p (~p) started~n", [Name, self()]),
proc_lib:init_ack(Cp2#checkpoint_args.supervisor, {ok, self()}),
retainer_loop(Cp2)
+ catch error:Reason -> %% system limit
+ Msg = "Cannot create an ets table for pending transactions",
+ Error = {error, {system_limit, Name, Msg, Reason}},
+ proc_lib:init_ack(Cp#checkpoint_args.supervisor, Error)
end.
prepare_tab(Cp, R) ->
@@ -798,104 +772,142 @@ retainer_delete({dets, Store}) ->
Fname = tab2retainer(Store),
file:delete(Fname).
-retainer_loop(Cp) ->
- Name = Cp#checkpoint_args.name,
+retainer_loop(Cp = #checkpoint_args{is_activated=false, name=Name}) ->
receive
- {_From, {retain, Tid, Tab, Key, OldRecs}}
- when Cp#checkpoint_args.wait_for_old == [] ->
- R = val({Tab, {retainer, Name}}),
- PendingTab = Cp#checkpoint_args.pending_tab,
- case R#retainer.really_retain of
- true when PendingTab =:= undefined ->
- Store = R#retainer.store,
- case retainer_get(Store, Key) of
- [] -> retainer_put(Store, {Tab, Key, OldRecs});
- _ -> already_retained
- end;
- true ->
- case ets:member(PendingTab, Tid) of
- true -> ignore;
- false ->
- Store = R#retainer.store,
- case retainer_get(Store, Key) of
- [] -> retainer_put(Store, {Tab, Key, OldRecs});
- _ -> already_retained
- end
- end;
- false ->
- ignore
- end,
- retainer_loop(Cp);
-
%% Adm
+ {From, {activate, Pending}} ->
+ StillPending = mnesia_recover:still_pending(Pending),
+ enter_still_pending(StillPending, Cp#checkpoint_args.pending_tab),
+ Local = [Tid || #tid{pid=Pid} = Tid <- StillPending, node(Pid) =/= node()],
+ Cp2 = maybe_activate(Cp#checkpoint_args{wait_for_old = Local}),
+
+ reply(From, Name, activated),
+ retainer_loop(Cp2);
+
+ {_From, {exit_pending, Tid}} when is_list(Cp#checkpoint_args.wait_for_old) ->
+ StillPending = lists:delete(Tid, Cp#checkpoint_args.wait_for_old),
+ Cp2 = Cp#checkpoint_args{wait_for_old = StillPending},
+ Cp3 = maybe_activate(Cp2),
+ retainer_loop(Cp3);
+
{From, deactivate} ->
do_stop(Cp),
reply(From, Name, deactivated),
unlink(From),
exit(shutdown);
+ {From, get_checkpoint} ->
+ reply(From, Name, Cp),
+ retainer_loop(Cp);
+ {_From, {add_retainer, R, Node}} ->
+ Cp2 = do_add_retainer(Cp, R, Node),
+ retainer_loop(Cp2);
+
+ {From, collect_pending} ->
+ PendingTab = Cp#checkpoint_args.pending_tab,
+ del(pending_checkpoints, PendingTab),
+ Pending = ?ets_match_object(PendingTab, '_'),
+ reply(From, Name, {ok, Pending}),
+ retainer_loop(Cp);
+
+ {_From, {mnesia_down, Node}} ->
+ Cp2 = do_del_retainers(Cp, Node),
+ retainer_loop(Cp2);
+
{'EXIT', Parent, _} when Parent == Cp#checkpoint_args.supervisor ->
%% do_stop(Cp),
%% assume that entire Mnesia is terminating
exit(shutdown);
- {_From, {mnesia_down, Node}} ->
- Cp2 = do_del_retainers(Cp, Node),
- retainer_loop(Cp2);
+ {'EXIT', From, _Reason} ->
+ Iters = [Iter || Iter <- Cp#checkpoint_args.iterators,
+ check_iter(From, Iter)],
+ retainer_loop(Cp#checkpoint_args{iterators = Iters});
+
+ {system, From, Msg} ->
+ dbg_out("~p got {system, ~p, ~p}~n", [?MODULE, From, Msg]),
+ sys:handle_system_msg(Msg, From, Cp#checkpoint_args.supervisor,
+ ?MODULE, [], Cp)
+ end;
+
+retainer_loop(Cp = #checkpoint_args{name=Name}) ->
+ receive
+ {_From, {retain, Tid, Tab, Key, OldRecs}} ->
+ R = val({Tab, {retainer, Name}}),
+ PendingTab = Cp#checkpoint_args.pending_tab,
+ case R#retainer.really_retain of
+ true ->
+ Store = R#retainer.store,
+ try true = ets:member(PendingTab, Tid),
+ %% io:format("CP: ~p ~p ~p ~p~n",[true, Tab, Key, Tid]),
+ case retainer_get(Store, Key) of
+ [] -> ignore;
+ _ -> ets:delete(element(2,Store), Key)
+ end
+ catch _:_ ->
+ %% io:format("CP: ~p ~p ~p ~p~n",[false, Tab, Key, Tid]),
+ case retainer_get(Store, Key) of
+ [] -> retainer_put(Store, {Tab, Key, OldRecs});
+ _ -> already_retained
+ end
+ end;
+ false ->
+ ignore
+ end,
+ retainer_loop(Cp);
+
+ %% Adm
{From, get_checkpoint} ->
reply(From, Name, Cp),
retainer_loop(Cp);
- {From, {add_copy, Tab, Node}} when Cp#checkpoint_args.wait_for_old == [] ->
+ {From, {add_copy, Tab, Node}} ->
{Res, Cp2} = do_add_copy(Cp, Tab, Node),
reply(From, Name, Res),
retainer_loop(Cp2);
- {From, {del_copy, Tab, Node}} when Cp#checkpoint_args.wait_for_old == [] ->
+ {From, {del_copy, Tab, Node}} ->
Cp2 = do_del_copy(Cp, Tab, Node),
reply(From, Name, ok),
retainer_loop(Cp2);
- {From, {change_copy, Tab, From, To}} when Cp#checkpoint_args.wait_for_old == [] ->
+ {From, {change_copy, Tab, From, To}} ->
Cp2 = do_change_copy(Cp, Tab, From, To),
reply(From, Name, ok),
retainer_loop(Cp2);
{_From, {add_retainer, R, Node}} ->
Cp2 = do_add_retainer(Cp, R, Node),
retainer_loop(Cp2);
- {_From, {del_retainer, R, Node}} when Cp#checkpoint_args.wait_for_old == [] ->
+ {_From, {del_retainer, R, Node}} ->
Cp2 = do_del_retainer(Cp, R, Node),
retainer_loop(Cp2);
%% Iteration
- {From, {iter_begin, Iter}} when Cp#checkpoint_args.wait_for_old == [] ->
+ {From, {iter_begin, Iter}} ->
Cp2 = iter_begin(Cp, From, Iter),
retainer_loop(Cp2);
- {From, {iter_end, Iter}} when Cp#checkpoint_args.wait_for_old == [] ->
+ {From, {iter_end, Iter}} ->
retainer_fixtable(Iter#iter.oid_tab, false),
Iters = Cp#checkpoint_args.iterators -- [Iter],
reply(From, Name, ok),
- retainer_loop(Cp#checkpoint_args{iterators = Iters});
-
- {_From, {exit_pending, Tid}}
- when is_list(Cp#checkpoint_args.wait_for_old) ->
- StillPending = lists:delete(Tid, Cp#checkpoint_args.wait_for_old),
- Cp2 = Cp#checkpoint_args{wait_for_old = StillPending},
- Cp3 = maybe_activate(Cp2),
- retainer_loop(Cp3);
+ retainer_loop(Cp#checkpoint_args{iterators = Iters});
- {From, collect_pending} ->
- PendingTab = Cp#checkpoint_args.pending_tab,
- del(pending_checkpoints, PendingTab),
- Pending = ?ets_match_object(PendingTab, '_'),
- reply(From, Name, {ok, Pending}),
+ {_From, {exit_pending, _Tid}} ->
retainer_loop(Cp);
- {From, {activate, Pending}} ->
- StillPending = mnesia_recover:still_pending(Pending),
- enter_still_pending(StillPending, Cp#checkpoint_args.pending_tab),
- Cp2 = maybe_activate(Cp#checkpoint_args{wait_for_old = StillPending}),
- reply(From, Name, activated),
+ {From, deactivate} ->
+ do_stop(Cp),
+ reply(From, Name, deactivated),
+ unlink(From),
+ exit(shutdown);
+
+ {_From, {mnesia_down, Node}} ->
+ Cp2 = do_del_retainers(Cp, Node),
retainer_loop(Cp2);
+ {'EXIT', Parent, _} when Parent == Cp#checkpoint_args.supervisor ->
+ %% do_stop(Cp),
+ %% assume that entire Mnesia is terminating
+ exit(shutdown);
+
{'EXIT', From, _Reason} ->
Iters = [Iter || Iter <- Cp#checkpoint_args.iterators,
check_iter(From, Iter)],
@@ -903,13 +915,17 @@ retainer_loop(Cp) ->
{system, From, Msg} ->
dbg_out("~p got {system, ~p, ~p}~n", [?MODULE, From, Msg]),
- sys:handle_system_msg(Msg, From, no_parent, ?MODULE, [], Cp)
+ sys:handle_system_msg(Msg, From, Cp#checkpoint_args.supervisor,
+ ?MODULE, [], Cp);
+ Msg ->
+ dbg_out("~p got ~p~n", [?MODULE, Msg])
end.
maybe_activate(Cp)
- when Cp#checkpoint_args.wait_for_old == [],
- Cp#checkpoint_args.is_activated == false ->
- Cp#checkpoint_args{pending_tab = undefined, is_activated = true};
+ when Cp#checkpoint_args.wait_for_old == [],
+ Cp#checkpoint_args.is_activated == false ->
+ Cp#checkpoint_args{%% pending_tab = undefined,
+ is_activated = true};
maybe_activate(Cp) ->
Cp.
@@ -1226,65 +1242,6 @@ system_terminate(_Reason, _Parent,_Debug, Cp) ->
system_code_change(Cp, _Module, _OldVsn, _Extra) ->
{ok, Cp}.
-convert_cp_record(Cp) when is_record(Cp, checkpoint) ->
- ROD =
- case Cp#checkpoint.ram_overrides_dump of
- true -> Cp#checkpoint.min ++ Cp#checkpoint.max;
- false -> []
- end,
-
- {ok, #checkpoint_args{name = Cp#checkpoint.name,
- allow_remote = Cp#checkpoint.name,
- ram_overrides_dump = ROD,
- nodes = Cp#checkpoint.nodes,
- node = Cp#checkpoint.node,
- now = Cp#checkpoint.now,
- cookie = ?unique_cookie,
- min = Cp#checkpoint.min,
- max = Cp#checkpoint.max,
- pending_tab = Cp#checkpoint.pending_tab,
- wait_for_old = Cp#checkpoint.wait_for_old,
- is_activated = Cp#checkpoint.is_activated,
- ignore_new = Cp#checkpoint.ignore_new,
- retainers = Cp#checkpoint.retainers,
- iterators = Cp#checkpoint.iterators,
- supervisor = Cp#checkpoint.supervisor,
- pid = Cp#checkpoint.pid
- }};
-convert_cp_record(Cp) when is_record(Cp, checkpoint_args) ->
- AllTabs = Cp#checkpoint_args.min ++ Cp#checkpoint_args.max,
- ROD = case Cp#checkpoint_args.ram_overrides_dump of
- [] ->
- false;
- AllTabs ->
- true;
- _ ->
- error
- end,
- if
- ROD == error ->
- {error, {"Old node cannot handle new checkpoint protocol",
- ram_overrides_dump}};
- true ->
- {ok, #checkpoint{name = Cp#checkpoint_args.name,
- allow_remote = Cp#checkpoint_args.name,
- ram_overrides_dump = ROD,
- nodes = Cp#checkpoint_args.nodes,
- node = Cp#checkpoint_args.node,
- now = Cp#checkpoint_args.now,
- min = Cp#checkpoint_args.min,
- max = Cp#checkpoint_args.max,
- pending_tab = Cp#checkpoint_args.pending_tab,
- wait_for_old = Cp#checkpoint_args.wait_for_old,
- is_activated = Cp#checkpoint_args.is_activated,
- ignore_new = Cp#checkpoint_args.ignore_new,
- retainers = Cp#checkpoint_args.retainers,
- iterators = Cp#checkpoint_args.iterators,
- supervisor = Cp#checkpoint_args.supervisor,
- pid = Cp#checkpoint_args.pid
- }}
- end.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%
val(Var) ->
diff --git a/lib/mnesia/test/mnesia_consistency_test.erl b/lib/mnesia/test/mnesia_consistency_test.erl
index 922b89ec2b..a76a0116d5 100644
--- a/lib/mnesia/test/mnesia_consistency_test.erl
+++ b/lib/mnesia/test/mnesia_consistency_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -39,7 +39,6 @@ all() ->
{group, consistency_after_move_replica},
{group, consistency_after_transform_table},
consistency_after_change_table_copy_type,
- {group, consistency_after_fallback},
{group, consistency_after_restore},
consistency_after_rename_of_node,
{group, checkpoint_retainer_consistency},
@@ -99,10 +98,14 @@ groups() ->
[{group, updates_during_checkpoint_activation},
{group, updates_during_checkpoint_iteration},
{group, load_table_with_activated_checkpoint},
- {group,
- add_table_copy_to_table_checkpoint}]},
+ {group, add_table_copy_to_table_checkpoint},
+ {group, consistency_after_fallback}
+ ]},
{updates_during_checkpoint_activation, [],
- [updates_during_checkpoint_activation_2_ram,
+ [updates_during_checkpoint_activation_1_ram,
+ updates_during_checkpoint_activation_1_disc,
+ updates_during_checkpoint_activation_1_disc_only,
+ updates_during_checkpoint_activation_2_ram,
updates_during_checkpoint_activation_2_disc,
updates_during_checkpoint_activation_2_disc_only,
updates_during_checkpoint_activation_3_ram,
@@ -730,6 +733,18 @@ consistency_after_rename_of_node(doc) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+updates_during_checkpoint_activation_1_ram(suite) -> [];
+updates_during_checkpoint_activation_1_ram(Config) when is_list(Config) ->
+ updates_during_checkpoint_activation(ram_copies, 1, Config).
+
+updates_during_checkpoint_activation_1_disc(suite) -> [];
+updates_during_checkpoint_activation_1_disc(Config) when is_list(Config) ->
+ updates_during_checkpoint_activation(disc_copies, 1, Config).
+
+updates_during_checkpoint_activation_1_disc_only(suite) -> [];
+updates_during_checkpoint_activation_1_disc_only(Config) when is_list(Config) ->
+ updates_during_checkpoint_activation(disc_only_copies, 1, Config).
+
updates_during_checkpoint_activation_2_ram(suite) -> [];
updates_during_checkpoint_activation_2_ram(Config) when is_list(Config) ->
updates_during_checkpoint_activation(ram_copies, 2, Config).
@@ -771,7 +786,8 @@ updates_during_checkpoint_activation(ReplicaType,NodeConfig,Config) ->
timer:sleep(timer:seconds(Delay)),
{ok, CPName, _NodeList} =
- mnesia:activate_checkpoint([{max, mnesia:system_info(tables)}]),
+ mnesia:activate_checkpoint([{max, mnesia:system_info(tables)},
+ {ram_overrides_dump, true}]),
timer:sleep(timer:seconds(Delay)),
%% Stop tpcb
diff --git a/lib/mnesia/vsn.mk b/lib/mnesia/vsn.mk
index d7a132bc1a..c8187013be 100644
--- a/lib/mnesia/vsn.mk
+++ b/lib/mnesia/vsn.mk
@@ -1 +1 @@
-MNESIA_VSN = 4.9
+MNESIA_VSN = 4.10
diff --git a/lib/observer/doc/src/notes.xml b/lib/observer/doc/src/notes.xml
index 998a4e4f9f..8a7a5cc41b 100644
--- a/lib/observer/doc/src/notes.xml
+++ b/lib/observer/doc/src/notes.xml
@@ -31,6 +31,23 @@
<p>This document describes the changes made to the Observer
application.</p>
+<section><title>Observer 1.3.1.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The encoding of the <c>notes.xml</c> file has been
+ changed from latin1 to utf-8 to avoid future merge
+ problems.</p>
+ <p>
+ Own Id: OTP-11310</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Observer 1.3.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/observer/vsn.mk b/lib/observer/vsn.mk
index 96d9d885da..e933f7480c 100644
--- a/lib/observer/vsn.mk
+++ b/lib/observer/vsn.mk
@@ -1 +1 @@
-OBSERVER_VSN = 1.3.1
+OBSERVER_VSN = 1.3.1.1
diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c
index 5730e20774..8de81a30ae 100644
--- a/lib/odbc/c_src/odbcserver.c
+++ b/lib/odbc/c_src/odbcserver.c
@@ -277,11 +277,15 @@ int main(void)
msg = receive_erlang_port_msg();
temp = strtok(msg, ";");
+ if (temp == NULL)
+ DO_EXIT(EXIT_STDIN_BODY);
length = strlen(temp);
supervisor_port = safe_malloc(length + 1);
strcpy(supervisor_port, temp);
temp = strtok(NULL, ";");
+ if (temp == NULL)
+ DO_EXIT(EXIT_STDIN_BODY);
length = strlen(temp);
odbc_port = safe_malloc(length + 1);
strcpy(odbc_port, temp);
@@ -1819,12 +1823,20 @@ static byte * receive_erlang_port_msg(void)
len |= lengthstr[i];
}
+ if (len <= 0 || len > 1024) {
+ DO_EXIT(EXIT_STDIN_HEADER);
+ }
+
buffer = (byte *)safe_malloc(len);
if (read_exact(buffer, len) <= 0) {
DO_EXIT(EXIT_STDIN_BODY);
}
+ if (buffer[len-1] != '\0') {
+ DO_EXIT(EXIT_STDIN_BODY);
+ }
+
return buffer;
}
diff --git a/lib/odbc/doc/src/notes.xml b/lib/odbc/doc/src/notes.xml
index a1c6f999e0..13dff1489f 100644
--- a/lib/odbc/doc/src/notes.xml
+++ b/lib/odbc/doc/src/notes.xml
@@ -31,7 +31,44 @@
<p>This document describes the changes made to the odbc application.
</p>
- <section><title>ODBC 2.10.16</title>
+ <section><title>ODBC 2.10.17</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The format of the xml source for documentation is
+ corrected in order to conform to the DTDs and to pass
+ xmllint without errors.</p>
+ <p>
+ Own Id: OTP-11193</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Introduced functionality for inspection of system and
+ build configuration.</p>
+ <p>
+ Own Id: OTP-11196</p>
+ </item>
+ <item>
+ <p>
+ Prevent odbcserver crash if it's executed and supplied
+ incorrect data to stdin. Thanks to Sergei Golovan.</p>
+ <p>
+ Own Id: OTP-11233</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>ODBC 2.10.16</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/odbc/doc/src/odbc.xml b/lib/odbc/doc/src/odbc.xml
index 0e9505390b..99b9bbbe88 100644
--- a/lib/odbc/doc/src/odbc.xml
+++ b/lib/odbc/doc/src/odbc.xml
@@ -213,12 +213,13 @@
Note that this information is probably of little use when writing database-independent code,
but can be of assistance in providing more sophisticated error handling when dealing with
a known underlying database.
+ </p>
<list type="bulleted">
<item><c>ODBCErrorCode</c> is the ODBC error string returned by the ODBC driver.</item>
<item><c>NativeErrorCode</c> is the numberic error code returned by the underlying database. The possible values
and their meanings are dependent on the database being used.</item>
<item><c>Reason</c> is as per the <c>Reason</c> field when extended errors are not enabled.</item>
- </list></p>
+ </list>
</desc>
</func>
<func>
diff --git a/lib/odbc/test/odbc_connect_SUITE.erl b/lib/odbc/test/odbc_connect_SUITE.erl
index 74ae2c96e6..2a16388929 100644
--- a/lib/odbc/test/odbc_connect_SUITE.erl
+++ b/lib/odbc/test/odbc_connect_SUITE.erl
@@ -77,6 +77,8 @@ end_per_group(_GroupName, Config) ->
%% variable, but should NOT alter/remove any existing entries.
%%--------------------------------------------------------------------
init_per_suite(Config) when is_list(Config) ->
+ file:write_file(filename:join([proplists:get_value(priv_dir,Config),
+ "..","..","..","ignore_core_files"]),""),
case odbc_test_lib:skip() of
true ->
{skip, "ODBC not supported"};
diff --git a/lib/odbc/vsn.mk b/lib/odbc/vsn.mk
index 98a9f4ab4a..34c3eff933 100644
--- a/lib/odbc/vsn.mk
+++ b/lib/odbc/vsn.mk
@@ -1 +1 @@
-ODBC_VSN = 2.10.16
+ODBC_VSN = 2.10.17
diff --git a/lib/os_mon/c_src/Makefile.in b/lib/os_mon/c_src/Makefile.in
index 51569f6ec9..f84ccf7c87 100644
--- a/lib/os_mon/c_src/Makefile.in
+++ b/lib/os_mon/c_src/Makefile.in
@@ -84,6 +84,7 @@ debug opt: $(TARGET_FILES)
clean:
rm -f $(TARGET_FILES)
+ rm -rf $(OBJDIR)
rm -f core *~
docs:
diff --git a/lib/os_mon/c_src/cpu_sup.c b/lib/os_mon/c_src/cpu_sup.c
index 7372d5b0e8..e9fd75a32c 100644
--- a/lib/os_mon/c_src/cpu_sup.c
+++ b/lib/os_mon/c_src/cpu_sup.c
@@ -29,6 +29,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
+#include <string.h>
#if defined(__sun__)
#include <kstat.h>
@@ -120,7 +121,9 @@ typedef struct {
static void util_measure(unsigned int **result_vec, int *result_sz);
+#if defined(__sun__)
static unsigned int misc_measure(char* name);
+#endif
static void send(unsigned int data);
static void sendv(unsigned int data[], int ints);
static void error(char* err_msg);
@@ -140,7 +143,9 @@ int main(int argc, char** argv) {
int rc;
int sz;
unsigned int *rv;
+#if defined(__linux__)
unsigned int no_of_cpus = 0;
+#endif
#if defined(__sun__)
kstat_ctl = kstat_open();
@@ -288,10 +293,10 @@ static unsigned int misc_measure(char* name) {
if(!entry)
return -1;
- if(entry->data_type != KSTAT_DATA_ULONG)
+ if(entry->data_type != KSTAT_DATA_UINT32)
return -1;
- return entry->value.ul;
+ return entry->value.ui32;
}
diff --git a/lib/os_mon/c_src/ferrule.c b/lib/os_mon/c_src/ferrule.c
index 744f302b2d..c55f594f34 100644
--- a/lib/os_mon/c_src/ferrule.c
+++ b/lib/os_mon/c_src/ferrule.c
@@ -50,7 +50,7 @@
#define FDS_STDIN 0
#define FDS_PIPE 1
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
/* usage: ferrule ownpath */
{
int i, pipe_fd;
diff --git a/lib/os_mon/c_src/mod_syslog.c b/lib/os_mon/c_src/mod_syslog.c
index 87fbfbac22..b1bbf80b2a 100644
--- a/lib/os_mon/c_src/mod_syslog.c
+++ b/lib/os_mon/c_src/mod_syslog.c
@@ -47,7 +47,7 @@
#define TRUE 1
#define WAIT 1
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
/* usage: mod_syslog mode ownpath syslogconf */
{
int syslogd_pid, n_lines_copied=0;
@@ -128,6 +128,7 @@ main(int argc, char *argv[])
make_exit(PIPE_NOT_FOUND);
else */
make_exit(OK);
+ return 0;
}
void make_exit(int exit_code)
diff --git a/lib/os_mon/doc/src/notes.xml b/lib/os_mon/doc/src/notes.xml
index a5099a0829..c6b5bc8895 100644
--- a/lib/os_mon/doc/src/notes.xml
+++ b/lib/os_mon/doc/src/notes.xml
@@ -30,6 +30,43 @@
</header>
<p>This document describes the changes made to the OS_Mon application.</p>
+<section><title>Os_Mon 2.2.13</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Use 'df -k -l' to query FreeBSD and OpenBSD about
+ diskspace on local disks. Previously 'df' -k -t ufs' was
+ used but this will not handle zfs or other disks. Just
+ use '-l' instead of listing potential filesystems.</p>
+ <p>
+ Own Id: OTP-11207</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fix compilation on Solaris. Thanks to Maciej Malecki.</p>
+ <p>
+ Own Id: OTP-11213</p>
+ </item>
+ <item>
+ <p>
+ Fix broken cpu_sup:nprocs and others on Solaris 64-bit.
+ Thanks to Simon Cornish.</p>
+ <p>
+ Own Id: OTP-11298</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Os_Mon 2.2.12</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/os_mon/test/Makefile b/lib/os_mon/test/Makefile
index 461bebc102..cbb014324d 100644
--- a/lib/os_mon/test/Makefile
+++ b/lib/os_mon/test/Makefile
@@ -85,7 +85,8 @@ release_spec:
release_tests_spec: make_emakefile
$(INSTALL_DIR) "$(RELSYSDIR)"
- $(INSTALL_DATA) os_mon.spec os_mon.cover $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)"
+ $(INSTALL_DATA) os_mon.spec os_mon.cover os_mon_smoke.spec \
+ $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)"
$(INSTALL_DATA) os_mon_mib_SUITE.cfg "$(RELSYSDIR)"
## tar chf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
diff --git a/lib/os_mon/test/cpu_sup_SUITE.erl b/lib/os_mon/test/cpu_sup_SUITE.erl
index d04adbb6d3..e0382cb0c7 100644
--- a/lib/os_mon/test/cpu_sup_SUITE.erl
+++ b/lib/os_mon/test/cpu_sup_SUITE.erl
@@ -88,6 +88,7 @@ load_api(Config) when is_list(Config) ->
?line N = cpu_sup:nprocs(),
?line true = is_integer(N),
?line true = N>0,
+ ?line true = N<1000000,
%% avg1()
?line Load1 = cpu_sup:avg1(),
diff --git a/lib/os_mon/test/os_mon_smoke.spec b/lib/os_mon/test/os_mon_smoke.spec
new file mode 100644
index 0000000000..6f0d02494b
--- /dev/null
+++ b/lib/os_mon/test/os_mon_smoke.spec
@@ -0,0 +1,3 @@
+{cases,"../os_mon_test",disksup_SUITE,[api]}.
+{cases,"../os_mon_test",cpu_sup_SUITE,[load_api,util_api]}.
+{cases,"../os_mon_test",memsup_SUITE,[api]}. \ No newline at end of file
diff --git a/lib/os_mon/vsn.mk b/lib/os_mon/vsn.mk
index e3acea0258..0af587b9ae 100644
--- a/lib/os_mon/vsn.mk
+++ b/lib/os_mon/vsn.mk
@@ -1 +1 @@
-OS_MON_VSN = 2.2.12
+OS_MON_VSN = 2.2.13
diff --git a/lib/parsetools/doc/src/leex.xml b/lib/parsetools/doc/src/leex.xml
index 0fd5a77e37..7ee0633dac 100644
--- a/lib/parsetools/doc/src/leex.xml
+++ b/lib/parsetools/doc/src/leex.xml
@@ -38,19 +38,21 @@ Token = tuple()</code>
</section>
<funcs>
<func>
- <name>file(FileName) -> ok | error</name>
- <name>file(FileName, Options) -> ok | error</name>
+ <name>file(FileName, [, Options]) -> LeexRet</name>
<fsummary>Generate a lexical analyzer</fsummary>
<type>
<v>FileName = filename()</v>
<v>Options = Option | [Option]</v>
<v>Option =&nbsp;-&nbsp;see below&nbsp;-</v>
- <v>FileReturn = {ok, Scannerfile}
- | {ok, Scannerfile, Warnings}
- | error
- | {error, Warnings, Errors}</v>
+ <v>LeexRet = {ok, Scannerfile}
+ | {ok, Scannerfile, Warnings}
+ | error
+ | {error, Warnings, Errors}</v>
<v>Scannerfile = filename()</v>
<v>Warnings = Errors = [{filename(), [ErrorInfo]}]</v>
+ <v>ErrorInfo = {ErrorLine, module(), Reason}</v>
+ <v>ErrorLine = integer()</v>
+ <v>Reason =&nbsp;-&nbsp;formatable by format_error/1&nbsp;-</v>
</type>
<desc>
<p>Generates a lexical analyzer from the definition in the input
diff --git a/lib/parsetools/doc/src/notes.xml b/lib/parsetools/doc/src/notes.xml
index bfcc38dedd..929daedf74 100644
--- a/lib/parsetools/doc/src/notes.xml
+++ b/lib/parsetools/doc/src/notes.xml
@@ -30,6 +30,41 @@
</header>
<p>This document describes the changes made to the Parsetools application.</p>
+<section><title>Parsetools 2.0.10</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> A bug causing Yecc to generate badly formed parsers
+ when encountering very simple recursive rules has been
+ fixed. (Thanks to Eric Pailleau.) </p>
+ <p>
+ Own Id: OTP-11269</p>
+ </item>
+ <item>
+ <p> A bug where Unicode filenames combined with Latin-1
+ encoding could crash Yecc and Leex has been fixed. </p>
+ <p>
+ Own Id: OTP-11286</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fix leex module`s inability to build unicode-aware
+ lexers. Thanks to Pierre Fenoll.</p>
+ <p>
+ Own Id: OTP-11313</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Parsetools 2.0.9</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/parsetools/src/leex.erl b/lib/parsetools/src/leex.erl
index e531b78a5b..03f864ff03 100644
--- a/lib/parsetools/src/leex.erl
+++ b/lib/parsetools/src/leex.erl
@@ -436,7 +436,7 @@ parse_defs(_, {eof,L}, St) ->
parse_defs(Ifile, {ok,Chars,L}=Line, Ms, St) ->
%% This little beauty matches out a macro definition, RE's are so clear.
MS = "^[ \t]*([A-Z_][A-Za-z0-9_]*)[ \t]*=[ \t]*([^ \t\r\n]*)[ \t\r\n]*\$",
- case re:run(Chars, MS, [{capture,all_but_first,list}]) of
+ case re:run(Chars, MS, [{capture,all_but_first,list},unicode]) of
{match,[Name,Def]} ->
%%io:fwrite("~p = ~p\n", [Name,Def]),
parse_defs(Ifile, nextline(Ifile, L, St), [{Name,Def}|Ms], St);
@@ -491,7 +491,7 @@ parse_rules_end(_, NextLine, REAs, As, St) ->
collect_rule(Ifile, Chars, L0) ->
%% Erlang strings are 1 based, but re 0 :-(
- {match,[{St0,Len}|_]} = re:run(Chars, "[^ \t\r\n]+"),
+ {match,[{St0,Len}|_]} = re:run(Chars, "[^ \t\r\n]+", [unicode]),
St = St0 + 1,
%%io:fwrite("RE = ~p~n", [substr(Chars, St, Len)]),
case collect_action(Ifile, substr(Chars, St+Len), L0, []) of
@@ -548,7 +548,7 @@ var_used(Name, Toks) ->
%% here as it uses info in replace string (&).
parse_rule_regexp(RE0, [{M,Exp}|Ms], St) ->
- Split= re:split(RE0, "\\{" ++ M ++ "\\}", [{return,list}]),
+ Split= re:split(RE0, "\\{" ++ M ++ "\\}", [{return,list},unicode]),
RE1 = string:join(Split, Exp),
parse_rule_regexp(RE1, Ms, St);
parse_rule_regexp(RE, [], St) ->
@@ -1645,10 +1645,14 @@ output_encoding_comment(File, #leex{encoding = Encoding}) ->
output_file_directive(File, Filename, Line) ->
io:fwrite(File, <<"-file(~ts, ~w).\n">>,
- [format_filename(Filename), Line]).
+ [format_filename(Filename, File), Line]).
-format_filename(Filename) ->
- io_lib:write_string(filename:flatten(Filename)).
+format_filename(Filename0, File) ->
+ Filename = filename:flatten(Filename0),
+ case lists:keyfind(encoding, 1, io:getopts(File)) of
+ {encoding, unicode} -> io_lib:write_string(Filename);
+ _ -> io_lib:write_string_as_latin1(Filename)
+ end.
quote($^) -> "\\^";
quote($.) -> "\\.";
diff --git a/lib/parsetools/src/yecc.erl b/lib/parsetools/src/yecc.erl
index 53292b037a..b698beb558 100644
--- a/lib/parsetools/src/yecc.erl
+++ b/lib/parsetools/src/yecc.erl
@@ -482,7 +482,7 @@ generate(St0) ->
F = case member(time, St1#yecc.options) of
true ->
io:fwrite(<<"Generating parser from grammar in ~ts\n">>,
- [format_filename(St1#yecc.infile)]),
+ [format_filename(St1#yecc.infile, St1)]),
fun timeit/3;
false ->
fun(_Name, Fn, St) -> Fn(St) end
@@ -2106,8 +2106,8 @@ output_state_actions(St0, State, State, {Actions, Jump}, SI) ->
output_state_actions(St, State, JState, _XActions, _SI) ->
fwrite(St, <<"%% yeccpars2_~w: see yeccpars2_~w\n\n">>, [State, JState]).
-output_state_actions1(St, State, [], _IsFirst, normal, _SI) ->
- output_state_actions_fini(State, St);
+output_state_actions1(St, State, [], IsFirst, normal, _SI) ->
+ output_state_actions_fini(State, IsFirst, St);
output_state_actions1(St0, State, [], IsFirst, {to, ToS}, _SI) ->
St = delim(St0, IsFirst),
fwrite(St,
@@ -2151,9 +2151,9 @@ output_call_to_includefile(NewState, St) ->
fwrite(St, <<" yeccpars1(S, ~w, Ss, Stack, T, Ts, Tzr)">>,
[NewState]).
-output_state_actions_fini(State, St0) ->
+output_state_actions_fini(State, IsFirst, St0) ->
%% Backward compatible.
- St10 = delim(St0, false),
+ St10 = delim(St0, IsFirst),
St = fwrite(St10, <<"yeccpars2_~w(_, _, _, _, T, _, _) ->\n">>, [State]),
fwrite(St, <<" yeccerror(T).\n\n">>, []).
@@ -2519,7 +2519,7 @@ output_encoding_comment(#yecc{encoding = Encoding}=St) ->
output_file_directive(St, Filename, Line) when St#yecc.file_attrs ->
fwrite(St, <<"-file(~ts, ~w).\n">>,
- [format_filename(Filename), Line]);
+ [format_filename(Filename, St), Line]);
output_file_directive(St, _Filename, _Line) ->
St.
@@ -2547,8 +2547,12 @@ nl(#yecc{outport = Outport, line = Line}=St) ->
io:nl(Outport),
St#yecc{line = Line + 1}.
-format_filename(Filename) ->
- io_lib:write_string(filename:flatten(Filename)).
+format_filename(Filename0, St) ->
+ Filename = filename:flatten(Filename0),
+ case lists:keyfind(encoding, 1, io:getopts(St#yecc.outport)) of
+ {encoding, unicode} -> io_lib:write_string(Filename);
+ _ -> io_lib:write_string_as_latin1(Filename)
+ end.
format_assoc(left) ->
"Left";
diff --git a/lib/parsetools/test/leex_SUITE.erl b/lib/parsetools/test/leex_SUITE.erl
index 576c42dd8e..eb15bebf63 100644
--- a/lib/parsetools/test/leex_SUITE.erl
+++ b/lib/parsetools/test/leex_SUITE.erl
@@ -44,7 +44,7 @@
pt/1, man/1, ex/1, ex2/1, not_yet/1,
- otp_10302/1]).
+ otp_10302/1, otp_11286/1, unicode/1]).
% Default timetrap timeout (set in init_per_testcase).
-define(default_timeout, ?t:minutes(1)).
@@ -65,8 +65,8 @@ all() ->
groups() ->
[{checks, [], [file, compile, syntax]},
- {examples, [], [pt, man, ex, ex2, not_yet]},
- {tickets, [], [otp_10302]}].
+ {examples, [], [pt, man, ex, ex2, not_yet, unicode]},
+ {tickets, [], [otp_10302, otp_11286]}].
init_per_suite(Config) ->
Config.
@@ -400,6 +400,24 @@ pt(Config) when is_list(Config) ->
?line run(Config, Ts),
ok.
+unicode(suite) ->
+ [];
+unicode(Config) when is_list(Config) ->
+ Ts = [{unicode_1,
+ <<"%% -*- coding: utf-8 -*-\n"
+ "Definitions.\n"
+ "RTLarrow = (←)\n"
+ "Rules.\n"
+ "{RTLarrow} : {token,{'<-',TokenLine}}.\n"
+ "Erlang code.\n"
+ "-export([t/0]).\n"
+ "t() -> {ok, [{'<-', 1}], 1} = string(\"←\"), ok.">>,
+ default,
+ ok}],
+
+ ?line run(Config, Ts),
+ ok.
+
man(doc) ->
"Examples from the manpage.";
man(suite) -> [];
@@ -982,6 +1000,68 @@ otp_10302(Config) when is_list(Config) ->
ok.
+otp_11286(doc) ->
+ "OTP-11286. A Unicode filename bug; both Leex and Yecc.";
+otp_11286(suite) -> [];
+otp_11286(Config) when is_list(Config) ->
+ Node = start_node(otp_11286, "+fnu"),
+ Dir = ?privdir,
+ UName = [1024] ++ "u",
+ UDir = filename:join(Dir, UName),
+ ok = rpc:call(Node, file, make_dir, [UDir]),
+
+ %% Note: Cannot use UName as filename since the filename is used
+ %% as module name. To be fixed in R18.
+ Filename = filename:join(UDir, 'OTP-11286.xrl'),
+ Scannerfile = filename:join(UDir, 'OTP-11286.erl'),
+ Options = [return, {scannerfile, Scannerfile}],
+
+ Mini1 = <<"%% coding: utf-8\n"
+ "Definitions.\n"
+ "D = [0-9]\n"
+ "Rules.\n"
+ "{L}+ : {token,{word,TokenLine,TokenChars}}.\n"
+ "Erlang code.\n">>,
+ ok = rpc:call(Node, file, write_file, [Filename, Mini1]),
+ {ok, _, []} = rpc:call(Node, leex, file, [Filename, Options]),
+ {ok,_,_} = rpc:call(Node, compile, file,
+ [Scannerfile,[basic_validation,return]]),
+
+ Mini2 = <<"Definitions.\n"
+ "D = [0-9]\n"
+ "Rules.\n"
+ "{L}+ : {token,{word,TokenLine,TokenChars}}.\n"
+ "Erlang code.\n">>,
+ ok = rpc:call(Node, file, write_file, [Filename, Mini2]),
+ {ok, _, []} = rpc:call(Node, leex, file, [Filename, Options]),
+ {ok,_,_} = rpc:call(Node, compile, file,
+ [Scannerfile,[basic_validation,return]]),
+
+ Mini3 = <<"%% coding: latin-1\n"
+ "Definitions.\n"
+ "D = [0-9]\n"
+ "Rules.\n"
+ "{L}+ : {token,{word,TokenLine,TokenChars}}.\n"
+ "Erlang code.\n">>,
+ ok = rpc:call(Node, file, write_file, [Filename, Mini3]),
+ {ok, _, []} = rpc:call(Node, leex, file, [Filename, Options]),
+ {ok,_,_} = rpc:call(Node, compile, file,
+ [Scannerfile,[basic_validation,return]]),
+
+ true = test_server:stop_node(Node),
+ ok.
+
+start_node(Name, Args) ->
+ [_,Host] = string:tokens(atom_to_list(node()), "@"),
+ ct:log("Trying to start ~w@~s~n", [Name,Host]),
+ case test_server:start_node(Name, peer, [{args,Args}]) of
+ {error,Reason} ->
+ test_server:fail(Reason);
+ {ok,Node} ->
+ ct:log("Node ~p started~n", [Node]),
+ Node
+ end.
+
unwritable(Fname) ->
{ok, Info} = file:read_file_info(Fname),
Mode = Info#file_info.mode - 8#00200,
@@ -1013,7 +1093,7 @@ run_test(Config, Def, Pre) ->
XrlFile = filename:join(DataDir, DefFile),
ErlFile = filename:join(DataDir, Filename),
Opts = [return, warn_unused_vars,{outdir,DataDir}],
- ok = file:write_file(XrlFile, Def),
+ ok = file:write_file(XrlFile, Def, [{encoding, unicode}]),
LOpts = [return, {report, false} |
case Pre of
default ->
diff --git a/lib/parsetools/test/yecc_SUITE.erl b/lib/parsetools/test/yecc_SUITE.erl
index 6389d81739..d308d21f82 100644
--- a/lib/parsetools/test/yecc_SUITE.erl
+++ b/lib/parsetools/test/yecc_SUITE.erl
@@ -48,7 +48,8 @@
otp_5369/1, otp_6362/1, otp_7945/1, otp_8483/1, otp_8486/1,
- otp_7292/1, otp_7969/1, otp_8919/1, otp_10302/1]).
+ otp_7292/1, otp_7969/1, otp_8919/1, otp_10302/1, otp_11269/1,
+ otp_11286/1]).
% Default timetrap timeout (set in init_per_testcase).
-define(default_timeout, ?t:minutes(1)).
@@ -75,7 +76,8 @@ groups() ->
[empty, prec, yeccpre, lalr, old_yecc, other_examples]},
{bugs, [],
[otp_5369, otp_6362, otp_7945, otp_8483, otp_8486]},
- {improvements, [], [otp_7292, otp_7969, otp_8919, otp_10302]}].
+ {improvements, [], [otp_7292, otp_7969, otp_8919, otp_10302,
+ otp_11269, otp_11286]}].
init_per_suite(Config) ->
Config.
@@ -1962,6 +1964,96 @@ otp_10302(Config) when is_list(Config) ->
run(Config, Ts),
ok.
+otp_11269(doc) ->
+ "OTP-11269. A bug.";
+otp_11269(suite) -> [];
+otp_11269(Config) when is_list(Config) ->
+ Dir = ?privdir,
+ Filename = filename:join(Dir, "OTP-11269.yrl"),
+ Ret = [return, {report, false}],
+ Pai = <<"Nonterminals
+ list list0 list1 newline_list.
+
+ Terminals
+ '\n' semi.
+
+ Rootsymbol list.
+
+ Endsymbol '$end'.
+
+ list -> newline_list list0 : '$2'.
+
+ list0 -> list1 '\n' newline_list : '$1'.
+
+ list1 -> list1 semi newline_list list1 :
+ {command_connect, '$1', '$4', semi}.
+
+ newline_list -> newline_list '\n' : nil.">>,
+ ok = file:write_file(Filename, Pai),
+ {ok,ErlFile,[{_YrlFile,[{none,yecc,{conflicts,1,0}}]}]} =
+ yecc:file(Filename, Ret),
+ Opts = [return, warn_unused_vars,{outdir,Dir}],
+ {ok,'OTP-11269',_Warnings} = compile:file(ErlFile, Opts),
+ ok.
+
+otp_11286(doc) ->
+ "OTP-11286. A Unicode filename bug; both Leex and Yecc.";
+otp_11286(suite) -> [];
+otp_11286(Config) when is_list(Config) ->
+ Node = start_node(otp_11286, "+fnu"),
+ Dir = ?privdir,
+ UName = [1024] ++ "u",
+ UDir = filename:join(Dir, UName),
+ ok = rpc:call(Node, file, make_dir, [UDir]),
+
+ %% Note: Cannot use UName as filename since the filename is used
+ %% as module name. To be fixed in R18.
+ Filename = filename:join(UDir, 'OTP-11286.yrl'),
+ Ret = [return, {report, false}, time],
+
+ Mini1 = <<"%% coding: utf-8
+ Terminals t.
+ Nonterminals nt.
+ Rootsymbol nt.
+ nt -> t.">>,
+ ok = rpc:call(Node, file, write_file, [Filename, Mini1]),
+ {ok,ErlFile,[]} = rpc:call(Node, yecc, file, [Filename, Ret]),
+ Opts = [return, warn_unused_vars,{outdir,Dir}],
+ {ok,_,_Warnings} = rpc:call(Node, compile, file, [ErlFile, Opts]),
+
+ Mini2 = <<"Terminals t.
+ Nonterminals nt.
+ Rootsymbol nt.
+ nt -> t.">>,
+ ok = rpc:call(Node, file, write_file, [Filename, Mini2]),
+ {ok,ErlFile,[]} = rpc:call(Node, yecc, file, [Filename, Ret]),
+ Opts = [return, warn_unused_vars,{outdir,Dir}],
+ {ok,_,_Warnings} = rpc:call(Node, compile, file, [ErlFile, Opts]),
+
+ Mini3 = <<"%% coding: latin-1
+ Terminals t.
+ Nonterminals nt.
+ Rootsymbol nt.
+ nt -> t.">>,
+ ok = rpc:call(Node, file, write_file, [Filename, Mini3]),
+ {ok,ErlFile,[]} = rpc:call(Node, yecc, file, [Filename, Ret]),
+ Opts = [return, warn_unused_vars,{outdir,Dir}],
+ {ok,_,_Warnings} = rpc:call(Node, compile, file, [ErlFile, Opts]),
+
+ true = test_server:stop_node(Node),
+ ok.
+
+start_node(Name, Args) ->
+ [_,Host] = string:tokens(atom_to_list(node()), "@"),
+ ct:log("Trying to start ~w@~s~n", [Name,Host]),
+ case test_server:start_node(Name, peer, [{args,Args}]) of
+ {error,Reason} ->
+ test_server:fail(Reason);
+ {ok,Node} ->
+ ct:log("Node ~p started~n", [Node]),
+ Node
+ end.
+
yeccpre_size() ->
yeccpre_size(default_yeccpre()).
diff --git a/lib/parsetools/vsn.mk b/lib/parsetools/vsn.mk
index 444caf44a1..d62962c54a 100644
--- a/lib/parsetools/vsn.mk
+++ b/lib/parsetools/vsn.mk
@@ -1 +1 @@
-PARSETOOLS_VSN = 2.0.9
+PARSETOOLS_VSN = 2.0.10
diff --git a/lib/percept/doc/src/notes.xml b/lib/percept/doc/src/notes.xml
index 391f4d6d47..3cead186c4 100644
--- a/lib/percept/doc/src/notes.xml
+++ b/lib/percept/doc/src/notes.xml
@@ -32,6 +32,23 @@
</header>
<p>This document describes the changes made to the Percept application.</p>
+<section><title>Percept 0.8.8.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The encoding of the <c>notes.xml</c> file has been
+ changed from latin1 to utf-8 to avoid future merge
+ problems.</p>
+ <p>
+ Own Id: OTP-11310</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Percept 0.8.8.1</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/percept/vsn.mk b/lib/percept/vsn.mk
index 2ea0341ddf..99729c11e2 100644
--- a/lib/percept/vsn.mk
+++ b/lib/percept/vsn.mk
@@ -1 +1 @@
-PERCEPT_VSN = 0.8.8.1
+PERCEPT_VSN = 0.8.8.2
diff --git a/lib/public_key/asn1/PKCS-7.asn1 b/lib/public_key/asn1/PKCS-7.asn1
index a6dfd57d80..e76f928acb 100644
--- a/lib/public_key/asn1/PKCS-7.asn1
+++ b/lib/public_key/asn1/PKCS-7.asn1
@@ -78,6 +78,49 @@ signingTime ATTRIBUTE ::= {
SigningTime ::= Time -- imported from ISO/IEC 9594-8
+-- begin added for VCE SCEP-support
+transactionID ATTRIBUTE ::= {
+ WITH SYNTAX PrintableString
+ ID id-transId
+}
+
+messageType ATTRIBUTE ::= {
+ WITH SYNTAX PrintableString
+ ID id-messageType
+}
+
+pkiStatus ATTRIBUTE ::= {
+ WITH SYNTAX PrintableString
+ ID id-pkiStatus
+}
+
+failInfo ATTRIBUTE ::= {
+ WITH SYNTAX PrintableString
+ ID id-failInfo
+}
+
+senderNonce ATTRIBUTE ::= {
+ WITH SYNTAX OCTET STRING
+ ID id-senderNonce
+}
+
+recipientNonce ATTRIBUTE ::= {
+ WITH SYNTAX OCTET STRING
+ ID id-recipientNonce
+}
+
+-- This is the authenticatedAttributes -member from SignerInfo
+-- added here to generate decode/encode functions for it which are
+-- needed to build the pkcs-7 used by SCEP, the resulting encoding are
+-- used to make a signed digest
+SignerInfoAuthenticatedAttributes ::= CHOICE {
+ aaSet [0] IMPLICIT SET OF AttributePKCS-7 {{Authenticated}},
+ aaSequence [2] EXPLICIT SEQUENCE OF AttributePKCS-7 {{Authenticated}}
+ -- Explicit because easier to compute digest on sequence of attributes and then reuse
+ -- encoded sequence in aaSequence.
+ }
+-- end added for VCE SCEP-support
+
-- Also defined in X.509
-- Redeclared here as a parameterized type
@@ -224,12 +267,9 @@ SignerInfo ::= SEQUENCE {
issuerAndSerialNumber
IssuerAndSerialNumber,
digestAlgorithm DigestAlgorithmIdentifier,
- authenticatedAttributes CHOICE {
- aaSet [0] IMPLICIT SET OF AttributePKCS-7 {{Authenticated}},
- aaSequence [2] EXPLICIT SEQUENCE OF AttributePKCS-7 {{Authenticated}}
- -- Explicit because easier to compute digest on sequence of attributes and then reuse
- -- encoded sequence in aaSequence.
- } OPTIONAL,
+ -- Added explicit type for authenticatedAttributes to be able to
+ -- encode/decode this type separately
+ authenticatedAttributes SignerInfoAuthenticatedAttributes OPTIONAL,
digestEncryptionAlgorithm
DigestEncryptionAlgorithmIdentifier,
encryptedDigest EncryptedDigest,
@@ -247,7 +287,15 @@ SignerInfo ::= SEQUENCE {
Authenticated ATTRIBUTE ::= {
contentType |
- messageDigest,
+ messageDigest |
+-- begin added for VCE SCEP-support
+ transactionID |
+ messageType |
+ pkiStatus |
+ failInfo |
+ senderNonce |
+ recipientNonce,
+-- end added for VCE SCEP-support
..., -- add application-specific attributes here
signingTime
}
@@ -384,4 +432,18 @@ signedAndEnvelopedData OBJECT IDENTIFIER ::= { pkcs-7 4 }
digestedData OBJECT IDENTIFIER ::= { pkcs-7 5 }
encryptedData OBJECT IDENTIFIER ::= { pkcs-7 6 }
+-- begin added for VCE SCEP-support
+id-VeriSign OBJECT IDENTIFIER ::= {2 16 us(840) 1 veriSign(113733)}
+id-pki OBJECT IDENTIFIER ::= {id-VeriSign pki(1)}
+id-attributes OBJECT IDENTIFIER ::= {id-pki attributes(9)}
+id-messageType OBJECT IDENTIFIER ::= {id-attributes messageType(2)}
+id-pkiStatus OBJECT IDENTIFIER ::= {id-attributes pkiStatus(3)}
+id-failInfo OBJECT IDENTIFIER ::= {id-attributes failInfo(4)}
+id-senderNonce OBJECT IDENTIFIER ::= {id-attributes senderNonce(5)}
+id-recipientNonce OBJECT IDENTIFIER ::= {id-attributes recipientNonce(6)}
+id-transId OBJECT IDENTIFIER ::= {id-attributes transId(7)}
+id-extensionReq OBJECT IDENTIFIER ::= {id-attributes extensionReq(8)}
+-- end added for VCE SCEP-support
+
+
END
diff --git a/lib/public_key/doc/src/notes.xml b/lib/public_key/doc/src/notes.xml
index e18d350dc5..add324dae2 100644
--- a/lib/public_key/doc/src/notes.xml
+++ b/lib/public_key/doc/src/notes.xml
@@ -34,6 +34,29 @@
<file>notes.xml</file>
</header>
+<section><title>Public_Key 0.20</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Extend PKCS-7 to support SCEP (Simple Certificate
+ Enrollment Protocol).</p>
+ <p>
+ Own Id: OTP-10874</p>
+ </item>
+ <item>
+ <p>
+ public_key:pem_entry_decode/2 now handles AES-128-CBC
+ ciphered keys. Thanks to Simon Cornish.</p>
+ <p>
+ Own Id: OTP-11281</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Public_Key 0.19</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/public_key/src/pubkey_pbe.erl b/lib/public_key/src/pubkey_pbe.erl
index 6f0be53db9..460624163b 100644
--- a/lib/public_key/src/pubkey_pbe.erl
+++ b/lib/public_key/src/pubkey_pbe.erl
@@ -66,7 +66,13 @@ decode(Data, Password,"DES-EDE3-CBC" = Cipher, KeyDevParams) ->
decode(Data, Password,"RC2-CBC"= Cipher, KeyDevParams) ->
{Key, IV} = password_to_key_and_iv(Password, Cipher, KeyDevParams),
- crypto:block_decrypt(rc2_cbc, Key, IV, Data).
+ crypto:block_decrypt(rc2_cbc, Key, IV, Data);
+
+decode(Data, Password,"AES-128-CBC"= Cipher, IV) ->
+ %% PKCS5_SALT_LEN is 8 bytes
+ <<Salt:8/binary,_/binary>> = IV,
+ {Key, _} = password_to_key_and_iv(Password, Cipher, Salt),
+ crypto:block_decrypt(aes_cbc128, Key, IV, Data).
%%--------------------------------------------------------------------
-spec pbdkdf1(string(), iodata(), integer(), atom()) -> binary().
@@ -200,7 +206,9 @@ derived_key_length(Cipher,_) when (Cipher == ?'rc2CBC') or
16;
derived_key_length(Cipher,_) when (Cipher == ?'des-EDE3-CBC') or
(Cipher == "DES-EDE3-CBC") ->
- 24.
+ 24;
+derived_key_length(Cipher,_) when (Cipher == "AES-128-CBC") ->
+ 16.
cipher(#'PBES2-params_encryptionScheme'{algorithm = ?'desCBC'}) ->
"DES-CBC";
diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl
index cdbfe6e07c..a4b6b8ad15 100644
--- a/lib/public_key/src/public_key.erl
+++ b/lib/public_key/src/public_key.erl
@@ -118,6 +118,13 @@ pem_entry_decode({Asn1Type, CryptDer, {Cipher, Salt}} = PemEntry,
is_list(Cipher) andalso
is_binary(Salt) andalso
erlang:byte_size(Salt) == 8 ->
+ do_pem_entry_decode(PemEntry, Password);
+pem_entry_decode({Asn1Type, CryptDer, {"AES-128-CBC"=Cipher, IV}} = PemEntry,
+ Password) when is_atom(Asn1Type) andalso
+ is_binary(CryptDer) andalso
+ is_list(Cipher) andalso
+ is_binary(IV) andalso
+ erlang:byte_size(IV) == 16 ->
do_pem_entry_decode(PemEntry, Password).
%%--------------------------------------------------------------------
diff --git a/lib/public_key/test/pbe_SUITE.erl b/lib/public_key/test/pbe_SUITE.erl
index 2c9b17478d..b68ffbd5fd 100644
--- a/lib/public_key/test/pbe_SUITE.erl
+++ b/lib/public_key/test/pbe_SUITE.erl
@@ -218,6 +218,14 @@ encrypted_private_key_info(Config) when is_list(Config) ->
[{'PrivateKeyInfo', _, {"RC2-CBC",_}} = PubEntry2] = PemRc2Entry,
KeyInfo = public_key:pem_entry_decode(PubEntry2, "password"),
+ %% key generated with ssh-keygen -N hello_aes -f aes_128_cbc_enc_key
+ {ok, PemAesCbc} = file:read_file(filename:join(Datadir, "aes_128_cbc_enc_key")),
+
+ PemAesCbcEntry = public_key:pem_decode(PemAesCbc),
+ ct:print("Pem entry: ~p" , [PemAesCbcEntry]),
+ [{'RSAPrivateKey', _, {"AES-128-CBC",_}} = PubAesCbcEntry] = PemAesCbcEntry,
+ #'RSAPrivateKey'{} = public_key:pem_entry_decode(PubAesCbcEntry, "hello_aes"),
+
check_key_info(KeyInfo).
diff --git a/lib/public_key/test/pbe_SUITE_data/aes_128_cbc_enc_key b/lib/public_key/test/pbe_SUITE_data/aes_128_cbc_enc_key
new file mode 100644
index 0000000000..34c7543f30
--- /dev/null
+++ b/lib/public_key/test/pbe_SUITE_data/aes_128_cbc_enc_key
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-128-CBC,D64FF97327558643763BE17BD50FDDAD
+
+oS4LbrLbQHPxfQILHl0KPswnkC1QqJ4RX6SkcQGVoYJJkPcavupABDYD1PSJf/MD
+aPiN2OHsYAFLHxa1NGEAH6wKSvgdUJyaQ6jbSBNh9we9p2i3tpMnWsJMCZzXsCQh
+RJj23/cFhb2UsqPM3OH6x6/VxX5VmD9Dnt1iU9b+WS6KdU45zP+QWpRd54uBrFab
+Pw0kW7o84VFH6ahUDnzT8JUIk4P4G43G2F7wrOCbiK6AS0S8sCh5E83MrGEoJ6jB
+NIW4xnLdBOLeV65NTgwWEn7bjLz+8IYSg2/wodjj5GL/ciMgiF+/krdQhzbHJhcm
+dXV3SB/lTyjYUUGYU/3wm10f0iLJLFZxVU70yfV0eKhdYtWdR+2RxZjHvstBTGoI
+BMtcaGwfMBh3wBHjS2M9AVh35DUYQIGW6QATf1VF+chhgESj6Qktkmfe4R9uAhP0
+r8Qkql/lq19K653c6ZIcUIYWvpAQ4Y/Q6Fdd92GY45FQdXYlZ/dXkwdq+ZYAhe6g
+GUNmpwHf5N2a6lgXR3YytPYdhQbYMdy29RjXJsFWJh3sKTxgG/Y+FX2Ua7J1G4IW
+wO6yZgQc9GyYzNn1TpT/TQ32GuHbw0u/oQqbNOJEjE0BTsQelEPpnNnEmkgPqSlI
+3PNtsBvS6antvJ3CiCnmkQlT7/dLR9ym8nU+jo/hrtIStNUrdopCLB4+iUt7tJdz
+jpW3Kc5fWmnGbp1UOXHoOghENfjIN+yUxIx9qCgBmWliY1nncUgzEHM34eGqGdek
+nf6PowS4gIbJmO5Uc+0MwPld5HFou21da2M48FKolp3+CO1mX5MhvMLGVoFqNiE3
+dXYJG4bcMdxZncdaMn+c6ycA9iFTufF/qZPF/rGO5I+gc9M50bJjewbixqXM/LJ5
+1OnP/x7DN1Td3PTjAfjFX9yLWRMIjbihG43Htk5bOifaBtnOYj1e7WMjN8uBx91x
+OCnfC3rngF4B9WmdYEkEvp9QZixbDlp0oh6/4HiRjjDkUfADnKuU/At7dd8sDOGD
+NgaWVskJsulp8d9s3CozM7LmowlNpHV9BvAguckx/B7ZqV10mgAKOqZKk4LDlu2Y
+MgQvSLJfyJsz/1q4z4jcXhYtSuZXXHk9lX9dgCZbQfVGnlsptNuV5KwupV2cz0Vi
+Uh1mwvDXWFNIFwexZi0z27FJ1pKAKK+sf/GFqoAvdmYgYS6d5bmxh68bGZMZ2C6P
+eehHkEZm1pv4CVDxrUTk+bNtqhDXglSdfxR0Xm1QDN95hM0dHq1kDZH6HgD6krJ6
+BBfd7mPRExH3+5JSQXoSUDO8LqP5phxLWKS0B8HDburnP/x9QzBOIKvmtDF1lQEk
+FAI/6Lv8GJ0R7WYd2vFfGeqS94iw1BpmO/xS6WINOFpfwVCBuuYmLEdEWcXJgvy9
+zyaTX/mk1RMXo7I1X7aWviaIF7ykGxs1dJdrxQonwJ3oyTySNl2xf8bziKlqB/Ml
+LDjeMNX91G8fJE0MdKPWd94PUoLN0CutM5sY5yHzwCvJQV9oQ1qvrQYUbnvtCEyQ
+xT+bawt+ODgVb/QnyNeiIyEN5lXc8meJFLr1uMeEwX8WaJ7/KBKGk1V0XqVZTmga
+-----END RSA PRIVATE KEY-----
diff --git a/lib/public_key/test/public_key_SUITE.erl b/lib/public_key/test/public_key_SUITE.erl
index c3aa2e2366..f8d167e770 100644
--- a/lib/public_key/test/public_key_SUITE.erl
+++ b/lib/public_key/test/public_key_SUITE.erl
@@ -46,7 +46,7 @@ all() ->
groups() ->
[{pem_decode_encode, [], [dsa_pem, rsa_pem, encrypted_pem,
- dh_pem, cert_pem, pkcs10_pem]},
+ dh_pem, cert_pem, pkcs7_pem, pkcs10_pem]},
{ssh_public_key_decode_encode, [],
[ssh_rsa_public_key, ssh_dsa_public_key, ssh_rfc4716_rsa_comment,
ssh_rfc4716_dsa_comment, ssh_rfc4716_rsa_subject, ssh_known_hosts,
@@ -188,15 +188,9 @@ dh_pem() ->
[{doc, "DH parametrs PEM-file decode/encode"}].
dh_pem(Config) when is_list(Config) ->
Datadir = ?config(data_dir, Config),
- [{'DHParameter', DerDH, not_encrypted} = Entry] =
+ [{'DHParameter', _DerDH, not_encrypted} = Entry] =
erl_make_certs:pem_to_der(filename:join(Datadir, "dh.pem")),
-
- erl_make_certs:der_to_pem(filename:join(Datadir, "new_dh.pem"), [Entry]),
-
- DHParameter = public_key:der_decode('DHParameter', DerDH),
- DHParameter = public_key:pem_entry_decode(Entry),
-
- Entry = public_key:pem_entry_encode('DHParameter', DHParameter).
+ asn1_encode_decode(Entry).
%%--------------------------------------------------------------------
@@ -204,57 +198,38 @@ pkcs10_pem() ->
[{doc, "PKCS-10 PEM-file decode/encode"}].
pkcs10_pem(Config) when is_list(Config) ->
Datadir = ?config(data_dir, Config),
- [{'CertificationRequest', DerPKCS10, not_encrypted} = Entry] =
+ [{'CertificationRequest', _DerPKCS10, not_encrypted} = Entry] =
erl_make_certs:pem_to_der(filename:join(Datadir, "req.pem")),
-
- erl_make_certs:der_to_pem(filename:join(Datadir, "new_req.pem"), [Entry]),
-
- PKCS10 = public_key:der_decode('CertificationRequest', DerPKCS10),
- PKCS10 = public_key:pem_entry_decode(Entry),
-
- Entry = public_key:pem_entry_encode('CertificationRequest', PKCS10).
-
+ asn1_encode_decode(Entry).
%%--------------------------------------------------------------------
pkcs7_pem() ->
[{doc, "PKCS-7 PEM-file decode/encode"}].
pkcs7_pem(Config) when is_list(Config) ->
Datadir = ?config(data_dir, Config),
- [{'ContentInfo', DerPKCS7, not_encrypted} = Entry] =
+ [{'ContentInfo', _, not_encrypted} = Entry0] =
erl_make_certs:pem_to_der(filename:join(Datadir, "pkcs7_cert.pem")),
-
- erl_make_certs:der_to_pem(filename:join(Datadir, "new_pkcs7_cert.pem"), [Entry]),
-
- PKCS7 = public_key:der_decode('ContentInfo', DerPKCS7),
- PKCS7 = public_key:pem_entry_decode(Entry),
-
- Entry = public_key:pem_entry_encode('ContentInfo', PKCS7).
-
+ [{'ContentInfo', _, not_encrypted} = Entry1] =
+ erl_make_certs:pem_to_der(filename:join(Datadir, "pkcs7_ext.pem")),
+ asn1_encode_decode(Entry0),
+ asn1_encode_decode(Entry1).
+
%%--------------------------------------------------------------------
cert_pem() ->
[{doc, "Certificate PEM-file decode/encode"}].
cert_pem(Config) when is_list(Config) ->
Datadir = ?config(data_dir, Config),
-
- [Entry0] =
- erl_make_certs:pem_to_der(filename:join(Datadir, "dsa.pem")),
-
- [{'Certificate', DerCert, not_encrypted} = Entry7] =
+
+ [{'Certificate', _, not_encrypted} = Entry0] =
erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")),
- Cert = public_key:der_decode('Certificate', DerCert),
- Cert = public_key:pem_entry_decode(Entry7),
+ asn1_encode_decode(Entry0),
- CertEntries = [{'Certificate', _, not_encrypted} = CertEntry0,
- {'Certificate', _, not_encrypted} = CertEntry1] =
+ [{'Certificate', _, not_encrypted} = Entry1,
+ {'Certificate', _, not_encrypted} = Entry2] =
erl_make_certs:pem_to_der(filename:join(Datadir, "cacerts.pem")),
-
- ok = erl_make_certs:der_to_pem(filename:join(Datadir, "wcacerts.pem"), CertEntries),
- ok = erl_make_certs:der_to_pem(filename:join(Datadir, "wdsa.pem"), [Entry0]),
- NewCertEntries = erl_make_certs:pem_to_der(filename:join(Datadir, "wcacerts.pem")),
- true = lists:member(CertEntry0, NewCertEntries),
- true = lists:member(CertEntry1, NewCertEntries),
- [Entry0] = erl_make_certs:pem_to_der(filename:join(Datadir, "wdsa.pem")).
+ asn1_encode_decode(Entry1),
+ asn1_encode_decode(Entry2).
%%--------------------------------------------------------------------
ssh_rsa_public_key() ->
@@ -720,6 +695,12 @@ pkix_iso_dsa_oid(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
+asn1_encode_decode({Asn1Type, Der, not_encrypted} = Entry) ->
+ Decoded = public_key:der_decode(Asn1Type, Der),
+ Decoded = public_key:pem_entry_decode(Entry),
+ Entry = public_key:pem_entry_encode(Asn1Type, Decoded),
+ ok.
+
check_countryname({rdnSequence,DirName}) ->
do_check_countryname(DirName).
do_check_countryname([]) ->
diff --git a/lib/public_key/test/public_key_SUITE_data/pkcs7_ext.pem b/lib/public_key/test/public_key_SUITE_data/pkcs7_ext.pem
new file mode 100644
index 0000000000..d7a1d01fe1
--- /dev/null
+++ b/lib/public_key/test/public_key_SUITE_data/pkcs7_ext.pem
@@ -0,0 +1,62 @@
+-----BEGIN PKCS7-----
+MIILCAYJKoZIhvcNAQcCoIIK+TCCCvUCAQExDjAMBggqhkiG9w0CBQUAMIIFmwYJ
+KoZIhvcNAQcBoIIFjASCBYgwggWEBgkqhkiG9w0BBwOgggV1MIIFcQIBADGCAmQw
+ggJgAgEAMEgwPDELMAkGA1UEBhMCU0UxETAPBgNVBAoMCEVyaWNzc29uMRowGAYD
+VQQDDBFWQ19SQlNfU3ViQ0FfVjNfMQIIcw3ZS5VSTIwwDQYJKoZIhvcNAQEBBQAE
+ggIAFW0vd8wY2FJ87KVyUqcdK5uCmnjwC6uPbypDqnL44Fe4iAAiNOvmqt1Crm46
+pg9gOq50NbrRb+PY+UUM7lEUNNKZ61cul2iwGwp6r41l05EbMqgfsNoJkH+bTM8Y
+YhME4sT+AzdmPHIg1PGoM+pAMHzpjcdnaHFSlfSmwq5xfZwWelR2TDz7arO+AKCk
+DVIEnG9qHBrUWvDoT23VDVQQXP5Uja0Nml7B7Jt2RW2EKAiCAYDujkjIWcGy3F3X
+2Q+Nm4K2nJKnkdMI5kS0Eu9uHp24VHn98sEyqn8rDiLFOaj5BskQIVMDN6npssgr
+X4ChmBiVcquaxCoHMqQYGa/Jrd66C8WK2lQH3NpDCsULS+m6Z76bvXDFyL0K6rEP
+sOcn8J91LfB5jXeSvS3vi7zk07M/IwAL03fVKvqiKU65D4859AOgbjkGyytWG1iv
+t7ENh6GYHGJj71L+OlZZH25cJQ/2gGsYs4IYrT6w4Z1X5TscOL/tBiCDdTwcdT0q
++YdkL9ZONouHvgszb9IFvfFErzmmG7jTHwC/TzR0nC8vPog9+y05G4vnD1h7lzH7
+8xDsGrn86gcjYXXRPfc4AxDZfmaM8S0SFmd+O7B24sUKmSyxF3A7OVnb0/rTMuez
+Izoy6RW9WQpCJM5R9k7YFDI5lQI+PiKT8GqzQuFIFXRYwOIwggMCBgkqhkiG9w0B
+BwEwEQYFKw4DAgcECLsGKZ/iQ1HBgIIC4J1lxb/gn6EosJyMrTV8KnJxvD+Garzp
+zmrDNvl9Q7CHmpNLuW3dngU5JcB5dElq7B+j6+RXNkupcrd2dvllAmwfPpFblmNp
+Snsn99TTwDYv4LrpxNCcoIKSm93H28wfszhPv75zD9+/aIy4JK4UwYuv+p5JHfLW
+EhvWO4pxUc2YpB8jiUVKTJJcRohry/lwvXu5s8VjmpoADSflHtAA4DUhFKX2fafu
+Ux7muxbh7xFViNY6laQ/tuZuxxjs2Eb5aWWizO00cyLP2724vFQL+lnvyAvtSmcD
+z2hOeOvvch6sJ4krx/gFznqe/lVksPyJQOj+Or8RTbC26kV4GQwiuGqgp6zhNjYe
+4niPvGxVAFz8Qdv8Zu47fSHgI2nz5YlWuE2NiQ1qtCbMsf2k/NnZrTgx2oZxnZvL
+B2We2D0u6BRZo4XMvGUqOLlGIV5scusv39/sBblJGOwNjtekG/pIRmiHXuI+RQOX
+yr4tLR8clylf/HEMmYn2UVxXXuWsEr6zdBB3u3JhXhq+YmDpYYnTkxZq4nTz7oMY
+MicrF0+iUrun6lIAXEU6yOSPehje5PfZW5PqKlpugKYIQSsbuJ4t/8n/MczHbRk9
+CcIX05OeWUdxRPKYa7Jt8umXnuIqWu7s7uZpbiB/tmuW4Cp16xUv53SgrTm4tiMq
+b7O3ftMmEiFZ+uXds/ODfh7bTe4YlWdyimkCcyI4dcIjLxe+ifx4T+b4LktIc5Pd
+5MHwAN+F1yIWnPxi8Nep9Pnw4HiX/ZkL0jHG0msZgZ60jb1U3LV4w3VI1WrsjvJM
+6M+l7HM3xeTl9posjVQPxb7kyX5s6gDe4IaatPrNYcsDJ4t43v/se/nvlrQtkJzv
+D4S2a9l833kYIC0MvoT8dqJuwySPZxjK0Io69sd6Af1BTGBoSQL75pOntrQUhICl
+/kfjBkG5h6tpJFSZQEReK3Kg9rKIax5VwgQUte2yVu3EYARd3YZ7On+gggMTMIID
+DzCCAfegAwIBAgITAkxY3LTPyvVkS5SUobGvznBgQDANBgkqhkiG9w0BAQUFADBC
+MQswCQYDVQQGEwJTRTERMA8GA1UEChMIRXJpY3Nzb24xIDAeBgNVBAMTF0M4MjYx
+MjQ1ODEuZXJpY3Nzb24uY29tMB4XDTEzMDgyMTE1MTcwM1oXDTE0MDgyMTE1MTcw
+M1owQjELMAkGA1UEBhMCU0UxETAPBgNVBAoTCEVyaWNzc29uMSAwHgYDVQQDExdD
+ODI2MTI0NTgxLmVyaWNzc29uLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAPgg9zlAP6Z8vDMq+Ux0mq1RPLLtG2kByeauGvKdzbRLxtiyyKlknFQ8
+jdn8w3NrQiXTYSEcR0eDWjpLiwvkW2WC+lARIHUWQjRJWQIaSQ1lu9rDHlMYr2xm
+6EF6QDgr/9fqkY1IrF/gEAwnNQhT44qCzSr/jqmf5phd5qslzYlpYY97yeEihiCT
+wa/BNl1puS3+ayXI9e73Fpeysd0+TFjgbUwhUZn8kcKnDiynb19cyKzk4F1MQHwu
+QDFUkxtFcKMW8GikjEYy0Gw8CJUPl4SedtwoU4PGhWqgA/vYOPhdP6LfSBhTmU3s
+tUrFxUuMAiRF24JHdTj2bv+huDotWu0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+PtB1eG9FbriUPD79Kb5uyt15JoROPDBc3voR9HffqDsANyEJ3VPlvAFEyrQzbdnA
+V5slZRR7M5AJBha1K3BIR7Cs74BlCXiiuWi358HnPGsHqqJjKVxlTKJksrRLvUr4
+K2bG1kBniQU/PkSZjB1DbSwAqw4So9BKLbzQFE8888/yETeCIEWnG2YMiRe1GB0r
+P/88QJctNrsT5oLdZ9E4igcAoGna6UR71PJSFCBoJ5WsnofMf44gZr7bgg2szoZr
+KDPnrlsi9SM4nWzTaxSTjEp3397QMwEHosJxwXv/Zy5QyGBDYfynaTRUVS2BwIfo
+AqRdylyrbv/+3NBQxdERRjGCAigwggIkAgEBMFkwQjELMAkGA1UEBhMCU0UxETAP
+BgNVBAoTCEVyaWNzc29uMSAwHgYDVQQDExdDODI2MTI0NTgxLmVyaWNzc29uLmNv
+bQITAkxY3LTPyvVkS5SUobGvznBgQDAMBggqhkiG9w0CBQUAoIGiMBIGCmCGSAGG
++EUBCQIxBBMCMTkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAfBgkqhkiG9w0B
+CQQxEgQQaEUDvpv6H163UM7zAQiMvDAgBgpghkgBhvhFAQkFMRIEEN4FI8tal3of
+ZTXKi1Ny2cswLwYKYIZIAYb4RQEJBzEhEx8yOUFBQjJFNTY5OUY1QjI1QTJEQUI3
+NDlGN0Q0QTFBMA0GCSqGSIb3DQEBAQUABIIBACnR54LqeHZ0u8bSErSnGupEytHK
+xbfShraXl3DFPnIZYs0HUuuriw5/BhkFHBsSXO8Oqm759/UgxOjnCUD2AKHenGoK
+LB0yqLGe/USBs0IkBv6lXg7HJhSDNqAPES6a5iUVIRv+M40Ldob570MKjZhERVPN
+AVSHMJHKmtVTZGt/VqiVk0qqZeV9nqhaSPFyW9pQU0PKep0lFltnwCHUTZiiqHuk
+SIpZFCmIgahAUcl/WrxiW4xC9L5+wBgsuaUU5LqLZwg3AFua0aaDs6NZXpSE0A43
+zm5whhmkVePjnSUUr78AoBRalsBdMkDwLoUZZ1Hhq+/WH+WW7TQ96zm+uzE=
+-----END PKCS7-----
+
diff --git a/lib/public_key/vsn.mk b/lib/public_key/vsn.mk
index b820f24d2a..72247f14d8 100644
--- a/lib/public_key/vsn.mk
+++ b/lib/public_key/vsn.mk
@@ -1 +1 @@
-PUBLIC_KEY_VSN = 0.19
+PUBLIC_KEY_VSN = 0.20
diff --git a/lib/reltool/doc/src/notes.xml b/lib/reltool/doc/src/notes.xml
index 8aaf4cc5d3..df81418677 100644
--- a/lib/reltool/doc/src/notes.xml
+++ b/lib/reltool/doc/src/notes.xml
@@ -37,7 +37,24 @@
thus constitutes one section in this document. The title of each
section is the version number of Reltool.</p>
- <section><title>Reltool 0.6.4</title>
+ <section><title>Reltool 0.6.4.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The encoding of the <c>notes.xml</c> file has been
+ changed from latin1 to utf-8 to avoid future merge
+ problems.</p>
+ <p>
+ Own Id: OTP-11310</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Reltool 0.6.4</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
@@ -61,7 +78,7 @@
even if the application was explicitly excluded in the
config. This has been changed and will only produce a
warning. If the application is not explicitly excluded it
- will still cause reltool to fail. Thanks to H�kan
+ will still cause reltool to fail. Thanks to Håkan
Mattsson!</p>
<p>
Own Id: OTP-10988</p>
diff --git a/lib/reltool/vsn.mk b/lib/reltool/vsn.mk
index 412e78f49f..16ec570d22 100644
--- a/lib/reltool/vsn.mk
+++ b/lib/reltool/vsn.mk
@@ -1 +1 @@
-RELTOOL_VSN = 0.6.4
+RELTOOL_VSN = 0.6.4.1
diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml
index 74ce8ccf3f..bf1a7621fd 100644
--- a/lib/runtime_tools/doc/src/dbg.xml
+++ b/lib/runtime_tools/doc/src/dbg.xml
@@ -244,7 +244,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
<tag><c>all</c></tag>
<item>
- <p>Sets all flags.</p>
+ <p>Sets all flags except <c>silent</c>.</p>
</item>
<tag><c>clear</c></tag>
<item>
diff --git a/lib/runtime_tools/doc/src/notes.xml b/lib/runtime_tools/doc/src/notes.xml
index db35eba436..b334bdcac2 100644
--- a/lib/runtime_tools/doc/src/notes.xml
+++ b/lib/runtime_tools/doc/src/notes.xml
@@ -31,6 +31,35 @@
<p>This document describes the changes made to the Runtime_Tools
application.</p>
+<section><title>Runtime_Tools 1.8.12</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The process trace flag 'silent' is now allowed in call to
+ dbg:p/2.</p>
+ <p>
+ Own Id: OTP-11222</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Introduced functionality for inspection of system and
+ build configuration.</p>
+ <p>
+ Own Id: OTP-11196</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Runtime_Tools 1.8.11</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl
index 6b2fb0460f..f0086e8cc7 100644
--- a/lib/runtime_tools/src/dbg.erl
+++ b/lib/runtime_tools/src/dbg.erl
@@ -1113,7 +1113,7 @@ transform_flags([sos|Tail],Acc) -> transform_flags(Tail,[set_on_spawn|Acc]);
transform_flags([sol|Tail],Acc) -> transform_flags(Tail,[set_on_link|Acc]);
transform_flags([sofs|Tail],Acc) -> transform_flags(Tail,[set_on_first_spawn|Acc]);
transform_flags([sofl|Tail],Acc) -> transform_flags(Tail,[set_on_first_link|Acc]);
-transform_flags([all|_],_Acc) -> all();
+transform_flags([all|_],_Acc) -> all()--[silent];
transform_flags([F|Tail]=List,Acc) when is_atom(F) ->
case lists:member(F, all()) of
true -> transform_flags(Tail,[F|Acc]);
@@ -1124,7 +1124,7 @@ transform_flags(Bad,_Acc) -> {error,{bad_flags,Bad}}.
all() ->
[send,'receive',call,procs,garbage_collection,running,
set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link,
- timestamp,arity,return_to].
+ timestamp,arity,return_to,silent].
display_info([Node|Nodes]) ->
io:format("~nNode ~w:~n",[Node]),
diff --git a/lib/runtime_tools/vsn.mk b/lib/runtime_tools/vsn.mk
index 5faae06b53..9ee1aba29c 100644
--- a/lib/runtime_tools/vsn.mk
+++ b/lib/runtime_tools/vsn.mk
@@ -1 +1 @@
-RUNTIME_TOOLS_VSN = 1.8.11
+RUNTIME_TOOLS_VSN = 1.8.12
diff --git a/lib/sasl/doc/src/notes.xml b/lib/sasl/doc/src/notes.xml
index 373d732e53..f42657c45e 100644
--- a/lib/sasl/doc/src/notes.xml
+++ b/lib/sasl/doc/src/notes.xml
@@ -30,6 +30,21 @@
</header>
<p>This document describes the changes made to the SASL application.</p>
+<section><title>SASL 2.3.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Add Fd usage in rb logging. Thanks to Eric Pailleau.</p>
+ <p>
+ Own Id: OTP-11252</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>SASL 2.3.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/sasl/doc/src/rb.xml b/lib/sasl/doc/src/rb.xml
index 928b85d50b..fa85b4bcd9 100644
--- a/lib/sasl/doc/src/rb.xml
+++ b/lib/sasl/doc/src/rb.xml
@@ -138,6 +138,24 @@
</desc>
</func>
<func>
+ <name>log_list()</name>
+ <name>log_list(Type)</name>
+ <fsummary>Log reports list</fsummary>
+ <type>
+ <v>Type = type()</v>
+ <v>type() = error | error_report | info_msg | info_report |
+ warning_msg | warning_report | crash_report |
+ supervisor_report | progress</v>
+ </type>
+ <desc>
+ <p>Same as <c>list/0</c> or <c>list/1</c> functions
+ but result is printed to logfile, if set, otherwise to standard_io.
+ </p>
+ <p>If no <c>Type</c> is given, all reports are listed.
+ </p>
+ </desc>
+ </func>
+ <func>
<name>rescan()</name>
<name>rescan(Options)</name>
<fsummary>Rescan the report directory</fsummary>
@@ -172,7 +190,7 @@
<type>
<v>Options = [opt()]</v>
<v>opt() = {start_log, FileName} | {max, MaxNoOfReports} | {report_dir, DirString} | {type, ReportType} | {abort_on_error, Bool}</v>
- <v>FileName = string() | standard_io</v>
+ <v>FileName = string() | atom() | pid()</v>
<v>MaxNoOfReports = int() | all</v>
<v>DirString = string()</v>
<v>ReportType = type() | [type()] | all</v>
@@ -185,11 +203,13 @@
reports can be browsed. When the <c>rb_server</c> is
started, the files in the specified directory are
scanned. The other functions assume that the server has
- started.
+ started.
</p>
- <p><c>{start_log, FileName}</c> starts logging to file. All
- reports will be printed to the named file. The default is
- <c>standard_io</c>.
+ <p><c>{start_log, FileName}</c> starts logging to file,
+ registered name or io_device. All reports will be printed
+ to the named file. The default is <c>standard_io</c>.
+ The option {start_log, standard_error} is not allowed and
+ will be replaced by default standard_io.
</p>
<p><c>{max, MaxNoOfReports}</c>. Controls how many reports the
<c>rb_server</c> should read on start-up. This option is
@@ -226,11 +246,11 @@
<name>start_log(FileName)</name>
<fsummary>Redirect all output to <c>FileName</c></fsummary>
<type>
- <v>FileName = string()</v>
+ <v>FileName = string() | atom() | pid()</v>
</type>
<desc>
<p>Redirects all report output from the RB tool to the
- specified file.
+ specified file, registered name or io_device.
</p>
</desc>
</func>
diff --git a/lib/sasl/src/rb.erl b/lib/sasl/src/rb.erl
index eb65aa8786..65011af568 100644
--- a/lib/sasl/src/rb.erl
+++ b/lib/sasl/src/rb.erl
@@ -22,7 +22,7 @@
%% External exports
-export([start/0, start/1, stop/0, rescan/0, rescan/1]).
--export([list/0, list/1, show/0, show/1, grep/1, filter/1, filter/2, start_log/1, stop_log/0]).
+-export([list/0, list/1, log_list/0, log_list/1, show/0, show/1, grep/1, filter/1, filter/2, start_log/1, stop_log/0]).
-export([h/0, help/0]).
%% Internal exports
@@ -62,6 +62,9 @@ rescan(Options) ->
list() -> list(all).
list(Type) -> call({list, Type}).
+log_list() -> log_list(all).
+log_list(Type) -> call({log_list, Type}).
+
show() ->
call(show).
@@ -93,6 +96,8 @@ help() ->
io:format("rb:help() - print this help~n"),
io:format("rb:list() - list all reports~n"),
io:format("rb:list(Type) - list all reports of type Type~n"),
+ io:format("rb:log_list() - log list of all reports~n"),
+ io:format("rb:log_list(Type) - log list of all reports of type Type~n"),
io:format(" currently supported types are:~n"),
print_types(),
io:format("rb:grep(RegExp) - print reports containing RegExp.~n"),
@@ -113,7 +118,7 @@ help() ->
io:format("rb:show(Number) - print report no Number~n"),
io:format("rb:show(Type) - print all reports of type Type~n"),
io:format("rb:show() - print all reports~n"),
- io:format("rb:start_log(File) - redirect all reports to file~n"),
+ io:format("rb:start_log(File) - redirect all reports to file or io_device~n"),
io:format("rb:stop_log() - close the log file and redirect to~n"),
io:format(" standard_io~n"),
io:format("rb:stop - stop the rb_server~n").
@@ -207,7 +212,10 @@ handle_call({rescan, Options}, _From, State) ->
handle_call(_, _From, #state{data = undefined}) ->
{reply, {error, no_data}, #state{}};
handle_call({list, Type}, _From, State) ->
- print_list(State#state.data, Type),
+ print_list(standard_io, State#state.data, Type),
+ {reply, ok, State};
+handle_call({log_list, Type}, _From, State) ->
+ print_list(State#state.device, State#state.data, Type),
{reply, ok, State};
handle_call({start_log, FileName}, _From, State) ->
NewDevice = open_log_file(FileName),
@@ -262,7 +270,16 @@ code_change(_OldVsn, State, _Extra) ->
%% Returns: A Device for later use in call to io:format
%%-----------------------------------------------------------------
open_log_file(standard_io) -> standard_io;
-open_log_file(FileName) ->
+open_log_file(Fd) when is_atom(Fd),Fd=/=standard_error ->
+ case whereis(Fd) of
+ undefined -> io:format("rb: Registered name not found '~s'.~n",
+ [Fd]),
+ io:format("rb: Using standard_io~n"),
+ open_log_file(standard_io);
+ Pid -> open_log_file(Pid)
+ end;
+open_log_file(Fd) when is_pid(Fd)-> Fd;
+open_log_file(FileName) when is_list(FileName) ->
case file:open(FileName, [write,append]) of
{ok, Fd} -> Fd;
Error ->
@@ -270,7 +287,10 @@ open_log_file(FileName) ->
[FileName, Error]),
io:format("rb: Using standard_io~n"),
standard_io
- end.
+ end;
+open_log_file(standard_error) ->
+ io:format("rb: Using standard_io~n"),
+ standard_io.
close_device(Fd) when is_pid(Fd) ->
catch file:close(Fd);
@@ -550,18 +570,18 @@ local_time_to_universal_time({Date,Time}) ->
end.
-print_list(Data, Type) ->
+print_list(Fd, Data, Type) ->
Header = {"No", "Type", "Process", "Date Time"},
Width = find_width([Header | Data], 0)+1,
DateWidth = find_date_width([Header | Data], 0) +1,
Format = lists:concat(["~4s~20s ~", Width, "s~20s~n"]),
- io:format(Format, tuple_to_list(Header)),
- io:format(Format, ["==", "====", "=======", "==== ===="]),
- print_list(Data, Type, Width, DateWidth).
-print_list([], _, _, _) -> true;
-print_list([H|T], Type, Width, DateWidth) ->
- print_one_report(H, Type, Width, DateWidth),
- print_list(T, Type, Width, DateWidth).
+ io:format(Fd, Format, tuple_to_list(Header)),
+ io:format(Fd, Format, ["==", "====", "=======", "==== ===="]),
+ print_list(Fd, Data, Type, Width, DateWidth).
+print_list(_, [], _, _, _) -> true;
+print_list(Fd, [H|T], Type, Width, DateWidth) ->
+ print_one_report(Fd, H, Type, Width, DateWidth),
+ print_list(Fd, T, Type, Width, DateWidth).
find_width([], Width) -> Width;
find_width([H|T], Width) ->
@@ -578,22 +598,22 @@ find_date_width([H|T], Width) ->
true -> find_date_width(T, Width)
end.
-print_one_report({No, RealType, ShortDescr, Date, _Fname, _FilePos},
+print_one_report(Fd, {No, RealType, ShortDescr, Date, _Fname, _FilePos},
WantedType,
Width, DateWidth) ->
if
WantedType == all ->
- print_short_descr(No, RealType, ShortDescr, Date, Width,
+ print_short_descr(Fd, No, RealType, ShortDescr, Date, Width,
DateWidth);
WantedType == RealType ->
- print_short_descr(No, RealType, ShortDescr, Date, Width,
+ print_short_descr(Fd, No, RealType, ShortDescr, Date, Width,
DateWidth);
true -> ok
end.
-print_short_descr(No, Type, ShortDescr, Date, Width, DateWidth) ->
+print_short_descr(Fd, No, Type, ShortDescr, Date, Width, DateWidth) ->
Format = lists:concat(["~4w~20w ~", Width, "s~", DateWidth,"s~n"]),
- io:format(Format, [No,
+ io:format(Fd, Format, [No,
Type,
io_lib:format("~s", [ShortDescr]),
Date]).
diff --git a/lib/sasl/test/rb_SUITE.erl b/lib/sasl/test/rb_SUITE.erl
index b0e43be3a2..453f992850 100644
--- a/lib/sasl/test/rb_SUITE.erl
+++ b/lib/sasl/test/rb_SUITE.erl
@@ -362,18 +362,48 @@ start_stop_log(Config) ->
StdioResult = [_|_] = capture(fun() -> rb:show(1) end),
{ok,<<>>} = file:read_file(OutFile),
- %% Start log and check that show is printed to log and not to standad_io
+ %% Start log and check that show is printed to log and not to standard_io
ok = rb:start_log(OutFile),
[] = capture(fun() -> rb:show(1) end),
{ok,Bin} = file:read_file(OutFile),
true = (Bin =/= <<>>),
+ %% Start log with atom standard_io and check that show is printed to standard_io
+ ok = rb:stop_log(),
+ ok = file:write_file(OutFile,[]),
+ ok = rb:start_log(standard_io),
+ StdioResult = [_|_] = capture(fun() -> rb:show(1) end),
+ {ok,<<>>} = file:read_file(OutFile),
+
+ %% Start log and check that show is printed to iodevice log and not to standard_io
+ ok = rb:stop_log(),
+ ok = file:write_file(OutFile,[]),
+ {ok, IoOutFile} = file:open(OutFile,[write]),
+ ok = rb:start_log(IoOutFile),
+ [] = capture(fun() -> rb:show(1) end),
+ {ok,Bin} = file:read_file(OutFile),
+ true = (Bin =/= <<>>),
+ ok = file:close(IoOutFile),
+
%% Stop log and check that show is printed to standard_io and not to log
ok = rb:stop_log(),
ok = file:write_file(OutFile,[]),
StdioResult = capture(fun() -> rb:show(1) end),
{ok,<<>>} = file:read_file(OutFile),
+ %% Start log and check that list is printed to log and not to standard_io
+ ok = file:write_file(OutFile,[]),
+ ok = rb:start_log(OutFile),
+ [] = capture(fun() -> rb:log_list() end),
+ {ok,Bin2} = file:read_file(OutFile),
+ true = (Bin2 =/= <<>>),
+
+ %% Stop log and check that list is printed to standard_io and not to log
+ ok = rb:stop_log(),
+ ok = file:write_file(OutFile,[]),
+ StdioResult2 = capture(fun() -> rb:log_list() end),
+ {ok,<<>>} = file:read_file(OutFile),
+
%% Test that standard_io is used if log file can not be opened
ok = rb:start_log(filename:join(nonexistingdir,"newfile.txt")),
StdioResult = capture(fun() -> rb:show(1) end),
diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml
index 9c61bae85a..7514c52dda 100644
--- a/lib/snmp/doc/src/notes.xml
+++ b/lib/snmp/doc/src/notes.xml
@@ -34,6 +34,73 @@
<section>
+ <title>SNMP Development Toolkit 4.24.2</title>
+ <p>Version 4.24.2 supports code replacement in runtime from/to
+ version 4.24.1, 4.24, 4.23.1 and 4.23. </p>
+
+ <section>
+ <title>Improvements and new features</title>
+<!--
+ <p>-</p>
+-->
+
+ <list type="bulleted">
+ <item>
+ <p>[agent] Improved documentation for the functions for
+ loading and unloading mibs,
+ see <seealso marker="snmpa#load_mibs">load_mibs</seealso> and
+ <seealso marker="snmpa#unload_mibs">unload_mibs</seealso> for
+ more info. </p>
+ <p>Also added new functions for loading and unloading a single mib,
+ see <seealso marker="snmpa#load_mib">load_mib</seealso> and
+ <seealso marker="snmpa#unload_mib">unload_mib</seealso> for
+ more info. </p>
+ <p>Own Id: OTP-11216</p>
+ </item>
+
+ </list>
+
+ </section>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>[agent]
+ see <seealso marker="snmpa#load_mibs">load_mibs</seealso> and
+ <seealso marker="snmpa#unload_mibs">unload_mibs</seealso>. </p>
+ <p>Own Id: OTP-11216</p>
+ </item>
+
+ </list>
+-->
+
+ </section>
+
+ <section>
+ <title>Incompatibilities</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>[manager] The old Addr-and-Port based API functions, previously
+ long deprecated and marked for deletion in R16B, has now been
+ removed. </p>
+ <p>Own Id: OTP-10027</p>
+ </item>
+
+ </list>
+-->
+ </section>
+
+ </section> <!-- 4.24.2 -->
+
+
+ <section>
<title>SNMP Development Toolkit 4.24.1</title>
<p>Version 4.24.1 supports code replacement in runtime from/to
version 4.24, 4.23.1 and 4.23. </p>
@@ -147,7 +214,7 @@
<seealso marker="snmpa_mib_storage">mib storage</seealso>.
At present there are three simple modules
(<c>snmpa_mib_storage_ets</c>, <c>snmpa_mib_storage_dets</c> and
- <c>snmpa_mib_storage_mnesia</c>) implement�ng this behaviour,
+ <c>snmpa_mib_storage_mnesia</c>) implementing this behaviour,
provided with the app. </p>
<p>A config option for the (agent)
<seealso marker="snmp_config#agent_mib_storage">mib storage</seealso>
diff --git a/lib/snmp/doc/src/snmpa.xml b/lib/snmp/doc/src/snmpa.xml
index 7133cb08cc..a8b8d06eea 100644
--- a/lib/snmp/doc/src/snmpa.xml
+++ b/lib/snmp/doc/src/snmpa.xml
@@ -245,29 +245,75 @@ notification_delivery_info() = #snmpa_notification_delivery_info{}
This function is used to convert to the old (pre-4.4) info
format. </p>
+ <marker id="load_mib"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>load_mib(Mib) -> ok | {error, Reason}</name>
+ <name>load_mib(Agent, Mib) -> ok | {error, Reason}</name>
+ <fsummary>Load single MIB into the agent</fsummary>
+ <type>
+ <v>Agent = pid() | atom()</v>
+ <v>MibName = string()</v>
+ <v>Reason = already_loaded | term()</v>
+ </type>
+ <desc>
+ <p>Load a single <c>Mib</c> into an agent. The <c>MibName</c>
+ is the name of the Mib, including the path to where the compiled
+ mib is found. For example: </p>
+ <code type="none">
+ Dir = code:priv_dir(my_app) ++ "/mibs/",
+ snmpa:load_mib(snmp_master_agent, Dir ++ "MY-MIB").
+ </code>
+
<marker id="load_mibs"></marker>
</desc>
</func>
<func>
<name>load_mibs(Mibs) -> ok | {error, Reason}</name>
- <name>load_mibs(Agent,Mibs) -> ok | {error, Reason}</name>
+ <name>load_mibs(Mibs, Force) -> ok | {error, Reason}</name>
+ <name>load_mibs(Agent, Mibs) -> ok | {error, Reason}</name>
+ <name>load_mibs(Agent, Mibs, Force) -> ok | {error, Reason}</name>
<fsummary>Load MIBs into the agent</fsummary>
<type>
<v>Agent = pid() | atom()</v>
<v>Mibs = [MibName]</v>
+ <v>Force = boolean()</v>
<v>MibName = string()</v>
- <v>Reason = term()</v>
+ <v>Reason = {'load aborted at', MibName, InternalReason}</v>
+ <v>InternalReason = already_loaded | term()</v>
</type>
<desc>
- <p>Loads <c>Mibs</c> into an agent. If the agent cannot load
- all MIBs, it will indicate where loading was aborted. The
- <c>MibName</c> is the name of the Mib, including the path to
- where the compiled mib is found. For example,</p>
- <code type="none">
+ <p>Load <c>Mibs</c> into an agent. If the agent cannot load all
+ MIBs (the default value of the <c>Force</c> argument is <c>false</c>),
+ it will indicate where loading was aborted. The <c>MibName</c>
+ is the name of the Mib, including the path to where the compiled
+ mib is found. For example,</p>
+ <code type="none">
Dir = code:priv_dir(my_app) ++ "/mibs/",
snmpa:load_mibs(snmp_master_agent, [Dir ++ "MY-MIB"]).
</code>
+ <p>If <c>Force = true</c> then the agent will continue attempting
+ to load each mib even after failing to load a previous mib. Use with
+ care. </p>
+
+ <marker id="unload_mib"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>unload_mib(Mib) -> ok | {error, Reason}</name>
+ <name>unload_mib(Agent, Mib) -> ok | {error, Reason}</name>
+ <fsummary>Unload single MIB from the agent</fsummary>
+ <type>
+ <v>Agent = pid() | atom()</v>
+ <v>MibName = string()</v>
+ <v>Reason = not_loaded | term()</v>
+ </type>
+ <desc>
+ <p>Unload a single <c>Mib</c> from an agent. </p>
<marker id="unload_mibs"></marker>
</desc>
@@ -275,16 +321,25 @@ notification_delivery_info() = #snmpa_notification_delivery_info{}
<func>
<name>unload_mibs(Mibs) -> ok | {error, Reason}</name>
- <name>unload_mibs(Agent,Mibs) -> ok | {error, Reason}</name>
+ <name>unload_mibs(Mibs, Force) -> ok | {error, Reason}</name>
+ <name>unload_mibs(Agent, Mibs) -> ok | {error, Reason}</name>
+ <name>unload_mibs(Agent, Mibs, Force) -> ok | {error, Reason}</name>
<fsummary>Unload MIBs from the agent</fsummary>
<type>
<v>Agent = pid() | atom()</v>
<v>Mibs = [MibName]</v>
+ <v>Force = boolean()</v>
<v>MibName = string()</v>
+ <v>Reason = {'unload aborted at', MibName, InternalReason}</v>
+ <v>InternalReason = not_loaded | term()</v>
</type>
<desc>
- <p>Unloads MIBs into an agent. If it cannot unload all MIBs,
- it will indicate where unloading was aborted. </p>
+ <p>Unload <c>Mibs</c> from an agent. If it cannot unload all MIBs
+ (the default value of the <c>Force</c> argument is <c>false</c>),
+ it will indicate where unloading was aborted. </p>
+ <p>If <c>Force = true</c> then the agent will continue attempting
+ to unload each mib even after failing to unload a previous mib.
+ Use with care. </p>
<marker id="which_mibs"></marker>
</desc>
diff --git a/lib/snmp/doc/src/snmpa_mib_data.xml b/lib/snmp/doc/src/snmpa_mib_data.xml
index ff07a03b98..c1ea0a91f9 100644
--- a/lib/snmp/doc/src/snmpa_mib_data.xml
+++ b/lib/snmp/doc/src/snmpa_mib_data.xml
@@ -380,7 +380,7 @@
<desc>
<p>Perform a code-change (upgrade or downgrade). </p>
<p>See
- <seealso marker="gen_server">gen_server</seealso>
+ <seealso marker="stdlib:gen_server">gen_server</seealso>
for more info regarding the <c>Vsn</c> and <c>Extra</c> arguments. </p>
</desc>
diff --git a/lib/snmp/src/agent/snmpa.erl b/lib/snmp/src/agent/snmpa.erl
index 14b93439df..a95e41ea42 100644
--- a/lib/snmp/src/agent/snmpa.erl
+++ b/lib/snmp/src/agent/snmpa.erl
@@ -39,8 +39,10 @@
enum_to_int/2, enum_to_int/3,
info/0, info/1, old_info_format/1,
- load_mibs/1, load_mibs/2,
- unload_mibs/1, unload_mibs/2,
+ load_mib/1, load_mib/2,
+ load_mibs/1, load_mibs/2, load_mibs/3,
+ unload_mib/1, unload_mib/2,
+ unload_mibs/1, unload_mibs/2, unload_mibs/3,
which_mibs/0, which_mibs/1,
whereis_mib/1, whereis_mib/2,
dump_mibs/0, dump_mibs/1,
@@ -300,19 +302,75 @@ backup(Agent, BackupDir) ->
dump_mibs() -> snmpa_agent:dump_mibs(snmp_master_agent).
dump_mibs(File) -> snmpa_agent:dump_mibs(snmp_master_agent, File).
+
+load_mib(Mib) ->
+ load_mib(snmp_master_agent, Mib).
+
+-spec load_mib(Agent :: pid() | atom(), Mib :: string()) ->
+ ok | {error, Reason :: already_loaded | term()}.
+
+load_mib(Agent, Mib) ->
+ case load_mibs(Agent, [Mib]) of
+ {error, {'load aborted at', Mib, Reason}} ->
+ {error, Reason};
+ Else ->
+ Else
+ end.
+
load_mibs(Mibs) ->
- load_mibs(snmp_master_agent, Mibs).
+ load_mibs(snmp_master_agent, Mibs, false).
load_mibs(Agent, Mibs) when is_list(Mibs) ->
- snmpa_agent:load_mibs(Agent, Mibs).
+ snmpa_agent:load_mibs(Agent, Mibs, false);
+load_mibs(Mibs, Force)
+ when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) ->
+ load_mibs(snmp_master_agent, Mibs, Force).
+
+-spec load_mibs(Agent :: pid() | atom(),
+ Mibs :: [MibName :: string()],
+ Force :: boolean()) ->
+ ok | {error, {'load aborted at', MibName :: string(), InternalReason :: already_loaded | term()}}.
+
+load_mibs(Agent, Mibs, Force)
+ when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) ->
+ snmpa_agent:load_mibs(Agent, Mibs, Force).
+
+
+unload_mib(Mib) ->
+ unload_mib(snmp_master_agent, Mib).
+
+-spec unload_mib(Agent :: pid() | atom(), Mib :: string()) ->
+ ok | {error, Reason :: not_loaded | term()}.
+
+unload_mib(Agent, Mib) ->
+ case unload_mibs(Agent, [Mib]) of
+ {error, {'unload aborted at', Mib, Reason}} ->
+ {error, Reason};
+ Else ->
+ Else
+ end.
unload_mibs(Mibs) ->
- unload_mibs(snmp_master_agent, Mibs).
+ unload_mibs(snmp_master_agent, Mibs, false).
unload_mibs(Agent, Mibs) when is_list(Mibs) ->
- snmpa_agent:unload_mibs(Agent, Mibs).
+ snmpa_agent:unload_mibs(Agent, Mibs);
+unload_mibs(Mibs, Force)
+ when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) ->
+ unload_mibs(snmp_master_agent, Mibs, Force).
+
+-spec unload_mibs(Agent :: pid() | atom(),
+ Mibs :: [MibName :: string()],
+ Force :: boolean()) ->
+ ok | {error, {'unload aborted at', MibName :: string(), InternalReason :: not_loaded | term()}}.
+
+unload_mibs(Agent, Mibs, Force)
+ when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) ->
+ snmpa_agent:unload_mibs(Agent, Mibs, Force).
+
which_mibs() -> which_mibs(snmp_master_agent).
which_mibs(Agent) -> snmpa_agent:which_mibs(Agent).
+
whereis_mib(Mib) ->
whereis_mib(snmp_master_agent, Mib).
whereis_mib(Agent, Mib) when is_atom(Mib) ->
diff --git a/lib/snmp/src/agent/snmpa_agent.erl b/lib/snmp/src/agent/snmpa_agent.erl
index c267ce5a70..9bed6e554e 100644
--- a/lib/snmp/src/agent/snmpa_agent.erl
+++ b/lib/snmp/src/agent/snmpa_agent.erl
@@ -28,7 +28,8 @@
%% External exports
-export([start_link/4, start_link/5, stop/1]).
-export([subagent_set/2,
- load_mibs/2, unload_mibs/2, which_mibs/1, whereis_mib/2, info/1,
+ load_mibs/3, unload_mibs/3,
+ which_mibs/1, whereis_mib/2, info/1,
register_subagent/3, unregister_subagent/2,
send_notification/3,
register_notification_filter/5,
@@ -71,7 +72,8 @@
handle_pdu/8, worker/2, worker_loop/1,
do_send_trap/7, do_send_trap/8]).
%% <BACKWARD-COMPAT>
--export([handle_pdu/7]).
+-export([handle_pdu/7,
+ load_mibs/2, unload_mibs/2]).
%% </BACKWARD-COMPAT>
-include("snmpa_internal.hrl").
@@ -528,12 +530,22 @@ subagent_set(SubAgent, Arguments) ->
%% Called by administrator (not agent; deadlock would occur)
+%% <BACKWARD-COMPAT>
load_mibs(Agent, Mibs) ->
- call(Agent, {load_mibs, Mibs}).
+ load_mibs(Agent, Mibs, false).
+%% </BACKWARD-COMPAT>
+
+load_mibs(Agent, Mibs, Force) ->
+ call(Agent, {load_mibs, Mibs, Force}).
%% Called by administrator (not agent; deadlock would occur)
+%% <BACKWARD-COMPAT>
unload_mibs(Agent, Mibs) ->
- call(Agent, {unload_mibs, Mibs}).
+ unload_mibs(Agent, Mibs, false).
+%% </BACKWARD-COMPAT>
+
+unload_mibs(Agent, Mibs, Force) ->
+ call(Agent, {unload_mibs, Mibs, Force}).
which_mibs(Agent) ->
call(Agent, which_mibs).
@@ -1216,13 +1228,25 @@ handle_call({unregister_subagent, SubTreeOid}, _From, S) ->
end,
{reply, Reply, S};
+%% <BACKWARD-COMPAT>
handle_call({load_mibs, Mibs}, _From, S) ->
?vlog("load mibs ~p", [Mibs]),
{reply, snmpa_mib:load_mibs(get(mibserver), Mibs), S};
+%% </BACKWARD-COMPAT>
+
+handle_call({load_mibs, Mibs, Force}, _From, S) ->
+ ?vlog("[~w] load mibs ~p", [Force, Mibs]),
+ {reply, snmpa_mib:load_mibs(get(mibserver), Mibs, Force), S};
+%% <BACKWARD-COMPAT>
handle_call({unload_mibs, Mibs}, _From, S) ->
?vlog("unload mibs ~p", [Mibs]),
{reply, snmpa_mib:unload_mibs(get(mibserver), Mibs), S};
+%% </BACKWARD-COMPAT>
+
+handle_call({unload_mibs, Mibs, Force}, _From, S) ->
+ ?vlog("[~w] unload mibs ~p", [Force, Mibs]),
+ {reply, snmpa_mib:unload_mibs(get(mibserver), Mibs, Force), S};
handle_call(which_mibs, _From, S) ->
?vlog("which mibs", []),
diff --git a/lib/snmp/src/agent/snmpa_mib.erl b/lib/snmp/src/agent/snmpa_mib.erl
index 031309b990..5b523447c5 100644
--- a/lib/snmp/src/agent/snmpa_mib.erl
+++ b/lib/snmp/src/agent/snmpa_mib.erl
@@ -26,7 +26,7 @@
%% External exports
-export([start_link/3, stop/1,
lookup/2, next/3, which_mib/2, which_mibs/1, whereis_mib/2,
- load_mibs/2, unload_mibs/2,
+ load_mibs/3, unload_mibs/3,
register_subagent/3, unregister_subagent/2, info/1, info/2,
verbosity/2, dump/1, dump/2,
backup/2,
@@ -39,6 +39,10 @@
which_cache_size/1
]).
+%% <BACKWARD-COMPAT>
+-export([load_mibs/2, unload_mibs/2]).
+%% </BACKWARD-COMPAT>
+
%% Internal exports
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
code_change/3]).
@@ -182,19 +186,32 @@ next(MibServer, Oid, MibView) ->
%%----------------------------------------------------------------------
%% Purpose: Loads mibs into the mib process.
%% Args: Mibs is a list of Filenames (compiled mibs).
+%% Force is a boolean
%% Returns: ok | {error, Reason}
%%----------------------------------------------------------------------
+
+%% <BACKWARD-COMPAT>
load_mibs(MibServer, Mibs) ->
- call(MibServer, {load_mibs, Mibs}).
+ load_mibs(MibServer, Mibs, false).
+%% </BACKWARD-COMPAT>
+
+load_mibs(MibServer, Mibs, Force) ->
+ call(MibServer, {load_mibs, Mibs, Force}).
%%----------------------------------------------------------------------
%% Purpose: Loads mibs into the mib process.
%% Args: Mibs is a list of Filenames (compiled mibs).
+%% Force is a boolean
%% Returns: ok | {error, Reason}
%%----------------------------------------------------------------------
+%% <BACKWARD-COMPAT>
unload_mibs(MibServer, Mibs) ->
- call(MibServer, {unload_mibs, Mibs}).
+ unload_mibs(MibServer, Mibs, false).
+%% </BACKWARD-COMPAT>
+
+unload_mibs(MibServer, Mibs, Force) ->
+ call(MibServer, {unload_mibs, Mibs, Force}).
%%----------------------------------------------------------------------
@@ -323,10 +340,6 @@ do_init(Prio, Mibs, Opts) ->
%% Returns: {ok, NewMibData} | {'aborted at', Mib, NewData, Reason}
%% Args: Operation is load_mib | unload_mib.
%%----------------------------------------------------------------------
-mib_operations(Mod, Operation, Mibs, Data, MeOverride, TeOverride) ->
- mib_operations(Mod, Operation, Mibs, Data, MeOverride, TeOverride, false).
-
-
mib_operations(_Mod, _Operation, [], Data, _MeOverride, _TeOverride, _Force) ->
{ok, Data};
mib_operations(Mod, Operation, [Mib|Mibs], Data0, MeOverride, TeOverride, Force) ->
@@ -451,18 +464,23 @@ handle_call({next, Oid, MibView}, _From,
?vdebug("next -> Reply: ~p", [Reply]),
{reply, Reply, NewState};
-handle_call({load_mibs, Mibs}, _From,
+%% <BACKWARD-COMPAT>
+handle_call({load_mibs, Mibs}, From, State) ->
+ handle_call({load_mibs, Mibs, false}, From, State);
+%% </BACKWARD-COMPAT>
+
+handle_call({load_mibs, Mibs, Force}, _From,
#state{data = Data,
teo = TeOverride,
meo = MeOverride,
cache = Cache,
data_mod = Mod} = State) ->
- ?vlog("load mibs ~p",[Mibs]),
+ ?vlog("[~w] load mibs ~p", [Force, Mibs]),
%% Invalidate cache
NewCache = maybe_invalidate_cache(Cache),
{NData, Reply} =
case (catch mib_operations(Mod, load_mib, Mibs, Data,
- MeOverride, TeOverride)) of
+ MeOverride, TeOverride, Force)) of
{'aborted at', Mib, NewData, Reason} ->
?vlog("aborted at ~p for reason ~p",[Mib,Reason]),
{NewData, {error, {'load aborted at', Mib, Reason}}};
@@ -472,19 +490,24 @@ handle_call({load_mibs, Mibs}, _From,
Mod:sync(NData),
{reply, Reply, State#state{data = NData, cache = NewCache}};
-handle_call({unload_mibs, Mibs}, _From,
+%% <BACKWARD-COMPAT>
+handle_call({unload_mibs, Mibs}, From, State) ->
+ handle_call({unload_mibs, Mibs, false}, From, State);
+%% </BACKWARD-COMPAT>
+
+handle_call({unload_mibs, Mibs, Force}, _From,
#state{data = Data,
teo = TeOverride,
meo = MeOverride,
cache = Cache,
data_mod = Mod} = State) ->
- ?vlog("unload mibs ~p",[Mibs]),
+ ?vlog("[~w] unload mibs ~p", [Force, Mibs]),
%% Invalidate cache
NewCache = maybe_invalidate_cache(Cache),
%% Unload mib(s)
{NData, Reply} =
case (catch mib_operations(Mod, unload_mib, Mibs, Data,
- MeOverride, TeOverride)) of
+ MeOverride, TeOverride, Force)) of
{'aborted at', Mib, NewData, Reason} ->
?vlog("aborted at ~p for reason ~p", [Mib,Reason]),
{NewData, {error, {'unload aborted at', Mib, Reason}}};
diff --git a/lib/snmp/src/app/snmp.appup.src b/lib/snmp/src/app/snmp.appup.src
index 16b626111b..6edcf7e833 100644
--- a/lib/snmp/src/app/snmp.appup.src
+++ b/lib/snmp/src/app/snmp.appup.src
@@ -29,12 +29,22 @@
%% {add_module, snmpm_net_if_mt}
[
+ {"4.24.1",
+ [
+ {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_mib, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"4.24",
[
{load_module, snmp_conf, soft_purge, soft_purge, []},
{load_module, snmp_view_based_acm_mib, soft_purge, soft_purge,
[snmp_conf]},
- {update, snmpa_local_db, soft, soft_purge, soft_purge, []}
+ {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_local_db, soft, soft_purge, soft_purge, []},
+ {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_mib, soft, soft_purge, soft_purge, []}
]
},
{"4.23.1", [{restart_application, snmp}]},
@@ -47,12 +57,22 @@
%% {remove, {snmpm_net_if_mt, soft_purge, soft_purge}}
[
+ {"4.24.1",
+ [
+ {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_mib, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"4.24",
[
{load_module, snmp_conf, soft_purge, soft_purge, []},
{load_module, snmp_view_based_acm_mib, soft_purge, soft_purge,
[snmp_conf]},
- {update, snmpa_local_db, soft, soft_purge, soft_purge, []}
+ {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_local_db, soft, soft_purge, soft_purge, []},
+ {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]},
+ {update, snmpa_mib, soft, soft_purge, soft_purge, []}
]
},
{"4.23.1", [{restart_application, snmp}]},
diff --git a/lib/snmp/test/snmp_agent_mibs_test.erl b/lib/snmp/test/snmp_agent_mibs_test.erl
index 248fe7d83e..f7dae64e3f 100644
--- a/lib/snmp/test/snmp_agent_mibs_test.erl
+++ b/lib/snmp/test/snmp_agent_mibs_test.erl
@@ -238,6 +238,8 @@ start_and_stop(Config) when is_list(Config) ->
load_unload(suite) -> [];
load_unload(Config) when is_list(Config) ->
+ ?DBG("load_unload -> start", []),
+
Prio = normal,
Verbosity = log,
MibDir = ?config(data_dir, Config),
@@ -253,8 +255,10 @@ load_unload(Config) when is_list(Config) ->
?line ok = load_mibs(MibsPid, MibDir, ["Test2"]),
?line ok = verify_loaded_mibs(MibsPid, MibDir, ["Test2"]),
- ?DBG("load_unload -> load one already loaded mib", []),
- ?line {error, _} = load_mibs(MibsPid, MibDir, ["Test2"]),
+ ?DBG("load_unload -> try load one *already loaded* mib", []),
+ EMib = join(MibDir, "Test2"),
+ ?line {error, {'load aborted at', EMib, already_loaded}} =
+ load_mibs(MibsPid, MibDir, ["Test2"]),
?DBG("load_unload -> load 2 not already loaded mibs", []),
?line ok = load_mibs(MibsPid, MibDir, ["TestTrap", "TestTrapv2"]),
@@ -266,7 +270,8 @@ load_unload(Config) when is_list(Config) ->
?line ok = verify_loaded_mibs(MibsPid, MibDir, ["TestTrap", "TestTrapv2"]),
?DBG("load_unload -> try unload two loaded mibs and one not loaded", []),
- ?line {error, _} = unload_mibs(MibsPid, ["TestTrap","Test2","TestTrapv2"]),
+ ?line {error, {'unload aborted at', "Test2", not_loaded}} =
+ unload_mibs(MibsPid, ["TestTrap","Test2","TestTrapv2"]),
?line ok = verify_loaded_mibs(MibsPid, MibDir, ["TestTrapv2"]),
?DBG("load_unload -> unload the remaining loaded mib", []),
@@ -279,6 +284,7 @@ load_unload(Config) when is_list(Config) ->
?DBG("load_unload -> stop symbolic store", []),
?line sym_stop(),
+ ?DBG("load_unload -> done", []),
ok.
@@ -691,10 +697,16 @@ mibs_info(Pid) ->
load_mibs(Pid, Dir, Mibs0) ->
Mibs = [join(Dir, Mib) || Mib <- Mibs0],
- snmpa_mib:load_mibs(Pid, Mibs).
+ Res = snmpa_mib:load_mibs(Pid, Mibs),
+ %% ?DBG("load_mibs -> "
+ %% "~n Res: ~p", [Res]),
+ Res.
unload_mibs(Pid, Mibs) ->
- snmpa_mib:unload_mibs(Pid, Mibs).
+ Res = snmpa_mib:unload_mibs(Pid, Mibs),
+ %% ?DBG("unload_mibs -> "
+ %% "~n Res: ~p", [Res]),
+ Res.
verify_loaded_mibs(Pid, Dir, ExpectedMibs0) ->
ExpectedMibs = [join(Dir, Mib) || Mib <- ExpectedMibs0],
diff --git a/lib/snmp/test/snmp_agent_test.erl b/lib/snmp/test/snmp_agent_test.erl
index 0bd180513e..8a2abdcdad 100644
--- a/lib/snmp/test/snmp_agent_test.erl
+++ b/lib/snmp/test/snmp_agent_test.erl
@@ -553,7 +553,7 @@ init_per_suite(Config0) when is_list(Config0) ->
%% Mib-dirs
MibDir = snmp_test_lib:lookup(data_dir, Config2),
- StdMibDir = filename:join([code:priv_dir(snmp), "mibs"]),
+ StdMibDir = join([code:priv_dir(snmp), "mibs"]),
Config3 = [{mib_dir, MibDir}, {std_mib_dir, StdMibDir} | Config2],
@@ -747,21 +747,21 @@ init_per_testcase2(Case, Config) ->
CaseTopDir = snmp_test_lib:init_testcase_top_dir(Case, Config),
%% Create agent top-dir(s)
- AgentTopDir = filename:join([CaseTopDir, agent]),
+ AgentTopDir = join([CaseTopDir, agent]),
ok = file:make_dir(AgentTopDir),
- AgentConfDir = filename:join([AgentTopDir, config]),
+ AgentConfDir = join([AgentTopDir, config]),
ok = file:make_dir(AgentConfDir),
- AgentDbDir = filename:join([AgentTopDir, db]),
+ AgentDbDir = join([AgentTopDir, db]),
ok = file:make_dir(AgentDbDir),
- AgentLogDir = filename:join([AgentTopDir, log]),
+ AgentLogDir = join([AgentTopDir, log]),
ok = file:make_dir(AgentLogDir),
%% Create sub-agent top-dir(s)
- SubAgentTopDir = filename:join([CaseTopDir, sub_agent]),
+ SubAgentTopDir = join([CaseTopDir, sub_agent]),
ok = file:make_dir(SubAgentTopDir),
%% Create manager top-dir(s)
- ManagerTopDir = filename:join([CaseTopDir, manager]),
+ ManagerTopDir = join([CaseTopDir, manager]),
ok = file:make_dir(ManagerTopDir),
[{case_top_dir, CaseTopDir},
@@ -1737,19 +1737,19 @@ init_case(Config) ->
load_master(Mib) ->
?DBG("load_master -> entry with"
"~n Mib: ~p", [Mib]),
- snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety
- ok = snmpa:load_mibs(snmp_master_agent, [get(mib_dir) ++ Mib]).
+ snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety
+ ok = snmpa:load_mib(snmp_master_agent, join(get(mib_dir), Mib)).
load_master_std(Mib) ->
?DBG("load_master_std -> entry with"
"~n Mib: ~p", [Mib]),
- snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety
- ok = snmpa:load_mibs(snmp_master_agent, [get(std_mib_dir) ++ Mib]).
+ snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety
+ ok = snmpa:load_mib(snmp_master_agent, join(get(std_mib_dir), Mib)).
unload_master(Mib) ->
?DBG("unload_master -> entry with"
"~n Mib: ~p", [Mib]),
- ok = snmpa:unload_mibs(snmp_master_agent, [Mib]).
+ ok = snmpa:unload_mib(snmp_master_agent, Mib).
loaded_mibs() ->
?DBG("loaded_mibs -> entry",[]),
@@ -2154,11 +2154,11 @@ subagent(Config) when is_list(Config) ->
try_test(unreg_test),
?P1("Loading previous subagent mib in master and testing..."),
- ?line ok = snmpa:load_mibs(MA, [MibDir ++ "Klas1"]),
+ ?line ok = snmpa:load_mib(MA, join(MibDir, "Klas1")),
try_test(load_test),
?P1("Unloading previous subagent mib in master and testing..."),
- ?line ok = snmpa:unload_mibs(MA, [MibDir ++ "Klas1"]),
+ ?line ok = snmpa:unload_mib(MA, join(MibDir, "Klas1")),
try_test(unreg_test),
?P1("Testing register subagent..."),
rpc:call(SaNode, snmp, register_subagent,
@@ -2354,11 +2354,11 @@ sa_register(Config) when is_list(Config) ->
?P1("Unloading Klas1..."),
?DBG("sa_register -> unload mibs", []),
- snmpa:unload_mibs(SA, [MibDir ++ "Klas1"]),
+ snmpa:unload_mib(SA, join(MibDir, "Klas1")),
?P1("Loading SA-MIB..."),
?DBG("sa_register -> unload mibs", []),
- snmpa:load_mibs(SA, [MibDir ++ "SA-MIB"]),
+ snmpa:load_mib(SA, join(MibDir, "SA-MIB")),
?P1("register subagent..."),
?DBG("sa_register -> register subagent", []),
@@ -2577,7 +2577,7 @@ next_across_sa(Config) when is_list(Config) ->
?line {ok, SA} = start_subagent(SaNode, ?sa, "SA-MIB"),
?P1("Loading another subagent mib (Klas1)..."),
- ?line ok = snmpa:load_mibs(SA, [MibDir ++ "Klas1"]),
+ ?line ok = snmpa:load_mib(SA, MibDir ++ "Klas1"),
?P1("register subagent..."),
rpc:call(SaNode, snmp, register_subagent, [MA, ?klas1, SA]),
@@ -2589,7 +2589,7 @@ next_across_sa(Config) when is_list(Config) ->
try_test(next_across_sa_test),
?P1("Unloading mib (Klas1)"),
- snmpa:unload_mibs(SA, [MibDir ++ "Klas1"]),
+ snmpa:unload_mib(SA, join(MibDir, "Klas1")),
rpc:call(SaNode, snmp, unregister_subagent, [MA, ?klas1]),
try_test(unreg_test),
@@ -2630,25 +2630,25 @@ undo(Config) when is_list(Config) ->
?line {ok, SA} = start_subagent(SaNode, ?sa, "SA-MIB"),
?P1("Load Klas3 & Klas4..."),
- ?line ok = snmpa:load_mibs(MA, [MibDir ++ "Klas3"]),
- ?line ok = snmpa:load_mibs(MA, [MibDir ++ "Klas4"]),
+ ?line ok = snmpa:load_mib(MA, join(MibDir, "Klas3")),
+ ?line ok = snmpa:load_mib(MA, join(MibDir, "Klas4")),
?P1("Testing undo phase at master agent..."),
try_test(undo_test),
try_test(api_test2),
?P1("Unload Klas3..."),
- ?line ok = snmpa:unload_mibs(MA, [MibDir ++ "Klas3"]),
+ ?line ok = snmpa:unload_mib(MA, join(MibDir, "Klas3")),
?P1("Testing bad return values from instrum. funcs..."),
try_test(bad_return),
?P1("Unload Klas4..."),
- ?line ok = snmpa:unload_mibs(MA, [MibDir ++ "Klas4"]),
+ ?line ok = snmpa:unload_mib(MA, join(MibDir, "Klas4")),
?P1("Testing undo phase at subagent..."),
- ?line ok = snmpa:load_mibs(SA, [MibDir ++ "Klas3"]),
- ?line ok = snmpa:load_mibs(SA, [MibDir ++ "Klas4"]),
+ ?line ok = snmpa:load_mib(SA, join(MibDir, "Klas3")),
+ ?line ok = snmpa:load_mib(SA, join(MibDir, "Klas4")),
?line ok = snmpa:register_subagent(MA, ?klas3, SA),
?line ok = snmpa:register_subagent(MA, ?klas4, SA),
try_test(undo_test),
@@ -6246,8 +6246,8 @@ otp_4394_config(AgentConfDir, MgrDir, Ip0) ->
"OTP-4394 test"),
?line case update_usm(Vsn, AgentConfDir) of
true ->
- ?line copy_file(filename:join(AgentConfDir, "usm.conf"),
- filename:join(MgrDir, "usm.conf")),
+ ?line copy_file(join(AgentConfDir, "usm.conf"),
+ join(MgrDir, "usm.conf")),
?line update_usm_mgr(Vsn, MgrDir);
false ->
?line ok
@@ -6406,11 +6406,11 @@ otp8395({init, Config}) when is_list(Config) ->
%%
AgentDbDir = ?config(agent_db_dir, Config),
- AgentMnesiaDir = filename:join([AgentDbDir, "mnesia"]),
+ AgentMnesiaDir = join([AgentDbDir, "mnesia"]),
mnesia_init(AgentNode, AgentMnesiaDir),
%% SubAgentDir = ?config(sub_agent_dir, Config),
- %% SubAgentMnesiaDir = filename:join([SubAgentDir, "mnesia"]),
+ %% SubAgentMnesiaDir = join([SubAgentDir, "mnesia"]),
%% mnesia_init(SubAgentNode, SubAgentMnesiaDir),
%% ok = mnesia_create_schema(AgentNode, [AgentNode, SubAgentNode]),
@@ -6540,7 +6540,7 @@ otp8395(Config) when is_list(Config) ->
?SLEEP(1000),
AgentNode = ?config(agent_node, Config),
AgentLogDir = ?config(agent_log_dir, Config),
- OutFile = filename:join([AgentLogDir, "otp8395.txt"]),
+ OutFile = join([AgentLogDir, "otp8395.txt"]),
{ok, LogInfo} = rpc:call(AgentNode, snmpa, log_info, []),
?DBG("otp8395 -> LogInfo: ~p", [LogInfo]),
@@ -6578,7 +6578,7 @@ otp9884({init, Config}) when is_list(Config) ->
%%
AgentDbDir = ?config(agent_db_dir, Config),
- AgentMnesiaDir = filename:join([AgentDbDir, "mnesia"]),
+ AgentMnesiaDir = join([AgentDbDir, "mnesia"]),
mnesia_init(AgentNode, AgentMnesiaDir),
mnesia_create_schema(AgentNode, [AgentNode]),
@@ -6608,8 +6608,8 @@ otp9884({init, Config}) when is_list(Config) ->
ManagerConfDir = ?config(manager_top_dir, Config),
AgentConfDir = ?config(agent_conf_dir, Config),
AgentTopDir = ?config(agent_top_dir, Config),
- AgentBkpDir1 = filename:join([AgentTopDir, backup1]),
- AgentBkpDir2 = filename:join([AgentTopDir, backup2]),
+ AgentBkpDir1 = join([AgentTopDir, backup1]),
+ AgentBkpDir2 = join([AgentTopDir, backup2]),
ok = file:make_dir(AgentBkpDir1),
ok = file:make_dir(AgentBkpDir2),
AgentBkpDirs = [AgentBkpDir1, AgentBkpDir2],
@@ -7104,7 +7104,7 @@ display_log(Config) ->
{value, {_, Node}} ->
LogDir = Dir,
Mibs = [],
- OutFile = filename:join(LogDir, "snmpa_log.txt"),
+ OutFile = join(LogDir, "snmpa_log.txt"),
p("~n"
"========================="
" < Audit Trail Log > "
@@ -7251,6 +7251,14 @@ lists_key1search(Key, List) when is_atom(Key) ->
%% regs() ->
%% lists:sort(registered()).
+%% ------
+
+join(Parts) ->
+ filename:join(Parts).
+
+join(Dir, File) ->
+ filename:join(Dir, File).
+
%% ------
diff --git a/lib/snmp/test/snmp_agent_test_lib.erl b/lib/snmp/test/snmp_agent_test_lib.erl
index 7e4b713e56..122289c28e 100644
--- a/lib/snmp/test/snmp_agent_test_lib.erl
+++ b/lib/snmp/test/snmp_agent_test_lib.erl
@@ -139,31 +139,31 @@ init_all(Config) when is_list(Config) ->
SuiteTopDir = ?config(snmp_suite_top_dir, Config),
?DBG("init_all -> SuiteTopDir ~p", [SuiteTopDir]),
- AgentDir = filename:join(SuiteTopDir, "agent/"),
+ AgentDir = join(SuiteTopDir, "agent/"),
?line ok = file:make_dir(AgentDir),
?DBG("init_all -> AgentDir ~p", [AgentDir]),
- AgentDbDir = filename:join(AgentDir, "db/"),
+ AgentDbDir = join(AgentDir, "db/"),
?line ok = file:make_dir(AgentDbDir),
?DBG("init_all -> AgentDbDir ~p", [AgentDbDir]),
- AgentLogDir = filename:join(AgentDir, "log/"),
+ AgentLogDir = join(AgentDir, "log/"),
?line ok = file:make_dir(AgentLogDir),
?DBG("init_all -> AgentLogDir ~p", [AgentLogDir]),
- AgentConfDir = filename:join(AgentDir, "conf/"),
+ AgentConfDir = join(AgentDir, "conf/"),
?line ok = file:make_dir(AgentConfDir),
?DBG("init_all -> AgentConfDir ~p", [AgentConfDir]),
- MgrDir = filename:join(SuiteTopDir, "mgr/"),
+ MgrDir = join(SuiteTopDir, "mgr/"),
?line ok = file:make_dir(MgrDir),
?DBG("init_all -> MgrDir ~p", [MgrDir]),
- SaDir = filename:join(SuiteTopDir, "sa/"),
+ SaDir = join(SuiteTopDir, "sa/"),
?line ok = file:make_dir(SaDir),
?DBG("init_all -> SaDir ~p", [SaDir]),
- SaDbDir = filename:join(SaDir, "db/"),
+ SaDbDir = join(SaDir, "db/"),
?line ok = file:make_dir(SaDbDir),
?DBG("init_all -> SaDbDir ~p", [SaDbDir]),
@@ -183,11 +183,11 @@ init_all(Config) when is_list(Config) ->
?DBG("init_all -> application mnesia: set_env dir",[]),
?line application_controller:set_env(mnesia, dir,
- filename:join(AgentDbDir, "Mnesia1")),
+ join(AgentDbDir, "Mnesia1")),
?DBG("init_all -> application mnesia: set_env dir on node ~p",[SaNode]),
?line rpc:call(SaNode, application_controller, set_env,
- [mnesia, dir, filename:join(SaDir, "Mnesia2")]),
+ [mnesia, dir, join(SaDir, "Mnesia2")]),
?DBG("init_all -> create mnesia schema",[]),
?line ok = mnesia:create_schema([SaNode, node()]),
@@ -253,7 +253,7 @@ init_case(Config) when is_list(Config) ->
MibDir = ?config(mib_dir, Config),
put(mib_dir, MibDir),
- StdM = filename:join(code:priv_dir(snmp), "mibs") ++ "/",
+ StdM = join(code:priv_dir(snmp), "mibs") ++ "/",
put(std_mib_dir, StdM),
MgrDir = ?config(mgr_dir, Config),
@@ -341,7 +341,7 @@ run(Mod, Func, Args, Opts) ->
Crypto = ?CRYPTO_START(),
?DBG("run -> Crypto: ~p", [Crypto]),
catch snmp_test_mgr:stop(), % If we had a running mgr from a failed case
- StdM = filename:join(code:priv_dir(snmp), "mibs") ++ "/",
+ StdM = join(code:priv_dir(snmp), "mibs") ++ "/",
Vsn = get(vsn),
?DBG("run -> config:"
"~n M: ~p"
@@ -763,7 +763,7 @@ start_subagent(SaNode, RegTree, Mib) ->
MA = whereis(snmp_master_agent),
?DBG("start_subagent -> MA: ~p", [MA]),
MibDir = get(mib_dir),
- Mib1 = join(MibDir,Mib),
+ Mib1 = join(MibDir, Mib),
Mod = snmpa_supervisor,
Func = start_sub_agent,
Args = [MA, RegTree, [Mib1]],
@@ -800,28 +800,25 @@ mibs(StdMibDir,MibDir) ->
join(MibDir, "Test2.bin"),
join(MibDir, "TestTrapv2.bin")].
-join(D,F) ->
- filename:join(D,F).
-
%% --- various mib load/unload functions ---
load_master(Mib) ->
?DBG("load_master -> entry with"
"~n Mib: ~p", [Mib]),
- snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety
- ok = snmpa:load_mibs(snmp_master_agent, [get(mib_dir) ++ Mib]).
+ snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety
+ ok = snmpa:load_mib(snmp_master_agent, join(get(mib_dir), Mib)).
load_master_std(Mib) ->
?DBG("load_master_std -> entry with"
"~n Mib: ~p", [Mib]),
- snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety
- ok = snmpa:load_mibs(snmp_master_agent, [get(std_mib_dir) ++ Mib]).
+ snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety
+ ok = snmpa:load_mibs(snmp_master_agent, join(get(std_mib_dir), Mib)).
unload_master(Mib) ->
?DBG("unload_master -> entry with"
"~n Mib: ~p", [Mib]),
- ok = snmpa:unload_mibs(snmp_master_agent, [Mib]).
+ ok = snmpa:unload_mib(snmp_master_agent, Mib).
loaded_mibs() ->
?DBG("loaded_mibs -> entry",[]),
@@ -1383,8 +1380,8 @@ config(Vsns, MgrDir, AgentConfDir, MIp, AIp) ->
"test"),
?line case update_usm(Vsns, AgentConfDir) of
true ->
- ?line copy_file(filename:join(AgentConfDir, "usm.conf"),
- filename:join(MgrDir, "usm.conf")),
+ ?line copy_file(join(AgentConfDir, "usm.conf"),
+ join(MgrDir, "usm.conf")),
?line update_usm_mgr(Vsns, MgrDir);
false ->
?line ok
@@ -1403,9 +1400,9 @@ delete_files(Config) ->
delete_files(_AgentFiles, []) ->
ok;
delete_files(AgentDir, [DirName|DirNames]) ->
- Dir = filename:join(AgentDir, DirName),
+ Dir = join(AgentDir, DirName),
{ok, Files} = file:list_dir(Dir),
- lists:foreach(fun(FName) -> file:delete(filename:join(Dir, FName)) end,
+ lists:foreach(fun(FName) -> file:delete(join(Dir, FName)) end,
Files),
delete_files(AgentDir, DirNames).
@@ -1481,8 +1478,8 @@ update_usm_mgr(Vsns, Dir) ->
end.
rewrite_usm_mgr(Dir, ShaKey, DesKey) ->
- ?line ok = file:rename(filename:join(Dir,"usm.conf"),
- filename:join(Dir,"usm.old")),
+ ?line ok = file:rename(join(Dir,"usm.conf"),
+ join(Dir,"usm.old")),
Conf = [{"agentEngine", "newUser", "newUser", zeroDotZero,
usmHMACSHAAuthProtocol, "", "",
usmDESPrivProtocol, "", "", "", ShaKey, DesKey},
@@ -1492,8 +1489,8 @@ rewrite_usm_mgr(Dir, ShaKey, DesKey) ->
ok = snmp_config:write_agent_usm_config(Dir, "", Conf).
reset_usm_mgr(Dir) ->
- ?line ok = file:rename(filename:join(Dir,"usm.old"),
- filename:join(Dir,"usm.conf")).
+ ?line ok = file:rename(join(Dir,"usm.old"),
+ join(Dir,"usm.conf")).
update_community([v3], _Dir) ->
@@ -1526,7 +1523,7 @@ write_target_addr_conf(Dir, ManagerIp, UDP, Vsns) ->
rewrite_target_addr_conf(Dir, NewPort) ->
?DBG("rewrite_target_addr_conf -> entry with"
"~n NewPort: ~p", [NewPort]),
- TAFile = filename:join(Dir, "target_addr.conf"),
+ TAFile = join(Dir, "target_addr.conf"),
case file:read_file_info(TAFile) of
{ok, _} ->
ok;
@@ -1546,8 +1543,8 @@ rewrite_target_addr_conf(Dir, NewPort) ->
?DBG("rewrite_target_addr_conf -> NewAddrs: ~p",[NewAddrs]),
- ?line ok = file:rename(filename:join(Dir,"target_addr.conf"),
- filename:join(Dir,"target_addr.old")),
+ ?line ok = file:rename(join(Dir,"target_addr.conf"),
+ join(Dir,"target_addr.old")),
?line ok = snmp_config:write_agent_target_addr_config(Dir, "", NewAddrs).
@@ -1565,8 +1562,8 @@ rewrite_target_addr_conf2(_NewPort,O) ->
O.
reset_target_addr_conf(Dir) ->
- ?line ok = file:rename(filename:join(Dir, "target_addr.old"),
- filename:join(Dir, "target_addr.conf")).
+ ?line ok = file:rename(join(Dir, "target_addr.old"),
+ join(Dir, "target_addr.conf")).
write_target_params_conf(Dir, Vsns) ->
F = fun(v1) -> {"target_v1", v1, v1, "all-rights", noAuthNoPriv};
@@ -1578,14 +1575,14 @@ write_target_params_conf(Dir, Vsns) ->
rewrite_target_params_conf(Dir, SecName, SecLevel)
when is_list(SecName) andalso is_atom(SecLevel) ->
- ?line ok = file:rename(filename:join(Dir,"target_params.conf"),
- filename:join(Dir,"target_params.old")),
+ ?line ok = file:rename(join(Dir,"target_params.conf"),
+ join(Dir,"target_params.old")),
Conf = [{"target_v3", v3, usm, SecName, SecLevel}],
snmp_config:write_agent_target_params_config(Dir, "", Conf).
reset_target_params_conf(Dir) ->
- ?line ok = file:rename(filename:join(Dir,"target_params.old"),
- filename:join(Dir,"target_params.conf")).
+ ?line ok = file:rename(join(Dir,"target_params.old"),
+ join(Dir,"target_params.conf")).
write_notify_conf(Dir) ->
Conf = [{"standard trap", "std_trap", trap},
@@ -1648,6 +1645,9 @@ rpc(Node, F, A) ->
rpc:call(Node, snmpa, F, A).
+join(Dir, File) ->
+ filename:join(Dir, File).
+
%% await_pdu(To) ->
%% await_response(To, pdu).
%%
diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk
index e987649e11..2164121e86 100644
--- a/lib/snmp/vsn.mk
+++ b/lib/snmp/vsn.mk
@@ -18,6 +18,6 @@
# %CopyrightEnd%
APPLICATION = snmp
-SNMP_VSN = 4.24.1
+SNMP_VSN = 4.24.2
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(SNMP_VSN)$(PRE_VSN)"
diff --git a/lib/ssh/doc/src/notes.xml b/lib/ssh/doc/src/notes.xml
index 6b7ff7b238..041f5e54af 100644
--- a/lib/ssh/doc/src/notes.xml
+++ b/lib/ssh/doc/src/notes.xml
@@ -29,6 +29,41 @@
<file>notes.xml</file>
</header>
+<section><title>Ssh 2.1.8</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Do not chmod ~/.ssh unnecessarily.</p>
+ <p>
+ Own Id: OTP-11189</p>
+ </item>
+ <item>
+ <p>
+ Make ssh_cli.erl handle CTRL+C. Thanks to Stefan
+ Zegenhagen.</p>
+ <p>
+ Own Id: OTP-11199</p>
+ </item>
+ <item>
+ <p>
+ Clarified timeout options in documentation.</p>
+ <p>
+ Own Id: OTP-11249</p>
+ </item>
+ <item>
+ <p>
+ Add openssh_zlib compression type to ssh_transport.
+ Thanks to Louis-Philippe Gauthier.</p>
+ <p>
+ Own Id: OTP-11256</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Ssh 2.1.7</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml
index e3850f4059..eb997a8eb5 100644
--- a/lib/ssh/doc/src/ssh.xml
+++ b/lib/ssh/doc/src/ssh.xml
@@ -88,6 +88,7 @@
number for SSH.</d>
<v>Options = [{Option, Value}]</v>
<v>Timeout = infinity | integer(milliseconds)</v>
+ <d>Negotiation timeout, for connection timeout use the option <c>{connect_timeout, timeout()}</c>.</d>
</type>
<desc>
<p>Connects to an SSH server. No channel is started. This is done
diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl
index da5750b6c3..4fd347ba8f 100644
--- a/lib/ssh/src/ssh.hrl
+++ b/lib/ssh/src/ssh.hrl
@@ -127,7 +127,8 @@
userauth_supported_methods , %
userauth_methods,
userauth_preference,
- available_host_keys
+ available_host_keys,
+ authenticated = false
}).
-record(alg,
diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl
index df6175e27c..9de4dd5967 100644
--- a/lib/ssh/src/ssh_connection_handler.erl
+++ b/lib/ssh/src/ssh_connection_handler.erl
@@ -426,10 +426,10 @@ userauth(#ssh_msg_userauth_info_response{} = Msg,
language = "en"}, State)
end;
-userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client},
+userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client} = Ssh,
manager = Pid} = State) ->
Pid ! ssh_connected,
- {next_state, connected, next_packet(State)};
+ {next_state, connected, next_packet(State#state{ssh_params = Ssh#ssh{authenticated = true}})};
userauth(#ssh_msg_userauth_failure{},
#state{ssh_params = #ssh{role = client,
diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl
index beaffdc025..682d766d99 100644
--- a/lib/ssh/src/ssh_transport.erl
+++ b/lib/ssh/src/ssh_transport.erl
@@ -206,6 +206,7 @@ key_exchange_init_msg(Ssh0) ->
kex_init(#ssh{role = Role, opts = Opts, available_host_keys = HostKeyAlgs}) ->
Random = ssh_bits:random(16),
Compression = case proplists:get_value(compression, Opts, none) of
+ openssh_zlib -> ["[email protected]", "none"];
zlib -> ["zlib", "none"];
none -> ["none", "zlib"]
end,
@@ -855,13 +856,14 @@ decrypt(#ssh{decrypt = 'aes128-cbc', decrypt_keys = Key,
IV = crypto:next_iv(aes_cbc, Data),
{Ssh#ssh{decrypt_ctx = IV}, Dec}.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Compression
%%
-%% none REQUIRED no compression
-%% zlib OPTIONAL ZLIB (LZ77) compression
+%% none REQUIRED no compression
+%% zlib OPTIONAL ZLIB (LZ77) compression
+%% openssh_zlib OPTIONAL ZLIB (LZ77) compression
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
compress_init(SSH) ->
compress_init(SSH, 1).
@@ -870,19 +872,32 @@ compress_init(#ssh{compress = none} = Ssh, _) ->
compress_init(#ssh{compress = zlib} = Ssh, Level) ->
Zlib = zlib:open(),
ok = zlib:deflateInit(Zlib, Level),
+ {ok, Ssh#ssh{compress_ctx = Zlib}};
+compress_init(#ssh{compress = '[email protected]'} = Ssh, Level) ->
+ Zlib = zlib:open(),
+ ok = zlib:deflateInit(Zlib, Level),
{ok, Ssh#ssh{compress_ctx = Zlib}}.
-
compress_final(#ssh{compress = none} = Ssh) ->
{ok, Ssh};
compress_final(#ssh{compress = zlib, compress_ctx = Context} = Ssh) ->
zlib:close(Context),
+ {ok, Ssh#ssh{compress = none, compress_ctx = undefined}};
+compress_final(#ssh{compress = '[email protected]', authenticated = false} = Ssh) ->
+ {ok, Ssh};
+compress_final(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh) ->
+ zlib:close(Context),
{ok, Ssh#ssh{compress = none, compress_ctx = undefined}}.
compress(#ssh{compress = none} = Ssh, Data) ->
{Ssh, Data};
compress(#ssh{compress = zlib, compress_ctx = Context} = Ssh, Data) ->
Compressed = zlib:deflate(Context, Data, sync),
+ {Ssh, list_to_binary(Compressed)};
+compress(#ssh{compress = '[email protected]', authenticated = false} = Ssh, Data) ->
+ {Ssh, Data};
+compress(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh, Data) ->
+ Compressed = zlib:deflate(Context, Data, sync),
{Ssh, list_to_binary(Compressed)}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -894,18 +909,32 @@ decompress_init(#ssh{decompress = none} = Ssh) ->
decompress_init(#ssh{decompress = zlib} = Ssh) ->
Zlib = zlib:open(),
ok = zlib:inflateInit(Zlib),
+ {ok, Ssh#ssh{decompress_ctx = Zlib}};
+decompress_init(#ssh{decompress = '[email protected]'} = Ssh) ->
+ Zlib = zlib:open(),
+ ok = zlib:inflateInit(Zlib),
{ok, Ssh#ssh{decompress_ctx = Zlib}}.
decompress_final(#ssh{decompress = none} = Ssh) ->
{ok, Ssh};
decompress_final(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh) ->
zlib:close(Context),
+ {ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}};
+decompress_final(#ssh{decompress = '[email protected]', authenticated = false} = Ssh) ->
+ {ok, Ssh};
+decompress_final(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh) ->
+ zlib:close(Context),
{ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}}.
decompress(#ssh{decompress = none} = Ssh, Data) ->
{Ssh, Data};
decompress(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh, Data) ->
Decompressed = zlib:inflate(Context, Data),
+ {Ssh, list_to_binary(Decompressed)};
+decompress(#ssh{decompress = '[email protected]', authenticated = false} = Ssh, Data) ->
+ {Ssh, Data};
+decompress(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh, Data) ->
+ Decompressed = zlib:inflate(Context, Data),
{Ssh, list_to_binary(Decompressed)}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl
index 93029c5038..0aa60624bf 100644
--- a/lib/ssh/test/ssh_basic_SUITE.erl
+++ b/lib/ssh/test/ssh_basic_SUITE.erl
@@ -48,8 +48,8 @@ all() ->
close].
groups() ->
- [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]},
- {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]},
+ [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]},
+ {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]},
{dsa_pass_key, [], [pass_phrase]},
{rsa_pass_key, [], [pass_phrase]},
{internal_error, [], [internal_error]}
@@ -493,7 +493,24 @@ close(Config) when is_list(Config) ->
exit(CM, {shutdown, normal}),
ok = ssh:close(CM).
-
+
+openssh_zlib_basic_test() ->
+ [{doc, "Test basic connection with openssh_zlib"}].
+openssh_zlib_basic_test(Config) ->
+ SystemDir = filename:join(?config(priv_dir, Config), system),
+ UserDir = ?config(priv_dir, Config),
+
+ {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
+ {user_dir, UserDir},
+ {failfun, fun ssh_test_lib:failfun/2}]),
+ ConnectionRef =
+ ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true},
+ {user_dir, UserDir},
+ {user_interaction, false},
+ {compression, openssh_zlib}]),
+ ok = ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid).
+
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
diff --git a/lib/ssh/vsn.mk b/lib/ssh/vsn.mk
index 231779b75a..90f09471c9 100644
--- a/lib/ssh/vsn.mk
+++ b/lib/ssh/vsn.mk
@@ -1,5 +1,5 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
-SSH_VSN = 2.1.7
+SSH_VSN = 2.1.8
APP_VSN = "ssh-$(SSH_VSN)"
diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml
index 5db4bea654..692d7fd0e1 100644
--- a/lib/ssl/doc/src/notes.xml
+++ b/lib/ssl/doc/src/notes.xml
@@ -25,8 +25,69 @@
<file>notes.xml</file>
</header>
<p>This document describes the changes made to the SSL application.</p>
-
- <section><title>SSL 5.3</title>
+ <section><title>SSL 5.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Setopts during renegotiation caused the renegotiation to
+ be unsuccessful.</p>
+ <p>
+ If calling setopts during a renegotiation the FSM state
+ might change during the handling of the setopts messages,
+ this is now handled correctly.</p>
+ <p>
+ Own Id: OTP-11228</p>
+ </item>
+ <item>
+ <p>
+ Now handles signature_algorithm field in digitally_signed
+ properly with proper defaults. Prior to this change some
+ elliptic curve cipher suites could fail reporting the
+ error "bad certificate".</p>
+ <p>
+ Own Id: OTP-11229</p>
+ </item>
+ <item>
+ <p>
+ The code emulating the inet header option was changed in
+ the belief that it made it inet compatible. However the
+ testing is a bit hairy as the inet option is actually
+ broken, now the tests are corrected and the header option
+ should work in the same broken way as inet again,
+ preferably use the bitsyntax instead.</p>
+ <p>
+ Own Id: OTP-11230</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Make the ssl manager name for erlang distribution over
+ SSL/TLS relative to the module name of the ssl_manager.</p>
+ <p>
+ This can be beneficial when making tools that rename
+ modules for internal processing in the tool.</p>
+ <p>
+ Own Id: OTP-11255</p>
+ </item>
+ <item>
+ <p>
+ Add documentation regarding log_alert option.</p>
+ <p>
+ Own Id: OTP-11271</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>SSL 5.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
@@ -100,7 +161,6 @@
</section>
<section><title>SSL 5.2.1</title>
-
<section><title>Improvements and New Features</title>
<list>
<item>
@@ -126,9 +186,20 @@
</section>
</section>
-
+<section><title>SSL 5.1.2.1</title>
+<section><title>Improvements and New Features</title>
+<list>
+ <item>
+ <p>
+ Make log_alert configurable as option in ssl, SSLLogLevel
+ added as option to inets conf file</p>
+ <p>
+ Own Id: OTP-11259</p>
+ </item>
+</list>
+</section>
+</section>
<section><title>SSL 5.2</title>
-
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index a836a0c5b6..44c5c1f872 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -86,7 +86,8 @@
{user_lookup_fun, {fun(), term()}}, {psk_identity, string()}, {srp_identity, {string(), string()}} |
{ssl_imp, ssl_imp()} | {reuse_sessions, boolean()} | {reuse_session, fun()}
{next_protocols_advertised, [binary()]} |
- {client_preferred_next_protocols, client | server, [binary()]}
+ {client_preferred_next_protocols, client | server, [binary()]} |
+ {log_alert, boolean()}
</c></p>
<p><c>transportoption() = {cb_info, {CallbackModule::atom(), DataTag::atom(), ClosedTag::atom(), ErrTag:atom()}}
@@ -446,7 +447,8 @@ fun(srp, Username :: string(), UserState :: term()) ->
<tag>{psk_identity, string()}</tag>
<item>Specifies the server identity hint the server presents to the client.
</item>
-
+ <tag>{log_alert, boolean()}</tag>
+ <item>If false, error reports will not be displayed.</item>
</taglist>
</section>
diff --git a/lib/ssl/src/Makefile b/lib/ssl/src/Makefile
index cf9f7d5001..6744e2f256 100644
--- a/lib/ssl/src/Makefile
+++ b/lib/ssl/src/Makefile
@@ -58,15 +58,18 @@ MODULES= \
ssl_connection_sup \
tls_handshake \
dtls_handshake\
+ ssl_handshake\
ssl_manager \
ssl_session \
ssl_session_cache \
ssl_socket \
tls_record \
dtls_record \
- ssl_ssl2 \
- ssl_ssl3 \
- ssl_tls1 \
+ ssl_record \
+ ssl_v2 \
+ ssl_v3 \
+ tls_v1 \
+ dtls_v1 \
ssl_tls_dist_proxy
INTERNAL_HRL_FILES = \
diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl
index ac2ee0d09f..fda488501c 100644
--- a/lib/ssl/src/dtls_connection.erl
+++ b/lib/ssl/src/dtls_connection.erl
@@ -17,3 +17,325 @@
%% %CopyrightEnd%
%%
-module(dtls_connection).
+
+%%-behaviour(gen_fsm).
+
+%% -include("dtls_handshake.hrl").
+%% -include("ssl_alert.hrl").
+%% -include("dtls_record.hrl").
+%% -include("ssl_cipher.hrl").
+%% -include("ssl_internal.hrl").
+%% -include("ssl_srp.hrl").
+%% -include_lib("public_key/include/public_key.hrl").
+
+
+%% %% Called by dtls_connection_sup
+%% %%-export([start_link/7]).
+
+%% %% gen_fsm callbacks
+%% -export([init/1, hello/2, certify/2, cipher/2,
+%% abbreviated/2, connection/2, handle_event/3,
+%% handle_sync_event/4, handle_info/3, terminate/3, code_change/4]).
+
+%% -record(message_sequences, {
+%% read = 0,
+%% write = 0
+%% }).
+
+%% -record(state, {
+%% role, % client | server
+%% user_application, % {MonitorRef, pid()}
+%% transport_cb, % atom() - callback module
+%% data_tag, % atom() - ex tcp.
+%% close_tag, % atom() - ex tcp_closed
+%% error_tag, % atom() - ex tcp_error
+%% host, % string() | ipadress()
+%% port, % integer()
+%% socket, % socket()
+%% ssl_options, % #ssl_options{}
+%% socket_options, % #socket_options{}
+%% connection_states, % #connection_states{} from ssl_record.hrl
+%% message_sequences = #message_sequences{},
+%% dtls_packets = [], % Not yet handled decode ssl/tls packets.
+%% dtls_record_buffer, % binary() buffer of incomplete records
+%% dtls_handshake_buffer, % binary() buffer of incomplete handshakes
+%% dtls_handshake_history, % tls_handshake_history()
+%% dtls_cipher_texts, % list() received but not deciphered yet
+%% cert_db, %
+%% session, % #session{} from tls_handshake.hrl
+%% session_cache, %
+%% session_cache_cb, %
+%% negotiated_version, % tls_version()
+%% client_certificate_requested = false,
+%% key_algorithm, % atom as defined by cipher_suite
+%% hashsign_algorithm, % atom as defined by cipher_suite
+%% public_key_info, % PKIX: {Algorithm, PublicKey, PublicKeyParams}
+%% private_key, % PKIX: #'RSAPrivateKey'{}
+%% diffie_hellman_params, % PKIX: #'DHParameter'{} relevant for server side
+%% diffie_hellman_keys, % {PublicKey, PrivateKey}
+%% psk_identity, % binary() - server psk identity hint
+%% srp_params, % #srp_user{}
+%% srp_keys, % {PublicKey, PrivateKey}
+%% premaster_secret, %
+%% file_ref_db, % ets()
+%% cert_db_ref, % ref()
+%% bytes_to_read, % integer(), # bytes to read in passive mode
+%% user_data_buffer, % binary()
+%% log_alert, % boolean()
+%% renegotiation, % {boolean(), From | internal | peer}
+%% start_or_recv_from, % "gen_fsm From"
+%% timer, % start_or_recv_timer
+%% send_queue, % queue()
+%% terminated = false, %
+%% allow_renegotiate = true,
+%% expecting_next_protocol_negotiation = false :: boolean(),
+%% next_protocol = undefined :: undefined | binary(),
+%% client_ecc, % {Curves, PointFmt}
+%% client_cookie = <<>>
+%% }).
+
+
+
+%% %%====================================================================
+%% %% Internal application API
+%% %%====================================================================
+
+
+%% %%====================================================================
+%% %% State functions
+%% %%====================================================================
+
+%% -spec hello(start | #hello_request{} | #client_hello{} | #server_hello{} | term(),
+%% #state{}) -> gen_fsm_state_return().
+%% %%--------------------------------------------------------------------
+%% hello(start, #state{host = Host, port = Port, role = client,
+%% ssl_options = SslOpts,
+%% session = #session{own_certificate = Cert} = Session0,
+%% session_cache = Cache, session_cache_cb = CacheCb,
+%% connection_states = ConnectionStates0,
+%% renegotiation = {Renegotiation, _},
+%% client_cookie = Cookie} = State0) ->
+%% Hello = dtls_handshake:client_hello(Host, Port, Cookie, ConnectionStates0, SslOpts,
+%% Cache, CacheCb, Renegotiation, Cert),
+
+%% Version = Hello#client_hello.client_version,
+%% State1 = State0#state{negotiated_version = Version, %% Requested version
+%% session =
+%% Session0#session{session_id = Hello#client_hello.session_id},
+%% dtls_handshake_history = ssl_handshake:init_handshake_history()},
+
+%% State2 = send_flight(Hello, waiting, State1),
+
+%% {Record, State} = next_record(State2),
+%% next_state(hello, hello, Record, State);
+
+%% hello(start, #state{role = server} = State0) ->
+%% {Record, State} = next_record(State0),
+%% next_state(hello, hello, Record, State);
+
+%% hello(#hello_request{}, #state{role = client} = State0) ->
+%% {Record, State} = next_record(State0),
+%% next_state(hello, hello, Record, State);
+
+%% hello(#server_hello{cipher_suite = CipherSuite,
+%% compression_method = Compression} = Hello,
+%% #state{session = #session{session_id = OldId},
+%% connection_states = ConnectionStates0,
+%% role = client,
+%% negotiated_version = ReqVersion,
+%% renegotiation = {Renegotiation, _},
+%% ssl_options = SslOptions} = State1) ->
+%% State0 = flight_done(State1),
+%% case ssl_handshake:hello(Hello, SslOptions, ConnectionStates0, Renegotiation) of
+%% #alert{} = Alert ->
+%% handle_own_alert(Alert, ReqVersion, hello, State0);
+%% {Version, NewId, ConnectionStates, NextProtocol} ->
+%% {KeyAlgorithm, _, _, _} =
+%% ssl_cipher:suite_definition(CipherSuite),
+
+%% PremasterSecret = make_premaster_secret(ReqVersion, KeyAlgorithm),
+
+%% NewNextProtocol = case NextProtocol of
+%% undefined ->
+%% State0#state.next_protocol;
+%% _ ->
+%% NextProtocol
+%% end,
+
+%% State = State0#state{key_algorithm = KeyAlgorithm,
+%% hashsign_algorithm = default_hashsign(Version, KeyAlgorithm),
+%% negotiated_version = Version,
+%% connection_states = ConnectionStates,
+%% premaster_secret = PremasterSecret,
+%% expecting_next_protocol_negotiation = NextProtocol =/= undefined,
+%% next_protocol = NewNextProtocol},
+
+%% case ssl_session:is_new(OldId, NewId) of
+%% true ->
+%% handle_new_session(NewId, CipherSuite, Compression,
+%% State#state{connection_states = ConnectionStates});
+%% false ->
+%% handle_resumed_session(NewId, State#state{connection_states = ConnectionStates})
+%% end
+%% end;
+
+%% hello(#hello_verify_request{cookie = Cookie},
+%% #state{host = Host, port = Port,
+%% session = #session{own_certificate = Cert},
+%% session_cache = Cache, session_cache_cb = CacheCb,
+%% ssl_options = SslOpts,
+%% connection_states = ConnectionStates0,
+%% renegotiation = {Renegotiation, _}} = State0) ->
+%% Hello = ssl_handshake:client_hello(Host, Port, Cookie, ConnectionStates0, SslOpts,
+%% Cache, CacheCb, Renegotiation, Cert),
+%% State1 = State0#state{
+%% tls_handshake_history = ssl_handshake:init_handshake_history(),
+%% client_cookie = Cookie},
+%% State2 = send_flight(Hello, waiting, State1),
+
+%% {Record, State} = next_record(State2),
+%% next_state(hello, hello, Record, State);
+
+%% hello(Hello = #client_hello{client_version = ClientVersion},
+%% State = #state{connection_states = ConnectionStates0,
+%% port = Port, session = #session{own_certificate = Cert} = Session0,
+%% renegotiation = {Renegotiation, _},
+%% session_cache = Cache,
+%% session_cache_cb = CacheCb,
+%% ssl_options = SslOpts}) ->
+%% case ssl_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb,
+%% ConnectionStates0, Cert}, Renegotiation) of
+%% {Version, {Type, Session}, ConnectionStates, ProtocolsToAdvertise,
+%% EcPointFormats, EllipticCurves} ->
+%% do_server_hello(Type, ProtocolsToAdvertise,
+%% EcPointFormats, EllipticCurves,
+%% State#state{connection_states = ConnectionStates,
+%% negotiated_version = Version,
+%% session = Session,
+%% client_ecc = {EllipticCurves, EcPointFormats}});
+%% #alert{} = Alert ->
+%% handle_own_alert(Alert, ClientVersion, hello, State)
+%% end;
+
+%% hello(timeout, State) ->
+%% { next_state, hello, State, hibernate };
+
+%% hello(Msg, State) ->
+%% handle_unexpected_message(Msg, hello, State).
+%% %%--------------------------------------------------------------------
+%% -spec abbreviated(#hello_request{} | #finished{} | term(),
+%% #state{}) -> gen_fsm_state_return().
+%% %%--------------------------------------------------------------------
+
+%% abbreviated(timeout, State) ->
+%% { next_state, abbreviated, State, hibernate };
+
+%% abbreviated(Msg, State) ->
+%% handle_unexpected_message(Msg, abbreviated, State).
+
+%% %%--------------------------------------------------------------------
+%% -spec certify(#hello_request{} | #certificate{} | #server_key_exchange{} |
+%% #certificate_request{} | #server_hello_done{} | #client_key_exchange{} | term(),
+%% #state{}) -> gen_fsm_state_return().
+%% %%--------------------------------------------------------------------
+
+
+%% certify(timeout, State) ->
+%% { next_state, certify, State, hibernate };
+
+%% certify(Msg, State) ->
+%% handle_unexpected_message(Msg, certify, State).
+
+
+%% %%--------------------------------------------------------------------
+%% -spec cipher(#hello_request{} | #certificate_verify{} | #finished{} | term(),
+%% #state{}) -> gen_fsm_state_return().
+%% %%--------------------------------------------------------------------
+
+%% cipher(timeout, State) ->
+%% { next_state, cipher, State, hibernate };
+
+%% cipher(Msg, State) ->
+%% handle_unexpected_message(Msg, cipher, State).
+
+%% %%--------------------------------------------------------------------
+%% -spec connection(#hello_request{} | #client_hello{} | term(),
+%% #state{}) -> gen_fsm_state_return().
+%% %%--------------------------------------------------------------------
+
+%% connection(timeout, State) ->
+%% {next_state, connection, State, hibernate};
+
+%% connection(Msg, State) ->
+%% handle_unexpected_message(Msg, connection, State).
+
+%% %%--------------------------------------------------------------------
+%% %%% Internal functions
+%% %%--------------------------------------------------------------------
+%% handle_unexpected_message(Msg, Info, #state{negotiated_version = Version} = State) ->
+%% Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE),
+%% handle_own_alert(Alert, Version, {Info, Msg}, State).
+
+%% send_flight(HandshakeRec, FlightState, State) ->
+%% send_flight(FlightState, buffer_flight(HandshakeRec, State)).
+
+%% send_flight(FlightState, State = #state{negotiated_version = Version,
+%% flight_buffer = Buffer}) ->
+
+%% State1 = do_send_flight(queue:to_list(Buffer), [], State),
+%% finish_send_flight(Version, FlightState, State1).
+
+%% resend_flight(State = #state{negotiated_version = Version,
+%% flight_state = FlightState,
+%% flight_buffer = Buffer})
+%% when FlightState == finished; FlightState == waiting ->
+%% State1 = do_send_flight(queue:to_list(Buffer), [], State),
+%% finish_send_flight(Version, FlightState, State1);
+
+%% resend_flight(State) ->
+%% State.
+
+%% flight_done(State) ->
+%% cancel_dtls_retransmit_timer(State#state{flight_state = done,
+%% flight_buffer = undefined}).
+
+%% do_send_flight([], BinMsgs, State = #state{transport_cb = Transport, socket = Socket}) ->
+%% Transport:send(Socket, lists:reverse(BinMsgs)),
+%% State;
+%% do_send_flight([{Epoch, MsgSeq, HandshakeRec}|T], BinMsgs0,
+%% State = #state{negotiated_version = Version,
+%% connection_states = ConnectionStates0}) ->
+%% CS0 = ssl_record:connection_state_by_epoch(ConnectionStates0, Epoch, write),
+%% {BinMsgs, CS1} = encode_handshake_rec(HandshakeRec, Version, MsgSeq, BinMsgs0, CS0),
+%% ConnectionStates1 = ssl_record:set_connection_state_by_epoch(ConnectionStates0, CS1, write),
+%% do_send_flight(T, BinMsgs, State#state{connection_states = ConnectionStates1}).
+
+%% cancel_dtls_retransmit_timer(State = #state{dtls_retransmit_timer = TimerRef}) ->
+%% cancel_timer(TimerRef),
+%% State#state{dtls_retransmit_timer = undefined}.
+
+%% rearm_dtls_retransmit_timer(State = #state{dtls_retransmit_timer = undefined}) ->
+%% TimerRef = erlang:start_timer(1000, self(), dtls_retransmit),
+%% State#state{dtls_retransmit_timer = TimerRef};
+%% rearm_dtls_retransmit_timer(State) ->
+%% State.
+
+%% finish_send_flight({254, _}, waiting, State) ->
+%% TimerRef = erlang:start_timer(1000, self(), dtls_retransmit),
+%% State#state{
+%% dtls_retransmit_timer = TimerRef,
+%% last_retransmit = timestamp(),
+%% flight_state = waiting};
+
+%% finish_send_flight(_, FlightState, State) ->
+%% State#state{flight_state = FlightState}.
+
+%% timestamp() ->
+%% {Mega, Sec, Micro} = erlang:now(),
+%% Mega * 1000000 * 1000 + Sec * 1000 + (Micro div 1000).
+
+%% encode_handshake_rec(HandshakeRec, Version, MsgSeq, BinMsgs0, CS0) ->
+%% {_, Fragments} = ssl_handshake:encode_handshake(HandshakeRec, Version, MsgSeq, 1400),
+%% lists:foldl(fun(F, {Bin, C0}) ->
+%% {B, C1} = ssl_record:encode_handshake(F, Version, C0),
+%% {[B|Bin], C1} end, {BinMsgs0, CS0}, Fragments).
diff --git a/lib/ssl/src/dtls_handshake.erl b/lib/ssl/src/dtls_handshake.erl
index b25daa59d9..26e8ce7503 100644
--- a/lib/ssl/src/dtls_handshake.erl
+++ b/lib/ssl/src/dtls_handshake.erl
@@ -16,3 +16,413 @@
%%
%% %CopyrightEnd%
-module(dtls_handshake).
+
+-include("dtls_handshake.hrl").
+-include("dtls_record.hrl").
+-include("ssl_internal.hrl").
+
+-export([client_hello/9, hello/3, get_dtls_handshake/2,
+ dtls_handshake_new_flight/1, dtls_handshake_new_epoch/1,
+ encode_handshake/4]).
+
+%%====================================================================
+%% Internal application API
+%%====================================================================
+
+%%--------------------------------------------------------------------
+-spec client_hello(host(), inet:port_number(), term(), #connection_states{},
+ #ssl_options{}, integer(), atom(), boolean(), der_cert()) ->
+ #client_hello{}.
+%%
+%% Description: Creates a client hello message.
+%%--------------------------------------------------------------------
+client_hello(Host, Port, Cookie, ConnectionStates,
+ #ssl_options{versions = Versions,
+ ciphers = UserSuites
+ } = SslOpts,
+ Cache, CacheCb, Renegotiation, OwnCert) ->
+ Version = dtls_record:highest_protocol_version(Versions),
+ Pending = ssl_record:pending_connection_state(ConnectionStates, read),
+ SecParams = Pending#connection_state.security_parameters,
+ CipherSuites = ssl_handshake:available_suites(UserSuites, Version),
+
+ Extensions = ssl_handshake:client_hello_extensions(Version, CipherSuites,
+ SslOpts, ConnectionStates, Renegotiation),
+
+ Id = ssl_session:client_id({Host, Port, SslOpts}, Cache, CacheCb, OwnCert),
+
+ #client_hello{session_id = Id,
+ client_version = Version,
+ cipher_suites = ssl_handshake:cipher_suites(CipherSuites, Renegotiation),
+ compression_methods = ssl_record:compressions(),
+ random = SecParams#security_parameters.client_random,
+ cookie = Cookie,
+ extensions = Extensions
+ }.
+
+hello(Address, Port,
+ #ssl_tls{epoch = _Epoch, record_seq = _Seq,
+ version = Version} = Record) ->
+ {[{Hello, _}], _, _} =
+ get_dtls_handshake(Record,
+ dtls_handshake_new_flight(undefined)),
+ #client_hello{client_version = {Major, Minor},
+ random = Random,
+ session_id = SessionId,
+ cipher_suites = CipherSuites,
+ compression_methods = CompressionMethods} = Hello,
+ CookieData = [address_to_bin(Address, Port),
+ <<?BYTE(Major), ?BYTE(Minor)>>,
+ Random, SessionId, CipherSuites, CompressionMethods],
+ Cookie = crypto:hmac(sha, <<"secret">>, CookieData),
+
+ case Hello of
+ #client_hello{cookie = Cookie} ->
+ accept;
+ _ ->
+ %% generate HelloVerifyRequest
+ HelloVerifyRequest = encode_handshake(#hello_verify_request{protocol_version = Version,
+ cookie = Cookie},
+ Version, 0, 1400),
+ {reply, HelloVerifyRequest}
+ end.
+
+address_to_bin({A,B,C,D}, Port) ->
+ <<0:80,16#ffff:16,A,B,C,D,Port:16>>;
+address_to_bin({A,B,C,D,E,F,G,H}, Port) ->
+ <<A:16,B:16,C:16,D:16,E:16,F:16,G:16,H:16,Port:16>>.
+
+%%--------------------------------------------------------------------
+encode_handshake(Package, Version, MsgSeq, Mss) ->
+ {MsgType, Bin} = enc_hs(Package, Version),
+ Len = byte_size(Bin),
+ HsHistory = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(0), ?uint24(Len), Bin],
+ BinMsg = dtls_split_handshake(Mss, MsgType, Len, MsgSeq, Bin, 0, []),
+ {HsHistory, BinMsg}.
+
+%--------------------------------------------------------------------
+-spec get_dtls_handshake(#ssl_tls{}, #dtls_hs_state{} | binary()) ->
+ {[dtls_handshake()], #ssl_tls{}}.
+%
+% Description: Given a DTLS state and new data from ssl_record, collects
+% and returns it as a list of handshake messages, also returns a new
+% DTLS state
+%--------------------------------------------------------------------
+% get_dtls_handshake(Record, <<>>) ->
+% get_dtls_handshake_aux(Record, dtls_hs_state_init());
+get_dtls_handshake(Record, HsState) ->
+ get_dtls_handshake_aux(Record, HsState).
+
+%--------------------------------------------------------------------
+-spec dtls_handshake_new_epoch(#dtls_hs_state{}) -> #dtls_hs_state{}.
+%
+% Description: Reset the DTLS decoder state for a new Epoch
+%--------------------------------------------------------------------
+% dtls_handshake_new_epoch(<<>>) ->
+% dtls_hs_state_init();
+dtls_handshake_new_epoch(HsState) ->
+ HsState#dtls_hs_state{highest_record_seq = 0,
+ starting_read_seq = HsState#dtls_hs_state.current_read_seq,
+ fragments = gb_trees:empty(), completed = []}.
+
+%--------------------------------------------------------------------
+-spec dtls_handshake_new_flight(integer() | undefined) -> #dtls_hs_state{}.
+%
+% Description: Init the DTLS decoder state for a new Flight
+dtls_handshake_new_flight(ExpectedReadReq) ->
+ #dtls_hs_state{current_read_seq = ExpectedReadReq,
+ highest_record_seq = 0,
+ starting_read_seq = 0,
+ fragments = gb_trees:empty(), completed = []}.
+
+%%--------------------------------------------------------------------
+%%% Internal functions
+%%--------------------------------------------------------------------
+
+dtls_split_handshake(Mss, MsgType, Len, MsgSeq, Bin, Offset, Acc)
+ when byte_size(Bin) + 12 < Mss ->
+ FragmentLen = byte_size(Bin),
+ BinMsg = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragmentLen), Bin],
+ lists:reverse([BinMsg|Acc]);
+dtls_split_handshake(Mss, MsgType, Len, MsgSeq, Bin, Offset, Acc) ->
+ FragmentLen = Mss - 12,
+ <<Fragment:FragmentLen/bytes, Rest/binary>> = Bin,
+ BinMsg = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragmentLen), Fragment],
+ dtls_split_handshake(Mss, MsgType, Len, MsgSeq, Rest, Offset + FragmentLen, [BinMsg|Acc]).
+
+get_dtls_handshake_aux(#ssl_tls{version = Version,
+ record_seq = SeqNo,
+ fragment = Data}, HsState) ->
+ get_dtls_handshake_aux(Version, SeqNo, Data, HsState).
+
+get_dtls_handshake_aux(Version, SeqNo,
+ <<?BYTE(Type), ?UINT24(Length),
+ ?UINT16(MessageSeq),
+ ?UINT24(FragmentOffset), ?UINT24(FragmentLength),
+ Body:FragmentLength/binary, Rest/binary>>,
+ HsState0) ->
+ case reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq,
+ FragmentOffset, FragmentLength,
+ Body, HsState0) of
+ {retransmit, HsState1} ->
+ case Rest of
+ <<>> ->
+ {retransmit, HsState1};
+ _ ->
+ get_dtls_handshake_aux(Version, SeqNo, Rest, HsState1)
+ end;
+ {HsState1, HighestSeqNo, MsgBody} ->
+ HsState2 = dec_dtls_fragment(Version, HighestSeqNo, Type, Length, MessageSeq, MsgBody, HsState1),
+ HsState3 = process_dtls_fragments(Version, HsState2),
+ get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3);
+ HsState2 ->
+ HsState3 = process_dtls_fragments(Version, HsState2),
+ get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3)
+ end;
+
+get_dtls_handshake_aux(_Version, _SeqNo, <<>>, HsState) ->
+ {lists:reverse(HsState#dtls_hs_state.completed),
+ HsState#dtls_hs_state.highest_record_seq,
+ HsState#dtls_hs_state{completed = []}}.
+
+dec_dtls_fragment(Version, SeqNo, Type, Length, MessageSeq, MsgBody,
+ HsState = #dtls_hs_state{highest_record_seq = HighestSeqNo, completed = Acc}) ->
+ Raw = <<?BYTE(Type), ?UINT24(Length), ?UINT16(MessageSeq), ?UINT24(0), ?UINT24(Length), MsgBody/binary>>,
+ H = decode_handshake(Version, Type, MsgBody),
+ HsState#dtls_hs_state{completed = [{H,Raw}|Acc], highest_record_seq = erlang:max(HighestSeqNo, SeqNo)}.
+
+process_dtls_fragments(Version,
+ HsState0 = #dtls_hs_state{current_read_seq = CurrentReadSeq,
+ fragments = Fragments0}) ->
+ case gb_trees:is_empty(Fragments0) of
+ true ->
+ HsState0;
+ _ ->
+ case gb_trees:smallest(Fragments0) of
+ {CurrentReadSeq, {SeqNo, Type, Length, CurrentReadSeq, {Length, [{0, Length}], MsgBody}}} ->
+ HsState1 = dtls_hs_state_process_seq(HsState0),
+ HsState2 = dec_dtls_fragment(Version, SeqNo, Type, Length, CurrentReadSeq, MsgBody, HsState1),
+ process_dtls_fragments(Version, HsState2);
+ _ ->
+ HsState0
+ end
+ end.
+
+dtls_hs_state_process_seq(HsState0 = #dtls_hs_state{current_read_seq = CurrentReadSeq,
+ fragments = Fragments0}) ->
+ Fragments1 = gb_trees:delete_any(CurrentReadSeq, Fragments0),
+ HsState0#dtls_hs_state{current_read_seq = CurrentReadSeq + 1,
+ fragments = Fragments1}.
+
+dtls_hs_state_add_fragment(MessageSeq, Fragment, HsState0 = #dtls_hs_state{fragments = Fragments0}) ->
+ Fragments1 = gb_trees:enter(MessageSeq, Fragment, Fragments0),
+ HsState0#dtls_hs_state{fragments = Fragments1}.
+
+reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq, 0, Length,
+ Body, HsState0 = #dtls_hs_state{current_read_seq = undefined})
+ when Type == ?CLIENT_HELLO;
+ Type == ?SERVER_HELLO;
+ Type == ?HELLO_VERIFY_REQUEST ->
+ %% First message, should be client hello
+ %% return the current message and set the next expected Sequence
+ %%
+ %% Note: this could (should?) be restricted further, ClientHello and
+ %% HelloVerifyRequest have to have message_seq = 0, ServerHello
+ %% can have a message_seq of 0 or 1
+ %%
+ {HsState0#dtls_hs_state{current_read_seq = MessageSeq + 1}, SeqNo, Body};
+
+reassemble_dtls_fragment(_SeqNo, _Type, Length, _MessageSeq, _, Length,
+ _Body, HsState = #dtls_hs_state{current_read_seq = undefined}) ->
+ %% not what we expected, drop it
+ HsState;
+
+reassemble_dtls_fragment(SeqNo, _Type, Length, MessageSeq, 0, Length,
+ Body, HsState0 =
+ #dtls_hs_state{starting_read_seq = StartingReadSeq})
+ when MessageSeq < StartingReadSeq ->
+ %% this has to be the start of a new flight, let it through
+ %%
+ %% Note: this could (should?) be restricted further, the first message of a
+ %% new flight has to have message_seq = 0
+ %%
+ HsState = dtls_hs_state_process_seq(HsState0),
+ {HsState, SeqNo, Body};
+
+reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, 0, Length,
+ _Body, HsState =
+ #dtls_hs_state{current_read_seq = CurrentReadSeq})
+ when MessageSeq < CurrentReadSeq ->
+ {retransmit, HsState};
+
+reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, 0, Length,
+ _Body, HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq})
+ when MessageSeq < CurrentReadSeq ->
+ HsState;
+
+reassemble_dtls_fragment(SeqNo, _Type, Length, MessageSeq, 0, Length,
+ Body, HsState0 = #dtls_hs_state{current_read_seq = MessageSeq}) ->
+ %% Message fully contained and it's the current seq
+ HsState1 = dtls_hs_state_process_seq(HsState0),
+ {HsState1, SeqNo, Body};
+
+reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq, 0, Length,
+ Body, HsState) ->
+ %% Message fully contained and it's the NOT the current seq -> buffer
+ Fragment = {SeqNo, Type, Length, MessageSeq,
+ dtls_fragment_init(Length, 0, Length, Body)},
+ dtls_hs_state_add_fragment(MessageSeq, Fragment, HsState);
+
+reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, FragmentOffset, FragmentLength,
+ _Body,
+ HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq})
+ when FragmentOffset + FragmentLength == Length andalso MessageSeq == (CurrentReadSeq - 1) ->
+ {retransmit, HsState};
+
+reassemble_dtls_fragment(_SeqNo, _Type, _Length, MessageSeq, _FragmentOffset, _FragmentLength,
+ _Body,
+ HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq})
+ when MessageSeq < CurrentReadSeq ->
+ HsState;
+
+reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq,
+ FragmentOffset, FragmentLength,
+ Body,
+ HsState = #dtls_hs_state{fragments = Fragments0}) ->
+ case gb_trees:lookup(MessageSeq, Fragments0) of
+ {value, Fragment} ->
+ dtls_fragment_reassemble(SeqNo, Type, Length, MessageSeq,
+ FragmentOffset, FragmentLength,
+ Body, Fragment, HsState);
+ none ->
+ dtls_fragment_start(SeqNo, Type, Length, MessageSeq,
+ FragmentOffset, FragmentLength,
+ Body, HsState)
+ end.
+
+dtls_fragment_start(SeqNo, Type, Length, MessageSeq,
+ FragmentOffset, FragmentLength,
+ Body, HsState = #dtls_hs_state{fragments = Fragments0}) ->
+ Fragment = {SeqNo, Type, Length, MessageSeq,
+ dtls_fragment_init(Length, FragmentOffset, FragmentLength, Body)},
+ Fragments1 = gb_trees:insert(MessageSeq, Fragment, Fragments0),
+ HsState#dtls_hs_state{fragments = Fragments1}.
+
+dtls_fragment_reassemble(SeqNo, Type, Length, MessageSeq,
+ FragmentOffset, FragmentLength,
+ Body,
+ {LastSeqNo, Type, Length, MessageSeq, FragBuffer0},
+ HsState = #dtls_hs_state{fragments = Fragments0}) ->
+ FragBuffer1 = dtls_fragment_add(FragBuffer0, FragmentOffset, FragmentLength, Body),
+ Fragment = {erlang:max(SeqNo, LastSeqNo), Type, Length, MessageSeq, FragBuffer1},
+ Fragments1 = gb_trees:enter(MessageSeq, Fragment, Fragments0),
+ HsState#dtls_hs_state{fragments = Fragments1};
+
+%% Type, Length or Seq mismatch, drop everything...
+%% Note: the RFC is not clear on how to handle this...
+dtls_fragment_reassemble(_SeqNo, _Type, _Length, MessageSeq,
+ _FragmentOffset, _FragmentLength, _Body, _Fragment,
+ HsState = #dtls_hs_state{fragments = Fragments0}) ->
+ Fragments1 = gb_trees:delete_any(MessageSeq, Fragments0),
+ HsState#dtls_hs_state{fragments = Fragments1}.
+
+dtls_fragment_add({Length, FragmentList0, Bin0}, FragmentOffset, FragmentLength, Body) ->
+ Bin1 = dtls_fragment_bin_add(FragmentOffset, FragmentLength, Body, Bin0),
+ FragmentList1 = add_fragment(FragmentList0, {FragmentOffset, FragmentLength}),
+ {Length, FragmentList1, Bin1}.
+
+dtls_fragment_init(Length, 0, Length, Body) ->
+ {Length, [{0, Length}], Body};
+dtls_fragment_init(Length, FragmentOffset, FragmentLength, Body) ->
+ Bin = dtls_fragment_bin_add(FragmentOffset, FragmentLength, Body, <<0:(Length*8)>>),
+ {Length, [{FragmentOffset, FragmentLength}], Bin}.
+
+dtls_fragment_bin_add(FragmentOffset, FragmentLength, Add, Buffer) ->
+ <<First:FragmentOffset/bytes, _:FragmentLength/bytes, Rest/binary>> = Buffer,
+ <<First/binary, Add/binary, Rest/binary>>.
+
+merge_fragment_list([], Fragment, Acc) ->
+ lists:reverse([Fragment|Acc]);
+
+merge_fragment_list([H = {_, HEnd}|Rest], Frag = {FStart, _}, Acc)
+ when FStart > HEnd ->
+ merge_fragment_list(Rest, Frag, [H|Acc]);
+
+merge_fragment_list(Rest = [{HStart, _HEnd}|_], Frag = {_FStart, FEnd}, Acc)
+ when FEnd < HStart ->
+ lists:reverse(Acc) ++ [Frag|Rest];
+
+merge_fragment_list([{HStart, HEnd}|Rest], _Frag = {FStart, FEnd}, Acc)
+ when
+ FStart =< HEnd orelse FEnd >= HStart ->
+ Start = erlang:min(HStart, FStart),
+ End = erlang:max(HEnd, FEnd),
+ NewFrag = {Start, End},
+ merge_fragment_list(Rest, NewFrag, Acc).
+
+add_fragment(List, {FragmentOffset, FragmentLength}) ->
+ merge_fragment_list(List, {FragmentOffset, FragmentOffset + FragmentLength}, []).
+
+enc_hs(#hello_verify_request{protocol_version = {Major, Minor},
+ cookie = Cookie}, _Version) ->
+ CookieLength = byte_size(Cookie),
+ {?HELLO_VERIFY_REQUEST, <<?BYTE(Major), ?BYTE(Minor),
+ ?BYTE(CookieLength),
+ Cookie/binary>>};
+
+enc_hs(#client_hello{client_version = {Major, Minor},
+ random = Random,
+ session_id = SessionID,
+ cookie = Cookie,
+ cipher_suites = CipherSuites,
+ compression_methods = CompMethods,
+ extensions = HelloExtensions}, Version) ->
+ SIDLength = byte_size(SessionID),
+ BinCookie = enc_client_hello_cookie(Version, Cookie),
+ BinCompMethods = list_to_binary(CompMethods),
+ CmLength = byte_size(BinCompMethods),
+ BinCipherSuites = list_to_binary(CipherSuites),
+ CsLength = byte_size(BinCipherSuites),
+ ExtensionsBin = ssl_handshake:encode_hello_extensions(HelloExtensions),
+
+ {?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
+ ?BYTE(SIDLength), SessionID/binary,
+ BinCookie/binary,
+ ?UINT16(CsLength), BinCipherSuites/binary,
+ ?BYTE(CmLength), BinCompMethods/binary, ExtensionsBin/binary>>};
+enc_hs(HandshakeMsg, Version) ->
+ ssl_handshake:encode_handshake(HandshakeMsg, Version).
+
+enc_client_hello_cookie(_, <<>>) ->
+ <<>>;
+enc_client_hello_cookie(_, Cookie) ->
+ CookieLength = byte_size(Cookie),
+ <<?BYTE(CookieLength), Cookie/binary>>.
+
+decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
+ ?BYTE(SID_length), Session_ID:SID_length/binary,
+ ?BYTE(Cookie_length), Cookie:Cookie_length/binary,
+ ?UINT16(Cs_length), CipherSuites:Cs_length/binary,
+ ?BYTE(Cm_length), Comp_methods:Cm_length/binary,
+ Extensions/binary>>) ->
+
+ DecodedExtensions = ssl_handshake:decode_hello_extensions(Extensions),
+
+ #client_hello{
+ client_version = {Major,Minor},
+ random = Random,
+ session_id = Session_ID,
+ cookie = Cookie,
+ cipher_suites = ssl_handshake:decode_suites('2_bytes', CipherSuites),
+ compression_methods = Comp_methods,
+ extensions = DecodedExtensions
+ };
+
+decode_handshake(_Version, ?HELLO_VERIFY_REQUEST, <<?BYTE(Major), ?BYTE(Minor),
+ ?BYTE(CookieLength), Cookie:CookieLength/binary>>) ->
+
+ #hello_verify_request{
+ protocol_version = {Major,Minor},
+ cookie = Cookie};
+decode_handshake(Version, Tag, Msg) ->
+ ssl_handshake:decode_handshake(Version, Tag, Msg).
diff --git a/lib/ssl/src/dtls_handshake.hrl b/lib/ssl/src/dtls_handshake.hrl
index db7b8596ae..5bdf45f627 100644
--- a/lib/ssl/src/dtls_handshake.hrl
+++ b/lib/ssl/src/dtls_handshake.hrl
@@ -27,6 +27,8 @@
-include("ssl_handshake.hrl"). %% Common TLS and DTLS records and Constantes
+-define(HELLO_VERIFY_REQUEST, 3).
+
-record(client_hello, {
client_version,
random,
@@ -35,16 +37,22 @@
cipher_suites, % cipher_suites<2..2^16-1>
compression_methods, % compression_methods<1..2^8-1>,
%% Extensions
- renegotiation_info,
- hash_signs, % supported combinations of hashes/signature algos
- next_protocol_negotiation = undefined % [binary()]
+ extensions
}).
--record(hello_verify_request {
+-record(hello_verify_request, {
protocol_version,
cookie
}).
--define(HELLO_VERIFY_REQUEST, 3).
+-record(dtls_hs_state,
+ {current_read_seq,
+ starting_read_seq,
+ highest_record_seq,
+ fragments,
+ completed
+ }).
+
+-type dtls_handshake() :: #client_hello{} | #hello_verify_request{} | ssl_handshake().
-endif. % -ifdef(dtls_handshake).
diff --git a/lib/ssl/src/dtls_record.erl b/lib/ssl/src/dtls_record.erl
index 2469a7d26c..f667458a10 100644
--- a/lib/ssl/src/dtls_record.erl
+++ b/lib/ssl/src/dtls_record.erl
@@ -15,4 +15,370 @@
%% under the License.
%%
%% %CopyrightEnd%
+
+%%
+%%----------------------------------------------------------------------
+%% Purpose: Handle DTLS record protocol. (Parts that are not shared with SSL/TLS)
+%%----------------------------------------------------------------------
-module(dtls_record).
+
+-include("dtls_record.hrl").
+-include("ssl_internal.hrl").
+-include("ssl_alert.hrl").
+-include("dtls_handshake.hrl").
+-include("ssl_cipher.hrl").
+
+%% Handling of incoming data
+-export([get_dtls_records/2]).
+
+%% Decoding
+-export([decode_cipher_text/2]).
+
+%% Encoding
+-export([encode_plain_text/4]).
+
+%% Protocol version handling
+-export([protocol_version/1, lowest_protocol_version/2,
+ highest_protocol_version/1, supported_protocol_versions/0,
+ is_acceptable_version/2, cipher/4, decipher/2]).
+
+-export([init_connection_state_seq/2, current_connection_state_epoch/2,
+ set_connection_state_by_epoch/3, connection_state_by_epoch/3]).
+
+-compile(inline).
+
+%%====================================================================
+%% Internal application API
+%%====================================================================
+
+%%--------------------------------------------------------------------
+-spec get_dtls_records(binary(), binary()) -> {[binary()], binary()} | #alert{}.
+%%
+%% Description: Given old buffer and new data from UDP/SCTP, packs up a records
+%% and returns it as a list of tls_compressed binaries also returns leftover
+%% data
+%%--------------------------------------------------------------------
+get_dtls_records(Data, <<>>) ->
+ get_dtls_records_aux(Data, []);
+get_dtls_records(Data, Buffer) ->
+ get_dtls_records_aux(list_to_binary([Buffer, Data]), []).
+
+get_dtls_records_aux(<<?BYTE(?APPLICATION_DATA),?BYTE(MajVer),?BYTE(MinVer),
+ ?UINT16(Epoch), ?UINT48(SequenceNumber),
+ ?UINT16(Length), Data:Length/binary, Rest/binary>>,
+ Acc) ->
+ get_dtls_records_aux(Rest, [#ssl_tls{type = ?APPLICATION_DATA,
+ version = {MajVer, MinVer},
+ epoch = Epoch, record_seq = SequenceNumber,
+ fragment = Data} | Acc]);
+get_dtls_records_aux(<<?BYTE(?HANDSHAKE),?BYTE(MajVer),?BYTE(MinVer),
+ ?UINT16(Epoch), ?UINT48(SequenceNumber),
+ ?UINT16(Length),
+ Data:Length/binary, Rest/binary>>, Acc) when MajVer >= 128 ->
+ get_dtls_records_aux(Rest, [#ssl_tls{type = ?HANDSHAKE,
+ version = {MajVer, MinVer},
+ epoch = Epoch, record_seq = SequenceNumber,
+ fragment = Data} | Acc]);
+get_dtls_records_aux(<<?BYTE(?ALERT),?BYTE(MajVer),?BYTE(MinVer),
+ ?UINT16(Epoch), ?UINT48(SequenceNumber),
+ ?UINT16(Length), Data:Length/binary,
+ Rest/binary>>, Acc) ->
+ get_dtls_records_aux(Rest, [#ssl_tls{type = ?ALERT,
+ version = {MajVer, MinVer},
+ epoch = Epoch, record_seq = SequenceNumber,
+ fragment = Data} | Acc]);
+get_dtls_records_aux(<<?BYTE(?CHANGE_CIPHER_SPEC),?BYTE(MajVer),?BYTE(MinVer),
+ ?UINT16(Epoch), ?UINT48(SequenceNumber),
+ ?UINT16(Length), Data:Length/binary, Rest/binary>>,
+ Acc) ->
+ get_dtls_records_aux(Rest, [#ssl_tls{type = ?CHANGE_CIPHER_SPEC,
+ version = {MajVer, MinVer},
+ epoch = Epoch, record_seq = SequenceNumber,
+ fragment = Data} | Acc]);
+
+get_dtls_records_aux(<<0:1, _CT:7, ?BYTE(_MajVer), ?BYTE(_MinVer),
+ ?UINT16(Length), _/binary>>,
+ _Acc) when Length > ?MAX_CIPHER_TEXT_LENGTH ->
+ ?ALERT_REC(?FATAL, ?RECORD_OVERFLOW);
+
+get_dtls_records_aux(<<1:1, Length0:15, _/binary>>,_Acc)
+ when Length0 > ?MAX_CIPHER_TEXT_LENGTH ->
+ ?ALERT_REC(?FATAL, ?RECORD_OVERFLOW);
+
+get_dtls_records_aux(Data, Acc) ->
+ case size(Data) =< ?MAX_CIPHER_TEXT_LENGTH + ?INITIAL_BYTES of
+ true ->
+ {lists:reverse(Acc), Data};
+ false ->
+ ?ALERT_REC(?FATAL, ?UNEXPECTED_MESSAGE)
+ end.
+
+encode_plain_text(Type, Version, Data,
+ #connection_state{
+ compression_state = CompS0,
+ epoch = Epoch,
+ sequence_number = Seq,
+ security_parameters=
+ #security_parameters{compression_algorithm = CompAlg}
+ }= CS0) ->
+ {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0),
+ CS1 = CS0#connection_state{compression_state = CompS1},
+ {CipherText, CS2} = cipher(Type, Version, Comp, CS1),
+ CTBin = encode_tls_cipher_text(Type, Version, Epoch, Seq, CipherText),
+ {CTBin, CS2}.
+
+decode_cipher_text(CipherText, ConnnectionStates0) ->
+ ReadState0 = ConnnectionStates0#connection_states.current_read,
+ #connection_state{compression_state = CompressionS0,
+ security_parameters = SecParams} = ReadState0,
+ CompressAlg = SecParams#security_parameters.compression_algorithm,
+ case decipher(CipherText, ReadState0) of
+ {Compressed, ReadState1} ->
+ {Plain, CompressionS1} = ssl_record:uncompress(CompressAlg,
+ Compressed, CompressionS0),
+ ConnnectionStates = ConnnectionStates0#connection_states{
+ current_read = ReadState1#connection_state{
+ compression_state = CompressionS1}},
+ {Plain, ConnnectionStates};
+ #alert{} = Alert ->
+ Alert
+ end.
+
+%%--------------------------------------------------------------------
+-spec protocol_version(tls_atom_version() | tls_version()) ->
+ tls_version() | tls_atom_version().
+%%
+%% Description: Creates a protocol version record from a version atom
+%% or vice versa.
+%%--------------------------------------------------------------------
+protocol_version('dtlsv1.2') ->
+ {254, 253};
+protocol_version(dtlsv1) ->
+ {254, 255};
+protocol_version({254, 253}) ->
+ 'dtlsv1.2';
+protocol_version({254, 255}) ->
+ dtlsv1.
+%%--------------------------------------------------------------------
+-spec lowest_protocol_version(tls_version(), tls_version()) -> tls_version().
+%%
+%% Description: Lowes protocol version of two given versions
+%%--------------------------------------------------------------------
+lowest_protocol_version(Version = {M, N}, {M, O}) when N > O ->
+ Version;
+lowest_protocol_version({M, _}, Version = {M, _}) ->
+ Version;
+lowest_protocol_version(Version = {M,_}, {N, _}) when M > N ->
+ Version;
+lowest_protocol_version(_,Version) ->
+ Version.
+%%--------------------------------------------------------------------
+-spec highest_protocol_version([tls_version()]) -> tls_version().
+%%
+%% Description: Highest protocol version present in a list
+%%--------------------------------------------------------------------
+highest_protocol_version([Ver | Vers]) ->
+ highest_protocol_version(Ver, Vers).
+
+highest_protocol_version(Version, []) ->
+ Version;
+highest_protocol_version(Version = {N, M}, [{N, O} | Rest]) when M < O ->
+ highest_protocol_version(Version, Rest);
+highest_protocol_version({M, _}, [Version = {M, _} | Rest]) ->
+ highest_protocol_version(Version, Rest);
+highest_protocol_version(Version = {M,_}, [{N,_} | Rest]) when M < N ->
+ highest_protocol_version(Version, Rest);
+highest_protocol_version(_, [Version | Rest]) ->
+ highest_protocol_version(Version, Rest).
+
+
+%%--------------------------------------------------------------------
+-spec supported_protocol_versions() -> [tls_version()].
+%%
+%% Description: Protocol versions supported
+%%--------------------------------------------------------------------
+supported_protocol_versions() ->
+ Fun = fun(Version) ->
+ protocol_version(Version)
+ end,
+ case application:get_env(ssl, dtls_protocol_version) of
+ undefined ->
+ lists:map(Fun, supported_protocol_versions([]));
+ {ok, []} ->
+ lists:map(Fun, supported_protocol_versions([]));
+ {ok, Vsns} when is_list(Vsns) ->
+ supported_protocol_versions(Vsns);
+ {ok, Vsn} ->
+ supported_protocol_versions([Vsn])
+ end.
+
+supported_protocol_versions([]) ->
+ Vsns = supported_connection_protocol_versions([]),
+ application:set_env(ssl, dtls_protocol_version, Vsns),
+ Vsns;
+
+supported_protocol_versions([_|_] = Vsns) ->
+ Vsns.
+
+supported_connection_protocol_versions([]) ->
+ ?ALL_DATAGRAM_SUPPORTED_VERSIONS.
+
+%%--------------------------------------------------------------------
+-spec is_acceptable_version(tls_version(), Supported :: [tls_version()]) -> boolean().
+%%
+%% Description: ssl version 2 is not acceptable security risks are too big.
+%%
+%%--------------------------------------------------------------------
+is_acceptable_version(Version, Versions) ->
+ lists:member(Version, Versions).
+
+
+%%--------------------------------------------------------------------
+-spec init_connection_state_seq(tls_version(), #connection_states{}) ->
+ #connection_state{}.
+%%
+%% Description: Copy the read sequence number to the write sequence number
+%% This is only valid for DTLS in the first client_hello
+%%--------------------------------------------------------------------
+init_connection_state_seq({254, _},
+ #connection_states{
+ current_read = Read = #connection_state{epoch = 0},
+ current_write = Write = #connection_state{epoch = 0}} = CS0) ->
+ CS0#connection_states{current_write =
+ Write#connection_state{
+ sequence_number = Read#connection_state.sequence_number}};
+init_connection_state_seq(_, CS) ->
+ CS.
+
+%%--------------------------------------------------------
+-spec current_connection_state_epoch(#connection_states{}, read | write) ->
+ integer().
+%%
+%% Description: Returns the epoch the connection_state record
+%% that is currently defined as the current conection state.
+%%--------------------------------------------------------------------
+current_connection_state_epoch(#connection_states{current_read = Current},
+ read) ->
+ Current#connection_state.epoch;
+current_connection_state_epoch(#connection_states{current_write = Current},
+ write) ->
+ Current#connection_state.epoch.
+
+%%--------------------------------------------------------------------
+
+-spec connection_state_by_epoch(#connection_states{}, integer(), read | write) ->
+ #connection_state{}.
+%%
+%% Description: Returns the instance of the connection_state record
+%% that is defined by the Epoch.
+%%--------------------------------------------------------------------
+connection_state_by_epoch(#connection_states{current_read = CS}, Epoch, read)
+ when CS#connection_state.epoch == Epoch ->
+ CS;
+connection_state_by_epoch(#connection_states{pending_read = CS}, Epoch, read)
+ when CS#connection_state.epoch == Epoch ->
+ CS;
+connection_state_by_epoch(#connection_states{current_write = CS}, Epoch, write)
+ when CS#connection_state.epoch == Epoch ->
+ CS;
+connection_state_by_epoch(#connection_states{pending_write = CS}, Epoch, write)
+ when CS#connection_state.epoch == Epoch ->
+ CS.
+%%--------------------------------------------------------------------
+-spec set_connection_state_by_epoch(#connection_states{},
+ #connection_state{}, read | write) -> ok.
+%%
+%% Description: Returns the instance of the connection_state record
+%% that is defined by the Epoch.
+%%--------------------------------------------------------------------
+set_connection_state_by_epoch(ConnectionStates0 =
+ #connection_states{current_read = CS},
+ NewCS = #connection_state{epoch = Epoch}, read)
+ when CS#connection_state.epoch == Epoch ->
+ ConnectionStates0#connection_states{current_read = NewCS};
+
+set_connection_state_by_epoch(ConnectionStates0 =
+ #connection_states{pending_read = CS},
+ NewCS = #connection_state{epoch = Epoch}, read)
+ when CS#connection_state.epoch == Epoch ->
+ ConnectionStates0#connection_states{pending_read = NewCS};
+
+set_connection_state_by_epoch(ConnectionStates0 =
+ #connection_states{current_write = CS},
+ NewCS = #connection_state{epoch = Epoch}, write)
+ when CS#connection_state.epoch == Epoch ->
+ ConnectionStates0#connection_states{current_write = NewCS};
+
+set_connection_state_by_epoch(ConnectionStates0 =
+ #connection_states{pending_write = CS},
+ NewCS = #connection_state{epoch = Epoch}, write)
+ when CS#connection_state.epoch == Epoch ->
+ ConnectionStates0#connection_states{pending_write = NewCS}.
+
+%%--------------------------------------------------------------------
+%%% Internal functions
+%%--------------------------------------------------------------------
+encode_tls_cipher_text(Type, {MajVer, MinVer}, Epoch, Seq, Fragment) ->
+ Length = erlang:iolist_size(Fragment),
+ [<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Epoch),
+ ?UINT48(Seq), ?UINT16(Length)>>, Fragment].
+
+cipher(Type, Version, Fragment, CS0) ->
+ Length = erlang:iolist_size(Fragment),
+ {MacHash, CS1=#connection_state{cipher_state = CipherS0,
+ security_parameters=
+ #security_parameters{bulk_cipher_algorithm =
+ BCA}
+ }} =
+ hash_and_bump_seqno(CS0, Type, Version, Length, Fragment),
+ {Ciphered, CipherS1} = ssl_cipher:cipher(BCA, CipherS0, MacHash, Fragment, Version),
+ CS2 = CS1#connection_state{cipher_state=CipherS1},
+ {Ciphered, CS2}.
+
+decipher(TLS=#ssl_tls{type=Type, version=Version={254, _},
+ epoch = Epoch, record_seq = SeqNo,
+ fragment=Fragment}, CS0) ->
+ SP = CS0#connection_state.security_parameters,
+ BCA = SP#security_parameters.bulk_cipher_algorithm,
+ HashSz = SP#security_parameters.hash_size,
+ CipherS0 = CS0#connection_state.cipher_state,
+ case ssl_cipher:decipher(BCA, HashSz, CipherS0, Fragment, Version) of
+ {T, Mac, CipherS1} ->
+ CS1 = CS0#connection_state{cipher_state = CipherS1},
+ TLength = size(T),
+ MacHash = hash_with_seqno(CS1, Type, Version, Epoch, SeqNo, TLength, T),
+ case ssl_record:is_correct_mac(Mac, MacHash) of
+ true ->
+ {TLS#ssl_tls{fragment = T}, CS1};
+ false ->
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ end;
+ #alert{} = Alert ->
+ Alert
+ end.
+
+hash_with_seqno(#connection_state{mac_secret = MacSecret,
+ security_parameters =
+ SecPars},
+ Type, Version = {254, _},
+ Epoch, SeqNo, Length, Fragment) ->
+ mac_hash(Version,
+ SecPars#security_parameters.mac_algorithm,
+ MacSecret, (Epoch bsl 48) + SeqNo, Type,
+ Length, Fragment).
+
+hash_and_bump_seqno(#connection_state{epoch = Epoch,
+ sequence_number = SeqNo,
+ mac_secret = MacSecret,
+ security_parameters =
+ SecPars} = CS0,
+ Type, Version = {254, _}, Length, Fragment) ->
+ Hash = mac_hash(Version,
+ SecPars#security_parameters.mac_algorithm,
+ MacSecret, (Epoch bsl 48) + SeqNo, Type,
+ Length, Fragment),
+ {Hash, CS0#connection_state{sequence_number = SeqNo+1}}.
+
+mac_hash(Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) ->
+ dtls_v1:mac_hash(MacAlg, MacSecret, SeqNo, Type, Version,
+ Length, Fragment).
diff --git a/lib/ssl/src/dtls_v1.erl b/lib/ssl/src/dtls_v1.erl
new file mode 100644
index 0000000000..c12e12e424
--- /dev/null
+++ b/lib/ssl/src/dtls_v1.erl
@@ -0,0 +1,43 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(dtls_v1).
+
+-include("ssl_cipher.hrl").
+
+-export([suites/1, mac_hash/7, ecc_curves/1, corresponding_tls_version/1]).
+
+-spec suites(Minor:: 253|255) -> [cipher_suite()].
+
+suites(Minor) ->
+ tls_v1:suites(corresponding_minor_tls_version(Minor)).
+
+mac_hash(Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) ->
+ tls_v1:mac_hash(MacAlg, MacSecret, SeqNo, Type, Version,
+ Length, Fragment).
+
+ecc_curves({_Major, Minor}) ->
+ tls_v1:ecc_curves(corresponding_minor_tls_version(Minor)).
+
+corresponding_tls_version({254, Minor}) ->
+ {3, corresponding_minor_tls_version(Minor)}.
+
+corresponding_minor_tls_version(255) ->
+ 2;
+corresponding_minor_tls_version(253) ->
+ 3.
diff --git a/lib/ssl/src/ssl.app.src b/lib/ssl/src/ssl.app.src
index 582a60635f..44798f8c12 100644
--- a/lib/ssl/src/ssl.app.src
+++ b/lib/ssl/src/ssl.app.src
@@ -3,40 +3,44 @@
{vsn, "%VSN%"},
{modules, [
%% TLS/SSL
- tls,
tls_connection,
tls_handshake,
tls_record,
+ tls_v1,
+ ssl_v3,
+ ssl_v2,
%% DTLS
- dtls_record,
- dtls_handshake,
dtls_connection,
- dtls,
- %% Backwards compatibility
+ dtls_handshake,
+ dtls_record,
+ dtls_v1,
+ %% API
+ tls, %% Future API module
+ dtls, %% Future API module
ssl,
+ ssl_session_cache_api,
%% Both TLS/SSL and DTLS
- ssl_app,
- ssl_sup,
+ ssl_handshake,
+ ssl_record,
+ ssl_cipher,
+ ssl_srp_primes,
+ ssl_alert,
+ ssl_socket,
+ %%ssl_connection,
+ %% Erlang Distribution over SSL/TLS
inet_tls_dist,
ssl_tls_dist_proxy,
ssl_dist_sup,
- ssl_tls1,
- ssl_ssl3,
- ssl_ssl2,
+ %% SSL/TLS session handling
ssl_session,
- ssl_session_cache_api,
ssl_session_cache,
- ssl_socket,
- %%ssl_record,
ssl_manager,
- %%ssl_handshake,
- ssl_connection_sup,
- %%ssl_connection,
- ssl_cipher,
- ssl_srp_primes,
ssl_pkix_db,
ssl_certificate,
- ssl_alert
+ %% App structure
+ ssl_app,
+ ssl_sup,
+ ssl_connection_sup
]},
{registered, [ssl_sup, ssl_manager]},
{applications, [crypto, public_key, kernel, stdlib]},
diff --git a/lib/ssl/src/ssl.appup.src b/lib/ssl/src/ssl.appup.src
index 9e5bec26f1..c090b6ebfb 100644
--- a/lib/ssl/src/ssl.appup.src
+++ b/lib/ssl/src/ssl.appup.src
@@ -1,6 +1,7 @@
%% -*- erlang -*-
{"%VSN%",
[
+ {<<"5.3\\*">>, [{restart_application, ssl}]},
{<<"5.2\\*">>, [{restart_application, ssl}]},
{<<"5.1\\*">>, [{restart_application, ssl}]},
{<<"5.0\\*">>, [{restart_application, ssl}]},
@@ -8,6 +9,7 @@
{<<"3\\.*">>, [{restart_application, ssl}]}
],
[
+ {<<"5.3\\*">>, [{restart_application, ssl}]},
{<<"5.2\\*">>, [{restart_application, ssl}]},
{<<"5.1\\*">>, [{restart_application, ssl}]},
{<<"5.0\\*">>, [{restart_application, ssl}]},
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index 0c1e47311d..dc6898d001 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -219,4 +219,3 @@ format_error(Error) ->
random_bytes(N) ->
tls:random_bytes(N).
-
diff --git a/lib/ssl/src/ssl_cipher.erl b/lib/ssl/src/ssl_cipher.erl
index ec5d793d65..6513042e98 100644
--- a/lib/ssl/src/ssl_cipher.erl
+++ b/lib/ssl/src/ssl_cipher.erl
@@ -32,16 +32,26 @@
-include("ssl_alert.hrl").
-include_lib("public_key/include/public_key.hrl").
--export([security_parameters/3, suite_definition/1,
+-export([security_parameters/2, security_parameters/3, suite_definition/1,
decipher/5, cipher/5,
suite/1, suites/1, anonymous_suites/0, psk_suites/1, srp_suites/0,
openssl_suite/1, openssl_suite_name/1, filter/2, filter_suites/1,
- hash_algorithm/1, sign_algorithm/1]).
+ hash_algorithm/1, sign_algorithm/1, is_acceptable_hash/2]).
-compile(inline).
%%--------------------------------------------------------------------
--spec security_parameters(tls_version(), cipher_suite(), #security_parameters{}) ->
+-spec security_parameters(cipher_suite(), #security_parameters{}) ->
+ #security_parameters{}.
+%% Only security_parameters/2 should call security_parameters/3 with undefined as
+%% first argument.
+%%--------------------------------------------------------------------
+
+security_parameters(?TLS_NULL_WITH_NULL_NULL = CipherSuite, SecParams) ->
+ security_parameters(undefined, CipherSuite, SecParams).
+
+%%--------------------------------------------------------------------
+-spec security_parameters(tls_version() | undefined, cipher_suite(), #security_parameters{}) ->
#security_parameters{}.
%%
%% Description: Returns a security parameters record where the
@@ -195,9 +205,9 @@ block_decipher(Fun, #cipher_state{key=Key, iv=IV} = CipherState0,
%% Description: Returns a list of supported cipher suites.
%%--------------------------------------------------------------------
suites({3, 0}) ->
- ssl_ssl3:suites();
+ ssl_v3:suites();
suites({3, N}) ->
- ssl_tls1:suites(N).
+ tls_v1:suites(N).
%%--------------------------------------------------------------------
-spec anonymous_suites() -> [cipher_suite()].
@@ -1009,6 +1019,7 @@ filter(DerCert, Ciphers) ->
filter_keyuse(OtpCert, (Ciphers -- rsa_keyed_suites()) -- dsa_signed_suites(),
[], ecdhe_ecdsa_suites())
end,
+
case public_key:pkix_sign_types(SigAlg#'SignatureAlgorithm'.algorithm) of
{_, rsa} ->
Ciphers1 -- ecdsa_signed_suites();
@@ -1191,15 +1202,15 @@ hash_size(md5) ->
hash_size(sha) ->
20;
%% Uncomment when adding cipher suite that needs it
-%% hash_size(sha224) ->
-%% 28;
+%hash_size(sha224) ->
+% 28;
hash_size(sha256) ->
32;
hash_size(sha384) ->
48.
%% Uncomment when adding cipher suite that needs it
-%% hash_size(sha512) ->
-%% 64.
+%hash_size(sha512) ->
+% 64.
%% RFC 5246: 6.2.3.2. CBC Block Cipher
%%
@@ -1259,15 +1270,15 @@ generic_stream_cipher_from_bin(T, HashSz) ->
%% SSL 3.0 and TLS 1.0 as it is not strictly required and breaks
%% interopability with for instance Google.
is_correct_padding(#generic_block_cipher{padding_length = Len,
- padding = Padding}, {3, N})
+ padding = Padding}, {3, N})
when N == 0; N == 1 ->
Len == byte_size(Padding);
%% Padding must be check in TLS 1.1 and after
is_correct_padding(#generic_block_cipher{padding_length = Len,
- padding = Padding}, _) ->
+ padding = Padding}, _) ->
Len == byte_size(Padding) andalso
list_to_binary(lists:duplicate(Len, Len)) == Padding.
-
+
get_padding(Length, BlockSize) ->
get_padding_aux(BlockSize, Length rem BlockSize).
@@ -1291,7 +1302,7 @@ next_iv(Bin, IV) ->
rsa_signed_suites() ->
dhe_rsa_suites() ++ rsa_suites() ++
psk_rsa_suites() ++ srp_rsa_suites() ++
- ecdh_rsa_suites().
+ ecdh_rsa_suites() ++ ecdhe_rsa_suites().
rsa_keyed_suites() ->
dhe_rsa_suites() ++ rsa_suites() ++
diff --git a/lib/ssl/src/ssl_cipher.hrl b/lib/ssl/src/ssl_cipher.hrl
index c7c71ee1a7..62a5269def 100644
--- a/lib/ssl/src/ssl_cipher.hrl
+++ b/lib/ssl/src/ssl_cipher.hrl
@@ -28,7 +28,8 @@
-type cipher() :: null |rc4_128 | idea_cbc | des40_cbc | des_cbc | '3des_ede_cbc'
| aes_128_cbc | aes_256_cbc.
--type hash() :: null | sha | md5 | ssh224 | sha256 | sha384 | sha512.
+-type hash() :: null | sha | md5 | sha224 | sha256 | sha384 | sha512.
+-type key_algo() :: null | rsa | dhe_rsa | dhe_dss | ecdhe_ecdsa| ecdh_ecdsa | ecdh_rsa| srp_rsa| srp_dss | psk | dhe_psk | rsa_psk | dh_anon | ecdh_anon | srp_anon.
-type erl_cipher_suite() :: {key_algo(), cipher(), hash()}.
-type int_cipher_suite() :: {key_algo(), cipher(), hash(), hash() | default_prf}.
-type cipher_suite() :: binary().
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl
new file mode 100644
index 0000000000..29a8996bd6
--- /dev/null
+++ b/lib/ssl/src/ssl_handshake.erl
@@ -0,0 +1,1650 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+
+%----------------------------------------------------------------------
+%% Purpose: Help funtions for handling the SSL-handshake protocol (common
+%% to SSL/TLS and DTLS
+%%----------------------------------------------------------------------
+
+-module(ssl_handshake).
+
+-include("ssl_handshake.hrl").
+-include("ssl_record.hrl").
+-include("ssl_cipher.hrl").
+-include("ssl_alert.hrl").
+-include("ssl_internal.hrl").
+-include("ssl_srp.hrl").
+-include_lib("public_key/include/public_key.hrl").
+
+%% Handshake messages
+-export([hello_request/0, server_hello_done/0,
+ certificate/4, certificate_request/4, key_exchange/3,
+ finished/5, next_protocol/1]).
+
+%% Handle handshake messages
+-export([certify/7, client_certificate_verify/6, certificate_verify/6, verify_signature/5,
+ master_secret/5, server_key_exchange_hash/2, verify_connection/6]).
+
+%% Encode/Decode
+-export([encode_handshake/2, encode_hello_extensions/1,
+ encode_client_protocol_negotiation/2, encode_protocols_advertised_on_server/1,
+ decode_handshake/3, decode_hello_extensions/1,
+ decode_server_key/3, decode_client_key/3,
+ decode_suites/2
+ ]).
+
+%% Cipher suites handling
+-export([available_suites/2, available_suites/3, cipher_suites/2,
+ select_session/10]).
+
+%% Extensions handling
+-export([client_hello_extensions/5,
+ handle_client_hello_extensions/8, %% Returns server hello extensions
+ handle_server_hello_extensions/9
+ ]).
+
+%% MISC
+-export([select_version/3, prf/5, select_hashsign/2, select_cert_hashsign/3,
+ decrypt_premaster_secret/2]).
+
+%%====================================================================
+%% Internal application API
+%%====================================================================
+
+%% ---------- Create handshake messages ----------
+
+%%--------------------------------------------------------------------
+-spec hello_request() -> #hello_request{}.
+%%
+%% Description: Creates a hello request message sent by server to
+%% trigger renegotiation.
+%%--------------------------------------------------------------------
+hello_request() ->
+ #hello_request{}.
+
+%%--------------------------------------------------------------------
+-spec server_hello_done() -> #server_hello_done{}.
+%%
+%% Description: Creates a server hello done message.
+%%--------------------------------------------------------------------
+server_hello_done() ->
+ #server_hello_done{}.
+
+client_hello_extensions(Version, CipherSuites, SslOpts, ConnectionStates, Renegotiation) ->
+ {EcPointFormats, EllipticCurves} =
+ case advertises_ec_ciphers(lists:map(fun ssl_cipher:suite_definition/1, CipherSuites)) of
+ true ->
+ ecc_extensions(tls_v1, Version);
+ false ->
+ {undefined, undefined}
+ end,
+ SRP = srp_user(SslOpts),
+
+ #hello_extensions{
+ renegotiation_info = renegotiation_info(tls_record, client,
+ ConnectionStates, Renegotiation),
+ srp = SRP,
+ hash_signs = advertised_hash_signs(Version),
+ ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves,
+ next_protocol_negotiation =
+ encode_client_protocol_negotiation(SslOpts#ssl_options.next_protocol_selector,
+ Renegotiation)}.
+
+%%--------------------------------------------------------------------
+-spec certificate(der_cert(), db_handle(), certdb_ref(), client | server) -> #certificate{} | #alert{}.
+%%
+%% Description: Creates a certificate message.
+%%--------------------------------------------------------------------
+certificate(OwnCert, CertDbHandle, CertDbRef, client) ->
+ Chain =
+ case ssl_certificate:certificate_chain(OwnCert, CertDbHandle, CertDbRef) of
+ {ok, CertChain} ->
+ CertChain;
+ {error, _} ->
+ %% If no suitable certificate is available, the client
+ %% SHOULD send a certificate message containing no
+ %% certificates. (chapter 7.4.6. RFC 4346)
+ []
+ end,
+ #certificate{asn1_certificates = Chain};
+
+certificate(OwnCert, CertDbHandle, CertDbRef, server) ->
+ case ssl_certificate:certificate_chain(OwnCert, CertDbHandle, CertDbRef) of
+ {ok, Chain} ->
+ #certificate{asn1_certificates = Chain};
+ {error, _} ->
+ ?ALERT_REC(?FATAL, ?INTERNAL_ERROR)
+ end.
+
+%%--------------------------------------------------------------------
+-spec next_protocol(binary()) -> #next_protocol{}.
+%%
+%% Description: Creates a next protocol message
+%%-------------------------------------------------------------------
+next_protocol(SelectedProtocol) ->
+ #next_protocol{selected_protocol = SelectedProtocol}.
+
+%%--------------------------------------------------------------------
+-spec client_certificate_verify(undefined | der_cert(), binary(),
+ tls_version(), term(), private_key(),
+ tls_handshake_history()) ->
+ #certificate_verify{} | ignore | #alert{}.
+%%
+%% Description: Creates a certificate_verify message, called by the client.
+%%--------------------------------------------------------------------
+client_certificate_verify(undefined, _, _, _, _, _) ->
+ ignore;
+client_certificate_verify(_, _, _, _, undefined, _) ->
+ ignore;
+client_certificate_verify(OwnCert, MasterSecret, Version,
+ {HashAlgo, SignAlgo},
+ PrivateKey, {Handshake, _}) ->
+ case public_key:pkix_is_fixed_dh_cert(OwnCert) of
+ true ->
+ ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE);
+ false ->
+ Hashes =
+ calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake),
+ Signed = digitally_signed(Version, Hashes, HashAlgo, PrivateKey),
+ #certificate_verify{signature = Signed, hashsign_algorithm = {HashAlgo, SignAlgo}}
+ end.
+
+%%--------------------------------------------------------------------
+-spec certificate_request(erl_cipher_suite(), db_handle(), certdb_ref(), tls_version()) ->
+ #certificate_request{}.
+%%
+%% Description: Creates a certificate_request message, called by the server.
+%%--------------------------------------------------------------------
+certificate_request(CipherSuite, CertDbHandle, CertDbRef, Version) ->
+ Types = certificate_types(CipherSuite),
+ HashSigns = advertised_hash_signs(Version),
+ Authorities = certificate_authorities(CertDbHandle, CertDbRef),
+ #certificate_request{
+ certificate_types = Types,
+ hashsign_algorithms = HashSigns,
+ certificate_authorities = Authorities
+ }.
+%%--------------------------------------------------------------------
+-spec key_exchange(client | server, tls_version(),
+ {premaster_secret, binary(), public_key_info()} |
+ {dh, binary()} |
+ {dh, {binary(), binary()}, #'DHParameter'{}, {HashAlgo::atom(), SignAlgo::atom()},
+ binary(), binary(), private_key()} |
+ {ecdh, #'ECPrivateKey'{}} |
+ {psk, binary()} |
+ {dhe_psk, binary(), binary()} |
+ {srp, {binary(), binary()}, #srp_user{}, {HashAlgo::atom(), SignAlgo::atom()},
+ binary(), binary(), private_key()}) ->
+ #client_key_exchange{} | #server_key_exchange{}.
+
+%%
+%% Description: Creates a keyexchange message.
+%%--------------------------------------------------------------------
+key_exchange(client, _Version, {premaster_secret, Secret, {_, PublicKey, _}}) ->
+ EncPremasterSecret =
+ encrypted_premaster_secret(Secret, PublicKey),
+ #client_key_exchange{exchange_keys = EncPremasterSecret};
+
+key_exchange(client, _Version, {dh, PublicKey}) ->
+ #client_key_exchange{
+ exchange_keys = #client_diffie_hellman_public{
+ dh_public = PublicKey}
+ };
+
+key_exchange(client, _Version, {ecdh, #'ECPrivateKey'{publicKey = {0, ECPublicKey}}}) ->
+ #client_key_exchange{
+ exchange_keys = #client_ec_diffie_hellman_public{
+ dh_public = ECPublicKey}
+ };
+
+key_exchange(client, _Version, {psk, Identity}) ->
+ #client_key_exchange{
+ exchange_keys = #client_psk_identity{
+ identity = Identity}
+ };
+
+key_exchange(client, _Version, {dhe_psk, Identity, PublicKey}) ->
+ #client_key_exchange{
+ exchange_keys = #client_dhe_psk_identity{
+ identity = Identity,
+ dh_public = PublicKey}
+ };
+
+key_exchange(client, _Version, {psk_premaster_secret, PskIdentity, Secret, {_, PublicKey, _}}) ->
+ EncPremasterSecret =
+ encrypted_premaster_secret(Secret, PublicKey),
+ #client_key_exchange{
+ exchange_keys = #client_rsa_psk_identity{
+ identity = PskIdentity,
+ exchange_keys = EncPremasterSecret}};
+
+key_exchange(client, _Version, {srp, PublicKey}) ->
+ #client_key_exchange{
+ exchange_keys = #client_srp_public{
+ srp_a = PublicKey}
+ };
+
+key_exchange(server, Version, {dh, {PublicKey, _},
+ #'DHParameter'{prime = P, base = G},
+ HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
+ ServerDHParams = #server_dh_params{dh_p = int_to_bin(P),
+ dh_g = int_to_bin(G), dh_y = PublicKey},
+ enc_server_key_exchange(Version, ServerDHParams, HashSign,
+ ClientRandom, ServerRandom, PrivateKey);
+
+key_exchange(server, Version, {ecdh, #'ECPrivateKey'{publicKey = {0, ECPublicKey},
+ parameters = ECCurve}, HashSign,
+ ClientRandom, ServerRandom, PrivateKey}) ->
+ ServerECParams = #server_ecdh_params{curve = ECCurve, public = ECPublicKey},
+ enc_server_key_exchange(Version, ServerECParams, HashSign,
+ ClientRandom, ServerRandom, PrivateKey);
+
+key_exchange(server, Version, {psk, PskIdentityHint,
+ HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
+ ServerPSKParams = #server_psk_params{hint = PskIdentityHint},
+ enc_server_key_exchange(Version, ServerPSKParams, HashSign,
+ ClientRandom, ServerRandom, PrivateKey);
+
+key_exchange(server, Version, {dhe_psk, PskIdentityHint, {PublicKey, _},
+ #'DHParameter'{prime = P, base = G},
+ HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
+ ServerEDHPSKParams = #server_dhe_psk_params{
+ hint = PskIdentityHint,
+ dh_params = #server_dh_params{dh_p = int_to_bin(P),
+ dh_g = int_to_bin(G), dh_y = PublicKey}
+ },
+ enc_server_key_exchange(Version, ServerEDHPSKParams,
+ HashSign, ClientRandom, ServerRandom, PrivateKey);
+
+key_exchange(server, Version, {srp, {PublicKey, _},
+ #srp_user{generator = Generator, prime = Prime,
+ salt = Salt},
+ HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
+ ServerSRPParams = #server_srp_params{srp_n = Prime, srp_g = Generator,
+ srp_s = Salt, srp_b = PublicKey},
+ enc_server_key_exchange(Version, ServerSRPParams, HashSign,
+ ClientRandom, ServerRandom, PrivateKey).
+
+%%--------------------------------------------------------------------
+-spec finished(tls_version(), client | server, integer(), binary(), tls_handshake_history()) ->
+ #finished{}.
+%%
+%% Description: Creates a handshake finished message
+%%-------------------------------------------------------------------
+finished(Version, Role, PrfAlgo, MasterSecret, {Handshake, _}) -> % use the current handshake
+ #finished{verify_data =
+ calc_finished(Version, Role, PrfAlgo, MasterSecret, Handshake)}.
+
+%% ---------- Handle handshake messages ----------
+
+%%--------------------------------------------------------------------
+-spec certificate_verify(binary(), public_key_info(), tls_version(), term(),
+ binary(), tls_handshake_history()) -> valid | #alert{}.
+%%
+%% Description: Checks that the certificate_verify message is valid.
+%%--------------------------------------------------------------------
+certificate_verify(Signature, PublicKeyInfo, Version,
+ HashSign = {HashAlgo, _}, MasterSecret, {_, Handshake}) ->
+ Hash = calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake),
+ case verify_signature(Version, Hash, HashSign, Signature, PublicKeyInfo) of
+ true ->
+ valid;
+ _ ->
+ ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE)
+ end.
+%%--------------------------------------------------------------------
+-spec verify_signature(tls_version(), binary(), {term(), term()}, binary(),
+ public_key_info()) -> true | false.
+%%
+%% Description: Checks that a public_key signature is valid.
+%%--------------------------------------------------------------------
+verify_signature(_Version, _Hash, {_HashAlgo, anon}, _Signature, _) ->
+ true;
+verify_signature({3, Minor}, Hash, {HashAlgo, rsa}, Signature, {?rsaEncryption, PubKey, _PubKeyParams})
+ when Minor >= 3 ->
+ public_key:verify({digest, Hash}, HashAlgo, Signature, PubKey);
+verify_signature(_Version, Hash, _HashAlgo, Signature, {?rsaEncryption, PubKey, _PubKeyParams}) ->
+ case public_key:decrypt_public(Signature, PubKey,
+ [{rsa_pad, rsa_pkcs1_padding}]) of
+ Hash -> true;
+ _ -> false
+ end;
+verify_signature(_Version, Hash, {HashAlgo, dsa}, Signature, {?'id-dsa', PublicKey, PublicKeyParams}) ->
+ public_key:verify({digest, Hash}, HashAlgo, Signature, {PublicKey, PublicKeyParams});
+verify_signature(_Version, Hash, {HashAlgo, ecdsa}, Signature,
+ {?'id-ecPublicKey', PublicKey, PublicKeyParams}) ->
+ public_key:verify({digest, Hash}, HashAlgo, Signature, {PublicKey, PublicKeyParams}).
+
+%%--------------------------------------------------------------------
+-spec certify(#certificate{}, db_handle(), certdb_ref(), integer() | nolimit,
+ verify_peer | verify_none, {fun(), term},
+ client | server) -> {der_cert(), public_key_info()} | #alert{}.
+%%
+%% Description: Handles a certificate handshake message
+%%--------------------------------------------------------------------
+certify(#certificate{asn1_certificates = ASN1Certs}, CertDbHandle, CertDbRef,
+ MaxPathLen, _Verify, VerifyFunAndState, Role) ->
+ [PeerCert | _] = ASN1Certs,
+
+ ValidationFunAndState =
+ case VerifyFunAndState of
+ undefined ->
+ {fun(OtpCert, ExtensionOrVerifyResult, SslState) ->
+ ssl_certificate:validate_extension(OtpCert,
+ ExtensionOrVerifyResult, SslState)
+ end, Role};
+ {Fun, UserState0} ->
+ {fun(OtpCert, {extension, _} = Extension, {SslState, UserState}) ->
+ case ssl_certificate:validate_extension(OtpCert,
+ Extension,
+ SslState) of
+ {valid, NewSslState} ->
+ {valid, {NewSslState, UserState}};
+ {fail, Reason} ->
+ apply_user_fun(Fun, OtpCert, Reason, UserState,
+ SslState);
+ {unknown, _} ->
+ apply_user_fun(Fun, OtpCert,
+ Extension, UserState, SslState)
+ end;
+ (OtpCert, VerifyResult, {SslState, UserState}) ->
+ apply_user_fun(Fun, OtpCert, VerifyResult, UserState,
+ SslState)
+ end, {Role, UserState0}}
+ end,
+
+ try
+ {TrustedErlCert, CertPath} =
+ ssl_certificate:trusted_cert_and_path(ASN1Certs, CertDbHandle, CertDbRef),
+ case public_key:pkix_path_validation(TrustedErlCert,
+ CertPath,
+ [{max_path_length,
+ MaxPathLen},
+ {verify_fun, ValidationFunAndState}]) of
+ {ok, {PublicKeyInfo,_}} ->
+ {PeerCert, PublicKeyInfo};
+ {error, Reason} ->
+ path_validation_alert(Reason)
+ end
+ catch
+ error:_ ->
+ %% ASN-1 decode of certificate somehow failed
+ ?ALERT_REC(?FATAL, ?CERTIFICATE_UNKNOWN)
+ end.
+
+%%--------------------------------------------------------------------
+-spec verify_connection(tls_version(), #finished{}, client | server, integer(), binary(),
+ tls_handshake_history()) -> verified | #alert{}.
+%%
+%% Description: Checks the ssl handshake finished message to verify
+%% the connection.
+%%-------------------------------------------------------------------
+verify_connection(Version, #finished{verify_data = Data},
+ Role, PrfAlgo, MasterSecret, {_, Handshake}) ->
+ %% use the previous hashes
+ case calc_finished(Version, Role, PrfAlgo, MasterSecret, Handshake) of
+ Data ->
+ verified;
+ _ ->
+ ?ALERT_REC(?FATAL, ?DECRYPT_ERROR)
+ end.
+%%--------------------------------------------------------------------
+-spec decrypt_premaster_secret(binary(), #'RSAPrivateKey'{}) -> binary().
+
+%%
+%% Description: Public key decryption using the private key.
+%%--------------------------------------------------------------------
+decrypt_premaster_secret(Secret, RSAPrivateKey) ->
+ try public_key:decrypt_private(Secret, RSAPrivateKey,
+ [{rsa_pad, rsa_pkcs1_padding}])
+ catch
+ _:_ ->
+ throw(?ALERT_REC(?FATAL, ?DECRYPT_ERROR))
+ end.
+%%--------------------------------------------------------------------
+-spec server_key_exchange_hash(md5sha | md5 | sha | sha224 |sha256 | sha384 | sha512, binary()) -> binary().
+%%
+%% Description: Calculate server key exchange hash
+%%--------------------------------------------------------------------
+server_key_exchange_hash(md5sha, Value) ->
+ MD5 = crypto:hash(md5, Value),
+ SHA = crypto:hash(sha, Value),
+ <<MD5/binary, SHA/binary>>;
+
+server_key_exchange_hash(Hash, Value) ->
+ crypto:hash(Hash, Value).
+%%--------------------------------------------------------------------
+-spec prf(tls_version(), binary(), binary(), [binary()], non_neg_integer()) ->
+ {ok, binary()} | {error, undefined}.
+%%
+%% Description: use the TLS PRF to generate key material
+%%--------------------------------------------------------------------
+prf({3,0}, _, _, _, _) ->
+ {error, undefined};
+prf({3,1}, Secret, Label, Seed, WantedLength) ->
+ {ok, tls_v1:prf(?MD5SHA, Secret, Label, Seed, WantedLength)};
+prf({3,_N}, Secret, Label, Seed, WantedLength) ->
+ {ok, tls_v1:prf(?SHA256, Secret, Label, Seed, WantedLength)}.
+%%--------------------------------------------------------------------
+-spec select_hashsign(#hash_sign_algos{}| undefined, undefined | binary()) ->
+ [{atom(), atom()}] | undefined.
+
+%%
+%% Description:
+%%--------------------------------------------------------------------
+select_hashsign(_, undefined) ->
+ {null, anon};
+select_hashsign(undefined, Cert) ->
+ #'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp),
+ #'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
+ select_cert_hashsign(undefined, Algo, {undefined, undefined});
+select_hashsign(#hash_sign_algos{hash_sign_algos = HashSigns}, Cert) ->
+ #'OTPCertificate'{tbsCertificate = TBSCert} =public_key:pkix_decode_cert(Cert, otp),
+ #'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
+ DefaultHashSign = {_, Sign} = select_cert_hashsign(undefined, Algo, {undefined, undefined}),
+ case lists:filter(fun({sha, dsa}) ->
+ true;
+ ({_, dsa}) ->
+ false;
+ ({Hash, S}) when S == Sign ->
+ ssl_cipher:is_acceptable_hash(Hash, proplists:get_value(hashs, crypto:supports()));
+ (_) ->
+ false
+ end, HashSigns) of
+ [] ->
+ DefaultHashSign;
+ [HashSign| _] ->
+ HashSign
+ end.
+%%--------------------------------------------------------------------
+-spec select_cert_hashsign(#hash_sign_algos{}| undefined, oid(), tls_version() | {undefined, undefined}) ->
+ {atom(), atom()}.
+
+%%
+%% Description: For TLS 1.2 selected cert_hash_sign will be recived
+%% in the handshake message, for previous versions use appropriate defaults.
+%% This function is also used by select_hashsign to extract
+%% the alogrithm of the server cert key.
+%%--------------------------------------------------------------------
+select_cert_hashsign(HashSign, _, {Major, Minor}) when HashSign =/= undefined andalso Major >= 3 andalso Minor >= 3 ->
+ HashSign;
+select_cert_hashsign(undefined,?'id-ecPublicKey', _) ->
+ {sha, ecdsa};
+select_cert_hashsign(undefined, ?rsaEncryption, _) ->
+ {md5sha, rsa};
+select_cert_hashsign(undefined, ?'id-dsa', _) ->
+ {sha, dsa}.
+
+%%--------------------------------------------------------------------
+-spec master_secret(atom(), tls_version(), #session{} | binary(), #connection_states{},
+ client | server) -> {binary(), #connection_states{}} | #alert{}.
+%%
+%% Description: Sets or calculates the master secret and calculate keys,
+%% updating the pending connection states. The Mastersecret and the update
+%% connection states are returned or an alert if the calculation fails.
+%%-------------------------------------------------------------------
+master_secret(RecordCB, Version, #session{master_secret = Mastersecret},
+ ConnectionStates, Role) ->
+ ConnectionState =
+ ssl_record:pending_connection_state(ConnectionStates, read),
+ SecParams = ConnectionState#connection_state.security_parameters,
+ try master_secret(RecordCB, Version, Mastersecret, SecParams,
+ ConnectionStates, Role)
+ catch
+ exit:Reason ->
+ Report = io_lib:format("Key calculation failed due to ~p",
+ [Reason]),
+ error_logger:error_report(Report),
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ end;
+
+master_secret(RecordCB, Version, PremasterSecret, ConnectionStates, Role) ->
+ ConnectionState =
+ ssl_record:pending_connection_state(ConnectionStates, read),
+ SecParams = ConnectionState#connection_state.security_parameters,
+ #security_parameters{prf_algorithm = PrfAlgo,
+ client_random = ClientRandom,
+ server_random = ServerRandom} = SecParams,
+ try master_secret(RecordCB, Version,
+ calc_master_secret(Version,PrfAlgo,PremasterSecret,
+ ClientRandom, ServerRandom),
+ SecParams, ConnectionStates, Role)
+ catch
+ exit:Reason ->
+ Report = io_lib:format("Master secret calculation failed"
+ " due to ~p", [Reason]),
+ error_logger:error_report(Report),
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ end.
+
+%%-------------Encode/Decode --------------------------------
+encode_handshake(#next_protocol{selected_protocol = SelectedProtocol}, _Version) ->
+ PaddingLength = 32 - ((byte_size(SelectedProtocol) + 2) rem 32),
+ {?NEXT_PROTOCOL, <<?BYTE((byte_size(SelectedProtocol))), SelectedProtocol/binary,
+ ?BYTE(PaddingLength), 0:(PaddingLength * 8)>>};
+
+encode_handshake(#server_hello{server_version = {Major, Minor},
+ random = Random,
+ session_id = Session_ID,
+ cipher_suite = CipherSuite,
+ compression_method = Comp_method,
+ extensions = #hello_extensions{} = Extensions}, _Version) ->
+ SID_length = byte_size(Session_ID),
+ ExtensionsBin = encode_hello_extensions(Extensions),
+ {?SERVER_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
+ ?BYTE(SID_length), Session_ID/binary,
+ CipherSuite/binary, ?BYTE(Comp_method), ExtensionsBin/binary>>};
+encode_handshake(#certificate{asn1_certificates = ASN1CertList}, _Version) ->
+ ASN1Certs = certs_from_list(ASN1CertList),
+ ACLen = erlang:iolist_size(ASN1Certs),
+ {?CERTIFICATE, <<?UINT24(ACLen), ASN1Certs:ACLen/binary>>};
+encode_handshake(#server_key_exchange{exchange_keys = Keys}, _Version) ->
+ {?SERVER_KEY_EXCHANGE, Keys};
+encode_handshake(#server_key_params{params_bin = Keys, hashsign = HashSign,
+ signature = Signature}, Version) ->
+ EncSign = enc_sign(HashSign, Signature, Version),
+ {?SERVER_KEY_EXCHANGE, <<Keys/binary, EncSign/binary>>};
+encode_handshake(#certificate_request{certificate_types = CertTypes,
+ hashsign_algorithms = #hash_sign_algos{hash_sign_algos = HashSignAlgos},
+ certificate_authorities = CertAuths},
+ {Major, Minor})
+ when Major == 3, Minor >= 3 ->
+ HashSigns= << <<(ssl_cipher:hash_algorithm(Hash)):8, (ssl_cipher:sign_algorithm(Sign)):8>> ||
+ {Hash, Sign} <- HashSignAlgos >>,
+ CertTypesLen = byte_size(CertTypes),
+ HashSignsLen = byte_size(HashSigns),
+ CertAuthsLen = byte_size(CertAuths),
+ {?CERTIFICATE_REQUEST,
+ <<?BYTE(CertTypesLen), CertTypes/binary,
+ ?UINT16(HashSignsLen), HashSigns/binary,
+ ?UINT16(CertAuthsLen), CertAuths/binary>>
+ };
+encode_handshake(#certificate_request{certificate_types = CertTypes,
+ certificate_authorities = CertAuths},
+ _Version) ->
+ CertTypesLen = byte_size(CertTypes),
+ CertAuthsLen = byte_size(CertAuths),
+ {?CERTIFICATE_REQUEST,
+ <<?BYTE(CertTypesLen), CertTypes/binary,
+ ?UINT16(CertAuthsLen), CertAuths/binary>>
+ };
+encode_handshake(#server_hello_done{}, _Version) ->
+ {?SERVER_HELLO_DONE, <<>>};
+encode_handshake(#client_key_exchange{exchange_keys = ExchangeKeys}, Version) ->
+ {?CLIENT_KEY_EXCHANGE, encode_client_key(ExchangeKeys, Version)};
+encode_handshake(#certificate_verify{signature = BinSig, hashsign_algorithm = HashSign}, Version) ->
+ EncSig = enc_sign(HashSign, BinSig, Version),
+ {?CERTIFICATE_VERIFY, EncSig};
+encode_handshake(#finished{verify_data = VerifyData}, _Version) ->
+ {?FINISHED, VerifyData}.
+
+encode_hello_extensions(#hello_extensions{} = Extensions) ->
+ encode_hello_extensions(hello_extensions_list(Extensions), <<>>).
+encode_hello_extensions([], <<>>) ->
+ <<>>;
+encode_hello_extensions([], Acc) ->
+ Size = byte_size(Acc),
+ <<?UINT16(Size), Acc/binary>>;
+
+encode_hello_extensions([#next_protocol_negotiation{extension_data = ExtensionData} | Rest], Acc) ->
+ Len = byte_size(ExtensionData),
+ encode_hello_extensions(Rest, <<?UINT16(?NEXTPROTONEG_EXT), ?UINT16(Len),
+ ExtensionData/binary, Acc/binary>>);
+encode_hello_extensions([#renegotiation_info{renegotiated_connection = undefined} | Rest], Acc) ->
+ encode_hello_extensions(Rest, Acc);
+encode_hello_extensions([#renegotiation_info{renegotiated_connection = ?byte(0) = Info} | Rest], Acc) ->
+ Len = byte_size(Info),
+ encode_hello_extensions(Rest, <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(Len), Info/binary, Acc/binary>>);
+
+encode_hello_extensions([#renegotiation_info{renegotiated_connection = Info} | Rest], Acc) ->
+ InfoLen = byte_size(Info),
+ Len = InfoLen +1,
+ encode_hello_extensions(Rest, <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(Len), ?BYTE(InfoLen),
+ Info/binary, Acc/binary>>);
+encode_hello_extensions([#elliptic_curves{elliptic_curve_list = EllipticCurves} | Rest], Acc) ->
+
+ EllipticCurveList = << <<(tls_v1:oid_to_enum(X)):16>> || X <- EllipticCurves>>,
+ ListLen = byte_size(EllipticCurveList),
+ Len = ListLen + 2,
+ encode_hello_extensions(Rest, <<?UINT16(?ELLIPTIC_CURVES_EXT),
+ ?UINT16(Len), ?UINT16(ListLen), EllipticCurveList/binary, Acc/binary>>);
+encode_hello_extensions([#ec_point_formats{ec_point_format_list = ECPointFormats} | Rest], Acc) ->
+ ECPointFormatList = list_to_binary(ECPointFormats),
+ ListLen = byte_size(ECPointFormatList),
+ Len = ListLen + 1,
+ encode_hello_extensions(Rest, <<?UINT16(?EC_POINT_FORMATS_EXT),
+ ?UINT16(Len), ?BYTE(ListLen), ECPointFormatList/binary, Acc/binary>>);
+encode_hello_extensions([#srp{username = UserName} | Rest], Acc) ->
+ SRPLen = byte_size(UserName),
+ Len = SRPLen + 2,
+ encode_hello_extensions(Rest, <<?UINT16(?SRP_EXT), ?UINT16(Len), ?BYTE(SRPLen),
+ UserName/binary, Acc/binary>>);
+encode_hello_extensions([#hash_sign_algos{hash_sign_algos = HashSignAlgos} | Rest], Acc) ->
+ SignAlgoList = << <<(ssl_cipher:hash_algorithm(Hash)):8, (ssl_cipher:sign_algorithm(Sign)):8>> ||
+ {Hash, Sign} <- HashSignAlgos >>,
+ ListLen = byte_size(SignAlgoList),
+ Len = ListLen + 2,
+ encode_hello_extensions(Rest, <<?UINT16(?SIGNATURE_ALGORITHMS_EXT),
+ ?UINT16(Len), ?UINT16(ListLen), SignAlgoList/binary, Acc/binary>>).
+
+enc_server_key_exchange(Version, Params, {HashAlgo, SignAlgo},
+ ClientRandom, ServerRandom, PrivateKey) ->
+ EncParams = encode_server_key(Params),
+ case HashAlgo of
+ null ->
+ #server_key_params{params = Params,
+ params_bin = EncParams,
+ hashsign = {null, anon},
+ signature = <<>>};
+ _ ->
+ Hash =
+ server_key_exchange_hash(HashAlgo, <<ClientRandom/binary,
+ ServerRandom/binary,
+ EncParams/binary>>),
+ Signature = digitally_signed(Version, Hash, HashAlgo, PrivateKey),
+ #server_key_params{params = Params,
+ params_bin = EncParams,
+ hashsign = {HashAlgo, SignAlgo},
+ signature = Signature}
+ end.
+
+%%--------------------------------------------------------------------
+-spec decode_client_key(binary(), key_algo(), tls_version()) ->
+ #encrypted_premaster_secret{}
+ | #client_diffie_hellman_public{}
+ | #client_ec_diffie_hellman_public{}
+ | #client_psk_identity{}
+ | #client_dhe_psk_identity{}
+ | #client_rsa_psk_identity{}
+ | #client_srp_public{}.
+%%
+%% Description: Decode client_key data and return appropriate type
+%%--------------------------------------------------------------------
+decode_client_key(ClientKey, Type, Version) ->
+ dec_client_key(ClientKey, key_exchange_alg(Type), Version).
+
+%%--------------------------------------------------------------------
+-spec decode_server_key(binary(), key_algo(), tls_version()) ->
+ #server_key_params{}.
+%%
+%% Description: Decode server_key data and return appropriate type
+%%--------------------------------------------------------------------
+decode_server_key(ServerKey, Type, Version) ->
+ dec_server_key(ServerKey, key_exchange_alg(Type), Version).
+
+encode_client_protocol_negotiation(undefined, _) ->
+ undefined;
+encode_client_protocol_negotiation(_, false) ->
+ #next_protocol_negotiation{extension_data = <<>>};
+encode_client_protocol_negotiation(_, _) ->
+ undefined.
+
+encode_protocols_advertised_on_server(undefined) ->
+ undefined;
+
+encode_protocols_advertised_on_server(Protocols) ->
+ #next_protocol_negotiation{extension_data = lists:foldl(fun encode_protocol/2, <<>>, Protocols)}.
+
+decode_handshake(_, ?HELLO_REQUEST, <<>>) ->
+ #hello_request{};
+decode_handshake(_, ?NEXT_PROTOCOL, <<?BYTE(SelectedProtocolLength),
+ SelectedProtocol:SelectedProtocolLength/binary,
+ ?BYTE(PaddingLength), _Padding:PaddingLength/binary>>) ->
+ #next_protocol{selected_protocol = SelectedProtocol};
+
+decode_handshake(_Version, ?SERVER_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
+ ?BYTE(SID_length), Session_ID:SID_length/binary,
+ Cipher_suite:2/binary, ?BYTE(Comp_method)>>) ->
+ #server_hello{
+ server_version = {Major,Minor},
+ random = Random,
+ session_id = Session_ID,
+ cipher_suite = Cipher_suite,
+ compression_method = Comp_method,
+ extensions = #hello_extensions{}};
+
+decode_handshake(_Version, ?SERVER_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
+ ?BYTE(SID_length), Session_ID:SID_length/binary,
+ Cipher_suite:2/binary, ?BYTE(Comp_method),
+ ?UINT16(ExtLen), Extensions:ExtLen/binary>>) ->
+
+ HelloExtensions = decode_hello_extensions(Extensions),
+
+ #server_hello{
+ server_version = {Major,Minor},
+ random = Random,
+ session_id = Session_ID,
+ cipher_suite = Cipher_suite,
+ compression_method = Comp_method,
+ extensions = HelloExtensions};
+
+decode_handshake(_Version, ?CERTIFICATE, <<?UINT24(ACLen), ASN1Certs:ACLen/binary>>) ->
+ #certificate{asn1_certificates = certs_to_list(ASN1Certs)};
+decode_handshake(_Version, ?SERVER_KEY_EXCHANGE, Keys) ->
+ #server_key_exchange{exchange_keys = Keys};
+decode_handshake({Major, Minor}, ?CERTIFICATE_REQUEST,
+ <<?BYTE(CertTypesLen), CertTypes:CertTypesLen/binary,
+ ?UINT16(HashSignsLen), HashSigns:HashSignsLen/binary,
+ ?UINT16(CertAuthsLen), CertAuths:CertAuthsLen/binary>>)
+ when Major >= 3, Minor >= 3 ->
+ HashSignAlgos = [{ssl_cipher:hash_algorithm(Hash), ssl_cipher:sign_algorithm(Sign)} ||
+ <<?BYTE(Hash), ?BYTE(Sign)>> <= HashSigns],
+ #certificate_request{certificate_types = CertTypes,
+ hashsign_algorithms = #hash_sign_algos{hash_sign_algos = HashSignAlgos},
+ certificate_authorities = CertAuths};
+decode_handshake(_Version, ?CERTIFICATE_REQUEST,
+ <<?BYTE(CertTypesLen), CertTypes:CertTypesLen/binary,
+ ?UINT16(CertAuthsLen), CertAuths:CertAuthsLen/binary>>) ->
+ #certificate_request{certificate_types = CertTypes,
+ certificate_authorities = CertAuths};
+decode_handshake(_Version, ?SERVER_HELLO_DONE, <<>>) ->
+ #server_hello_done{};
+decode_handshake({Major, Minor}, ?CERTIFICATE_VERIFY,<<HashSign:2/binary, ?UINT16(SignLen),
+ Signature:SignLen/binary>>)
+ when Major == 3, Minor >= 3 ->
+ #certificate_verify{hashsign_algorithm = dec_hashsign(HashSign), signature = Signature};
+decode_handshake(_Version, ?CERTIFICATE_VERIFY,<<?UINT16(SignLen), Signature:SignLen/binary>>)->
+ #certificate_verify{signature = Signature};
+decode_handshake(_Version, ?CLIENT_KEY_EXCHANGE, PKEPMS) ->
+ #client_key_exchange{exchange_keys = PKEPMS};
+decode_handshake(_Version, ?FINISHED, VerifyData) ->
+ #finished{verify_data = VerifyData};
+decode_handshake(_, _, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+
+%%--------------------------------------------------------------------
+-spec decode_hello_extensions({client, binary()} | binary()) -> #hello_extensions{}.
+%%
+%% Description: Decodes TLS hello extensions
+%%--------------------------------------------------------------------
+decode_hello_extensions({client, <<>>}) ->
+ #hello_extensions{};
+decode_hello_extensions({client, <<?UINT16(ExtLen), Extensions:ExtLen/binary>>}) ->
+ decode_hello_extensions(Extensions);
+decode_hello_extensions(Extensions) ->
+ dec_hello_extensions(Extensions, #hello_extensions{}).
+
+dec_server_key(<<?UINT16(PLen), P:PLen/binary,
+ ?UINT16(GLen), G:GLen/binary,
+ ?UINT16(YLen), Y:YLen/binary, _/binary>> = KeyStruct,
+ ?KEY_EXCHANGE_DIFFIE_HELLMAN, Version) ->
+ Params = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y},
+ {BinMsg, HashSign, Signature} = dec_server_key_params(PLen + GLen + YLen + 6, KeyStruct, Version),
+ #server_key_params{params = Params,
+ params_bin = BinMsg,
+ hashsign = HashSign,
+ signature = Signature};
+%% ECParameters with named_curve
+%% TODO: explicit curve
+dec_server_key(<<?BYTE(?NAMED_CURVE), ?UINT16(CurveID),
+ ?BYTE(PointLen), ECPoint:PointLen/binary,
+ _/binary>> = KeyStruct,
+ ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, Version) ->
+ Params = #server_ecdh_params{curve = {namedCurve, tls_v1:enum_to_oid(CurveID)},
+ public = ECPoint},
+ {BinMsg, HashSign, Signature} = dec_server_key_params(PointLen + 4, KeyStruct, Version),
+ #server_key_params{params = Params,
+ params_bin = BinMsg,
+ hashsign = HashSign,
+ signature = Signature};
+dec_server_key(<<?UINT16(Len), PskIdentityHint:Len/binary, _/binary>> = KeyStruct,
+ KeyExchange, Version)
+ when KeyExchange == ?KEY_EXCHANGE_PSK; KeyExchange == ?KEY_EXCHANGE_RSA_PSK ->
+ Params = #server_psk_params{
+ hint = PskIdentityHint},
+ {BinMsg, HashSign, Signature} = dec_server_key_params(Len + 2, KeyStruct, Version),
+ #server_key_params{params = Params,
+ params_bin = BinMsg,
+ hashsign = HashSign,
+ signature = Signature};
+dec_server_key(<<?UINT16(Len), IdentityHint:Len/binary,
+ ?UINT16(PLen), P:PLen/binary,
+ ?UINT16(GLen), G:GLen/binary,
+ ?UINT16(YLen), Y:YLen/binary, _/binary>> = KeyStruct,
+ ?KEY_EXCHANGE_DHE_PSK, Version) ->
+ DHParams = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y},
+ Params = #server_dhe_psk_params{
+ hint = IdentityHint,
+ dh_params = DHParams},
+ {BinMsg, HashSign, Signature} = dec_server_key_params(Len + PLen + GLen + YLen + 8, KeyStruct, Version),
+ #server_key_params{params = Params,
+ params_bin = BinMsg,
+ hashsign = HashSign,
+ signature = Signature};
+dec_server_key(<<?UINT16(NLen), N:NLen/binary,
+ ?UINT16(GLen), G:GLen/binary,
+ ?BYTE(SLen), S:SLen/binary,
+ ?UINT16(BLen), B:BLen/binary, _/binary>> = KeyStruct,
+ ?KEY_EXCHANGE_SRP, Version) ->
+ Params = #server_srp_params{srp_n = N, srp_g = G, srp_s = S, srp_b = B},
+ {BinMsg, HashSign, Signature} = dec_server_key_params(NLen + GLen + SLen + BLen + 7, KeyStruct, Version),
+ #server_key_params{params = Params,
+ params_bin = BinMsg,
+ hashsign = HashSign,
+ signature = Signature};
+dec_server_key(_, _, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+
+%%--------------------------------------------------------------------
+-spec decode_suites('2_bytes'|'3_bytes', binary()) -> list().
+%%
+%% Description:
+%%--------------------------------------------------------------------
+decode_suites('2_bytes', Dec) ->
+ from_2bytes(Dec);
+decode_suites('3_bytes', Dec) ->
+ from_3bytes(Dec).
+
+%%-------------Cipeher suite handling --------------------------------
+
+available_suites(UserSuites, Version) ->
+ case UserSuites of
+ [] ->
+ ssl_cipher:suites(Version);
+ _ ->
+ UserSuites
+ end.
+
+available_suites(ServerCert, UserSuites, Version) ->
+ ssl_cipher:filter(ServerCert, available_suites(UserSuites, Version)).
+
+cipher_suites(Suites, false) ->
+ [?TLS_EMPTY_RENEGOTIATION_INFO_SCSV | Suites];
+cipher_suites(Suites, true) ->
+ Suites.
+
+select_session(SuggestedSessionId, CipherSuites, Compressions, Port, Session, Version,
+ #ssl_options{ciphers = UserSuites} = SslOpts, Cache, CacheCb, Cert) ->
+ {SessionId, Resumed} = ssl_session:server_id(Port, SuggestedSessionId,
+ SslOpts, Cert,
+ Cache, CacheCb),
+ Suites = ssl_handshake:available_suites(Cert, UserSuites, Version),
+ case Resumed of
+ undefined ->
+ CipherSuite = select_cipher_suite(CipherSuites, Suites),
+ Compression = select_compression(Compressions),
+ {new, Session#session{session_id = SessionId,
+ cipher_suite = CipherSuite,
+ compression_method = Compression}};
+ _ ->
+ {resumed, Resumed}
+ end.
+
+%%-------------certificate handling --------------------------------
+
+certificate_types({KeyExchange, _, _, _})
+ when KeyExchange == rsa;
+ KeyExchange == dhe_dss;
+ KeyExchange == dhe_rsa;
+ KeyExchange == ecdhe_rsa ->
+ <<?BYTE(?RSA_SIGN), ?BYTE(?DSS_SIGN)>>;
+
+certificate_types({KeyExchange, _, _, _})
+ when KeyExchange == dh_ecdsa;
+ KeyExchange == dhe_ecdsa ->
+ <<?BYTE(?ECDSA_SIGN)>>;
+
+certificate_types(_) ->
+ <<?BYTE(?RSA_SIGN)>>.
+
+certificate_authorities(CertDbHandle, CertDbRef) ->
+ Authorities = certificate_authorities_from_db(CertDbHandle, CertDbRef),
+ Enc = fun(#'OTPCertificate'{tbsCertificate=TBSCert}) ->
+ OTPSubj = TBSCert#'OTPTBSCertificate'.subject,
+ DNEncodedBin = public_key:pkix_encode('Name', OTPSubj, otp),
+ DNEncodedLen = byte_size(DNEncodedBin),
+ <<?UINT16(DNEncodedLen), DNEncodedBin/binary>>
+ end,
+ list_to_binary([Enc(Cert) || {_, Cert} <- Authorities]).
+
+certificate_authorities_from_db(CertDbHandle, CertDbRef) ->
+ ConnectionCerts = fun({{Ref, _, _}, Cert}, Acc) when Ref == CertDbRef ->
+ [Cert | Acc];
+ (_, Acc) ->
+ Acc
+ end,
+ ssl_pkix_db:foldl(ConnectionCerts, [], CertDbHandle).
+
+%%-------------Extension handling --------------------------------
+
+handle_client_hello_extensions(RecordCB, Random,
+ #hello_extensions{renegotiation_info = Info,
+ srp = SRP,
+ next_protocol_negotiation = NextProtocolNegotiation,
+ ec_point_formats = EcPointFormats0,
+ elliptic_curves = EllipticCurves0}, Version,
+ #ssl_options{secure_renegotiate = SecureRenegotation} = Opts,
+ #session{cipher_suite = CipherSuite, compression_method = Compression} = Session0,
+ ConnectionStates0, Renegotiation) ->
+ Session = handle_srp_extension(SRP, Session0),
+ ConnectionStates = handle_renegotiation_extension(server, RecordCB, Version, Info,
+ Random, CipherSuite, Compression,
+ ConnectionStates0, Renegotiation, SecureRenegotation),
+ ProtocolsToAdvertise = handle_next_protocol_extension(NextProtocolNegotiation, Renegotiation, Opts),
+ {EcPointFormats, EllipticCurves} = handle_ecc_extensions(Version, EcPointFormats0, EllipticCurves0),
+ ServerHelloExtensions = #hello_extensions{
+ renegotiation_info = renegotiation_info(RecordCB, server,
+ ConnectionStates, Renegotiation),
+ ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves,
+ next_protocol_negotiation =
+ encode_protocols_advertised_on_server(ProtocolsToAdvertise)
+ },
+ {Session, ConnectionStates, ServerHelloExtensions}.
+
+handle_server_hello_extensions(RecordCB, Random, CipherSuite, Compression,
+ #hello_extensions{renegotiation_info = Info,
+ next_protocol_negotiation = NextProtocolNegotiation}, Version,
+ #ssl_options{secure_renegotiate = SecureRenegotation,
+ next_protocol_selector = NextProtoSelector},
+ ConnectionStates0, Renegotiation) ->
+ ConnectionStates = handle_renegotiation_extension(client, RecordCB, Version, Info, Random, CipherSuite,
+ Compression, ConnectionStates0,
+ Renegotiation, SecureRenegotation),
+ case handle_next_protocol(NextProtocolNegotiation, NextProtoSelector, Renegotiation) of
+ #alert{} = Alert ->
+ Alert;
+ Protocol ->
+ {ConnectionStates, Protocol}
+ end.
+
+select_version(RecordCB, ClientVersion, Versions) ->
+ ServerVersion = RecordCB:highest_protocol_version(Versions),
+ RecordCB:lowest_protocol_version(ClientVersion, ServerVersion).
+
+renegotiation_info(_, client, _, false) ->
+ #renegotiation_info{renegotiated_connection = undefined};
+renegotiation_info(_RecordCB, server, ConnectionStates, false) ->
+ CS = ssl_record:current_connection_state(ConnectionStates, read),
+ case CS#connection_state.secure_renegotiation of
+ true ->
+ #renegotiation_info{renegotiated_connection = ?byte(0)};
+ false ->
+ #renegotiation_info{renegotiated_connection = undefined}
+ end;
+renegotiation_info(_RecordCB, client, ConnectionStates, true) ->
+ CS = ssl_record:current_connection_state(ConnectionStates, read),
+ case CS#connection_state.secure_renegotiation of
+ true ->
+ Data = CS#connection_state.client_verify_data,
+ #renegotiation_info{renegotiated_connection = Data};
+ false ->
+ #renegotiation_info{renegotiated_connection = undefined}
+ end;
+
+renegotiation_info(_RecordCB, server, ConnectionStates, true) ->
+ CS = ssl_record:current_connection_state(ConnectionStates, read),
+ case CS#connection_state.secure_renegotiation of
+ true ->
+ CData = CS#connection_state.client_verify_data,
+ SData =CS#connection_state.server_verify_data,
+ #renegotiation_info{renegotiated_connection = <<CData/binary, SData/binary>>};
+ false ->
+ #renegotiation_info{renegotiated_connection = undefined}
+ end.
+
+handle_renegotiation_info(_RecordCB, _, #renegotiation_info{renegotiated_connection = ?byte(0)},
+ ConnectionStates, false, _, _) ->
+ {ok, ssl_record:set_renegotiation_flag(true, ConnectionStates)};
+
+handle_renegotiation_info(_RecordCB, server, undefined, ConnectionStates, _, _, CipherSuites) ->
+ case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
+ true ->
+ {ok, ssl_record:set_renegotiation_flag(true, ConnectionStates)};
+ false ->
+ {ok, ssl_record:set_renegotiation_flag(false, ConnectionStates)}
+ end;
+
+handle_renegotiation_info(_RecordCB, _, undefined, ConnectionStates, false, _, _) ->
+ {ok, ssl_record:set_renegotiation_flag(false, ConnectionStates)};
+
+handle_renegotiation_info(_RecordCB, client, #renegotiation_info{renegotiated_connection = ClientServerVerify},
+ ConnectionStates, true, _, _) ->
+ CS = ssl_record:current_connection_state(ConnectionStates, read),
+ CData = CS#connection_state.client_verify_data,
+ SData = CS#connection_state.server_verify_data,
+ case <<CData/binary, SData/binary>> == ClientServerVerify of
+ true ->
+ {ok, ConnectionStates};
+ false ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ end;
+handle_renegotiation_info(_RecordCB, server, #renegotiation_info{renegotiated_connection = ClientVerify},
+ ConnectionStates, true, _, CipherSuites) ->
+
+ case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
+ true ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ false ->
+ CS = ssl_record:current_connection_state(ConnectionStates, read),
+ Data = CS#connection_state.client_verify_data,
+ case Data == ClientVerify of
+ true ->
+ {ok, ConnectionStates};
+ false ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ end
+ end;
+
+handle_renegotiation_info(RecordCB, client, undefined, ConnectionStates, true, SecureRenegotation, _) ->
+ handle_renegotiation_info(RecordCB, ConnectionStates, SecureRenegotation);
+
+handle_renegotiation_info(RecordCB, server, undefined, ConnectionStates, true, SecureRenegotation, CipherSuites) ->
+ case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
+ true ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ false ->
+ handle_renegotiation_info(RecordCB, ConnectionStates, SecureRenegotation)
+ end.
+
+handle_renegotiation_info(_RecordCB, ConnectionStates, SecureRenegotation) ->
+ CS = ssl_record:current_connection_state(ConnectionStates, read),
+ case {SecureRenegotation, CS#connection_state.secure_renegotiation} of
+ {_, true} ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ {true, false} ->
+ ?ALERT_REC(?FATAL, ?NO_RENEGOTIATION);
+ {false, false} ->
+ {ok, ConnectionStates}
+ end.
+
+hello_extensions_list(#hello_extensions{renegotiation_info = RenegotiationInfo,
+ srp = SRP,
+ hash_signs = HashSigns,
+ ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves,
+ next_protocol_negotiation = NextProtocolNegotiation}) ->
+ [Ext || Ext <- [RenegotiationInfo, SRP, HashSigns,
+ EcPointFormats,EllipticCurves, NextProtocolNegotiation], Ext =/= undefined].
+
+srp_user(#ssl_options{srp_identity = {UserName, _}}) ->
+ #srp{username = UserName};
+srp_user(_) ->
+ undefined.
+
+ecc_extensions(Module, Version) ->
+ CryptoSupport = proplists:get_value(public_keys, crypto:supports()),
+ case proplists:get_bool(ecdh, CryptoSupport) of
+ true ->
+ EcPointFormats = #ec_point_formats{ec_point_format_list = [?ECPOINT_UNCOMPRESSED]},
+ EllipticCurves = #elliptic_curves{elliptic_curve_list = Module:ecc_curves(Version)},
+ {EcPointFormats, EllipticCurves};
+ _ ->
+ {undefined, undefined}
+ end.
+
+handle_ecc_extensions(Version, EcPointFormats0, EllipticCurves0) ->
+ CryptoSupport = proplists:get_value(public_keys, crypto:supports()),
+ case proplists:get_bool(ecdh, CryptoSupport) of
+ true ->
+ EcPointFormats1 = handle_ecc_point_fmt_extension(EcPointFormats0),
+ EllipticCurves1 = handle_ecc_curves_extension(Version, EllipticCurves0),
+ {EcPointFormats1, EllipticCurves1};
+ _ ->
+ {undefined, undefined}
+ end.
+
+handle_ecc_point_fmt_extension(undefined) ->
+ undefined;
+handle_ecc_point_fmt_extension(_) ->
+ #ec_point_formats{ec_point_format_list = [?ECPOINT_UNCOMPRESSED]}.
+
+handle_ecc_curves_extension(_Version, undefined) ->
+ undefined;
+handle_ecc_curves_extension(Version, _) ->
+ #elliptic_curves{elliptic_curve_list = tls_v1:ecc_curves(Version)}.
+
+advertises_ec_ciphers([]) ->
+ false;
+advertises_ec_ciphers([{ecdh_ecdsa, _,_,_} | _]) ->
+ true;
+advertises_ec_ciphers([{ecdhe_ecdsa, _,_,_} | _]) ->
+ true;
+advertises_ec_ciphers([{ecdh_rsa, _,_,_} | _]) ->
+ true;
+advertises_ec_ciphers([{ecdhe_rsa, _,_,_} | _]) ->
+ true;
+advertises_ec_ciphers([{ecdh_anon, _,_,_} | _]) ->
+ true;
+advertises_ec_ciphers([_| Rest]) ->
+ advertises_ec_ciphers(Rest).
+
+%%--------------------------------------------------------------------
+%%% Internal functions
+%%--------------------------------------------------------------------
+apply_user_fun(Fun, OtpCert, ExtensionOrError, UserState0, SslState) ->
+ case Fun(OtpCert, ExtensionOrError, UserState0) of
+ {valid, UserState} ->
+ {valid, {SslState, UserState}};
+ {fail, _} = Fail ->
+ Fail;
+ {unknown, UserState} ->
+ {unknown, {SslState, UserState}}
+ end.
+path_validation_alert({bad_cert, cert_expired}) ->
+ ?ALERT_REC(?FATAL, ?CERTIFICATE_EXPIRED);
+path_validation_alert({bad_cert, invalid_issuer}) ->
+ ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
+path_validation_alert({bad_cert, invalid_signature}) ->
+ ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
+path_validation_alert({bad_cert, name_not_permitted}) ->
+ ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
+path_validation_alert({bad_cert, unknown_critical_extension}) ->
+ ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE);
+path_validation_alert({bad_cert, cert_revoked}) ->
+ ?ALERT_REC(?FATAL, ?CERTIFICATE_REVOKED);
+path_validation_alert({bad_cert, selfsigned_peer}) ->
+ ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
+path_validation_alert({bad_cert, unknown_ca}) ->
+ ?ALERT_REC(?FATAL, ?UNKNOWN_CA);
+path_validation_alert(_) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE).
+
+encrypted_premaster_secret(Secret, RSAPublicKey) ->
+ try
+ PreMasterSecret = public_key:encrypt_public(Secret, RSAPublicKey,
+ [{rsa_pad,
+ rsa_pkcs1_padding}]),
+ #encrypted_premaster_secret{premaster_secret = PreMasterSecret}
+ catch
+ _:_->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE))
+ end.
+
+digitally_signed({3, Minor}, Hash, HashAlgo, Key) when Minor >= 3 ->
+ public_key:sign({digest, Hash}, HashAlgo, Key);
+digitally_signed(_Version, Hash, HashAlgo, #'DSAPrivateKey'{} = Key) ->
+ public_key:sign({digest, Hash}, HashAlgo, Key);
+digitally_signed(_Version, Hash, _HashAlgo, #'RSAPrivateKey'{} = Key) ->
+ public_key:encrypt_private(Hash, Key,
+ [{rsa_pad, rsa_pkcs1_padding}]);
+digitally_signed(_Version, Hash, HashAlgo, Key) ->
+ public_key:sign({digest, Hash}, HashAlgo, Key).
+
+calc_certificate_verify({3, 0}, HashAlgo, MasterSecret, Handshake) ->
+ ssl_v3:certificate_verify(HashAlgo, MasterSecret, lists:reverse(Handshake));
+calc_certificate_verify({3, N}, HashAlgo, _MasterSecret, Handshake) ->
+ tls_v1:certificate_verify(HashAlgo, N, lists:reverse(Handshake)).
+
+calc_finished({3, 0}, Role, _PrfAlgo, MasterSecret, Handshake) ->
+ ssl_v3:finished(Role, MasterSecret, lists:reverse(Handshake));
+calc_finished({3, N}, Role, PrfAlgo, MasterSecret, Handshake) ->
+ tls_v1:finished(Role, N, PrfAlgo, MasterSecret, lists:reverse(Handshake)).
+
+master_secret(_RecordCB, Version, MasterSecret,
+ #security_parameters{
+ client_random = ClientRandom,
+ server_random = ServerRandom,
+ hash_size = HashSize,
+ prf_algorithm = PrfAlgo,
+ key_material_length = KML,
+ expanded_key_material_length = EKML,
+ iv_size = IVS},
+ ConnectionStates, Role) ->
+ {ClientWriteMacSecret, ServerWriteMacSecret, ClientWriteKey,
+ ServerWriteKey, ClientIV, ServerIV} =
+ setup_keys(Version, PrfAlgo, MasterSecret, ServerRandom,
+ ClientRandom, HashSize, KML, EKML, IVS),
+
+ ConnStates1 = ssl_record:set_master_secret(MasterSecret, ConnectionStates),
+ ConnStates2 =
+ ssl_record:set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret,
+ Role, ConnStates1),
+
+ ClientCipherState = #cipher_state{iv = ClientIV, key = ClientWriteKey},
+ ServerCipherState = #cipher_state{iv = ServerIV, key = ServerWriteKey},
+ {MasterSecret,
+ ssl_record:set_pending_cipher_state(ConnStates2, ClientCipherState,
+ ServerCipherState, Role)}.
+
+setup_keys({3,0}, _PrfAlgo, MasterSecret,
+ ServerRandom, ClientRandom, HashSize, KML, EKML, IVS) ->
+ ssl_v3:setup_keys(MasterSecret, ServerRandom,
+ ClientRandom, HashSize, KML, EKML, IVS);
+
+setup_keys({3,N}, PrfAlgo, MasterSecret,
+ ServerRandom, ClientRandom, HashSize, KML, _EKML, IVS) ->
+ tls_v1:setup_keys(N, PrfAlgo, MasterSecret, ServerRandom, ClientRandom, HashSize,
+ KML, IVS).
+
+calc_master_secret({3,0}, _PrfAlgo, PremasterSecret, ClientRandom, ServerRandom) ->
+ ssl_v3:master_secret(PremasterSecret, ClientRandom, ServerRandom);
+
+calc_master_secret({3,_}, PrfAlgo, PremasterSecret, ClientRandom, ServerRandom) ->
+ tls_v1:master_secret(PrfAlgo, PremasterSecret, ClientRandom, ServerRandom).
+
+handle_renegotiation_extension(Role, RecordCB, Version, Info, Random, CipherSuite, Compression,
+ ConnectionStates0, Renegotiation, SecureRenegotation) ->
+ case handle_renegotiation_info(RecordCB, Role, Info, ConnectionStates0,
+ Renegotiation, SecureRenegotation,
+ [CipherSuite]) of
+ {ok, ConnectionStates} ->
+ hello_pending_connection_states(RecordCB, Role,
+ Version,
+ CipherSuite,
+ Random,
+ Compression,
+ ConnectionStates);
+ #alert{} = Alert ->
+ throw(Alert)
+ end.
+
+%% Update pending connection states with parameters exchanged via
+%% hello messages
+%% NOTE : Role is the role of the receiver of the hello message
+%% currently being processed.
+hello_pending_connection_states(_RecordCB, Role, Version, CipherSuite, Random, Compression,
+ ConnectionStates) ->
+ ReadState =
+ ssl_record:pending_connection_state(ConnectionStates, read),
+ WriteState =
+ ssl_record:pending_connection_state(ConnectionStates, write),
+
+ NewReadSecParams =
+ hello_security_parameters(Role, Version, ReadState, CipherSuite,
+ Random, Compression),
+
+ NewWriteSecParams =
+ hello_security_parameters(Role, Version, WriteState, CipherSuite,
+ Random, Compression),
+
+ ssl_record:set_security_params(NewReadSecParams,
+ NewWriteSecParams,
+ ConnectionStates).
+
+hello_security_parameters(client, Version, ConnectionState, CipherSuite, Random,
+ Compression) ->
+ SecParams = ConnectionState#connection_state.security_parameters,
+ NewSecParams = ssl_cipher:security_parameters(Version, CipherSuite, SecParams),
+ NewSecParams#security_parameters{
+ server_random = Random,
+ compression_algorithm = Compression
+ };
+
+hello_security_parameters(server, Version, ConnectionState, CipherSuite, Random,
+ Compression) ->
+ SecParams = ConnectionState#connection_state.security_parameters,
+ NewSecParams = ssl_cipher:security_parameters(Version, CipherSuite, SecParams),
+ NewSecParams#security_parameters{
+ client_random = Random,
+ compression_algorithm = Compression
+ }.
+
+%%-------------Encode/Decode --------------------------------
+
+encode_server_key(#server_dh_params{dh_p = P, dh_g = G, dh_y = Y}) ->
+ PLen = byte_size(P),
+ GLen = byte_size(G),
+ YLen = byte_size(Y),
+ <<?UINT16(PLen), P/binary, ?UINT16(GLen), G/binary, ?UINT16(YLen), Y/binary>>;
+encode_server_key(#server_ecdh_params{curve = {namedCurve, ECCurve}, public = ECPubKey}) ->
+ %%TODO: support arbitrary keys
+ KLen = size(ECPubKey),
+ <<?BYTE(?NAMED_CURVE), ?UINT16((tls_v1:oid_to_enum(ECCurve))),
+ ?BYTE(KLen), ECPubKey/binary>>;
+encode_server_key(#server_psk_params{hint = PskIdentityHint}) ->
+ Len = byte_size(PskIdentityHint),
+ <<?UINT16(Len), PskIdentityHint/binary>>;
+encode_server_key(Params = #server_dhe_psk_params{hint = undefined}) ->
+ encode_server_key(Params#server_dhe_psk_params{hint = <<>>});
+encode_server_key(#server_dhe_psk_params{
+ hint = PskIdentityHint,
+ dh_params = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y}}) ->
+ Len = byte_size(PskIdentityHint),
+ PLen = byte_size(P),
+ GLen = byte_size(G),
+ YLen = byte_size(Y),
+ <<?UINT16(Len), PskIdentityHint/binary,
+ ?UINT16(PLen), P/binary, ?UINT16(GLen), G/binary, ?UINT16(YLen), Y/binary>>;
+encode_server_key(#server_srp_params{srp_n = N, srp_g = G, srp_s = S, srp_b = B}) ->
+ NLen = byte_size(N),
+ GLen = byte_size(G),
+ SLen = byte_size(S),
+ BLen = byte_size(B),
+ <<?UINT16(NLen), N/binary, ?UINT16(GLen), G/binary,
+ ?BYTE(SLen), S/binary, ?UINT16(BLen), B/binary>>.
+
+encode_client_key(#encrypted_premaster_secret{premaster_secret = PKEPMS},{3, 0}) ->
+ PKEPMS;
+encode_client_key(#encrypted_premaster_secret{premaster_secret = PKEPMS}, _) ->
+ PKEPMSLen = byte_size(PKEPMS),
+ <<?UINT16(PKEPMSLen), PKEPMS/binary>>;
+encode_client_key(#client_diffie_hellman_public{dh_public = DHPublic}, _) ->
+ Len = byte_size(DHPublic),
+ <<?UINT16(Len), DHPublic/binary>>;
+encode_client_key(#client_ec_diffie_hellman_public{dh_public = DHPublic}, _) ->
+ Len = byte_size(DHPublic),
+ <<?BYTE(Len), DHPublic/binary>>;
+encode_client_key(#client_psk_identity{identity = undefined}, _) ->
+ Id = <<"psk_identity">>,
+ Len = byte_size(Id),
+ <<?UINT16(Len), Id/binary>>;
+encode_client_key(#client_psk_identity{identity = Id}, _) ->
+ Len = byte_size(Id),
+ <<?UINT16(Len), Id/binary>>;
+encode_client_key(Identity = #client_dhe_psk_identity{identity = undefined}, Version) ->
+ encode_client_key(Identity#client_dhe_psk_identity{identity = <<"psk_identity">>}, Version);
+encode_client_key(#client_dhe_psk_identity{identity = Id, dh_public = DHPublic}, _) ->
+ Len = byte_size(Id),
+ DHLen = byte_size(DHPublic),
+ <<?UINT16(Len), Id/binary, ?UINT16(DHLen), DHPublic/binary>>;
+encode_client_key(Identity = #client_rsa_psk_identity{identity = undefined}, Version) ->
+ encode_client_key(Identity#client_rsa_psk_identity{identity = <<"psk_identity">>}, Version);
+encode_client_key(#client_rsa_psk_identity{identity = Id, exchange_keys = ExchangeKeys}, Version) ->
+ EncPMS = encode_client_key(ExchangeKeys, Version),
+ Len = byte_size(Id),
+ <<?UINT16(Len), Id/binary, EncPMS/binary>>;
+encode_client_key(#client_srp_public{srp_a = A}, _) ->
+ Len = byte_size(A),
+ <<?UINT16(Len), A/binary>>.
+
+enc_sign({_, anon}, _Sign, _Version) ->
+ <<>>;
+enc_sign({HashAlg, SignAlg}, Signature, _Version = {Major, Minor})
+ when Major == 3, Minor >= 3->
+ SignLen = byte_size(Signature),
+ HashSign = enc_hashsign(HashAlg, SignAlg),
+ <<HashSign/binary, ?UINT16(SignLen), Signature/binary>>;
+enc_sign(_HashSign, Sign, _Version) ->
+ SignLen = byte_size(Sign),
+ <<?UINT16(SignLen), Sign/binary>>.
+
+enc_hashsign(HashAlgo, SignAlgo) ->
+ Hash = ssl_cipher:hash_algorithm(HashAlgo),
+ Sign = ssl_cipher:sign_algorithm(SignAlgo),
+ <<?BYTE(Hash), ?BYTE(Sign)>>.
+
+encode_protocol(Protocol, Acc) ->
+ Len = byte_size(Protocol),
+ <<Acc/binary, ?BYTE(Len), Protocol/binary>>.
+
+dec_client_key(PKEPMS, ?KEY_EXCHANGE_RSA, {3, 0}) ->
+ #encrypted_premaster_secret{premaster_secret = PKEPMS};
+dec_client_key(<<?UINT16(_), PKEPMS/binary>>, ?KEY_EXCHANGE_RSA, _) ->
+ #encrypted_premaster_secret{premaster_secret = PKEPMS};
+dec_client_key(<<>>, ?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
+ throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
+dec_client_key(<<?UINT16(DH_YLen), DH_Y:DH_YLen/binary>>,
+ ?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
+ #client_diffie_hellman_public{dh_public = DH_Y};
+dec_client_key(<<>>, ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
+ throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
+dec_client_key(<<?BYTE(DH_YLen), DH_Y:DH_YLen/binary>>,
+ ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
+ #client_ec_diffie_hellman_public{dh_public = DH_Y};
+dec_client_key(<<?UINT16(Len), Id:Len/binary>>,
+ ?KEY_EXCHANGE_PSK, _) ->
+ #client_psk_identity{identity = Id};
+dec_client_key(<<?UINT16(Len), Id:Len/binary,
+ ?UINT16(DH_YLen), DH_Y:DH_YLen/binary>>,
+ ?KEY_EXCHANGE_DHE_PSK, _) ->
+ #client_dhe_psk_identity{identity = Id, dh_public = DH_Y};
+dec_client_key(<<?UINT16(Len), Id:Len/binary, PKEPMS/binary>>,
+ ?KEY_EXCHANGE_RSA_PSK, {3, 0}) ->
+ #client_rsa_psk_identity{identity = Id,
+ exchange_keys = #encrypted_premaster_secret{premaster_secret = PKEPMS}};
+dec_client_key(<<?UINT16(Len), Id:Len/binary, ?UINT16(_), PKEPMS/binary>>,
+ ?KEY_EXCHANGE_RSA_PSK, _) ->
+ #client_rsa_psk_identity{identity = Id,
+ exchange_keys = #encrypted_premaster_secret{premaster_secret = PKEPMS}};
+dec_client_key(<<?UINT16(ALen), A:ALen/binary>>,
+ ?KEY_EXCHANGE_SRP, _) ->
+ #client_srp_public{srp_a = A}.
+
+dec_server_key_params(Len, Keys, Version) ->
+ <<Params:Len/bytes, Signature/binary>> = Keys,
+ dec_server_key_signature(Params, Signature, Version).
+
+dec_server_key_signature(Params, <<?BYTE(HashAlgo), ?BYTE(SignAlgo),
+ ?UINT16(0)>>, {Major, Minor})
+ when Major == 3, Minor >= 3 ->
+ HashSign = {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)},
+ {Params, HashSign, <<>>};
+dec_server_key_signature(Params, <<?BYTE(HashAlgo), ?BYTE(SignAlgo),
+ ?UINT16(Len), Signature:Len/binary>>, {Major, Minor})
+ when Major == 3, Minor >= 3 ->
+ HashSign = {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)},
+ {Params, HashSign, Signature};
+dec_server_key_signature(Params, <<>>, _) ->
+ {Params, {null, anon}, <<>>};
+dec_server_key_signature(Params, <<?UINT16(0)>>, _) ->
+ {Params, {null, anon}, <<>>};
+dec_server_key_signature(Params, <<?UINT16(Len), Signature:Len/binary>>, _) ->
+ {Params, undefined, Signature};
+dec_server_key_signature(_, _, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+
+dec_hello_extensions(<<>>, Acc) ->
+ Acc;
+dec_hello_extensions(<<?UINT16(?NEXTPROTONEG_EXT), ?UINT16(Len), ExtensionData:Len/binary, Rest/binary>>, Acc) ->
+ NextP = #next_protocol_negotiation{extension_data = ExtensionData},
+ dec_hello_extensions(Rest, Acc#hello_extensions{next_protocol_negotiation = NextP});
+dec_hello_extensions(<<?UINT16(?RENEGOTIATION_EXT), ?UINT16(Len), Info:Len/binary, Rest/binary>>, Acc) ->
+ RenegotiateInfo = case Len of
+ 1 -> % Initial handshake
+ Info; % should be <<0>> will be matched in handle_renegotiation_info
+ _ ->
+ VerifyLen = Len - 1,
+ <<?BYTE(VerifyLen), VerifyInfo/binary>> = Info,
+ VerifyInfo
+ end,
+ dec_hello_extensions(Rest, Acc#hello_extensions{renegotiation_info =
+ #renegotiation_info{renegotiated_connection =
+ RenegotiateInfo}});
+
+dec_hello_extensions(<<?UINT16(?SRP_EXT), ?UINT16(Len), ?BYTE(SRPLen), SRP:SRPLen/binary, Rest/binary>>, Acc)
+ when Len == SRPLen + 2 ->
+ dec_hello_extensions(Rest, Acc#hello_extensions{srp = #srp{username = SRP}});
+
+dec_hello_extensions(<<?UINT16(?SIGNATURE_ALGORITHMS_EXT), ?UINT16(Len),
+ ExtData:Len/binary, Rest/binary>>, Acc) ->
+ SignAlgoListLen = Len - 2,
+ <<?UINT16(SignAlgoListLen), SignAlgoList/binary>> = ExtData,
+ HashSignAlgos = [{ssl_cipher:hash_algorithm(Hash), ssl_cipher:sign_algorithm(Sign)} ||
+ <<?BYTE(Hash), ?BYTE(Sign)>> <= SignAlgoList],
+ dec_hello_extensions(Rest, Acc#hello_extensions{hash_signs =
+ #hash_sign_algos{hash_sign_algos = HashSignAlgos}});
+
+dec_hello_extensions(<<?UINT16(?ELLIPTIC_CURVES_EXT), ?UINT16(Len),
+ ExtData:Len/binary, Rest/binary>>, Acc) ->
+ <<?UINT16(_), EllipticCurveList/binary>> = ExtData,
+ EllipticCurves = [tls_v1:enum_to_oid(X) || <<X:16>> <= EllipticCurveList],
+ dec_hello_extensions(Rest, Acc#hello_extensions{elliptic_curves =
+ #elliptic_curves{elliptic_curve_list =
+ EllipticCurves}});
+dec_hello_extensions(<<?UINT16(?EC_POINT_FORMATS_EXT), ?UINT16(Len),
+ ExtData:Len/binary, Rest/binary>>, Acc) ->
+ <<?BYTE(_), ECPointFormatList/binary>> = ExtData,
+ ECPointFormats = binary_to_list(ECPointFormatList),
+ dec_hello_extensions(Rest, Acc#hello_extensions{ec_point_formats =
+ #ec_point_formats{ec_point_format_list =
+ ECPointFormats}});
+%% Ignore data following the ClientHello (i.e.,
+%% extensions) if not understood.
+
+dec_hello_extensions(<<?UINT16(_), ?UINT16(Len), _Unknown:Len/binary, Rest/binary>>, Acc) ->
+ dec_hello_extensions(Rest, Acc);
+%% This theoretically should not happen if the protocol is followed, but if it does it is ignored.
+dec_hello_extensions(_, Acc) ->
+ Acc.
+
+dec_hashsign(<<?BYTE(HashAlgo), ?BYTE(SignAlgo)>>) ->
+ {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)}.
+
+decode_next_protocols({next_protocol_negotiation, Protocols}) ->
+ decode_next_protocols(Protocols, []).
+decode_next_protocols(<<>>, Acc) ->
+ lists:reverse(Acc);
+decode_next_protocols(<<?BYTE(Len), Protocol:Len/binary, Rest/binary>>, Acc) ->
+ case Len of
+ 0 ->
+ {error, invalid_next_protocols};
+ _ ->
+ decode_next_protocols(Rest, [Protocol|Acc])
+ end;
+decode_next_protocols(_Bytes, _Acc) ->
+ {error, invalid_next_protocols}.
+
+%% encode/decode stream of certificate data to/from list of certificate data
+certs_to_list(ASN1Certs) ->
+ certs_to_list(ASN1Certs, []).
+
+certs_to_list(<<?UINT24(CertLen), Cert:CertLen/binary, Rest/binary>>, Acc) ->
+ certs_to_list(Rest, [Cert | Acc]);
+certs_to_list(<<>>, Acc) ->
+ lists:reverse(Acc, []).
+
+certs_from_list(ACList) ->
+ list_to_binary([begin
+ CertLen = byte_size(Cert),
+ <<?UINT24(CertLen), Cert/binary>>
+ end || Cert <- ACList]).
+from_3bytes(Bin3) ->
+ from_3bytes(Bin3, []).
+
+from_3bytes(<<>>, Acc) ->
+ lists:reverse(Acc);
+from_3bytes(<<?UINT24(N), Rest/binary>>, Acc) ->
+ from_3bytes(Rest, [?uint16(N) | Acc]).
+
+from_2bytes(Bin2) ->
+ from_2bytes(Bin2, []).
+
+from_2bytes(<<>>, Acc) ->
+ lists:reverse(Acc);
+from_2bytes(<<?UINT16(N), Rest/binary>>, Acc) ->
+ from_2bytes(Rest, [?uint16(N) | Acc]).
+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(Alg) when Alg == ecdhe_rsa; Alg == ecdh_rsa;
+ Alg == ecdhe_ecdsa; Alg == ecdh_ecdsa;
+ Alg == ecdh_anon ->
+ ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN;
+key_exchange_alg(psk) ->
+ ?KEY_EXCHANGE_PSK;
+key_exchange_alg(dhe_psk) ->
+ ?KEY_EXCHANGE_DHE_PSK;
+key_exchange_alg(rsa_psk) ->
+ ?KEY_EXCHANGE_RSA_PSK;
+key_exchange_alg(Alg)
+ when Alg == srp_rsa; Alg == srp_dss; Alg == srp_anon ->
+ ?KEY_EXCHANGE_SRP;
+key_exchange_alg(_) ->
+ ?NULL.
+
+%%-------------Extension handling --------------------------------
+
+handle_next_protocol(undefined,
+ _NextProtocolSelector, _Renegotiating) ->
+ undefined;
+
+handle_next_protocol(#next_protocol_negotiation{} = NextProtocols,
+ NextProtocolSelector, Renegotiating) ->
+
+ case next_protocol_extension_allowed(NextProtocolSelector, Renegotiating) of
+ true ->
+ select_next_protocol(decode_next_protocols(NextProtocols), NextProtocolSelector);
+ false ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE) % unexpected next protocol extension
+ end.
+
+
+handle_next_protocol_extension(NextProtocolNegotiation, Renegotiation, SslOpts)->
+ case handle_next_protocol_on_server(NextProtocolNegotiation, Renegotiation, SslOpts) of
+ #alert{} = Alert ->
+ Alert;
+ ProtocolsToAdvertise ->
+ ProtocolsToAdvertise
+ end.
+
+handle_next_protocol_on_server(undefined, _Renegotiation, _SslOpts) ->
+ undefined;
+
+handle_next_protocol_on_server(#next_protocol_negotiation{extension_data = <<>>},
+ false, #ssl_options{next_protocols_advertised = Protocols}) ->
+ Protocols;
+
+handle_next_protocol_on_server(_Hello, _Renegotiation, _SSLOpts) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE). % unexpected next protocol extension
+
+next_protocol_extension_allowed(NextProtocolSelector, Renegotiating) ->
+ NextProtocolSelector =/= undefined andalso not Renegotiating.
+
+select_next_protocol({error, _Reason}, _NextProtocolSelector) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+select_next_protocol(Protocols, NextProtocolSelector) ->
+ case NextProtocolSelector(Protocols) of
+ ?NO_PROTOCOL ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ Protocol when is_binary(Protocol) ->
+ Protocol
+ end.
+
+handle_srp_extension(undefined, Session) ->
+ Session;
+handle_srp_extension(#srp{username = Username}, Session) ->
+ Session#session{srp_username = Username}.
+
+%%-------------Misc --------------------------------
+
+select_cipher_suite([], _) ->
+ no_suite;
+select_cipher_suite([Suite | ClientSuites], SupportedSuites) ->
+ case is_member(Suite, SupportedSuites) of
+ true ->
+ Suite;
+ false ->
+ select_cipher_suite(ClientSuites, SupportedSuites)
+ end.
+
+int_to_bin(I) ->
+ L = (length(integer_to_list(I, 16)) + 1) div 2,
+ <<I:(L*8)>>.
+
+is_member(Suite, SupportedSuites) ->
+ lists:member(Suite, SupportedSuites).
+
+select_compression(_CompressionMetodes) ->
+ ?NULL.
+
+-define(TLSEXT_SIGALG_RSA(MD), {MD, rsa}).
+-define(TLSEXT_SIGALG_DSA(MD), {MD, dsa}).
+-define(TLSEXT_SIGALG_ECDSA(MD), {MD, ecdsa}).
+
+-define(TLSEXT_SIGALG(MD), ?TLSEXT_SIGALG_ECDSA(MD), ?TLSEXT_SIGALG_RSA(MD)).
+
+advertised_hash_signs({Major, Minor}) when Major >= 3 andalso Minor >= 3 ->
+ HashSigns = [?TLSEXT_SIGALG(sha512),
+ ?TLSEXT_SIGALG(sha384),
+ ?TLSEXT_SIGALG(sha256),
+ ?TLSEXT_SIGALG(sha224),
+ ?TLSEXT_SIGALG(sha),
+ ?TLSEXT_SIGALG_DSA(sha),
+ ?TLSEXT_SIGALG_RSA(md5)],
+ CryptoSupport = crypto:supports(),
+ HasECC = proplists:get_bool(ecdsa, proplists:get_value(public_keys, CryptoSupport)),
+ Hashs = proplists:get_value(hashs, CryptoSupport),
+ #hash_sign_algos{hash_sign_algos =
+ lists:filter(fun({Hash, ecdsa}) -> HasECC andalso proplists:get_bool(Hash, Hashs);
+ ({Hash, _}) -> proplists:get_bool(Hash, Hashs) end, HashSigns)};
+advertised_hash_signs(_) ->
+ undefined.
diff --git a/lib/ssl/src/ssl_handshake.hrl b/lib/ssl/src/ssl_handshake.hrl
index eb1a1dbf62..3a3ad8cf35 100644
--- a/lib/ssl/src/ssl_handshake.hrl
+++ b/lib/ssl/src/ssl_handshake.hrl
@@ -28,11 +28,6 @@
-include_lib("public_key/include/public_key.hrl").
--type oid() :: tuple().
--type public_key_params() :: #'Dss-Parms'{} | {namedCurve, oid()} | #'ECParameters'{} | term().
--type public_key_info() :: {oid(), #'RSAPublicKey'{} | integer() | #'ECPoint'{}, public_key_params()}.
--type tls_handshake_history() :: {[binary()], [binary()]}.
-
-define(NO_PROTOCOL, <<>>).
%% Signature algorithms
@@ -96,17 +91,22 @@
%% client_hello defined in tls_handshake.hrl and dtls_handshake.hrl
+-record(hello_extensions, {
+ renegotiation_info,
+ hash_signs, % supported combinations of hashes/signature algos
+ next_protocol_negotiation = undefined, % [binary()]
+ srp,
+ ec_point_formats,
+ elliptic_curves
+ }).
+
-record(server_hello, {
server_version,
random,
session_id, % opaque SessionID<0..32>
cipher_suite, % cipher_suites
compression_method, % compression_method
- renegotiation_info,
- hash_signs, % supported combinations of hashes/signature algos
- ec_point_formats, % supported ec point formats
- elliptic_curves, % supported elliptic curver
- next_protocol_negotiation = undefined % [binary()]
+ extensions
}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -337,6 +337,20 @@
-define(EXPLICIT_CHAR2, 2).
-define(NAMED_CURVE, 3).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Dialyzer types
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+-type oid() :: tuple().
+-type public_key_params() :: #'Dss-Parms'{} | {namedCurve, oid()} | #'ECParameters'{} | term().
+-type public_key_info() :: {oid(), #'RSAPublicKey'{} | integer() | #'ECPoint'{}, public_key_params()}.
+-type tls_handshake_history() :: {[binary()], [binary()]}.
+
+-type ssl_handshake() :: #server_hello{} | #server_hello_done{} | #certificate{} | #certificate_request{} |
+ #client_key_exchange{} | #finished{} | #certificate_verify{} |
+ #hello_request{} | #next_protocol{}.
+
+
-endif. % -ifdef(ssl_handshake).
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 14db4a6067..96e3280fb5 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -37,7 +37,6 @@
-type tls_atom_version() :: sslv3 | tlsv1 | 'tlsv1.1' | 'tlsv1.2'.
-type certdb_ref() :: reference().
-type db_handle() :: term().
--type key_algo() :: null | rsa | dhe_rsa | dhe_dss | ecdhe_ecdsa| ecdh_ecdsa | ecdh_rsa| srp_rsa| srp_dss | psk | dhe_psk | rsa_psk | dh_anon | ecdh_anon | srp_anon.
-type der_cert() :: binary().
-type private_key() :: #'RSAPrivateKey'{} | #'DSAPrivateKey'{} | #'ECPrivateKey'{}.
-type issuer() :: tuple().
@@ -50,6 +49,7 @@
-define(UINT16(X), X:16/unsigned-big-integer).
-define(UINT24(X), X:24/unsigned-big-integer).
-define(UINT32(X), X:32/unsigned-big-integer).
+-define(UINT48(X), X:48/unsigned-big-integer).
-define(UINT64(X), X:64/unsigned-big-integer).
-define(STRING(X), ?UINT32((size(X))), (X)/binary).
@@ -57,6 +57,7 @@
-define(uint16(X), << ?UINT16(X) >> ).
-define(uint24(X), << ?UINT24(X) >> ).
-define(uint32(X), << ?UINT32(X) >> ).
+-define(uint48(X), << ?UINT48(X) >> ).
-define(uint64(X), << ?UINT64(X) >> ).
-define(CDR_MAGIC, "GIOP").
@@ -71,6 +72,8 @@
-define(ALL_SUPPORTED_VERSIONS, ['tlsv1.2', 'tlsv1.1', tlsv1, sslv3]).
-define(MIN_SUPPORTED_VERSIONS, ['tlsv1.1', tlsv1, sslv3]).
+-define(ALL_DATAGRAM_SUPPORTED_VERSIONS, ['dtlsv1.2', dtlsv1]).
+-define(MIN_DATAGRAM_SUPPORTED_VERSIONS, ['dtlsv1.2', dtlsv1]).
-record(ssl_options, {
versions, % 'tlsv1.2' | 'tlsv1.1' | tlsv1 | sslv3
@@ -111,7 +114,8 @@
%% This option should only be set to true by inet_tls_dist
erl_dist = false,
next_protocols_advertised = undefined, %% [binary()],
- next_protocol_selector = undefined %% fun([binary()]) -> binary())
+ next_protocol_selector = undefined, %% fun([binary()]) -> binary())
+ log_alert
}).
-record(socket_options,
@@ -123,6 +127,10 @@
active = true
}).
+-type state_name() :: hello | abbreviated | certify | cipher | connection.
+-type gen_fsm_state_return() :: {next_state, state_name(), term()} |
+ {next_state, state_name(), term(), timeout()} |
+ {stop, term(), term()}.
-endif. % -ifdef(ssl_internal).
diff --git a/lib/ssl/src/ssl_manager.erl b/lib/ssl/src/ssl_manager.erl
index 7af4a68461..4d5eaeb607 100644
--- a/lib/ssl/src/ssl_manager.erl
+++ b/lib/ssl/src/ssl_manager.erl
@@ -30,7 +30,7 @@
lookup_trusted_cert/4,
new_session_id/1, clean_cert_db/2,
register_session/2, register_session/3, invalidate_session/2,
- invalidate_session/3, clear_pem_cache/0]).
+ invalidate_session/3, clear_pem_cache/0, manager_name/1]).
% Spawn export
-export([init_session_validator/1]).
@@ -64,6 +64,18 @@
%%====================================================================
%% API
%%====================================================================
+
+%%--------------------------------------------------------------------
+-spec manager_name(normal | dist) -> atom().
+%%
+%% Description: Returns the registered name of the ssl manager process
+%% in the operation modes 'normal' and 'dist'.
+%%--------------------------------------------------------------------
+manager_name(normal) ->
+ ?MODULE;
+manager_name(dist) ->
+ list_to_atom(atom_to_list(?MODULE) ++ "dist").
+
%%--------------------------------------------------------------------
-spec start_link(list()) -> {ok, pid()} | ignore | {error, term()}.
%%
@@ -71,7 +83,8 @@
%% and certificate caching.
%%--------------------------------------------------------------------
start_link(Opts) ->
- gen_server:start_link({local, ?MODULE}, ?MODULE, [?MODULE, Opts], []).
+ DistMangerName = manager_name(normal),
+ gen_server:start_link({local, DistMangerName}, ?MODULE, [DistMangerName, Opts], []).
%%--------------------------------------------------------------------
-spec start_link_dist(list()) -> {ok, pid()} | ignore | {error, term()}.
@@ -80,7 +93,8 @@ start_link(Opts) ->
%% be used by the erlang distribution. Note disables soft upgrade!
%%--------------------------------------------------------------------
start_link_dist(Opts) ->
- gen_server:start_link({local, ssl_manager_dist}, ?MODULE, [ssl_manager_dist, Opts], []).
+ DistMangerName = manager_name(dist),
+ gen_server:start_link({local, DistMangerName}, ?MODULE, [DistMangerName, Opts], []).
%%--------------------------------------------------------------------
-spec connection_init(binary()| {der, list()}, client | server) ->
@@ -100,7 +114,7 @@ connection_init(Trustedcerts, Role) ->
%%--------------------------------------------------------------------
-spec cache_pem_file(binary(), term()) -> {ok, term()} | {error, reason()}.
%%
-%% Description: Cach a pem file and return its content.
+%% Description: Cache a pem file and return its content.
%%--------------------------------------------------------------------
cache_pem_file(File, DbHandle) ->
MD5 = crypto:hash(md5, File),
@@ -120,7 +134,7 @@ cache_pem_file(File, DbHandle) ->
%%--------------------------------------------------------------------
clear_pem_cache() ->
%% Not supported for distribution at the moement, should it be?
- put(ssl_manager, ssl_manager),
+ put(ssl_manager, manager_name(normal)),
call(unconditionally_clear_pem_cache).
%%--------------------------------------------------------------------
diff --git a/lib/ssl/src/ssl_record.erl b/lib/ssl/src/ssl_record.erl
new file mode 100644
index 0000000000..50a45dc16b
--- /dev/null
+++ b/lib/ssl/src/ssl_record.erl
@@ -0,0 +1,439 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+
+%%----------------------------------------------------------------------
+%% Purpose: Handle TLS/SSL/DTLS record protocol. Note epoch is only
+%% used by DTLS but handled here so we can avoid code duplication.
+%%----------------------------------------------------------------------
+
+-module(ssl_record).
+
+-include("ssl_record.hrl").
+-include("ssl_internal.hrl").
+-include("ssl_cipher.hrl").
+-include("ssl_alert.hrl").
+
+%% Connection state handling
+-export([init_connection_states/1,
+ current_connection_state/2, pending_connection_state/2,
+ activate_pending_connection_state/2,
+ set_security_params/3,
+ set_mac_secret/4,
+ set_master_secret/2,
+ set_pending_cipher_state/4,
+ set_renegotiation_flag/2,
+ set_client_verify_data/3,
+ set_server_verify_data/3]).
+
+%% Encoding records
+-export([encode_handshake/3, encode_alert_record/3,
+ encode_change_cipher_spec/2, encode_data/3]).
+
+%% Compression
+-export([compress/3, uncompress/3, compressions/0]).
+
+-export([is_correct_mac/2]).
+
+%%====================================================================
+%% Internal application API
+%%====================================================================
+
+%%--------------------------------------------------------------------
+-spec init_connection_states(client | server) -> #connection_states{}.
+%%
+%% Description: Creates a connection_states record with appropriate
+%% values for the initial SSL connection setup.
+%%--------------------------------------------------------------------
+init_connection_states(Role) ->
+ ConnectionEnd = record_protocol_role(Role),
+ Current = initial_connection_state(ConnectionEnd),
+ Pending = empty_connection_state(ConnectionEnd),
+ #connection_states{current_read = Current,
+ pending_read = Pending,
+ current_write = Current,
+ pending_write = Pending
+ }.
+
+%%--------------------------------------------------------------------
+-spec current_connection_state(#connection_states{}, read | write) ->
+ #connection_state{}.
+%%
+%% Description: Returns the instance of the connection_state record
+%% that is currently defined as the current conection state.
+%%--------------------------------------------------------------------
+current_connection_state(#connection_states{current_read = Current},
+ read) ->
+ Current;
+current_connection_state(#connection_states{current_write = Current},
+ write) ->
+ Current.
+
+%%--------------------------------------------------------------------
+-spec pending_connection_state(#connection_states{}, read | write) ->
+ term().
+%%
+%% Description: Returns the instance of the connection_state record
+%% that is currently defined as the pending conection state.
+%%--------------------------------------------------------------------
+pending_connection_state(#connection_states{pending_read = Pending},
+ read) ->
+ Pending;
+pending_connection_state(#connection_states{pending_write = Pending},
+ write) ->
+ Pending.
+
+
+%%--------------------------------------------------------------------
+-spec activate_pending_connection_state(#connection_states{}, read | write) ->
+ #connection_states{}.
+%%
+%% Description: Creates a new instance of the connection_states record
+%% where the pending state of <Type> has been activated.
+%%--------------------------------------------------------------------
+activate_pending_connection_state(States =
+ #connection_states{current_read = Current,
+ pending_read = Pending},
+ read) ->
+ NewCurrent = Pending#connection_state{epoch = dtls_next_epoch(Current),
+ sequence_number = 0},
+ SecParams = Pending#connection_state.security_parameters,
+ ConnectionEnd = SecParams#security_parameters.connection_end,
+ EmptyPending = empty_connection_state(ConnectionEnd),
+ SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
+ NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
+ States#connection_states{current_read = NewCurrent,
+ pending_read = NewPending
+ };
+
+activate_pending_connection_state(States =
+ #connection_states{current_write = Current,
+ pending_write = Pending},
+ write) ->
+ NewCurrent = Pending#connection_state{epoch = dtls_next_epoch(Current),
+ sequence_number = 0},
+ SecParams = Pending#connection_state.security_parameters,
+ ConnectionEnd = SecParams#security_parameters.connection_end,
+ EmptyPending = empty_connection_state(ConnectionEnd),
+ SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
+ NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
+ States#connection_states{current_write = NewCurrent,
+ pending_write = NewPending
+ }.
+
+
+%%--------------------------------------------------------------------
+-spec set_security_params(#security_parameters{}, #security_parameters{},
+ #connection_states{}) -> #connection_states{}.
+%%
+%% Description: Creates a new instance of the connection_states record
+%% where the pending states gets its security parameters updated.
+%%--------------------------------------------------------------------
+set_security_params(ReadParams, WriteParams, States =
+ #connection_states{pending_read = Read,
+ pending_write = Write}) ->
+ States#connection_states{pending_read =
+ Read#connection_state{security_parameters =
+ ReadParams},
+ pending_write =
+ Write#connection_state{security_parameters =
+ WriteParams}
+ }.
+%%--------------------------------------------------------------------
+-spec set_mac_secret(binary(), binary(), client | server,
+ #connection_states{}) -> #connection_states{}.
+%%
+%% Description: update the mac_secret field in pending connection states
+%%--------------------------------------------------------------------
+set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, client, States) ->
+ set_mac_secret(ServerWriteMacSecret, ClientWriteMacSecret, States);
+set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, server, States) ->
+ set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, States).
+
+set_mac_secret(ReadMacSecret, WriteMacSecret,
+ States = #connection_states{pending_read = Read,
+ pending_write = Write}) ->
+ States#connection_states{
+ pending_read = Read#connection_state{mac_secret = ReadMacSecret},
+ pending_write = Write#connection_state{mac_secret = WriteMacSecret}
+ }.
+
+
+%%--------------------------------------------------------------------
+-spec set_master_secret(binary(), #connection_states{}) -> #connection_states{}.
+%%
+%% Description: Set master_secret in pending connection states
+%%--------------------------------------------------------------------
+set_master_secret(MasterSecret,
+ States = #connection_states{pending_read = Read,
+ pending_write = Write}) ->
+ ReadSecPar = Read#connection_state.security_parameters,
+ Read1 = Read#connection_state{
+ security_parameters = ReadSecPar#security_parameters{
+ master_secret = MasterSecret}},
+ WriteSecPar = Write#connection_state.security_parameters,
+ Write1 = Write#connection_state{
+ security_parameters = WriteSecPar#security_parameters{
+ master_secret = MasterSecret}},
+ States#connection_states{pending_read = Read1, pending_write = Write1}.
+
+%%--------------------------------------------------------------------
+-spec set_renegotiation_flag(boolean(), #connection_states{}) -> #connection_states{}.
+%%
+%% Description: Set secure_renegotiation in pending connection states
+%%--------------------------------------------------------------------
+set_renegotiation_flag(Flag, #connection_states{
+ current_read = CurrentRead0,
+ current_write = CurrentWrite0,
+ pending_read = PendingRead0,
+ pending_write = PendingWrite0}
+ = ConnectionStates) ->
+ CurrentRead = CurrentRead0#connection_state{secure_renegotiation = Flag},
+ CurrentWrite = CurrentWrite0#connection_state{secure_renegotiation = Flag},
+ PendingRead = PendingRead0#connection_state{secure_renegotiation = Flag},
+ PendingWrite = PendingWrite0#connection_state{secure_renegotiation = Flag},
+ ConnectionStates#connection_states{current_read = CurrentRead,
+ current_write = CurrentWrite,
+ pending_read = PendingRead,
+ pending_write = PendingWrite}.
+
+%%--------------------------------------------------------------------
+-spec set_client_verify_data(current_read | current_write | current_both,
+ binary(), #connection_states{})->
+ #connection_states{}.
+%%
+%% Description: Set verify data in connection states.
+%%--------------------------------------------------------------------
+set_client_verify_data(current_read, Data,
+ #connection_states{current_read = CurrentRead0,
+ pending_write = PendingWrite0}
+ = ConnectionStates) ->
+ CurrentRead = CurrentRead0#connection_state{client_verify_data = Data},
+ PendingWrite = PendingWrite0#connection_state{client_verify_data = Data},
+ ConnectionStates#connection_states{current_read = CurrentRead,
+ pending_write = PendingWrite};
+set_client_verify_data(current_write, Data,
+ #connection_states{pending_read = PendingRead0,
+ current_write = CurrentWrite0}
+ = ConnectionStates) ->
+ PendingRead = PendingRead0#connection_state{client_verify_data = Data},
+ CurrentWrite = CurrentWrite0#connection_state{client_verify_data = Data},
+ ConnectionStates#connection_states{pending_read = PendingRead,
+ current_write = CurrentWrite};
+set_client_verify_data(current_both, Data,
+ #connection_states{current_read = CurrentRead0,
+ current_write = CurrentWrite0}
+ = ConnectionStates) ->
+ CurrentRead = CurrentRead0#connection_state{client_verify_data = Data},
+ CurrentWrite = CurrentWrite0#connection_state{client_verify_data = Data},
+ ConnectionStates#connection_states{current_read = CurrentRead,
+ current_write = CurrentWrite}.
+%%--------------------------------------------------------------------
+-spec set_server_verify_data(current_read | current_write | current_both,
+ binary(), #connection_states{})->
+ #connection_states{}.
+%%
+%% Description: Set verify data in pending connection states.
+%%--------------------------------------------------------------------
+set_server_verify_data(current_write, Data,
+ #connection_states{pending_read = PendingRead0,
+ current_write = CurrentWrite0}
+ = ConnectionStates) ->
+ PendingRead = PendingRead0#connection_state{server_verify_data = Data},
+ CurrentWrite = CurrentWrite0#connection_state{server_verify_data = Data},
+ ConnectionStates#connection_states{pending_read = PendingRead,
+ current_write = CurrentWrite};
+
+set_server_verify_data(current_read, Data,
+ #connection_states{current_read = CurrentRead0,
+ pending_write = PendingWrite0}
+ = ConnectionStates) ->
+ CurrentRead = CurrentRead0#connection_state{server_verify_data = Data},
+ PendingWrite = PendingWrite0#connection_state{server_verify_data = Data},
+ ConnectionStates#connection_states{current_read = CurrentRead,
+ pending_write = PendingWrite};
+
+set_server_verify_data(current_both, Data,
+ #connection_states{current_read = CurrentRead0,
+ current_write = CurrentWrite0}
+ = ConnectionStates) ->
+ CurrentRead = CurrentRead0#connection_state{server_verify_data = Data},
+ CurrentWrite = CurrentWrite0#connection_state{server_verify_data = Data},
+ ConnectionStates#connection_states{current_read = CurrentRead,
+ current_write = CurrentWrite}.
+%%--------------------------------------------------------------------
+-spec set_pending_cipher_state(#connection_states{}, #cipher_state{},
+ #cipher_state{}, client | server) ->
+ #connection_states{}.
+%%
+%% Description: Set the cipher state in the specified pending connection state.
+%%--------------------------------------------------------------------
+set_pending_cipher_state(#connection_states{pending_read = Read,
+ pending_write = Write} = States,
+ ClientState, ServerState, server) ->
+ States#connection_states{
+ pending_read = Read#connection_state{cipher_state = ClientState},
+ pending_write = Write#connection_state{cipher_state = ServerState}};
+
+set_pending_cipher_state(#connection_states{pending_read = Read,
+ pending_write = Write} = States,
+ ClientState, ServerState, client) ->
+ States#connection_states{
+ pending_read = Read#connection_state{cipher_state = ServerState},
+ pending_write = Write#connection_state{cipher_state = ClientState}}.
+
+
+%%--------------------------------------------------------------------
+-spec encode_handshake(iolist(), tls_version(), #connection_states{}) ->
+ {iolist(), #connection_states{}}.
+%%
+%% Description: Encodes a handshake message to send on the ssl-socket.
+%%--------------------------------------------------------------------
+encode_handshake(Frag, Version, ConnectionStates) ->
+ encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates).
+
+%%--------------------------------------------------------------------
+-spec encode_alert_record(#alert{}, tls_version(), #connection_states{}) ->
+ {iolist(), #connection_states{}}.
+%%
+%% Description: Encodes an alert message to send on the ssl-socket.
+%%--------------------------------------------------------------------
+encode_alert_record(#alert{level = Level, description = Description},
+ Version, ConnectionStates) ->
+ encode_plain_text(?ALERT, Version, <<?BYTE(Level), ?BYTE(Description)>>,
+ ConnectionStates).
+
+%%--------------------------------------------------------------------
+-spec encode_change_cipher_spec(tls_version(), #connection_states{}) ->
+ {iolist(), #connection_states{}}.
+%%
+%% Description: Encodes a change_cipher_spec-message to send on the ssl socket.
+%%--------------------------------------------------------------------
+encode_change_cipher_spec(Version, ConnectionStates) ->
+ encode_plain_text(?CHANGE_CIPHER_SPEC, Version, <<1:8>>, ConnectionStates).
+
+%%--------------------------------------------------------------------
+-spec encode_data(binary(), tls_version(), #connection_states{}) ->
+ {iolist(), #connection_states{}}.
+%%
+%% Description: Encodes data to send on the ssl-socket.
+%%--------------------------------------------------------------------
+encode_data(Frag, Version,
+ #connection_states{current_write = #connection_state{
+ security_parameters =
+ #security_parameters{bulk_cipher_algorithm = BCA}}} =
+ ConnectionStates) ->
+ Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA),
+ encode_iolist(?APPLICATION_DATA, Data, Version, ConnectionStates).
+
+uncompress(?NULL, Data, CS) ->
+ {Data, CS}.
+
+compress(?NULL, Data, CS) ->
+ {Data, CS}.
+
+%%--------------------------------------------------------------------
+-spec compressions() -> [binary()].
+%%
+%% Description: return a list of compressions supported (currently none)
+%%--------------------------------------------------------------------
+compressions() ->
+ [?byte(?NULL)].
+
+%%--------------------------------------------------------------------
+%%% Internal functions
+%%--------------------------------------------------------------------
+empty_connection_state(ConnectionEnd) ->
+ SecParams = empty_security_params(ConnectionEnd),
+ #connection_state{security_parameters = SecParams}.
+
+empty_security_params(ConnectionEnd = ?CLIENT) ->
+ #security_parameters{connection_end = ConnectionEnd,
+ client_random = random()};
+empty_security_params(ConnectionEnd = ?SERVER) ->
+ #security_parameters{connection_end = ConnectionEnd,
+ server_random = random()}.
+random() ->
+ Secs_since_1970 = calendar:datetime_to_gregorian_seconds(
+ calendar:universal_time()) - 62167219200,
+ Random_28_bytes = crypto:rand_bytes(28),
+ <<?UINT32(Secs_since_1970), Random_28_bytes/binary>>.
+
+dtls_next_epoch(#connection_state{epoch = undefined}) -> %% SSL/TLS
+ undefined;
+dtls_next_epoch(#connection_state{epoch = Epoch}) -> %% DTLS
+ Epoch + 1.
+
+is_correct_mac(Mac, Mac) ->
+ true;
+is_correct_mac(_M,_H) ->
+ false.
+
+record_protocol_role(client) ->
+ ?CLIENT;
+record_protocol_role(server) ->
+ ?SERVER.
+
+initial_connection_state(ConnectionEnd) ->
+ #connection_state{security_parameters =
+ initial_security_params(ConnectionEnd),
+ sequence_number = 0
+ }.
+
+initial_security_params(ConnectionEnd) ->
+ SecParams = #security_parameters{connection_end = ConnectionEnd,
+ compression_algorithm = ?NULL},
+ ssl_cipher:security_parameters(?TLS_NULL_WITH_NULL_NULL, SecParams).
+
+
+encode_plain_text(Type, Version, Data, ConnectionStates) ->
+ RecordCB = protocol_module(Version),
+ RecordCB:encode_plain_text(Type, Version, Data, ConnectionStates).
+
+encode_iolist(Type, Data, Version, ConnectionStates0) ->
+ RecordCB = protocol_module(Version),
+ {ConnectionStates, EncodedMsg} =
+ lists:foldl(fun(Text, {CS0, Encoded}) ->
+ {Enc, CS1} =
+ RecordCB:encode_plain_text(Type, Version, Text, CS0),
+ {CS1, [Enc | Encoded]}
+ end, {ConnectionStates0, []}, Data),
+ {lists:reverse(EncodedMsg), ConnectionStates}.
+
+%% 1/n-1 splitting countermeasure Rizzo/Duong-Beast, RC4 chiphers are
+%% not vulnerable to this attack.
+split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA) when
+ BCA =/= ?RC4 andalso ({3, 1} == Version orelse
+ {3, 0} == Version) ->
+ do_split_bin(Rest, ChunkSize, [[FirstByte]]);
+split_bin(Bin, ChunkSize, _, _) ->
+ do_split_bin(Bin, ChunkSize, []).
+
+do_split_bin(<<>>, _, Acc) ->
+ lists:reverse(Acc);
+do_split_bin(Bin, ChunkSize, Acc) ->
+ case Bin of
+ <<Chunk:ChunkSize/binary, Rest/binary>> ->
+ do_split_bin(Rest, ChunkSize, [Chunk | Acc]);
+ _ ->
+ lists:reverse(Acc, [Bin])
+ end.
+
+protocol_module({3, _}) ->
+ tls_record;
+protocol_module({254, _}) ->
+ dtls_record.
diff --git a/lib/ssl/src/ssl_record.hrl b/lib/ssl/src/ssl_record.hrl
index 2fd17f9c35..c17fa53a62 100644
--- a/lib/ssl/src/ssl_record.hrl
+++ b/lib/ssl/src/ssl_record.hrl
@@ -29,6 +29,18 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Connection states - RFC 4346 section 6.1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-record(connection_state, {
+ security_parameters,
+ compression_state,
+ cipher_state,
+ mac_secret,
+ epoch, %% Only used by DTLS
+ sequence_number,
+ %% RFC 5746
+ secure_renegotiation,
+ client_verify_data,
+ server_verify_data
+ }).
-record(connection_states, {
current_read,
@@ -56,17 +68,7 @@
exportable % boolean
}).
--record(connection_state, {
- security_parameters,
- compression_state,
- cipher_state,
- mac_secret,
- sequence_number,
- %% RFC 5746
- secure_renegotiation,
- client_verify_data,
- server_verify_data
- }).
+-define(INITIAL_BYTES, 5).
-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.
diff --git a/lib/ssl/src/ssl_ssl2.erl b/lib/ssl/src/ssl_v2.erl
index a9ab6a2678..07876366f1 100644
--- a/lib/ssl/src/ssl_ssl2.erl
+++ b/lib/ssl/src/ssl_v2.erl
@@ -1,30 +1,30 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
-%%
+%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
-%%
+%%
%% %CopyrightEnd%
%%
%%
%%----------------------------------------------------------------------
-%% Purpose: Handles sslv2 hello as clients supporting sslv2 and higher
+%% Purpose: Handles sslv2 hello as clients supporting sslv2 and higher
%% will send an sslv2 hello.
%%----------------------------------------------------------------------
--module(ssl_ssl2).
-
+-module(ssl_v2).
+
-export([client_random/2]).
client_random(ChallengeData, 32) ->
diff --git a/lib/ssl/src/ssl_ssl3.erl b/lib/ssl/src/ssl_v3.erl
index 013c27ebb5..d477b3df81 100644
--- a/lib/ssl/src/ssl_ssl3.erl
+++ b/lib/ssl/src/ssl_v3.erl
@@ -22,14 +22,14 @@
%% Purpose: Handles sslv3 encryption.
%%----------------------------------------------------------------------
--module(ssl_ssl3).
+-module(ssl_v3).
-include("ssl_cipher.hrl").
-include("ssl_internal.hrl").
-include("ssl_record.hrl"). % MD5 and SHA
-export([master_secret/3, finished/3, certificate_verify/3,
- mac_hash/6, setup_keys/7,
+ mac_hash/6, setup_keys/7,
suites/0]).
-compile(inline).
@@ -40,7 +40,7 @@
-spec master_secret(binary(), binary(), binary()) -> binary().
master_secret(PremasterSecret, ClientRandom, ServerRandom) ->
- %% draft-ietf-tls-ssl-version3-00 - 6.2.2
+ %% draft-ietf-tls-ssl-version3-00 - 6.2.2
%% key_block =
%% MD5(master_secret + SHA(`A' + master_secret +
%% ServerHello.random +
@@ -62,7 +62,7 @@ finished(Role, MasterSecret, Handshake) ->
%% opaque md5_hash[16];
%% opaque sha_hash[20];
%% } Finished;
- %%
+ %%
%% md5_hash MD5(master_secret + pad2 +
%% MD5(handshake_messages + Sender +
%% master_secret + pad1));
@@ -95,23 +95,23 @@ certificate_verify(sha, MasterSecret, Handshake) ->
handshake_hash(?SHA, MasterSecret, undefined, Handshake).
--spec mac_hash(integer(), binary(), integer(), integer(), integer(), binary()) -> binary().
+-spec mac_hash(integer(), binary(), integer(), integer(), integer(), binary()) -> binary().
mac_hash(Method, Mac_write_secret, Seq_num, Type, Length, Fragment) ->
- %% draft-ietf-tls-ssl-version3-00 - 5.2.3.1
+ %% draft-ietf-tls-ssl-version3-00 - 5.2.3.1
%% hash(MAC_write_secret + pad_2 +
%% hash(MAC_write_secret + pad_1 + seq_num +
%% SSLCompressed.type + SSLCompressed.length +
%% SSLCompressed.fragment));
- Mac = mac_hash(Method, Mac_write_secret,
- [<<?UINT64(Seq_num), ?BYTE(Type),
+ Mac = mac_hash(Method, Mac_write_secret,
+ [<<?UINT64(Seq_num), ?BYTE(Type),
?UINT16(Length)>>, Fragment]),
Mac.
--spec setup_keys(binary(), binary(), binary(),
- integer(), integer(), term(), integer()) ->
- {binary(), binary(), binary(),
- binary(), binary(), binary()}.
+-spec setup_keys(binary(), binary(), binary(),
+ integer(), integer(), term(), integer()) ->
+ {binary(), binary(), binary(),
+ binary(), binary(), binary()}.
setup_keys(MasterSecret, ServerRandom, ClientRandom, HS, KML, _EKML, IVS) ->
KeyBlock = generate_keyblock(MasterSecret, ServerRandom, ClientRandom,
@@ -133,7 +133,7 @@ setup_keys(MasterSecret, ServerRandom, ClientRandom, HS, KML, _EKML, IVS) ->
-spec suites() -> [cipher_suite()].
suites() ->
- [
+ [
?TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
?TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
?TLS_RSA_WITH_AES_256_CBC_SHA,
@@ -143,7 +143,7 @@ suites() ->
?TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
?TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
?TLS_RSA_WITH_AES_128_CBC_SHA,
- %%?TLS_RSA_WITH_IDEA_CBC_SHA,
+ %%?TLS_RSA_WITH_IDEA_CBC_SHA,
?TLS_RSA_WITH_RC4_128_SHA,
?TLS_RSA_WITH_RC4_128_MD5,
?TLS_RSA_WITH_DES_CBC_SHA
diff --git a/lib/ssl/src/tls.erl b/lib/ssl/src/tls.erl
index bb02695c12..b220a48f73 100644
--- a/lib/ssl/src/tls.erl
+++ b/lib/ssl/src/tls.erl
@@ -663,7 +663,8 @@ handle_options(Opts0, _Role) ->
handle_option(next_protocols_advertised, Opts, undefined),
next_protocol_selector =
make_next_protocol_selector(
- handle_option(client_preferred_next_protocols, Opts, undefined))
+ handle_option(client_preferred_next_protocols, Opts, undefined)),
+ log_alert = handle_option(log_alert, Opts, true)
},
CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}),
@@ -675,7 +676,7 @@ handle_options(Opts0, _Role) ->
reuse_session, reuse_sessions, ssl_imp,
cb_info, renegotiate_at, secure_renegotiate, hibernate_after,
erl_dist, next_protocols_advertised,
- client_preferred_next_protocols],
+ client_preferred_next_protocols, log_alert],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -840,6 +841,9 @@ validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredPro
validate_option(client_preferred_next_protocols, undefined) ->
undefined;
+validate_option(log_alert, Value) when Value == true;
+ Value == false ->
+ Value;
validate_option(next_protocols_advertised = Opt, Value) when is_list(Value) ->
case tls_record:highest_protocol_version([]) of
{3,0} ->
diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl
index 246fecf34a..5618837506 100644
--- a/lib/ssl/src/tls_connection.erl
+++ b/lib/ssl/src/tls_connection.erl
@@ -76,7 +76,8 @@
negotiated_version, % tls_version()
client_certificate_requested = false,
key_algorithm, % atom as defined by cipher_suite
- hashsign_algorithm, % atom as defined by cipher_suite
+ hashsign_algorithm = {undefined, undefined},
+ cert_hashsign_algorithm,
public_key_info, % PKIX: {Algorithm, PublicKey, PublicKeyParams}
private_key, % PKIX: #'RSAPrivateKey'{}
diffie_hellman_params, % PKIX: #'DHParameter'{} relevant for server side
@@ -89,7 +90,6 @@
cert_db_ref, % ref()
bytes_to_read, % integer(), # bytes to read in passive mode
user_data_buffer, % binary()
- log_alert, % boolean()
renegotiation, % {boolean(), From | internal | peer}
start_or_recv_from, % "gen_fsm From"
timer, % start_or_recv_timer
@@ -106,10 +106,6 @@
base = ?DEFAULT_DIFFIE_HELLMAN_GENERATOR}).
-define(WAIT_TO_ALLOW_RENEGOTIATION, 12000).
--type state_name() :: hello | abbreviated | certify | cipher | connection.
--type gen_fsm_state_return() :: {next_state, state_name(), #state{}} |
- {next_state, state_name(), #state{}, timeout()} |
- {stop, term(), #state{}}.
%%====================================================================
%% Internal application API
@@ -389,9 +385,8 @@ hello(#server_hello{cipher_suite = CipherSuite,
_ ->
NextProtocol
end,
-
+
State = State0#state{key_algorithm = KeyAlgorithm,
- hashsign_algorithm = default_hashsign(Version, KeyAlgorithm),
negotiated_version = Version,
connection_states = ConnectionStates,
premaster_secret = PremasterSecret,
@@ -407,22 +402,28 @@ hello(#server_hello{cipher_suite = CipherSuite,
end
end;
-hello(Hello = #client_hello{client_version = ClientVersion},
+hello(Hello = #client_hello{client_version = ClientVersion,
+ extensions = #hello_extensions{hash_signs = HashSigns}},
State = #state{connection_states = ConnectionStates0,
port = Port, session = #session{own_certificate = Cert} = Session0,
renegotiation = {Renegotiation, _},
- session_cache = Cache,
+ session_cache = Cache,
session_cache_cb = CacheCb,
ssl_options = SslOpts}) ->
+ HashSign = ssl_handshake:select_hashsign(HashSigns, Cert),
case tls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb,
ConnectionStates0, Cert}, Renegotiation) of
- {Version, {Type, Session}, ConnectionStates, ProtocolsToAdvertise,
- EcPointFormats, EllipticCurves} ->
- do_server_hello(Type, ProtocolsToAdvertise,
- EcPointFormats, EllipticCurves,
+ {Version, {Type, #session{cipher_suite = CipherSuite} = Session},
+ ConnectionStates,
+ #hello_extensions{ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves} = ServerHelloExt} ->
+ {KeyAlg, _, _, _} = ssl_cipher:suite_definition(CipherSuite),
+ NegotiatedHashSign = negotiated_hashsign(HashSign, KeyAlg, Version),
+ do_server_hello(Type, ServerHelloExt,
State#state{connection_states = ConnectionStates,
negotiated_version = Version,
session = Session,
+ hashsign_algorithm = NegotiatedHashSign,
client_ecc = {EllipticCurves, EcPointFormats}});
#alert{} = Alert ->
handle_own_alert(Alert, ClientVersion, hello, State)
@@ -448,11 +449,11 @@ abbreviated(#finished{verify_data = Data} = Finished,
session = #session{master_secret = MasterSecret},
connection_states = ConnectionStates0} =
State) ->
- case tls_handshake:verify_connection(Version, Finished, client,
+ case ssl_handshake:verify_connection(Version, Finished, client,
get_current_connection_state_prf(ConnectionStates0, write),
MasterSecret, Handshake) of
verified ->
- ConnectionStates = tls_record:set_client_verify_data(current_both, Data, ConnectionStates0),
+ ConnectionStates = ssl_record:set_client_verify_data(current_both, Data, ConnectionStates0),
next_state_connection(abbreviated,
ack_connection(State#state{connection_states = ConnectionStates}));
#alert{} = Alert ->
@@ -464,11 +465,11 @@ abbreviated(#finished{verify_data = Data} = Finished,
session = #session{master_secret = MasterSecret},
negotiated_version = Version,
connection_states = ConnectionStates0} = State) ->
- case tls_handshake:verify_connection(Version, Finished, server,
+ case ssl_handshake:verify_connection(Version, Finished, server,
get_pending_connection_state_prf(ConnectionStates0, write),
MasterSecret, Handshake0) of
verified ->
- ConnectionStates1 = tls_record:set_server_verify_data(current_read, Data, ConnectionStates0),
+ ConnectionStates1 = ssl_record:set_server_verify_data(current_read, Data, ConnectionStates0),
{ConnectionStates, Handshake} =
finalize_handshake(State#state{connection_states = ConnectionStates1}, abbreviated),
next_state_connection(abbreviated,
@@ -523,11 +524,11 @@ certify(#certificate{} = Cert,
cert_db = CertDbHandle,
cert_db_ref = CertDbRef,
ssl_options = Opts} = State) ->
- case tls_handshake:certify(Cert, CertDbHandle, CertDbRef, Opts#ssl_options.depth,
+ case ssl_handshake:certify(Cert, CertDbHandle, CertDbRef, Opts#ssl_options.depth,
Opts#ssl_options.verify,
Opts#ssl_options.verify_fun, Role) of
{PeerCert, PublicKeyInfo} ->
- handle_peer_cert(PeerCert, PublicKeyInfo,
+ handle_peer_cert(Role, PeerCert, PublicKeyInfo,
State#state{client_certificate_requested = false});
#alert{} = Alert ->
handle_own_alert(Alert, Version, certify, State)
@@ -553,9 +554,11 @@ certify(#server_key_exchange{} = Msg,
#state{role = client, key_algorithm = rsa} = State) ->
handle_unexpected_message(Msg, certify_server_keyexchange, State);
-certify(#certificate_request{}, State0) ->
+certify(#certificate_request{hashsign_algorithms = HashSigns},
+ #state{session = #session{own_certificate = Cert}} = State0) ->
+ HashSign = ssl_handshake:select_hashsign(HashSigns, Cert),
{Record, State} = next_record(State0#state{client_certificate_requested = true}),
- next_state(certify, certify, Record, State);
+ next_state(certify, certify, Record, State#state{cert_hashsign_algorithm = HashSign});
%% PSK and RSA_PSK might bypass the Server-Key-Exchange
certify(#server_hello_done{},
@@ -603,7 +606,7 @@ certify(#server_hello_done{},
negotiated_version = Version,
premaster_secret = undefined,
role = client} = State0) ->
- case tls_handshake:master_secret(Version, Session,
+ case ssl_handshake:master_secret(tls_record, Version, Session,
ConnectionStates0, client) of
{MasterSecret, ConnectionStates} ->
State = State0#state{connection_states = ConnectionStates},
@@ -619,7 +622,7 @@ certify(#server_hello_done{},
negotiated_version = Version,
premaster_secret = PremasterSecret,
role = client} = State0) ->
- case tls_handshake:master_secret(Version, PremasterSecret,
+ case ssl_handshake:master_secret(tls_record, Version, PremasterSecret,
ConnectionStates0, client) of
{MasterSecret, ConnectionStates} ->
Session = Session0#session{master_secret = MasterSecret},
@@ -640,7 +643,7 @@ certify(#client_key_exchange{} = Msg,
certify(#client_key_exchange{exchange_keys = Keys},
State = #state{key_algorithm = KeyAlg, negotiated_version = Version}) ->
try
- certify_client_key_exchange(tls_handshake:decode_client_key(Keys, KeyAlg, Version), State)
+ certify_client_key_exchange(ssl_handshake:decode_client_key(Keys, KeyAlg, Version), State)
catch
#alert{} = Alert ->
handle_own_alert(Alert, Version, certify, State)
@@ -658,8 +661,8 @@ certify_client_key_exchange(#encrypted_premaster_secret{premaster_secret= EncPMS
connection_states = ConnectionStates0,
session = Session0,
private_key = Key} = State0) ->
- PremasterSecret = tls_handshake:decrypt_premaster_secret(EncPMS, Key),
- case tls_handshake:master_secret(Version, PremasterSecret,
+ PremasterSecret = ssl_handshake:decrypt_premaster_secret(EncPMS, Key),
+ case ssl_handshake:master_secret(tls_record, Version, PremasterSecret,
ConnectionStates0, server) of
{MasterSecret, ConnectionStates} ->
Session = Session0#session{master_secret = MasterSecret},
@@ -725,7 +728,7 @@ certify_client_key_exchange(#client_rsa_psk_identity{
#encrypted_premaster_secret{premaster_secret= EncPMS}},
#state{negotiated_version = Version,
private_key = Key} = State0) ->
- PremasterSecret = tls_handshake:decrypt_premaster_secret(EncPMS, Key),
+ PremasterSecret = ssl_handshake:decrypt_premaster_secret(EncPMS, Key),
case server_rsa_psk_master_secret(PskIdentity, PremasterSecret, State0) of
#state{} = State1 ->
{Record, State} = next_record(State1),
@@ -758,21 +761,18 @@ cipher(#hello_request{}, State0) ->
cipher(#certificate_verify{signature = Signature, hashsign_algorithm = CertHashSign},
#state{role = server,
- public_key_info = PublicKeyInfo,
+ public_key_info = {Algo, _, _} =PublicKeyInfo,
negotiated_version = Version,
session = #session{master_secret = MasterSecret},
- hashsign_algorithm = ConnectionHashSign,
tls_handshake_history = Handshake
} = State0) ->
- HashSign = case CertHashSign of
- {_, _} -> CertHashSign;
- _ -> ConnectionHashSign
- end,
- case tls_handshake:certificate_verify(Signature, PublicKeyInfo,
+
+ HashSign = ssl_handshake:select_cert_hashsign(CertHashSign, Algo, Version),
+ case ssl_handshake:certificate_verify(Signature, PublicKeyInfo,
Version, HashSign, MasterSecret, Handshake) of
valid ->
{Record, State} = next_record(State0),
- next_state(cipher, cipher, Record, State);
+ next_state(cipher, cipher, Record, State#state{cert_hashsign_algorithm = HashSign});
#alert{} = Alert ->
handle_own_alert(Alert, Version, cipher, State0)
end;
@@ -791,7 +791,7 @@ cipher(#finished{verify_data = Data} = Finished,
= Session0,
connection_states = ConnectionStates0,
tls_handshake_history = Handshake0} = State) ->
- case tls_handshake:verify_connection(Version, Finished,
+ case ssl_handshake:verify_connection(Version, Finished,
opposite_role(Role),
get_current_connection_state_prf(ConnectionStates0, read),
MasterSecret, Handshake0) of
@@ -978,7 +978,7 @@ handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protoc
handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protocol = NextProtocol} = State) ->
{reply, {ok, NextProtocol}, StateName, State, get_timeout(State)};
-handle_sync_event({set_opts, Opts0}, _From, StateName,
+handle_sync_event({set_opts, Opts0}, _From, StateName0,
#state{socket_options = Opts1,
socket = Socket,
transport_cb = Transport,
@@ -987,11 +987,12 @@ handle_sync_event({set_opts, Opts0}, _From, StateName,
State1 = State0#state{socket_options = Opts},
if
Opts#socket_options.active =:= false ->
- {reply, Reply, StateName, State1, get_timeout(State1)};
+ {reply, Reply, StateName0, State1, get_timeout(State1)};
Buffer =:= <<>>, Opts1#socket_options.active =:= false ->
%% Need data, set active once
{Record, State2} = next_record_if_active(State1),
- case next_state(StateName, StateName, Record, State2) of
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case next_state(StateName0, StateName0, Record, State2) of
{next_state, StateName, State, Timeout} ->
{reply, Reply, StateName, State, Timeout};
{stop, Reason, State} ->
@@ -999,13 +1000,14 @@ handle_sync_event({set_opts, Opts0}, _From, StateName,
end;
Buffer =:= <<>> ->
%% Active once already set
- {reply, Reply, StateName, State1, get_timeout(State1)};
+ {reply, Reply, StateName0, State1, get_timeout(State1)};
true ->
case read_application_data(<<>>, State1) of
Stop = {stop,_,_} ->
Stop;
{Record, State2} ->
- case next_state(StateName, StateName, Record, State2) of
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case next_state(StateName0, StateName0, Record, State2) of
{next_state, StateName, State, Timeout} ->
{reply, Reply, StateName, State, Timeout};
{stop, Reason, State} ->
@@ -1024,7 +1026,7 @@ handle_sync_event({prf, Secret, Label, Seed, WantedLength}, _, StateName,
#state{connection_states = ConnectionStates,
negotiated_version = Version} = State) ->
ConnectionState =
- tls_record:current_connection_state(ConnectionStates, read),
+ ssl_record:current_connection_state(ConnectionStates, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{master_secret = MasterSecret,
client_random = ClientRandom,
@@ -1039,7 +1041,7 @@ handle_sync_event({prf, Secret, Label, Seed, WantedLength}, _, StateName,
(client_random, Acc) -> [ClientRandom|Acc];
(server_random, Acc) -> [ServerRandom|Acc]
end, [], Seed)),
- tls_handshake:prf(Version, SecretToUse, Label, SeedToUse, WantedLength)
+ ssl_handshake:prf(Version, SecretToUse, Label, SeedToUse, WantedLength)
catch
exit:_ -> {error, badarg};
error:Reason -> {error, Reason}
@@ -1238,9 +1240,9 @@ ssl_init(SslOpts, Role) ->
{ok, CertDbRef, CertDbHandle, FileRefHandle, CacheHandle, OwnCert, PrivateKey, DHParams}.
init_manager_name(false) ->
- put(ssl_manager, ssl_manager);
+ put(ssl_manager, ssl_manager:manager_name(normal));
init_manager_name(true) ->
- put(ssl_manager, ssl_manager_dist).
+ put(ssl_manager, ssl_manager:manager_name(dist)).
init_certificates(#ssl_options{cacerts = CaCerts,
cacertfile = CACertFile,
@@ -1368,25 +1370,34 @@ sync_send_all_state_event(FsmPid, Event) ->
{error, closed}
end.
-%% 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) ->
+handle_peer_cert(Role, PeerCert, PublicKeyInfo,
+ #state{session = #session{cipher_suite = CipherSuite} = Session} = State0) ->
State1 = State0#state{session =
Session#session{peer_certificate = PeerCert},
public_key_info = PublicKeyInfo},
- State2 = case PublicKeyInfo of
- {?'id-ecPublicKey', #'ECPoint'{point = _ECPoint} = PublicKey, PublicKeyParams} ->
- ECDHKey = public_key:generate_key(PublicKeyParams),
- State3 = State1#state{diffie_hellman_keys = ECDHKey},
- ec_dh_master_secret(ECDHKey, PublicKey, State3);
-
- _ -> State1
- end,
+ {KeyAlg,_,_,_} = ssl_cipher:suite_definition(CipherSuite),
+ State2 = handle_peer_cert_key(Role, PeerCert, PublicKeyInfo, KeyAlg, State1),
+
{Record, State} = next_record(State2),
next_state(certify, certify, Record, State).
+handle_peer_cert_key(client, _,
+ {?'id-ecPublicKey', #'ECPoint'{point = _ECPoint} = PublicKey, PublicKeyParams},
+ KeyAlg, State) when KeyAlg == ecdh_rsa;
+ KeyAlg == ecdh_ecdsa ->
+ ECDHKey = public_key:generate_key(PublicKeyParams),
+ ec_dh_master_secret(ECDHKey, PublicKey, State#state{diffie_hellman_keys = ECDHKey});
+
+%% We do currently not support cipher suites that use fixed DH.
+%% If we want to implement that the following clause can be used
+%% to extract DH parameters form cert.
+%% handle_peer_cert_key(client, _PeerCert, {?dhpublicnumber, PublicKey, PublicKeyParams}, {_,SignAlg},
+%% #state{diffie_hellman_keys = {_, MyPrivatKey}} = State) when SignAlg == dh_rsa;
+%% SignAlg == dh_dss ->
+%% dh_master_secret(PublicKeyParams, PublicKey, MyPrivatKey, State);
+handle_peer_cert_key(_, _, _, _, State) ->
+ State.
+
certify_client(#state{client_certificate_requested = true, role = client,
connection_states = ConnectionStates0,
transport_cb = Transport,
@@ -1396,7 +1407,7 @@ certify_client(#state{client_certificate_requested = true, role = client,
session = #session{own_certificate = OwnCert},
socket = Socket,
tls_handshake_history = Handshake0} = State) ->
- Certificate = tls_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, client),
+ Certificate = ssl_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, client),
{BinCert, ConnectionStates, Handshake} =
encode_handshake(Certificate, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinCert),
@@ -1413,11 +1424,10 @@ verify_client_cert(#state{client_certificate_requested = true, role = client,
private_key = PrivateKey,
session = #session{master_secret = MasterSecret,
own_certificate = OwnCert},
- hashsign_algorithm = HashSign,
+ cert_hashsign_algorithm = HashSign,
tls_handshake_history = Handshake0} = State) ->
- %%TODO: for TLS 1.2 we can choose a different/stronger HashSign combination for this.
- case tls_handshake:client_certificate_verify(OwnCert, MasterSecret,
+ case ssl_handshake:client_certificate_verify(OwnCert, MasterSecret,
Version, HashSign, PrivateKey, Handshake0) of
#certificate_verify{} = Verified ->
{BinVerified, ConnectionStates, Handshake} =
@@ -1434,21 +1444,17 @@ verify_client_cert(#state{client_certificate_requested = true, role = client,
verify_client_cert(#state{client_certificate_requested = false} = State) ->
State.
-do_server_hello(Type, NextProtocolsToSend,
- EcPointFormats, EllipticCurves,
+do_server_hello(Type, #hello_extensions{next_protocol_negotiation = NextProtocols} = ServerHelloExt,
#state{negotiated_version = Version,
session = #session{session_id = SessId},
- connection_states = ConnectionStates0,
- renegotiation = {Renegotiation, _}}
+ connection_states = ConnectionStates0}
= State0) when is_atom(Type) ->
ServerHello =
- tls_handshake:server_hello(SessId, Version,
- ConnectionStates0, Renegotiation,
- NextProtocolsToSend, EcPointFormats, EllipticCurves),
+ tls_handshake:server_hello(SessId, Version, ConnectionStates0, ServerHelloExt),
State = server_hello(ServerHello,
State0#state{expecting_next_protocol_negotiation =
- NextProtocolsToSend =/= undefined}),
+ NextProtocols =/= undefined}),
case Type of
new ->
new_server_hello(ServerHello, State);
@@ -1479,7 +1485,7 @@ resumed_server_hello(#state{session = Session,
connection_states = ConnectionStates0,
negotiated_version = Version} = State0) ->
- case tls_handshake:master_secret(Version, Session,
+ case ssl_handshake:master_secret(tls_record, Version, Session,
ConnectionStates0, server) of
{_, ConnectionStates1} ->
State1 = State0#state{connection_states = ConnectionStates1,
@@ -1508,7 +1514,7 @@ handle_resumed_session(SessId, #state{connection_states = ConnectionStates0,
session_cache = Cache,
session_cache_cb = CacheCb} = State0) ->
Session = CacheCb:lookup(Cache, {{Host, Port}, SessId}),
- case tls_handshake:master_secret(Version, Session,
+ case ssl_handshake:master_secret(tls_record, Version, Session,
ConnectionStates0, client) of
{_, ConnectionStates} ->
{Record, State} =
@@ -1559,8 +1565,7 @@ server_hello(ServerHello, #state{transport_cb = Transport,
Transport:send(Socket, BinMsg),
State#state{connection_states = ConnectionStates1,
tls_handshake_history = Handshake1,
- key_algorithm = KeyAlgorithm,
- hashsign_algorithm = default_hashsign(Version, KeyAlgorithm)}.
+ key_algorithm = KeyAlgorithm}.
server_hello_done(#state{transport_cb = Transport,
socket = Socket,
@@ -1568,7 +1573,7 @@ server_hello_done(#state{transport_cb = Transport,
connection_states = ConnectionStates0,
tls_handshake_history = Handshake0} = State) ->
- HelloDone = tls_handshake:server_hello_done(),
+ HelloDone = ssl_handshake:server_hello_done(),
{BinHelloDone, ConnectionStates, Handshake} =
encode_handshake(HelloDone, Version, ConnectionStates0, Handshake0),
@@ -1588,7 +1593,7 @@ certify_server(#state{transport_cb = Transport,
cert_db = CertDbHandle,
cert_db_ref = CertDbRef,
session = #session{own_certificate = OwnCert}} = State) ->
- case tls_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, server) of
+ case ssl_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, server) of
CertMsg = #certificate{} ->
{BinCertMsg, ConnectionStates, Handshake} =
encode_handshake(CertMsg, Version, ConnectionStates0, Handshake0),
@@ -1617,11 +1622,11 @@ key_exchange(#state{role = server, key_algorithm = Algo,
Algo == dh_anon ->
DHKeys = public_key:generate_key(Params),
ConnectionState =
- tls_record:pending_connection_state(ConnectionStates0, read),
+ ssl_record:pending_connection_state(ConnectionStates0, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = tls_handshake:key_exchange(server, Version, {dh, DHKeys, Params,
+ Msg = ssl_handshake:key_exchange(server, Version, {dh, DHKeys, Params,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
@@ -1649,11 +1654,11 @@ key_exchange(#state{role = server, key_algorithm = Algo,
ECDHKeys = public_key:generate_key(select_curve(State)),
ConnectionState =
- tls_record:pending_connection_state(ConnectionStates0, read),
+ ssl_record:pending_connection_state(ConnectionStates0, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = tls_handshake:key_exchange(server, Version, {ecdh, ECDHKeys,
+ Msg = ssl_handshake:key_exchange(server, Version, {ecdh, ECDHKeys,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
@@ -1678,11 +1683,11 @@ key_exchange(#state{role = server, key_algorithm = psk,
transport_cb = Transport
} = State) ->
ConnectionState =
- tls_record:pending_connection_state(ConnectionStates0, read),
+ ssl_record:pending_connection_state(ConnectionStates0, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = tls_handshake:key_exchange(server, Version, {psk, PskIdentityHint,
+ Msg = ssl_handshake:key_exchange(server, Version, {psk, PskIdentityHint,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
@@ -1705,11 +1710,11 @@ key_exchange(#state{role = server, key_algorithm = dhe_psk,
} = State) ->
DHKeys = public_key:generate_key(Params),
ConnectionState =
- tls_record:pending_connection_state(ConnectionStates0, read),
+ ssl_record:pending_connection_state(ConnectionStates0, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = tls_handshake:key_exchange(server, Version, {dhe_psk, PskIdentityHint, DHKeys, Params,
+ Msg = ssl_handshake:key_exchange(server, Version, {dhe_psk, PskIdentityHint, DHKeys, Params,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
@@ -1734,11 +1739,11 @@ key_exchange(#state{role = server, key_algorithm = rsa_psk,
transport_cb = Transport
} = State) ->
ConnectionState =
- tls_record:pending_connection_state(ConnectionStates0, read),
+ ssl_record:pending_connection_state(ConnectionStates0, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = tls_handshake:key_exchange(server, Version, {psk, PskIdentityHint,
+ Msg = ssl_handshake:key_exchange(server, Version, {psk, PskIdentityHint,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
@@ -1770,11 +1775,11 @@ key_exchange(#state{role = server, key_algorithm = Algo,
Keys0
end,
ConnectionState =
- tls_record:pending_connection_state(ConnectionStates0, read),
+ ssl_record:pending_connection_state(ConnectionStates0, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = tls_handshake:key_exchange(server, Version, {srp, Keys, SrpParams,
+ Msg = ssl_handshake:key_exchange(server, Version, {srp, Keys, SrpParams,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
@@ -1810,7 +1815,7 @@ key_exchange(#state{role = client,
when Algorithm == dhe_dss;
Algorithm == dhe_rsa;
Algorithm == dh_anon ->
- Msg = tls_handshake:key_exchange(client, Version, {dh, DhPubKey}),
+ Msg = ssl_handshake:key_exchange(client, Version, {dh, DhPubKey}),
{BinMsg, ConnectionStates, Handshake} =
encode_handshake(Msg, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
@@ -1827,7 +1832,7 @@ key_exchange(#state{role = client,
when Algorithm == ecdhe_ecdsa; Algorithm == ecdhe_rsa;
Algorithm == ecdh_ecdsa; Algorithm == ecdh_rsa;
Algorithm == ecdh_anon ->
- Msg = tls_handshake:key_exchange(client, Version, {ecdh, Keys}),
+ Msg = ssl_handshake:key_exchange(client, Version, {ecdh, Keys}),
{BinMsg, ConnectionStates, Handshake} =
encode_handshake(Msg, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
@@ -1841,7 +1846,7 @@ key_exchange(#state{role = client,
negotiated_version = Version,
socket = Socket, transport_cb = Transport,
tls_handshake_history = Handshake0} = State) ->
- Msg = tls_handshake:key_exchange(client, Version, {psk, SslOpts#ssl_options.psk_identity}),
+ Msg = ssl_handshake:key_exchange(client, Version, {psk, SslOpts#ssl_options.psk_identity}),
{BinMsg, ConnectionStates, Handshake} =
encode_handshake(Msg, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
@@ -1856,7 +1861,7 @@ key_exchange(#state{role = client,
diffie_hellman_keys = {DhPubKey, _},
socket = Socket, transport_cb = Transport,
tls_handshake_history = Handshake0} = State) ->
- Msg = tls_handshake:key_exchange(client, Version, {dhe_psk, SslOpts#ssl_options.psk_identity, DhPubKey}),
+ Msg = ssl_handshake:key_exchange(client, Version, {dhe_psk, SslOpts#ssl_options.psk_identity, DhPubKey}),
{BinMsg, ConnectionStates, Handshake} =
encode_handshake(Msg, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
@@ -1889,7 +1894,7 @@ key_exchange(#state{role = client,
when Algorithm == srp_dss;
Algorithm == srp_rsa;
Algorithm == srp_anon ->
- Msg = tls_handshake:key_exchange(client, Version, {srp, ClientPubKey}),
+ Msg = ssl_handshake:key_exchange(client, Version, {srp, ClientPubKey}),
{BinMsg, ConnectionStates, Handshake} =
encode_handshake(Msg, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
@@ -1906,7 +1911,7 @@ rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
Algorithm == ?sha384WithRSAEncryption;
Algorithm == ?sha512WithRSAEncryption
->
- tls_handshake:key_exchange(client, Version,
+ ssl_handshake:key_exchange(client, Version,
{premaster_secret, PremasterSecret,
PublicKeyInfo});
rsa_key_exchange(_, _, _) ->
@@ -1922,7 +1927,7 @@ rsa_psk_key_exchange(Version, PskIdentity, PremasterSecret, PublicKeyInfo = {Alg
Algorithm == ?sha384WithRSAEncryption;
Algorithm == ?sha512WithRSAEncryption
->
- tls_handshake:key_exchange(client, Version,
+ ssl_handshake:key_exchange(client, Version,
{psk_premaster_secret, PskIdentity, PremasterSecret,
PublicKeyInfo});
rsa_psk_key_exchange(_, _, _, _) ->
@@ -1936,7 +1941,11 @@ request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer},
negotiated_version = Version,
socket = Socket,
transport_cb = Transport} = State) ->
- Msg = tls_handshake:certificate_request(ConnectionStates0, CertDbHandle, CertDbRef),
+ #connection_state{security_parameters =
+ #security_parameters{cipher_suite = CipherSuite}} =
+ ssl_record:pending_connection_state(ConnectionStates0, read),
+ Msg = ssl_handshake:certificate_request(CipherSuite, CertDbHandle, CertDbRef, Version),
+
{BinMsg, ConnectionStates, Handshake} =
encode_handshake(Msg, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
@@ -1951,7 +1960,7 @@ finalize_handshake(State, StateName) ->
ConnectionStates0 = cipher_protocol(State),
ConnectionStates =
- tls_record:activate_pending_connection_state(ConnectionStates0,
+ ssl_record:activate_pending_connection_state(ConnectionStates0,
write),
State1 = State#state{connection_states = ConnectionStates},
@@ -1969,7 +1978,7 @@ next_protocol(#state{transport_cb = Transport, socket = Socket,
next_protocol = NextProtocol,
connection_states = ConnectionStates0,
tls_handshake_history = Handshake0} = State) ->
- NextProtocolMessage = tls_handshake:next_protocol(NextProtocol),
+ NextProtocolMessage = ssl_handshake:next_protocol(NextProtocol),
{BinMsg, ConnectionStates, Handshake} = encode_handshake(NextProtocolMessage, Version, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
State#state{connection_states = ConnectionStates,
@@ -1991,7 +2000,7 @@ finished(#state{role = Role, socket = Socket, negotiated_version = Version,
connection_states = ConnectionStates0,
tls_handshake_history = Handshake0}, StateName) ->
MasterSecret = Session#session.master_secret,
- Finished = tls_handshake:finished(Version, Role,
+ Finished = ssl_handshake:finished(Version, Role,
get_current_connection_state_prf(ConnectionStates0, write),
MasterSecret, Handshake0),
ConnectionStates1 = save_verify_data(Role, Finished, ConnectionStates0, StateName),
@@ -2001,24 +2010,26 @@ finished(#state{role = Role, socket = Socket, negotiated_version = Version,
{ConnectionStates, Handshake}.
save_verify_data(client, #finished{verify_data = Data}, ConnectionStates, certify) ->
- tls_record:set_client_verify_data(current_write, Data, ConnectionStates);
+ ssl_record:set_client_verify_data(current_write, Data, ConnectionStates);
save_verify_data(server, #finished{verify_data = Data}, ConnectionStates, cipher) ->
- tls_record:set_server_verify_data(current_both, Data, ConnectionStates);
+ ssl_record:set_server_verify_data(current_both, Data, ConnectionStates);
save_verify_data(client, #finished{verify_data = Data}, ConnectionStates, abbreviated) ->
- tls_record:set_client_verify_data(current_both, Data, ConnectionStates);
+ ssl_record:set_client_verify_data(current_both, Data, ConnectionStates);
save_verify_data(server, #finished{verify_data = Data}, ConnectionStates, abbreviated) ->
- tls_record:set_server_verify_data(current_write, Data, ConnectionStates).
+ ssl_record:set_server_verify_data(current_write, Data, ConnectionStates).
handle_server_key(#server_key_exchange{exchange_keys = Keys},
#state{key_algorithm = KeyAlg,
negotiated_version = Version} = State) ->
- Params = tls_handshake:decode_server_key(Keys, KeyAlg, Version),
- HashSign = connection_hashsign(Params#server_key_params.hashsign, State),
- case HashSign of
- {_, SignAlgo} when SignAlgo == anon; SignAlgo == ecdh_anon ->
- server_master_secret(Params#server_key_params.params, State);
- _ ->
- verify_server_key(Params, HashSign, State)
+
+ Params = ssl_handshake:decode_server_key(Keys, KeyAlg, Version),
+ HashSign = negotiated_hashsign(Params#server_key_params.hashsign, KeyAlg, Version),
+ case is_anonymous(KeyAlg) of
+ true ->
+ server_master_secret(Params#server_key_params.params,
+ State#state{hashsign_algorithm = HashSign});
+ false ->
+ verify_server_key(Params, HashSign, State#state{hashsign_algorithm = HashSign})
end.
verify_server_key(#server_key_params{params = Params,
@@ -2029,15 +2040,15 @@ verify_server_key(#server_key_params{params = Params,
public_key_info = PubKeyInfo,
connection_states = ConnectionStates} = State) ->
ConnectionState =
- tls_record:pending_connection_state(ConnectionStates, read),
+ ssl_record:pending_connection_state(ConnectionStates, read),
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Hash = tls_handshake:server_key_exchange_hash(HashAlgo,
+ Hash = ssl_handshake:server_key_exchange_hash(HashAlgo,
<<ClientRandom/binary,
ServerRandom/binary,
EncParams/binary>>),
- case tls_handshake:verify_signature(Version, Hash, HashSign, Signature, PubKeyInfo) of
+ case ssl_handshake:verify_signature(Version, Hash, HashSign, Signature, PubKeyInfo) of
true ->
server_master_secret(Params, State);
false ->
@@ -2073,7 +2084,7 @@ master_from_premaster_secret(PremasterSecret,
#state{session = Session,
negotiated_version = Version, role = Role,
connection_states = ConnectionStates0} = State) ->
- case tls_handshake:master_secret(Version, PremasterSecret,
+ case ssl_handshake:master_secret(tls_record, Version, PremasterSecret,
ConnectionStates0, Role) of
{MasterSecret, ConnectionStates} ->
State#state{
@@ -2226,12 +2237,12 @@ client_srp_master_secret(Generator, Prime, Salt, ServerPub, ClientKeys,
end.
cipher_role(client, Data, Session, #state{connection_states = ConnectionStates0} = State) ->
- ConnectionStates = tls_record:set_server_verify_data(current_both, Data, ConnectionStates0),
+ ConnectionStates = ssl_record:set_server_verify_data(current_both, Data, ConnectionStates0),
next_state_connection(cipher, ack_connection(State#state{session = Session,
connection_states = ConnectionStates}));
cipher_role(server, Data, Session, #state{connection_states = ConnectionStates0} = State) ->
- ConnectionStates1 = tls_record:set_client_verify_data(current_read, Data, ConnectionStates0),
+ ConnectionStates1 = ssl_record:set_client_verify_data(current_read, Data, ConnectionStates0),
{ConnectionStates, Handshake} =
finalize_handshake(State#state{connection_states = ConnectionStates1,
session = Session}, cipher),
@@ -2241,16 +2252,16 @@ cipher_role(server, Data, Session, #state{connection_states = ConnectionStates0
tls_handshake_history =
Handshake})).
encode_alert(#alert{} = Alert, Version, ConnectionStates) ->
- tls_record:encode_alert_record(Alert, Version, ConnectionStates).
+ ssl_record:encode_alert_record(Alert, Version, ConnectionStates).
encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates) ->
- tls_record:encode_change_cipher_spec(Version, ConnectionStates).
+ ssl_record:encode_change_cipher_spec(Version, ConnectionStates).
encode_handshake(HandshakeRec, Version, ConnectionStates0, Handshake0) ->
Frag = tls_handshake:encode_handshake(HandshakeRec, Version),
Handshake1 = tls_handshake:update_handshake_history(Handshake0, Frag),
{E, ConnectionStates1} =
- tls_record:encode_handshake(Frag, Version, ConnectionStates0),
+ ssl_record:encode_handshake(Frag, Version, ConnectionStates0),
{E, ConnectionStates1, Handshake1}.
encode_packet(Data, #socket_options{packet=Packet}) ->
@@ -2345,7 +2356,7 @@ write_application_data(Data0, From, #state{socket = Socket,
renegotiate(State#state{send_queue = queue:in_r({From, Data}, SendQueue),
renegotiation = {true, internal}});
false ->
- {Msgs, ConnectionStates} = tls_record:encode_data(Data, Version, ConnectionStates0),
+ {Msgs, ConnectionStates} = ssl_record:encode_data(Data, Version, ConnectionStates0),
Result = Transport:send(Socket, Msgs),
{reply, Result,
connection, State#state{connection_states = ConnectionStates}, get_timeout(State)}
@@ -2458,7 +2469,7 @@ do_format_reply(list, _,_, Data) ->
binary_to_list(Data).
header(0, <<>>) ->
- [];
+ <<>>;
header(_, <<>>) ->
[];
header(0, Binary) ->
@@ -2550,7 +2561,7 @@ next_state(Current, Next, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = <<1>>}
_ChangeCipher,
#state{connection_states = ConnectionStates0} = State0) ->
ConnectionStates1 =
- tls_record:activate_pending_connection_state(ConnectionStates0, read),
+ ssl_record:activate_pending_connection_state(ConnectionStates0, read),
{Record, State} = next_record(State0#state{connection_states = ConnectionStates1}),
next_state(Current, Next, Record, State);
next_state(Current, Next, #ssl_tls{type = _Unknown}, State0) ->
@@ -2602,7 +2613,7 @@ next_state_connection(StateName, #state{send_queue = Queue0,
case queue:out(Queue0) of
{{value, {From, Data}}, Queue} ->
{Msgs, ConnectionStates} =
- tls_record:encode_data(Data, Version, ConnectionStates0),
+ ssl_record:encode_data(Data, Version, ConnectionStates0),
Result = Transport:send(Socket, Msgs),
gen_fsm:reply(From, Result),
next_state_connection(StateName,
@@ -2647,7 +2658,7 @@ invalidate_session(server, _, Port, Session) ->
initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
{CbModule, DataTag, CloseTag, ErrorTag}) ->
- ConnectionStates = tls_record:init_connection_states(Role),
+ ConnectionStates = ssl_record:init_connection_states(Role),
SessionCacheCb = case application:get_env(ssl, session_cb) of
{ok, Cb} when is_atom(Cb) ->
@@ -2677,7 +2688,6 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
tls_cipher_texts = [],
user_application = {Monitor, User},
user_data_buffer = <<>>,
- log_alert = true,
session_cache_cb = SessionCacheCb,
renegotiation = {false, first},
start_or_recv_from = undefined,
@@ -2778,12 +2788,11 @@ handle_alerts([Alert | Alerts], {next_state, StateName, State, _Timeout}) ->
handle_alerts(Alerts, handle_alert(Alert, StateName, State)).
handle_alert(#alert{level = ?FATAL} = Alert, StateName,
- #state{socket = Socket, transport_cb = Transport,
- start_or_recv_from = From, host = Host,
+ #state{socket = Socket, transport_cb = Transport, ssl_options = SslOpts, start_or_recv_from = From, host = Host,
port = Port, session = Session, user_application = {_Mon, Pid},
- log_alert = Log, role = Role, socket_options = Opts} = State) ->
+ role = Role, socket_options = Opts} = State) ->
invalidate_session(Role, Host, Port, Session),
- log_alert(Log, StateName, Alert),
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
alert_user(Transport, Socket, StateName, Opts, Pid, From, Alert, Role),
{stop, normal, State};
@@ -2793,21 +2802,21 @@ handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
{stop, {shutdown, peer_close}, State};
handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
- #state{log_alert = Log, renegotiation = {true, internal}} = State) ->
- log_alert(Log, StateName, Alert),
+ #state{ssl_options = SslOpts, renegotiation = {true, internal}} = State) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
handle_normal_shutdown(Alert, StateName, State),
{stop, {shutdown, peer_close}, State};
handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
- #state{log_alert = Log, renegotiation = {true, From}} = State0) ->
- log_alert(Log, StateName, Alert),
+ #state{ssl_options = SslOpts, renegotiation = {true, From}} = State0) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
gen_fsm:reply(From, {error, renegotiation_rejected}),
{Record, State} = next_record(State0),
next_state(StateName, connection, Record, State);
handle_alert(#alert{level = ?WARNING, description = ?USER_CANCELED} = Alert, StateName,
- #state{log_alert = Log} = State0) ->
- log_alert(Log, StateName, Alert),
+ #state{ssl_options = SslOpts} = State0) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
{Record, State} = next_record(State0),
next_state(StateName, StateName, Record, State).
@@ -2845,7 +2854,7 @@ handle_own_alert(Alert, Version, StateName,
#state{transport_cb = Transport,
socket = Socket,
connection_states = ConnectionStates,
- log_alert = Log} = State) ->
+ ssl_options = SslOpts} = State) ->
try %% Try to tell the other side
{BinMsg, _} =
encode_alert(Alert, Version, ConnectionStates),
@@ -2855,7 +2864,7 @@ handle_own_alert(Alert, Version, StateName,
ignore
end,
try %% Try to tell the local user
- log_alert(Log, StateName, Alert),
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
handle_normal_shutdown(Alert,StateName, State)
catch _:_ ->
ok
@@ -2911,11 +2920,11 @@ renegotiate(#state{role = server,
transport_cb = Transport,
negotiated_version = Version,
connection_states = ConnectionStates0} = State0) ->
- HelloRequest = tls_handshake:hello_request(),
+ HelloRequest = ssl_handshake:hello_request(),
Frag = tls_handshake:encode_handshake(HelloRequest, Version),
Hs0 = tls_handshake:init_handshake_history(),
{BinMsg, ConnectionStates} =
- tls_record:encode_handshake(Frag, Version, ConnectionStates0),
+ ssl_record:encode_handshake(Frag, Version, ConnectionStates0),
Transport:send(Socket, BinMsg),
{Record, State} = next_record(State0#state{connection_states =
ConnectionStates,
@@ -2990,15 +2999,43 @@ handle_trusted_certs_db(#state{cert_db_ref = Ref,
end.
get_current_connection_state_prf(CStates, Direction) ->
- CS = tls_record:current_connection_state(CStates, Direction),
+ CS = ssl_record:current_connection_state(CStates, Direction),
CS#connection_state.security_parameters#security_parameters.prf_algorithm.
get_pending_connection_state_prf(CStates, Direction) ->
- CS = tls_record:pending_connection_state(CStates, Direction),
+ CS = ssl_record:pending_connection_state(CStates, Direction),
CS#connection_state.security_parameters#security_parameters.prf_algorithm.
-connection_hashsign(HashSign = {_, _}, _State) ->
- HashSign;
-connection_hashsign(_, #state{hashsign_algorithm = HashSign}) ->
+start_or_recv_cancel_timer(infinity, _RecvFrom) ->
+ undefined;
+start_or_recv_cancel_timer(Timeout, RecvFrom) ->
+ erlang:send_after(Timeout, self(), {cancel_start_or_recv, RecvFrom}).
+
+cancel_timer(undefined) ->
+ ok;
+cancel_timer(Timer) ->
+ erlang:cancel_timer(Timer),
+ ok.
+
+handle_unrecv_data(StateName, #state{socket = Socket, transport_cb = Transport} = State) ->
+ ssl_socket:setopts(Transport, Socket, [{active, false}]),
+ case Transport:recv(Socket, 0, 0) of
+ {error, closed} ->
+ ok;
+ {ok, Data} ->
+ handle_close_alert(Data, StateName, State)
+ end.
+
+handle_close_alert(Data, StateName, State0) ->
+ case next_tls_record(Data, State0) of
+ {#ssl_tls{type = ?ALERT, fragment = EncAlerts}, State} ->
+ [Alert|_] = decode_alerts(EncAlerts),
+ handle_normal_shutdown(Alert, StateName, State);
+ _ ->
+ ok
+ end.
+negotiated_hashsign(undefined, Algo, Version) ->
+ default_hashsign(Version, Algo);
+negotiated_hashsign(HashSign = {_, _}, _, _) ->
HashSign.
%% RFC 5246, Sect. 7.4.1.4.1. Signature Algorithms
@@ -3016,11 +3053,12 @@ connection_hashsign(_, #state{hashsign_algorithm = HashSign}) ->
%% ECDHE_ECDSA), behave as if the client had sent value {sha1,ecdsa}.
default_hashsign(_Version = {Major, Minor}, KeyExchange)
- when Major == 3 andalso Minor >= 3 andalso
+ when Major >= 3 andalso Minor >= 3 andalso
(KeyExchange == rsa orelse
KeyExchange == dhe_rsa orelse
KeyExchange == dh_rsa orelse
KeyExchange == ecdhe_rsa orelse
+ KeyExchange == ecdh_rsa orelse
KeyExchange == srp_rsa) ->
{sha, rsa};
default_hashsign(_Version, KeyExchange)
@@ -3028,12 +3066,12 @@ default_hashsign(_Version, KeyExchange)
KeyExchange == dhe_rsa;
KeyExchange == dh_rsa;
KeyExchange == ecdhe_rsa;
+ KeyExchange == ecdh_rsa;
KeyExchange == srp_rsa ->
{md5sha, rsa};
default_hashsign(_Version, KeyExchange)
when KeyExchange == ecdhe_ecdsa;
- KeyExchange == ecdh_ecdsa;
- KeyExchange == ecdh_rsa ->
+ KeyExchange == ecdh_ecdsa ->
{sha, ecdsa};
default_hashsign(_Version, KeyExchange)
when KeyExchange == dhe_dss;
@@ -3049,36 +3087,17 @@ default_hashsign(_Version, KeyExchange)
KeyExchange == srp_anon ->
{null, anon}.
-start_or_recv_cancel_timer(infinity, _RecvFrom) ->
- undefined;
-start_or_recv_cancel_timer(Timeout, RecvFrom) ->
- erlang:send_after(Timeout, self(), {cancel_start_or_recv, RecvFrom}).
-
-cancel_timer(undefined) ->
- ok;
-cancel_timer(Timer) ->
- erlang:cancel_timer(Timer),
- ok.
-
-handle_unrecv_data(StateName, #state{socket = Socket, transport_cb = Transport} = State) ->
- ssl_socket:setopts(Transport, Socket, [{active, false}]),
- case Transport:recv(Socket, 0, 0) of
- {error, closed} ->
- ok;
- {ok, Data} ->
- handle_close_alert(Data, StateName, State)
- end.
-
-handle_close_alert(Data, StateName, State0) ->
- case next_tls_record(Data, State0) of
- {#ssl_tls{type = ?ALERT, fragment = EncAlerts}, State} ->
- [Alert|_] = decode_alerts(EncAlerts),
- handle_normal_shutdown(Alert, StateName, State);
- _ ->
- ok
- end.
-
select_curve(#state{client_ecc = {[Curve|_], _}}) ->
{namedCurve, Curve};
select_curve(_) ->
{namedCurve, ?secp256k1}.
+
+is_anonymous(Algo) when Algo == dh_anon;
+ Algo == ecdh_anon;
+ Algo == psk;
+ Algo == dhe_psk;
+ Algo == rsa_psk;
+ Algo == srp_anon ->
+ true;
+is_anonymous(_) ->
+ false.
diff --git a/lib/ssl/src/tls_handshake.erl b/lib/ssl/src/tls_handshake.erl
index 51fd2e1dc9..02bfa69fc5 100644
--- a/lib/ssl/src/tls_handshake.erl
+++ b/lib/ssl/src/tls_handshake.erl
@@ -18,7 +18,8 @@
%%
%%----------------------------------------------------------------------
-%% Purpose: Help funtions for handling the SSL-handshake protocol
+%% Purpose: Help funtions for handling the TLS (specific parts of)
+%%% SSL/TLS/DTLS handshake protocol
%%----------------------------------------------------------------------
-module(tls_handshake).
@@ -31,23 +32,9 @@
-include("ssl_srp.hrl").
-include_lib("public_key/include/public_key.hrl").
--export([master_secret/4, client_hello/8, server_hello/7, hello/4,
- hello_request/0, certify/7, certificate/4,
- client_certificate_verify/6, certificate_verify/6, verify_signature/5,
- certificate_request/3, key_exchange/3, server_key_exchange_hash/2,
- finished/5, verify_connection/6, get_tls_handshake/3,
- decode_client_key/3, decode_server_key/3, server_hello_done/0,
- encode_handshake/2, init_handshake_history/0, update_handshake_history/2,
- decrypt_premaster_secret/2, prf/5, next_protocol/1]).
-
--export([dec_hello_extensions/2]).
-
--type tls_handshake() :: #client_hello{} | #server_hello{} |
- #server_hello_done{} | #certificate{} | #certificate_request{} |
- #client_key_exchange{} | #finished{} | #certificate_verify{} |
- #hello_request{} | #next_protocol{}.
-
--define(NAMED_CURVE_TYPE, 3).
+-export([client_hello/8, server_hello/4, hello/4,
+ get_tls_handshake/3, encode_handshake/2, decode_handshake/3,
+ init_handshake_history/0, update_handshake_history/2]).
%%====================================================================
%% Internal application API
@@ -65,517 +52,105 @@ client_hello(Host, Port, ConnectionStates,
} = SslOpts,
Cache, CacheCb, Renegotiation, OwnCert) ->
Version = tls_record:highest_protocol_version(Versions),
- Pending = tls_record:pending_connection_state(ConnectionStates, read),
+ Pending = ssl_record:pending_connection_state(ConnectionStates, read),
SecParams = Pending#connection_state.security_parameters,
- Ciphers = available_suites(UserSuites, Version),
- SRP = srp_user(SslOpts),
- {EcPointFormats, EllipticCurves} = default_ecc_extensions(Version),
+ CipherSuites = ssl_handshake:available_suites(UserSuites, Version),
+
+ Extensions = ssl_handshake:client_hello_extensions(Version, CipherSuites,
+ SslOpts, ConnectionStates, Renegotiation),
Id = ssl_session:client_id({Host, Port, SslOpts}, Cache, CacheCb, OwnCert),
#client_hello{session_id = Id,
client_version = Version,
- cipher_suites = cipher_suites(Ciphers, Renegotiation),
- compression_methods = tls_record:compressions(),
+ cipher_suites = ssl_handshake:cipher_suites(CipherSuites, Renegotiation),
+ compression_methods = ssl_record:compressions(),
random = SecParams#security_parameters.client_random,
-
- renegotiation_info =
- renegotiation_info(client, ConnectionStates, Renegotiation),
- srp = SRP,
- hash_signs = default_hash_signs(),
- ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves,
- next_protocol_negotiation =
- encode_client_protocol_negotiation(SslOpts#ssl_options.next_protocol_selector, Renegotiation)
+ extensions = Extensions
}.
-encode_protocol(Protocol, Acc) ->
- Len = byte_size(Protocol),
- <<Acc/binary, ?BYTE(Len), Protocol/binary>>.
-
-encode_protocols_advertised_on_server(undefined) ->
- undefined;
-
-encode_protocols_advertised_on_server(Protocols) ->
- #next_protocol_negotiation{extension_data = lists:foldl(fun encode_protocol/2, <<>>, Protocols)}.
-
%%--------------------------------------------------------------------
--spec server_hello(session_id(), tls_version(), #connection_states{},
- boolean(), [binary()] | undefined,
- #ec_point_formats{} | undefined,
- #elliptic_curves{} | undefined) -> #server_hello{}.
+-spec server_hello(#session{}, tls_version(), #connection_states{},
+ #hello_extensions{}) -> #server_hello{}.
%%
%% Description: Creates a server hello message.
%%--------------------------------------------------------------------
-server_hello(SessionId, Version, ConnectionStates, Renegotiation,
- ProtocolsAdvertisedOnServer, EcPointFormats, EllipticCurves) ->
- Pending = tls_record:pending_connection_state(ConnectionStates, read),
+server_hello(SessionId, Version, ConnectionStates, Extensions) ->
+ Pending = ssl_record:pending_connection_state(ConnectionStates, read),
SecParams = Pending#connection_state.security_parameters,
+
#server_hello{server_version = Version,
cipher_suite = SecParams#security_parameters.cipher_suite,
compression_method =
SecParams#security_parameters.compression_algorithm,
random = SecParams#security_parameters.server_random,
session_id = SessionId,
- renegotiation_info =
- renegotiation_info(server, ConnectionStates, Renegotiation),
- ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves,
- next_protocol_negotiation = encode_protocols_advertised_on_server(ProtocolsAdvertisedOnServer)
+ extensions = Extensions
}.
%%--------------------------------------------------------------------
--spec hello_request() -> #hello_request{}.
-%%
-%% Description: Creates a hello request message sent by server to
-%% trigger renegotiation.
-%%--------------------------------------------------------------------
-hello_request() ->
- #hello_request{}.
-
-%%--------------------------------------------------------------------
-spec hello(#server_hello{} | #client_hello{}, #ssl_options{},
#connection_states{} | {inet:port_number(), #session{}, db_handle(),
- atom(), #connection_states{}, binary()},
+ atom(), #connection_states{}, binary() | undefined},
boolean()) ->
{tls_version(), session_id(), #connection_states{}, binary() | undefined}|
- {tls_version(), {resumed | new, #session{}}, #connection_states{}, [binary()] | undefined,
+ {tls_version(), {resumed | new, #session{}}, #connection_states{},
+ [binary()] | undefined,
[oid()] | undefined, [oid()] | undefined} |
#alert{}.
%%
%% Description: Handles a recieved hello message
%%--------------------------------------------------------------------
-hello(#server_hello{cipher_suite = CipherSuite, server_version = Version,
- compression_method = Compression, random = Random,
- session_id = SessionId, renegotiation_info = Info,
- hash_signs = _HashSigns} = Hello,
- #ssl_options{secure_renegotiate = SecureRenegotation, next_protocol_selector = NextProtocolSelector,
- versions = SupportedVersions},
+hello(#server_hello{server_version = Version, random = Random,
+ cipher_suite = CipherSuite,
+ compression_method = Compression,
+ session_id = SessionId, extensions = HelloExt},
+ #ssl_options{versions = SupportedVersions} = SslOpt,
ConnectionStates0, Renegotiation) ->
- %%TODO: select hash and signature algorigthm
case tls_record:is_acceptable_version(Version, SupportedVersions) of
true ->
- case handle_renegotiation_info(client, Info, ConnectionStates0,
- Renegotiation, SecureRenegotation, []) of
- {ok, ConnectionStates1} ->
- ConnectionStates =
- hello_pending_connection_states(client, Version, CipherSuite, Random,
- Compression, ConnectionStates1),
- case handle_next_protocol(Hello, NextProtocolSelector, Renegotiation) of
- #alert{} = Alert ->
- Alert;
- Protocol ->
- {Version, SessionId, ConnectionStates, Protocol}
- end;
- #alert{} = Alert ->
- Alert
- end;
+ handle_hello_extensions(Version, SessionId, Random, CipherSuite,
+ Compression, HelloExt, SslOpt, ConnectionStates0, Renegotiation);
false ->
?ALERT_REC(?FATAL, ?PROTOCOL_VERSION)
end;
-hello(#client_hello{client_version = ClientVersion} = Hello,
+hello(#client_hello{client_version = ClientVersion,
+ session_id = SugesstedId,
+ cipher_suites = CipherSuites,
+ compression_methods = Compressions,
+ random = Random,
+ extensions = HelloExt},
#ssl_options{versions = Versions} = SslOpts,
{Port, Session0, Cache, CacheCb, ConnectionStates0, Cert}, Renegotiation) ->
- %% TODO: select hash and signature algorithm
- Version = select_version(ClientVersion, Versions),
+ Version = ssl_handshake:select_version(tls_record, ClientVersion, Versions),
case tls_record:is_acceptable_version(Version, Versions) of
true ->
%% TODO: need to take supported Curves into Account when selecting the CipherSuite....
%% if whe have an ECDSA cert with an unsupported curve, we need to drop ECDSA ciphers
{Type, #session{cipher_suite = CipherSuite} = Session1}
- = select_session(Hello, Port, Session0, Version,
- SslOpts, Cache, CacheCb, Cert),
+ = ssl_handshake:select_session(SugesstedId, CipherSuites, Compressions,
+ Port, Session0, Version,
+ SslOpts, Cache, CacheCb, Cert),
case CipherSuite of
no_suite ->
?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
_ ->
- try handle_hello_extensions(Hello, Version, SslOpts, Session1, ConnectionStates0, Renegotiation) of
- {Session, ConnectionStates, ProtocolsToAdvertise, ECPointFormats, EllipticCurves} ->
- {Version, {Type, Session}, ConnectionStates,
- ProtocolsToAdvertise, ECPointFormats, EllipticCurves}
- catch throw:Alert ->
- Alert
- end
+ handle_hello_extensions(Version, Type, Random, HelloExt,
+ SslOpts, Session1, ConnectionStates0,
+ Renegotiation)
end;
false ->
?ALERT_REC(?FATAL, ?PROTOCOL_VERSION)
end.
%%--------------------------------------------------------------------
--spec certify(#certificate{}, db_handle(), certdb_ref(), integer() | nolimit,
- verify_peer | verify_none, {fun(), term},
- client | server) -> {der_cert(), public_key_info()} | #alert{}.
-%%
-%% Description: Handles a certificate handshake message
-%%--------------------------------------------------------------------
-certify(#certificate{asn1_certificates = ASN1Certs}, CertDbHandle, CertDbRef,
- MaxPathLen, _Verify, VerifyFunAndState, Role) ->
- [PeerCert | _] = ASN1Certs,
-
- ValidationFunAndState =
- case VerifyFunAndState of
- undefined ->
- {fun(OtpCert, ExtensionOrVerifyResult, SslState) ->
- ssl_certificate:validate_extension(OtpCert,
- ExtensionOrVerifyResult, SslState)
- end, Role};
- {Fun, UserState0} ->
- {fun(OtpCert, {extension, _} = Extension, {SslState, UserState}) ->
- case ssl_certificate:validate_extension(OtpCert,
- Extension,
- SslState) of
- {valid, NewSslState} ->
- {valid, {NewSslState, UserState}};
- {fail, Reason} ->
- apply_user_fun(Fun, OtpCert, Reason, UserState,
- SslState);
- {unknown, _} ->
- apply_user_fun(Fun, OtpCert,
- Extension, UserState, SslState)
- end;
- (OtpCert, VerifyResult, {SslState, UserState}) ->
- apply_user_fun(Fun, OtpCert, VerifyResult, UserState,
- SslState)
- end, {Role, UserState0}}
- end,
-
- try
- {TrustedErlCert, CertPath} =
- ssl_certificate:trusted_cert_and_path(ASN1Certs, CertDbHandle, CertDbRef),
- case public_key:pkix_path_validation(TrustedErlCert,
- CertPath,
- [{max_path_length,
- MaxPathLen},
- {verify_fun, ValidationFunAndState}]) of
- {ok, {PublicKeyInfo,_}} ->
- {PeerCert, PublicKeyInfo};
- {error, Reason} ->
- path_validation_alert(Reason)
- end
- catch
- error:_ ->
- %% ASN-1 decode of certificate somehow failed
- ?ALERT_REC(?FATAL, ?CERTIFICATE_UNKNOWN)
- end.
-
-%%--------------------------------------------------------------------
--spec certificate(der_cert(), db_handle(), certdb_ref(), client | server) -> #certificate{} | #alert{}.
-%%
-%% Description: Creates a certificate message.
-%%--------------------------------------------------------------------
-certificate(OwnCert, CertDbHandle, CertDbRef, client) ->
- Chain =
- case ssl_certificate:certificate_chain(OwnCert, CertDbHandle, CertDbRef) of
- {ok, CertChain} ->
- CertChain;
- {error, _} ->
- %% If no suitable certificate is available, the client
- %% SHOULD send a certificate message containing no
- %% certificates. (chapter 7.4.6. RFC 4346)
- []
- end,
- #certificate{asn1_certificates = Chain};
-
-certificate(OwnCert, CertDbHandle, CertDbRef, server) ->
- case ssl_certificate:certificate_chain(OwnCert, CertDbHandle, CertDbRef) of
- {ok, Chain} ->
- #certificate{asn1_certificates = Chain};
- {error, _} ->
- ?ALERT_REC(?FATAL, ?INTERNAL_ERROR)
- end.
-
-%%--------------------------------------------------------------------
--spec client_certificate_verify(undefined | der_cert(), binary(),
- tls_version(), term(), private_key(),
- tls_handshake_history()) ->
- #certificate_verify{} | ignore | #alert{}.
-%%
-%% Description: Creates a certificate_verify message, called by the client.
-%%--------------------------------------------------------------------
-client_certificate_verify(undefined, _, _, _, _, _) ->
- ignore;
-client_certificate_verify(_, _, _, _, undefined, _) ->
- ignore;
-client_certificate_verify(OwnCert, MasterSecret, Version,
- {HashAlgo, SignAlgo},
- PrivateKey, {Handshake, _}) ->
- case public_key:pkix_is_fixed_dh_cert(OwnCert) of
- true ->
- ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE);
- false ->
- Hashes =
- calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake),
- Signed = digitally_signed(Version, Hashes, HashAlgo, PrivateKey),
- #certificate_verify{signature = Signed, hashsign_algorithm = {HashAlgo, SignAlgo}}
- end.
-
-%%--------------------------------------------------------------------
--spec certificate_verify(binary(), public_key_info(), tls_version(), term(),
- binary(), tls_handshake_history()) -> valid | #alert{}.
-%%
-%% Description: Checks that the certificate_verify message is valid.
-%%--------------------------------------------------------------------
-certificate_verify(Signature, PublicKeyInfo, Version,
- HashSign = {HashAlgo, _}, MasterSecret, {_, Handshake}) ->
- Hash = calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake),
- case verify_signature(Version, Hash, HashSign, Signature, PublicKeyInfo) of
- true ->
- valid;
- _ ->
- ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE)
- end.
-
-%%--------------------------------------------------------------------
--spec verify_signature(tls_version(), binary(), {term(), term()}, binary(),
- public_key_info()) -> true | false.
-%%
-%% Description: Checks that a public_key signature is valid.
-%%--------------------------------------------------------------------
-verify_signature(_Version, _Hash, {_HashAlgo, anon}, _Signature, _) ->
- true;
-verify_signature({3, Minor}, Hash, {HashAlgo, rsa}, Signature, {?rsaEncryption, PubKey, _PubKeyParams})
- when Minor >= 3 ->
- public_key:verify({digest, Hash}, HashAlgo, Signature, PubKey);
-verify_signature(_Version, Hash, _HashAlgo, Signature, {?rsaEncryption, PubKey, _PubKeyParams}) ->
- case public_key:decrypt_public(Signature, PubKey,
- [{rsa_pad, rsa_pkcs1_padding}]) of
- Hash -> true;
- _ -> false
- end;
-verify_signature(_Version, Hash, {HashAlgo, dsa}, Signature, {?'id-dsa', PublicKey, PublicKeyParams}) ->
- public_key:verify({digest, Hash}, HashAlgo, Signature, {PublicKey, PublicKeyParams});
-verify_signature(_Version, Hash, {HashAlgo, ecdsa}, Signature, {?'id-ecPublicKey', PublicKey, PublicKeyParams}) ->
- public_key:verify({digest, Hash}, HashAlgo, Signature, {PublicKey, PublicKeyParams}).
-
-%%--------------------------------------------------------------------
--spec certificate_request(#connection_states{}, db_handle(), certdb_ref()) ->
- #certificate_request{}.
-%%
-%% Description: Creates a certificate_request message, called by the server.
-%%--------------------------------------------------------------------
-certificate_request(ConnectionStates, CertDbHandle, CertDbRef) ->
- #connection_state{security_parameters =
- #security_parameters{cipher_suite = CipherSuite}} =
- tls_record:pending_connection_state(ConnectionStates, read),
- Types = certificate_types(CipherSuite),
- HashSigns = default_hash_signs(),
- Authorities = certificate_authorities(CertDbHandle, CertDbRef),
- #certificate_request{
- certificate_types = Types,
- hashsign_algorithms = HashSigns,
- certificate_authorities = Authorities
- }.
-
-%%--------------------------------------------------------------------
--spec key_exchange(client | server, tls_version(),
- {premaster_secret, binary(), public_key_info()} |
- {dh, binary()} |
- {dh, {binary(), binary()}, #'DHParameter'{}, {HashAlgo::atom(), SignAlgo::atom()},
- binary(), binary(), private_key()} |
- {ecdh, #'ECPrivateKey'{}} |
- {psk, binary()} |
- {dhe_psk, binary(), binary()} |
- {srp, {binary(), binary()}, #srp_user{}, {HashAlgo::atom(), SignAlgo::atom()},
- binary(), binary(), private_key()}) ->
- #client_key_exchange{} | #server_key_exchange{}.
-%%
-%% Description: Creates a keyexchange message.
-%%--------------------------------------------------------------------
-key_exchange(client, _Version, {premaster_secret, Secret, {_, PublicKey, _}}) ->
- EncPremasterSecret =
- encrypted_premaster_secret(Secret, PublicKey),
- #client_key_exchange{exchange_keys = EncPremasterSecret};
-
-key_exchange(client, _Version, {dh, PublicKey}) ->
- #client_key_exchange{
- exchange_keys = #client_diffie_hellman_public{
- dh_public = PublicKey}
- };
-
-key_exchange(client, _Version, {ecdh, #'ECPrivateKey'{publicKey = {0, ECPublicKey}}}) ->
- #client_key_exchange{
- exchange_keys = #client_ec_diffie_hellman_public{
- dh_public = ECPublicKey}
- };
-
-key_exchange(client, _Version, {psk, Identity}) ->
- #client_key_exchange{
- exchange_keys = #client_psk_identity{
- identity = Identity}
- };
-
-key_exchange(client, _Version, {dhe_psk, Identity, PublicKey}) ->
- #client_key_exchange{
- exchange_keys = #client_dhe_psk_identity{
- identity = Identity,
- dh_public = PublicKey}
- };
-
-key_exchange(client, _Version, {psk_premaster_secret, PskIdentity, Secret, {_, PublicKey, _}}) ->
- EncPremasterSecret =
- encrypted_premaster_secret(Secret, PublicKey),
- #client_key_exchange{
- exchange_keys = #client_rsa_psk_identity{
- identity = PskIdentity,
- exchange_keys = EncPremasterSecret}};
-
-key_exchange(client, _Version, {srp, PublicKey}) ->
- #client_key_exchange{
- exchange_keys = #client_srp_public{
- srp_a = PublicKey}
- };
-
-key_exchange(server, Version, {dh, {PublicKey, _},
- #'DHParameter'{prime = P, base = G},
- HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
- ServerDHParams = #server_dh_params{dh_p = int_to_bin(P),
- dh_g = int_to_bin(G), dh_y = PublicKey},
- enc_server_key_exchange(Version, ServerDHParams, HashSign,
- ClientRandom, ServerRandom, PrivateKey);
-
-key_exchange(server, Version, {ecdh, #'ECPrivateKey'{publicKey = {0, ECPublicKey},
- parameters = ECCurve}, HashSign, ClientRandom, ServerRandom,
- PrivateKey}) ->
- ServerECParams = #server_ecdh_params{curve = ECCurve, public = ECPublicKey},
- enc_server_key_exchange(Version, ServerECParams, HashSign,
- ClientRandom, ServerRandom, PrivateKey);
-
-key_exchange(server, Version, {psk, PskIdentityHint,
- HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
- ServerPSKParams = #server_psk_params{hint = PskIdentityHint},
- enc_server_key_exchange(Version, ServerPSKParams, HashSign,
- ClientRandom, ServerRandom, PrivateKey);
-
-key_exchange(server, Version, {dhe_psk, PskIdentityHint, {PublicKey, _},
- #'DHParameter'{prime = P, base = G},
- HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
- ServerEDHPSKParams = #server_dhe_psk_params{
- hint = PskIdentityHint,
- dh_params = #server_dh_params{dh_p = int_to_bin(P),
- dh_g = int_to_bin(G), dh_y = PublicKey}
- },
- enc_server_key_exchange(Version, ServerEDHPSKParams,
- HashSign, ClientRandom, ServerRandom, PrivateKey);
-
-key_exchange(server, Version, {srp, {PublicKey, _},
- #srp_user{generator = Generator, prime = Prime,
- salt = Salt},
- HashSign, ClientRandom, ServerRandom, PrivateKey}) ->
- ServerSRPParams = #server_srp_params{srp_n = Prime, srp_g = Generator,
- srp_s = Salt, srp_b = PublicKey},
- enc_server_key_exchange(Version, ServerSRPParams, HashSign,
- ClientRandom, ServerRandom, PrivateKey).
-
-enc_server_key_exchange(Version, Params, {HashAlgo, SignAlgo},
- ClientRandom, ServerRandom, PrivateKey) ->
- EncParams = enc_server_key(Params),
- case HashAlgo of
- null ->
- #server_key_params{params = Params,
- params_bin = EncParams,
- hashsign = {null, anon},
- signature = <<>>};
- _ ->
- Hash =
- server_key_exchange_hash(HashAlgo, <<ClientRandom/binary,
- ServerRandom/binary,
- EncParams/binary>>),
- Signature = digitally_signed(Version, Hash, HashAlgo, PrivateKey),
- #server_key_params{params = Params,
- params_bin = EncParams,
- hashsign = {HashAlgo, SignAlgo},
- signature = Signature}
- end.
-
-%%--------------------------------------------------------------------
--spec master_secret(tls_version(), #session{} | binary(), #connection_states{},
- client | server) -> {binary(), #connection_states{}} | #alert{}.
-%%
-%% Description: Sets or calculates the master secret and calculate keys,
-%% updating the pending connection states. The Mastersecret and the update
-%% connection states are returned or an alert if the calculation fails.
-%%-------------------------------------------------------------------
-master_secret(Version, #session{master_secret = Mastersecret},
- ConnectionStates, Role) ->
- ConnectionState =
- tls_record:pending_connection_state(ConnectionStates, read),
- SecParams = ConnectionState#connection_state.security_parameters,
- try master_secret(Version, Mastersecret, SecParams,
- ConnectionStates, Role)
- catch
- exit:Reason ->
- Report = io_lib:format("Key calculation failed due to ~p",
- [Reason]),
- error_logger:error_report(Report),
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
- end;
-
-master_secret(Version, PremasterSecret, ConnectionStates, Role) ->
- ConnectionState =
- tls_record:pending_connection_state(ConnectionStates, read),
- SecParams = ConnectionState#connection_state.security_parameters,
- #security_parameters{prf_algorithm = PrfAlgo,
- client_random = ClientRandom,
- server_random = ServerRandom} = SecParams,
- try master_secret(Version,
- calc_master_secret(Version,PrfAlgo,PremasterSecret,
- ClientRandom, ServerRandom),
- SecParams, ConnectionStates, Role)
- catch
- exit:Reason ->
- Report = io_lib:format("Master secret calculation failed"
- " due to ~p", [Reason]),
- error_logger:error_report(Report),
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
- end.
-
--spec next_protocol(binary()) -> #next_protocol{}.
-
-next_protocol(SelectedProtocol) ->
- #next_protocol{selected_protocol = SelectedProtocol}.
-
-%%--------------------------------------------------------------------
--spec finished(tls_version(), client | server, integer(), binary(), tls_handshake_history()) ->
- #finished{}.
-%%
-%% Description: Creates a handshake finished message
-%%-------------------------------------------------------------------
-finished(Version, Role, PrfAlgo, MasterSecret, {Handshake, _}) -> % use the current handshake
- #finished{verify_data =
- calc_finished(Version, Role, PrfAlgo, MasterSecret, Handshake)}.
-
-%%--------------------------------------------------------------------
--spec verify_connection(tls_version(), #finished{}, client | server, integer(), binary(),
- tls_handshake_history()) -> verified | #alert{}.
-%%
-%% Description: Checks the ssl handshake finished message to verify
-%% the connection.
-%%-------------------------------------------------------------------
-verify_connection(Version, #finished{verify_data = Data},
- Role, PrfAlgo, MasterSecret, {_, Handshake}) ->
- %% use the previous hashes
- case calc_finished(Version, Role, PrfAlgo, MasterSecret, Handshake) of
- Data ->
- verified;
- _ ->
- ?ALERT_REC(?FATAL, ?DECRYPT_ERROR)
- end.
-%%--------------------------------------------------------------------
--spec server_hello_done() -> #server_hello_done{}.
-%%
-%% Description: Creates a server hello done message.
-%%--------------------------------------------------------------------
-server_hello_done() ->
- #server_hello_done{}.
-
-%%--------------------------------------------------------------------
-spec encode_handshake(tls_handshake(), tls_version()) -> iolist().
%%
-%% Description: Encode a handshake packet to binary
+%% Description: Encode a handshake packet
%%--------------------------------------------------------------------x
encode_handshake(Package, Version) ->
- {MsgType, Bin} = enc_hs(Package, Version),
+ {MsgType, Bin} = enc_handshake(Package, Version),
Len = byte_size(Bin),
[MsgType, ?uint24(Len), Bin].
@@ -593,30 +168,6 @@ get_tls_handshake(Version, Data, Buffer) ->
get_tls_handshake_aux(Version, list_to_binary([Buffer, Data]), []).
%%--------------------------------------------------------------------
--spec decode_client_key(binary(), key_algo(), tls_version()) ->
- #encrypted_premaster_secret{}
- | #client_diffie_hellman_public{}
- | #client_ec_diffie_hellman_public{}
- | #client_psk_identity{}
- | #client_dhe_psk_identity{}
- | #client_rsa_psk_identity{}
- | #client_srp_public{}.
-%%
-%% Description: Decode client_key data and return appropriate type
-%%--------------------------------------------------------------------
-decode_client_key(ClientKey, Type, Version) ->
- dec_client_key(ClientKey, key_exchange_alg(Type), Version).
-
-%%--------------------------------------------------------------------
--spec decode_server_key(binary(), key_algo(), tls_version()) ->
- #server_key_params{}.
-%%
-%% Description: Decode server_key data and return appropriate type
-%%--------------------------------------------------------------------
-decode_server_key(ServerKey, Type, Version) ->
- dec_server_key(ServerKey, key_exchange_alg(Type), Version).
-
-%%--------------------------------------------------------------------
-spec init_handshake_history() -> tls_handshake_history().
%%
@@ -646,1182 +197,99 @@ update_handshake_history(Handshake, % special-case SSL2 client hello
update_handshake_history({Handshake0, _Prev}, Data) ->
{[Data|Handshake0], Handshake0}.
-%%--------------------------------------------------------------------
--spec decrypt_premaster_secret(binary(), #'RSAPrivateKey'{}) -> binary().
-%%
-%% Description: Public key decryption using the private key.
-%%--------------------------------------------------------------------
-decrypt_premaster_secret(Secret, RSAPrivateKey) ->
- try public_key:decrypt_private(Secret, RSAPrivateKey,
- [{rsa_pad, rsa_pkcs1_padding}])
- catch
- _:_ ->
- io:format("decrypt_premaster_secret error"),
- throw(?ALERT_REC(?FATAL, ?DECRYPT_ERROR))
- end.
-
-%%--------------------------------------------------------------------
--spec server_key_exchange_hash(md5sha | md5 | sha | sha224 |sha256 | sha384 | sha512, binary()) -> binary().
-%%
-%% Description: Calculate server key exchange hash
-%%--------------------------------------------------------------------
-server_key_exchange_hash(md5sha, Value) ->
- MD5 = crypto:hash(md5, Value),
- SHA = crypto:hash(sha, Value),
- <<MD5/binary, SHA/binary>>;
-
-server_key_exchange_hash(Hash, Value) ->
- crypto:hash(Hash, Value).
-
-%%--------------------------------------------------------------------
--spec prf(tls_version(), binary(), binary(), [binary()], non_neg_integer()) ->
- {ok, binary()} | {error, undefined}.
-%%
-%% Description: use the TLS PRF to generate key material
-%%--------------------------------------------------------------------
-prf({3,0}, _, _, _, _) ->
- {error, undefined};
-prf({3,1}, Secret, Label, Seed, WantedLength) ->
- {ok, ssl_tls1:prf(?MD5SHA, Secret, Label, Seed, WantedLength)};
-prf({3,_N}, Secret, Label, Seed, WantedLength) ->
- {ok, ssl_tls1:prf(?SHA256, Secret, Label, Seed, WantedLength)}.
-
-%%--------------------------------------------------------------------
-%%% Internal functions
-%%--------------------------------------------------------------------
get_tls_handshake_aux(Version, <<?BYTE(Type), ?UINT24(Length),
Body:Length/binary,Rest/binary>>, Acc) ->
Raw = <<?BYTE(Type), ?UINT24(Length), Body/binary>>,
- H = dec_hs(Version, Type, Body),
- get_tls_handshake_aux(Version, Rest, [{H,Raw} | Acc]);
+ Handshake = decode_handshake(Version, Type, Body),
+ get_tls_handshake_aux(Version, Rest, [{Handshake,Raw} | Acc]);
get_tls_handshake_aux(_Version, Data, Acc) ->
{lists:reverse(Acc), Data}.
-path_validation_alert({bad_cert, cert_expired}) ->
- ?ALERT_REC(?FATAL, ?CERTIFICATE_EXPIRED);
-path_validation_alert({bad_cert, invalid_issuer}) ->
- ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
-path_validation_alert({bad_cert, invalid_signature}) ->
- ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
-path_validation_alert({bad_cert, name_not_permitted}) ->
- ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
-path_validation_alert({bad_cert, unknown_critical_extension}) ->
- ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE);
-path_validation_alert({bad_cert, cert_revoked}) ->
- ?ALERT_REC(?FATAL, ?CERTIFICATE_REVOKED);
-path_validation_alert({bad_cert, selfsigned_peer}) ->
- ?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
-path_validation_alert({bad_cert, unknown_ca}) ->
- ?ALERT_REC(?FATAL, ?UNKNOWN_CA);
-path_validation_alert(_) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE).
-
-select_session(Hello, Port, Session, Version,
- #ssl_options{ciphers = UserSuites} = SslOpts, Cache, CacheCb, Cert) ->
- SuggestedSessionId = Hello#client_hello.session_id,
- {SessionId, Resumed} = ssl_session:server_id(Port, SuggestedSessionId,
- SslOpts, Cert,
- Cache, CacheCb),
- Suites = available_suites(Cert, UserSuites, Version),
- case Resumed of
- undefined ->
- CipherSuite = select_cipher_suite(Hello#client_hello.cipher_suites, Suites),
- Compressions = Hello#client_hello.compression_methods,
- Compression = select_compression(Compressions),
- {new, Session#session{session_id = SessionId,
- cipher_suite = CipherSuite,
- compression_method = Compression}};
- _ ->
- {resumed, Resumed}
- end.
-
-available_suites(UserSuites, Version) ->
- case UserSuites of
- [] ->
- ssl_cipher:suites(Version);
- _ ->
- UserSuites
- end.
-
-available_suites(ServerCert, UserSuites, Version) ->
- ssl_cipher:filter(ServerCert, available_suites(UserSuites, Version)).
-
-cipher_suites(Suites, false) ->
- [?TLS_EMPTY_RENEGOTIATION_INFO_SCSV | Suites];
-cipher_suites(Suites, true) ->
- Suites.
-
-srp_user(#ssl_options{srp_identity = {UserName, _}}) ->
- #srp{username = UserName};
-srp_user(_) ->
- undefined.
-
-renegotiation_info(client, _, false) ->
- #renegotiation_info{renegotiated_connection = undefined};
-renegotiation_info(server, ConnectionStates, false) ->
- CS = tls_record:current_connection_state(ConnectionStates, read),
- case CS#connection_state.secure_renegotiation of
- true ->
- #renegotiation_info{renegotiated_connection = ?byte(0)};
- false ->
- #renegotiation_info{renegotiated_connection = undefined}
- end;
-renegotiation_info(client, ConnectionStates, true) ->
- CS = tls_record:current_connection_state(ConnectionStates, read),
- case CS#connection_state.secure_renegotiation of
- true ->
- Data = CS#connection_state.client_verify_data,
- #renegotiation_info{renegotiated_connection = Data};
- false ->
- #renegotiation_info{renegotiated_connection = undefined}
- end;
-
-renegotiation_info(server, ConnectionStates, true) ->
- CS = tls_record:current_connection_state(ConnectionStates, read),
- case CS#connection_state.secure_renegotiation of
- true ->
- CData = CS#connection_state.client_verify_data,
- SData =CS#connection_state.server_verify_data,
- #renegotiation_info{renegotiated_connection = <<CData/binary, SData/binary>>};
- false ->
- #renegotiation_info{renegotiated_connection = undefined}
- end.
-
-decode_next_protocols({next_protocol_negotiation, Protocols}) ->
- decode_next_protocols(Protocols, []).
-decode_next_protocols(<<>>, Acc) ->
- lists:reverse(Acc);
-decode_next_protocols(<<?BYTE(Len), Protocol:Len/binary, Rest/binary>>, Acc) ->
- case Len of
- 0 ->
- {error, invalid_next_protocols};
- _ ->
- decode_next_protocols(Rest, [Protocol|Acc])
- end;
-decode_next_protocols(_Bytes, _Acc) ->
- {error, invalid_next_protocols}.
-
-next_protocol_extension_allowed(NextProtocolSelector, Renegotiating) ->
- NextProtocolSelector =/= undefined andalso not Renegotiating.
-
-handle_next_protocol_on_server(#client_hello{next_protocol_negotiation = undefined}, _Renegotiation, _SslOpts) ->
- undefined;
-
-handle_next_protocol_on_server(#client_hello{next_protocol_negotiation = {next_protocol_negotiation, <<>>}},
- false, #ssl_options{next_protocols_advertised = Protocols}) ->
- Protocols;
-
-handle_next_protocol_on_server(_Hello, _Renegotiation, _SSLOpts) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE). % unexpected next protocol extension
-
-handle_next_protocol(#server_hello{next_protocol_negotiation = undefined},
- _NextProtocolSelector, _Renegotiating) ->
- undefined;
-
-handle_next_protocol(#server_hello{next_protocol_negotiation = Protocols},
- NextProtocolSelector, Renegotiating) ->
-
- case next_protocol_extension_allowed(NextProtocolSelector, Renegotiating) of
- true ->
- select_next_protocol(decode_next_protocols(Protocols), NextProtocolSelector);
- false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE) % unexpected next protocol extension
- end.
-
-select_next_protocol({error, _Reason}, _NextProtocolSelector) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
-select_next_protocol(Protocols, NextProtocolSelector) ->
- case NextProtocolSelector(Protocols) of
- ?NO_PROTOCOL ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
- Protocol when is_binary(Protocol) ->
- Protocol
- end.
-
-default_ecc_extensions(Version) ->
- CryptoSupport = proplists:get_value(public_keys, crypto:supports()),
- case proplists:get_bool(ecdh, CryptoSupport) of
- true ->
- EcPointFormats = #ec_point_formats{ec_point_format_list = [?ECPOINT_UNCOMPRESSED]},
- EllipticCurves = #elliptic_curves{elliptic_curve_list = ssl_tls1:ecc_curves(Version)},
- {EcPointFormats, EllipticCurves};
- _ ->
- {undefined, undefined}
- end.
-
-handle_ecc_extensions(Version, EcPointFormats0, EllipticCurves0) ->
- CryptoSupport = proplists:get_value(public_keys, crypto:supports()),
- case proplists:get_bool(ecdh, CryptoSupport) of
- true ->
- EcPointFormats1 = handle_ecc_point_fmt_extension(EcPointFormats0),
- EllipticCurves1 = handle_ecc_curves_extension(Version, EllipticCurves0),
- {EcPointFormats1, EllipticCurves1};
- _ ->
- {undefined, undefined}
- end.
-
-handle_ecc_point_fmt_extension(undefined) ->
- undefined;
-handle_ecc_point_fmt_extension(_) ->
- #ec_point_formats{ec_point_format_list = [?ECPOINT_UNCOMPRESSED]}.
-
-handle_ecc_curves_extension(_Version, undefined) ->
- undefined;
-handle_ecc_curves_extension(Version, _) ->
- #elliptic_curves{elliptic_curve_list = ssl_tls1:ecc_curves(Version)}.
-
-handle_renegotiation_info(_, #renegotiation_info{renegotiated_connection = ?byte(0)},
- ConnectionStates, false, _, _) ->
- {ok, tls_record:set_renegotiation_flag(true, ConnectionStates)};
-
-handle_renegotiation_info(server, undefined, ConnectionStates, _, _, CipherSuites) ->
- case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
- true ->
- {ok, tls_record:set_renegotiation_flag(true, ConnectionStates)};
- false ->
- {ok, tls_record:set_renegotiation_flag(false, ConnectionStates)}
- end;
-
-handle_renegotiation_info(_, undefined, ConnectionStates, false, _, _) ->
- {ok, tls_record:set_renegotiation_flag(false, ConnectionStates)};
-
-handle_renegotiation_info(client, #renegotiation_info{renegotiated_connection = ClientServerVerify},
- ConnectionStates, true, _, _) ->
- CS = tls_record:current_connection_state(ConnectionStates, read),
- CData = CS#connection_state.client_verify_data,
- SData = CS#connection_state.server_verify_data,
- case <<CData/binary, SData/binary>> == ClientServerVerify of
- true ->
- {ok, ConnectionStates};
- false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
- end;
-handle_renegotiation_info(server, #renegotiation_info{renegotiated_connection = ClientVerify},
- ConnectionStates, true, _, CipherSuites) ->
-
- case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
- true ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
- false ->
- CS = tls_record:current_connection_state(ConnectionStates, read),
- Data = CS#connection_state.client_verify_data,
- case Data == ClientVerify of
- true ->
- {ok, ConnectionStates};
- false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
- end
- end;
-
-handle_renegotiation_info(client, undefined, ConnectionStates, true, SecureRenegotation, _) ->
- handle_renegotiation_info(ConnectionStates, SecureRenegotation);
-
-handle_renegotiation_info(server, undefined, ConnectionStates, true, SecureRenegotation, CipherSuites) ->
- case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
- true ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
- false ->
- handle_renegotiation_info(ConnectionStates, SecureRenegotation)
- end.
-
-handle_renegotiation_info(ConnectionStates, SecureRenegotation) ->
- CS = tls_record:current_connection_state(ConnectionStates, read),
- case {SecureRenegotation, CS#connection_state.secure_renegotiation} of
- {_, true} ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
- {true, false} ->
- ?ALERT_REC(?FATAL, ?NO_RENEGOTIATION);
- {false, false} ->
- {ok, ConnectionStates}
- end.
-
-%% Update pending connection states with parameters exchanged via
-%% hello messages
-%% NOTE : Role is the role of the receiver of the hello message
-%% currently being processed.
-hello_pending_connection_states(Role, Version, CipherSuite, Random, Compression,
- ConnectionStates) ->
- ReadState =
- tls_record:pending_connection_state(ConnectionStates, read),
- WriteState =
- tls_record:pending_connection_state(ConnectionStates, write),
-
- NewReadSecParams =
- hello_security_parameters(Role, Version, ReadState, CipherSuite,
- Random, Compression),
-
- NewWriteSecParams =
- hello_security_parameters(Role, Version, WriteState, CipherSuite,
- Random, Compression),
-
- tls_record:update_security_params(NewReadSecParams,
- NewWriteSecParams,
- ConnectionStates).
-
-hello_security_parameters(client, Version, ConnectionState, CipherSuite, Random,
- Compression) ->
- SecParams = ConnectionState#connection_state.security_parameters,
- NewSecParams = ssl_cipher:security_parameters(Version, CipherSuite, SecParams),
- NewSecParams#security_parameters{
- server_random = Random,
- compression_algorithm = Compression
- };
-
-hello_security_parameters(server, Version, ConnectionState, CipherSuite, Random,
- Compression) ->
- SecParams = ConnectionState#connection_state.security_parameters,
- NewSecParams = ssl_cipher:security_parameters(Version, CipherSuite, SecParams),
- NewSecParams#security_parameters{
- client_random = Random,
- compression_algorithm = Compression
- }.
-
-select_version(ClientVersion, Versions) ->
- ServerVersion = tls_record:highest_protocol_version(Versions),
- tls_record:lowest_protocol_version(ClientVersion, ServerVersion).
-
-select_cipher_suite([], _) ->
- no_suite;
-select_cipher_suite([Suite | ClientSuites], SupportedSuites) ->
- case is_member(Suite, SupportedSuites) of
- true ->
- Suite;
- false ->
- select_cipher_suite(ClientSuites, SupportedSuites)
- end.
-
-is_member(Suite, SupportedSuites) ->
- lists:member(Suite, SupportedSuites).
-
-select_compression(_CompressionMetodes) ->
- ?NULL.
-
-master_secret(Version, MasterSecret, #security_parameters{
- client_random = ClientRandom,
- server_random = ServerRandom,
- hash_size = HashSize,
- prf_algorithm = PrfAlgo,
- key_material_length = KML,
- expanded_key_material_length = EKML,
- iv_size = IVS},
- ConnectionStates, Role) ->
- {ClientWriteMacSecret, ServerWriteMacSecret, ClientWriteKey,
- ServerWriteKey, ClientIV, ServerIV} =
- setup_keys(Version, PrfAlgo, MasterSecret, ServerRandom,
- ClientRandom, HashSize, KML, EKML, IVS),
-
- ConnStates1 = tls_record:set_master_secret(MasterSecret, ConnectionStates),
- ConnStates2 =
- tls_record:set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret,
- Role, ConnStates1),
-
- ClientCipherState = #cipher_state{iv = ClientIV, key = ClientWriteKey},
- ServerCipherState = #cipher_state{iv = ServerIV, key = ServerWriteKey},
- {MasterSecret,
- tls_record:set_pending_cipher_state(ConnStates2, ClientCipherState,
- ServerCipherState, Role)}.
-
-
-dec_hs(_, ?NEXT_PROTOCOL, <<?BYTE(SelectedProtocolLength), SelectedProtocol:SelectedProtocolLength/binary,
- ?BYTE(PaddingLength), _Padding:PaddingLength/binary>>) ->
- #next_protocol{selected_protocol = SelectedProtocol};
+%%--------------------------------------------------------------------
+%%% Internal functions
+%%--------------------------------------------------------------------
-dec_hs(_, ?HELLO_REQUEST, <<>>) ->
+decode_handshake(_, ?HELLO_REQUEST, <<>>) ->
#hello_request{};
%% Client hello v2.
%% The server must be able to receive such messages, from clients that
%% are willing to use ssl v3 or higher, but have ssl v2 compatibility.
-dec_hs(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor),
+decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor),
?UINT16(CSLength), ?UINT16(0),
?UINT16(CDLength),
CipherSuites:CSLength/binary,
ChallengeData:CDLength/binary>>) ->
#client_hello{client_version = {Major, Minor},
- random = ssl_ssl2:client_random(ChallengeData, CDLength),
+ random = ssl_v2:client_random(ChallengeData, CDLength),
session_id = 0,
- cipher_suites = from_3bytes(CipherSuites),
+ cipher_suites = ssl_handshake:decode_suites('3_bytes', CipherSuites),
compression_methods = [?NULL],
- renegotiation_info = undefined
+ extensions = #hello_extensions{}
};
-dec_hs(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
+decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
?BYTE(SID_length), Session_ID:SID_length/binary,
?UINT16(Cs_length), CipherSuites:Cs_length/binary,
?BYTE(Cm_length), Comp_methods:Cm_length/binary,
Extensions/binary>>) ->
- DecodedExtensions = dec_hello_extensions(Extensions),
- RenegotiationInfo = proplists:get_value(renegotiation_info, DecodedExtensions, undefined),
- SRP = proplists:get_value(srp, DecodedExtensions, undefined),
- HashSigns = proplists:get_value(hash_signs, DecodedExtensions, undefined),
- EllipticCurves = proplists:get_value(elliptic_curves, DecodedExtensions,
- undefined),
- NextProtocolNegotiation = proplists:get_value(next_protocol_negotiation, DecodedExtensions, undefined),
+ DecodedExtensions = ssl_handshake:decode_hello_extensions({client, Extensions}),
#client_hello{
client_version = {Major,Minor},
random = Random,
session_id = Session_ID,
- cipher_suites = from_2bytes(CipherSuites),
+ cipher_suites = ssl_handshake:decode_suites('2_bytes', CipherSuites),
compression_methods = Comp_methods,
- renegotiation_info = RenegotiationInfo,
- srp = SRP,
- hash_signs = HashSigns,
- elliptic_curves = EllipticCurves,
- next_protocol_negotiation = NextProtocolNegotiation
+ extensions = DecodedExtensions
};
-dec_hs(_Version, ?SERVER_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
- ?BYTE(SID_length), Session_ID:SID_length/binary,
- Cipher_suite:2/binary, ?BYTE(Comp_method)>>) ->
- #server_hello{
- server_version = {Major,Minor},
- random = Random,
- session_id = Session_ID,
- cipher_suite = Cipher_suite,
- compression_method = Comp_method,
- renegotiation_info = undefined,
- hash_signs = undefined,
- elliptic_curves = undefined};
-
-dec_hs(_Version, ?SERVER_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
- ?BYTE(SID_length), Session_ID:SID_length/binary,
- Cipher_suite:2/binary, ?BYTE(Comp_method),
- ?UINT16(ExtLen), Extensions:ExtLen/binary>>) ->
-
- HelloExtensions = dec_hello_extensions(Extensions, []),
- RenegotiationInfo = proplists:get_value(renegotiation_info, HelloExtensions,
- undefined),
- HashSigns = proplists:get_value(hash_signs, HelloExtensions,
- undefined),
- EllipticCurves = proplists:get_value(elliptic_curves, HelloExtensions,
- undefined),
- NextProtocolNegotiation = proplists:get_value(next_protocol_negotiation, HelloExtensions, undefined),
-
- #server_hello{
- server_version = {Major,Minor},
- random = Random,
- session_id = Session_ID,
- cipher_suite = Cipher_suite,
- compression_method = Comp_method,
- renegotiation_info = RenegotiationInfo,
- hash_signs = HashSigns,
- elliptic_curves = EllipticCurves,
- next_protocol_negotiation = NextProtocolNegotiation};
-dec_hs(_Version, ?CERTIFICATE, <<?UINT24(ACLen), ASN1Certs:ACLen/binary>>) ->
- #certificate{asn1_certificates = certs_to_list(ASN1Certs)};
-dec_hs(_Version, ?SERVER_KEY_EXCHANGE, Keys) ->
- #server_key_exchange{exchange_keys = Keys};
-dec_hs({Major, Minor}, ?CERTIFICATE_REQUEST,
- <<?BYTE(CertTypesLen), CertTypes:CertTypesLen/binary,
- ?UINT16(HashSignsLen), HashSigns:HashSignsLen/binary,
- ?UINT16(CertAuthsLen), CertAuths:CertAuthsLen/binary>>)
- when Major == 3, Minor >= 3 ->
- HashSignAlgos = [{ssl_cipher:hash_algorithm(Hash), ssl_cipher:sign_algorithm(Sign)} ||
- <<?BYTE(Hash), ?BYTE(Sign)>> <= HashSigns],
- #certificate_request{certificate_types = CertTypes,
- hashsign_algorithms = #hash_sign_algos{hash_sign_algos = HashSignAlgos},
- certificate_authorities = CertAuths};
-dec_hs(_Version, ?CERTIFICATE_REQUEST,
- <<?BYTE(CertTypesLen), CertTypes:CertTypesLen/binary,
- ?UINT16(CertAuthsLen), CertAuths:CertAuthsLen/binary>>) ->
- #certificate_request{certificate_types = CertTypes,
- certificate_authorities = CertAuths};
-dec_hs(_Version, ?SERVER_HELLO_DONE, <<>>) ->
- #server_hello_done{};
-dec_hs({Major, Minor}, ?CERTIFICATE_VERIFY,<<HashSign:2/binary, ?UINT16(SignLen), Signature:SignLen/binary>>)
- when Major == 3, Minor >= 3 ->
- #certificate_verify{hashsign_algorithm = hashsign_dec(HashSign), signature = Signature};
-dec_hs(_Version, ?CERTIFICATE_VERIFY,<<?UINT16(SignLen), Signature:SignLen/binary>>)->
- #certificate_verify{signature = Signature};
-dec_hs(_Version, ?CLIENT_KEY_EXCHANGE, PKEPMS) ->
- #client_key_exchange{exchange_keys = PKEPMS};
-dec_hs(_Version, ?FINISHED, VerifyData) ->
- #finished{verify_data = VerifyData};
-dec_hs(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
-
-dec_client_key(PKEPMS, ?KEY_EXCHANGE_RSA, {3, 0}) ->
- #encrypted_premaster_secret{premaster_secret = PKEPMS};
-dec_client_key(<<?UINT16(_), PKEPMS/binary>>, ?KEY_EXCHANGE_RSA, _) ->
- #encrypted_premaster_secret{premaster_secret = PKEPMS};
-dec_client_key(<<>>, ?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
- throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
-dec_client_key(<<?UINT16(DH_YLen), DH_Y:DH_YLen/binary>>,
- ?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
- #client_diffie_hellman_public{dh_public = DH_Y};
-dec_client_key(<<>>, ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
- throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
-dec_client_key(<<?BYTE(DH_YLen), DH_Y:DH_YLen/binary>>,
- ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
- #client_ec_diffie_hellman_public{dh_public = DH_Y};
-dec_client_key(<<?UINT16(Len), Id:Len/binary>>,
- ?KEY_EXCHANGE_PSK, _) ->
- #client_psk_identity{identity = Id};
-dec_client_key(<<?UINT16(Len), Id:Len/binary,
- ?UINT16(DH_YLen), DH_Y:DH_YLen/binary>>,
- ?KEY_EXCHANGE_DHE_PSK, _) ->
- #client_dhe_psk_identity{identity = Id, dh_public = DH_Y};
-dec_client_key(<<?UINT16(Len), Id:Len/binary, PKEPMS/binary>>,
- ?KEY_EXCHANGE_RSA_PSK, {3, 0}) ->
- #client_rsa_psk_identity{identity = Id, exchange_keys = #encrypted_premaster_secret{premaster_secret = PKEPMS}};
-dec_client_key(<<?UINT16(Len), Id:Len/binary, ?UINT16(_), PKEPMS/binary>>,
- ?KEY_EXCHANGE_RSA_PSK, _) ->
- #client_rsa_psk_identity{identity = Id, exchange_keys = #encrypted_premaster_secret{premaster_secret = PKEPMS}};
-dec_client_key(<<?UINT16(ALen), A:ALen/binary>>,
- ?KEY_EXCHANGE_SRP, _) ->
- #client_srp_public{srp_a = A}.
-
-dec_ske_params(Len, Keys, Version) ->
- <<Params:Len/bytes, Signature/binary>> = Keys,
- dec_ske_signature(Params, Signature, Version).
-
-dec_ske_signature(Params, <<?BYTE(HashAlgo), ?BYTE(SignAlgo),
- ?UINT16(0)>>, {Major, Minor})
- when Major == 3, Minor >= 3 ->
- HashSign = {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)},
- {Params, HashSign, <<>>};
-dec_ske_signature(Params, <<?BYTE(HashAlgo), ?BYTE(SignAlgo),
- ?UINT16(Len), Signature:Len/binary>>, {Major, Minor})
- when Major == 3, Minor >= 3 ->
- HashSign = {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)},
- {Params, HashSign, Signature};
-dec_ske_signature(Params, <<>>, _) ->
- {Params, {null, anon}, <<>>};
-dec_ske_signature(Params, <<?UINT16(0)>>, _) ->
- {Params, {null, anon}, <<>>};
-dec_ske_signature(Params, <<?UINT16(Len), Signature:Len/binary>>, _) ->
- {Params, undefined, Signature};
-dec_ske_signature(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
-
-dec_server_key(<<?UINT16(PLen), P:PLen/binary,
- ?UINT16(GLen), G:GLen/binary,
- ?UINT16(YLen), Y:YLen/binary, _/binary>> = KeyStruct,
- ?KEY_EXCHANGE_DIFFIE_HELLMAN, Version) ->
- Params = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y},
- {BinMsg, HashSign, Signature} = dec_ske_params(PLen + GLen + YLen + 6, KeyStruct, Version),
- #server_key_params{params = Params,
- params_bin = BinMsg,
- hashsign = HashSign,
- signature = Signature};
-%% ECParameters with named_curve
-%% TODO: explicit curve
-dec_server_key(<<?BYTE(?NAMED_CURVE), ?UINT16(CurveID),
- ?BYTE(PointLen), ECPoint:PointLen/binary,
- _/binary>> = KeyStruct,
- ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, Version) ->
- Params = #server_ecdh_params{curve = {namedCurve, ssl_tls1:enum_to_oid(CurveID)},
- public = ECPoint},
- {BinMsg, HashSign, Signature} = dec_ske_params(PointLen + 4, KeyStruct, Version),
- #server_key_params{params = Params,
- params_bin = BinMsg,
- hashsign = HashSign,
- signature = Signature};
-dec_server_key(<<?UINT16(Len), PskIdentityHint:Len/binary>> = KeyStruct,
- KeyExchange, Version)
- when KeyExchange == ?KEY_EXCHANGE_PSK; KeyExchange == ?KEY_EXCHANGE_RSA_PSK ->
- Params = #server_psk_params{
- hint = PskIdentityHint},
- {BinMsg, HashSign, Signature} = dec_ske_params(Len + 2, KeyStruct, Version),
- #server_key_params{params = Params,
- params_bin = BinMsg,
- hashsign = HashSign,
- signature = Signature};
-dec_server_key(<<?UINT16(Len), IdentityHint:Len/binary,
- ?UINT16(PLen), P:PLen/binary,
- ?UINT16(GLen), G:GLen/binary,
- ?UINT16(YLen), Y:YLen/binary, _/binary>> = KeyStruct,
- ?KEY_EXCHANGE_DHE_PSK, Version) ->
- DHParams = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y},
- Params = #server_dhe_psk_params{
- hint = IdentityHint,
- dh_params = DHParams},
- {BinMsg, HashSign, Signature} = dec_ske_params(Len + PLen + GLen + YLen + 8, KeyStruct, Version),
- #server_key_params{params = Params,
- params_bin = BinMsg,
- hashsign = HashSign,
- signature = Signature};
-dec_server_key(<<?UINT16(NLen), N:NLen/binary,
- ?UINT16(GLen), G:GLen/binary,
- ?BYTE(SLen), S:SLen/binary,
- ?UINT16(BLen), B:BLen/binary, _/binary>> = KeyStruct,
- ?KEY_EXCHANGE_SRP, Version) ->
- Params = #server_srp_params{srp_n = N, srp_g = G, srp_s = S, srp_b = B},
- {BinMsg, HashSign, Signature} = dec_ske_params(NLen + GLen + SLen + BLen + 7, KeyStruct, Version),
- #server_key_params{params = Params,
- params_bin = BinMsg,
- hashsign = HashSign,
- signature = Signature};
-dec_server_key(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
-
-dec_hello_extensions(<<>>) ->
- [];
-dec_hello_extensions(<<?UINT16(ExtLen), Extensions:ExtLen/binary>>) ->
- dec_hello_extensions(Extensions, []);
-dec_hello_extensions(_) ->
- [].
-
-dec_hello_extensions(<<>>, Acc) ->
- Acc;
-dec_hello_extensions(<<?UINT16(?NEXTPROTONEG_EXT), ?UINT16(Len), ExtensionData:Len/binary, Rest/binary>>, Acc) ->
- Prop = {next_protocol_negotiation, #next_protocol_negotiation{extension_data = ExtensionData}},
- dec_hello_extensions(Rest, [Prop | Acc]);
-dec_hello_extensions(<<?UINT16(?RENEGOTIATION_EXT), ?UINT16(Len), Info:Len/binary, Rest/binary>>, Acc) ->
- RenegotiateInfo = case Len of
- 1 -> % Initial handshake
- Info; % should be <<0>> will be matched in handle_renegotiation_info
- _ ->
- VerifyLen = Len - 1,
- <<?BYTE(VerifyLen), VerifyInfo/binary>> = Info,
- VerifyInfo
- end,
- dec_hello_extensions(Rest, [{renegotiation_info,
- #renegotiation_info{renegotiated_connection = RenegotiateInfo}} | Acc]);
+decode_handshake(Version, Tag, Msg) ->
+ ssl_handshake:decode_handshake(Version, Tag, Msg).
-dec_hello_extensions(<<?UINT16(?SRP_EXT), ?UINT16(Len), ?BYTE(SRPLen), SRP:SRPLen/binary, Rest/binary>>, Acc)
- when Len == SRPLen + 2 ->
- dec_hello_extensions(Rest, [{srp,
- #srp{username = SRP}} | Acc]);
-
-dec_hello_extensions(<<?UINT16(?SIGNATURE_ALGORITHMS_EXT), ?UINT16(Len),
- ExtData:Len/binary, Rest/binary>>, Acc) ->
- SignAlgoListLen = Len - 2,
- <<?UINT16(SignAlgoListLen), SignAlgoList/binary>> = ExtData,
- HashSignAlgos = [{ssl_cipher:hash_algorithm(Hash), ssl_cipher:sign_algorithm(Sign)} ||
- <<?BYTE(Hash), ?BYTE(Sign)>> <= SignAlgoList],
- dec_hello_extensions(Rest, [{hash_signs,
- #hash_sign_algos{hash_sign_algos = HashSignAlgos}} | Acc]);
-
-dec_hello_extensions(<<?UINT16(?ELLIPTIC_CURVES_EXT), ?UINT16(Len),
- ExtData:Len/binary, Rest/binary>>, Acc) ->
- EllipticCurveListLen = Len - 2,
- <<?UINT16(EllipticCurveListLen), EllipticCurveList/binary>> = ExtData,
- EllipticCurves = [ssl_tls1:enum_to_oid(X) || <<X:16>> <= EllipticCurveList],
- dec_hello_extensions(Rest, [{elliptic_curves,
- #elliptic_curves{elliptic_curve_list = EllipticCurves}} | Acc]);
-
-dec_hello_extensions(<<?UINT16(?EC_POINT_FORMATS_EXT), ?UINT16(Len),
- ExtData:Len/binary, Rest/binary>>, Acc) ->
- ECPointFormatListLen = Len - 1,
- <<?BYTE(ECPointFormatListLen), ECPointFormatList/binary>> = ExtData,
- ECPointFormats = binary_to_list(ECPointFormatList),
- dec_hello_extensions(Rest, [{ec_point_formats,
- #ec_point_formats{ec_point_format_list = ECPointFormats}} | Acc]);
-
-%% Ignore data following the ClientHello (i.e.,
-%% extensions) if not understood.
-
-dec_hello_extensions(<<?UINT16(_), ?UINT16(Len), _Unknown:Len/binary, Rest/binary>>, Acc) ->
- dec_hello_extensions(Rest, Acc);
-%% This theoretically should not happen if the protocol is followed, but if it does it is ignored.
-dec_hello_extensions(_, Acc) ->
- Acc.
-
-encrypted_premaster_secret(Secret, RSAPublicKey) ->
- try
- PreMasterSecret = public_key:encrypt_public(Secret, RSAPublicKey,
- [{rsa_pad,
- rsa_pkcs1_padding}]),
- #encrypted_premaster_secret{premaster_secret = PreMasterSecret}
- catch
- _:_->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE))
- end.
-
-%% encode/decode stream of certificate data to/from list of certificate data
-certs_to_list(ASN1Certs) ->
- certs_to_list(ASN1Certs, []).
-
-certs_to_list(<<?UINT24(CertLen), Cert:CertLen/binary, Rest/binary>>, Acc) ->
- certs_to_list(Rest, [Cert | Acc]);
-certs_to_list(<<>>, Acc) ->
- lists:reverse(Acc, []).
-
-certs_from_list(ACList) ->
- list_to_binary([begin
- CertLen = byte_size(Cert),
- <<?UINT24(CertLen), Cert/binary>>
- end || Cert <- ACList]).
-
-enc_hs(#next_protocol{selected_protocol = SelectedProtocol}, _Version) ->
- PaddingLength = 32 - ((byte_size(SelectedProtocol) + 2) rem 32),
-
- {?NEXT_PROTOCOL, <<?BYTE((byte_size(SelectedProtocol))), SelectedProtocol/binary,
- ?BYTE(PaddingLength), 0:(PaddingLength * 8)>>};
-enc_hs(#hello_request{}, _Version) ->
+enc_handshake(#hello_request{}, _Version) ->
{?HELLO_REQUEST, <<>>};
-enc_hs(#client_hello{client_version = {Major, Minor},
+enc_handshake(#client_hello{client_version = {Major, Minor},
random = Random,
session_id = SessionID,
cipher_suites = CipherSuites,
compression_methods = CompMethods,
- renegotiation_info = RenegotiationInfo,
- srp = SRP,
- hash_signs = HashSigns,
- ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves,
- next_protocol_negotiation = NextProtocolNegotiation}, _Version) ->
+ extensions = HelloExtensions}, _Version) ->
SIDLength = byte_size(SessionID),
BinCompMethods = list_to_binary(CompMethods),
CmLength = byte_size(BinCompMethods),
BinCipherSuites = list_to_binary(CipherSuites),
CsLength = byte_size(BinCipherSuites),
- Extensions0 = hello_extensions(RenegotiationInfo, SRP, NextProtocolNegotiation)
- ++ ec_hello_extensions(lists:map(fun ssl_cipher:suite_definition/1, CipherSuites), EcPointFormats)
- ++ ec_hello_extensions(lists:map(fun ssl_cipher:suite_definition/1, CipherSuites), EllipticCurves),
- Extensions1 = if
- Major == 3, Minor >=3 -> Extensions0 ++ hello_extensions(HashSigns);
- true -> Extensions0
- end,
- ExtensionsBin = enc_hello_extensions(Extensions1),
-
- {?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
- ?BYTE(SIDLength), SessionID/binary,
- ?UINT16(CsLength), BinCipherSuites/binary,
- ?BYTE(CmLength), BinCompMethods/binary, ExtensionsBin/binary>>};
-
-enc_hs(#server_hello{server_version = {Major, Minor},
- random = Random,
- session_id = Session_ID,
- cipher_suite = CipherSuite,
- compression_method = Comp_method,
- renegotiation_info = RenegotiationInfo,
- ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves,
- next_protocol_negotiation = NextProtocolNegotiation}, _Version) ->
- SID_length = byte_size(Session_ID),
- CipherSuites = [ssl_cipher:suite_definition(CipherSuite)],
- Extensions = hello_extensions(RenegotiationInfo, NextProtocolNegotiation)
- ++ ec_hello_extensions(CipherSuites, EcPointFormats)
- ++ ec_hello_extensions(CipherSuites, EllipticCurves),
- ExtensionsBin = enc_hello_extensions(Extensions),
- {?SERVER_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
- ?BYTE(SID_length), Session_ID/binary,
- CipherSuite/binary, ?BYTE(Comp_method), ExtensionsBin/binary>>};
-enc_hs(#certificate{asn1_certificates = ASN1CertList}, _Version) ->
- ASN1Certs = certs_from_list(ASN1CertList),
- ACLen = erlang:iolist_size(ASN1Certs),
- {?CERTIFICATE, <<?UINT24(ACLen), ASN1Certs:ACLen/binary>>};
-enc_hs(#server_key_exchange{exchange_keys = Keys}, _Version) ->
- {?SERVER_KEY_EXCHANGE, Keys};
-enc_hs(#server_key_params{params_bin = Keys, hashsign = HashSign,
- signature = Signature}, Version) ->
- EncSign = enc_sign(HashSign, Signature, Version),
- {?SERVER_KEY_EXCHANGE, <<Keys/binary, EncSign/binary>>};
-enc_hs(#certificate_request{certificate_types = CertTypes,
- hashsign_algorithms = #hash_sign_algos{hash_sign_algos = HashSignAlgos},
- certificate_authorities = CertAuths},
- {Major, Minor})
- when Major == 3, Minor >= 3 ->
- HashSigns= << <<(ssl_cipher:hash_algorithm(Hash)):8, (ssl_cipher:sign_algorithm(Sign)):8>> ||
- {Hash, Sign} <- HashSignAlgos >>,
- CertTypesLen = byte_size(CertTypes),
- HashSignsLen = byte_size(HashSigns),
- CertAuthsLen = byte_size(CertAuths),
- {?CERTIFICATE_REQUEST,
- <<?BYTE(CertTypesLen), CertTypes/binary,
- ?UINT16(HashSignsLen), HashSigns/binary,
- ?UINT16(CertAuthsLen), CertAuths/binary>>
- };
-enc_hs(#certificate_request{certificate_types = CertTypes,
- certificate_authorities = CertAuths},
- _Version) ->
- CertTypesLen = byte_size(CertTypes),
- CertAuthsLen = byte_size(CertAuths),
- {?CERTIFICATE_REQUEST,
- <<?BYTE(CertTypesLen), CertTypes/binary,
- ?UINT16(CertAuthsLen), CertAuths/binary>>
- };
-enc_hs(#server_hello_done{}, _Version) ->
- {?SERVER_HELLO_DONE, <<>>};
-enc_hs(#client_key_exchange{exchange_keys = ExchangeKeys}, Version) ->
- {?CLIENT_KEY_EXCHANGE, enc_cke(ExchangeKeys, Version)};
-enc_hs(#certificate_verify{signature = BinSig, hashsign_algorithm = HashSign}, Version) ->
- EncSig = enc_sign(HashSign, BinSig, Version),
- {?CERTIFICATE_VERIFY, EncSig};
-enc_hs(#finished{verify_data = VerifyData}, _Version) ->
- {?FINISHED, VerifyData}.
-
-enc_cke(#encrypted_premaster_secret{premaster_secret = PKEPMS},{3, 0}) ->
- PKEPMS;
-enc_cke(#encrypted_premaster_secret{premaster_secret = PKEPMS}, _) ->
- PKEPMSLen = byte_size(PKEPMS),
- <<?UINT16(PKEPMSLen), PKEPMS/binary>>;
-enc_cke(#client_diffie_hellman_public{dh_public = DHPublic}, _) ->
- Len = byte_size(DHPublic),
- <<?UINT16(Len), DHPublic/binary>>;
-enc_cke(#client_ec_diffie_hellman_public{dh_public = DHPublic}, _) ->
- Len = byte_size(DHPublic),
- <<?BYTE(Len), DHPublic/binary>>;
-enc_cke(#client_psk_identity{identity = undefined}, _) ->
- Id = <<"psk_identity">>,
- Len = byte_size(Id),
- <<?UINT16(Len), Id/binary>>;
-enc_cke(#client_psk_identity{identity = Id}, _) ->
- Len = byte_size(Id),
- <<?UINT16(Len), Id/binary>>;
-enc_cke(Identity = #client_dhe_psk_identity{identity = undefined}, Version) ->
- enc_cke(Identity#client_dhe_psk_identity{identity = <<"psk_identity">>}, Version);
-enc_cke(#client_dhe_psk_identity{identity = Id, dh_public = DHPublic}, _) ->
- Len = byte_size(Id),
- DHLen = byte_size(DHPublic),
- <<?UINT16(Len), Id/binary, ?UINT16(DHLen), DHPublic/binary>>;
-enc_cke(Identity = #client_rsa_psk_identity{identity = undefined}, Version) ->
- enc_cke(Identity#client_rsa_psk_identity{identity = <<"psk_identity">>}, Version);
-enc_cke(#client_rsa_psk_identity{identity = Id, exchange_keys = ExchangeKeys}, Version) ->
- EncPMS = enc_cke(ExchangeKeys, Version),
- Len = byte_size(Id),
- <<?UINT16(Len), Id/binary, EncPMS/binary>>;
-enc_cke(#client_srp_public{srp_a = A}, _) ->
- Len = byte_size(A),
- <<?UINT16(Len), A/binary>>.
-
-enc_server_key(#server_dh_params{dh_p = P, dh_g = G, dh_y = Y}) ->
- PLen = byte_size(P),
- GLen = byte_size(G),
- YLen = byte_size(Y),
- <<?UINT16(PLen), P/binary, ?UINT16(GLen), G/binary, ?UINT16(YLen), Y/binary>>;
-enc_server_key(#server_ecdh_params{curve = {namedCurve, ECCurve}, public = ECPubKey}) ->
- %%TODO: support arbitrary keys
- KLen = size(ECPubKey),
- <<?BYTE(?NAMED_CURVE_TYPE), ?UINT16((ssl_tls1:oid_to_enum(ECCurve))),
- ?BYTE(KLen), ECPubKey/binary>>;
-enc_server_key(#server_psk_params{hint = PskIdentityHint}) ->
- Len = byte_size(PskIdentityHint),
- <<?UINT16(Len), PskIdentityHint/binary>>;
-enc_server_key(Params = #server_dhe_psk_params{hint = undefined}) ->
- enc_server_key(Params#server_dhe_psk_params{hint = <<>>});
-enc_server_key(#server_dhe_psk_params{
- hint = PskIdentityHint,
- dh_params = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y}}) ->
- Len = byte_size(PskIdentityHint),
- PLen = byte_size(P),
- GLen = byte_size(G),
- YLen = byte_size(Y),
- <<?UINT16(Len), PskIdentityHint/binary,
- ?UINT16(PLen), P/binary, ?UINT16(GLen), G/binary, ?UINT16(YLen), Y/binary>>;
-enc_server_key(#server_srp_params{srp_n = N, srp_g = G, srp_s = S, srp_b = B}) ->
- NLen = byte_size(N),
- GLen = byte_size(G),
- SLen = byte_size(S),
- BLen = byte_size(B),
- <<?UINT16(NLen), N/binary, ?UINT16(GLen), G/binary,
- ?BYTE(SLen), S/binary, ?UINT16(BLen), B/binary>>.
-
-enc_sign({_, anon}, _Sign, _Version) ->
- <<>>;
-enc_sign({HashAlg, SignAlg}, Signature, _Version = {Major, Minor})
- when Major == 3, Minor >= 3->
- SignLen = byte_size(Signature),
- HashSign = hashsign_enc(HashAlg, SignAlg),
- <<HashSign/binary, ?UINT16(SignLen), Signature/binary>>;
-enc_sign(_HashSign, Sign, _Version) ->
- SignLen = byte_size(Sign),
- <<?UINT16(SignLen), Sign/binary>>.
-
-
-ec_hello_extensions(CipherSuites, #elliptic_curves{} = Info) ->
- case advertises_ec_ciphers(CipherSuites) of
- true ->
- [Info];
- false ->
- []
- end;
-ec_hello_extensions(CipherSuites, #ec_point_formats{} = Info) ->
- case advertises_ec_ciphers(CipherSuites) of
- true ->
- [Info];
- false ->
- []
- end;
-ec_hello_extensions(_, undefined) ->
- [].
-
-hello_extensions(RenegotiationInfo, NextProtocolNegotiation) ->
- hello_extensions(RenegotiationInfo) ++ next_protocol_extension(NextProtocolNegotiation).
-
-hello_extensions(RenegotiationInfo, SRP, NextProtocolNegotiation) ->
- hello_extensions(RenegotiationInfo)
- ++ hello_extensions(SRP)
- ++ next_protocol_extension(NextProtocolNegotiation).
-
-advertises_ec_ciphers([]) ->
- false;
-advertises_ec_ciphers([{ecdh_ecdsa, _,_,_} | _]) ->
- true;
-advertises_ec_ciphers([{ecdhe_ecdsa, _,_,_} | _]) ->
- true;
-advertises_ec_ciphers([{ecdh_rsa, _,_,_} | _]) ->
- true;
-advertises_ec_ciphers([{ecdhe_rsa, _,_,_} | _]) ->
- true;
-advertises_ec_ciphers([{ecdh_anon, _,_,_} | _]) ->
- true;
-advertises_ec_ciphers([_| Rest]) ->
- advertises_ec_ciphers(Rest).
-
-%% Renegotiation info
-hello_extensions(#renegotiation_info{renegotiated_connection = undefined}) ->
- [];
-hello_extensions(#renegotiation_info{} = Info) ->
- [Info];
-hello_extensions(#srp{} = Info) ->
- [Info];
-hello_extensions(#hash_sign_algos{} = Info) ->
- [Info];
-hello_extensions(undefined) ->
- [].
+ ExtensionsBin = ssl_handshake:encode_hello_extensions(HelloExtensions),
-next_protocol_extension(undefined) ->
- [];
-next_protocol_extension(#next_protocol_negotiation{} = Info) ->
- [Info].
+ {?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
+ ?BYTE(SIDLength), SessionID/binary,
+ ?UINT16(CsLength), BinCipherSuites/binary,
+ ?BYTE(CmLength), BinCompMethods/binary, ExtensionsBin/binary>>};
-enc_hello_extensions(Extensions) ->
- enc_hello_extensions(Extensions, <<>>).
-enc_hello_extensions([], <<>>) ->
- <<>>;
-enc_hello_extensions([], Acc) ->
- Size = byte_size(Acc),
- <<?UINT16(Size), Acc/binary>>;
+enc_handshake(HandshakeMsg, Version) ->
+ ssl_handshake:encode_handshake(HandshakeMsg, Version).
-enc_hello_extensions([#next_protocol_negotiation{extension_data = ExtensionData} | Rest], Acc) ->
- Len = byte_size(ExtensionData),
- enc_hello_extensions(Rest, <<?UINT16(?NEXTPROTONEG_EXT), ?UINT16(Len), ExtensionData/binary, Acc/binary>>);
-enc_hello_extensions([#renegotiation_info{renegotiated_connection = ?byte(0) = Info} | Rest], Acc) ->
- Len = byte_size(Info),
- enc_hello_extensions(Rest, <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(Len), Info/binary, Acc/binary>>);
-enc_hello_extensions([#renegotiation_info{renegotiated_connection = Info} | Rest], Acc) ->
- InfoLen = byte_size(Info),
- Len = InfoLen +1,
- enc_hello_extensions(Rest, <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(Len), ?BYTE(InfoLen), Info/binary, Acc/binary>>);
-enc_hello_extensions([#elliptic_curves{elliptic_curve_list = EllipticCurves} | Rest], Acc) ->
- EllipticCurveList = << <<(ssl_tls1:oid_to_enum(X)):16>> || X <- EllipticCurves>>,
- ListLen = byte_size(EllipticCurveList),
- Len = ListLen + 2,
- enc_hello_extensions(Rest, <<?UINT16(?ELLIPTIC_CURVES_EXT),
- ?UINT16(Len), ?UINT16(ListLen), EllipticCurveList/binary, Acc/binary>>);
-enc_hello_extensions([#ec_point_formats{ec_point_format_list = ECPointFormats} | Rest], Acc) ->
- ECPointFormatList = list_to_binary(ECPointFormats),
- ListLen = byte_size(ECPointFormatList),
- Len = ListLen + 1,
- enc_hello_extensions(Rest, <<?UINT16(?EC_POINT_FORMATS_EXT),
- ?UINT16(Len), ?BYTE(ListLen), ECPointFormatList/binary, Acc/binary>>);
-enc_hello_extensions([#srp{username = UserName} | Rest], Acc) ->
- SRPLen = byte_size(UserName),
- Len = SRPLen + 2,
- enc_hello_extensions(Rest, <<?UINT16(?SRP_EXT), ?UINT16(Len), ?BYTE(SRPLen), UserName/binary, Acc/binary>>);
-enc_hello_extensions([#hash_sign_algos{hash_sign_algos = HashSignAlgos} | Rest], Acc) ->
- SignAlgoList = << <<(ssl_cipher:hash_algorithm(Hash)):8, (ssl_cipher:sign_algorithm(Sign)):8>> ||
- {Hash, Sign} <- HashSignAlgos >>,
- ListLen = byte_size(SignAlgoList),
- Len = ListLen + 2,
- enc_hello_extensions(Rest, <<?UINT16(?SIGNATURE_ALGORITHMS_EXT),
- ?UINT16(Len), ?UINT16(ListLen), SignAlgoList/binary, Acc/binary>>).
-
-encode_client_protocol_negotiation(undefined, _) ->
- undefined;
-encode_client_protocol_negotiation(_, false) ->
- #next_protocol_negotiation{extension_data = <<>>};
-encode_client_protocol_negotiation(_, _) ->
- undefined.
-
-from_3bytes(Bin3) ->
- from_3bytes(Bin3, []).
-
-from_3bytes(<<>>, Acc) ->
- lists:reverse(Acc);
-from_3bytes(<<?UINT24(N), Rest/binary>>, Acc) ->
- from_3bytes(Rest, [?uint16(N) | Acc]).
-
-from_2bytes(Bin2) ->
- from_2bytes(Bin2, []).
-
-from_2bytes(<<>>, Acc) ->
- lists:reverse(Acc);
-from_2bytes(<<?UINT16(N), Rest/binary>>, Acc) ->
- from_2bytes(Rest, [?uint16(N) | Acc]).
-
-certificate_types({KeyExchange, _, _, _})
- when KeyExchange == rsa;
- KeyExchange == dhe_dss;
- KeyExchange == dhe_rsa;
- KeyExchange == ecdhe_rsa ->
- <<?BYTE(?RSA_SIGN), ?BYTE(?DSS_SIGN)>>;
-
-certificate_types({KeyExchange, _, _, _})
- when KeyExchange == dh_ecdsa;
- KeyExchange == dhe_ecdsa ->
- <<?BYTE(?ECDSA_SIGN)>>;
-
-certificate_types(_) ->
- <<?BYTE(?RSA_SIGN)>>.
-
-hashsign_dec(<<?BYTE(HashAlgo), ?BYTE(SignAlgo)>>) ->
- {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)}.
-
-hashsign_enc(HashAlgo, SignAlgo) ->
- Hash = ssl_cipher:hash_algorithm(HashAlgo),
- Sign = ssl_cipher:sign_algorithm(SignAlgo),
- <<?BYTE(Hash), ?BYTE(Sign)>>.
-
-certificate_authorities(CertDbHandle, CertDbRef) ->
- Authorities = certificate_authorities_from_db(CertDbHandle, CertDbRef),
- Enc = fun(#'OTPCertificate'{tbsCertificate=TBSCert}) ->
- OTPSubj = TBSCert#'OTPTBSCertificate'.subject,
- DNEncodedBin = public_key:pkix_encode('Name', OTPSubj, otp),
- DNEncodedLen = byte_size(DNEncodedBin),
- <<?UINT16(DNEncodedLen), DNEncodedBin/binary>>
- end,
- list_to_binary([Enc(Cert) || {_, Cert} <- Authorities]).
-
-certificate_authorities_from_db(CertDbHandle, CertDbRef) ->
- ConnectionCerts = fun({{Ref, _, _}, Cert}, Acc) when Ref == CertDbRef ->
- [Cert | Acc];
- (_, Acc) ->
- Acc
- end,
- ssl_pkix_db:foldl(ConnectionCerts, [], CertDbHandle).
-
-
-digitally_signed({3, Minor}, Hash, HashAlgo, Key) when Minor >= 3 ->
- public_key:sign({digest, Hash}, HashAlgo, Key);
-digitally_signed(_Version, Hash, HashAlgo, #'DSAPrivateKey'{} = Key) ->
- public_key:sign({digest, Hash}, HashAlgo, Key);
-digitally_signed(_Version, Hash, _HashAlgo, #'RSAPrivateKey'{} = Key) ->
- public_key:encrypt_private(Hash, Key,
- [{rsa_pad, rsa_pkcs1_padding}]);
-digitally_signed(_Version, Hash, HashAlgo, Key) ->
- public_key:sign({digest, Hash}, HashAlgo, Key).
-
-calc_master_secret({3,0}, _PrfAlgo, PremasterSecret, ClientRandom, ServerRandom) ->
- ssl_ssl3:master_secret(PremasterSecret, ClientRandom, ServerRandom);
-
-calc_master_secret({3,_}, PrfAlgo, PremasterSecret, ClientRandom, ServerRandom) ->
- ssl_tls1:master_secret(PrfAlgo, PremasterSecret, ClientRandom, ServerRandom).
-
-setup_keys({3,0}, _PrfAlgo, MasterSecret,
- ServerRandom, ClientRandom, HashSize, KML, EKML, IVS) ->
- ssl_ssl3:setup_keys(MasterSecret, ServerRandom,
- ClientRandom, HashSize, KML, EKML, IVS);
-
-setup_keys({3,N}, PrfAlgo, MasterSecret,
- ServerRandom, ClientRandom, HashSize, KML, _EKML, IVS) ->
- ssl_tls1:setup_keys(N, PrfAlgo, MasterSecret, ServerRandom, ClientRandom, HashSize,
- KML, IVS).
-
-calc_finished({3, 0}, Role, _PrfAlgo, MasterSecret, Handshake) ->
- ssl_ssl3:finished(Role, MasterSecret, lists:reverse(Handshake));
-calc_finished({3, N}, Role, PrfAlgo, MasterSecret, Handshake) ->
- ssl_tls1:finished(Role, N, PrfAlgo, MasterSecret, lists:reverse(Handshake)).
-
-calc_certificate_verify({3, 0}, HashAlgo, MasterSecret, Handshake) ->
- ssl_ssl3:certificate_verify(HashAlgo, MasterSecret, lists:reverse(Handshake));
-calc_certificate_verify({3, N}, HashAlgo, _MasterSecret, Handshake) ->
- ssl_tls1:certificate_verify(HashAlgo, N, lists:reverse(Handshake)).
-
-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(Alg) when Alg == ecdhe_rsa; Alg == ecdh_rsa;
- Alg == ecdhe_ecdsa; Alg == ecdh_ecdsa;
- Alg == ecdh_anon ->
- ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN;
-key_exchange_alg(psk) ->
- ?KEY_EXCHANGE_PSK;
-key_exchange_alg(dhe_psk) ->
- ?KEY_EXCHANGE_DHE_PSK;
-key_exchange_alg(rsa_psk) ->
- ?KEY_EXCHANGE_RSA_PSK;
-key_exchange_alg(Alg)
- when Alg == srp_rsa; Alg == srp_dss; Alg == srp_anon ->
- ?KEY_EXCHANGE_SRP;
-key_exchange_alg(_) ->
- ?NULL.
-
-apply_user_fun(Fun, OtpCert, ExtensionOrError, UserState0, SslState) ->
- case Fun(OtpCert, ExtensionOrError, UserState0) of
- {valid, UserState} ->
- {valid, {SslState, UserState}};
- {fail, _} = Fail ->
- Fail;
- {unknown, UserState} ->
- {unknown, {SslState, UserState}}
+handle_hello_extensions(Version, Type, Random, HelloExt, SslOpts, Session0, ConnectionStates0, Renegotiation) ->
+ try ssl_handshake:handle_client_hello_extensions(tls_record, Random, HelloExt, Version, SslOpts,
+ Session0, ConnectionStates0, Renegotiation) of
+ {Session, ConnectionStates, ServerHelloExt} ->
+ {Version, {Type, Session}, ConnectionStates, ServerHelloExt}
+ catch throw:Alert ->
+ Alert
end.
--define(TLSEXT_SIGALG_RSA(MD), {MD, rsa}).
--define(TLSEXT_SIGALG_DSA(MD), {MD, dsa}).
--define(TLSEXT_SIGALG_ECDSA(MD), {MD, ecdsa}).
-
--define(TLSEXT_SIGALG(MD), ?TLSEXT_SIGALG_ECDSA(MD), ?TLSEXT_SIGALG_RSA(MD)).
-default_hash_signs() ->
- HashSigns = [?TLSEXT_SIGALG(sha512),
- ?TLSEXT_SIGALG(sha384),
- ?TLSEXT_SIGALG(sha256),
- ?TLSEXT_SIGALG(sha224),
- ?TLSEXT_SIGALG(sha),
- ?TLSEXT_SIGALG_DSA(sha),
- ?TLSEXT_SIGALG_RSA(md5)],
- CryptoSupport = proplists:get_value(public_keys, crypto:supports()),
- HasECC = proplists:get_bool(ecdsa, CryptoSupport),
- #hash_sign_algos{hash_sign_algos =
- lists:filter(fun({_, ecdsa}) -> HasECC;
- (_) -> true end, HashSigns)}.
-
-handle_hello_extensions(#client_hello{random = Random,
- cipher_suites = CipherSuites,
- renegotiation_info = Info,
- srp = SRP,
- ec_point_formats = EcPointFormats0,
- elliptic_curves = EllipticCurves0} = Hello, Version,
- #ssl_options{secure_renegotiate = SecureRenegotation} = Opts,
- Session0, ConnectionStates0, Renegotiation) ->
- Session = handle_srp_extension(SRP, Session0),
- ConnectionStates = handle_renegotiation_extension(Version, Info, Random, Session, ConnectionStates0,
- Renegotiation, SecureRenegotation, CipherSuites),
- ProtocolsToAdvertise = handle_next_protocol_extension(Hello, Renegotiation, Opts),
- {EcPointFormats, EllipticCurves} = handle_ecc_extensions(Version, EcPointFormats0, EllipticCurves0),
- %%TODO make extensions compund data structure
- {Session, ConnectionStates, ProtocolsToAdvertise, EcPointFormats, EllipticCurves}.
-
-
-handle_renegotiation_extension(Version, Info, Random, #session{cipher_suite = CipherSuite,
- compression_method = Compression},
- ConnectionStates0, Renegotiation, SecureRenegotation, CipherSuites) ->
- case handle_renegotiation_info(server, Info, ConnectionStates0,
- Renegotiation, SecureRenegotation,
- CipherSuites) of
- {ok, ConnectionStates1} ->
- hello_pending_connection_states(server,
- Version,
- CipherSuite,
- Random,
- Compression,
- ConnectionStates1);
+handle_hello_extensions(Version, SessionId, Random, CipherSuite,
+ Compression, HelloExt, SslOpt, ConnectionStates0, Renegotiation) ->
+ case ssl_handshake:handle_server_hello_extensions(tls_record, Random, CipherSuite,
+ Compression, HelloExt, Version,
+ SslOpt, ConnectionStates0, Renegotiation) of
#alert{} = Alert ->
- throw(Alert)
+ Alert;
+ {ConnectionStates, Protocol} ->
+ {Version, SessionId, ConnectionStates, Protocol}
end.
-handle_next_protocol_extension(Hello, Renegotiation, SslOpts)->
- case handle_next_protocol_on_server(Hello, Renegotiation, SslOpts) of
- #alert{} = Alert ->
- throw(Alert);
- ProtocolsToAdvertise ->
- ProtocolsToAdvertise
- end.
-
-handle_srp_extension(undefined, Session) ->
- Session;
-handle_srp_extension(#srp{username = Username}, Session) ->
- Session#session{srp_username = Username}.
-
-int_to_bin(I) ->
- L = (length(integer_to_list(I, 16)) + 1) div 2,
- <<I:(L*8)>>.
diff --git a/lib/ssl/src/tls_handshake.hrl b/lib/ssl/src/tls_handshake.hrl
index abf1b5abb6..dbe930cb90 100644
--- a/lib/ssl/src/tls_handshake.hrl
+++ b/lib/ssl/src/tls_handshake.hrl
@@ -34,12 +34,9 @@
cipher_suites, % cipher_suites<2..2^16-1>
compression_methods, % compression_methods<1..2^8-1>,
%% Extensions
- renegotiation_info,
- hash_signs, % supported combinations of hashes/signature algos
- next_protocol_negotiation = undefined, % [binary()]
- srp,
- ec_point_formats,
- elliptic_curves
+ extensions
}).
+-type tls_handshake() :: #client_hello{} | ssl_handshake().
+
-endif. % -ifdef(tls_handshake).
diff --git a/lib/ssl/src/tls_record.erl b/lib/ssl/src/tls_record.erl
index 1409a04763..54cf8d0b80 100644
--- a/lib/ssl/src/tls_record.erl
+++ b/lib/ssl/src/tls_record.erl
@@ -19,8 +19,7 @@
%%
%%----------------------------------------------------------------------
-%% Purpose: Help functions for handling the SSL-Record protocol
-%%
+%% Purpose: Handle TLS/SSL record protocol. (Parts that are not shared with DTLS)
%%----------------------------------------------------------------------
-module(tls_record).
@@ -31,282 +30,27 @@
-include("tls_handshake.hrl").
-include("ssl_cipher.hrl").
-%% Connection state handling
--export([init_connection_states/1,
- current_connection_state/2, pending_connection_state/2,
- update_security_params/3,
- set_mac_secret/4,
- set_master_secret/2,
- activate_pending_connection_state/2,
- set_pending_cipher_state/4,
- set_renegotiation_flag/2,
- set_client_verify_data/3,
- set_server_verify_data/3]).
-
%% Handling of incoming data
-export([get_tls_records/2]).
-%% Encoding records
--export([encode_handshake/3, encode_alert_record/3,
- encode_change_cipher_spec/2, encode_data/3]).
-
%% Decoding
-export([decode_cipher_text/2]).
-%% Misc.
+%% Encoding
+-export([encode_plain_text/4]).
+
+%% Protocol version handling
-export([protocol_version/1, lowest_protocol_version/2,
highest_protocol_version/1, supported_protocol_versions/0,
is_acceptable_version/1, is_acceptable_version/2]).
--export([compressions/0]).
-
-compile(inline).
--define(INITIAL_BYTES, 5).
-
%%====================================================================
%% Internal application API
%%====================================================================
%%--------------------------------------------------------------------
--spec init_connection_states(client | server) -> #connection_states{}.
-%%
-%% Description: Creates a connection_states record with appropriate
-%% values for the initial SSL connection setup.
-%%--------------------------------------------------------------------
-init_connection_states(Role) ->
- ConnectionEnd = record_protocol_role(Role),
- Current = initial_connection_state(ConnectionEnd),
- Pending = empty_connection_state(ConnectionEnd),
- #connection_states{current_read = Current,
- pending_read = Pending,
- current_write = Current,
- pending_write = Pending
- }.
-
-%%--------------------------------------------------------------------
--spec current_connection_state(#connection_states{}, read | write) ->
- #connection_state{}.
-%%
-%% Description: Returns the instance of the connection_state record
-%% that is currently defined as the current conection state.
-%%--------------------------------------------------------------------
-current_connection_state(#connection_states{current_read = Current},
- read) ->
- Current;
-current_connection_state(#connection_states{current_write = Current},
- write) ->
- Current.
-
-%%--------------------------------------------------------------------
--spec pending_connection_state(#connection_states{}, read | write) ->
- #connection_state{}.
-%%
-%% Description: Returns the instance of the connection_state record
-%% that is currently defined as the pending conection state.
-%%--------------------------------------------------------------------
-pending_connection_state(#connection_states{pending_read = Pending},
- read) ->
- Pending;
-pending_connection_state(#connection_states{pending_write = Pending},
- write) ->
- Pending.
-
-%%--------------------------------------------------------------------
--spec update_security_params(#security_parameters{}, #security_parameters{},
- #connection_states{}) -> #connection_states{}.
-%%
-%% Description: Creates a new instance of the connection_states record
-%% where the pending states gets its security parameters updated.
-%%--------------------------------------------------------------------
-update_security_params(ReadParams, WriteParams, States =
- #connection_states{pending_read = Read,
- pending_write = Write}) ->
- States#connection_states{pending_read =
- Read#connection_state{security_parameters =
- ReadParams},
- pending_write =
- Write#connection_state{security_parameters =
- WriteParams}
- }.
-%%--------------------------------------------------------------------
--spec set_mac_secret(binary(), binary(), client | server,
- #connection_states{}) -> #connection_states{}.
-%%
-%% Description: update the mac_secret field in pending connection states
-%%--------------------------------------------------------------------
-set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, client, States) ->
- set_mac_secret(ServerWriteMacSecret, ClientWriteMacSecret, States);
-set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, server, States) ->
- set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, States).
-
-set_mac_secret(ReadMacSecret, WriteMacSecret,
- States = #connection_states{pending_read = Read,
- pending_write = Write}) ->
- States#connection_states{
- pending_read = Read#connection_state{mac_secret = ReadMacSecret},
- pending_write = Write#connection_state{mac_secret = WriteMacSecret}
- }.
-
-
-%%--------------------------------------------------------------------
--spec set_master_secret(binary(), #connection_states{}) -> #connection_states{}.
-%%
-%% Description: Set master_secret in pending connection states
-%%--------------------------------------------------------------------
-set_master_secret(MasterSecret,
- States = #connection_states{pending_read = Read,
- pending_write = Write}) ->
- ReadSecPar = Read#connection_state.security_parameters,
- Read1 = Read#connection_state{
- security_parameters = ReadSecPar#security_parameters{
- master_secret = MasterSecret}},
- WriteSecPar = Write#connection_state.security_parameters,
- Write1 = Write#connection_state{
- security_parameters = WriteSecPar#security_parameters{
- master_secret = MasterSecret}},
- States#connection_states{pending_read = Read1, pending_write = Write1}.
-
-%%--------------------------------------------------------------------
--spec set_renegotiation_flag(boolean(), #connection_states{}) -> #connection_states{}.
-%%
-%% Description: Set secure_renegotiation in pending connection states
-%%--------------------------------------------------------------------
-set_renegotiation_flag(Flag, #connection_states{
- current_read = CurrentRead0,
- current_write = CurrentWrite0,
- pending_read = PendingRead0,
- pending_write = PendingWrite0}
- = ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{secure_renegotiation = Flag},
- CurrentWrite = CurrentWrite0#connection_state{secure_renegotiation = Flag},
- PendingRead = PendingRead0#connection_state{secure_renegotiation = Flag},
- PendingWrite = PendingWrite0#connection_state{secure_renegotiation = Flag},
- ConnectionStates#connection_states{current_read = CurrentRead,
- current_write = CurrentWrite,
- pending_read = PendingRead,
- pending_write = PendingWrite}.
-
-%%--------------------------------------------------------------------
--spec set_client_verify_data(current_read | current_write | current_both,
- binary(), #connection_states{})->
- #connection_states{}.
-%%
-%% Description: Set verify data in connection states.
-%%--------------------------------------------------------------------
-set_client_verify_data(current_read, Data,
- #connection_states{current_read = CurrentRead0,
- pending_write = PendingWrite0}
- = ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{client_verify_data = Data},
- PendingWrite = PendingWrite0#connection_state{client_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- pending_write = PendingWrite};
-set_client_verify_data(current_write, Data,
- #connection_states{pending_read = PendingRead0,
- current_write = CurrentWrite0}
- = ConnectionStates) ->
- PendingRead = PendingRead0#connection_state{client_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{client_verify_data = Data},
- ConnectionStates#connection_states{pending_read = PendingRead,
- current_write = CurrentWrite};
-set_client_verify_data(current_both, Data,
- #connection_states{current_read = CurrentRead0,
- current_write = CurrentWrite0}
- = ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{client_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{client_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- current_write = CurrentWrite}.
-%%--------------------------------------------------------------------
--spec set_server_verify_data(current_read | current_write | current_both,
- binary(), #connection_states{})->
- #connection_states{}.
-%%
-%% Description: Set verify data in pending connection states.
-%%--------------------------------------------------------------------
-set_server_verify_data(current_write, Data,
- #connection_states{pending_read = PendingRead0,
- current_write = CurrentWrite0}
- = ConnectionStates) ->
- PendingRead = PendingRead0#connection_state{server_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{server_verify_data = Data},
- ConnectionStates#connection_states{pending_read = PendingRead,
- current_write = CurrentWrite};
-
-set_server_verify_data(current_read, Data,
- #connection_states{current_read = CurrentRead0,
- pending_write = PendingWrite0}
- = ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{server_verify_data = Data},
- PendingWrite = PendingWrite0#connection_state{server_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- pending_write = PendingWrite};
-
-set_server_verify_data(current_both, Data,
- #connection_states{current_read = CurrentRead0,
- current_write = CurrentWrite0}
- = ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{server_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{server_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- current_write = CurrentWrite}.
-
-%%--------------------------------------------------------------------
--spec activate_pending_connection_state(#connection_states{}, read | write) ->
- #connection_states{}.
-%%
-%% Description: Creates a new instance of the connection_states record
-%% where the pending state of <Type> has been activated.
-%%--------------------------------------------------------------------
-activate_pending_connection_state(States =
- #connection_states{pending_read = Pending},
- read) ->
- NewCurrent = Pending#connection_state{sequence_number = 0},
- SecParams = Pending#connection_state.security_parameters,
- ConnectionEnd = SecParams#security_parameters.connection_end,
- EmptyPending = empty_connection_state(ConnectionEnd),
- SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
- NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
- States#connection_states{current_read = NewCurrent,
- pending_read = NewPending
- };
-
-activate_pending_connection_state(States =
- #connection_states{pending_write = Pending},
- write) ->
- NewCurrent = Pending#connection_state{sequence_number = 0},
- SecParams = Pending#connection_state.security_parameters,
- ConnectionEnd = SecParams#security_parameters.connection_end,
- EmptyPending = empty_connection_state(ConnectionEnd),
- SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
- NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
- States#connection_states{current_write = NewCurrent,
- pending_write = NewPending
- }.
-
-%%--------------------------------------------------------------------
--spec set_pending_cipher_state(#connection_states{}, #cipher_state{},
- #cipher_state{}, client | server) ->
- #connection_states{}.
-%%
-%% Description: Set the cipher state in the specified pending connection state.
-%%--------------------------------------------------------------------
-set_pending_cipher_state(#connection_states{pending_read = Read,
- pending_write = Write} = States,
- ClientState, ServerState, server) ->
- States#connection_states{
- pending_read = Read#connection_state{cipher_state = ClientState},
- pending_write = Write#connection_state{cipher_state = ServerState}};
-
-set_pending_cipher_state(#connection_states{pending_read = Read,
- pending_write = Write} = States,
- ClientState, ServerState, client) ->
- States#connection_states{
- pending_read = Read#connection_state{cipher_state = ServerState},
- pending_write = Write#connection_state{cipher_state = ClientState}}.
-
-%%--------------------------------------------------------------------
-spec get_tls_records(binary(), binary()) -> {[binary()], binary()} | #alert{}.
%%
%% Description: Given old buffer and new data from TCP, packs up a records
@@ -376,6 +120,43 @@ get_tls_records_aux(Data, Acc) ->
false ->
?ALERT_REC(?FATAL, ?UNEXPECTED_MESSAGE)
end.
+
+encode_plain_text(Type, Version, Data, ConnectionStates) ->
+ #connection_states{current_write=#connection_state{
+ compression_state=CompS0,
+ security_parameters=
+ #security_parameters{compression_algorithm=CompAlg}
+ }=CS0} = ConnectionStates,
+ {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0),
+ CS1 = CS0#connection_state{compression_state = CompS1},
+ {CipherFragment, CS2} = cipher(Type, Version, Comp, CS1),
+ CTBin = encode_tls_cipher_text(Type, Version, CipherFragment),
+ {CTBin, ConnectionStates#connection_states{current_write = CS2}}.
+
+%%--------------------------------------------------------------------
+-spec decode_cipher_text(#ssl_tls{}, #connection_states{}) ->
+ {#ssl_tls{}, #connection_states{}}| #alert{}.
+%%
+%% Description: Decode cipher text
+%%--------------------------------------------------------------------
+decode_cipher_text(#ssl_tls{type = Type, version = Version,
+ fragment = CipherFragment} = CipherText, ConnnectionStates0) ->
+ ReadState0 = ConnnectionStates0#connection_states.current_read,
+ #connection_state{compression_state = CompressionS0,
+ security_parameters = SecParams} = ReadState0,
+ CompressAlg = SecParams#security_parameters.compression_algorithm,
+ case decipher(Type, Version, CipherFragment, ReadState0) of
+ {PlainFragment, ReadState1} ->
+ {Plain, CompressionS1} = ssl_record:uncompress(CompressAlg,
+ PlainFragment, CompressionS0),
+ ConnnectionStates = ConnnectionStates0#connection_states{
+ current_read = ReadState1#connection_state{
+ compression_state = CompressionS1}},
+ {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates};
+ #alert{} = Alert ->
+ Alert
+ end.
+
%%--------------------------------------------------------------------
-spec protocol_version(tls_atom_version() | tls_version()) ->
tls_version() | tls_atom_version().
@@ -493,183 +274,39 @@ is_acceptable_version(_,_) ->
false.
%%--------------------------------------------------------------------
--spec compressions() -> [binary()].
-%%
-%% Description: return a list of compressions supported (currently none)
-%%--------------------------------------------------------------------
-compressions() ->
- [?byte(?NULL)].
-
-%%--------------------------------------------------------------------
--spec decode_cipher_text(#ssl_tls{}, #connection_states{}) ->
- {#ssl_tls{}, #connection_states{}}| #alert{}.
-%%
-%% Description: Decode cipher text
-%%--------------------------------------------------------------------
-decode_cipher_text(CipherText, ConnnectionStates0) ->
- ReadState0 = ConnnectionStates0#connection_states.current_read,
- #connection_state{compression_state = CompressionS0,
- security_parameters = SecParams} = ReadState0,
- CompressAlg = SecParams#security_parameters.compression_algorithm,
- case decipher(CipherText, ReadState0) of
- {Compressed, ReadState1} ->
- {Plain, CompressionS1} = uncompress(CompressAlg,
- Compressed, CompressionS0),
- ConnnectionStates = ConnnectionStates0#connection_states{
- current_read = ReadState1#connection_state{
- compression_state = CompressionS1}},
- {Plain, ConnnectionStates};
- #alert{} = Alert ->
- Alert
- end.
-%%--------------------------------------------------------------------
--spec encode_data(binary(), tls_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
-%%
-%% Description: Encodes data to send on the ssl-socket.
-%%--------------------------------------------------------------------
-encode_data(Frag, Version,
- #connection_states{current_write = #connection_state{
- security_parameters =
- #security_parameters{bulk_cipher_algorithm = BCA}}} =
- ConnectionStates) ->
- Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA),
- encode_iolist(?APPLICATION_DATA, Data, Version, ConnectionStates).
-
-%%--------------------------------------------------------------------
--spec encode_handshake(iolist(), tls_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
-%%
-%% Description: Encodes a handshake message to send on the ssl-socket.
-%%--------------------------------------------------------------------
-encode_handshake(Frag, Version, ConnectionStates) ->
- encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates).
-
-%%--------------------------------------------------------------------
--spec encode_alert_record(#alert{}, tls_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
-%%
-%% Description: Encodes an alert message to send on the ssl-socket.
-%%--------------------------------------------------------------------
-encode_alert_record(#alert{level = Level, description = Description},
- Version, ConnectionStates) ->
- encode_plain_text(?ALERT, Version, <<?BYTE(Level), ?BYTE(Description)>>,
- ConnectionStates).
-
-%%--------------------------------------------------------------------
--spec encode_change_cipher_spec(tls_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
-%%
-%% Description: Encodes a change_cipher_spec-message to send on the ssl socket.
-%%--------------------------------------------------------------------
-encode_change_cipher_spec(Version, ConnectionStates) ->
- encode_plain_text(?CHANGE_CIPHER_SPEC, Version, <<1:8>>, ConnectionStates).
-
-%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-encode_iolist(Type, Data, Version, ConnectionStates0) ->
- {ConnectionStates, EncodedMsg} =
- lists:foldl(fun(Text, {CS0, Encoded}) ->
- {Enc, CS1} = encode_plain_text(Type, Version, Text, CS0),
- {CS1, [Enc | Encoded]}
- end, {ConnectionStates0, []}, Data),
- {lists:reverse(EncodedMsg), ConnectionStates}.
-
-highest_protocol_version() ->
- highest_protocol_version(supported_protocol_versions()).
-
-initial_connection_state(ConnectionEnd) ->
- #connection_state{security_parameters =
- initial_security_params(ConnectionEnd),
- sequence_number = 0
- }.
-
-initial_security_params(ConnectionEnd) ->
- SecParams = #security_parameters{connection_end = ConnectionEnd,
- compression_algorithm = ?NULL},
- ssl_cipher:security_parameters(highest_protocol_version(), ?TLS_NULL_WITH_NULL_NULL,
- SecParams).
-
-empty_connection_state(ConnectionEnd) ->
- SecParams = empty_security_params(ConnectionEnd),
- #connection_state{security_parameters = SecParams}.
-
-empty_security_params(ConnectionEnd = ?CLIENT) ->
- #security_parameters{connection_end = ConnectionEnd,
- client_random = random()};
-empty_security_params(ConnectionEnd = ?SERVER) ->
- #security_parameters{connection_end = ConnectionEnd,
- server_random = random()}.
-random() ->
- Secs_since_1970 = calendar:datetime_to_gregorian_seconds(
- calendar:universal_time()) - 62167219200,
- Random_28_bytes = crypto:rand_bytes(28),
- <<?UINT32(Secs_since_1970), Random_28_bytes/binary>>.
-
-record_protocol_role(client) ->
- ?CLIENT;
-record_protocol_role(server) ->
- ?SERVER.
-
-%% 1/n-1 splitting countermeasure Rizzo/Duong-Beast, RC4 chiphers are not vulnerable to this attack.
-split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA) when BCA =/= ?RC4 andalso ({3, 1} == Version orelse
- {3, 0} == Version) ->
- do_split_bin(Rest, ChunkSize, [[FirstByte]]);
-split_bin(Bin, ChunkSize, _, _) ->
- do_split_bin(Bin, ChunkSize, []).
-
-do_split_bin(<<>>, _, Acc) ->
- lists:reverse(Acc);
-do_split_bin(Bin, ChunkSize, Acc) ->
- case Bin of
- <<Chunk:ChunkSize/binary, Rest/binary>> ->
- do_split_bin(Rest, ChunkSize, [Chunk | Acc]);
- _ ->
- lists:reverse(Acc, [Bin])
- end.
-
-encode_plain_text(Type, Version, Data, ConnectionStates) ->
- #connection_states{current_write=#connection_state{
- compression_state=CompS0,
- security_parameters=
- #security_parameters{compression_algorithm=CompAlg}
- }=CS0} = ConnectionStates,
- {Comp, CompS1} = compress(CompAlg, Data, CompS0),
- CS1 = CS0#connection_state{compression_state = CompS1},
- {CipherText, CS2} = cipher(Type, Version, Comp, CS1),
- CTBin = encode_tls_cipher_text(Type, Version, CipherText),
- {CTBin, ConnectionStates#connection_states{current_write = CS2}}.
-
encode_tls_cipher_text(Type, {MajVer, MinVer}, Fragment) ->
Length = erlang:iolist_size(Fragment),
[<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Length)>>, Fragment].
-cipher(Type, Version, Fragment, CS0) ->
- Length = erlang:iolist_size(Fragment),
- {MacHash, CS1=#connection_state{cipher_state = CipherS0,
- security_parameters=
- #security_parameters{bulk_cipher_algorithm =
+cipher(Type, Version, Fragment,
+ #connection_state{cipher_state = CipherS0,
+ sequence_number = SeqNo,
+ security_parameters=
+ #security_parameters{bulk_cipher_algorithm =
BCA}
- }} =
- hash_and_bump_seqno(CS0, Type, Version, Length, Fragment),
- {Ciphered, CipherS1} = ssl_cipher:cipher(BCA, CipherS0, MacHash, Fragment, Version),
- CS2 = CS1#connection_state{cipher_state=CipherS1},
- {Ciphered, CS2}.
-
-decipher(TLS=#ssl_tls{type=Type, version=Version, fragment=Fragment}, CS0) ->
- SP = CS0#connection_state.security_parameters,
+ } = WriteState0) ->
+ MacHash = calc_mac_hash(Type, Version, Fragment, WriteState0),
+ {CipherFragment, CipherS1} =
+ ssl_cipher:cipher(BCA, CipherS0, MacHash, Fragment, Version),
+ WriteState = WriteState0#connection_state{cipher_state=CipherS1},
+ {CipherFragment, WriteState#connection_state{sequence_number = SeqNo+1}}.
+
+decipher(Type, Version, CipherFragment,
+ #connection_state{sequence_number = SeqNo} = ReadState) ->
+ SP = ReadState#connection_state.security_parameters,
BCA = SP#security_parameters.bulk_cipher_algorithm,
HashSz = SP#security_parameters.hash_size,
- CipherS0 = CS0#connection_state.cipher_state,
- case ssl_cipher:decipher(BCA, HashSz, CipherS0, Fragment, Version) of
- {T, Mac, CipherS1} ->
- CS1 = CS0#connection_state{cipher_state = CipherS1},
- TLength = size(T),
- {MacHash, CS2} = hash_and_bump_seqno(CS1, Type, Version, TLength, T),
- case is_correct_mac(Mac, MacHash) of
- true ->
- {TLS#ssl_tls{fragment = T}, CS2};
+ CipherS0 = ReadState#connection_state.cipher_state,
+ case ssl_cipher:decipher(BCA, HashSz, CipherS0, CipherFragment, Version) of
+ {PlainFragment, Mac, CipherS1} ->
+ CS1 = ReadState#connection_state{cipher_state = CipherS1},
+ MacHash = calc_mac_hash(Type, Version, PlainFragment, ReadState),
+ case ssl_record:is_correct_mac(Mac, MacHash) of
+ true ->
+ {PlainFragment,
+ CS1#connection_state{sequence_number = SeqNo+1}};
false ->
?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
end;
@@ -677,40 +314,29 @@ decipher(TLS=#ssl_tls{type=Type, version=Version, fragment=Fragment}, CS0) ->
Alert
end.
-uncompress(?NULL, Data = #ssl_tls{type = _Type,
- version = _Version,
- fragment = _Fragment}, CS) ->
- {Data, CS}.
-
-compress(?NULL, Data, CS) ->
- {Data, CS}.
-
-hash_and_bump_seqno(#connection_state{sequence_number = SeqNo,
- mac_secret = MacSecret,
- security_parameters =
- SecPars} = CS0,
- Type, Version, Length, Fragment) ->
- Hash = mac_hash(Version,
- SecPars#security_parameters.mac_algorithm,
- MacSecret, SeqNo, Type,
- Length, Fragment),
- {Hash, CS0#connection_state{sequence_number = SeqNo+1}}.
-
-is_correct_mac(Mac, Mac) ->
- true;
-is_correct_mac(_M,_H) ->
- false.
-
mac_hash({_,_}, ?NULL, _MacSecret, _SeqNo, _Type,
_Length, _Fragment) ->
<<>>;
mac_hash({3, 0}, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) ->
- ssl_ssl3:mac_hash(MacAlg, MacSecret, SeqNo, Type, Length, Fragment);
+ ssl_v3:mac_hash(MacAlg, MacSecret, SeqNo, Type, Length, Fragment);
mac_hash({3, N} = Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment)
when N =:= 1; N =:= 2; N =:= 3 ->
- ssl_tls1:mac_hash(MacAlg, MacSecret, SeqNo, Type, Version,
+ tls_v1:mac_hash(MacAlg, MacSecret, SeqNo, Type, Version,
Length, Fragment).
+highest_protocol_version() ->
+ highest_protocol_version(supported_protocol_versions()).
+
sufficient_tlsv1_2_crypto_support() ->
CryptoSupport = crypto:supports(),
proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport)).
+
+calc_mac_hash(Type, Version,
+ PlainFragment, #connection_state{sequence_number = SeqNo,
+ mac_secret = MacSecret,
+ security_parameters =
+ SecPars}) ->
+ Length = erlang:iolist_size(PlainFragment),
+ mac_hash(Version, SecPars#security_parameters.mac_algorithm,
+ MacSecret, SeqNo, Type,
+ Length, PlainFragment).
diff --git a/lib/ssl/src/tls_record.hrl b/lib/ssl/src/tls_record.hrl
index c9350fa137..30d7343074 100644
--- a/lib/ssl/src/tls_record.hrl
+++ b/lib/ssl/src/tls_record.hrl
@@ -29,7 +29,6 @@
-include("ssl_record.hrl"). %% Common TLS and DTLS records and Constantes
%% Used to handle tls_plain_text, tls_compressed and tls_cipher_text
-
-record(ssl_tls, {
type,
version,
diff --git a/lib/ssl/src/ssl_tls1.erl b/lib/ssl/src/tls_v1.erl
index 8ab66d0627..2395e98642 100644
--- a/lib/ssl/src/ssl_tls1.erl
+++ b/lib/ssl/src/tls_v1.erl
@@ -22,7 +22,7 @@
%% Purpose: Handles tls1 encryption.
%%----------------------------------------------------------------------
--module(ssl_tls1).
+-module(tls_v1).
-include("ssl_cipher.hrl").
-include("ssl_internal.hrl").
@@ -86,7 +86,7 @@ certificate_verify(HashAlgo, _Version, Handshake) ->
-spec setup_keys(integer(), integer(), binary(), binary(), binary(), integer(),
integer(), integer()) -> {binary(), binary(), binary(),
- binary(), binary(), binary()}.
+ binary(), binary(), binary()}.
setup_keys(Version, _PrfAlgo, MasterSecret, ServerRandom, ClientRandom, HashSize,
KeyMatLen, IVSize)
@@ -106,7 +106,7 @@ setup_keys(Version, _PrfAlgo, MasterSecret, ServerRandom, ClientRandom, HashSize
WantedLength = 2 * (HashSize + KeyMatLen + IVSize),
KeyBlock = prf(?MD5SHA, MasterSecret, "key expansion",
[ServerRandom, ClientRandom], WantedLength),
- <<ClientWriteMacSecret:HashSize/binary,
+ <<ClientWriteMacSecret:HashSize/binary,
ServerWriteMacSecret:HashSize/binary,
ClientWriteKey:KeyMatLen/binary, ServerWriteKey:KeyMatLen/binary,
ClientIV:IVSize/binary, ServerIV:IVSize/binary>> = KeyBlock,
@@ -167,22 +167,22 @@ setup_keys(Version, PrfAlgo, MasterSecret, ServerRandom, ClientRandom, HashSize,
ServerWriteKey, ClientIV, ServerIV}.
-spec mac_hash(integer(), binary(), integer(), integer(), tls_version(),
- integer(), binary()) -> binary().
+ integer(), binary()) -> binary().
-mac_hash(Method, Mac_write_secret, Seq_num, Type, {Major, Minor},
+mac_hash(Method, Mac_write_secret, Seq_num, Type, {Major, Minor},
Length, Fragment) ->
%% RFC 2246 & 4346 - 6.2.3.1.
%% HMAC_hash(MAC_write_secret, seq_num + TLSCompressed.type +
%% TLSCompressed.version + TLSCompressed.length +
%% TLSCompressed.fragment));
- Mac = hmac_hash(Method, Mac_write_secret,
- [<<?UINT64(Seq_num), ?BYTE(Type),
- ?BYTE(Major), ?BYTE(Minor), ?UINT16(Length)>>,
+ Mac = hmac_hash(Method, Mac_write_secret,
+ [<<?UINT64(Seq_num), ?BYTE(Type),
+ ?BYTE(Major), ?BYTE(Minor), ?UINT16(Length)>>,
Fragment]),
Mac.
-spec suites(1|2|3) -> [cipher_suite()].
-
+
suites(Minor) when Minor == 1; Minor == 2->
case sufficent_ec_support() of
true ->
@@ -199,8 +199,8 @@ suites(Minor) when Minor == 3 ->
no_ec_suites(3) ++ no_ec_suites(2)
end.
-all_suites(Minor) when Minor == 1; Minor == 2->
- [
+all_suites(Minor) when Minor == 1; Minor == 2->
+ [
?TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
?TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
?TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
@@ -224,7 +224,7 @@ all_suites(Minor) when Minor == 1; Minor == 2->
?TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
?TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
?TLS_RSA_WITH_AES_128_CBC_SHA,
-
+
?TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
?TLS_ECDHE_RSA_WITH_RC4_128_SHA,
?TLS_RSA_WITH_RC4_128_SHA,
@@ -232,32 +232,32 @@ all_suites(Minor) when Minor == 1; Minor == 2->
?TLS_DHE_RSA_WITH_DES_CBC_SHA,
?TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
?TLS_ECDH_RSA_WITH_RC4_128_SHA,
-
+
?TLS_RSA_WITH_DES_CBC_SHA
];
-all_suites(3) ->
+all_suites(3) ->
[
?TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
?TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
?TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
?TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
-
+
?TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
?TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
?TLS_RSA_WITH_AES_256_CBC_SHA256,
-
+
?TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
?TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
?TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
?TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,
-
+
?TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,
?TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
?TLS_RSA_WITH_AES_128_CBC_SHA256
].
-no_ec_suites(Minor) when Minor == 1; Minor == 2->
- [
+no_ec_suites(Minor) when Minor == 1; Minor == 2->
+ [
?TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
?TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
?TLS_RSA_WITH_AES_256_CBC_SHA,
@@ -272,7 +272,7 @@ no_ec_suites(Minor) when Minor == 1; Minor == 2->
?TLS_DHE_RSA_WITH_DES_CBC_SHA,
?TLS_RSA_WITH_DES_CBC_SHA
];
-no_ec_suites(3) ->
+no_ec_suites(3) ->
[
?TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
?TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
@@ -323,7 +323,7 @@ p_hash(Secret, Seed, WantedLength, Method, N, Acc) ->
%% ... Where A(0) = seed
%% A(i) = HMAC_hash(secret, A(i-1))
-%% a(0, _Secret, Seed, _Method) ->
+%% a(0, _Secret, Seed, _Method) ->
%% Seed.
%% a(N, Secret, Seed, Method) ->
%% hmac_hash(Method, Secret, a(N-1, Secret, Seed, Method)).
diff --git a/lib/ssl/test/Makefile b/lib/ssl/test/Makefile
index 39aa22ffb4..cb919baf4e 100644
--- a/lib/ssl/test/Makefile
+++ b/lib/ssl/test/Makefile
@@ -47,6 +47,7 @@ MODULES = \
ssl_payload_SUITE \
ssl_session_cache_SUITE \
ssl_to_openssl_SUITE \
+ ssl_ECC_SUITE \
make_certs\
erl_make_certs
diff --git a/lib/ssl/test/ssl_ECC_SUITE.erl b/lib/ssl/test/ssl_ECC_SUITE.erl
new file mode 100644
index 0000000000..608f2f11c3
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE.erl
@@ -0,0 +1,225 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.2
+%%
+%% 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(ssl_ECC_SUITE).
+
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("public_key/include/public_key.hrl").
+
+%%--------------------------------------------------------------------
+%% Common Test interface functions -----------------------------------
+%%--------------------------------------------------------------------
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ [
+ {group, 'tlsv1.2'},
+ {group, 'tlsv1.1'},
+ {group, 'tlsv1'}
+ ].
+
+groups() ->
+ [
+ {'tlsv1.2', [], all_versions_groups()},
+ {'tlsv1.1', [], all_versions_groups()},
+ {'tlsv1', [], all_versions_groups()},
+ {'erlang_server', [], key_cert_combinations()},
+ {'erlang_client', [], key_cert_combinations()},
+ {'erlang', [], key_cert_combinations()}
+ ].
+
+all_versions_groups ()->
+ [{group, 'erlang_server'},
+ {group, 'erlang_client'},
+ {group, 'erlang'}
+ ].
+
+key_cert_combinations() ->
+ [client_ec_server_ec,
+ client_rsa_server_ec,
+ client_ec_server_rsa,
+ client_rsa_server_rsa].
+
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ catch crypto:stop(),
+ try crypto:start() of
+ ok ->
+ ssl:start(),
+ Config
+ catch _:_ ->
+ {skip, "Crypto did not start"}
+ end.
+
+end_per_suite(_Config) ->
+ ssl:stop(),
+ application:stop(crypto).
+
+%%--------------------------------------------------------------------
+init_per_group(erlang_client, Config) ->
+ case ssl_test_lib:is_sane_ecc(openssl) of
+ true ->
+ common_init_per_group(erlang_client, [{server_type, openssl},
+ {client_type, erlang} | Config]);
+ false ->
+ {skip, "Known ECC bug in openssl"}
+ end;
+
+init_per_group(erlang_server, Config) ->
+ case ssl_test_lib:is_sane_ecc(openssl) of
+ true ->
+ common_init_per_group(erlang_client, [{server_type, erlang},
+ {client_type, openssl} | Config]);
+ false ->
+ {skip, "Known ECC bug in openssl"}
+ end;
+
+init_per_group(erlang = Group, Config) ->
+ case ssl_test_lib:sufficient_crypto_support(Group) of
+ true ->
+ common_init_per_group(erlang, [{server_type, erlang},
+ {client_type, erlang} | Config]);
+ false ->
+ {skip, "Crypto does not support ECC"}
+ end;
+init_per_group(Group, Config) ->
+ common_init_per_group(Group, Config).
+
+common_init_per_group(GroupName, Config) ->
+ case ssl_test_lib:is_tls_version(GroupName) of
+ true ->
+ ssl_test_lib:init_tls_version(GroupName),
+ [{tls_version, GroupName} | Config];
+ _ ->
+ openssl_check(GroupName, Config)
+ end.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+
+init_per_testcase(_TestCase, Config) ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]),
+ Config.
+
+end_per_testcase(_TestCase, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% Test Cases --------------------------------------------------------
+%%--------------------------------------------------------------------
+
+client_ec_server_ec(Config) when is_list(Config) ->
+ basic_test("ec1.crt", "ec1.key", "ec2.crt", "ec2.key", Config).
+
+client_ec_server_rsa(Config) when is_list(Config) ->
+ basic_test("ec1.crt", "ec1.key", "rsa1.crt", "rsa1.key", Config).
+
+client_rsa_server_ec(Config) when is_list(Config) ->
+ basic_test("rsa1.crt", "rsa1.key", "ec2.crt", "ec2.key", Config).
+
+client_rsa_server_rsa(Config) when is_list(Config) ->
+ basic_test("rsa1.crt", "rsa1.key", "rsa2.crt", "rsa2.key", Config).
+
+%%--------------------------------------------------------------------
+%% Internal functions ------------------------------------------------
+%%--------------------------------------------------------------------
+basic_test(ClientCert, ClientKey, ServerCert, ServerKey, Config) ->
+ DataDir = ?config(data_dir, Config),
+ SType = ?config(server_type, Config),
+ CType = ?config(client_type, Config),
+ {Server, Port} = start_server(SType,
+ filename:join(DataDir, "CA.pem"),
+ filename:join(DataDir, ServerCert),
+ filename:join(DataDir, ServerKey),
+ Config),
+ Client = start_client(CType, Port, filename:join(DataDir, "CA.pem"),
+ filename:join(DataDir, ClientCert),
+ filename:join(DataDir, ClientKey), Config),
+ check_result(Server, SType, Client, CType).
+
+start_client(openssl, Port, CA, Cert, Key, _) ->
+ Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
+ " -cert " ++ Cert ++ " -CAfile " ++ CA
+ ++ " -key " ++ Key ++ " -host localhost -msg",
+ OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+ true = port_command(OpenSslPort, "Hello world"),
+ OpenSslPort;
+start_client(erlang, Port, CA, Cert, Key, Config) ->
+ {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
+ ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {ssl_test_lib, send_recv_result_active, []}},
+ {options, [{verify, verify_peer}, {cacertfile, CA},
+ {certfile, Cert}, {keyfile, Key}]}]).
+
+start_server(openssl, CA, Cert, Key, _) ->
+ Port = ssl_test_lib:inet_port(node()),
+ Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
+ " -cert " ++ Cert ++ " -CAfile " ++ CA
+ ++ " -key " ++ Key ++ " -Verify 2 -msg",
+ OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+ ssl_test_lib:wait_for_openssl_server(),
+ true = port_command(OpenSslPort, "Hello world"),
+ {OpenSslPort, Port};
+
+start_server(erlang, CA, Cert, Key, Config) ->
+ {_, ServerNode, _} = ssl_test_lib:run_where(Config),
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib,
+ send_recv_result_active,
+ []}},
+ {options,
+ [{verify, verify_peer}, {cacertfile, CA},
+ {certfile, Cert}, {keyfile, Key}]}]),
+ {Server, ssl_test_lib:inet_port(Server)}.
+
+check_result(Server, erlang, Client, erlang) ->
+ ssl_test_lib:check_result(Server, ok, Client, ok);
+check_result(Server, erlang, _, _) ->
+ ssl_test_lib:check_result(Server, ok);
+check_result(_, _, Client, erlang) ->
+ ssl_test_lib:check_result(Client, ok);
+check_result(_,openssl, _, openssl) ->
+ ok.
+
+openssl_check(erlang, Config) ->
+ Config;
+openssl_check(_, Config) ->
+ TLSVersion = ?config(tls_version, Config),
+ case ssl_test_lib:check_sane_openssl_version(TLSVersion) of
+ true ->
+ ssl:start(),
+ Config;
+ false ->
+ {skip, "TLS version not supported by openssl"}
+ end.
+
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/CA.pem b/lib/ssl/test/ssl_ECC_SUITE_data/CA.pem
new file mode 100644
index 0000000000..f82efdefc5
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/CA.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICGjCCAYegAwIBAgIQZIIqq4RXfpBKJXV69Jc4BjAJBgUrDgMCHQUAMB0xGzAZ
+BgNVBAMTEklTQSBUZXN0IEF1dGhvcml0eTAeFw0xMjAzMjAxNzEzMjFaFw0zOTEy
+MzEyMzU5NTlaMB0xGzAZBgNVBAMTEklTQSBUZXN0IEF1dGhvcml0eTCBnzANBgkq
+hkiG9w0BAQEFAAOBjQAwgYkCgYEAqnt6FSyFQVSDyP7mY63IhCzgysTxBEg1qDb8
+nBHj9REReZA5UQ5iyEOdTbdLyOaSk2rJyA2wdTjYkNnLzK49nZFlpf89r3/bakAM
+wZv69S3FJi9W2z9m4JPv/5+QCYnFNRSnnHw3maNElwoQyknx96I3W7EuVOvKtKhh
+4DaD0WsCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zBOBgNVHQEERzBFgBBCHwn2
+8AmbN+cvJl1iJ1bsoR8wHTEbMBkGA1UEAxMSSVNBIFRlc3QgQXV0aG9yaXR5ghBk
+giqrhFd+kEoldXr0lzgGMAkGBSsOAwIdBQADgYEAIlVecua5Cr1z/cdwQ8znlgOU
+U+y/uzg0nupKkopzVnRYhwV4hxZt3izAz4C/SJZB7eL0bUKlg1ceGjbQsGEm0fzF
+LEV3vym4G51bxv03Iecwo96G4NgjJ7+9/7ciBVzfxZyfuCpYG1M2LyrbOyuevtTy
+2+vIueT0lv6UftgBfIE=
+-----END CERTIFICATE-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec1.crt b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.crt
new file mode 100644
index 0000000000..7d2b9cde9d
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.crt
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCB8AIBBjANBgkqhkiG9w0BAQUFADAdMRswGQYDVQQDExJJU0EgVGVzdCBB
+dXRob3JpdHkwHhcNMTMwODA4MTAxNDI3WhcNMjMwODA2MTAxNDI3WjBFMQswCQYD
+VQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExFTATBgNVBAcTDEZvcnQgQmVsdm9p
+cjEMMAoGA1UEAxMDZWMxMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEpiRIxUCESROR
+P8IByg+vBv1fDdAg7yXfAh95GxFtvhBqZs6ATwaRKyLmZYgUm/4NUAyUeqmTBb7s
+2msKo5mnNzANBgkqhkiG9w0BAQUFAAOBgQAmwzoB1DVO69FQOUdBVnyups4t0c1c
+8h+1z/5P4EtPltk4o3mRn0AZogqdXCpNbuSGbSJh+dep5xW30VLxNHdc+tZSLK6j
+pT7A3hymMk8qbi13hxeH/VpEP25y1EjHowow9Wmb6ebtT/v7qFQ9AAHD9ONcIM4I
+FCC8vdFo7M5GgQ==
+-----END CERTIFICATE-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec1.key b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.key
new file mode 100644
index 0000000000..2dc9508b3c
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.key
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQACg==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MHQCAQEEIOO0WK8znNzLyZIoGRIlaKnCNr2Wy8uk9i+GGFIhDGNAoAcGBSuBBAAK
+oUQDQgAEpiRIxUCESRORP8IByg+vBv1fDdAg7yXfAh95GxFtvhBqZs6ATwaRKyLm
+ZYgUm/4NUAyUeqmTBb7s2msKo5mnNw==
+-----END EC PRIVATE KEY-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec2.crt b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.crt
new file mode 100644
index 0000000000..b0558a0ebc
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.crt
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCB8AIBBzANBgkqhkiG9w0BAQUFADAdMRswGQYDVQQDExJJU0EgVGVzdCBB
+dXRob3JpdHkwHhcNMTMwODA4MTAxNDM0WhcNMjMwODA2MTAxNDM0WjBFMQswCQYD
+VQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExFTATBgNVBAcTDEZvcnQgQmVsdm9p
+cjEMMAoGA1UEAxMDZWMyMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEzXaYReUyvoYl
+FwGOe0MJEXWCUncMfr2xG4GMjGYlfZsvLGEokefsJIvW+I+9jgUT2UFjxFXYNAvm
+uD1A1iWVWjANBgkqhkiG9w0BAQUFAAOBgQBFa6iIlrT9DWptIdB8uSYvp7qwiHxN
+hiVH5YhGIHHqjGZqtRHrSxqNEYMXXrgH9Hxc6gDbk9PsHZyVVoh/HgVWddqW1inh
+tStZm420PAKCuH4T6Cfsk76GE2m7FRzJvw9TM1f2A5nIy9abyrpup8lZGcIL4Kmq
+1Fix1LRtrmLNTA==
+-----END CERTIFICATE-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec2.key b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.key
new file mode 100644
index 0000000000..366d13648b
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.key
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQACg==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MHQCAQEEIPR3ORUpAFMTQhUJ0jllN38LKWziG8yP2H54Y/9vh1PwoAcGBSuBBAAK
+oUQDQgAEzXaYReUyvoYlFwGOe0MJEXWCUncMfr2xG4GMjGYlfZsvLGEokefsJIvW
++I+9jgUT2UFjxFXYNAvmuD1A1iWVWg==
+-----END EC PRIVATE KEY-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.crt b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.crt
new file mode 100644
index 0000000000..ed9beacf68
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVjCCAr8CAQkwDQYJKoZIhvcNAQEFBQAwHTEbMBkGA1UEAxMSSVNBIFRlc3Qg
+QXV0aG9yaXR5MB4XDTEzMDgwODEwMTUzNFoXDTQwMTIyNDEwMTUzNFowRjELMAkG
+A1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRUwEwYDVQQHEwxGb3J0IEJlbHZv
+aXIxDTALBgNVBAMTBHJzYTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQC62v40w1AjV3oJuyYC2Fw6XhTOi1il6xZFnB9J1WhCmuxAB/VMhBcNypx38mNk
+eQ7a/ERQ5ddhZey29DYeFYU8oqfDURgWx5USHufb90xBen9KPmX3VNuQ8ZFP2q8Q
+b01/oRHBJQRBuaCtFHzpGIVBjC6dD5yeQgJsYaF4u+PBbonsIGROXMybcvUzXmjU
+dwpy2NhjGQL5sWcOdIeRP43APSyRYvq4tuBUZk2XxWfBcvA8LpcoYPMlRTf6jGL1
+/fAAcCYJ9lh3h92w0NZ/7ZRa/ebTplxK6yqCftuSKui1KdL69m0WZqHl79AUSfs9
+lsOwx9lHkyYvJeMofyeDbZ+3OYLmVqEBG1fza2aV2XVh9zJ8fAwmXy/c2IDhw/oD
+HAe/rSg/Sgt03ydIKqtZHbl3v0EexQQRlJRULIzdtON02dJMUd4EFUgQ9OUtEmC2
+Psj9Jdu1g5cevU7Mymu8Ot+fjHiGTcBUsXNuXFCbON3Gw7cIDl4+iv+cpDHHVC9L
+HK3PMEq3vu3qOGXSz+LDOoqkfROcLG7BclBuN2zoVSsMHFkB4aJhwy7eHhGz0z2W
+c6LTVd+GAApdY80kmjOjT//QxHEsX/n1useHza3OszQqZiArr4ub4rtq+l1DxAS/
+DWrZ/JGsbKL8cjWso6qBF94xTi8WhjkKuUYhsm+qLAbNOQIDAQABMA0GCSqGSIb3
+DQEBBQUAA4GBAIcuzqRkfypV/9Z85ZQCCoejPm5Urhv7dfg1/B3QtazogPBZLgL5
+e60fG1uAw5GmqTViHLvW06z73oQvJrFkrCLVvadDNtrKYKXnXqdkgVyk36F/B737
+A43HGnMfSxCfRhIOuKZB9clP5PiNlhw36yi3DratqT6TUvI69hg8a7jA
+-----END CERTIFICATE-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.key b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.key
new file mode 100644
index 0000000000..6e0d913d79
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.key
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIJKAIBAAKCAgEAutr+NMNQI1d6CbsmAthcOl4UzotYpesWRZwfSdVoQprsQAf1
+TIQXDcqcd/JjZHkO2vxEUOXXYWXstvQ2HhWFPKKnw1EYFseVEh7n2/dMQXp/Sj5l
+91TbkPGRT9qvEG9Nf6ERwSUEQbmgrRR86RiFQYwunQ+cnkICbGGheLvjwW6J7CBk
+TlzMm3L1M15o1HcKctjYYxkC+bFnDnSHkT+NwD0skWL6uLbgVGZNl8VnwXLwPC6X
+KGDzJUU3+oxi9f3wAHAmCfZYd4fdsNDWf+2UWv3m06ZcSusqgn7bkirotSnS+vZt
+Fmah5e/QFEn7PZbDsMfZR5MmLyXjKH8ng22ftzmC5lahARtX82tmldl1YfcyfHwM
+Jl8v3NiA4cP6AxwHv60oP0oLdN8nSCqrWR25d79BHsUEEZSUVCyM3bTjdNnSTFHe
+BBVIEPTlLRJgtj7I/SXbtYOXHr1OzMprvDrfn4x4hk3AVLFzblxQmzjdxsO3CA5e
+Por/nKQxx1QvSxytzzBKt77t6jhl0s/iwzqKpH0TnCxuwXJQbjds6FUrDBxZAeGi
+YcMu3h4Rs9M9lnOi01XfhgAKXWPNJJozo0//0MRxLF/59brHh82tzrM0KmYgK6+L
+m+K7avpdQ8QEvw1q2fyRrGyi/HI1rKOqgRfeMU4vFoY5CrlGIbJvqiwGzTkCAwEA
+AQKCAgBkXyaWKSRvF5pSh9lPRfGk2MzMdkXUOofoNIkKHDy5KocljiDSTVIk8mVC
+eU2ytuSn9UKtQgmEJEAXtu8rEdxUSftcC7+o3OTSqw9ZNWoc8jRWKVaUmVyoa1rn
+Tk0jwuYaXOcwnTXAKHqK/qpqe+V45FhVvgEfcc3jcj5OoH8jdMFZubyn62ltRz83
+rMsa9icCskDqWpEil40IUshP2ZfHYBUEs+qCNpoiPCIKGNw3KgqqCUzhP9LcfmYn
+jCnMge/eDGAikdXLv4vyYvwWFATRK/pGTuLcy542IvbHeY0vY5wVezH2CoOFBGD9
+xQ/UcZwE5hVtQToNsYhoRIVxL/3Of0qDk1M6W2Plh2MAstyejIHE3ct0pPfW3rsu
+j/9Z/H0P9Q5ghSjarwOp2qGrrz6/4LVbbTDY8V1L928l4SqbUMtEQxcxTBN8YFoD
+mPV3Jc3zls9wiiEX53RcH8MK5tjrcRwWqurTZvi/pkLfXlGDgKGCOaa3HgWVQyU+
+L6jVZM+u1nwN+jNXQYGeLEro/6tvG8WQbRMHQoxLG+rm4V3/SwH0DcfrVFDTg+i6
+3wMU1GC/aQEdTFWXvHAkpwrf4M9QWvjtheiaSxtBUoAY6l+ixCVHKrIk6glKLEjx
+92HxmcJdopQScFETAyg8eVKV0kOGfVeFEpIqwq7hVedmTflpQQKCAQEA44h4dAta
+cYeBqBr8eljWcgs79gmgwBEQxQUnwE/zuzLKn5NxAW324Kh25V/n/MupUzBlLPWn
+91UHfw9PCXT8/HvgYQ4S5sXbKRbGmuPSsTmz4Rfe2ix6RggVNUOwORVNDyM7SQh7
+USdzZH5dMxKfF5L/b4Byx7eQZaoeKlfaXcqgikNZZ6pkhVCNxUKi9vvjS9r2wwCd
+xtgu5MfTpdEci0zH1+uuRisVRcEbcRX9umUTCiZrmEeddZXNiwTAS3FtX7qGzuq9
+LKIeETwcOZrWj0E48UvbSfK4Axn7sf5J0n7/Qo7I089S5QQEI6ZDP501i71dNFhn
+qfcY30c1k3TC7QKCAQEA0juuVHExKNLLNmQejNPfuHYoH0Uk2BH/8x96/Mkj6k6K
+SUCHDS3iWOljXGw8YtpS8v5mGBGgMhJ+s/vCRM6R9eXYTc8u2ktY/kjyW0PgW8/Z
+vb9VrQpn5svTNwj2Q8qYsTqXnQKO7YuL+hnQpQNAcID6FTeOASVLGObEf810qRfN
+4y3RqCWUnYXXTyXj+cJdbXTxfF7HVZPIAQKqE7J5Qo9ynYILY62oSmUGC6m8VKyE
+rrvDMK1IVi0X4w+Jx4HX0IC2+DBKxCaLWT69bE1IwjB06Q5zoTQPVi6c6qQp7K0H
+kqSyLJ/ctwcEubu0DPNmvMlgWtAbAsoESA5GbIit/QKCAQEAxRzp9OYNAUM6AK74
+QOmLRZsT4+6tUxa1p2jy6fiZlnfG731kra9c630mG0n9iJPK6aWIUO20CGGiL+HM
+P84YiIaseIgfucp4NV1kyrRJR31MptjuF6Xme5ru/IjaNmmMq2uDJZ7ybfi2T73k
+8aTVLDANl8P4K6qLrnc00MvxAcXTVFRKNLN5h8CkQNqcoUjPvVxA3+g9xxBrd4jh
+gsnoZ4kpq5WiEWmrcRV8t3gsqfh8CRQFrBOGhmIzgZapG/J0pTTLKqBTKEJ9t8KS
+VRkdfVcshGWJ4MMjxJQS5zz7KR8Z9cgKlOwLzRiwmU2k/owr4hY3k2xuyeClrHBd
+KpRBdQKCAQBvDk/dE55gbloi9WieBB6eluxC+IeqDHgkunCBsM9kKvEqGQg+kgqL
+5V4zqImNvr8q1fCgrk7tpI+CDHBnYKgCOdS15cheUIdGbMp6I7UVSws/DR/5NRIF
+/Y4p+HX/Abr/hHAq5PsTyS+8gn6RbNJRnBB/vMUrHcQ5902+JY6G9KgyZjXmmVOU
+kutWSDHR8jbgZ3JZvMeYEWUKA5pMpW8hFh35zoStt0K7afpzlsqCAFBm7ZEC2cbo
+nxGLRN4HojObVSNSoFAepi3eiyINYBYbXvWjV5sFgTbI0/7YhLgQ6qahdJcas6go
+l3CLnPhUDxAqkkZwMpbSNl1kowXYt6sRAoIBAAOWnXgf9Bdb9OWKGgt42gVfC4cz
+zj2JoLpbDTtbEdHNn8XQvPhGbpdtgnsuEMijIMy1UTlmv17jbFWdZTDeN31EUJrC
+smgKX0OlVFKD90AI0BiIREK0hJUBV0pV4JoUjwnQBHGvranD06/wAtHEqgqF1Ipp
+DCAKwxggM7qtB1R1vkrc/aLQej+mlwA8N6q92rnEsg+EnEbhtLDDZQcV/q5cSDCN
+MMcnM+QdyjKwEeCVXHaqNfeSqKg/Ab2eZbS9VxA+XZD73+eUY/JeJsg7LfZrRz0T
+ij5LCS7A+nVB5/B5tGkk4fcNhk2n356be6l46S98BEgtuwGLC9pqXf7zyp4=
+-----END RSA PRIVATE KEY-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.crt b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.crt
new file mode 100644
index 0000000000..06ca92dda3
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVjCCAr8CAQowDQYJKoZIhvcNAQEFBQAwHTEbMBkGA1UEAxMSSVNBIFRlc3Qg
+QXV0aG9yaXR5MB4XDTEzMDgwODEwMTYwMloXDTQwMTIyNDEwMTYwMlowRjELMAkG
+A1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRUwEwYDVQQHEwxGb3J0IEJlbHZv
+aXIxDTALBgNVBAMTBHJzYTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCjQUe0BGOpULjOAmLbXM4SSQzJvxJbCFi3tryyd+OARq6Fdp6/fslVhsr0PhWE
+X8yRbAugIjseTpLwz+1OC6LavOGV1ixzGTI/9HDXGKbf8qoCrSdh28sqQJnmqGT4
+UCKLn6Rqjg2iyBBcSK3LrtKEPI4C7NaSOZUtANkppvziEMwm+0r16sgHh2Xx6mxd
+22q01kq1lJqwEnIDPMSz3+ESUVQQ4T3ka7yFIhc9PYmILIXkZi0x7AiDeRkIILul
+GQrduTWSPGY3prXeDAbmQNazxrHp8fcR2AfFSI6HYxMALq9jWxc4xDIkss6BO2Et
+riJOIgXFpbyVsYCbkI1kXhEWFDt3uJBIcmtJKGzro4xv+XLG6BbUeTJgSHXMc7Cb
+fX87+CBIFR5a/aqkEKh/mcvsDdaV+kpNKdr7q4wAuIQb8g7IyXEDuAm1VZjQs9WC
+KFRGSq9sergEw9gna0iThRZjD+dzNzB17XmlAK4wa98a7MntwqpAt/GsCFOiPM8E
+c+8gpuo8WqC0kP8OpImyw9cQhlZ3dca1qkr2cyKyAOGxUxyA67FgiHSsxJJ2Xhse
+o49qeKTjMZd8zhSokM2TH6qEf7YfOePU51YRfAHUhzRmE31N/MExqDjFjklksEtM
+iHhbPo+cOoxV8x1u13umdUvtTaAUSBA/DpvzWdnORvnaqQIDAQABMA0GCSqGSIb3
+DQEBBQUAA4GBAFD+O7h+5R5S1rIN9eC+oEGpvRhMG4v4G3pJp+c7bbtO7ifFx1WP
+bta1b5YtiQYcKP0ORABm/3Kcvsb3VbaMH/zkxWEbASZsmIcBY3ml4f2kkn6WT2hD
+Wc6VMIAR3N6Mj1b30yI1qYVIid+zIouiykMB+zqllm+Uar0SPNjKxDU/
+-----END CERTIFICATE-----
diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.key b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.key
new file mode 100644
index 0000000000..d415ef0391
--- /dev/null
+++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.key
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIJJwIBAAKCAgEAo0FHtARjqVC4zgJi21zOEkkMyb8SWwhYt7a8snfjgEauhXae
+v37JVYbK9D4VhF/MkWwLoCI7Hk6S8M/tTgui2rzhldYscxkyP/Rw1xim3/KqAq0n
+YdvLKkCZ5qhk+FAii5+kao4NosgQXEity67ShDyOAuzWkjmVLQDZKab84hDMJvtK
+9erIB4dl8epsXdtqtNZKtZSasBJyAzzEs9/hElFUEOE95Gu8hSIXPT2JiCyF5GYt
+MewIg3kZCCC7pRkK3bk1kjxmN6a13gwG5kDWs8ax6fH3EdgHxUiOh2MTAC6vY1sX
+OMQyJLLOgTthLa4iTiIFxaW8lbGAm5CNZF4RFhQ7d7iQSHJrSShs66OMb/lyxugW
+1HkyYEh1zHOwm31/O/ggSBUeWv2qpBCof5nL7A3WlfpKTSna+6uMALiEG/IOyMlx
+A7gJtVWY0LPVgihURkqvbHq4BMPYJ2tIk4UWYw/nczcwde15pQCuMGvfGuzJ7cKq
+QLfxrAhTojzPBHPvIKbqPFqgtJD/DqSJssPXEIZWd3XGtapK9nMisgDhsVMcgOux
+YIh0rMSSdl4bHqOPanik4zGXfM4UqJDNkx+qhH+2Hznj1OdWEXwB1Ic0ZhN9TfzB
+Mag4xY5JZLBLTIh4Wz6PnDqMVfMdbtd7pnVL7U2gFEgQPw6b81nZzkb52qkCAwEA
+AQKCAgBORLHXwHL3bdfsDIDQooG5ioQzBQQL2MiP63A0L/5GNZzeJ6ycKnDkLCeJ
+SWqPeE5fOemo8EBfm1QfV9BxpmqBbCTK7U+KLv5EYzDmLs9ydqjDd7h11iZlL2uZ
+hgpCckjdn7/3xfsLm9ccJ0wLZtlOxKlhBaMpn6nBVbLHoWOEDoGR/tBFbjZQRb2+
+aaFirhtOb56Jx6ER4QYAP1Ye1qrVWWBwZ0yBApXzThDOL36MZqwagFISqRK71YcG
+uoq78HGhM3ZXkdV/wNFYj3OPWG6W6h/KBVNqnqO7FbofdoRZhghYHgfYE1fm+ELA
++nLwr5eK1gzmYTs0mVELRBZFlEOkCfYNOnuRgysFezEklS+ICp3HzIhYXza3kyTf
+B2ZBwZZVCv/94MKyibyANErmv1a5ugY5Hsn9/WKC8qTto+qLYoyFCvBjzj0PSaVX
+/3cty2DY0SK16K1Y4AOPtJMYTXYB3tVX8Akgjz1F6REBtZSOXrSQ3Vhy1ORl3Hzf
+WCBYDqL8K0hJiBVgkvneIyIjmFHsdM60Nr7EldBEnJ/UrPzsl2VuWFPZlnasfUaW
+x+vq1H4Dfz+bHt8coBRHDjKgUvwkfFeBQOBR5DG3vMrxguVRA1EYYMRR5C3yxk2m
+ARAtdh4VxUQDQjjrmr7Dl/y1rU34aInXIrrFWpuvIhl8Ht09sQKCAQEA1pXKK5f0
+HkKfM/qk5xzF+WdHClBrPXi0XwLN6UQ+WWMMNhkGZ+FMPXl/6IJDT91s6DA3tPhr
+OZF64n9ZFaGgHNBXNiB+Txjv5vZeSBMFt3hSonqt42aijx6gXfmLnkA+TYpa6Wex
+YCeEgdH8LocJa7Gj2vzrYliPYk3deh6SnZZ6N8bI+ciwK3ZGF/pkWaTX83dIFq3w
+YyZ+0dEpNGbA9812wNVourPg3OfqG3/CdnTfvY1M9KCC3JalpyzQL4Zm5soXF0wj
+36C2yTxA02AyFz3TvUIBrvsN6i0gmGfE79+UIp29JYrFRsIgBDt+ze2vQWUz2MX5
+GeX6/yCBgiTXtwKCAQEAwsNf6k2m5Cw+WtuLzzUfBBJCN+t1lrnYJ6lF0HubW6TZ
+vX1kBWyc+Rpo4ljr/+f4R9aC/gTEQOmV/hNVZy1RU2dAI8cH+r6JWG9lgif+8h//
+5R81txE7gnuK1Na7PmvnQPPN661zsQZ5e1ENPXS3TJmUW/M01JxAMqEQjvAPa/II
+H2KjL5NX28k9Hiw9rP6n+qXAfG/LEwXgoVCcehPwfANqQ1l95UgOdKDmjG94dipI
+h2DEK70ZbrsgQbT60Wd8I5h0yhiQsik2/bVkqLmcG4SSg0/5cf2vZMApgoH/adUz
+rJFdthm7iGPLhwS6fbhXew17Af96FvzfkifUV+cgnwKCAQBNUlYyFSQKz1jMgxFu
+kciokNVhWw75bIgaAEmwNz38OZuJ1sSfI+iz8hbr8hxNJ+15UP6RwD3q1YghG2A/
+Uij+mPgD8ftxhvvTDo10jR4vOTUVhP0phq8mwRNqKWRs1ptcl3Egz5NzoWm22bJ0
+FYaIfs8bNq2el2i7NHGM8n1EOZe6h2+dyfno/0pMk5YbUzHZce7Q9UY8g/+InUSq
+tCfuYuPaokuFkxGAqDSMSiIJSx3gEI1dTIU69TGlppkxts1XdhSR+YanqyKSKpr1
+T6FdDJNCjAlNQvuFmVM4d5PYF4kqXApu/60MTSD6RXHwxCe1ecEP6G5VLbCew9jG
+y33LAoIBAGsWyC9pwQEm/qYwn4AwYjx32acrtX1J9HtiTLvkqzjJvNu/DXcaEHm7
+tr32TNVp9A9z+JS5hDt49Hs+oC/aMCRe2lqRvmZ1y8kvfy4A1eLGC4stDPj65bDK
+QzziURRyejYxmCElPz6wI63VlCUdfwgEThn88SiSPY5ZF2SwxJoC+8peDwJCzwVP
+cmabxtHPOAfOibciNRPhoHCyhUdunUVjD1O26k1ewGwKaJoBVMgMWdLuNw8hq9FB
+3OukGmF3uD9OPbE9rpn3pX/89Dr9y8MpsvG20J6H8Z/BNVHILus/SmlxiIhvP7kv
+viIgTHaCHL/RWrhvg+8N3dRcSBqJQFsCggEAFe2TMEq2AlnBn4gsuAOIuZPYKQCg
+2a+tl1grQzmNth6AGGQcIqShadICD6SnVMIS64HHV/m18Cuz7GhJ06ZVjXJsHueG
+UpTE9wAmI2LxnNkupkLJu+SVcW3N86PujWmQBFpHkd+IRPLS51xjD9W5zLJ7HL4/
+fnKO+B+ZK6Imxbe5C5vJezkGfeOSyQoVtt6MT/XtSKNEGPBX+M6fLKgUMMg2H2Mt
+/SsD7DkOzFteKXzaEg/K8oOTpsOPkVDwNl2KErlEqbJv0k7yEVw50mYmsn/OLjh8
++9EibISwCODbPxB+PhV6u2ue1IvGLRqtsN60lFOvbGn+kSewy9EUVHHQDQ==
+-----END RSA PRIVATE KEY-----
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index b5cf6d1212..b8849d5cbd 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -212,21 +212,20 @@ end_per_suite(_Config) ->
%%--------------------------------------------------------------------
init_per_group(GroupName, Config) ->
- case ssl_test_lib:is_tls_version(GroupName) of
+ case ssl_test_lib:is_tls_version(GroupName) andalso ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
+ ssl_test_lib:init_tls_version(GroupName),
+ Config;
+ _ ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
+ ssl:start(),
Config;
false ->
{skip, "Missing crypto support"}
- end;
- _ ->
- ssl:start(),
- Config
+ end
end.
-
end_per_group(_GroupName, Config) ->
Config.
diff --git a/lib/ssl/test/ssl_handshake_SUITE.erl b/lib/ssl/test/ssl_handshake_SUITE.erl
index a40f07fd07..9695710230 100644
--- a/lib/ssl/test/ssl_handshake_SUITE.erl
+++ b/lib/ssl/test/ssl_handshake_SUITE.erl
@@ -32,43 +32,44 @@
%%--------------------------------------------------------------------
suite() -> [{ct_hooks,[ts_install_cth]}].
-all() -> [
- decode_hello_handshake,
- decode_single_hello_extension_correctly,
- decode_unknown_hello_extension_correctly].
+all() -> [decode_hello_handshake,
+ decode_single_hello_extension_correctly,
+ decode_unknown_hello_extension_correctly].
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
decode_hello_handshake(_Config) ->
- HelloPacket = <<16#02, 16#00, 16#00,
- 16#44, 16#03, 16#03, 16#4e, 16#7f, 16#c1, 16#03, 16#35,
- 16#c2, 16#07, 16#b9, 16#4a, 16#58, 16#af, 16#34, 16#07,
- 16#a6, 16#7e, 16#ef, 16#52, 16#cb, 16#e0, 16#ea, 16#b7,
- 16#aa, 16#47, 16#c8, 16#c2, 16#2c, 16#66, 16#fa, 16#f8,
- 16#09, 16#42, 16#cf, 16#00, 16#c0, 16#30, 16#00, 16#00,
- 16#1c,
- 16#00, 16#0b, 16#00, 16#04, 16#03, 16#00, 16#01, 16#02, % ec_point_formats
- 16#ff, 16#01, 16#00, 16#01, 16#00, %% renegotiate
- 16#00, 16#23,
- 16#00, 16#00, 16#33, 16#74, 16#00, 16#07, 16#06, 16#73,
- 16#70, 16#64, 16#79, 16#2f, 16#32>>,
-
- Version = {3, 0},
- {Records, _Buffer} = tls_handshake:get_tls_handshake(Version, HelloPacket, <<>>),
-
- {Hello, _Data} = hd(Records),
- #renegotiation_info{renegotiated_connection = <<0>>} = Hello#server_hello.renegotiation_info.
+ HelloPacket = <<16#02, 16#00, 16#00,
+ 16#44, 16#03, 16#03, 16#4e, 16#7f, 16#c1, 16#03, 16#35,
+ 16#c2, 16#07, 16#b9, 16#4a, 16#58, 16#af, 16#34, 16#07,
+ 16#a6, 16#7e, 16#ef, 16#52, 16#cb, 16#e0, 16#ea, 16#b7,
+ 16#aa, 16#47, 16#c8, 16#c2, 16#2c, 16#66, 16#fa, 16#f8,
+ 16#09, 16#42, 16#cf, 16#00, 16#c0, 16#30, 16#00, 16#00,
+ 16#1c,
+ 16#00, 16#0b, 16#00, 16#04, 16#03, 16#00, 16#01, 16#02, % ec_point_formats
+ 16#ff, 16#01, 16#00, 16#01, 16#00, %% renegotiate
+ 16#00, 16#23,
+ 16#00, 16#00, 16#33, 16#74, 16#00, 16#07, 16#06, 16#73,
+ 16#70, 16#64, 16#79, 16#2f, 16#32>>,
+ Version = {3, 0},
+ {Records, _Buffer} = tls_handshake:get_tls_handshake(Version, HelloPacket, <<>>),
+
+ {Hello, _Data} = hd(Records),
+ #renegotiation_info{renegotiated_connection = <<0>>}
+ = (Hello#server_hello.extensions)#hello_extensions.renegotiation_info.
+
decode_single_hello_extension_correctly(_Config) ->
- Renegotiation = <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(1), 0>>,
- Extensions = tls_handshake:dec_hello_extensions(Renegotiation, []),
- [{renegotiation_info,#renegotiation_info{renegotiated_connection = <<0>>}}] = Extensions.
-
+ Renegotiation = <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(1), 0>>,
+ Extensions = ssl_handshake:decode_hello_extensions(Renegotiation),
+ #renegotiation_info{renegotiated_connection = <<0>>}
+ = Extensions#hello_extensions.renegotiation_info.
+
decode_unknown_hello_extension_correctly(_Config) ->
- FourByteUnknown = <<16#CA,16#FE, ?UINT16(4), 3, 0, 1, 2>>,
- Renegotiation = <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(1), 0>>,
- Extensions = tls_handshake:dec_hello_extensions(<<FourByteUnknown/binary, Renegotiation/binary>>, []),
- [{renegotiation_info,#renegotiation_info{renegotiated_connection = <<0>>}}] = Extensions.
-
+ FourByteUnknown = <<16#CA,16#FE, ?UINT16(4), 3, 0, 1, 2>>,
+ Renegotiation = <<?UINT16(?RENEGOTIATION_EXT), ?UINT16(1), 0>>,
+ Extensions = ssl_handshake:decode_hello_extensions(<<FourByteUnknown/binary, Renegotiation/binary>>),
+ #renegotiation_info{renegotiated_connection = <<0>>}
+ = Extensions#hello_extensions.renegotiation_info.
diff --git a/lib/ssl/test/ssl_npn_hello_SUITE.erl b/lib/ssl/test/ssl_npn_hello_SUITE.erl
index ef5a02abef..27e1090114 100644
--- a/lib/ssl/test/ssl_npn_hello_SUITE.erl
+++ b/lib/ssl/test/ssl_npn_hello_SUITE.erl
@@ -52,7 +52,7 @@ encode_and_decode_client_hello_test(_Config) ->
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
{[{DecodedHandshakeMessage, _Raw}], _} =
tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
- NextProtocolNegotiation = DecodedHandshakeMessage#client_hello.next_protocol_negotiation,
+ NextProtocolNegotiation = (DecodedHandshakeMessage#client_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = undefined.
%%--------------------------------------------------------------------
encode_and_decode_npn_client_hello_test(_Config) ->
@@ -60,7 +60,7 @@ encode_and_decode_npn_client_hello_test(_Config) ->
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
{[{DecodedHandshakeMessage, _Raw}], _} =
tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
- NextProtocolNegotiation = DecodedHandshakeMessage#client_hello.next_protocol_negotiation,
+ NextProtocolNegotiation = (DecodedHandshakeMessage#client_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = #next_protocol_negotiation{extension_data = <<>>}.
%%--------------------------------------------------------------------
encode_and_decode_server_hello_test(_Config) ->
@@ -68,7 +68,7 @@ encode_and_decode_server_hello_test(_Config) ->
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
{[{DecodedHandshakeMessage, _Raw}], _} =
tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
- NextProtocolNegotiation = DecodedHandshakeMessage#server_hello.next_protocol_negotiation,
+ NextProtocolNegotiation = (DecodedHandshakeMessage#server_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = undefined.
%%--------------------------------------------------------------------
encode_and_decode_npn_server_hello_test(_Config) ->
@@ -76,56 +76,59 @@ encode_and_decode_npn_server_hello_test(_Config) ->
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
{[{DecodedHandshakeMessage, _Raw}], _} =
tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
- NextProtocolNegotiation = DecodedHandshakeMessage#server_hello.next_protocol_negotiation,
+ NextProtocolNegotiation = (DecodedHandshakeMessage#server_hello.extensions)#hello_extensions.next_protocol_negotiation,
ct:log("~p ~n", [NextProtocolNegotiation]),
NextProtocolNegotiation = #next_protocol_negotiation{extension_data = <<6, "spdy/2">>}.
%%--------------------------------------------------------------------
create_server_hello_with_no_advertised_protocols_test(_Config) ->
- Hello = tls_handshake:server_hello(<<>>, {3, 0}, create_connection_states(), false, undefined, undefined, undefined),
- undefined = Hello#server_hello.next_protocol_negotiation.
+ Hello = tls_handshake:server_hello(<<>>, {3, 0}, create_connection_states(), #hello_extensions{}),
+ undefined = (Hello#server_hello.extensions)#hello_extensions.next_protocol_negotiation.
%%--------------------------------------------------------------------
create_server_hello_with_advertised_protocols_test(_Config) ->
Hello = tls_handshake:server_hello(<<>>, {3, 0}, create_connection_states(),
- false, [<<"spdy/1">>, <<"http/1.0">>, <<"http/1.1">>], undefined, undefined),
- #next_protocol_negotiation{extension_data = <<6, "spdy/1", 8, "http/1.0", 8, "http/1.1">>} =
- Hello#server_hello.next_protocol_negotiation.
+ #hello_extensions{next_protocol_negotiation = [<<"spdy/1">>, <<"http/1.0">>, <<"http/1.1">>]}),
+ [<<"spdy/1">>, <<"http/1.0">>, <<"http/1.1">>] =
+ (Hello#server_hello.extensions)#hello_extensions.next_protocol_negotiation.
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
create_client_handshake(Npn) ->
+ Vsn = {1, 2},
tls_handshake:encode_handshake(#client_hello{
- client_version = {1, 2},
- random = <<1:256>>,
- session_id = <<>>,
- cipher_suites = [?TLS_DHE_DSS_WITH_DES_CBC_SHA],
- compression_methods = "",
- next_protocol_negotiation = Npn,
- renegotiation_info = #renegotiation_info{}
- }, vsn).
+ client_version = Vsn,
+ random = <<1:256>>,
+ session_id = <<>>,
+ cipher_suites = [?TLS_DHE_DSS_WITH_DES_CBC_SHA],
+ compression_methods = "",
+ extensions = #hello_extensions{
+ next_protocol_negotiation = Npn,
+ renegotiation_info = #renegotiation_info{}}
+ }, Vsn).
create_server_handshake(Npn) ->
+ Vsn = {1, 2},
tls_handshake:encode_handshake(#server_hello{
- server_version = {1, 2},
- random = <<1:256>>,
- session_id = <<>>,
- cipher_suite = ?TLS_DHE_DSS_WITH_DES_CBC_SHA,
- compression_method = 1,
- next_protocol_negotiation = Npn,
- renegotiation_info = #renegotiation_info{}
- }, vsn).
+ server_version = Vsn,
+ random = <<1:256>>,
+ session_id = <<>>,
+ cipher_suite = ?TLS_DHE_DSS_WITH_DES_CBC_SHA,
+ compression_method = 1,
+ extensions = #hello_extensions{
+ next_protocol_negotiation = Npn,
+ renegotiation_info = #renegotiation_info{}}
+ }, Vsn).
create_connection_states() ->
#connection_states{
- pending_read = #connection_state{
- security_parameters = #security_parameters{
- server_random = <<1:256>>,
- compression_algorithm = 1,
- cipher_suite = ?TLS_DHE_DSS_WITH_DES_CBC_SHA
- }
- },
-
- current_read = #connection_state {
- secure_renegotiation = false
- }
- }.
+ pending_read = #connection_state{
+ security_parameters = #security_parameters{
+ server_random = <<1:256>>,
+ compression_algorithm = 1,
+ cipher_suite = ?TLS_DHE_DSS_WITH_DES_CBC_SHA
+ }
+ },
+ current_read = #connection_state {
+ secure_renegotiation = false
+ }
+ }.
diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl
index 36f7af784d..d50498f547 100644
--- a/lib/ssl/test/ssl_packet_SUITE.erl
+++ b/lib/ssl/test/ssl_packet_SUITE.erl
@@ -1631,8 +1631,8 @@ header_decode_one_byte_active(Config) when is_list(Config) ->
{from, self()},
{mfa, {?MODULE, client_header_decode_active,
[Data, [11 | <<"Hello world">> ]]}},
- {options, [{active, true}, {header, 1},
- binary | ClientOpts]}]),
+ {options, [{active, true}, binary, {header, 1}
+ | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -1688,7 +1688,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
{from, self()},
{mfa, {?MODULE, server_header_decode_active,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, true}, binary,
{header,2}|ServerOpts]}]),
@@ -1697,7 +1697,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {?MODULE, client_header_decode_active,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, true}, {header, 2},
binary | ClientOpts]}]),
@@ -1765,8 +1765,8 @@ header_decode_one_byte_passive(Config) when is_list(Config) ->
{from, self()},
{mfa, {?MODULE, client_header_decode_passive,
[Data, [11 | <<"Hello world">> ]]}},
- {options, [{active, false}, {header, 1},
- binary | ClientOpts]}]),
+ {options, [{active, false}, binary, {header, 1}
+ | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -1822,7 +1822,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
{from, self()},
{mfa, {?MODULE, server_header_decode_passive,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, false}, binary,
{header,2}|ServerOpts]}]),
@@ -1831,7 +1831,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {?MODULE, client_header_decode_passive,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, false}, {header, 2},
binary | ClientOpts]}]),
@@ -2124,10 +2124,14 @@ client_header_decode_passive(Socket, Packet, Result) ->
%% option and the bitsynax makes it obsolete!
check_header_result([Byte1 | _], [Byte1]) ->
ok;
+check_header_result([Byte1 | _], [Byte1| <<>>]) ->
+ ok;
check_header_result([Byte1, Byte2 | _], [Byte1, Byte2]) ->
ok;
-check_header_result(_,Got) ->
- exit({?LINE, Got}).
+check_header_result([Byte1, Byte2 | _], [Byte1, Byte2 | <<>>]) ->
+ ok;
+check_header_result(Expected,Got) ->
+ exit({?LINE, {Expected, Got}}).
server_line_packet_decode(Socket, Packet) when is_binary(Packet) ->
[L1, L2] = string:tokens(binary_to_list(Packet), "\n"),
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 34c52b10b3..74fadc0cc7 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -27,6 +27,7 @@
-compile(export_all).
-record(sslsocket, { fd = nil, pid = nil}).
+-define(SLEEP, 1000).
%% For now always run locally
run_where(_) ->
@@ -949,7 +950,10 @@ init_tls_version(Version) ->
sufficient_crypto_support('tlsv1.2') ->
CryptoSupport = crypto:supports(),
proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport));
-sufficient_crypto_support(ciphers_ec) ->
+sufficient_crypto_support(Group) when Group == ciphers_ec; %% From ssl_basic_SUITE
+ Group == erlang_server; %% From ssl_ECC_SUITE
+ Group == erlang_client; %% From ssl_ECC_SUITE
+ Group == erlang -> %% From ssl_ECC_SUITE
CryptoSupport = crypto:supports(),
proplists:get_bool(ecdh, proplists:get_value(public_keys, CryptoSupport));
sufficient_crypto_support(_) ->
@@ -1026,3 +1030,39 @@ cipher_restriction(Config0) ->
true ->
Config0
end.
+
+check_sane_openssl_version(Version) ->
+ case {Version, os:cmd("openssl version")} of
+ {_, "OpenSSL 1.0.1" ++ _} ->
+ true;
+ {'tlsv1.2', "OpenSSL 1.0" ++ _} ->
+ false;
+ {'tlsv1.1', "OpenSSL 1.0" ++ _} ->
+ false;
+ {'tlsv1.2', "OpenSSL 0" ++ _} ->
+ false;
+ {'tlsv1.1', "OpenSSL 0" ++ _} ->
+ false;
+ {_, _} ->
+ true
+ end.
+
+wait_for_openssl_server() ->
+ receive
+ {Port, {data, Debug}} when is_port(Port) ->
+ ct:log("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!)
+ ct:sleep(?SLEEP)
+ end.
+
+version_flag(tlsv1) ->
+ " -tls1 ";
+version_flag('tlsv1.1') ->
+ " -tls1_1 ";
+version_flag('tlsv1.2') ->
+ " -tls1_2 ";
+version_flag(sslv3) ->
+ " -ssl3 ".
diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl
index 019ed58b1b..b576b8f70d 100644
--- a/lib/ssl/test/ssl_to_openssl_SUITE.erl
+++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl
@@ -120,7 +120,7 @@ end_per_suite(_Config) ->
init_per_group(GroupName, Config) ->
case ssl_test_lib:is_tls_version(GroupName) of
true ->
- case check_sane_openssl_version(GroupName) of
+ case ssl_test_lib:check_sane_openssl_version(GroupName) of
true ->
ssl_test_lib:init_tls_version(GroupName),
Config;
@@ -204,7 +204,7 @@ basic_erlang_client_openssl_server(Config) when is_list(Config) ->
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -269,14 +269,14 @@ erlang_client_openssl_server(Config) when is_list(Config) ->
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile,
ct:log("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -311,7 +311,7 @@ erlang_server_openssl_client(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(Server),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -host localhost",
ct:log("openssl cmd: ~p~n", [Cmd]),
@@ -345,7 +345,7 @@ erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) ->
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile
++ " -key " ++ KeyFile ++ " -Verify 2 -msg",
@@ -353,7 +353,7 @@ erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) ->
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -392,7 +392,7 @@ erlang_server_openssl_client_dsa_cert(Config) when is_list(Config) ->
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -host localhost " ++ " -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile
++ " -key " ++ KeyFile ++ " -msg",
@@ -428,7 +428,7 @@ erlang_server_openssl_client_reuse_session(Config) when is_list(Config) ->
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -host localhost -reconnect",
ct:log("openssl cmd: ~p~n", [Cmd]),
@@ -464,14 +464,14 @@ erlang_client_openssl_server_renegotiate(Config) when is_list(Config) ->
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg",
ct:log("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -513,14 +513,14 @@ erlang_client_openssl_server_nowrap_seqnum(Config) when is_list(Config) ->
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg",
ct:log("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -559,7 +559,7 @@ erlang_server_openssl_client_nowrap_seqnum(Config) when is_list(Config) ->
{options, [{renegotiate_at, N}, {reuse_sessions, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -host localhost -msg",
ct:log("openssl cmd: ~p~n", [Cmd]),
@@ -594,14 +594,14 @@ erlang_client_openssl_server_no_server_ca_cert(Config) when is_list(Config) ->
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg",
ct:log("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -636,7 +636,7 @@ erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
CaCertFile = proplists:get_value(cacertfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile
++ " -key " ++ KeyFile ++ " -Verify 2",
@@ -644,7 +644,7 @@ erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -688,7 +688,7 @@ erlang_server_openssl_client_client_cert(Config) when is_list(Config) ->
KeyFile = proplists:get_value(keyfile, ClientOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
Cmd = "openssl s_client -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile
- ++ " -key " ++ KeyFile ++ " -port " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ ++ " -key " ++ KeyFile ++ " -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -host localhost",
ct:log("openssl cmd: ~p~n", [Cmd]),
@@ -776,14 +776,14 @@ erlang_client_bad_openssl_server(Config) when is_list(Config) ->
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "",
ct:log("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client0 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -839,7 +839,7 @@ expired_session(Config) when is_list(Config) ->
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client0 =
ssl_test_lib:start_client([{node, ClientNode},
@@ -1033,14 +1033,14 @@ cipher(CipherSuite, Version, Config, ClientOpts, ServerOpts) ->
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "",
ct:log("openssl cmd: ~p~n", [Cmd]),
OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
ConnectionInfo = {ok, {Version, CipherSuite}},
@@ -1097,14 +1097,14 @@ start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, Opens
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
Cmd = "openssl s_server " ++ OpensslServerOpts ++ " -accept " ++
- integer_to_list(Port) ++ version_flag(Version) ++
+ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile,
ct:log("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -1136,14 +1136,14 @@ start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callbac
KeyFile = proplists:get_value(keyfile, ServerOpts),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_server -msg -nextprotoneg http/1.1,spdy/2 -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_server -msg -nextprotoneg http/1.1,spdy/2 -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -cert " ++ CertFile ++ " -key " ++ KeyFile,
ct:log("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- wait_for_openssl_server(),
+ ssl_test_lib:wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -1174,7 +1174,7 @@ start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callbac
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_client -nextprotoneg http/1.0,spdy/2 -msg -port " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_client -nextprotoneg http/1.0,spdy/2 -msg -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -host localhost",
ct:log("openssl cmd: ~p~n", [Cmd]),
@@ -1203,7 +1203,7 @@ start_erlang_server_and_openssl_client_with_opts(Config, ErlangServerOpts, OpenS
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
- Cmd = "openssl s_client " ++ OpenSSLClientOpts ++ " -msg -port " ++ integer_to_list(Port) ++ version_flag(Version) ++
+ Cmd = "openssl s_client " ++ OpenSSLClientOpts ++ " -msg -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++
" -host localhost",
ct:log("openssl cmd: ~p~n", [Cmd]),
@@ -1302,25 +1302,6 @@ server_sent_garbage(Socket) ->
end.
-wait_for_openssl_server() ->
- receive
- {Port, {data, Debug}} when is_port(Port) ->
- ct:log("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!)
- ct:sleep(?SLEEP)
- end.
-
-version_flag(tlsv1) ->
- " -tls1 ";
-version_flag('tlsv1.1') ->
- " -tls1_1 ";
-version_flag('tlsv1.2') ->
- " -tls1_2 ";
-version_flag(sslv3) ->
- " -ssl3 ".
check_openssl_npn_support(Config) ->
HelpText = os:cmd("openssl s_client --help"),
@@ -1365,18 +1346,3 @@ supports_sslv2(Port) ->
true
end.
-check_sane_openssl_version(Version) ->
- case {Version, os:cmd("openssl version")} of
- {_, "OpenSSL 1.0.1" ++ _} ->
- true;
- {'tlsv1.2', "OpenSSL 1.0" ++ _} ->
- false;
- {'tlsv1.1', "OpenSSL 1.0" ++ _} ->
- false;
- {'tlsv1.2', "OpenSSL 0" ++ _} ->
- false;
- {'tlsv1.1', "OpenSSL 0" ++ _} ->
- false;
- {_, _} ->
- true
- end.
diff --git a/lib/ssl/vsn.mk b/lib/ssl/vsn.mk
index 9dd151553c..78424ee578 100644
--- a/lib/ssl/vsn.mk
+++ b/lib/ssl/vsn.mk
@@ -1 +1 @@
-SSL_VSN = 5.3
+SSL_VSN = 5.3.1
diff --git a/lib/stdlib/doc/src/filelib.xml b/lib/stdlib/doc/src/filelib.xml
index 3a97f38ec2..6fa39f97f6 100644
--- a/lib/stdlib/doc/src/filelib.xml
+++ b/lib/stdlib/doc/src/filelib.xml
@@ -49,6 +49,12 @@
<datatype>
<name name="dirname"/>
</datatype>
+ <datatype>
+ <name name="dirname_all"/>
+ </datatype>
+ <datatype>
+ <name name="filename_all"/>
+ </datatype>
</datatypes>
<funcs>
diff --git a/lib/stdlib/doc/src/io_lib.xml b/lib/stdlib/doc/src/io_lib.xml
index 9cbc54d8bd..3312b08064 100644
--- a/lib/stdlib/doc/src/io_lib.xml
+++ b/lib/stdlib/doc/src/io_lib.xml
@@ -54,6 +54,9 @@
<name name="fread_error"/>
</datatype>
<datatype>
+ <name name="fread_item"/>
+ </datatype>
+ <datatype>
<name name="latin1_string"/>
</datatype>
</datatypes>
diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml
index c0f236cd71..2f404523dd 100644
--- a/lib/stdlib/doc/src/notes.xml
+++ b/lib/stdlib/doc/src/notes.xml
@@ -30,6 +30,86 @@
</header>
<p>This document describes the changes made to the STDLIB application.</p>
+<section><title>STDLIB 1.19.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> The functions <c>dets:foldl/3</c>,
+ <c>dets:foldr/3</c>, and <c>dets:traverse/2</c> did not
+ release the table after having traversed the table to the
+ end. The bug was introduced in R16B. (Thanks to Manuel
+ Duran Aguete.) </p>
+ <p>
+ Own Id: OTP-11245</p>
+ </item>
+ <item>
+ <p> If the <c>fun M:F/A</c> construct was used
+ erroneously the linter could crash. (Thanks to Mikhail
+ Sobolev.) </p>
+ <p>
+ Own Id: OTP-11254</p>
+ </item>
+ <item>
+ <p> The specifications of <c>io_lib:fread/2,3</c> have
+ been corrected. (Thanks to Chris King and Kostis Sagonas
+ for pinpointing the bug.) </p>
+ <p>
+ Own Id: OTP-11261</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fixed type typo in gen_server.</p>
+ <p>
+ Own Id: OTP-11200</p>
+ </item>
+ <item>
+ <p>
+ Update type specs in filelib and io_prompt. Thanks to
+ Jose Valim.</p>
+ <p>
+ Own Id: OTP-11208</p>
+ </item>
+ <item>
+ <p>
+ Fix typo in abcast() function comment. Thanks to Johannes
+ Weissl.</p>
+ <p>
+ Own Id: OTP-11219</p>
+ </item>
+ <item>
+ <p>
+ Make edlin understand a few important control keys.
+ Thanks to Stefan Zegenhagen.</p>
+ <p>
+ Own Id: OTP-11251</p>
+ </item>
+ <item>
+ <p>
+ Export the edge/0 type from the digraph module. Thanks to
+ Alex Ronne Petersen.</p>
+ <p>
+ Own Id: OTP-11266</p>
+ </item>
+ <item>
+ <p>
+ Fix variable usage tracking in erl_lint and fixed unsafe
+ variable tracking in try expressions. Thanks to Anthony
+ Ramine.</p>
+ <p>
+ Own Id: OTP-11268</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>STDLIB 1.19.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -126,20 +206,20 @@
</item>
<item>
<p>
- Optimizations to gen mechanism. Thanks to Lo�c Hoguin.</p>
+ Optimizations to gen mechanism. Thanks to Loïc Hoguin.</p>
<p>
Own Id: OTP-11025</p>
</item>
<item>
<p>
- Optimizations to gen.erl. Thanks to Lo�c Hoguin.</p>
+ Optimizations to gen.erl. Thanks to Loïc Hoguin.</p>
<p>
Own Id: OTP-11035</p>
</item>
<item>
<p>
Use erlang:demonitor(Ref, [flush]) where applicable.
- Thanks to Lo�c Hoguin.</p>
+ Thanks to Loïc Hoguin.</p>
<p>
Own Id: OTP-11039</p>
</item>
@@ -194,7 +274,7 @@
</item>
<item>
<p>
- Improve erl_lint performance. Thanks to Jos� Valim.</p>
+ Improve erl_lint performance. Thanks to José Valim.</p>
<p>
Own Id: OTP-11143</p>
</item>
diff --git a/lib/stdlib/doc/src/re.xml b/lib/stdlib/doc/src/re.xml
index 1f8115ddc2..b2cde3f72d 100644
--- a/lib/stdlib/doc/src/re.xml
+++ b/lib/stdlib/doc/src/re.xml
@@ -101,7 +101,7 @@
<p><marker id="compile_options"/>The options have the following meanings:</p>
<taglist>
<tag><c>unicode</c></tag>
- <item>The regular expression is given as a Unicode <c>charlist()</c> and the resulting regular expression code is to be run against a valid Unicode <c>charlist()</c> subject.</item>
+ <item>The regular expression is given as a Unicode <c>charlist()</c> and the resulting regular expression code is to be run against a valid Unicode <c>charlist()</c> subject. Also consider the <c>ucp</c> option when using Unicode characters.</item>
<tag><c>anchored</c></tag>
<item>The pattern is forced to be "anchored", that is, it is constrained to match only at the first matching point in the string that is being searched (the "subject string"). This effect can also be achieved by appropriate constructs in the pattern itself.</item>
<tag><c>caseless</c></tag>
@@ -147,11 +147,51 @@ This option makes it possible to include comments inside complicated patterns. N
<item>Specifies specifically that \R is to match only the cr, lf or crlf sequences, not the Unicode specific newline characters.</item>
<tag><c>bsr_unicode</c></tag>
<item>Specifies specifically that \R is to match all the Unicode newline characters (including crlf etc, the default).</item>
+ <tag><c>no_start_optimize</c></tag>
+ <item>This option disables optimization that may malfunction if "Special start-of-pattern items" are present in the regular expression. A typical example would be when matching "DEFABC" against "(*COMMIT)ABC", where the start optimization of PCRE would skip the subject up to the "A" and would never realize that the (*COMMIT) instruction should have made the matching fail. This option is only relevant if you use "start-of-pattern items", as discussed in the section "PCRE regular expression details" below.</item>
+ <tag><c>ucp</c></tag>
+ <item>Specifies that Unicode Character Properties should be used when resolving \B, \b, \D, \d, \S, \s, \Wand \w. Without this flag, only ISO-Latin-1 properties are used. Using Unicode properties hurts performance, but is semantically correct when working with Unicode characters beyond the ISO-Latin-1 range.</item>
+ <tag><c>never_utf</c></tag>
+ <item>Specifies that the (*UTF) and/or (*UTF8) "start-of-pattern items" are forbidden. This flag can not be combined with <c>unicode</c>. Useful if ISO-Latin-1 patterns from an external source are to be compiled.</item>
</taglist>
</desc>
</func>
<func>
+ <name name="inspect" arity="2"/>
+ <fsummary>Inspects a compiled regular expression</fsummary>
+ <desc>
+ <p>This function takes a compiled regular expression and an item, returning the relevant data from the regular expression. Currently the only supported item is <c>namelist</c>, which returns the tuple <c>{namelist, [ binary()]}</c>, containing the names of all (unique) named subpatterns in the regular expression.</p>
+ <p>Example:</p>
+ <code type="none">
+1&gt; {ok,MP} = re:compile("(?&lt;A&gt;A)|(?&lt;B&gt;B)|(?&lt;C&gt;C)").
+{ok,{re_pattern,3,0,0,
+ &lt;&lt;69,82,67,80,119,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,
+ 255,255,...&gt;&gt;}}
+2&gt; re:inspect(MP,namelist).
+{namelist,[&lt;&lt;"A"&gt;&gt;,&lt;&lt;"B"&gt;&gt;,&lt;&lt;"C"&gt;&gt;]}
+3&gt; {ok,MPD} = re:compile("(?&lt;C&gt;A)|(?&lt;B&gt;B)|(?&lt;C&gt;C)",[dupnames]).
+{ok,{re_pattern,3,0,0,
+ &lt;&lt;69,82,67,80,119,0,0,0,0,0,8,0,1,0,0,0,255,255,255,255,
+ 255,255,...&gt;&gt;}}
+4&gt; re:inspect(MPD,namelist).
+{namelist,[&lt;&lt;"B"&gt;&gt;,&lt;&lt;"C"&gt;&gt;]}</code>
+ <p>Note specifically in the second example that the duplicate name only occurs once in the returned list, and that the list is in alphabetical order regardless of where the names are positioned in the regular expression. The order of the names is the same as the order of captured subexpressions if <c>{capture, all_names}</c> is given as an option to <c>re:run/3</c>. You can therefore create a name-to-value mapping from the result of <c>re:run/3</c> like this:</p>
+<code>
+1&gt; {ok,MP} = re:compile("(?&lt;A&gt;A)|(?&lt;B&gt;B)|(?&lt;C&gt;C)").
+{ok,{re_pattern,3,0,0,
+ &lt;&lt;69,82,67,80,119,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,
+ 255,255,...&gt;&gt;}}
+2&gt; {namelist, N} = re:inspect(MP,namelist).
+{namelist,[&lt;&lt;"A"&gt;&gt;,&lt;&lt;"B"&gt;&gt;,&lt;&lt;"C"&gt;&gt;]}
+3&gt; {match,L} = re:run("AA",MP,[{capture,all_names,binary}]).
+{match,[&lt;&lt;"A"&gt;&gt;,&lt;&lt;&gt;&gt;,&lt;&lt;&gt;&gt;]}
+4&gt; NameMap = lists:zip(N,L).
+[{&lt;&lt;"A"&gt;&gt;,&lt;&lt;"A"&gt;&gt;},{&lt;&lt;"B"&gt;&gt;,&lt;&lt;&gt;&gt;},{&lt;&lt;"C"&gt;&gt;,&lt;&lt;&gt;&gt;}]</code>
+ <p>More items are expected to be added in the future.</p>
+ </desc>
+ </func>
+ <func>
<name name="run" arity="2"/>
<fsummary>Match a subject against regular expression and capture subpatterns</fsummary>
<desc>
@@ -178,13 +218,18 @@ This option makes it possible to include comments inside complicated patterns. N
<p>If the regular expression is previously compiled, the option
list can only contain the options <c>anchored</c>,
- <c>global</c>, <c>notbol</c>, <c>noteol</c>,
- <c>notempty</c>, <c>{offset, integer() >= 0}</c>, <c>{newline,
- <anno>NLSpec</anno>}</c> and <c>{capture, <anno>ValueSpec</anno>}/{capture, <anno>ValueSpec</anno>,
+ <c>global</c>, <c>notbol</c>, <c>noteol</c>, <c>report_errors</c>,
+ <c>notempty</c>, <c>notempty_atstart</c>, <c>{offset, integer() >= 0}</c>,
+ <c>{match_limit, integer() >= 0}</c>,
+ <c>{match_limit_recursion, integer() >= 0}</c>,
+ <c>{newline,
+ <anno>NLSpec</anno>}</c> and
+ <c>{capture, <anno>ValueSpec</anno>}/{capture, <anno>ValueSpec</anno>,
<anno>Type</anno>}</c>. Otherwise all options valid for the
<c>re:compile/2</c> function are allowed as well. Options
allowed both for compilation and execution of a match, namely
- <c>anchored</c> and <c>{newline, <anno>NLSpec</anno>}</c>, will affect both
+ <c>anchored</c> and <c>{newline, <anno>NLSpec</anno>}</c>,
+ will affect both
the compilation and execution if present together with a non
pre-compiled regular expression.</p>
@@ -214,6 +259,17 @@ This option makes it possible to include comments inside complicated patterns. N
be done either by specifying <c>none</c> or an empty list as
<c><anno>ValueSpec</anno></c>.</p>
+ <p>The <c>report_errors</c> option adds the possibility that an
+ error tuple is returned. The tuple will either indicate a
+ matching error (<c>match_limit</c> or
+ <c>match_limit_recursion</c>) or a compilation error, where the
+ error tuple has the format <c>{error, {compile,
+ <anno>CompileErr</anno>}}</c>. Note that if the option
+ <c>report_errors</c> is not given, the function never returns
+ error tuples, but will report compilation errors as a badarg
+ exception and failed matches due to exceeded match limits simply
+ as <c>nomatch</c>.</p>
+
<p>The options relevant for execution are:</p>
<taglist>
@@ -241,7 +297,7 @@ This option makes it possible to include comments inside complicated patterns. N
When the global option is given, <c>re:run/3</c> handles empty
matches in the same way as Perl: a zero-length match at any
point will be retried with the options <c>[anchored,
- notempty]</c> as well. If that search gives a result of length
+ notempty_atstart]</c> as well. If that search gives a result of length
&gt; 0, the result is included. For example:</p>
<code> re:run("cat","(|at)",[global]).</code>
@@ -254,9 +310,9 @@ This option makes it possible to include comments inside complicated patterns. N
<c>[{0,0},{0,0}]</c> (the second <c>{0,0}</c> is due to the
subexpression marked by the parentheses). As the length of the
match is 0, we don't advance to the next position yet.</item>
- <tag>At offset <c>0</c> with <c>[anchored, notempty]</c></tag>
+ <tag>At offset <c>0</c> with <c>[anchored, notempty_atstart]</c></tag>
<item> The search is retried
- with the options <c>[anchored, notempty]</c> at the same
+ with the options <c>[anchored, notempty_atstart]</c> at the same
position, which does not give any interesting result of longer
length, so the search position is now advanced to the next
character (<c>a</c>).</item>
@@ -264,7 +320,7 @@ This option makes it possible to include comments inside complicated patterns. N
<item>This time, the search results in
<c>[{1,0},{1,0}]</c>, so this search will also be repeated
with the extra options.</item>
- <tag>At offset <c>1</c> with <c>[anchored, notempty]</c></tag>
+ <tag>At offset <c>1</c> with <c>[anchored, notempty_atstart]</c></tag>
<item>Now the <c>ab</c> alternative
is found and the result will be [{1,2},{1,2}]. The result is
added to the list of results and the position in the
@@ -272,7 +328,7 @@ This option makes it possible to include comments inside complicated patterns. N
<tag>At offset <c>3</c></tag>
<item>The search now once again
matches the empty string, giving <c>[{3,0},{3,0}]</c>.</item>
- <tag>At offset <c>1</c> with <c>[anchored, notempty]</c></tag>
+ <tag>At offset <c>1</c> with <c>[anchored, notempty_atstart]</c></tag>
<item>This will give no result of length &gt; 0 and we are at
the last position, so the global search is complete.</item>
</taglist>
@@ -293,15 +349,21 @@ This option makes it possible to include comments inside complicated patterns. N
subject. With the <c>notempty</c> option, this match is not
valid, so re:run/3 searches further into the string for
occurrences of "a" or "b".</p>
-
- <p>Perl has no direct equivalent of <c>notempty</c>, but it does
- make a special case of a pattern match of the empty string
- within its split() function, and when using the /g modifier. It
- is possible to emulate Perl's behavior after matching a null
- string by first trying the match again at the same offset with
- <c>notempty</c> and <c>anchored</c>, and then, if that fails, by
- advancing the starting offset (see below) and trying an ordinary
- match again.</p>
+ </item>
+ <tag><c>notempty_atstart</c></tag>
+ <item>
+ <p>This is like <c>notempty</c>, except that an empty string
+ match that is not at the start of the subject is permitted. If
+ the pattern is anchored, such a match can occur only if the
+ pattern contains \K.</p>
+ <p>Perl has no direct equivalent of <c>notempty</c> or <c>notempty_atstart</c>, but it does
+ make a special case of a pattern match of the empty string
+ within its split() function, and when using the /g modifier. It
+ is possible to emulate Perl's behavior after matching a null
+ string by first trying the match again at the same offset with
+ <c>notempty_atstart</c> and <c>anchored</c>, and then, if that fails, by
+ advancing the starting offset (see below) and trying an ordinary
+ match again.</p>
</item>
<tag><c>notbol</c></tag>
@@ -322,6 +384,116 @@ This option makes it possible to include comments inside complicated patterns. N
behavior of the dollar metacharacter. It does not affect \Z or
\z.</item>
+ <tag><c>report_errors</c></tag>
+
+ <item><p>This option gives better control of the error handling in <c>re:run/3</c>. When it is given, compilation errors (if the regular expression isn't already compiled) as well as run-time errors are explicitly returned as an error tuple.</p>
+ <p>The possible run-time errors are:</p>
+ <taglist>
+ <tag><c>match_limit</c></tag>
+
+ <item>The PCRE library sets a limit on how many times the
+ internal match function can be called. The default value for
+ this is 10000000 in the library compiled for Erlang. If
+ <c>{error, match_limit}</c> is returned, it means that the
+ execution of the regular expression has reached this
+ limit. Normally this is to be regarded as a <c>nomatch</c>,
+ which is the default return value when this happens, but by
+ specifying <c>report_errors</c>, you will get informed when
+ the match fails due to to many internal calls.</item>
+
+ <tag><c>match_limit_recursion</c></tag>
+
+ <item>This error is very similar to <c>match_limit</c>, but
+ occurs when the internal match function of PCRE is
+ "recursively" called more times than the
+ "match_limit_recursion" limit, which is by default 10000000 as
+ well. Note that as long as the <c>match_limit</c> and
+ <c>match_limit_default</c> values are kept at the default
+ values, the <c>match_limit_recursion</c> error can not occur,
+ as the <c>match_limit</c> error will occur before that (each
+ recursive call is also a call, but not vice versa). Both
+ limits can however be changed, either by setting limits
+ directly in the regular expression string (see reference
+ section below) or by giving options to <c>re:run/3</c></item>
+
+ </taglist>
+ <p>It is important to understand that what is referred to as
+ "recursion" when limiting matches is not actually recursion on
+ the C stack of the Erlang machine, neither is it recursion on
+ the Erlang process stack. The version of PCRE compiled into the
+ Erlang VM uses machine "heap" memory to store values that needs to be
+ kept over recursion in regular expression matches.</p>
+ </item>
+ <tag><c>{match_limit, integer() >= 0}</c></tag>
+
+ <item><p>This option limits the execution time of a match in an
+ implementation-specific way. It is described in the following
+ way by the PCRE documentation:</p>
+
+ <code>
+The match_limit field provides a means of preventing PCRE from using
+up a vast amount of resources when running patterns that are not going
+to match, but which have a very large number of possibilities in their
+search trees. The classic example is a pattern that uses nested
+unlimited repeats.
+
+Internally, pcre_exec() uses a function called match(), which it calls
+repeatedly (sometimes recursively). The limit set by match_limit is
+imposed on the number of times this function is called during a match,
+which has the effect of limiting the amount of backtracking that can
+take place. For patterns that are not anchored, the count restarts
+from zero for each position in the subject string.</code>
+
+ <p>This means that runaway regular expression matches can fail
+ faster if the limit is lowered using this option. The default
+ value compiled into the Erlang virtual machine is 10000000</p>
+
+ <note><p>This option does in no way affect the execution of the
+ Erlang virtual machine in terms of "long running
+ BIF's". <c>re:run</c> always give control back to the scheduler
+ of Erlang processes at intervals that ensures the real time
+ properties of the Erlang system.</p></note>
+ </item>
+
+ <tag><c>{match_limit_recursion, integer() >= 0}</c></tag>
+
+ <item><p>This option limits the execution time and memory
+ consumption of a match in an implementation-specific way, very
+ similar to <c>match_limit</c>. It is described in the following
+ way by the PCRE documentation:</p>
+
+ <code>
+The match_limit_recursion field is similar to match_limit, but instead
+of limiting the total number of times that match() is called, it
+limits the depth of recursion. The recursion depth is a smaller number
+than the total number of calls, because not all calls to match() are
+recursive. This limit is of use only if it is set smaller than
+match_limit.
+
+Limiting the recursion depth limits the amount of machine stack that
+can be used, or, when PCRE has been compiled to use memory on the heap
+instead of the stack, the amount of heap memory that can be
+used.</code>
+
+ <p>The Erlang virtual machine uses a PCRE library where heap
+ memory is used when regular expression match recursion happens,
+ why this limits the usage of machine heap, not C stack.</p>
+
+ <p>Specifying a lower value may result in matches with deep recursion failing, when they should actually have matched:</p>
+ <code type="none">
+1&gt; re:run("aaaaaaaaaaaaaz","(a+)*z").
+{match,[{0,14},{0,13}]}
+2&gt; re:run("aaaaaaaaaaaaaz","(a+)*z",[{match_limit_recursion,5}]).
+nomatch
+3&gt; re:run("aaaaaaaaaaaaaz","(a+)*z",[{match_limit_recursion,5},report_errors]).
+{error,match_limit_recursion}</code>
+
+ <p>This option, as well as the <c>match_limit</c> option should
+ only be used in very rare cases. Understanding of the PCRE
+ library internals is recommended before tampering with these
+ limits.</p>
+ </item>
+
<tag><c>{offset, integer() >= 0}</c></tag>
<item>Start matching at the offset (position) given in the
@@ -394,6 +566,9 @@ This option makes it possible to include comments inside complicated patterns. N
<taglist>
<tag><c>all</c></tag>
<item>All captured subpatterns including the complete matching string. This is the default.</item>
+ <tag><c>all_names</c></tag>
+ <item>All <em>named</em> subpatterns in the regular expression, as if a <c>list()</c>
+ of all the names <em>in alphabetical order</em> was given. The list of all names can also be retrieved with the <seealso marker="#inspect/2">inspect/2</seealso> function.</item>
<tag><c>first</c></tag>
<item>Only the first captured subpattern, which is always the complete matching part of the subject. All explicitly captured subpatterns are discarded.</item>
<tag><c>all_but_first</c></tag>
@@ -721,12 +896,12 @@ published by O'Reilly, covers regular expressions in great detail. This
description of PCRE's regular expressions is intended as reference material.</p>
<p>The reference material is divided into the following sections:</p>
<list>
-<item><seealso marker="#sect1">Newline conventions</seealso></item>
+<item><seealso marker="#sect1">Special start-of-pattern items</seealso></item>
<item><seealso marker="#sect2">Characters and metacharacters</seealso></item>
<item><seealso marker="#sect3">Backslash</seealso></item>
<item><seealso marker="#sect4">Circumflex and dollar</seealso></item>
-<item><seealso marker="#sect5">Full stop (period, dot)</seealso></item>
-<item><seealso marker="#sect6">Matching a single byte</seealso></item>
+<item><seealso marker="#sect5">Full stop (period, dot) and \N</seealso></item>
+<item><seealso marker="#sect6">Matching a single data unit</seealso></item>
<item><seealso marker="#sect7">Square brackets and character classes</seealso></item>
<item><seealso marker="#sect8">POSIX character classes</seealso></item>
<item><seealso marker="#sect9">Vertical bar</seealso></item>
@@ -742,6 +917,7 @@ description of PCRE's regular expressions is intended as reference material.</p>
<item><seealso marker="#sect19">Comments</seealso></item>
<item><seealso marker="#sect20">Recursive patterns</seealso></item>
<item><seealso marker="#sect21">Subpatterns as subroutines</seealso></item>
+<item><seealso marker="#sect22">Oniguruma subroutine syntax</seealso></item>
<!-- XXX C Interface
<item><seealso marker="#sect22">Callouts</seealso></item>
-->
@@ -751,7 +927,55 @@ description of PCRE's regular expressions is intended as reference material.</p>
</section>
-<section><marker id="sect1"></marker><title>Newline conventions</title>
+<section><marker id="sect1"></marker><title>Special start-of-pattern items</title>
+
+<p>A number of options that can be passed to <c>re:compile/2</c> can also be set
+by special items at the start of a pattern. These are not Perl-compatible, but
+are provided to make these options accessible to pattern writers who are not
+able to change the program that processes the pattern. Any number of these
+items may appear, but they must all be together right at the start of the
+pattern string, and the letters must be in upper case.</p>
+
+<p><em>UTF support</em></p>
+<p>
+Unicode support is basically UTF-8 based. To use Unicode characters, you either
+call <c>re:compile/2</c>/<c>re:run/3</c> with the <c>unicode</c> option, or the
+ pattern must start with one of these special sequences:</p>
+<quote>
+<p> (*UTF8)</p>
+<p> (*UTF)</p>
+</quote>
+
+<p>Both options give the same effect, the input string is interpreted
+as UTF-8. Note that with these instructions, the automatic conversion
+of lists to UTF-8 is not performed by the <c>re</c> functions, why
+using these options is not recommended. Add the <c>unicode</c> option
+when running <c>re:compile/2</c> instead.</p>
+
+<p>
+Some applications that allow their users to supply patterns may wish to
+restrict them to non-UTF data for security reasons. If the <c>never_utf</c>
+option is set at compile time, (*UTF) etc. are not allowed, and their
+appearance causes an error.
+</p>
+
+<p><em>Unicode property support</em></p>
+<p>Another special sequence that may appear at the start of a pattern is</p>
+<quote>
+<p> (*UCP)</p>
+</quote>
+<p>This has the same effect as setting the <c>ucp</c> option: it causes sequences
+such as \d and \w to use Unicode properties to determine character types,
+instead of recognizing only characters with codes less than 128 via a lookup
+table.
+</p>
+
+<p><em>Disabling start-up optimizations</em></p>
+<p>
+If a pattern starts with (*NO_START_OPT), it has the same effect as setting the
+<c>no_Start_optimize</c> option at compile time.</p>
+
+<p><em>Newline conventions</em></p>
<p>PCRE supports
five
@@ -780,23 +1004,37 @@ example, the pattern:</p>
</quote>
<p>changes the convention to CR. That pattern matches "a\nb" because LF is no
-longer a newline. Note that these special settings, which are not
-Perl-compatible, are recognized only at the very start of a pattern, and that
-they must be in upper case. If more than one of them is present, the last one
+longer a newline. If more than one of them is present, the last one
is used.</p>
-<p>The newline convention does not affect what the \R escape sequence matches. By
-default, this is any Unicode newline sequence, for Perl compatibility. However,
-this can be changed; see the description of \R in the section entitled
+<p>The newline convention affects where the circumflex and dollar assertions are
+true. It also affects the interpretation of the dot metacharacter when
+<c>dotall</c> is not set, and the behaviour of \N. However, it does not affect
+what the \R escape sequence matches. By default, this is any Unicode newline
+sequence, for Perl compatibility. However, this can be changed; see the
+description of \R in the section entitled
-"Newline sequences"
+<em>"Newline sequences"</em>
below. A change of \R setting can be combined with a change of newline
convention.</p>
+<p><em>Setting match and recursion limits</em></p>
+
+<p>The caller of <c>re:run/3</c> can set a limit on the number of times the internal match() function is called and on the maximum depth of recursive calls. These facilities are provided to catch runaway matches that are provoked by patterns with huge matching trees (a typical example is a pattern with nested unlimited repeats) and to avoid running out of system stack by too much recursion. When one of these limits is reached, pcre_exec() gives an error return. The limits can also be set by items at the start of the pattern of the form</p>
+<quote>
+<p> (*LIMIT_MATCH=d)</p>
+<p> (*LIMIT_RECURSION=d)</p>
+</quote>
+<p>where d is any number of decimal digits. However, the value of the setting must be less than the value set by the caller of <c>re:run/3</c> for it to have any effect. In other words, the pattern writer can lower the limit set by the programmer, but not raise it. If there is more than one setting of one of these limits, the lower value is used.</p>
+
+<p>The current default value for both the limits are 10000000 in the Erlang
+VM. Note that the recursion limit does not actually affect the stack
+depth of the VM, as PCRE for Erlang is compiled in such a way that the
+match function never does recursion on the "C-stack".</p>
+
</section>
-
<section><marker id="sect2"></marker><title>Characters and metacharacters</title>
<!-- .rs -->
@@ -862,7 +1100,7 @@ a character class the only metacharacters are:</p>
<p>The backslash character has several uses. Firstly, if it is followed by a
-non-alphanumeric character, it takes away any special meaning that character
+character that is not a number or a letter, it takes away any special meaning that character
may have. This use of backslash as an escape character applies both inside and
outside character classes.</p>
@@ -872,10 +1110,14 @@ otherwise be interpreted as a metacharacter, so it is always safe to precede a
non-alphanumeric with backslash to specify that it stands for itself. In
particular, if you want to match a backslash, you write \\.</p>
-<p>If a pattern is compiled with the <c>extended</c> option, whitespace in the
+<p>In <c>unicode</c> mode, only ASCII numbers and letters have any special meaning after a
+backslash. All other characters (in particular, those whose codepoints are
+greater than 127) are treated as literals.</p>
+
+<p>If a pattern is compiled with the <c>extended</c> option, white space in the
pattern (other than in a character class) and characters between a # outside
a character class and the next newline are ignored. An escaping backslash can
-be used to include a whitespace or # character as part of the pattern.</p>
+be used to include a white space or # character as part of the pattern.</p>
<p>If you want to remove the special meaning from a sequence of characters, you
can do so by putting them between \Q and \E. This is different from Perl in
@@ -889,42 +1131,54 @@ Perl, $ and @ cause variable interpolation. Note the following examples:</p>
\Qabc\E\$\Qxyz\E abc$xyz abc$xyz</code>
-<p>The \Q...\E sequence is recognized both inside and outside character classes.</p>
-
+<p>The \Q...\E sequence is recognized both inside and outside
+character classes. An isolated \E that is not preceded by \Q is
+ignored. If \Q is not followed by \E later in the pattern, the literal
+interpretation continues to the end of the pattern (that is, \E is
+assumed at the end). If the isolated \Q is inside a character class,
+this causes an error, because the character class is not
+terminated.</p>
<p><em>Non-printing characters</em></p>
<p>A second use of backslash provides a way of encoding non-printing characters
in patterns in a visible manner. There is no restriction on the appearance of
non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is usually easier to
-use one of the following escape sequences than the binary character it
-represents:</p>
+but when a pattern is being prepared by text editing, it is often easier to use
+one of the following escape sequences than the binary character it represents:</p>
<taglist>
<tag>\a</tag> <item>alarm, that is, the BEL character (hex 07)</item>
- <tag>\cx</tag> <item>"control-x", where x is any character</item>
+ <tag>\cx</tag> <item>"control-x", where x is any ASCII character</item>
<tag>\e </tag> <item>escape (hex 1B)</item>
- <tag>\f</tag> <item>formfeed (hex 0C)</item>
+ <tag>\f</tag> <item>form feed (hex 0C)</item>
<tag>\n</tag> <item>linefeed (hex 0A)</item>
<tag>\r</tag> <item>carriage return (hex 0D)</item>
<tag>\t </tag> <item>tab (hex 09)</item>
- <tag>\ddd</tag> <item>character with octal code ddd, or backreference</item>
+ <tag>\ddd</tag> <item>character with octal code ddd, or back reference</item>
<tag>\xhh </tag> <item>character with hex code hh</item>
<tag>\x{hhh..}</tag> <item>character with hex code hhh..</item>
</taglist>
-<p>The precise effect of \cx is as follows: if x is a lower case letter, it
-is converted to upper case. Then bit 6 of the character (hex 40) is inverted.
-Thus \cz becomes hex 1A, but \c{ becomes hex 3B, while \c; becomes hex
-7B.</p>
+<p>The precise effect of \cx on ASCII characters is as follows: if x is a lower
+case letter, it is converted to upper case. Then bit 6 of the character (hex
+40) is inverted. Thus \cA to \cZ become hex 01 to hex 1A (A is 41, Z is 5A),
+but \c{ becomes hex 3B ({ is 7B), and \c; becomes hex 7B (; is 3B). If the
+data item (byte or 16-bit value) following \c has a value greater than 127, a
+compile-time error occurs. This locks out non-ASCII characters in all modes.</p>
-<p>After \x, from zero to two hexadecimal digits are read (letters can be in
-upper or lower case). Any number of hexadecimal digits may appear between \x{
-and }, but the value of the character code must be less than 256 in non-UTF-8
-mode, and less than 2**31 in UTF-8 mode. That is, the maximum value in
-hexadecimal is 7FFFFFFF. Note that this is bigger than the largest Unicode code
-point, which is 10FFFF.</p>
+<p>The \c facility was designed for use with ASCII characters, but with the
+extension to Unicode it is even less useful than it once was.</p>
+
+<p>By default, after \x, from zero to two hexadecimal digits are read (letters
+can be in upper or lower case). Any number of hexadecimal digits may appear
+between \x{ and }, but the character code is constrained as follows:</p>
+<taglist>
+ <tag>8-bit non-Unicode mode</tag> <item>less than 0x100</item>
+ <tag>8-bit UTF-8 mode</tag> <item>less than 0x10ffff and a valid codepoint</item>
+</taglist>
+<p>Invalid Unicode codepoints are the range 0xd800 to 0xdfff (the so-called
+"surrogate" codepoints), and 0xffef.</p>
<p>If characters other than hexadecimal digits appear between \x{ and }, or if
there is no terminating }, this form of escape is not recognized. Instead, the
@@ -952,17 +1206,12 @@ later, following the discussion of parenthesized subpatterns.</p>
<p>Inside a character class, or if the decimal number is greater than 9 and there
have not been that many capturing subpatterns, PCRE re-reads up to three octal
digits following the backslash, and uses them to generate a data character. Any
-subsequent digits stand for themselves.
-The value of a
-character specified in octal must be less than \400.
-In non-UTF-8 mode, the value of a
-character specified in octal must be less than \400. In UTF-8 mode, values up
-to \777 are permitted.
-
+subsequent digits stand for themselves. The value of the character is
+constrained in the same way as characters specified in hexadecimal.
For example:</p>
<taglist>
- <tag>\040</tag> <item>is another way of writing a space</item>
+ <tag>\040</tag> <item>is another way of writing a ASCII space</item>
<tag>\40</tag> <item>is the same, provided there are fewer than 40
previous capturing subpatterns</item>
@@ -977,7 +1226,7 @@ For example:</p>
character with octal code 113</item>
<tag>\377</tag> <item>might be a back reference, otherwise
- the byte consisting entirely of 1 bits</item>
+ the value 255 (decimal)</item>
<tag>\81</tag> <item>is either a back reference, or a binary zero
followed by the two characters "8" and "1"</item>
@@ -987,12 +1236,19 @@ For example:</p>
a leading zero, because no more than three octal digits are ever
read.</p>
-<p>All the sequences that define a single character value can be used
-both inside and outside character classes. In addition, inside a
-character class, the sequence \b is interpreted as the backspace
-character (hex 08), and the sequences \R and \X are interpreted as
-the characters "R" and "X", respectively. Outside a character class,
-these sequences have different meanings (see below).</p>
+<p>All the sequences that define a single character value can be used both inside
+and outside character classes. In addition, inside a character class, \b is
+interpreted as the backspace character (hex 08).</p>
+<p>\N is not allowed in a character class. \B, \R, and \X are not special
+inside a character class. Like other unrecognized escape sequences, they are
+treated as the literal characters "B", "R", and "X". Outside a character class, these
+sequences have different meanings.</p>
+
+<p><em>Unsupported escape sequences</em></p>
+
+<p>In Perl, the sequences \l, \L, \u, and \U are recognized by its string
+handler and used to modify the case of following characters. PCRE
+does not support these escape sequences.</p>
<p><em>Absolute and relative back references</em></p>
@@ -1002,30 +1258,42 @@ reference. A named back reference can be coded as \g{name}. Back
references are discussed later, following the discussion of
parenthesized subpatterns.</p>
+<p><em>Absolute and relative subroutine calls</em></p>
+<p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a name or
+a number enclosed either in angle brackets or single quotes, is an alternative
+syntax for referencing a subpattern as a "subroutine". Details are discussed
+later.
+Note that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax) are <em>not</em>
+synonymous. The former is a back reference; the latter is a
+subroutine call.</p>
+
<p><em>Generic character types</em></p>
-<p>Another use of backslash is for specifying generic character types. The
-following are always recognized:</p>
+<p>Another use of backslash is for specifying generic character types:</p>
<taglist>
<tag>\d</tag> <item>any decimal digit</item>
<tag>\D</tag> <item>any character that is not a decimal digit</item>
- <tag>\h</tag> <item>any horizontal whitespace character</item>
- <tag>\H</tag> <item>any character that is not a horizontal whitespace character</item>
- <tag>\s</tag> <item>any whitespace character</item>
- <tag>\S</tag> <item>any character that is not a whitespace character</item>
- <tag>\v</tag> <item>any vertical whitespace character</item>
- <tag>\V</tag> <item>any character that is not a vertical whitespace character</item>
+ <tag>\h</tag> <item>any horizontal white space character</item>
+ <tag>\H</tag> <item>any character that is not a horizontal white space character</item>
+ <tag>\s</tag> <item>any white space character</item>
+ <tag>\S</tag> <item>any character that is not a white space character</item>
+ <tag>\v</tag> <item>any vertical white space character</item>
+ <tag>\V</tag> <item>any character that is not a vertical white space character</item>
<tag>\w</tag> <item>any "word" character</item>
<tag>\W</tag> <item>any "non-word" character</item>
</taglist>
-<p>Each pair of escape sequences partitions the complete set of characters into
-two disjoint sets. Any given character matches one, and only one, of each pair.</p>
+<p>There is also the single sequence \N, which matches a non-newline character.
+This is the same as the "." metacharacter
+when <c>dotall</c> is not set. Perl also uses \N to match characters by name;
+PCRE does not support this.</p>
-<p>These character type sequences can appear both inside and outside character
+<p>Each pair of lower and upper case escape sequences partitions the complete set
+of characters into two disjoint sets. Any given character matches one, and only
+one, of each pair. The sequences can appear both inside and outside character
classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, since
+matching point is at the end of the subject string, all of them fail, because
there is no character to match.</p>
<p>For compatibility with Perl, \s does not match the VT character (code 11).
@@ -1034,18 +1302,34 @@ are HT (9), LF (10), FF (12), CR (13), and space (32). If "use locale;" is
included in a Perl script, \s may match the VT character. In PCRE, it never
does.</p>
-<p>In UTF-8 mode, characters with values greater than 128 never match \d, \s, or
-\w, and always match \D, \S, and \W. This is true even when Unicode
-character property support is available. These sequences retain their original
-meanings from before UTF-8 support was available, mainly for efficiency
-reasons.</p>
+<p>A "word" character is an underscore or any character that is a letter or digit.
+By default, the definition of letters and digits is controlled by PCRE's
+low-valued character tables, in Erlang's case (and without the <c>unicode</c> option),
+the ISO-Latin-1 character set.</p>
-<p>The sequences \h, \H, \v, and \V are Perl 5.10 features. In contrast to the
-other sequences, these do match certain high-valued codepoints in UTF-8 mode.
-The horizontal space characters are:</p>
+<p>By default, in <c>unicode</c> mode, characters with values greater than 128 never match
+\d, \s, or \w, and always match \D, \S, and \W. These sequences retain
+their original meanings from before UTF support was available, mainly for
+efficiency reasons. However, if the <c>ucp</c> option is set, the behaviour is changed so that Unicode
+properties are used to determine character types, as follows:</p>
+<taglist>
+ <tag>\d</tag> <item>any character that \p{Nd} matches (decimal digit)</item>
+ <tag>\s</tag> <item>any character that \p{Z} matches, plus HT, LF, FF, CR)</item>
+ <tag> \w</tag> <item>any character that \p{L} or \p{N} matches, plus underscore)</item>
+</taglist>
+<p>The upper case escapes match the inverse sets of characters. Note that \d
+matches only decimal digits, whereas \w matches any Unicode digit, as well as
+any Unicode letter, and underscore. Note also that <c>ucp</c> affects \b, and
+\B because they are defined in terms of \w and \W. Matching these sequences
+is noticeably slower when <c>ucp</c> is set.</p>
+
+<p>The sequences \h, \H, \v, and \V are features that were added to Perl at
+release 5.10. In contrast to the other sequences, which match only ASCII
+characters by default, these always match certain high-valued codepoints,
+whether or not <c>ucp</c> is set. The horizontal space characters are:</p>
<taglist>
- <tag>U+0009</tag> <item>Horizontal tab</item>
+ <tag>U+0009</tag> <item>Horizontal tab (HT)</item>
<tag>U+0020</tag> <item>Space</item>
<tag>U+00A0</tag> <item>Non-break space</item>
<tag>U+1680</tag> <item>Ogham space mark</item>
@@ -1069,23 +1353,22 @@ The horizontal space characters are:</p>
<p>The vertical space characters are:</p>
<taglist>
- <tag>U+000A</tag> <item>Linefeed</item>
- <tag>U+000B</tag> <item>Vertical tab</item>
- <tag>U+000C</tag> <item>Formfeed</item>
- <tag>U+000D</tag> <item>Carriage return</item>
- <tag>U+0085</tag> <item>Next line</item>
+ <tag>U+000A</tag> <item>Linefeed (LF)</item>
+ <tag>U+000B</tag> <item>Vertical tab (VT)</item>
+ <tag>U+000C</tag> <item>Form feed (FF)</item>
+ <tag>U+000D</tag> <item>Carriage return (CR)</item>
+ <tag>U+0085</tag> <item>Next line (NEL)</item>
<tag>U+2028</tag> <item>Line separator</item>
<tag>U+2029</tag> <item>Paragraph separator</item>
</taglist>
-<p>A "word" character is an underscore or any character less than 256 that is a
-letter or digit. The definition of letters and digits is controlled by PCRE's
-low-valued character tables, which are always ISO-8859-1.</p>
+<p>In 8-bit, non-UTF-8 mode, only the characters with codepoints less than 256 are
+relevant.</p>
<p><em>Newline sequences</em></p>
<p>Outside a character class, by default, the escape sequence \R matches any
-Unicode newline sequence. This is a Perl 5.10 feature. In non-UTF-8 mode \R is
+Unicode newline sequence. In non-UTF-8 mode \R is
equivalent to the following:</p>
<quote><p> (?&gt;\r\n|\n|\x0b|\f|\r|\x85)</p></quote>
@@ -1094,11 +1377,11 @@ equivalent to the following:</p>
<p>This particular group matches either the two-character sequence CR followed by
LF, or one of the single characters LF (linefeed, U+000A), VT (vertical tab,
-U+000B), FF (formfeed, U+000C), CR (carriage return, U+000D), or NEL (next
+U+000B), FF (form feed, U+000C), CR (carriage return, U+000D), or NEL (next
line, U+0085). The two-character sequence is treated as a single unit that
cannot be split.</p>
-<p>In UTF-8 mode, two additional characters whose codepoints are greater than 255
+<p>In Unicode mode, two additional characters whose codepoints are greater than 255
are added: LS (line separator, U+2028) and PS (paragraph separator, U+2029).
Unicode character property support is not needed for these characters to be
recognized.</p>
@@ -1115,35 +1398,39 @@ one of the following sequences:</p>
<p> (*BSR_ANYCRLF) CR, LF, or CRLF only
(*BSR_UNICODE) any Unicode newline sequence</p>
-<p>These override the default and the options given to <c>re:compile/2</c>, but
-they can be overridden by options given to <c>re:run/3</c>. Note that these
-special settings, which are not Perl-compatible, are recognized only at the
-very start of a pattern, and that they must be in upper case. If more than one
-of them is present, the last one is used. They can be combined with a change of
-newline convention, for example, a pattern can start with:</p>
+<p>These override the default and the options given to the compiling function, but
+they can themselves be overridden by options given to a matching function. Note
+that these special settings, which are not Perl-compatible, are recognized only
+at the very start of a pattern, and that they must be in upper case. If more
+than one of them is present, the last one is used. They can be combined with a
+change of newline convention; for example, a pattern can start with:</p>
<p> (*ANY)(*BSR_ANYCRLF)</p>
-<p>Inside a character class, \R matches the letter "R".</p>
-
+<p>They can also be combined with the (*UTF8), (*UTF) or
+(*UCP) special sequences. Inside a character class, \R is treated as an
+unrecognized escape sequence, and so matches the letter "R" by default.</p>
<p><em>Unicode character properties</em></p>
-<p>When PCRE is built with Unicode character property support, three additional
+<p>Three additional
escape sequences that match characters with specific properties are available.
-When not in UTF-8 mode, these sequences are of course limited to testing
+When in 8-bit non-UTF-8 mode, these sequences are of course limited to testing
characters whose codepoints are less than 256, but they do work in this mode.
The extra escape sequences are:</p>
+<taglist>
+<tag>\p{<em>xx</em>}</tag> <item>a character with the <em>xx</em> property</item>
+<tag>\P{<em>xx</em>}</tag> <item>a character without the <em>xx</em> property</item>
+<tag>\X</tag> <item>a Unicode extended grapheme cluster</item>
+</taglist>
-<p> \p{<em>xx</em>} a character with the <em>xx</em> property
- \P{<em>xx</em>} a character without the <em>xx</em> property
- \X an extended Unicode sequence</p>
-
-<p>The property names represented by <em>xx</em> above are limited to the Unicode
-script names, the general category properties, and "Any", which matches any
-character (including newline). Other properties such as "InMusicalSymbols" are
-not currently supported by PCRE. Note that \P{Any} does not match any
-characters, so always causes a match failure.</p>
+<p>The property names represented by <i>xx</i> above are limited to the Unicode
+script names, the general category properties, "Any", which matches any
+character (including newline), and some special PCRE properties (described
+in the next section).
+Other Perl properties such as "InMusicalSymbols" are not currently supported by
+PCRE. Note that \P{Any} does not match any characters, so always causes a
+match failure.</p>
<p>Sets of Unicode characters are defined as belonging to certain scripts. A
character from one of these sets can be matched using a script name. For
@@ -1158,13 +1445,19 @@ example:</p>
<list>
<item>Arabic</item>
<item>Armenian</item>
+<item>Avestan</item>
<item>Balinese</item>
+<item>Bamum</item>
+<item>Batak</item>
<item>Bengali</item>
<item>Bopomofo</item>
<item>Braille</item>
<item>Buginese</item>
<item>Buhid</item>
<item>Canadian_Aboriginal</item>
+<item>Carian</item>
+<item>Chakma</item>
+<item>Cham</item>
<item>Cherokee</item>
<item>Common</item>
<item>Coptic</item>
@@ -1173,6 +1466,7 @@ example:</p>
<item>Cyrillic</item>
<item>Deseret</item>
<item>Devanagari</item>
+<item>Egyptian_Hieroglyphs</item>
<item>Ethiopic</item>
<item>Georgian</item>
<item>Glagolitic</item>
@@ -1185,16 +1479,31 @@ example:</p>
<item>Hanunoo</item>
<item>Hebrew</item>
<item>Hiragana</item>
+<item>Imperial_Aramaic</item>
<item>Inherited</item>
+<item>Inscriptional_Pahlavi</item>
+<item>Inscriptional_Parthian</item>
+<item>Javanese</item>
+<item>Kaithi</item>
<item>Kannada</item>
<item>Katakana</item>
+<item>Kayah_Li</item>
<item>Kharoshthi</item>
<item>Khmer</item>
<item>Lao</item>
<item>Latin</item>
+<item>Lepcha</item>
<item>Limbu</item>
<item>Linear_B</item>
+<item>Lisu</item>
+<item>Lycian</item>
+<item>Lydian</item>
<item>Malayalam</item>
+<item>Mandaic</item>
+<item>Meetei_Mayek</item>
+<item>Meroitic_Cursive</item>
+<item>Meroitic_Hieroglyphs</item>
+<item>Miao</item>
<item>Mongolian</item>
<item>Myanmar</item>
<item>New_Tai_Lue</item>
@@ -1203,17 +1512,29 @@ example:</p>
<item>Old_Italic</item>
<item>Old_Persian</item>
<item>Oriya</item>
+<item>Old_South_Arabian</item>
+<item>Old_Turkic</item>
+<item>Ol_Chiki</item>
<item>Osmanya</item>
<item>Phags_Pa</item>
<item>Phoenician</item>
+<item>Rejang</item>
<item>Runic</item>
+<item>Samaritan</item>
+<item>Saurashtra</item>
+<item>Sharada</item>
<item>Shavian</item>
<item>Sinhala</item>
+<item>Sora_Sompeng</item>
+<item>Sundanese</item>
<item>Syloti_Nagri</item>
<item>Syriac</item>
<item>Tagalog</item>
<item>Tagbanwa</item>
<item>Tai_Le</item>
+<item>Tai_Tham</item>
+<item>Tai_Viet</item>
+<item>Takri</item>
<item>Tamil</item>
<item>Telugu</item>
<item>Thaana</item>
@@ -1221,13 +1542,14 @@ example:</p>
<item>Tibetan</item>
<item>Tifinagh</item>
<item>Ugaritic</item>
+<item>Vai</item>
<item>Yi</item>
</list>
-<p>Each character has exactly one general category property, specified by a
-two-letter abbreviation. For compatibility with Perl, negation can be specified
-by including a circumflex between the opening brace and the property name. For
-example, \p{^Lu} is the same as \P{Lu}.</p>
+<p>Each character has exactly one Unicode general category property, specified by
+a two-letter abbreviation. For compatibility with Perl, negation can be
+specified by including a circumflex between the opening brace and the property
+name. For example, \p{^Lu} is the same as \P{Lu}.</p>
<p>If only one letter is specified with \p or \P, it includes all the general
category properties that start with that letter. In this case, in the absence
@@ -1303,13 +1625,10 @@ the Lu, Ll, or Lt property, in other words, a letter that is not classified as
a modifier or "other".</p>
<p>The Cs (Surrogate) property applies only to characters in the range U+D800 to
-U+DFFF. Such characters are not valid in UTF-8 strings (see RFC 3629) and so
-cannot be tested by PCRE, unless UTF-8 validity checking has been turned off
-(see the discussion of <c>no_utf8_check</c> in the
-<em>pcreapi</em>
-page).</p>
+U+DFFF. Such characters are not valid in Unicode strings and so
+cannot be tested by PCRE. Perl does not support the Cs property</p>
-<p>The long synonyms for these properties that Perl supports (such as \p{Letter})
+<p>The long synonyms for property names that Perl supports (such as \p{Letter})
are not supported by PCRE, nor is it permitted to prefix any of these
properties with "Is".</p>
@@ -1318,31 +1637,79 @@ Instead, this property is assumed for any code point that is not in the
Unicode table.</p>
<p>Specifying caseless matching does not affect these escape sequences. For
-example, \p{Lu} always matches only upper case letters.</p>
-
-<p>The \X escape matches any number of Unicode characters that form an extended
-Unicode sequence. \X is equivalent to</p>
+example, \p{Lu} always matches only upper case letters. This is different from
+the behaviour of current versions of Perl.</p>
+<p>Matching characters by Unicode property is not fast, because PCRE has to do a
+multistage table lookup in order to find a character's property. That is why
+the traditional escape sequences such as \d and \w do not use Unicode
+properties in PCRE by default, though you can make them do so by setting the
+<c>ucp</c> option or by starting the pattern with (*UCP).</p>
+
+<p><em>Extended grapheme clusters</em></p>
+<p>The \X escape matches any number of Unicode characters that form an "extended
+grapheme cluster", and treats the sequence as an atomic group (see below).
+Up to and including release 8.31, PCRE matched an earlier, simpler definition
+that was equivalent to</p>
<quote><p> (?&gt;\PM\pM*)</p></quote>
-<p>That is, it matches a character without the "mark" property, followed by zero
-or more characters with the "mark" property, and treats the sequence as an
-atomic group
-(see below).
-Characters with the "mark" property are typically accents that affect the
-preceding character. None of them have codepoints less than 256, so in
-non-UTF-8 mode \X matches any one character.</p>
+<p>That is, it matched a character without the "mark" property, followed by zero
+or more characters with the "mark" property. Characters with the "mark"
+property are typically non-spacing accents that affect the preceding character.</p>
+
+<p>This simple definition was extended in Unicode to include more complicated
+kinds of composite character by giving each character a grapheme breaking
+property, and creating rules that use these properties to define the boundaries
+of extended grapheme clusters. In releases of PCRE later than 8.31, \X matches
+one of these clusters.</p>
-<p>Matching characters by Unicode property is not fast, because PCRE has to search
-a structure that contains data for over fifteen thousand characters. That is
-why the traditional escape sequences such as \d and \w do not use Unicode
-properties in PCRE.</p>
+<p>\X always matches at least one character. Then it decides whether to add
+additional characters according to the following rules for ending a cluster:</p>
+<taglist>
+<tag>1.</tag> <item>End at the end of the subject string.</item>
+<tag>2.</tag> <item>Do not end between CR and LF; otherwise end after any control character.</item>
+<tag>3.</tag> <item>Do not break Hangul (a Korean script) syllable sequences. Hangul characters
+are of five types: L, V, T, LV, and LVT. An L character may be followed by an
+L, V, LV, or LVT character; an LV or V character may be followed by a V or T
+character; an LVT or T character may be follwed only by a T character.</item>
+<tag>4.</tag> <item>Do not end before extending characters or spacing marks. Characters with
+the "mark" property always have the "extend" grapheme breaking property.</item>
+<tag>5.</tag> <item>Do not end after prepend characters.</item>
+<tag>6.</tag> <item>Otherwise, end the cluster.</item>
+</taglist>
+
+<p><em>PCRE's additional properties</em></p>
+
+<p>As well as the standard Unicode properties described above, PCRE supports four
+more that make it possible to convert traditional escape sequences such as \w
+and \s and POSIX character classes to use Unicode properties. PCRE uses these
+non-standard, non-Perl properties internally when PCRE_UCP is set. However,
+they may also be used explicitly. These properties are:</p>
+<taglist>
+ <tag>Xan</tag> <item>Any alphanumeric character</item>
+ <tag>Xps</tag> <item>Any POSIX space character</item>
+ <tag>Xsp</tag> <item>Any Perl space character</item>
+ <tag>Xwd</tag> <item>Any Perl "word" character</item>
+</taglist>
+<p>Xan matches characters that have either the L (letter) or the N (number)
+property. Xps matches the characters tab, linefeed, vertical tab, form feed, or
+carriage return, and any other character that has the Z (separator) property.
+Xsp is the same as Xps, except that vertical tab is excluded. Xwd matches the
+same characters as Xan, plus underscore.</p>
+
+<p>There is another non-standard property, Xuc, which matches any character that
+can be represented by a Universal Character Name in C++ and other programming
+languages. These are the characters $, @, ` (grave accent), and all characters
+with Unicode code points greater than or equal to U+00A0, except for the
+surrogates U+D800 to U+DFFF. Note that most base (ASCII) characters are
+excluded. (Universal Character Names are of the form \uHHHH or \UHHHHHHHH
+where H is a hexadecimal digit. Note that the Xuc property does not match these
+sequences but the characters that they represent.)</p>
<p><em>Resetting the match start</em></p>
-<p>The escape sequence \K, which is a Perl 5.10 feature, causes any previously
-matched characters not to be included in the final matched sequence. For
-example, the pattern:</p>
+<p>The escape sequence \K causes any previously matched characters not to be
+included in the final matched sequence. For example, the pattern:</p>
<quote><p> foo\Kbar</p></quote>
@@ -1362,6 +1729,10 @@ For example, when the pattern</p>
<p>matches "foobar", the first substring is still set to "foo".</p>
+<p>Perl documents that the use of \K within assertions is "not well defined". In
+PCRE, \K is acted upon when it occurs inside positive assertions, but is
+ignored in negative assertions.</p>
+
<p><em>Simple assertions</em></p>
<p>The final use of backslash is for certain simple assertions. An
@@ -1382,13 +1753,20 @@ described below. The backslashed assertions are:</p>
subject</item>
</taglist>
-<p>These assertions may not appear in character classes (but note that \b has a
-different meaning, namely the backspace character, inside a character class).</p>
+<p>Inside a character class, \b has a different meaning; it matches the backspace
+character. If any other of these assertions appears in a character class, by
+default it matches the corresponding literal character (for example, \B
+matches the letter B). </p>
<p>A word boundary is a position in the subject string where the current character
and the previous character do not both match \w or \W (i.e. one matches
\w and the other matches \W), or the start or end of the string if the
-first or last character matches \w, respectively.</p>
+first or last character matches \w, respectively. In a UTF mode, the meanings
+of \w and \W can be changed by setting the <c>ucp</c> option. When this is
+done, it also affects \b and \B. Neither PCRE nor Perl has a separate "start
+of word" or "end of word" metasequence. However, whatever follows \b normally
+determines which it is. For example, the fragment \ba matches "a" at the start
+of a word.</p>
<p>The \A, \Z, and \z assertions differ from the traditional circumflex and
dollar (described in the next section) in that they only ever match at the very
@@ -1422,9 +1800,13 @@ regular expression.</p>
<section><marker id="sect4"></marker><title>Circumflex and dollar</title>
+<p>The circumflex and dollar metacharacters are zero-width assertions. That is,
+they test for a particular condition being true without consuming any
+characters from the subject string.</p>
+
<p>Outside a character class, in the default matching mode, the circumflex
-character is an assertion that is true only if the current matching point is
-at the start of the subject string. If the <em>startoffset</em> argument of
+character is an assertion that is true only if the current matching point is at
+the start of the subject string. If the <i>startoffset</i> argument of
<c>re:run/3</c> is non-zero, circumflex can never match if the <c>multiline</c>
option is unset. Inside a character class, circumflex has an entirely different
meaning (see below).</p>
@@ -1437,12 +1819,12 @@ constrained to match only at the start of the subject, it is said to be an
"anchored" pattern. (There are also other constructs that can cause a pattern
to be anchored.)</p>
-<p>A dollar character is an assertion that is true only if the current matching
-point is at the end of the subject string, or immediately before a newline
-at the end of the string (by default). Dollar need not be the last character of
-the pattern if a number of alternatives are involved, but it should be the last
-item in any branch in which it appears. Dollar has no special meaning in a
-character class.</p>
+<p>The dollar character is an assertion that is true only if the current matching
+point is at the end of the subject string, or immediately before a newline at
+the end of the string (by default). Note, however, that it does not actually
+match the newline. Dollar need not be the last character of the pattern if a
+number of alternatives are involved, but it should be the last item in any
+branch in which it appears. Dollar has no special meaning in a character class.</p>
<p>The meaning of dollar can be changed so that it matches only at the
very end of the string, by setting the <c>dollar_endonly</c> option at
@@ -1471,12 +1853,11 @@ end of the subject in both modes, and if all branches of a pattern start with
</section>
-<section><marker id="sect5"></marker><title>Full stop (period, dot)</title>
+<section><marker id="sect5"></marker><title>Full stop (period, dot) and \N</title>
<p>Outside a character class, a dot in the pattern matches any one character in
the subject string except (by default) a character that signifies the end of a
line.
- In UTF-8 mode, the matched character may be more than one byte long.
</p>
<p>When a line ending is defined as a single character, dot never matches that
@@ -1497,111 +1878,138 @@ the subject string, it takes two dots to match it.</p>
circumflex and dollar, the only relationship being that they both
involve newlines. Dot has no special meaning in a character class.</p>
+<p>The escape sequence \N behaves like a dot, except that it is not affected by
+the PCRE_DOTALL option. In other words, it matches any character except one
+that signifies the end of a line. Perl also uses \N to match characters by
+name; PCRE does not support this.</p>
+
</section>
-<section><marker id="sect6"></marker><title>Matching a single byte</title>
+<section><marker id="sect6"></marker><title>Matching a single data unit</title>
-<p>Outside a character class, the escape sequence \C matches any one byte, both
-in and out of UTF-8 mode. Unlike a dot, it always matches any line-ending
-characters. The feature is provided in Perl in order to match individual bytes
-in UTF-8 mode. Because it breaks up UTF-8 characters into individual bytes,
-what remains in the string may be a malformed UTF-8 string. For this reason,
-the \C escape sequence is best avoided.</p>
+<p>Outside a character class, the escape sequence \C matches any one data unit,
+whether or not a UTF mode is set. One data unit is one
+byte. Unlike a dot, \C always
+matches line-ending characters. The feature is provided in Perl in order to
+match individual bytes in UTF-8 mode, but it is unclear how it can usefully be
+used. Because \C breaks up characters into individual data units, matching one
+unit with \C in a UTF mode means that the rest of the string may start with a
+malformed UTF character. This has undefined results, because PCRE assumes that
+it is dealing with valid UTF strings.</p>
-<p>PCRE does not allow \C to appear in lookbehind assertions (described below),
-because in UTF-8 mode this would make it impossible to calculate the length of
+<p>PCRE does not allow \C to appear in lookbehind assertions (described below)
+in a UTF mode, because this would make it impossible to calculate the length of
the lookbehind.</p>
+<p>In general, the \C escape sequence is best avoided. However, one
+way of using it that avoids the problem of malformed UTF characters is to use a
+lookahead to check the length of the next character, as in this pattern, which
+could be used with a UTF-8 string (ignore white space and line breaks):</p>
+
+<code type="none">
+ (?| (?=[\x00-\x7f])(\C) |
+ (?=[\x80-\x{7ff}])(\C)(\C) |
+ (?=[\x{800}-\x{ffff}])(\C)(\C)(\C) |
+ (?=[\x{10000}-\x{1fffff}])(\C)(\C)(\C)(\C))</code>
+
+<p>A group that starts with (?| resets the capturing parentheses numbers in each
+alternative (see "Duplicate Subpattern Numbers"
+below). The assertions at the start of each branch check the next UTF-8
+character for values whose encoding uses 1, 2, 3, or 4 bytes, respectively. The
+character's individual bytes are then captured by the appropriate number of
+groups.</p>
+
</section>
<section><marker id="sect7"></marker><title>Square brackets and character classes</title>
-<p>An opening square bracket introduces a character class, terminated
-by a closing square bracket. A closing square bracket on its own is
-not special. If a closing square bracket is required as a member of
-the class, it should be the first data character in the class (after
-an initial circumflex, if present) or escaped with a backslash.</p>
-
-<p>A character class matches a single character in the subject.
-In
-UTF-8 mode, the character may occupy more than one byte.
-A matched
-character must be in the set of characters defined by the class,
-unless the first character in the class definition is a circumflex, in
-which case the subject character must not be in the set defined by the
-class. If a circumflex is actually required as a member of the class,
-ensure it is not the first character, or escape it with a
+<p>An opening square bracket introduces a character class, terminated by a closing
+square bracket. A closing square bracket on its own is not special by default.
+However, if the PCRE_JAVASCRIPT_COMPAT option is set, a lone closing square
+bracket causes a compile-time error. If a closing square bracket is required as
+a member of the class, it should be the first data character in the class
+(after an initial circumflex, if present) or escaped with a backslash.</p>
+
+<p>A character class matches a single character in the subject. In a UTF mode, the
+character may be more than one data unit long. A matched character must be in
+the set of characters defined by the class, unless the first character in the
+class definition is a circumflex, in which case the subject character must not
+be in the set defined by the class. If a circumflex is actually required as a
+member of the class, ensure it is not the first character, or escape it with a
backslash.</p>
<p>For example, the character class [aeiou] matches any lower case vowel, while
[^aeiou] matches any character that is not a lower case vowel. Note that a
circumflex is just a convenient notation for specifying the characters that
are in the class by enumerating those that are not. A class that starts with a
-circumflex is not an assertion: it still consumes a character from the subject
+circumflex is not an assertion; it still consumes a character from the subject
string, and therefore it fails if the current pointer is at the end of the
string.</p>
-<p>In UTF-8 mode, characters with values greater than 255 can be included in a
-class as a literal string of bytes, or by using the \x{ escaping mechanism.</p>
+<p>In UTF-8 mode, characters with values greater than 255 (0xffff)
+can be included in a class as a literal string of data units, or by using the
+\x{ escaping mechanism.</p>
<p>When caseless matching is set, any letters in a class represent both their
upper case and lower case versions, so for example, a caseless [aeiou] matches
"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would.
-In UTF-8 mode, PCRE always understands the concept of
+caseful version would. In a UTF mode, PCRE always understands the concept of
case for characters whose values are less than 128, so caseless matching is
always possible. For characters with higher values, the concept of case is
supported if PCRE is compiled with Unicode property support, but not otherwise.
-If you want to use caseless matching for characters 128 and above, you must
-ensure that PCRE is compiled with Unicode property support as well as with
-UTF-8 support.
-</p>
-
-<p>Characters that might indicate line breaks are never treated in any
-special way when matching character classes, whatever line-ending
-sequence is in use, and whatever setting of the <c>dotall</c> and
-<c>multiline</c> options is used. A class such as [^a] always matches
-one of these characters.</p>
-
-<p>The minus (hyphen) character can be used to specify a range of
-characters in a character class. For example, [d-m] matches any letter
-between d and m, inclusive. If a minus character is required in a
-class, it must be escaped with a backslash or appear in a position
-where it cannot be interpreted as indicating a range, typically as the
-first or last character in the class.</p>
-
-<p>It is not possible to have the literal character "]" as the end
-character of a range. A pattern such as [W-]46] is interpreted as a
-class of two characters ("W" and "-") followed by a literal string
-"46]", so it would match "W46]" or "-46]". However, if the "]" is
-escaped with a backslash it is interpreted as the end of range, so
-[W-\]46] is interpreted as a class containing a range followed by two
-other characters. The octal or hexadecimal representation of "]" can
-also be used to end a range.</p>
+If you want to use caseless matching in a UTF mode for characters 128 and
+above, you must ensure that PCRE is compiled with Unicode property support as
+well as with UTF support.</p>
+
+<p>Characters that might indicate line breaks are never treated in any special way
+when matching character classes, whatever line-ending sequence is in use, and
+whatever setting of the PCRE_DOTALL and PCRE_MULTILINE options is used. A class
+such as [^a] always matches one of these characters.</p>
+
+<p>The minus (hyphen) character can be used to specify a range of characters in a
+character class. For example, [d-m] matches any letter between d and m,
+inclusive. If a minus character is required in a class, it must be escaped with
+a backslash or appear in a position where it cannot be interpreted as
+indicating a range, typically as the first or last character in the class.</p>
+
+<p>It is not possible to have the literal character "]" as the end character of a
+range. A pattern such as [W-]46] is interpreted as a class of two characters
+("W" and "-") followed by a literal string "46]", so it would match "W46]" or
+"-46]". However, if the "]" is escaped with a backslash it is interpreted as
+the end of range, so [W-\]46] is interpreted as a class containing a range
+followed by two other characters. The octal or hexadecimal representation of
+"]" can also be used to end a range.</p>
<p>Ranges operate in the collating sequence of character values. They can also be
-used for characters specified numerically, for example [\000-\037].
-In UTF-8
-mode, ranges can include characters whose values are greater than 255, for
-example [\x{100}-\x{2ff}].
-</p>
+used for characters specified numerically, for example [\000-\037]. Ranges
+can include any characters that are valid for the current mode.</p>
<p>If a range that includes letters is used when caseless matching is set, it
matches the letters in either case. For example, [W-c] is equivalent to
-[][\\^_`wxyzabc], matched caselessly
-, and in non-UTF-8 mode, if character
+[][\\^_`wxyzabc], matched caselessly, and in a non-UTF mode, if character
tables for a French locale are in use, [\xc8-\xcb] matches accented E
-characters in both cases. In UTF-8 mode, PCRE supports the concept of case for
+characters in both cases. In UTF modes, PCRE supports the concept of case for
characters with values greater than 128 only when it is compiled with Unicode
property support.</p>
-<p>The character types \d, \D, \p, \P, \s, \S, \w, and \W may
-also appear in a character class, and add the characters that they
-match to the class. For example, [\dABCDEF] matches any hexadecimal
-digit. A circumflex can conveniently be used with the upper case
-character types to specify a more restricted set of characters than
-the matching lower case type. For example, the class [^\W_] matches
-any letter or digit, but not underscore.</p>
+<p>The character escape sequences \d, \D, \h, \H, \p, \P, \s, \S, \v,
+\V, \w, and \W may appear in a character class, and add the characters that
+they match to the class. For example, [\dABCDEF] matches any hexadecimal
+digit. In UTF modes, the <c>ucp</c> option affects the meanings of \d, \s, \w
+and their upper case partners, just as it does when they appear outside a
+character class, as described in the section entitled
+"Generic character types"
+above. The escape sequence \b has a different meaning inside a character
+class; it matches the backspace character. The sequences \B, \N, \R, and \X
+are not special inside a character class. Like any other unrecognized escape
+sequences, they are treated as the literal characters "B", "N", "R", and "X".</p>
+
+<p>A circumflex can conveniently be used with the upper case character types to
+specify a more restricted set of characters than the matching lower case type.
+For example, the class [^\W_] matches any letter or digit, but not underscore,
+whereas [\w] includes underscore. A positive character class should be read as
+"something OR something OR ..." and a negative class as "NOT something AND NOT
+something AND NOT ...".</p>
<p>The only metacharacters that are recognized in character classes
are backslash, hyphen (only where it can be interpreted as specifying
@@ -1611,7 +2019,6 @@ next section), and the terminating closing square bracket. However,
escaping other non-alphanumeric characters does no harm.</p>
</section>
-
<section><marker id="sect8"></marker><title>POSIX character classes</title>
<p>Perl supports the POSIX notation for character classes. This uses names
@@ -1621,7 +2028,7 @@ this notation. For example,</p>
<quote><p> [01[:alpha:]%]</p></quote>
<p>matches "0", "1", any alphabetic character, or "%". The supported class names
-are</p>
+are:</p>
<taglist>
<tag>alnum</tag> <item>letters and digits</item>
@@ -1633,7 +2040,7 @@ are</p>
<tag>graph</tag> <item>printing characters, excluding space</item>
<tag>lower</tag> <item>lower case letters</item>
<tag>print</tag> <item>printing characters, including space</item>
- <tag>punct</tag> <item>printing characters, excluding letters and digits</item>
+ <tag>punct</tag> <item>printing characters, excluding letters and digits and space</item>
<tag>space</tag> <item>whitespace (not quite the same as \s)</item>
<tag>upper</tag> <item>upper case letters</item>
<tag>word</tag> <item>"word" characters (same as \w)</item>
@@ -1655,8 +2062,26 @@ by a ^ character after the colon. For example,</p>
syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
supported, and an error is given if they are encountered.</p>
-<p>In UTF-8 mode, characters with values greater than 128 do not match any of
-the POSIX character classes.</p>
+<p>By default, in UTF modes, characters with values greater than 128 do not match
+any of the POSIX character classes. However, if the PCRE_UCP option is passed
+to <b>pcre_compile()</b>, some of the classes are changed so that Unicode
+character properties are used. This is achieved by replacing the POSIX classes
+by other sequences, as follows:</p>
+
+<taglist>
+ <tag>[:alnum:]</tag> <item>becomes <em>\p{Xan}</em></item>
+ <tag>[:alpha:]</tag> <item>becomes <em>\p{L}</em></item>
+ <tag>[:blank:]</tag> <item>becomes <em>\h</em></item>
+ <tag>[:digit:</tag>] <item>becomes <em>\p{Nd}</em></item>
+ <tag>[:lower:]</tag> <item>becomes <em>\p{Ll}</em></item>
+ <tag>[:space:]</tag> <item>becomes <em>\p{Xps}</em></item>
+ <tag>[:upper:</tag>] <item>becomes <em>\p{Lu}</em></item>
+ <tag>[:word:]</tag> <item>becomes <em>\p{Xwd}</em></item>
+</taglist>
+
+<p>Negated versions, such as [:^alpha:] use \P instead of \p. The other POSIX
+classes are unchanged, and match only characters with code points less than
+128.</p>
</section>
@@ -1703,19 +2128,13 @@ unset.</p>
<c>extra</c> can be changed in the same way as the Perl-compatible
options by using the characters J, U and X respectively.</p>
-<p>When an option change occurs at top level (that is, not inside subpattern
-parentheses), the change applies to the remainder of the pattern that follows.
-If the change is placed right at the start of a pattern, PCRE extracts it into
-the global options
-<!-- XXX C Interface
-(and it will therefore show up in data extracted by the
-<c>pcre_fullinfo()</c> function).
--->
-</p>
+<p>When one of these option changes occurs at top level (that is, not inside
+subpattern parentheses), the change applies to the remainder of the pattern
+that follows. If the change is placed right at the start of a pattern, PCRE
+extracts it into the global options.</p>
-<p>An option change within a subpattern (see below for a description
-of subpatterns) affects only that part of the current pattern that
-follows it, so</p>
+<p>An option change within a subpattern (see below for a description of
+subpatterns) affects only that part of the subpattern that follows it, so</p>
<quote><p> (a(?i)b)c</p></quote>
@@ -1733,11 +2152,16 @@ option settings happen at compile time. There would be some very weird
behaviour otherwise.</p>
<p><em>Note:</em> There are other PCRE-specific options that can be set by the
-application when the compile or match functions are called. In some cases the
-pattern can contain special leading sequences to override what the application
-has set or what has been defaulted. Details are given in the section entitled
-"Newline sequences" above.</p>
-
+application when the compiling or matching functions are called. In some cases
+the pattern can contain special leading sequences such as (*CRLF) to override
+what the application has set or what has been defaulted. Details are given in
+the section entitled "Newline sequences"
+above. There are also the (*UTF8) and (*UCP) leading
+sequences that can be used to set UTF and Unicode property modes; they are
+equivalent to setting the <c>unicode</c> and the <c>ucp</c>
+options, respectively. The (*UTF) sequence is a generic version that can be
+used with any of the libraries. However, the application can set the
+<c>never_utf</c> option, which locks out the use of the (*UTF) sequences.</p>
</section>
@@ -1751,16 +2175,17 @@ things:</p>
<quote><p> cat(aract|erpillar|)</p></quote>
-<p>matches one of the words "cat", "cataract", or "caterpillar". Without the
-parentheses, it would match "cataract", "erpillar" or an empty string.</p>
+<p>matches "cataract", "caterpillar", or "cat". Without the parentheses, it would
+match "cataract", "erpillar" or an empty string.</p>
<p>2. It sets up the subpattern as a capturing subpattern. This means that, when
the complete pattern matches, that portion of the subject string that matched the
subpattern is passed back to the caller via the return value of
-<c>re:run/3</c>. Opening parentheses are counted from left to right (starting
-from 1) to obtain numbers for the capturing subpatterns.</p>
-
-<p>For example, if the string "the red king" is matched against the pattern</p>
+<c>re:run/3</c>.</p>
+
+<p>Opening parentheses are counted from left to right (starting
+from 1) to obtain numbers for the capturing subpatterns.For example, if the string
+"the red king" is matched against the pattern</p>
<quote><p> the ((red|white) (king|queen))</p></quote>
@@ -1793,7 +2218,6 @@ from left to right, and options are not reset until the end of the subpattern
is reached, an option setting in one branch does affect subsequent branches, so
the above patterns match "SUNDAY" as well as "Saturday".</p>
-
</section>
<section><marker id="sect12"></marker><title>Duplicate subpattern numbers</title>
@@ -1811,18 +2235,30 @@ at captured substring number one, whichever alternative matched. This construct
is useful when you want to capture part, but not all, of one of a number of
alternatives. Inside a (?| group, parentheses are numbered as usual, but the
number is reset at the start of each branch. The numbers of any capturing
-buffers that follow the subpattern start after the highest number used in any
-branch. The following example is taken from the Perl documentation.
-The numbers underneath show in which buffer the captured content will be
-stored.</p>
+parentheses that follow the subpattern start after the highest number used in
+any branch. The following example is taken from the Perl documentation. The
+numbers underneath show in which buffer the captured content will be stored.</p>
<code type="none">
# before ---------------branch-reset----------- after
/ ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x
# 1 2 2 3 2 3 4</code>
-<p>A backreference or a recursive call to a numbered subpattern always
-refers to the first one in the pattern with the given number.</p>
+<p>A back reference to a numbered subpattern uses the most recent value that is
+set for that number by any subpattern. The following pattern matches "abcabc"
+or "defdef":</p>
+
+<quote><p> /(?|(abc)|(def))\1/</p></quote>
+
+<p>In contrast, a subroutine call to a numbered subpattern always refers to the
+first one in the pattern with the given number. The following pattern matches
+"abcabc" or "defabc":</p>
+
+<quote><p> /(?|(abc)|(def))(?1)/</p></quote>
+
+<p>If a condition test
+for a subpattern's having matched refers to a non-unique number, the test is
+true if any of the subpatterns of that number have matched.</p>
<p>An alternative approach to using this "branch reset" feature is to use
duplicate named subpatterns, as described in the next section.</p>
@@ -1837,12 +2273,13 @@ if an expression is modified, the numbers may change. To help with this
difficulty, PCRE supports the naming of subpatterns. This feature was not
added to Perl until release 5.10. Python had the feature earlier, and PCRE
introduced it at release 4.0, using the Python syntax. PCRE now supports both
-the Perl and the Python syntax.</p>
+the Perl and the Python syntax. Perl allows identically numbered subpatterns to
+have different names, but PCRE does not.</p>
<p>In PCRE, a subpattern can be named in one of three ways:
(?&lt;name&gt;...) or (?'name'...) as in Perl, or (?P&lt;name&gt;...)
as in Python. References to capturing parentheses from other parts of
-the pattern, such as backreferences, recursion, and conditions, can be
+the pattern, such as back references, recursion, and conditions, can be
made by name as well as by number.</p>
<p>Names consist of up to 32 alphanumeric characters and underscores. Named
@@ -1857,11 +2294,13 @@ The <c>capture</c> specification to <c>re:run/3</c> can use named values if they
</p>
<p>By default, a name must be unique within a pattern, but it is possible to relax
-this constraint by setting the <c>dupnames</c> option at compile time. This can
-be useful for patterns where only one instance of the named parentheses can
-match. Suppose you want to match the name of a weekday, either as a 3-letter
-abbreviation or as the full name, and in both cases you want to extract the
-abbreviation. This pattern (ignoring the line breaks) does the job:</p>
+this constraint by setting the <c>dupnames</c> option at compile time. (Duplicate
+names are also always permitted for subpatterns with the same number, set up as
+described in the previous section.) Duplicate names can be useful for patterns
+where only one instance of the named parentheses can match. Suppose you want to
+match the name of a weekday, either as a 3-letter abbreviation or as the full
+name, and in both cases you want to extract the abbreviation. This pattern
+(ignoring the line breaks) does the job:</p>
<code type="none">
(?&lt;DN&gt;Mon|Fri|Sun)(?:day)?|
@@ -1887,7 +2326,13 @@ details of the interfaces for handling named subpatterns, see the
documentation.</p>
-->
-<p>In case of capturing named subpatterns which are not unique, the first occurrence is returned from <c>re:exec/3</c>, if the name is specified int the <c>values</c> part of the <c>capture</c> statement.</p>
+<p>In case of capturing named subpatterns which names are not unique, the first matching occurrence (counted from left to right in the subject) is returned from <c>re:exec/3</c>, if the name is specified in the <c>values</c> part of the <c>capture</c> statement. The <c>all_names</c> capturing value will match all of the names in the same way.</p>
+
+<p><em>Warning:</em> You cannot use different names to distinguish between two
+subpatterns with the same number because PCRE uses only the numbers when
+matching. For this reason, an error is given at compile time if different names
+are given to subpatterns with the same number. However, you can give the same
+name to subpatterns with the same number, even when <c>dupnames</c> is not set.</p>
</section>
@@ -1900,14 +2345,13 @@ following items:</p>
<item>a literal data character</item>
<item>the dot metacharacter</item>
<item>the \C escape sequence</item>
- <item>the \X escape sequence
-(in UTF-8 mode with Unicode properties)
- </item>
+ <item>the \X escape sequence</item>
<item>the \R escape sequence</item>
- <item>an escape such as \d that matches a single character</item>
+ <item>an escape such as \d or \pL that matches a single character</item>
<item>a character class</item>
<item>a back reference (see next section)</item>
- <item>a parenthesized subpattern (unless it is an assertion)</item>
+ <item>a parenthesized subpattern (including assertions)</item>
+ <item>a subroutine call to a subpattern (recursive or otherwise)</item>
</list>
<p>The general repetition quantifier specifies a minimum and maximum number of
@@ -1933,14 +2377,18 @@ where a quantifier is not allowed, or one that does not match the syntax of a
quantifier, is taken as a literal character. For example, {,6} is not a
quantifier, but a literal string of four characters.</p>
-<p>In UTF-8 mode, quantifiers apply to UTF-8 characters rather than to individual
-bytes. Thus, for example, \x{100}{2} matches two UTF-8 characters, each of
-which is represented by a two-byte sequence. Similarly, when Unicode property
-support is available, \X{3} matches three Unicode extended sequences, each of
-which may be several bytes long (and they may be of different lengths).</p>
-
+<p>In Unicode mode, quantifiers apply to characters rather than to individual data
+units. Thus, for example, \x{100}{2} matches two characters, each of
+which is represented by a two-byte sequence in a UTF-8 string. Similarly,
+\X{3} matches three Unicode extended grapheme clusters, each of which may be
+several data units long (and they may be of different lengths).</p>
<p>The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present.</p>
+previous item and the quantifier were not present. This may be useful for
+subpatterns that are referenced as subroutines
+from elsewhere in the pattern (but see also the section entitled
+"Defining subpatterns for use by reference only"
+below). Items other than subpatterns that have a {0} quantifier are omitted
+from the compiled pattern.</p>
<p>For convenience, the three most common quantifiers have single-character
abbreviations:</p>
@@ -2014,8 +2462,8 @@ pattern as though it were preceded by \A.</p>
worth setting <c>dotall</c> in order to obtain this optimization, or
alternatively using ^ to indicate anchoring explicitly.</p>
-<p>However, there is one situation where the optimization cannot be used. When .*
-is inside capturing parentheses that are the subject of a backreference
+<p>However, there are some cases where the optimization cannot be used. When .*
+is inside capturing parentheses that are the subject of a back reference
elsewhere in the pattern, a match at the start may fail where a later one
succeeds. Consider, for example:</p>
@@ -2024,6 +2472,15 @@ succeeds. Consider, for example:</p>
<p>If the subject is "xyz123abc123" the match point is the fourth character. For
this reason, such a pattern is not implicitly anchored.</p>
+<p>Another case where implicit anchoring is not applied is when the leading .* is
+inside an atomic group. Once again, a match at the start may fail where a later
+one succeeds. Consider this pattern:</p>
+
+<quote><p> (?&gt;.*?a)b</p></quote>
+
+<p>It matches "ab" in the subject "aab". The use of the backtracking control verbs
+(*PRUNE) and (*SKIP) also disable this optimization.</p>
+
<p>When a capturing subpattern is repeated, the value captured is the substring
that matched the final iteration. For example, after</p>
@@ -2162,11 +2619,10 @@ further details of the handling of digits following a backslash. There
is no such problem when named parentheses are used. A back reference
to any subpattern is possible using named parentheses (see below).</p>
-<p>Another way of avoiding the ambiguity inherent in the use of digits
-following a backslash is to use the \g escape sequence, which is a
-feature introduced in Perl 5.10. This escape must be followed by an
-unsigned number or a negative number, optionally enclosed in
-braces. These examples are all identical:</p>
+<p>Another way of avoiding the ambiguity inherent in the use of digits following a
+backslash is to use the \g escape sequence. This escape must be followed by an
+unsigned number or a negative number, optionally enclosed in braces. These
+examples are all identical:</p>
<list>
<item>(ring), \1</item>
@@ -2182,10 +2638,10 @@ reference. Consider this example:</p>
<quote><p> (abc(def)ghi)\g{-1}</p></quote>
<p>The sequence \g{-1} is a reference to the most recently started capturing
-subpattern before \g, that is, is it equivalent to \2. Similarly, \g{-2}
-would be equivalent to \1. The use of relative references can be helpful in
-long patterns, and also in patterns that are created by joining together
-fragments that contain references within themselves.</p>
+subpattern before \g, that is, is it equivalent to \2 in this example.
+Similarly, \g{-2} would be equivalent to \1. The use of relative references
+can be helpful in long patterns, and also in patterns that are created by
+joining together fragments that contain references within themselves.</p>
<p>A back reference matches whatever actually matched the capturing
subpattern in the current subject string, rather than anything
@@ -2234,6 +2690,8 @@ some delimiter must be used to terminate the back reference. If the
<c>extended</c> option is set, this can be whitespace. Otherwise an
empty comment (see "Comments" below) can be used.</p>
+<p><em>Recursive back references</em></p>
+
<p>A back reference that occurs inside the parentheses to which it refers fails
when the subpattern is first used, so, for example, (a\1) never matches.
However, such references can be useful inside repeated subpatterns. For
@@ -2248,6 +2706,11 @@ that the first iteration does not need to match the back reference. This can be
done using alternation, as in the example above, or by a quantifier with a
minimum of zero.</p>
+<p>Back references of this type cause the group that they reference to be treated
+as an atomic group.
+Once the whole group has been matched, a subsequent matching failure cannot
+cause backtracking into the middle of the group.</p>
+
</section>
<section><marker id="sect17"></marker><title>Assertions</title>
@@ -2263,12 +2726,27 @@ those that look ahead of the current position in the subject string, and those
that look behind it. An assertion subpattern is matched in the normal way,
except that it does not cause the current matching position to be changed.</p>
-<p>Assertion subpatterns are not capturing subpatterns, and may not be repeated,
-because it makes no sense to assert the same thing several times. If any kind
-of assertion contains capturing subpatterns within it, these are counted for
-the purposes of numbering the capturing subpatterns in the whole pattern.
-However, substring capturing is carried out only for positive assertions,
-because it does not make sense for negative assertions.</p>
+<p>Assertion subpatterns are not capturing subpatterns. If such an assertion
+contains capturing subpatterns within it, these are counted for the purposes of
+numbering the capturing subpatterns in the whole pattern. However, substring
+capturing is carried out only for positive assertions. (Perl sometimes, but not
+always, does do capturing in negative assertions.)</p>
+
+<p>For compatibility with Perl, assertion subpatterns may be repeated; though
+it makes no sense to assert the same thing several times, the side effect of
+capturing parentheses may occasionally be useful. In practice, there only three
+cases:</p>
+
+<taglist>
+<tag>(1)</tag> <item>If the quantifier is {0}, the assertion is never obeyed during matching.
+However, it may contain internal capturing parenthesized groups that are called
+from elsewhere via the subroutine mechanism.</item>
+<tag>(2)</tag> <item>If quantifier is {0,n} where n is greater than zero, it is treated as if it
+were {0,1}. At run time, the rest of the pattern match is tried with and
+without the assertion, the order depending on the greediness of the quantifier.</item>
+<tag>(3)</tag> <item>If the minimum repetition is greater than zero, the quantifier is ignored.
+The assertion is obeyed just once when encountered during matching.</item>
+</taglist>
<p><em>Lookahead assertions</em></p>
@@ -2294,7 +2772,8 @@ lookbehind assertion is needed to achieve the other effect.</p>
<p>If you want to force a matching failure at some point in a pattern, the most
convenient way to do it is with (?!) because an empty string always matches, so
-an assertion that requires there not to be an empty string must always fail.</p>
+an assertion that requires there not to be an empty string must always fail.
+The backtracking control verb (*FAIL) or (*F) is a synonym for (?!).</p>
<p><em>Lookbehind assertions</em></p>
@@ -2317,33 +2796,38 @@ do not all have to have the same fixed length. Thus</p>
<p>causes an error at compile time. Branches that match different length strings
are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl (at least for 5.8), which requires all branches to
+extension compared with Perl, which requires all branches to
match the same length of string. An assertion such as</p>
<quote><p> (?&lt;=ab(c|de))</p></quote>
<p>is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable if rewritten to use two top-level branches:</p>
+lengths, but it is acceptable to PCRE if rewritten to use two top-level
+branches:</p>
<quote><p> (?&lt;=abc|abde)</p></quote>
-<p>In some cases, the Perl 5.10 escape sequence \K (see above) can be
-used instead of a lookbehind assertion; this is not restricted to a
-fixed-length.</p>
+<p>In some cases, the escape sequence \K (see above) can be
+used instead of a lookbehind assertion to get round the fixed-length
+restriction.</p>
<p>The implementation of lookbehind assertions is, for each alternative, to
temporarily move the current position back by the fixed length and then try to
match. If there are insufficient characters before the current position, the
assertion fails.</p>
-<p>PCRE does not allow the \C escape (which matches a single byte in UTF-8 mode)
-to appear in lookbehind assertions, because it makes it impossible to calculate
-the length of the lookbehind. The \X and \R escapes, which can match
-different numbers of bytes, are also not permitted.</p>
+<p>In a UTF mode, PCRE does not allow the \C escape (which matches a single data
+unit even in a UTF mode) to appear in lookbehind assertions, because it makes
+it impossible to calculate the length of the lookbehind. The \X and \R
+escapes, which can match different numbers of data units, are also not
+permitted.</p>
+<p>"Subroutine" calls (see below) such as (?2) or (?&amp;X) are permitted in lookbehinds, as long
+as the subpattern matches a fixed-length string. Recursion,
+however, is not supported.</p>
<p>Possessive quantifiers can be used in conjunction with lookbehind assertions to
-specify efficient matching at the end of the subject string. Consider a simple
-pattern such as</p>
+specify efficient matching of fixed-length strings at the end of subject
+strings. Consider a simple pattern such as</p>
<quote><p> abcd$</p></quote>
@@ -2406,8 +2890,8 @@ characters that are not "999".</p>
<p>It is possible to cause the matching process to obey a subpattern
conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a previous capturing subpattern matched
-or not. The two possible forms of conditional subpattern are</p>
+the result of an assertion, or whether a specific capturing subpattern has
+already been matched. The two possible forms of conditional subpattern are:</p>
<list>
<item>(?(condition)yes-pattern)</item>
@@ -2416,7 +2900,13 @@ or not. The two possible forms of conditional subpattern are</p>
<p>If the condition is satisfied, the yes-pattern is used; otherwise the
no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs.</p>
+subpattern, a compile-time error occurs. Each of the two alternatives may
+itself contain nested subpatterns of any form, including conditional
+subpatterns; the restriction to two alternatives applies only at the level of
+the condition. This pattern fragment is an example where the alternatives are
+complex:</p>
+
+<quote><p> (?(1) (A|B|C) | (D | (?(2)E|F) | E) )</p></quote>
<p>There are four kinds of condition: references to subpatterns, references to
recursion, a pseudo-condition called DEFINE, and assertions.</p>
@@ -2425,13 +2915,16 @@ recursion, a pseudo-condition called DEFINE, and assertions.</p>
<p><em>Checking for a used subpattern by number</em></p>
<p>If the text between the parentheses consists of a sequence of
-digits, the condition is true if the capturing subpattern of that
-number has previously matched. An alternative notation is to precede
-the digits with a plus or minus sign. In this case, the subpattern
-number is relative rather than absolute. The most recently opened
-parentheses can be referenced by (?(-1), the next most recent by
-(?(-2), and so on. In looping constructs it can also make sense to
-refer to subsequent groups with constructs such as (?(+2).</p>
+digits, the condition is true if a capturing subpattern of that number has previously
+matched. If there is more than one capturing subpattern with the same number
+(see the earlier section about duplicate subpattern numbers),
+the condition is true if any of them have matched. An alternative notation is
+to precede the digits with a plus or minus sign. In this case, the subpattern
+number is relative rather than absolute. The most recently opened parentheses
+can be referenced by (?(-1), the next most recent by (?(-2), and so on. Inside
+loops it can also make sense to refer to subsequent groups. The next
+parentheses to be opened can be referenced as (?(+1), and so on. (The value
+zero in any of these forms is not used; it provokes a compile-time error.)</p>
<p>Consider the following pattern, which contains non-significant
whitespace to make it more readable (assume the <c>extended</c>
@@ -2442,7 +2935,7 @@ option) and to divide it into three parts for ease of discussion:</p>
<p>The first part matches an optional opening parenthesis, and if that
character is present, sets it as the first captured substring. The second part
matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether the first set of parentheses matched
+conditional subpattern that tests whether or not the first set of parentheses matched
or not. If they did, that is, if subject started with an opening parenthesis,
the condition is true, and so the yes-pattern is executed and a closing
parenthesis is required. Otherwise, since no-pattern is not present, the
@@ -2472,6 +2965,10 @@ consist entirely of digits is not recommended.</p>
<quote><p> (?&lt;OPEN&gt; \( )? [^()]+ (?(&lt;OPEN&gt;) \) )</p></quote>
+<p>If the name used in a condition of this kind is a duplicate, the test is
+applied to all subpatterns of the same name, and is true if any one of them has
+matched.</p>
+
<p><em>Checking for pattern recursion</em></p>
<p>If the condition is the string (R), and there is no subpattern with
@@ -2481,12 +2978,14 @@ by ampersand follow the letter R, for example:</p>
<quote><p> (?(R3)...) or (?(R&amp;name)...)</p></quote>
-<p>the condition is true if the most recent recursion is into the
+<p>the condition is true if the most recent recursion is into a
subpattern whose number or name is given. This condition does not
-check the entire recursion stack.</p>
+check the entire recursion stack. If the name used in a condition of this kind is a duplicate, the test is
+applied to all subpatterns of the same name, and is true if any one of them is
+the most recent recursion.</p>
-<p>At "top level", all these recursion test conditions are false. Recursive
-patterns are described below.</p>
+<p>At "top level", all these recursion test conditions are false. The syntax for recursive
+patterns is described below.</p>
<p><em>Defining subpatterns for use by reference only</em></p>
@@ -2494,21 +2993,21 @@ patterns are described below.</p>
name DEFINE, the condition is always false. In this case, there may be only one
alternative in the subpattern. It is always skipped if control reaches this
point in the pattern; the idea of DEFINE is that it can be used to define
-"subroutines" that can be referenced from elsewhere. (The use of "subroutines"
-is described below.) For example, a pattern to match an IPv4 address could be
+"subroutines" that can be referenced from elsewhere. (The use of subroutines
+is described below.) For example, a pattern to match an IPv4 address such as
+"192.168.23.245" could be
written like this (ignore whitespace and line breaks):</p>
<quote><p> (?(DEFINE) (?&lt;byte&gt; 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )
\b (?&amp;byte) (\.(?&amp;byte)){3} \b</p></quote>
-<p>The first part of the pattern is a DEFINE group inside which a another group
-named "byte" is defined. This matches an individual component of an IPv4
-address (a number less than 256). When matching takes place, this part of the
-pattern is skipped because DEFINE acts like a false condition.</p>
-
-<p>The rest of the pattern uses references to the named group to match the four
-dot-separated components of an IPv4 address, insisting on a word boundary at
-each end.</p>
+<p>The first part of the pattern is a DEFINE group inside which a
+another group named "byte" is defined. This matches an individual
+component of an IPv4 address (a number less than 256). When matching
+takes place, this part of the pattern is skipped because DEFINE acts
+like a false condition. The rest of the pattern uses references to the
+named group to match the four dot-separated components of an IPv4
+address, insisting on a word boundary at each end.</p>
<p><em>Assertion conditions</em></p>
@@ -2533,14 +3032,31 @@ dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.</p>
<section><marker id="sect19"></marker><title>Comments</title>
-<p>The sequence (?# marks the start of a comment that continues up to the next
-closing parenthesis. Nested parentheses are not permitted. The characters
-that make up a comment play no part in the pattern matching at all.</p>
-
-<p>If the <c>extended</c> option is set, an unescaped # character outside a
-character class introduces a comment that continues to immediately after the
-next newline in the pattern.</p>
+<p>There are two ways of including comments in patterns that are processed by
+PCRE. In both cases, the start of the comment must not be in a character class,
+nor in the middle of any other sequence of related characters such as (?: or a
+subpattern name or number. The characters that make up a comment play no part
+in the pattern matching.</p>
+<p>The sequence (?# marks the start of a comment that continues up to the next
+closing parenthesis. Nested parentheses are not permitted. If the PCRE_EXTENDED
+option is set, an unescaped # character also introduces a comment, which in
+this case continues to immediately after the next newline character or
+character sequence in the pattern. Which characters are interpreted as newlines
+is controlled by the options passed to a compiling function or by a special
+sequence at the start of the pattern, as described in the section entitled
+"Newline conventions"
+above. Note that the end of this type of comment is a literal newline sequence
+in the pattern; escape sequences that happen to represent a newline do not
+count. For example, consider this pattern when <c>extended</c> is set, and the
+default newline convention is in force:</p>
+
+<quote><p> abc #comment \n still comment</p></quote>
+
+<p>On encountering the # character, <b>pcre_compile()</b> skips along, looking for
+a newline in the pattern. The sequence \n is still literal at this stage, so
+it does not terminate the comment. Only an actual character with the code value
+0x0a (the default newline) does so.</p>
</section>
@@ -2566,51 +3082,45 @@ case refers recursively to the pattern in which it appears.</p>
<p>Obviously, PCRE cannot support the interpolation of Perl code. Instead, it
supports special syntax for recursion of the entire pattern, and also for
individual subpattern recursion. After its introduction in PCRE and Python,
-this kind of recursion was introduced into Perl at release 5.10.</p>
+this kind of recursion was subsequently introduced into Perl at release 5.10.</p>
<p>A special item that consists of (? followed by a number greater
-than zero and a closing parenthesis is a recursive call of the
+than zero and a closing parenthesis is a recursive subroutine call of the
subpattern of the given number, provided that it occurs inside that
-subpattern. (If not, it is a "subroutine" call, which is described in
+subpattern. (If not, it is a non-recursive subroutine call, which is described in
the next section.) The special item (?R) or (?0) is a recursive call
of the entire regular expression.</p>
-<p>In PCRE (like Python, but unlike Perl), a recursive subpattern call
-is always treated as an atomic group. That is, once it has matched
-some of the subject string, it is never re-entered, even if it
-contains untried alternatives and there is a subsequent matching
-failure.</p>
-
<p>This PCRE pattern solves the nested parentheses problem (assume the
<c>extended</c> option is set so that whitespace is ignored):</p>
-<quote><p> \( ( (?&gt;[^()]+) | (?R) )* \)</p></quote>
+<quote><p> \( ( [^()]++ | (?R) )* \)</p></quote>
<p>First it matches an opening parenthesis. Then it matches any number
of substrings which can either be a sequence of non-parentheses, or a
recursive match of the pattern itself (that is, a correctly
-parenthesized substring). Finally there is a closing parenthesis.</p>
+parenthesized substring). Finally there is a closing
+parenthesis. Note the use of a possessive quantifier to avoid
+backtracking into sequences of non-parentheses.</p>
<p>If this were part of a larger pattern, you would not want to
recurse the entire pattern, so instead you could use this:</p>
-<quote><p> ( \( ( (?&gt;[^()]+) | (?1) )* \) )</p></quote>
+<quote><p> ( \( ( [^()]++ | (?1) )* \) )</p></quote>
<p>We have put the pattern into parentheses, and caused the recursion
to refer to them instead of the whole pattern.</p>
-<p>In a larger pattern, keeping track of parenthesis numbers can be
-tricky. This is made easier by the use of relative references. (A Perl
-5.10 feature.) Instead of (?1) in the pattern above you can write
-(?-2) to refer to the second most recently opened parentheses
-preceding the recursion. In other words, a negative number counts
-capturing parentheses leftwards from the point at which it is
-encountered.</p>
+<p>In a larger pattern, keeping track of parenthesis numbers can be tricky. This
+is made easier by the use of relative references. Instead of (?1) in the
+pattern above you can write (?-2) to refer to the second most recently opened
+parentheses preceding the recursion. In other words, a negative number counts
+capturing parentheses leftwards from the point at which it is encountered.</p>
<p>It is also possible to refer to subsequently opened parentheses, by
writing references such as (?+2). However, these cannot be recursive
because the reference is not inside the parentheses that are
-referenced. They are always "subroutine" calls, as described in the
+referenced. They are always non-recursive subroutine calls, as described in the
next section.</p>
<p>An alternative approach is to use named parentheses instead. The
@@ -2618,75 +3128,136 @@ Perl syntax for this is (?&amp;name); PCRE's earlier syntax
(?P&gt;name) is also supported. We could rewrite the above example as
follows:</p>
-<quote><p> (?&lt;pn&gt; \( ( (?&gt;[^()]+) | (?&amp;pn) )* \) )</p></quote>
+<quote><p> (?&lt;pn&gt; \( ( [^()]++ | (?&amp;pn) )* \) )</p></quote>
<p>If there is more than one subpattern with the same name, the earliest one is
used.</p>
<p>This particular example pattern that we have been looking at contains nested
-unlimited repeats, and so the use of atomic grouping for matching strings of
-non-parentheses is important when applying the pattern to strings that do not
-match. For example, when this pattern is applied to</p>
+unlimited repeats, and so the use of a possessive quantifier for matching
+strings of non-parentheses is important when applying the pattern to strings
+that do not match. For example, when this pattern is applied to</p>
<quote><p> (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()</p></quote>
-<p>it yields "no match" quickly. However, if atomic grouping is not used,
+<p>it yields "no match" quickly. However, if a possessive quantifier is not used,
the match runs for a very long time indeed because there are so many different
ways the + and * repeats can carve up the subject, and all have to be tested
before failure can be reported.</p>
-<p>At the end of a match, the values set for any capturing subpatterns are those
-from the outermost level of the recursion at which the subpattern value is set.
+<p>At the end of a match, the values of capturing parentheses are those from
+the outermost level. If the pattern above is matched against</p>
-<!-- XXX C Interface
-If you want to obtain intermediate values, a callout function can be used (see
-below and the
+<quote><p> (ab(cd)ef)</p></quote>
-<em>pcrecallout</em>
+<p>the value for the inner capturing parentheses (numbered 2) is "ef", which is
+the last value taken on at the top level. If a capturing subpattern is not
+matched at the top level, its final captured value is unset, even if it was
+(temporarily) set at a deeper level during the matching process.</p>
-documentation).
--->
-If the pattern above is matched against</p>
+<p>Do not confuse the (?R) item with the condition (R), which tests for recursion.
+Consider this pattern, which matches text in angle brackets, allowing for
+arbitrary nesting. Only digits are allowed in nested brackets (that is, when
+recursing), whereas any characters are permitted at the outer level.</p>
-<quote><p> (ab(cd)ef)</p></quote>
+<quote><p> &lt; (?: (?(R) \d++ | [^&lt;&gt;]*+) | (?R)) * &gt;</p></quote>
-<p>the value for the capturing parentheses is "ef", which is the last value taken
-on at the top level. If additional parentheses are added, giving</p>
+<p>In this pattern, (?(R) is the start of a conditional subpattern, with two
+different alternatives for the recursive and non-recursive cases. The (?R) item
+is the actual recursive call.</p>
+
+<p><em>Differences in recursion processing between PCRE and Perl</em></p>
+
+<p>Recursion processing in PCRE differs from Perl in two important ways. In PCRE
+(like Python, but unlike Perl), a recursive subpattern call is always treated
+as an atomic group. That is, once it has matched some of the subject string, it
+is never re-entered, even if it contains untried alternatives and there is a
+subsequent matching failure. This can be illustrated by the following pattern,
+which purports to match a palindromic string that contains an odd number of
+characters (for example, "a", "aba", "abcba", "abcdcba"):</p>
+
+<quote><p> ^(.|(.)(?1)\2)$</p></quote>
+
+<p>The idea is that it either matches a single character, or two identical
+characters surrounding a sub-palindrome. In Perl, this pattern works; in PCRE
+it does not if the pattern is longer than three characters. Consider the
+subject string "abcba":</p>
+
+<p>At the top level, the first character is matched, but as it is not at the end
+of the string, the first alternative fails; the second alternative is taken
+and the recursion kicks in. The recursive call to subpattern 1 successfully
+matches the next character ("b"). (Note that the beginning and end of line
+tests are not part of the recursion).</p>
+
+<p>Back at the top level, the next character ("c") is compared with what
+subpattern 2 matched, which was "a". This fails. Because the recursion is
+treated as an atomic group, there are now no backtracking points, and so the
+entire match fails. (Perl is able, at this point, to re-enter the recursion and
+try the second alternative.) However, if the pattern is written with the
+alternatives in the other order, things are different:</p>
+
+<quote><p> ^((.)(?1)\2|.)$</p></quote>
+
+<p>This time, the recursing alternative is tried first, and continues to recurse
+until it runs out of characters, at which point the recursion fails. But this
+time we do have another alternative to try at the higher level. That is the big
+difference: in the previous case the remaining alternative is at a deeper
+recursion level, which PCRE cannot use.</p>
+
+<p>To change the pattern so that it matches all palindromic strings, not just
+those with an odd number of characters, it is tempting to change the pattern to
+this:</p>
-<code type="none">
- \( ( ( (?&gt;[^()]+) | (?R) )* ) \)
- ^ ^
- ^ ^</code>
+<quote><p> ^((.)(?1)\2|.?)$</p></quote>
-<p>the string they capture is "ab(cd)ef", the contents of the top level
-parentheses.
-<!-- XXX C interface
-If there are more than 15 capturing parentheses in a pattern, PCRE
-has to obtain extra memory to store data during a recursion, which it does by
-using <em>pcre_malloc</em>, freeing it via <em>pcre_free</em> afterwards. If no
-memory can be obtained, the match fails with the <c>error_nomemory</c> error.</p>
--->
-</p>
+<p>Again, this works in Perl, but not in PCRE, and for the same reason. When a
+deeper recursion has matched a single character, it cannot be entered again in
+order to match an empty string. The solution is to separate the two cases, and
+write out the odd and even cases as alternatives at the higher level:</p>
-<p>Do not confuse the (?R) item with the condition (R), which tests
-for recursion. Consider this pattern, which matches text in angle
-brackets, allowing for arbitrary nesting. Only digits are allowed in
-nested brackets (that is, when recursing), whereas any characters are
-permitted at the outer level.</p>
+<quote><p> ^(?:((.)(?1)\2|)|((.)(?3)\4|.))</p></quote>
-<quote><p> &lt; (?: (?(R) \d++ | [^&lt;&gt;]*+) | (?R)) * &gt;</p></quote>
+<p>If you want to match typical palindromic phrases, the pattern has to ignore all
+non-word characters, which can be done like this:</p>
+
+ <quote><p> ^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$</p></quote>
+
+<p>If run with the <c>caseless</c> option, this pattern matches phrases such as "A
+man, a plan, a canal: Panama!" and it works well in both PCRE and Perl. Note
+the use of the possessive quantifier *+ to avoid backtracking into sequences of
+non-word characters. Without this, PCRE takes a great deal longer (ten times or
+more) to match typical phrases, and Perl takes so long that you think it has
+gone into a loop.</p>
+
+<p><em>WARNING</em>: The palindrome-matching patterns above work only if the subject
+string does not start with a palindrome that is shorter than the entire string.
+For example, although "abcba" is correctly matched, if the subject is "ababa",
+PCRE finds the palindrome "aba" at the start, then fails at top level because
+the end of the string does not follow. Once again, it cannot jump back into the
+recursion to try other alternatives, so the entire match fails.</p>
-<p>In this pattern, (?(R) is the start of a conditional subpattern,
-with two different alternatives for the recursive and non-recursive
-cases. The (?R) item is the actual recursive call.</p>
+<p>The second way in which PCRE and Perl differ in their recursion processing is
+in the handling of captured values. In Perl, when a subpattern is called
+recursively or as a subpattern (see the next section), it has no access to any
+values that were captured outside the recursion, whereas in PCRE these values
+can be referenced. Consider this pattern:</p>
+
+<quote><p> ^(.)(\1|a(?2))</p></quote>
+
+<p>In PCRE, this pattern matches "bab". The first capturing parentheses match "b",
+then in the second group, when the back reference \1 fails to match "b", the
+second alternative matches "a" and then recurses. In the recursion, \1 does
+now match "b" and so the whole match succeeds. In Perl, the pattern fails to
+match because inside the recursive call \1 cannot access the externally set
+value.</p>
</section>
<section><marker id="sect21"></marker><title>Subpatterns as subroutines</title>
-<p>If the syntax for a recursive subpattern reference (either by number or by
+<p>If the syntax for a recursive subpattern call (either by number or by
name) is used outside the parentheses to which it refers, it operates like a
-subroutine in a programming language. The "called" subpattern may be defined
+subroutine in a programming language. The called subpattern may be defined
before or after the reference. A numbered reference can be absolute or
relative, as in these examples:</p>
@@ -2708,23 +3279,40 @@ relative, as in these examples:</p>
<p>is used, it does match "sense and responsibility" as well as the other two
strings. Another example is given in the discussion of DEFINE above.</p>
-<p>Like recursive subpatterns, a "subroutine" call is always treated
-as an atomic group. That is, once it has matched some of the subject
-string, it is never re-entered, even if it contains untried
-alternatives and there is a subsequent matching failure.</p>
-
-<p>When a subpattern is used as a subroutine, processing options such as
-case-independence are fixed when the subpattern is defined. They cannot be
-changed for different calls. For example, consider this pattern:</p>
+<p>All subroutine calls, whether recursive or not, are always treated as atomic
+groups. That is, once a subroutine has matched some of the subject string, it
+is never re-entered, even if it contains untried alternatives and there is a
+subsequent matching failure. Any capturing parentheses that are set during the
+subroutine call revert to their previous values afterwards.</p>
+<p>Processing options such as case-independence are fixed when a subpattern is
+defined, so if it is used as a subroutine, such options cannot be changed for
+different calls. For example, consider this pattern:</p>
<quote><p> (abc)(?i:(?-1))</p></quote>
<p>It matches "abcabc". It does not match "abcABC" because the change of
processing option does not affect the called subpattern.</p>
-
</section>
+<section><marker id="sect22"></marker><title>Oniguruma subroutine syntax</title>
+<p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a name or
+a number enclosed either in angle brackets or single quotes, is an alternative
+syntax for referencing a subpattern as a subroutine, possibly recursively. Here
+are two of the examples used above, rewritten using this syntax:</p>
+<quote>
+ <p> (?&lt;pn&gt; \( ( (?&gt;[^()]+) | \g&lt;pn&gt; )* \) )</p>
+ <p> (sens|respons)e and \g'1'ibility</p>
+</quote>
+<p>PCRE supports an extension to Oniguruma: if a number is preceded by a
+plus or a minus sign it is taken as a relative reference. For example:</p>
+
+ <quote><p> (abc)(?i:\g&lt;-1&gt;)</p></quote>
+
+<p>Note that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax) are <i>not</i>
+synonymous. The former is a back reference; the latter is a subroutine call.</p>
+
+</section>
<!-- XXX C interface
<section> <marker id="sect22"><title>Callouts</title></marker>
@@ -2767,116 +3355,387 @@ documentation.</p>
<section><marker id="sect23"></marker><title>Backtracking control</title>
<p>Perl 5.10 introduced a number of "Special Backtracking Control Verbs", which
-are described in the Perl documentation as "experimental and subject to change
-or removal in a future version of Perl". It goes on to say: "Their usage in
-production code should be noted to avoid problems during upgrades." The same
+are still described in the Perl documentation as "experimental and subject to
+change or removal in a future version of Perl". It goes on to say: "Their usage
+in production code should be noted to avoid problems during upgrades." The same
remarks apply to the PCRE features described in this section.</p>
+<p>The new verbs make use of what was previously invalid syntax: an opening
+parenthesis followed by an asterisk. They are generally of the form
+(*VERB) or (*VERB:NAME). Some may take either form, possibly behaving
+differently depending on whether or not a name is present. A name is any
+sequence of characters that does not include a closing parenthesis. The maximum
+length of name is 255 in the 8-bit library and 65535 in the 16-bit and 32-bit
+libraries. If the name is empty, that is, if the closing parenthesis
+immediately follows the colon, the effect is as if the colon were not there.
+Any number of these verbs may occur in a pattern.</p>
+
<!-- XXX C interface
-<p>Since these verbs are specifically related to backtracking, they can be used
-only when the pattern is to be matched using <c>re:run/3</c>, which uses a
-backtracking algorithm. They cause an error if encountered by
-<c>pcre_dfa_exec()</c>.</p>
+<p>Since these verbs are specifically related to backtracking, most of them can be
+used only when the pattern is to be matched using one of the traditional
+matching functions, because these use a backtracking algorithm. With the
+exception of (*FAIL), which behaves like a failing negative assertion, the
+backtracking control verbs cause an error if encountered by a DFA matching
+function.</p>
-->
+<p>The behaviour of these verbs in
+repeated groups, assertions,
+and in subpatterns called as subroutines
+(whether or not recursively) is documented below.</p>
-<p>The new verbs make use of what was previously invalid syntax: an opening
-parenthesis followed by an asterisk. In Perl, they are generally of the form
-(*VERB:ARG) but PCRE does not support the use of arguments, so its general
-form is just (*VERB). Any number of these verbs may occur in a pattern. There
-are two kinds:</p>
+<p><em>Optimizations that affect backtracking verbs</em></p>
+
+<p>PCRE contains some optimizations that are used to speed up matching by running
+some checks at the start of each match attempt. For example, it may know the
+minimum length of matching subject, or that a particular character must be
+present. When one of these optimizations bypasses the running of a match, any
+included backtracking verbs will not, of course, be processed. You can suppress
+the start-of-match optimizations by setting the <c>no_start_optimize</c> option
+when calling <c>re:compile/2</c> or <c>re:run/3</c>, or by starting the
+pattern with (*NO_START_OPT).</p>
+<p>Experiments with Perl suggest that it too has similar optimizations, sometimes
+leading to anomalous results.</p>
<p><em>Verbs that act immediately</em></p>
-<p>The following verbs act as soon as they are encountered:</p>
+<p>The following verbs act as soon as they are encountered. They may not be
+followed by a name.</p>
-<quote><p> (*ACCEPT)</p></quote>
+<quote><p> (*ACCEPT)</p></quote>
<p>This verb causes the match to end successfully, skipping the remainder of the
-pattern. When inside a recursion, only the innermost pattern is ended
-immediately. PCRE differs from Perl in what happens if the (*ACCEPT) is inside
-capturing parentheses. In Perl, the data so far is captured: in PCRE no data is
-captured. For example:</p>
+pattern. However, when it is inside a subpattern that is called as a
+subroutine, only that subpattern is ended successfully. Matching then continues
+at the outer level. If (*ACCEPT) in triggered in a positive assertion, the
+assertion succeeds; in a negative assertion, the assertion fails.</p>
+
+<p>If (*ACCEPT) is inside capturing parentheses, the data so far is captured. For
+example:</p>
-<quote><p> A(A|B(*ACCEPT)|C)D</p></quote>
+<quote><p> A((?:A|B(*ACCEPT)|C)D)</p></quote>
-<p>This matches "AB", "AAD", or "ACD", but when it matches "AB", no data is
-captured.</p>
+<p>This matches "AB", "AAD", or "ACD"; when it matches "AB", "B" is captured by
+the outer parentheses.</p>
-<quote><p> (*FAIL) or (*F)</p></quote>
+<quote><p> (*FAIL) or (*F)</p></quote>
-<p>This verb causes the match to fail, forcing backtracking to occur. It is
+<p>This verb causes a matching failure, forcing backtracking to occur. It is
equivalent to (?!) but easier to read. The Perl documentation notes that it is
probably useful only when combined with (?{}) or (??{}). Those are, of course,
Perl features that are not present in PCRE. The nearest equivalent is the
callout feature, as for example in this pattern:</p>
-<quote><p> a+(?C)(*FAIL)</p></quote>
+<quote><p> a+(?C)(*FAIL)</p></quote>
<p>A match with the string "aaaa" always fails, but the callout is taken before
each backtrack happens (in this example, 10 times).</p>
-
+<p><em>Recording which path was taken</em></p>
+
+<p>There is one verb whose main purpose is to track how a match was arrived at,
+though it also has a secondary use in conjunction with advancing the match
+starting point (see (*SKIP) below).</p>
+
+<warning>
+<p>In Erlang, there is no interface to retrieve a mark with <c>re:run/{2,3]</c>,
+so only the secondary purpose is relevant to the Erlang programmer!</p>
+<p>The rest of this section is therefore deliberately not adapted for reading
+by the Erlang programmer, however the examples might help in understanding NAMES as
+they can be used by (*SKIP).</p>
+</warning>
+
+<quote><p> (*MARK:NAME) or (*:NAME)</p></quote>
+
+<p>A name is always required with this verb. There may be as many instances of
+(*MARK) as you like in a pattern, and their names do not have to be unique.</p>
+
+<p>When a match succeeds, the name of the last-encountered (*MARK:NAME),
+(*PRUNE:NAME), or (*THEN:NAME) on the matching path is passed back to the
+caller as described in the section entitled "Extra data for <c>pcre_exec()</c>"
+in the <c>pcreapi</c>
+documentation. Here is an example of <c>pcretest</c> output, where the /K
+modifier requests the retrieval and outputting of (*MARK) data:</p>
+<code>
+ re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
+ data&gt; XY
+ 0: XY
+ MK: A
+ XZ
+ 0: XZ
+ MK: B</code>
+
+<p>The (*MARK) name is tagged with "MK:" in this output, and in this example it
+indicates which of the two alternatives matched. This is a more efficient way
+of obtaining this information than putting each alternative in its own
+capturing parentheses.</p>
+
+<p>If a verb with a name is encountered in a positive assertion that is true, the
+name is recorded and passed back if it is the last-encountered. This does not
+happen for negative assertions or failing positive assertions.</p>
+
+<p>After a partial match or a failed match, the last encountered name in the
+entire match process is returned. For example:</p>
+<code>
+ re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
+ data&gt; XP
+ No match, mark = B</code>
+
+<p>Note that in this unanchored example the mark is retained from the match
+attempt that started at the letter "X" in the subject. Subsequent match
+attempts starting at "P" and then with an empty string do not get as far as the
+(*MARK) item, but nevertheless do not reset it.</p>
+
+<!--
+<p>If you are interested in (*MARK) values after failed matches, you should
+probably set the PCRE_NO_START_OPTIMIZE option
+(see above)
+to ensure that the match is always attempted.</p>
+-->
<p><em>Verbs that act after backtracking</em></p>
<p>The following verbs do nothing when they are encountered. Matching continues
-with what follows, but if there is no subsequent match, a failure is forced.
-The verbs differ in exactly what kind of failure occurs.</p>
-
-<quote><p> (*COMMIT)</p></quote>
-
-<p>This verb causes the whole match to fail outright if the rest of the pattern
-does not match. Even if the pattern is unanchored, no further attempts to find
-a match by advancing the start point take place. Once (*COMMIT) has been
-passed, <c>re:run/3</c> is committed to finding a match at the current
-starting point, or not at all. For example:</p>
+with what follows, but if there is no subsequent match, causing a backtrack to
+the verb, a failure is forced. That is, backtracking cannot pass to the left of
+the verb. However, when one of these verbs appears inside an atomic group or an
+assertion that is true, its effect is confined to that group, because once the
+group has been matched, there is never any backtracking into it. In this
+situation, backtracking can "jump back" to the left of the entire atomic group
+or assertion. (Remember also, as stated above, that this localization also
+applies in subroutine calls.)</p>
+
+<p>These verbs differ in exactly what kind of failure occurs when backtracking
+reaches them. The behaviour described below is what happens when the verb is
+not in a subroutine or an assertion. Subsequent sections cover these special
+cases.</p>
+
+<quote><p> (*COMMIT)</p></quote>
+
+<p>This verb, which may not be followed by a name, causes the whole match to fail
+outright if there is a later matching failure that causes backtracking to reach
+it. Even if the pattern is unanchored, no further attempts to find a match by
+advancing the starting point take place. If (*COMMIT) is the only backtracking
+verb that is encountered, once it has been passed <c>re:run/{2,3}</c> is
+committed to finding a match at the current starting point, or not at all. For
+example:</p>
-<quote><p> a+(*COMMIT)b</p></quote>
+<quote><p> a+(*COMMIT)b</p></quote>
<p>This matches "xxaab" but not "aacaab". It can be thought of as a kind of
-dynamic anchor, or "I've started, so I must finish."</p>
+dynamic anchor, or "I've started, so I must finish." The name of the most
+recently passed (*MARK) in the path is passed back when (*COMMIT) forces a
+match failure.</p>
-<quote><p> (*PRUNE)</p></quote>
+<p>If there is more than one backtracking verb in a pattern, a different one that
+follows (*COMMIT) may be triggered first, so merely passing (*COMMIT) during a
+match does not always guarantee that a match must be at this starting point.</p>
-<p>This verb causes the match to fail at the current position if the rest of the
-pattern does not match. If the pattern is unanchored, the normal "bumpalong"
-advance to the next starting character then happens. Backtracking can occur as
-usual to the left of (*PRUNE), or when matching to the right of (*PRUNE), but
-if there is no match to the right, backtracking cannot cross (*PRUNE).
-In simple cases, the use of (*PRUNE) is just an alternative to an atomic
-group or possessive quantifier, but there are some uses of (*PRUNE) that cannot
-be expressed in any other way.</p>
-
-<quote><p> (*SKIP)</p></quote>
-
-<p>This verb is like (*PRUNE), except that if the pattern is unanchored, the
-"bumpalong" advance is not to the next character, but to the position in the
-subject where (*SKIP) was encountered. (*SKIP) signifies that whatever text
-was matched leading up to it cannot be part of a successful match. Consider:</p>
-
-<quote><p> a+(*SKIP)b</p></quote>
+<p>Note that (*COMMIT) at the start of a pattern is not the same as an anchor,
+unless PCRE's start-of-match optimizations are turned off, as shown in this
+ example:</p>
+<code type="none">
+ 1&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list}]).
+ {match,["abc"]}
+ 2&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list},no_start_optimize]).
+ nomatch</code>
+
+<p>PCRE knows that any match must start with "a", so the optimization skips along
+the subject to "a" before running the first match attempt, which succeeds. When
+the optimization is disabled by the <c>no_start_optimize</c> option, the match
+starts at "x" and so the (*COMMIT) causes it to fail without trying any other
+starting points.</p>
+
+<quote><p> (*PRUNE) or (*PRUNE:NAME)</p></quote>
+
+<p>This verb causes the match to fail at the current starting position in the
+subject if there is a later matching failure that causes backtracking to reach
+it. If the pattern is unanchored, the normal "bumpalong" advance to the next
+starting character then happens. Backtracking can occur as usual to the left of
+(*PRUNE), before it is reached, or when matching to the right of (*PRUNE), but
+if there is no match to the right, backtracking cannot cross (*PRUNE). In
+simple cases, the use of (*PRUNE) is just an alternative to an atomic group or
+possessive quantifier, but there are some uses of (*PRUNE) that cannot be
+expressed in any other way. In an anchored pattern (*PRUNE) has the same effect
+as (*COMMIT).</p>
+
+<p>The behaviour of (*PRUNE:NAME) is the not the same as (*MARK:NAME)(*PRUNE).
+It is like (*MARK:NAME) in that the name is remembered for passing back to the
+caller. However, (*SKIP:NAME) searches only for names set with (*MARK).</p>
+
+<warning>
+<p>The fact that (*PRUNE:NAME) remembers the name is useless to the Erlang programmer,
+as names can not be retrieved.</p>
+</warning>
+
+<quote><p> (*SKIP)</p></quote>
+
+<p>This verb, when given without a name, is like (*PRUNE), except that if the
+pattern is unanchored, the "bumpalong" advance is not to the next character,
+but to the position in the subject where (*SKIP) was encountered. (*SKIP)
+signifies that whatever text was matched leading up to it cannot be part of a
+successful match. Consider:</p>
+
+<quote><p> a+(*SKIP)b</p></quote>
<p>If the subject is "aaaac...", after the first match attempt fails (starting at
the first character in the string), the starting point skips on to start the
-next attempt at "c". Note that a possessive quantifier does not have the same
-effect in this example; although it would suppress backtracking during the
+next attempt at "c". Note that a possessive quantifer does not have the same
+effect as this example; although it would suppress backtracking during the
first match attempt, the second attempt would start at the second character
instead of skipping on to "c".</p>
-<quote><p> (*THEN)</p></quote>
+<quote><p> (*SKIP:NAME)</p></quote>
+
+<p>When (*SKIP) has an associated name, its behaviour is modified. When it is
+triggered, the previous path through the pattern is searched for the most
+recent (*MARK) that has the same name. If one is found, the "bumpalong" advance
+is to the subject position that corresponds to that (*MARK) instead of to where
+(*SKIP) was encountered. If no (*MARK) with a matching name is found, the
+(*SKIP) is ignored.</p>
-<p>This verb causes a skip to the next alternation if the rest of the pattern does
-not match. That is, it cancels pending backtracking, but only within the
-current alternation. Its name comes from the observation that it can be used
-for a pattern-based if-then-else block:</p>
+<p>Note that (*SKIP:NAME) searches only for names set by (*MARK:NAME). It ignores
+names that are set by (*PRUNE:NAME) or (*THEN:NAME).</p>
-<quote><p> ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...</p></quote>
+<quote><p> (*THEN) or (*THEN:NAME)</p></quote>
+
+<p>This verb causes a skip to the next innermost alternative when backtracking
+reaches it. That is, it cancels any further backtracking within the current
+alternative. Its name comes from the observation that it can be used for a
+pattern-based if-then-else block:</p>
+
+<quote><p> ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...</p></quote>
<p>If the COND1 pattern matches, FOO is tried (and possibly further items after
-the end of the group if FOO succeeds); on failure the matcher skips to the
-second alternative and tries COND2, without backtracking into COND1. If (*THEN)
-is used outside of any alternation, it acts exactly like (*PRUNE).</p>
+the end of the group if FOO succeeds); on failure, the matcher skips to the
+second alternative and tries COND2, without backtracking into COND1. If that
+succeeds and BAR fails, COND3 is tried. If subsequently BAZ fails, there are no
+more alternatives, so there is a backtrack to whatever came before the entire
+group. If (*THEN) is not inside an alternation, it acts like (*PRUNE).</p>
+
+<p>The behaviour of (*THEN:NAME) is the not the same as (*MARK:NAME)(*THEN).
+It is like (*MARK:NAME) in that the name is remembered for passing back to the
+caller. However, (*SKIP:NAME) searches only for names set with (*MARK).</p>
+
+<warning>
+<p>The fact that (*THEN:NAME) remembers the name is useless to the Erlang programmer,
+as names can not be retrieved.</p>
+</warning>
+
+<p>A subpattern that does not contain a | character is just a part of the
+enclosing alternative; it is not a nested alternation with only one
+alternative. The effect of (*THEN) extends beyond such a subpattern to the
+enclosing alternative. Consider this pattern, where A, B, etc. are complex
+pattern fragments that do not contain any | characters at this level:</p>
+
+<quote><p> A (B(*THEN)C) | D</p></quote>
+
+<p>If A and B are matched, but there is a failure in C, matching does not
+backtrack into A; instead it moves to the next alternative, that is, D.
+However, if the subpattern containing (*THEN) is given an alternative, it
+behaves differently:</p>
+
+<quote><p> A (B(*THEN)C | (*FAIL)) | D</p></quote>
+
+<p>The effect of (*THEN) is now confined to the inner subpattern. After a failure
+in C, matching moves to (*FAIL), which causes the whole subpattern to fail
+because there are no more alternatives to try. In this case, matching does now
+backtrack into A.</p>
+
+<p>Note that a conditional subpattern is not considered as having two
+alternatives, because only one is ever used. In other words, the | character in
+a conditional subpattern has a different meaning. Ignoring white space,
+consider:</p>
+
+<quote><p> ^.*? (?(?=a) a | b(*THEN)c )</p></quote>
+
+<p>If the subject is "ba", this pattern does not match. Because .*? is ungreedy,
+it initially matches zero characters. The condition (?=a) then fails, the
+character "b" is matched, but "c" is not. At this point, matching does not
+backtrack to .*? as might perhaps be expected from the presence of the |
+character. The conditional subpattern is part of the single alternative that
+comprises the whole pattern, and so the match fails. (If there was a backtrack
+into .*?, allowing it to match "b", the match would succeed.)</p>
+
+<p>The verbs just described provide four different "strengths" of control when
+subsequent matching fails. (*THEN) is the weakest, carrying on the match at the
+next alternative. (*PRUNE) comes next, failing the match at the current
+starting position, but allowing an advance to the next character (for an
+unanchored pattern). (*SKIP) is similar, except that the advance may be more
+than one character. (*COMMIT) is the strongest, causing the entire match to
+fail.</p>
+
+
+<p><em>More than one backtracking verb</em></p>
+
+<p>If more than one backtracking verb is present in a pattern, the one that is
+backtracked onto first acts. For example, consider this pattern, where A, B,
+etc. are complex pattern fragments:</p>
+
+<quote><p> (A(*COMMIT)B(*THEN)C|ABD)</p></quote>
+
+<p>If A matches but B fails, the backtrack to (*COMMIT) causes the entire match to
+fail. However, if A and B match, but C fails, the backtrack to (*THEN) causes
+the next alternative (ABD) to be tried. This behaviour is consistent, but is
+not always the same as Perl's. It means that if two or more backtracking verbs
+appear in succession, all the the last of them has no effect. Consider this
+example:</p>
+
+<quote><p> ...(*COMMIT)(*PRUNE)...</p></quote>
+
+<p>If there is a matching failure to the right, backtracking onto (*PRUNE) cases
+it to be triggered, and its action is taken. There can never be a backtrack
+onto (*COMMIT).</p>
+
+<p><em>Backtracking verbs in repeated groups</em></p>
+
+<p>PCRE differs from Perl in its handling of backtracking verbs in repeated
+groups. For example, consider:</p>
+
+<quote><p> /(a(*COMMIT)b)+ac/</p></quote>
+
+<p>If the subject is "abac", Perl matches, but PCRE fails because the (*COMMIT) in
+the second repeat of the group acts.</p>
+
+<p><em>Backtracking verbs in assertions</em></p>
+
+<p>(*FAIL) in an assertion has its normal effect: it forces an immediate backtrack.</p>
+
+<p>(*ACCEPT) in a positive assertion causes the assertion to succeed without any
+further processing. In a negative assertion, (*ACCEPT) causes the assertion to
+fail without any further processing.</p>
+
+<p>The other backtracking verbs are not treated specially if they appear in a
+positive assertion. In particular, (*THEN) skips to the next alternative in the
+innermost enclosing group that has alternations, whether or not this is within
+the assertion.</p>
+
+<p>Negative assertions are, however, different, in order to ensure that changing a
+positive assertion into a negative assertion changes its result. Backtracking
+into (*COMMIT), (*SKIP), or (*PRUNE) causes a negative assertion to be true,
+without considering any further alternative branches in the assertion.
+Backtracking into (*THEN) causes it to skip to the next enclosing alternative
+within the assertion (the normal behaviour), but if the assertion does not have
+such an alternative, (*THEN) behaves like (*PRUNE).</p>
+
+<p><em>Backtracking verbs in subroutines</em></p>
+
+<p>These behaviours occur whether or not the subpattern is called recursively.
+Perl's treatment of subroutines is different in some cases.</p>
+
+<p>(*FAIL) in a subpattern called as a subroutine has its normal effect: it forces
+an immediate backtrack.</p>
+
+<p>(*ACCEPT) in a subpattern called as a subroutine causes the subroutine match to
+succeed without any further processing. Matching then continues after the
+subroutine call.</p>
+
+<p>(*COMMIT), (*SKIP), and (*PRUNE) in a subpattern called as a subroutine cause
+the subroutine match to fail.</p>
+
+<p>(*THEN) skips to the next alternative in the innermost enclosing group within
+the subpattern that has alternatives. If there is no such group within the
+subpattern, (*THEN) causes the subroutine match to fail.</p>
</section>
diff --git a/lib/stdlib/src/dets.erl b/lib/stdlib/src/dets.erl
index d743467e97..44dad04f43 100644
--- a/lib/stdlib/src/dets.erl
+++ b/lib/stdlib/src/dets.erl
@@ -951,10 +951,10 @@ do_trav(Proc, Acc, Fun) ->
Error
end.
-do_trav(#dets_cont{bin = eof}, _Proc, Acc, _Fun) ->
- Acc;
do_trav(State, Proc, Acc, Fun) ->
case req(Proc, {match_init, State, safe}) of
+ '$end_of_table'->
+ Acc;
{cont, {Bins, NewState}} ->
do_trav_bins(NewState, Proc, Acc, Fun, lists:reverse(Bins));
Error ->
diff --git a/lib/stdlib/src/digraph.erl b/lib/stdlib/src/digraph.erl
index e3f87d2c57..78f74631dc 100644
--- a/lib/stdlib/src/digraph.erl
+++ b/lib/stdlib/src/digraph.erl
@@ -36,7 +36,7 @@
-export([get_short_path/3, get_short_cycle/2]).
--export_type([digraph/0, d_type/0, vertex/0]).
+-export_type([digraph/0, d_type/0, vertex/0, edge/0]).
-record(digraph, {vtab = notable :: ets:tab(),
etab = notable :: ets:tab(),
diff --git a/lib/stdlib/src/edlin.erl b/lib/stdlib/src/edlin.erl
index 6318c229be..be9a4f5107 100644
--- a/lib/stdlib/src/edlin.erl
+++ b/lib/stdlib/src/edlin.erl
@@ -78,6 +78,14 @@ edit([C|Cs], P, {Bef,Aft}, Prefix, Rs0) ->
case key_map(C, Prefix) of
meta ->
edit(Cs, P, {Bef,Aft}, meta, Rs0);
+ meta_o ->
+ edit(Cs, P, {Bef,Aft}, meta_o, Rs0);
+ meta_csi ->
+ edit(Cs, P, {Bef,Aft}, meta_csi, Rs0);
+ meta_meta ->
+ edit(Cs, P, {Bef,Aft}, meta_meta, Rs0);
+ {csi, _} = Csi ->
+ edit(Cs, P, {Bef,Aft}, Csi, Rs0);
meta_left_sq_bracket ->
edit(Cs, P, {Bef,Aft}, meta_left_sq_bracket, Rs0);
search_meta ->
@@ -177,6 +185,7 @@ key_map($\^U, none) -> ctlu;
key_map($\^], none) -> auto_blink;
key_map($\^X, none) -> ctlx;
key_map($\^Y, none) -> yank;
+key_map($\^W, none) -> backward_kill_word;
key_map($\e, none) -> meta;
key_map($), Prefix) when Prefix =/= meta,
Prefix =/= search,
@@ -197,11 +206,29 @@ key_map($d, meta) -> kill_word;
key_map($f, meta) -> forward_word;
key_map($t, meta) -> transpose_word;
key_map($y, meta) -> yank_pop;
+key_map($O, meta) -> meta_o;
+key_map($H, meta_o) -> beginning_of_line;
+key_map($F, meta_o) -> end_of_line;
key_map($\177, none) -> backward_delete_char;
key_map($\177, meta) -> backward_kill_word;
key_map($[, meta) -> meta_left_sq_bracket;
key_map($D, meta_left_sq_bracket) -> backward_char;
key_map($C, meta_left_sq_bracket) -> forward_char;
+% support a few <CTRL>+<CURSOR LEFT|RIGHT> combinations...
+% - forward: \e\e[C, \e[5C, \e[1;5C
+% - backward: \e\e[D, \e[5D, \e[1;5D
+key_map($\e, meta) -> meta_meta;
+key_map($[, meta_meta) -> meta_csi;
+key_map($C, meta_csi) -> forward_word;
+key_map($D, meta_csi) -> backward_word;
+key_map($1, meta_left_sq_bracket) -> {csi, "1"};
+key_map($5, meta_left_sq_bracket) -> {csi, "5"};
+key_map($5, {csi, "1;"}) -> {csi, "1;5"};
+key_map($C, {csi, "5"}) -> forward_word;
+key_map($C, {csi, "1;5"}) -> forward_word;
+key_map($D, {csi, "5"}) -> backward_word;
+key_map($D, {csi, "1;5"}) -> backward_word;
+key_map($;, {csi, "1"}) -> {csi, "1;"};
key_map(C, none) when C >= $\s ->
{insert,C};
%% for search, we need smarter line handling and so
@@ -362,6 +389,9 @@ do_op(end_of_line, Bef, [C|Aft], Rs) ->
{{reverse(Aft, [C|Bef]),[]},[{move_rel,length(Aft)+1}|Rs]};
do_op(end_of_line, Bef, [], Rs) ->
{{Bef,[]},Rs};
+do_op(ctlu, Bef, Aft, Rs) ->
+ put(kill_buffer, Bef),
+ {{[], Aft}, [{delete_chars, -length(Bef)} | Rs]};
do_op(beep, Bef, Aft, Rs) ->
{{Bef,Aft},[beep|Rs]};
do_op(_, Bef, Aft, Rs) ->
diff --git a/lib/stdlib/src/erl_compile.erl b/lib/stdlib/src/erl_compile.erl
index 8c3d59467b..ed8fea5d78 100644
--- a/lib/stdlib/src/erl_compile.erl
+++ b/lib/stdlib/src/erl_compile.erl
@@ -21,10 +21,12 @@
-include("erl_compile.hrl").
-include("file.hrl").
--export([compile_cmdline/1]).
+-export([compile_cmdline/0]).
-export_type([cmd_line_arg/0]).
+-define(STDERR, standard_error). %Macro to avoid misspellings.
+
%% Mapping from extension to {M,F} to run the correct compiler.
compiler(".erl") -> {compile, compile};
@@ -47,9 +49,10 @@ compiler(_) -> no.
-type cmd_line_arg() :: atom() | string().
--spec compile_cmdline([cmd_line_arg()]) -> no_return().
+-spec compile_cmdline() -> no_return().
-compile_cmdline(List) ->
+compile_cmdline() ->
+ List = init:get_plain_arguments(),
case compile(List) of
ok -> my_halt(0);
error -> my_halt(1);
@@ -67,8 +70,12 @@ compile(List) ->
receive
{'EXIT', Pid, {compiler_result, Result}} ->
Result;
+ {'EXIT', Pid, {compiler_error, Error}} ->
+ io:put_chars(?STDERR, Error),
+ io:nl(?STDERR),
+ error;
{'EXIT', Pid, Reason} ->
- io:format("Runtime error: ~tp~n", [Reason]),
+ io:format(?STDERR, "Runtime error: ~tp~n", [Reason]),
error
end.
@@ -83,66 +90,178 @@ compiler_runner(List) ->
%% Parses the first part of the option list.
-compile1(['@cwd', Cwd|Rest]) ->
- CwdL = atom_to_list(Cwd),
- compile1(Rest, CwdL, #options{outdir=CwdL, cwd=CwdL});
compile1(Args) ->
- %% From R13B02, the @cwd argument is optional.
{ok, Cwd} = file:get_cwd(),
- compile1(Args, Cwd, #options{outdir=Cwd, cwd=Cwd}).
+ compile1(Args, #options{outdir=Cwd,cwd=Cwd}).
%% Parses all options.
-compile1(['@i', Dir|Rest], Cwd, Opts) ->
+compile1(["--"|Files], Opts) ->
+ compile2(Files, Opts);
+compile1(["-"++Option|T], Opts) ->
+ parse_generic_option(Option, T, Opts);
+compile1(["+"++Option|Rest], Opts) ->
+ Term = make_term(Option),
+ Specific = Opts#options.specific,
+ compile1(Rest, Opts#options{specific=[Term|Specific]});
+compile1(Files, Opts) ->
+ compile2(Files, Opts).
+
+parse_generic_option("b"++Opt, T0, Opts) ->
+ {OutputType,T} = get_option("b", Opt, T0),
+ compile1(T, Opts#options{output_type=list_to_atom(OutputType)});
+parse_generic_option("D"++Opt, T0, #options{defines=Defs}=Opts) ->
+ {Val0,T} = get_option("D", Opt, T0),
+ {Key0,Val1} = split_at_equals(Val0, []),
+ Key = list_to_atom(Key0),
+ case Val1 of
+ [] ->
+ compile1(T, Opts#options{defines=[Key|Defs]});
+ Val2 ->
+ Val = make_term(Val2),
+ compile1(T, Opts#options{defines=[{Key,Val}|Defs]})
+ end;
+parse_generic_option("help", _, _Opts) ->
+ usage();
+parse_generic_option("I"++Opt, T0, #options{cwd=Cwd}=Opts) ->
+ {Dir,T} = get_option("I", Opt, T0),
AbsDir = filename:absname(Dir, Cwd),
- compile1(Rest, Cwd, Opts#options{includes=[AbsDir|Opts#options.includes]});
-compile1(['@outdir', Dir|Rest], Cwd, Opts) ->
+ compile1(T, Opts#options{includes=[AbsDir|Opts#options.includes]});
+parse_generic_option("M"++Opt, T0, #options{specific=Spec}=Opts) ->
+ case parse_dep_option(Opt, T0) of
+ error ->
+ error;
+ {SpecOpts,T} ->
+ compile1(T, Opts#options{specific=SpecOpts++Spec})
+ end;
+parse_generic_option("o"++Opt, T0, #options{cwd=Cwd}=Opts) ->
+ {Dir,T} = get_option("o", Opt, T0),
AbsName = filename:absname(Dir, Cwd),
case file_or_directory(AbsName) of
file ->
- compile1(Rest, Cwd, Opts#options{outfile=AbsName});
+ compile1(T, Opts#options{outfile=AbsName});
directory ->
- compile1(Rest, Cwd, Opts#options{outdir=AbsName})
+ compile1(T, Opts#options{outdir=AbsName})
end;
-compile1(['@d', Name|Rest], Cwd, Opts) ->
- Defines = Opts#options.defines,
- compile1(Rest, Cwd, Opts#options{defines=[Name|Defines]});
-compile1(['@dv', Name, Term|Rest], Cwd, Opts) ->
- Defines = Opts#options.defines,
- Value = make_term(atom_to_list(Term)),
- compile1(Rest, Cwd, Opts#options{defines=[{Name, Value}|Defines]});
-compile1(['@warn', Level0|Rest], Cwd, Opts) ->
- case catch list_to_integer(atom_to_list(Level0)) of
- Level when is_integer(Level) ->
- compile1(Rest, Cwd, Opts#options{warning=Level});
+parse_generic_option("O"++Opt, T, Opts) ->
+ case Opt of
+ "" ->
+ compile1(T, Opts#options{optimize=1});
_ ->
- compile1(Rest, Cwd, Opts)
+ Term = make_term(Opt),
+ compile1(T, Opts#options{optimize=Term})
end;
-compile1(['@verbose', false|Rest], Cwd, Opts) ->
- compile1(Rest, Cwd, Opts#options{verbose=false});
-compile1(['@verbose', true|Rest], Cwd, Opts) ->
- compile1(Rest, Cwd, Opts#options{verbose=true});
-compile1(['@optimize', Atom|Rest], Cwd, Opts) ->
- Term = make_term(atom_to_list(Atom)),
- compile1(Rest, Cwd, Opts#options{optimize=Term});
-compile1(['@option', Atom|Rest], Cwd, Opts) ->
- Term = make_term(atom_to_list(Atom)),
- Specific = Opts#options.specific,
- compile1(Rest, Cwd, Opts#options{specific=[Term|Specific]});
-compile1(['@output_type', OutputType|Rest], Cwd, Opts) ->
- compile1(Rest, Cwd, Opts#options{output_type=OutputType});
-compile1(['@files'|Rest], Cwd, Opts) ->
- Includes = lists:reverse(Opts#options.includes),
- compile2(Rest, Cwd, Opts#options{includes=Includes}).
-
-compile2(Files, Cwd, Opts) ->
- case {Opts#options.outfile, length(Files)} of
+parse_generic_option("v", T, Opts) ->
+ compile1(T, Opts#options{verbose=true});
+parse_generic_option("W"++Warn, T, #options{specific=Spec}=Opts) ->
+ case Warn of
+ "all" ->
+ compile1(T, Opts#options{warning=999});
+ "error" ->
+ compile1(T, Opts#options{specific=[warnings_as_errors|Spec]});
+ "" ->
+ compile1(T, Opts#options{warning=1});
+ _ ->
+ try list_to_integer(Warn) of
+ Level ->
+ compile1(T, Opts#options{warning=Level})
+ catch
+ error:badarg ->
+ usage()
+ end
+ end;
+parse_generic_option("E", T, #options{specific=Spec}=Opts) ->
+ compile1(T, Opts#options{specific=['E'|Spec]});
+parse_generic_option("P", T, #options{specific=Spec}=Opts) ->
+ compile1(T, Opts#options{specific=['P'|Spec]});
+parse_generic_option("S", T, #options{specific=Spec}=Opts) ->
+ compile1(T, Opts#options{specific=['S'|Spec]});
+parse_generic_option(Option, _T, _Opts) ->
+ io:format(?STDERR, "Unknown option: -~s\n", [Option]),
+ usage().
+
+parse_dep_option("", T) ->
+ {[makedep,{makedep_output,standard_io}],T};
+parse_dep_option("D", T) ->
+ {[makedep],T};
+parse_dep_option("F"++Opt, T0) ->
+ {File,T} = get_option("MF", Opt, T0),
+ {[makedep,{makedep_output,File}],T};
+parse_dep_option("G", T) ->
+ {[makedep_add_missing],T};
+parse_dep_option("P", T) ->
+ {[makedep_phony],T};
+parse_dep_option("Q"++Opt, T0) ->
+ {Target,T} = get_option("MT", Opt, T0),
+ {[makedep_quote_target,{makedep_target,Target}],T};
+parse_dep_option("T"++Opt, T0) ->
+ {Target,T} = get_option("MT", Opt, T0),
+ {[{makedep_target,Target}],T};
+parse_dep_option(Opt, _T) ->
+ io:format(?STDERR, "Unknown option: -M~s\n", [Opt]),
+ usage().
+
+usage() ->
+ H = [{"-b type","type of output file (e.g. beam)"},
+ {"-d","turn on debugging of erlc itself"},
+ {"-Dname","define name"},
+ {"-Dname=value","define name to have value"},
+ {"-help","shows this help text"},
+ {"-I path","where to search for include files"},
+ {"-M","generate a rule for make(1) describing the dependencies"},
+ {"-MF file","write the dependencies to 'file'"},
+ {"-MT target","change the target of the rule emitted by dependency "
+ "generation"},
+ {"-MQ target","same as -MT but quote characters special to make(1)"},
+ {"-MG","consider missing headers as generated files and add them to "
+ "the dependencies"},
+ {"-MP","add a phony target for each dependency"},
+ {"-MD","same as -M -MT file (with default 'file')"},
+ {"-o name","name output directory or file"},
+ {"-pa path","add path to the front of Erlang's code path"},
+ {"-pz path","add path to the end of Erlang's code path"},
+ {"-smp","compile using SMP emulator"},
+ {"-v","verbose compiler output"},
+ {"-Werror","make all warnings into errors"},
+ {"-W0","disable warnings"},
+ {"-Wnumber","set warning level to number"},
+ {"-Wall","enable all warnings"},
+ {"-W","enable warnings (default; same as -W1)"},
+ {"-E","generate listing of expanded code (Erlang compiler)"},
+ {"-S","generate assembly listing (Erlang compiler)"},
+ {"-P","generate listing of preprocessed code (Erlang compiler)"},
+ {"+term","pass the Erlang term unchanged to the compiler"}],
+ io:put_chars(?STDERR,
+ ["Usage: erlc [Options] file.ext ...\n",
+ "Options:\n",
+ [io_lib:format("~-14s ~s\n", [K,D]) || {K,D} <- H]]),
+ error.
+
+get_option(_Name, [], [[C|_]=Option|T]) when C =/= $- ->
+ {Option,T};
+get_option(_Name, [_|_]=Option, T) ->
+ {Option,T};
+get_option(Name, _, _) ->
+ exit({compiler_error,"No value given to -"++Name++" option"}).
+
+split_at_equals([$=|T], Acc) ->
+ {lists:reverse(Acc),T};
+split_at_equals([H|T], Acc) ->
+ split_at_equals(T, [H|Acc]);
+split_at_equals([], Acc) ->
+ {lists:reverse(Acc),[]}.
+
+compile2(Files, #options{cwd=Cwd,includes=Incl,outfile=Outfile}=Opts0) ->
+ Opts = Opts0#options{includes=lists:reverse(Incl)},
+ case {Outfile,length(Files)} of
{"", _} ->
compile3(Files, Cwd, Opts);
{[_|_], 1} ->
compile3(Files, Cwd, Opts);
{[_|_], _N} ->
- io:format("Output file name given, but more than one input file.~n"),
+ io:put_chars(?STDERR,
+ "Output file name given, "
+ "but more than one input file.\n"),
error
end.
@@ -170,23 +289,25 @@ compile3([], _Cwd, _Options) -> ok.
%% Invokes the appropriate compiler, depending on the file extension.
compile_file("", Input, _Output, _Options) ->
- io:format("File has no extension: ~ts~n", [Input]),
+ io:format(?STDERR, "File has no extension: ~ts~n", [Input]),
error;
compile_file(Ext, Input, Output, Options) ->
case compiler(Ext) of
no ->
- io:format("Unknown extension: '~ts'\n", [Ext]),
+ io:format(?STDERR, "Unknown extension: '~ts'\n", [Ext]),
error;
{M, F} ->
case catch M:F(Input, Output, Options) of
ok -> ok;
error -> error;
{'EXIT',Reason} ->
- io:format("Compiler function ~w:~w/3 failed:\n~p~n",
+ io:format(?STDERR,
+ "Compiler function ~w:~w/3 failed:\n~p~n",
[M,F,Reason]),
error;
Other ->
- io:format("Compiler function ~w:~w/3 returned:\n~p~n",
+ io:format(?STDERR,
+ "Compiler function ~w:~w/3 returned:\n~p~n",
[M,F,Other]),
error
end
@@ -215,10 +336,10 @@ make_term(Str) ->
case erl_parse:parse_term(Tokens ++ [{dot, 1}]) of
{ok, Term} -> Term;
{error, {_,_,Reason}} ->
- io:format("~ts: ~ts~n", [Reason, Str]),
+ io:format(?STDERR, "~ts: ~ts~n", [Reason, Str]),
throw(error)
end;
{error, {_,_,Reason}, _} ->
- io:format("~ts: ~ts~n", [Reason, Str]),
+ io:format(?STDERR, "~ts: ~ts~n", [Reason, Str]),
throw(error)
end.
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 573b05e4e2..bcf3ccef3b 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -1955,12 +1955,10 @@ expr({string,_Line,_S}, _Vt, St) -> {[],St};
expr({nil,_Line}, _Vt, St) -> {[],St};
expr({cons,_Line,H,T}, Vt, St) ->
expr_list([H,T], Vt, St);
-expr({lc,_Line,E,Qs}, Vt0, St0) ->
- {Vt,St} = handle_comprehension(E, Qs, Vt0, St0),
- {vtold(Vt, Vt0),St}; %Don't export local variables
-expr({bc,_Line,E,Qs}, Vt0, St0) ->
- {Vt,St} = handle_comprehension(E, Qs, Vt0, St0),
- {vtold(Vt,Vt0),St}; %Don't export local variables
+expr({lc,_Line,E,Qs}, Vt, St) ->
+ handle_comprehension(E, Qs, Vt, St);
+expr({bc,_Line,E,Qs}, Vt, St) ->
+ handle_comprehension(E, Qs, Vt, St);
expr({tuple,_Line,Es}, Vt, St) ->
expr_list(Es, Vt, St);
expr({record_index,Line,Name,Field}, _Vt, St) ->
@@ -2014,8 +2012,7 @@ expr({'fun',Line,Body}, Vt, St) ->
%%No one can think funs export!
case Body of
{clauses,Cs} ->
- {Bvt, St1} = fun_clauses(Cs, Vt, St),
- {vtupdate(Bvt, Vt), St1};
+ fun_clauses(Cs, Vt, St);
{function,F,A} ->
%% BifClash - Fun expression
%% N.B. Only allows BIFs here as well, NO IMPORTS!!
@@ -2113,12 +2110,12 @@ expr({'try',Line,Es,Scs,Ccs,As}, Vt, St0) ->
{Evt0,St1} = exprs(Es, Vt, St0),
TryLine = {'try',Line},
Uvt = vtunsafe(vtnames(vtnew(Evt0, Vt)), TryLine, []),
- Evt1 = vtupdate(Uvt, vtupdate(Evt0, Vt)),
- {Sccs,St2} = icrt_clauses(Scs++Ccs, TryLine, Evt1, St1),
+ Evt1 = vtupdate(Uvt, vtsubtract(Evt0, Uvt)),
+ {Sccs,St2} = icrt_clauses(Scs++Ccs, TryLine, vtupdate(Evt1, Vt), St1),
Rvt0 = Sccs,
Rvt1 = vtupdate(vtunsafe(vtnames(vtnew(Rvt0, Vt)), TryLine, []), Rvt0),
Evt2 = vtmerge(Evt1, Rvt1),
- {Avt0,St} = exprs(As, Evt2, St2),
+ {Avt0,St} = exprs(As, vtupdate(Evt2, Vt), St2),
Avt1 = vtupdate(vtunsafe(vtnames(vtnew(Avt0, Vt)), TryLine, []), Avt0),
Avt = vtmerge(Evt2, Avt1),
{Avt,St};
@@ -2152,10 +2149,11 @@ expr({remote,Line,_M,_F}, _Vt, St) ->
%% {UsedVarTable,State}
expr_list(Es, Vt, St) ->
- foldl(fun (E, {Esvt,St0}) ->
- {Evt,St1} = expr(E, Vt, St0),
- {vtmerge(Evt, Esvt),St1}
- end, {[],St}, Es).
+ {Vt1,St1} = foldl(fun (E, {Esvt,St0}) ->
+ {Evt,St1} = expr(E, Vt, St0),
+ {vtmerge_pat(Evt, Esvt),St1}
+ end, {[],St}, Es),
+ {vtmerge(vtnew(Vt1, Vt), vtold(Vt1, Vt)),St1}.
record_expr(Line, Rec, Vt, St0) ->
St1 = warn_invalid_record(Line, Rec, St0),
@@ -2312,7 +2310,7 @@ check_fields(Fs, Name, Fields, Vt, St0, CheckFun) ->
check_field({record_field,Lf,{atom,La,F},Val}, Name, Fields,
Vt, St, Sfs, CheckFun) ->
case member(F, Sfs) of
- true -> {Sfs,{Vt,add_error(Lf, {redefine_field,Name,F}, St)}};
+ true -> {Sfs,{[],add_error(Lf, {redefine_field,Name,F}, St)}};
false ->
{[F|Sfs],
case find_field(F, Fields) of
@@ -2845,7 +2843,9 @@ icrt_export(Csvt, Vt, In, St) ->
Uvt = vtmerge(Evt, Unused),
%% Make exported and unsafe unused variables unused in subsequent code:
Vt2 = vtmerge(Uvt, vtsubtract(Vt1, Uvt)),
- {Vt2,St}.
+ %% Forget about old variables which were not used:
+ Vt3 = vtmerge(vtnew(Vt2, Vt), vt_no_unused(vtold(Vt2, Vt))),
+ {Vt3,St}.
handle_comprehension(E, Qs, Vt0, St0) ->
{Vt1, Uvt, St1} = lc_quals(Qs, Vt0, St0),
@@ -2858,7 +2858,11 @@ handle_comprehension(E, Qs, Vt0, St0) ->
%% Local variables that have not been shadowed.
{_,St} = check_unused_vars(Vt2, Vt0, St4),
Vt3 = vtmerge(vtsubtract(Vt2, Uvt), Uvt),
- {Vt3,St}.
+ %% Don't export local variables.
+ Vt4 = vtold(Vt3, Vt0),
+ %% Forget about old variables which were not used.
+ Vt5 = vt_no_unused(Vt4),
+ {Vt5,St}.
%% lc_quals(Qualifiers, ImportVarTable, State) ->
%% {VarTable,ShadowedVarTable,State}
@@ -2939,7 +2943,7 @@ fun_clauses(Cs, Vt, St) ->
{Cvt,St1} = fun_clause(C, Vt, St0),
{vtmerge(Cvt, Bvt0),St1}
end, {[],St#lint{recdef_top = false}}, Cs),
- {Bvt,St2#lint{recdef_top = OldRecDef}}.
+ {vt_no_unused(vtold(Bvt, Vt)),St2#lint{recdef_top = OldRecDef}}.
fun_clause({clause,_Line,H,G,B}, Vt0, St0) ->
{Hvt,Binvt,St1} = head(H, Vt0, [], St0), % No imported pattern variables
@@ -3200,6 +3204,8 @@ vt_no_unsafe(Vt) -> [V || {_,{S,_U,_L}}=V <- Vt,
_ -> true
end].
+vt_no_unused(Vt) -> [V || {_,{_,U,_L}}=V <- Vt, U =/= unused].
+
%% vunion(VarTable1, VarTable2) -> [VarName].
%% vunion([VarTable]) -> [VarName].
%% vintersection(VarTable1, VarTable2) -> [VarName].
@@ -3238,7 +3244,8 @@ modify_line(T, F0) ->
%% Forms.
modify_line1({function,F,A}, _Mf) -> {function,F,A};
-modify_line1({function,M,F,A}, _Mf) -> {function,M,F,A};
+modify_line1({function,M,F,A}, Mf) ->
+ {function,modify_line1(M, Mf),modify_line1(F, Mf),modify_line1(A, Mf)};
modify_line1({attribute,L,record,{Name,Fields}}, Mf) ->
{attribute,Mf(L),record,{Name,modify_line1(Fields, Mf)}};
modify_line1({attribute,L,spec,{Fun,Types}}, Mf) ->
diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl
index a85673aa1a..6776f3deaa 100644
--- a/lib/stdlib/src/gen_server.erl
+++ b/lib/stdlib/src/gen_server.erl
@@ -217,7 +217,7 @@ reply({To, Tag}, Reply) ->
catch To ! {Tag, Reply}.
%% -----------------------------------------------------------------
-%% Asyncronous broadcast, returns nothing, it's just send'n prey
+%% Asynchronous broadcast, returns nothing, it's just send 'n' pray
%%-----------------------------------------------------------------
abcast(Name, Request) when is_atom(Name) ->
do_abcast([node() | nodes()], Name, cast_msg(Request)).
diff --git a/lib/stdlib/src/io_lib.erl b/lib/stdlib/src/io_lib.erl
index 7c4c2742bc..53781e97f1 100644
--- a/lib/stdlib/src/io_lib.erl
+++ b/lib/stdlib/src/io_lib.erl
@@ -82,7 +82,8 @@
-export([write_unicode_string/1, write_unicode_char/1,
deep_unicode_char_list/1]).
--export_type([chars/0, latin1_string/0, continuation/0, fread_error/0]).
+-export_type([chars/0, latin1_string/0, continuation/0,
+ fread_error/0, fread_item/0]).
%%----------------------------------------------------------------------
@@ -105,6 +106,8 @@
| 'string'
| 'unsigned'.
+-type fread_item() :: string() | atom() | integer() | float().
+
%%----------------------------------------------------------------------
%% Interface calls to sub-modules.
@@ -119,7 +122,7 @@ fwrite(Format, Args) ->
-spec fread(Format, String) -> Result when
Format :: string(),
String :: string(),
- Result :: {'ok', InputList :: [term()], LeftOverChars :: string()}
+ Result :: {'ok', InputList :: [fread_item()], LeftOverChars :: string()}
| {'more', RestFormat :: string(),
Nchars :: non_neg_integer(),
InputStack :: chars()}
@@ -134,7 +137,7 @@ fread(Chars, Format) ->
Format :: string(),
Return :: {'more', Continuation1 :: continuation()}
| {'done', Result, LeftOverChars :: string()},
- Result :: {'ok', InputList :: [term()]}
+ Result :: {'ok', InputList :: [fread_item()]}
| 'eof'
| {'error', {'fread', What :: fread_error()}}.
diff --git a/lib/stdlib/src/io_lib_fread.erl b/lib/stdlib/src/io_lib_fread.erl
index 92a34995b8..491e1f40d7 100644
--- a/lib/stdlib/src/io_lib_fread.erl
+++ b/lib/stdlib/src/io_lib_fread.erl
@@ -41,9 +41,9 @@
Format :: string(),
Return :: {'more', Continuation1 :: io_lib:continuation()}
| {'done', Result, LeftOverChars :: string()},
- Result :: {'ok', InputList :: io_lib:chars()}
+ Result :: {'ok', InputList :: [io_lib:fread_item()]}
| 'eof'
- | {'error', {'read', What :: io_lib:fread_error()}}.
+ | {'error', {'fread', What :: io_lib:fread_error()}}.
fread([], Chars, Format) ->
%%io:format("FREAD: ~w `~s'~n", [Format,Chars]),
@@ -101,11 +101,12 @@ fread_line(Format0, Line, N0, Results0, More, Newline) ->
-spec fread(Format, String) -> Result when
Format :: string(),
String :: string(),
- Result :: {'ok', InputList :: io_lib:chars(), LeftOverChars :: string()}
+ Result :: {'ok', InputList :: [io_lib:fread_item()],
+ LeftOverChars :: string()}
| {'more', RestFormat :: string(),
Nchars :: non_neg_integer(),
InputStack :: io_lib:chars()}
- | {'error', What :: term()}.
+ | {'error', {'fread', What :: io_lib:fread_error()}}.
fread(Format, Line) ->
fread(Format, Line, 0, []).
diff --git a/lib/stdlib/src/re.erl b/lib/stdlib/src/re.erl
index c5109ec455..afc63496d0 100644
--- a/lib/stdlib/src/re.erl
+++ b/lib/stdlib/src/re.erl
@@ -19,20 +19,21 @@
-module(re).
-export([grun/3,urun/3,ucompile/2,replace/3,replace/4,split/2,split/3]).
-%-opaque mp() :: {re_pattern, _, _, _}.
--type mp() :: {re_pattern, _, _, _}.
+%-opaque mp() :: {re_pattern, _, _, _, _}.
+-type mp() :: {re_pattern, _, _, _, _}.
-type nl_spec() :: cr | crlf | lf | anycrlf | any.
-type compile_option() :: unicode | anchored | caseless | dollar_endonly
| dotall | extended | firstline | multiline
| no_auto_capture | dupnames | ungreedy
- | {newline, nl_spec()}| bsr_anycrlf
- | bsr_unicode.
+ | {newline, nl_spec()}
+ | bsr_anycrlf | bsr_unicode
+ | no_start_optimize | ucp | never_utf.
%%% BIFs
--export([compile/1, compile/2, run/2, run/3]).
+-export([compile/1, compile/2, run/2, run/3, inspect/2]).
-spec compile(Regexp) -> {ok, MP} | {error, ErrSpec} when
Regexp :: iodata(),
@@ -63,17 +64,21 @@ run(_, _) ->
-spec run(Subject, RE, Options) -> {match, Captured} |
match |
- nomatch when
+ nomatch |
+ {error, ErrType} when
Subject :: iodata() | unicode:charlist(),
RE :: mp() | iodata() | unicode:charlist(),
Options :: [Option],
- Option :: anchored | global | notbol | noteol | notempty
+ Option :: anchored | global | notbol | noteol | notempty
+ | notempty_atstart | report_errors
| {offset, non_neg_integer()} |
+ {match_limit, non_neg_integer()} |
+ {match_limit_recursion, non_neg_integer()} |
{newline, NLSpec :: nl_spec()} |
bsr_anycrlf | bsr_unicode | {capture, ValueSpec} |
{capture, ValueSpec, Type} | CompileOpt,
Type :: index | list | binary,
- ValueSpec :: all | all_but_first | first | none | ValueList,
+ ValueSpec :: all | all_but_first | all_names | first | none | ValueList,
ValueList :: [ValueID],
ValueID :: integer() | string() | atom(),
CompileOpt :: compile_option(),
@@ -83,11 +88,21 @@ run(_, _) ->
| binary(),
ListConversionData :: string()
| {error, string(), binary()}
- | {incomplete, string(), binary()}.
+ | {incomplete, string(), binary()},
+ ErrType :: match_limit | match_limit_recursion | {compile, CompileErr},
+ CompileErr :: {ErrString :: string(), Position :: non_neg_integer()}.
run(_, _, _) ->
erlang:nif_error(undef).
+-spec inspect(MP,Item) -> {namelist, [ binary() ]} when
+ MP :: mp(),
+ Item :: namelist.
+
+inspect(_,_) ->
+ erlang:nif_error(undef).
+
+
%%% End of BIFs
-spec split(Subject, RE) -> SplitList when
@@ -102,8 +117,10 @@ split(Subject,RE) ->
Subject :: iodata() | unicode:charlist(),
RE :: mp() | iodata() | unicode:charlist(),
Options :: [ Option ],
- Option :: anchored | notbol | noteol | notempty
+ Option :: anchored | notbol | noteol | notempty | notempty_atstart
| {offset, non_neg_integer()} | {newline, nl_spec()}
+ | {match_limit, non_neg_integer()}
+ | {match_limit_recursion, non_neg_integer()}
| bsr_anycrlf | bsr_unicode | {return, ReturnType}
| {parts, NumParts} | group | trim | CompileOpt,
NumParts :: non_neg_integer() | infinity,
@@ -266,7 +283,7 @@ extend_subpatterns([],N) ->
extend_subpatterns([H|T],N) ->
[H | extend_subpatterns(T,N-1)].
-compile_split({re_pattern,N,_,_} = Comp, Options) ->
+compile_split({re_pattern,N,_,_,_} = Comp, Options) ->
{Comp,N,Options};
compile_split(Pat,Options0) when not is_tuple(Pat) ->
Options = lists:filter(fun(O) ->
@@ -275,7 +292,7 @@ compile_split(Pat,Options0) when not is_tuple(Pat) ->
case re:compile(Pat,Options) of
{error,Err} ->
{error,Err};
- {ok, {re_pattern,N,_,_} = Comp} ->
+ {ok, {re_pattern,N,_,_,_} = Comp} ->
NewOpt = lists:filter(fun(OO) -> (not copt(OO)) end, Options0),
{Comp,N,NewOpt}
end;
@@ -295,8 +312,11 @@ replace(Subject,RE,Replacement) ->
RE :: mp() | iodata() | unicode:charlist(),
Replacement :: iodata() | unicode:charlist(),
Options :: [Option],
- Option :: anchored | global | notbol | noteol | notempty
+ Option :: anchored | global | notbol | noteol | notempty
+ | notempty_atstart
| {offset, non_neg_integer()} | {newline, NLSpec} | bsr_anycrlf
+ | {match_limit, non_neg_integer()}
+ | {match_limit_recursion, non_neg_integer()}
| bsr_unicode | {return, ReturnType} | CompileOpt,
ReturnType :: iodata | list | binary,
CompileOpt :: compile_option(),
@@ -352,6 +372,8 @@ process_repl_params([],Convert,Unicode) ->
process_repl_params([unicode|T],C,_U) ->
{NT,NC,NU} = process_repl_params(T,C,true),
{[unicode|NT],NC,NU};
+process_repl_params([report_errors|_],_,_) ->
+ throw(badopt);
process_repl_params([{capture,_,_}|_],_,_) ->
throw(badopt);
process_repl_params([{capture,_}|_],_,_) ->
@@ -387,6 +409,8 @@ process_split_params([group|T],C,U,L,S,_G) ->
process_split_params(T,C,U,L,S,true);
process_split_params([global|_],_,_,_,_,_) ->
throw(badopt);
+process_split_params([report_errors|_],_,_,_,_,_) ->
+ throw(badopt);
process_split_params([{capture,_,_}|_],_,_,_,_,_) ->
throw(badopt);
process_split_params([{capture,_}|_],_,_,_,_,_) ->
@@ -487,17 +511,31 @@ do_replace(Subject,Repl,SubExprs0) ->
end || Part <- Repl ].
-check_for_unicode({re_pattern,_,1,_},_) ->
+check_for_unicode({re_pattern,_,1,_,_},_) ->
true;
-check_for_unicode({re_pattern,_,0,_},_) ->
+check_for_unicode({re_pattern,_,0,_,_},_) ->
false;
check_for_unicode(_,L) ->
lists:member(unicode,L).
+
+check_for_crlf({re_pattern,_,_,1,_},_) ->
+ true;
+check_for_crlf({re_pattern,_,_,0,_},_) ->
+ false;
+check_for_crlf(_,L) ->
+ case lists:keysearch(newline,1,L) of
+ {value,{newline,any}} -> true;
+ {value,{newline,crlf}} -> true;
+ {value,{newline,anycrlf}} -> true;
+ _ -> false
+ end.
% SelectReturn = false | all | stirpfirst | none
% ConvertReturn = index | list | binary
% {capture, all} -> all (untouchded)
-% {capture, first} -> kept in argumentt list and Select all
+% {capture, all_names} -> if names are present: treated as a name {capture, [...]}
+% else: same as {capture, []}
+% {capture, first} -> kept in argument list and Select all
% {capture, all_but_first} -> removed from argument list and selects stripfirst
% {capture, none} -> removed from argument list and selects none
% {capture, []} -> removed from argument list and selects none
@@ -506,23 +544,30 @@ check_for_unicode(_,L) ->
% Call as process_parameters([],0,false,index,NeedClean)
-process_parameters([],InitialOffset, SelectReturn, ConvertReturn,_) ->
+process_parameters([],InitialOffset, SelectReturn, ConvertReturn,_,_) ->
{[], InitialOffset, SelectReturn, ConvertReturn};
-process_parameters([{offset, N} | T],_Init0,Select0,Return0,CC) ->
- process_parameters(T,N,Select0,Return0,CC);
-process_parameters([global | T],Init0,Select0,Return0,CC) ->
- process_parameters(T,Init0,Select0,Return0,CC);
-process_parameters([{capture,Values,Type}|T],Init0,Select0,_Return0,CC) ->
- process_parameters([{capture,Values}|T],Init0,Select0,Type,CC);
-process_parameters([{capture,Values}|T],Init0,Select0,Return0,CC) ->
+process_parameters([{offset, N} | T],_Init0,Select0,Return0,CC,RE) ->
+ process_parameters(T,N,Select0,Return0,CC,RE);
+process_parameters([global | T],Init0,Select0,Return0,CC,RE) ->
+ process_parameters(T,Init0,Select0,Return0,CC,RE);
+process_parameters([{capture,Values,Type}|T],Init0,Select0,_Return0,CC,RE) ->
+ process_parameters([{capture,Values}|T],Init0,Select0,Type,CC,RE);
+process_parameters([{capture,Values}|T],Init0,Select0,Return0,CC,RE) ->
% First process the rest to see if capture was already present
{NewTail, Init1, Select1, Return1} =
- process_parameters(T,Init0,Select0,Return0,CC),
+ process_parameters(T,Init0,Select0,Return0,CC,RE),
case Select1 of
false ->
case Values of
all ->
{[{capture,all} | NewTail], Init1, all, Return0};
+ all_names ->
+ case re:inspect(RE,namelist) of
+ {namelist, []} ->
+ {[{capture,first} | NewTail], Init1, none, Return0};
+ {namelist, List} ->
+ {[{capture,[0|List]} | NewTail], Init1, stripfirst, Return0}
+ end;
first ->
{[{capture,first} | NewTail], Init1, all, Return0};
all_but_first ->
@@ -541,20 +586,20 @@ process_parameters([{capture,Values}|T],Init0,Select0,Return0,CC) ->
% Found overriding further down list, ignore this one
{NewTail, Init1, Select1, Return1}
end;
-process_parameters([H|T],Init0,Select0,Return0,true) ->
+process_parameters([H|T],Init0,Select0,Return0,true,RE) ->
case copt(H) of
true ->
- process_parameters(T,Init0,Select0,Return0,true);
+ process_parameters(T,Init0,Select0,Return0,true,RE);
false ->
{NewT,Init,Select,Return} =
- process_parameters(T,Init0,Select0,Return0,true),
+ process_parameters(T,Init0,Select0,Return0,true,RE),
{[H|NewT],Init,Select,Return}
end;
-process_parameters([H|T],Init0,Select0,Return0,false) ->
+process_parameters([H|T],Init0,Select0,Return0,false,RE) ->
{NewT,Init,Select,Return} =
- process_parameters(T,Init0,Select0,Return0,false),
+ process_parameters(T,Init0,Select0,Return0,false,RE),
{[H|NewT],Init,Select,Return};
-process_parameters(_,_,_,_,_) ->
+process_parameters(_,_,_,_,_,_) ->
throw(badlist).
postprocess({match,[]},_,_,_,_) ->
@@ -662,7 +707,7 @@ urun2(Subject0,RE0,Options0) ->
RE = case RE0 of
BinRE when is_binary(BinRE) ->
BinRE;
- {re_pattern,_,_,_} = ReCompiled ->
+ {re_pattern,_,_,_,_} = ReCompiled ->
ReCompiled;
ListRE ->
unicode:characters_to_binary(ListRE,unicode)
@@ -703,38 +748,46 @@ grun(Subject,RE,{Options,NeedClean,OrigRE}) ->
grun2(Subject,RE,{Options,NeedClean}) ->
Unicode = check_for_unicode(RE,Options),
+ CRLF = check_for_crlf(RE,Options),
FlatSubject = to_binary(Subject, Unicode),
- do_grun(FlatSubject,Subject,Unicode,RE,{Options,NeedClean}).
+ do_grun(FlatSubject,Subject,Unicode,CRLF,RE,{Options,NeedClean}).
-do_grun(FlatSubject,Subject,Unicode,RE,{Options0,NeedClean}) ->
+do_grun(FlatSubject,Subject,Unicode,CRLF,RE,{Options0,NeedClean}) ->
{StrippedOptions, InitialOffset,
SelectReturn, ConvertReturn} =
case (catch
- process_parameters(Options0, 0, false, index, NeedClean)) of
+ process_parameters(Options0, 0, false, index, NeedClean,RE)) of
badlist ->
erlang:error(badarg,[Subject,RE,Options0]);
CorrectReturn ->
CorrectReturn
end,
- postprocess(loopexec(FlatSubject,RE,InitialOffset,
- byte_size(FlatSubject),
- Unicode,StrippedOptions),
- SelectReturn,ConvertReturn,FlatSubject,Unicode).
+ try
+ postprocess(loopexec(FlatSubject,RE,InitialOffset,
+ byte_size(FlatSubject),
+ Unicode,CRLF,StrippedOptions),
+ SelectReturn,ConvertReturn,FlatSubject,Unicode)
+ catch
+ throw:ErrTuple ->
+ ErrTuple
+ end.
-loopexec(_,_,X,Y,_,_) when X > Y ->
+loopexec(_,_,X,Y,_,_,_) when X > Y ->
{match,[]};
-loopexec(Subject,RE,X,Y,Unicode,Options) ->
+loopexec(Subject,RE,X,Y,Unicode,CRLF,Options) ->
case re:run(Subject,RE,[{offset,X}]++Options) of
+ {error, Err} ->
+ throw({error,Err});
nomatch ->
{match,[]};
{match,[{A,B}|More]} ->
{match,Rest} =
case B>0 of
true ->
- loopexec(Subject,RE,A+B,Y,Unicode,Options);
+ loopexec(Subject,RE,A+B,Y,Unicode,CRLF,Options);
false ->
{match,M} =
- case re:run(Subject,RE,[{offset,X},notempty,
+ case re:run(Subject,RE,[{offset,X},notempty_atstart,
anchored]++Options) of
nomatch ->
{match,[]};
@@ -745,10 +798,10 @@ loopexec(Subject,RE,X,Y,Unicode,Options) ->
[{_,NStep}|_] when NStep > 0 ->
A+NStep;
_ ->
- forward(Subject,A,1,Unicode)
+ forward(Subject,A,1,Unicode,CRLF)
end,
{match,MM} = loopexec(Subject,RE,NewA,Y,
- Unicode,Options),
+ Unicode,CRLF,Options),
case M of
[] ->
{match,MM};
@@ -759,11 +812,22 @@ loopexec(Subject,RE,X,Y,Unicode,Options) ->
{match,[[{A,B}|More] | Rest]}
end.
-forward(_Chal,A,0,_) ->
+forward(_Chal,A,0,_,_) ->
A;
-forward(_Chal,A,N,false) ->
- A+N;
-forward(Chal,A,N,true) ->
+forward(Chal,A,N,U,true) ->
+ <<_:A/binary,Tl/binary>> = Chal,
+ case Tl of
+ <<$\r,$\n,_/binary>> ->
+ forward(Chal,A+2,N-1,U,true);
+ _ ->
+ forward2(Chal,A,N,U,true)
+ end;
+forward(Chal,A,N,U,false) ->
+ forward2(Chal,A,N,U,false).
+
+forward2(Chal,A,N,false,CRLF) ->
+ forward(Chal,A+1,N-1,false,CRLF);
+forward2(Chal,A,N,true,CRLF) ->
<<_:A/binary,Tl/binary>> = Chal,
Forw = case Tl of
<<1:1,1:1,0:1,_:5,_/binary>> ->
@@ -775,10 +839,16 @@ forward(Chal,A,N,true) ->
_ ->
1
end,
- forward(Chal,A+Forw,N-1,true).
+ forward(Chal,A+Forw,N-1,true,CRLF).
copt(caseless) ->
true;
+copt(no_start_optimize) ->
+ true;
+copt(never_utf) ->
+ true;
+copt(ucp) ->
+ true;
copt(dollar_endonly) ->
true;
copt(dotall) ->
@@ -809,6 +879,8 @@ copt(_) ->
runopt(notempty) ->
true;
+runopt(notempty_atstart) ->
+ true;
runopt(notbol) ->
true;
runopt(noteol) ->
@@ -821,6 +893,10 @@ runopt({capture,_}) ->
true;
runopt(global) ->
true;
+runopt({match_limit,_}) ->
+ true;
+runopt({match_limit_recursion,_}) ->
+ true;
runopt(_) ->
false.
diff --git a/lib/stdlib/test/dets_SUITE.erl b/lib/stdlib/test/dets_SUITE.erl
index 8ff7c3ccc9..059d553b00 100644
--- a/lib/stdlib/test/dets_SUITE.erl
+++ b/lib/stdlib/test/dets_SUITE.erl
@@ -52,7 +52,7 @@
simultaneous_open/1, insert_new/1, repair_continuation/1,
otp_5487/1, otp_6206/1, otp_6359/1, otp_4738/1, otp_7146/1,
otp_8070/1, otp_8856/1, otp_8898/1, otp_8899/1, otp_8903/1,
- otp_8923/1, otp_9282/1]).
+ otp_8923/1, otp_9282/1, otp_11245/1]).
-export([dets_dirty_loop/0]).
@@ -109,7 +109,7 @@ all() ->
many_clients, otp_4906, otp_5402, simultaneous_open,
insert_new, repair_continuation, otp_5487, otp_6206,
otp_6359, otp_4738, otp_7146, otp_8070, otp_8856, otp_8898,
- otp_8899, otp_8903, otp_8923, otp_9282
+ otp_8899, otp_8903, otp_8923, otp_9282, otp_11245
].
groups() ->
@@ -3898,6 +3898,28 @@ some_calls(Tab, Config) ->
file:delete(File).
+otp_11245(doc) ->
+ ["OTP-11245. Tables remained fixed after traversal"];
+otp_11245(suite) ->
+ [];
+otp_11245(Config) when is_list(Config) ->
+ Tab = otp_11245,
+ File = filename(Tab, Config),
+ {ok, Tab} = dets:open_file(Tab, [{file,File}]),
+ N = 1024,
+ ins(Tab, N),
+ N = length(dets:match(Tab, '_')),
+ false = dets:info(Tab, safe_fixed),
+ dets:traverse(Tab, fun(_) -> continue end),
+ false = dets:info(Tab, safe_fixed),
+ N = dets:foldl(fun(_, N2) -> N2+1 end, 0, Tab),
+ false = dets:info(Tab, safe_fixed),
+ N = dets:foldr(fun(_, N2) -> N2+1 end, 0, Tab),
+ false = dets:info(Tab, safe_fixed),
+ ok = dets:close(Tab),
+ file:delete(File),
+ ok.
+
%%
%% Parts common to several test cases
%%
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index b1236ceedf..6bf87adf14 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -51,7 +51,7 @@
unsized_binary_in_bin_gen_pattern/1,
guard/1, otp_4886/1, otp_4988/1, otp_5091/1, otp_5276/1, otp_5338/1,
otp_5362/1, otp_5371/1, otp_7227/1, otp_5494/1, otp_5644/1, otp_5878/1,
- otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1,
+ otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, otp_11254/1,
export_all/1,
bif_clash/1,
behaviour_basic/1, behaviour_multiple/1,
@@ -84,7 +84,7 @@ all() ->
unsized_binary_in_bin_gen_pattern,
otp_4886, otp_4988, otp_5091, otp_5276, otp_5338,
otp_5362, otp_5371, otp_7227, otp_5494, otp_5644,
- otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, export_all,
+ otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, otp_11254,export_all,
bif_clash, behaviour_basic, behaviour_multiple,
otp_7550, otp_8051, format_warn, {group, on_load},
too_many_arguments, basic_errors, bin_syntax_errors].
@@ -153,7 +153,16 @@ unused_vars_warn_basic(Config) when is_list(Config) ->
{22,erl_lint,{unused_var,'N'}},
{23,erl_lint,{shadowed_var,'N','fun'}},
{28,erl_lint,{unused_var,'B'}},
- {29,erl_lint,{unused_var,'B'}}]}}],
+ {29,erl_lint,{unused_var,'B'}}]}},
+ {basic2,
+ <<"-record(r, {x,y}).
+ f({X,Y}) -> {Z=X,Z=Y};
+ f([H|T]) -> [Z=H|Z=T];
+ f(#r{x=X,y=Y}) -> #r{x=A=X,y=A=Y}.
+ g({M, F}) -> (Z=M):(Z=F)();
+ g({M, F, Arg}) -> (Z=M):F(Z=Arg).
+ h(X, Y) -> (Z=X) + (Z=Y).">>,
+ [warn_unused_vars], []}],
?line [] = run(Config, Ts),
ok.
@@ -539,7 +548,29 @@ unused_vars_warn_rec(Config) when is_list(Config) ->
end.
">>,
[warn_unused_vars],
- {warnings,[{22,erl_lint,{unused_var,'Same'}}]}}],
+ {warnings,[{22,erl_lint,{unused_var,'Same'}}]}},
+ {rec2,
+ <<"-record(r, {a,b}).
+ f(X, Y) -> #r{a=[K || K <- Y], b=[K || K <- Y]}.
+ g(X, Y) -> #r{a=lists:map(fun (K) -> K end, Y),
+ b=lists:map(fun (K) -> K end, Y)}.
+ h(X, Y) -> #r{a=case Y of _ when is_list(Y) -> Y end,
+ b=case Y of _ when is_list(Y) -> Y end}.
+ i(X, Y) -> #r{a=if is_list(Y) -> Y end, b=if is_list(Y) -> Y end}.
+ ">>,
+ [warn_unused_vars],
+ {warnings,[{2,erl_lint,{unused_var,'X'}},
+ {3,erl_lint,{unused_var,'X'}},
+ {5,erl_lint,{unused_var,'X'}},
+ {7,erl_lint,{unused_var,'X'}}]}},
+ {rec3,
+ <<"-record(r, {a}).
+ t() -> X = 1, #r{a=foo, a=bar, a=qux}.
+ ">>,
+ [warn_unused_vars],
+ {error,[{2,erl_lint,{redefine_field,r,a}},
+ {2,erl_lint,{redefine_field,r,a}}],
+ [{2,erl_lint,{unused_var,'X'}}]}}],
?line [] = run(Config, Ts),
ok.
@@ -1077,7 +1108,24 @@ unsafe_vars_try(Config) when is_list(Config) ->
{10,erl_lint,{unsafe_var,'Ra',{'try',3}}},
{10,erl_lint,{unsafe_var,'Rc',{'try',3}}},
{10,erl_lint,{unsafe_var,'Ro',{'try',3}}}],
- []}}],
+ []}},
+ {unsafe_try5,
+ <<"bang() ->
+ case 1 of
+ nil ->
+ Acc = 2;
+ _ ->
+ try
+ Acc = 3,
+ Acc
+ catch _:_ ->
+ ok
+ end
+ end,
+ Acc.
+ ">>,
+ [],
+ {errors,[{13,erl_lint,{unsafe_var,'Acc',{'try',6}}}],[]}}],
?line [] = run(Config, Ts),
ok.
@@ -2449,6 +2497,20 @@ otp_10436(Config) when is_list(Config) ->
run_test2(Config, Ts2, []),
ok.
+otp_11254(doc) ->
+ "OTP-11254. Warnings for opaque types.";
+otp_11254(suite) -> [];
+otp_11254(Config) when is_list(Config) ->
+ Ts = <<"-module(p2).
+ -export([manifest/2]).
+ manifest(Module, Name) ->
+ fun Module:Nine/1.
+ ">>,
+ {error,[{4,erl_lint,{unbound_var,'Nine'}}],
+ [{3,erl_lint,{unused_var,'Name'}}]} =
+ run_test2(Config, Ts, []),
+ ok.
+
export_all(doc) ->
"OTP-7392. Warning for export_all.";
export_all(Config) when is_list(Config) ->
diff --git a/lib/stdlib/test/re_SUITE.erl b/lib/stdlib/test/re_SUITE.erl
index c05674b4f8..87763cbf92 100644
--- a/lib/stdlib/test/re_SUITE.erl
+++ b/lib/stdlib/test/re_SUITE.erl
@@ -24,7 +24,10 @@
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]).
+ pcre_compile_workspace_overflow/1,re_infinite_loop/1,
+ re_backwards_accented/1,opt_dupnames/1,opt_all_names/1,inspect/1,
+ opt_no_start_optimize/1,opt_never_utf/1,opt_ucp/1,
+ match_limit/1,sub_binaries/1]).
-include_lib("test_server/include/test_server.hrl").
-include_lib("kernel/include/file.hrl").
@@ -36,7 +39,10 @@ all() ->
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_compile_workspace_overflow, re_infinite_loop,
+ re_backwards_accented, opt_dupnames, opt_all_names,
+ inspect, opt_no_start_optimize,opt_never_utf,opt_ucp,
+ match_limit, sub_binaries].
groups() ->
[].
@@ -468,115 +474,152 @@ error_handling() ->
% The malformed precomiled RE is detected after
% the trap to re:grun from grun, in the grun function clause
% that handles precompiled expressions
- ?line {'EXIT',{badarg,[{re,run,["apa",{1,2,3,4},[global]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,run,["apa",{1,2,3,4},[global]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:run("apa",{1,2,3,4},[global])),
% An invalid capture list will also cause a badarg late,
% but with a non pre compiled RE, the exception should be thrown by the
% grun function clause that handles RE's compiled implicitly by
% the run/3 BIF before trapping.
- ?line {'EXIT',{badarg,[{re,run,["apa","p",[{capture,[1,{a}]},global]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,run,["apa","p",[{capture,[1,{a}]},global]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:run("apa","p",[{capture,[1,{a}]},global])),
% And so the case of a precompiled expression together with
% a compile-option (binary and list subject):
- ?line {ok,RE} = re:compile("(p)"),
- ?line {match,[[{1,1},{1,1}]]} = re:run(<<"apa">>,RE,[global]),
- ?line {match,[[{1,1},{1,1}]]} = re:run("apa",RE,[global]),
- ?line {'EXIT',{badarg,[{re,run,
- [<<"apa">>,
- {re_pattern,1,0,_},
- [global,unicode]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {ok,RE} = re:compile("(p)"),
+ {match,[[{1,1},{1,1}]]} = re:run(<<"apa">>,RE,[global]),
+ {match,[[{1,1},{1,1}]]} = re:run("apa",RE,[global]),
+ {'EXIT',{badarg,[{re,run,
+ [<<"apa">>,
+ {re_pattern,1,0,_,_},
+ [global,unicode]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:run(<<"apa">>,RE,[global,unicode])),
- ?line {'EXIT',{badarg,[{re,run,
- ["apa",
- {re_pattern,1,0,_},
- [global,unicode]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,run,
+ ["apa",
+ {re_pattern,1,0,_,_},
+ [global,unicode]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:run("apa",RE,[global,unicode])),
- ?line {'EXIT',{badarg,_}} = (catch re:run("apa","(p",[])),
- ?line {'EXIT',{badarg,_}} = (catch re:run("apa","(p",[global])),
+ {'EXIT',{badarg,_}} = (catch re:run("apa","(p",[])),
+ {error, {compile, {_,_}}} = re:run("apa","(p",[report_errors]),
+ {'EXIT',{badarg,_}} = (catch re:run("apa","(p",[global])),
+ {error, {compile, {_,_}}} = re:run("apa","(p",[report_errors,global]),
+ % Badly formed options
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,["global"])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{offset,-1}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{offset,ett}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{captore,[1,2],binary}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{capture,[1,2],binary,list}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{capture,[1,2],bunary}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{capture,{1,2},binary}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{newline,3}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{newline,apa}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{njuline,cr}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{<<"newline">>,cr}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[global|dupnames])),
+ {'EXIT',{badarg,_}} = (catch re:run([<<"ap">>|$a],RE,[])), % Not an IO-list
+ {'EXIT',{badarg,_}} = (catch re:compile([<<"ap">>|$a],[])), % Not an IO-list
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{capture,[0|1],binary}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,
+ [{capture,[<<"apa">>|1],binary}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,
+ [{capture,[[<<"ap">>|$a]],binary}])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,[<<"(p">>|41],[])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,{re_pattern,3,0,0,[]},[])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,{re_pattern,3,0,0,<<"apa">>},[])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,{re_pattern,3,0,0,<<"apa",3:2>>},[])),
+ {'EXIT',{badarg,_}} = (catch re:run(<<"apa",2:2>>,<<"(p)">>,[{capture,[0,1],binary}])),
+ <<_:4,Temp:3/binary,_:4>> = <<38,23,6,18>>,
+ {match,[{1,1},{1,1}]} = re:run(Temp,<<"(p)">>,[]), % Unaligned works
% The replace errors:
- ?line {'EXIT',{badarg,[{re,replace,["apa",{1,2,3,4},"X",[]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,replace,["apa",{1,2,3,4},"X",[]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:replace("apa",{1,2,3,4},"X",[])),
- ?line {'EXIT',{badarg,[{re,replace,["apa",{1,2,3,4},"X",[global]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,replace,["apa",{1,2,3,4},"X",[global]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:replace("apa",{1,2,3,4},"X",[global])),
- ?line {'EXIT',{badarg,[{re,replace,
- ["apa",
- {re_pattern,1,0,_},
- "X",
- [unicode]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,replace,
+ ["apa",
+ {re_pattern,1,0,_,_},
+ "X",
+ [unicode]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:replace("apa",RE,"X",[unicode])),
- ?line <<"aXa">> = iolist_to_binary(re:replace("apa","p","X",[])),
- ?line {'EXIT',{badarg,[{re,replace,
- ["apa","p","X",[{capture,all,binary}]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ <<"aXa">> = iolist_to_binary(re:replace("apa","p","X",[])),
+ {'EXIT',{badarg,[{re,replace,
+ ["apa","p","X",[report_errors]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch iolist_to_binary(re:replace("apa","p","X",
- [{capture,all,binary}]))),
- ?line {'EXIT',{badarg,[{re,replace,
- ["apa","p","X",[{capture,all}]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ [report_errors]))),
+ {'EXIT',{badarg,[{re,replace,
+ ["apa","p","X",[{capture,all,binary}]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch iolist_to_binary(re:replace("apa","p","X",
- [{capture,all}]))),
- ?line {'EXIT',{badarg,[{re,replace,
- ["apa","p","X",[{return,banana}]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ [{capture,all,binary}]))),
+ {'EXIT',{badarg,[{re,replace,
+ ["apa","p","X",[{capture,all}]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch iolist_to_binary(re:replace("apa","p","X",
- [{return,banana}]))),
- ?line {'EXIT',{badarg,_}} = (catch re:replace("apa","(p","X",[])),
+ [{capture,all}]))),
+ {'EXIT',{badarg,[{re,replace,
+ ["apa","p","X",[{return,banana}]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
+ (catch iolist_to_binary(re:replace("apa","p","X",
+ [{return,banana}]))),
+ {'EXIT',{badarg,_}} = (catch re:replace("apa","(p","X",[])),
% Badarg, not compile error.
- ?line {'EXIT',{badarg,[{re,replace,
- ["apa","(p","X",[{return,banana}]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,replace,
+ ["apa","(p","X",[{return,banana}]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch iolist_to_binary(re:replace("apa","(p","X",
- [{return,banana}]))),
+ [{return,banana}]))),
% And the split errors:
- ?line [<<"a">>,<<"a">>] = (catch re:split("apa","p",[])),
- ?line [<<"a">>,<<"p">>,<<"a">>] = (catch re:split("apa",RE,[])),
- ?line {'EXIT',{badarg,[{re,split,["apa","p",[global]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ [<<"a">>,<<"a">>] = (catch re:split("apa","p",[])),
+ [<<"a">>,<<"p">>,<<"a">>] = (catch re:split("apa",RE,[])),
+ {'EXIT',{badarg,[{re,split,["apa","p",[report_errors]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
+ (catch re:split("apa","p",[report_errors])),
+ {'EXIT',{badarg,[{re,split,["apa","p",[global]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa","p",[global])),
- ?line {'EXIT',{badarg,[{re,split,["apa","p",[{capture,all}]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,["apa","p",[{capture,all}]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa","p",[{capture,all}])),
- ?line {'EXIT',{badarg,[{re,split,["apa","p",[{capture,all,binary}]],_},
- {?MODULE, error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,["apa","p",[{capture,all,binary}]],_},
+ {?MODULE, error_handling,0,_} | _]}} =
(catch re:split("apa","p",[{capture,all,binary}])),
- ?line {'EXIT',{badarg,[{re,split,["apa",{1,2,3,4},[]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,["apa",{1,2,3,4},[]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa",{1,2,3,4})),
- ?line {'EXIT',{badarg,[{re,split,["apa",{1,2,3,4},[]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,["apa",{1,2,3,4},[]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa",{1,2,3,4},[])),
- ?line {'EXIT',{badarg,[{re,split,
- ["apa",
- RE,
- [unicode]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,
+ ["apa",
+ RE,
+ [unicode]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa",RE,[unicode])),
- ?line {'EXIT',{badarg,[{re,split,
- ["apa",
- RE,
- [{return,banana}]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,
+ ["apa",
+ RE,
+ [{return,banana}]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa",RE,[{return,banana}])),
- ?line {'EXIT',{badarg,[{re,split,
- ["apa",
- RE,
- [banana]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,
+ ["apa",
+ RE,
+ [banana]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa",RE,[banana])),
- ?line {'EXIT',{badarg,_}} = (catch re:split("apa","(p")),
+ {'EXIT',{badarg,_}} = (catch re:split("apa","(p")),
%Exception on bad argument, not compilation error
- ?line {'EXIT',{badarg,[{re,split,
- ["apa",
- "(p",
- [banana]],_},
- {?MODULE,error_handling,0,_} | _]}} =
+ {'EXIT',{badarg,[{re,split,
+ ["apa",
+ "(p",
+ [banana]],_},
+ {?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa","(p",[banana])),
?t:timetrap_cancel(Dog),
ok.
@@ -599,13 +642,280 @@ 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 =
+ Str =
"http:/www.flickr.com/slideShow/index.gne?group_id=&user_id=69845378@N0",
- ?line EMail_regex = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+"
+ 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),
+ nomatch = re:run(Str, EMail_regex),
+ nomatch = re:run(Str, EMail_regex, [global]),
+ {error,match_limit} = re:run(Str, EMail_regex,[report_errors]),
+ {error,match_limit} = re:run(Str, EMail_regex,[report_errors,global]),
?t:timetrap_cancel(Dog),
ok.
+re_backwards_accented(doc) ->
+ "Check for nasty bug where accented graphemes can make PCRE back past "
+ "beginning of subject";
+re_backwards_accented(Config) when is_list(Config) ->
+ Dog = ?t:timetrap(?t:minutes(1)),
+ ?line match = re:run(<<65,204,128,65,204,128,97,98,99>>,
+ <<"\\X?abc">>,
+ [unicode,{capture,none}]),
+ ?t:timetrap_cancel(Dog),
+ ok.
+opt_dupnames(doc) ->
+ "Check correct handling of dupnames option to re";
+opt_dupnames(Config) when is_list(Config) ->
+ Days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
+ _ = [ begin
+ Short = lists:sublist(Day,3),
+ {match,[Short]} =
+ re:run(Day,
+ "(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|"
+ "(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, ['DN'], list}])
+ end || Day <- Days ],
+ _ = [ begin
+ Short = list_to_binary(lists:sublist(Day,3)),
+ {match,[Short]} =
+ re:run(Day,
+ "(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|"
+ "(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, ['DN'], binary}])
+ end || Day <- Days ],
+ _ = [ begin
+ {match,[{0,3}]} =
+ re:run(Day,
+ "(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|"
+ "(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, ['DN'], index}])
+ end || Day <- Days ],
+ {match,[{0,1},{1,3},{7,1}]} = re:run("SMondayX","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
+ "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, ['Skrap','DN','Skrap2'],index}]),
+ {match,[{-1,0},{0,3},{-1,0}]} = re:run("Wednesday","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
+ "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, ['Skrap','DN','Skrap2'],index}]),
+ nomatch = re:run("Wednsday","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
+ "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, ['Skrap','DN','Skrap2'],index}]),
+ {match,[<<>>]} = re:run("Subject","b",[dupnames,{capture,['B'],binary}]),
+ {match,[<<"S">>,<<"u">>,<<"b">>,<<"j">>,<<"e">>,<<"c">>,
+ <<"t">>,<<"I">>,<<"s">>,<<"M">>,<<"o">>,<<"r">>,<<"e">>,
+ <<"T">>,<<"h">>,<<"a">>,<<"n">>,<<"T">>,<<"e">>,<<"n">>]} =
+ re:run("SubjectIsMoreThanTen",
+ "(?<S>S)(?<u>u)(?<b>b)(?<j>j)(?<e>e)(?<c>c)(?<t>t)"
+ "(?<I>I)(?<s>s)(?<M>M)(?<o>o)(?<r>r)(?<e>e)(?<T>T)"
+ "(?<h>h)(?<a>a)(?<n>n)(?<T>T)(?<e>e)(?<n>n)",
+ [dupnames,{capture,['S','u','b','j','e','c','t',
+ 'I','s','M','o','r','e','T',
+ 'h','a','n','T','e','n'],binary}]),
+ {match,[<<"S">>,<<"u">>,<<"b">>,<<"j">>,<<"e">>,<<"c">>,
+ <<"t">>,<<"I">>,<<"s">>,<<"M">>,<<"o">>,<<"r">>,<<"e">>,
+ <<"T">>,<<"h">>,<<"a">>,<<"n">>,<<"T">>,<<"e">>,<<"n">>]} =
+ re:run("SubjectIsMoreThanTen",
+ "(?<S>S)(?<u>u)(?<b>b)(?<j>j)(?<e>e)(?<c>c)(?<t>t)"
+ "(?<I>I)(?<s>s)(?<M>M)(?<o>o)(?<r>r)(?<e>e)(?<T>T)"
+ "(?<h>h)(?<a>a)(?<n>n)(?<T>T)(?<e>e)(?<n>n)",
+ [dupnames,
+ {capture,all_but_first,list},
+ {capture,['S','u','b','j','e','c','t',
+ 'I','s','M','o','r','e','T',
+ 'h','a','n','T','e','n'],binary}]),
+ {match,[<<"S">>,<<"u">>,<<"b">>,<<"j">>,<<"e">>,<<"c">>,
+ <<"t">>,<<"I">>,<<"s">>,<<"M">>,<<"o">>,<<"r">>,<<"e">>,
+ <<"T">>,<<"h">>,<<"a">>,<<"n">>,<<"T">>,<<"e">>,<<"n">>]} =
+ re:run("SubjectIsMoreThanTen",
+ "(?<S>S)(?<u>u)(?<b>b)(?<j>j)(?<e>e)(?<c>c)(?<t>t)"
+ "(?<I>I)(?<s>s)(?<M>M)(?<o>o)(?<r>r)(?<e>e)(?<T>T)"
+ "(?<h>h)(?<a>a)(?<n>n)(?<T>T)(?<e>e)(?<n>n)",
+ [dupnames,
+ {capture,["S","u","b","j","e","c","t",
+ "I","s","M","o","r","e","T",
+ "h","a","n","T","e","n"],binary}]),
+ {match,[<<"S">>,<<"u">>,<<"b">>,<<"j">>,<<"e">>,<<"c">>,
+ <<"t">>,<<"I">>,<<"s">>,<<"M">>,<<"o">>,<<"r">>,<<"e">>,
+ <<"T">>,<<"h">>,<<"a">>,<<"n">>,<<"T">>,<<"e">>,<<"n">>]} =
+ re:run("SubjectIsMoreThanTen",
+ "(?<S>S)(?<u>u)(?<b>b)(?<j>j)(?<e>e)(?<c>c)(?<t>t)"
+ "(?<I>I)(?<s>s)(?<M>M)(?<o>o)(?<r>r)(?<e>e)(?<T>T)"
+ "(?<h>h)(?<a>a)(?<n>n)(?<T>T)(?<e>e)(?<then>n)",
+ [dupnames,
+ {capture,["S","u","b","j","e","c","t",
+ "I","s","M","o","r","e","T",
+ "h","a","n","T","e","then"],binary}]),
+ ok.
+
+opt_all_names(doc) ->
+ "Test capturing of all_names";
+opt_all_names(Config) when is_list(Config) ->
+ Days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
+ {match,[{1,3},{0,1},{7,1}]} = re:run("SMondayX","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
+ "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, all_names,index}]),
+ {match,[{0,3},{-1,0},{-1,0}]} = re:run("Wednesday","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
+ "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, all_names,index}]),
+
+ _ = [ begin
+ {match,[{0,3}]} =
+ re:run(Day,
+ "(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|"
+ "(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, all_names, index}])
+ end || Day <- Days ],
+ _ = [ begin
+ match =
+ re:run(Day,
+ "(Mon|Fri|Sun)(?:day)?|(Tue)(?:sday)?|"
+ "(Wed)(?:nesday)?|(Thu)(?:rsday)?|"
+ "(Sat)(?:urday)?",
+ [dupnames, {capture, all_names, index}])
+ end || Day <- Days ],
+ {match,[{0,1},{-1,0},{-1,0}]} = re:run("A","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, index}]),
+ {match,[{-1,0},{0,1},{-1,0}]} = re:run("B","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, index}]),
+ {match,[{-1,0},{-1,0},{0,1}]} = re:run("C","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, index}]),
+ {match,[<<"A">>,<<>>,<<>>]} = re:run("A","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, binary}]),
+ {match,[<<>>,<<"B">>,<<>>]} = re:run("B","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, binary}]),
+ {match,[<<>>,<<>>,<<"C">>]} = re:run("C","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, binary}]),
+ {match,["A",[],[]]} = re:run("A","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, list}]),
+ {match,[[],"B",[]]} = re:run("B","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, list}]),
+ {match,[[],[],"C"]} = re:run("C","(?<A>A)|(?<B>B)|(?<C>C)",[{capture, all_names, list}]),
+ {match,[{-1,0},{-1,0},{0,1}]} = re:run("A","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, index}]),
+ {match,[{-1,0},{0,1},{-1,0}]} = re:run("B","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, index}]),
+ {match,[{0,1},{-1,0},{-1,0}]} = re:run("C","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, index}]),
+ {match,[<<>>,<<>>,<<"A">>]} = re:run("A","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, binary}]),
+ {match,[<<>>,<<>>,<<"A">>]} = re:run("A","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_but_first, binary},{capture, all_names, binary}]),
+ {match,[<<>>,<<"B">>,<<>>]} = re:run("B","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, binary}]),
+ {match,[<<"C">>,<<>>,<<>>]} = re:run("C","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, binary}]),
+ {match,[[],[],"A"]} = re:run("A","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, list}]),
+ {match,[[],"B",[]]} = re:run("B","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, list}]),
+ {match,["C",[],[]]} = re:run("C","(?<C>A)|(?<B>B)|(?<A>C)",[{capture, all_names, list}]),
+ {match,[[<<>>,<<>>,<<"C">>],
+ [<<>>,<<>>,<<"C">>],
+ [<<>>,<<>>,<<"C">>]]} = re:run("CCC","(?<A>A)|(?<B>B)|(?<C>C)",
+ [global,{capture, all_names, binary}]),
+ {match,[[<<"C">>,<<>>],
+ [<<>>,<<"B">>],
+ [<<"C">>,<<>>]]} = re:run("CBC","(?<A>A)|(?<B>B)|(?<A>C)",
+ [global,dupnames,{capture, all_names, binary}]),
+ {match,[[]]} = re:run("ABCE","(?<A>D)|(?<B>E)|(?<A>F)",[dupnames,{capture,['A'],list}]),
+ {match,["D"]} = re:run("ABCDE","(?<A>D)|(?<B>E)|(?<A>F)",[dupnames,{capture,['A'],list}]),
+ {match,["F"]} = re:run("ABCFE","(?<A>D)|(?<B>E)|(?<A>F)",[dupnames,{capture,['A'],list}]),
+ {match,["F",[]]} = re:run("ABCFE","(?<A>D)|(?<B>E)|(?<A>F)",[dupnames,{capture,['A','B'],list}]),
+ {match,[[],"E"]} = re:run("ABCE","(?<A>D)|(?<B>E)|(?<A>F)",[dupnames,{capture,['A','B'],list}]),
+ {match,[[],"E"]} = re:run("ABCE","(?<A>D)|(?<B>E)|(?<A>F)",[dupnames,{capture,all_names,list}]),
+ {match,[{-1,0},{3,1}]} = re:run("ABCE","(?<A>D)|(?<B>E)|(?<A>F)",[dupnames,{capture,all_names,index}]),
+ match = re:run("Subject","b",[dupnames,{capture,all_names,binary}]),
+ {match,[<<"I">>,<<"M">>,<<"S">>,<<"T">>,<<"a">>,<<"b">>,
+ <<"c">>,<<"e">>,<<"h">>,<<"j">>,<<"n">>,<<"o">>,<<"r">>,
+ <<"s">>,<<"t">>,<<"u">>]} =
+ re:run("SubjectIsMoreThanTen","(?<S>S)(?<u>u)(?<b>b)(?<j>j)"
+ "(?<e>e)(?<c>c)(?<t>t)(?<I>I)(?<s>s)(?<M>M)(?<o>o)(?<r>r)"
+ "(?<e>e)(?<T>T)(?<h>h)(?<a>a)(?<n>n)(?<T>T)(?<e>e)(?<n>n)",
+ [dupnames,{capture,all_names,binary}]),
+ ok.
+
+inspect(doc) ->
+ "Test the minimal inspect function";
+inspect(Config) when is_list(Config)->
+ {ok,MP} = re:compile("(?<A>A)|(?<B>B)|(?<C>C)."),
+ {namelist,[<<"A">>,<<"B">>,<<"C">>]} = re:inspect(MP,namelist),
+ {ok,MPD} = re:compile("(?<A>A)|(?<B>B)|(?<A>C).",[dupnames]),
+ {namelist,[<<"A">>,<<"B">>]} = re:inspect(MPD,namelist),
+ {ok,MPN} = re:compile("(A)|(B)|(C)."),
+ {namelist,[]} = re:inspect(MPN,namelist),
+ {'EXIT',{badarg,_}} = (catch re:inspect(MPD,namelistk)),
+ {'EXIT',{badarg,_}} = (catch re:inspect({re_pattern,3,0,0,<<"kalle">>},namelist)),
+ {'EXIT',{badarg,_}} = (catch re:inspect({re_pattern,3,0,0,<<"kalle",2:2>>},namelist)),
+ ok.
+
+opt_no_start_optimize(doc) ->
+ "Test that the no_start_optimize compilation flag works";
+opt_no_start_optimize(Config) when is_list(Config) ->
+ {match, [{3,3}]} = re:run("DEFABC","(*COMMIT)ABC",[]), % Start optimization makes this result wrong!
+ nomatch = re:run("DEFABC","(*COMMIT)ABC",[no_start_optimize]), % This is the correct result...
+ ok.
+
+opt_never_utf(doc) ->
+ "Check that the never_utf option works";
+opt_never_utf(Config) when is_list(Config) ->
+ {match,[{0,3}]} = re:run("ABC","ABC",[never_utf]),
+ {match,[{0,3}]} = re:run("ABC","(*UTF)ABC",[]),
+ {ok,_} = re:compile("(*UTF)ABC"),
+ {ok,_} = re:compile("(*UTF)ABC",[unicode]),
+ {ok,_} = re:compile("(*UTF8)ABC"),
+ {'EXIT',{badarg,_}} = (catch re:run("ABC","ABC",[unicode,never_utf])),
+ {'EXIT',{badarg,_}} = (catch re:run("ABC","(*UTF)ABC",[never_utf])),
+ {'EXIT',{badarg,_}} = (catch re:run("ABC","(*UTF8)ABC",[never_utf])),
+ {error,_} = (catch re:compile("ABC",[unicode,never_utf])),
+ {error,_} = (catch re:compile("(*UTF)ABC",[never_utf])),
+ {error,_} = (catch re:compile("(*UTF8)ABC",[never_utf])),
+ ok.
+opt_ucp(doc) ->
+ "Check that the ucp option is passed to PCRE";
+opt_ucp(Config) when is_list(Config) ->
+ {match,[{0,1}]} = re:run([$a],"\\w",[unicode]),
+ {match,[{0,2}]} = re:run([229],"\\w",[unicode]), % Latin1 works without UCP, as we have a default
+ % Latin1 table
+ nomatch = re:run([1024],"\\w",[unicode]), % Latin1 word characters only, 1024 is not latin1
+ {match,[{0,2}]} = re:run([1024],"\\w",[unicode,ucp]), % Any Unicode word character works with 'ucp'
+ ok.
+match_limit(doc) ->
+ "Check that the match_limit and match_limit_recursion options work";
+match_limit(Config) when is_list(Config) ->
+ nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[]),
+ nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit,3000}]),
+ nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit_recursion,10}]),
+ nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[report_errors]),
+ {error,match_limit} = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit,3000},
+ report_errors]),
+ {error,match_limit_recursion} =
+ re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit_recursion,10},
+ report_errors]),
+ {error,match_limit} = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit,3000},
+ report_errors,global]),
+ {error,match_limit_recursion} =
+ re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit_recursion,10},
+ report_errors,global]),
+ ["aaaaaaaaaaaaaz"] = re:split("aaaaaaaaaaaaaz","(a+)*zz",
+ [{match_limit_recursion,10},{return,list}]),
+ ["aaaaaaaaaaaaaz"] = re:split("aaaaaaaaaaaaaz","(a+)*zz",
+ [{match_limit,3000},{return,list}]),
+ "aaaaaaaaaaaaaz" = re:replace("aaaaaaaaaaaaaz","(a+)*zz","!",
+ [{match_limit_recursion,10},{return,list}]),
+ "aaaaaaaaaaaaaz" = re:replace("aaaaaaaaaaaaaz","(a+)*zz","!",
+ [{match_limit,3000},{return,list}]),
+ {'EXIT', {badarg,_}} = (catch re:replace("aaaaaaaaaaaaaz","(a+)*zz","!",
+ [{match_limit_recursion,-1},{return,list}])),
+ {'EXIT', {badarg,_}} = (catch re:replace("aaaaaaaaaaaaaz","(a+)*zz","!",
+ [{match_limit,-1},{return,list}])),
+ {'EXIT', {badarg,_}} = (catch re:run("aaaaaaaaaaaaaz","(a+)*zz",
+ [{match_limit_recursion,-1},
+ report_errors,global])),
+ {'EXIT', {badarg,_}} = (catch re:run("aaaaaaaaaaaaaz","(a+)*zz",
+ [{match_limit,-1},
+ report_errors,global])),
+ ok.
+sub_binaries(doc) ->
+ "test that we get sub-binaries if subject is a binary and we "
+ "capture binaries";
+sub_binaries(Config) when is_list(Config) ->
+ Bin = list_to_binary(lists:seq(1,255)),
+ {match,[B,C]}=re:run(Bin,"(a)",[{capture,all,binary}]),
+ 255 = binary:referenced_byte_size(B),
+ 255 = binary:referenced_byte_size(C),
+ {match,[D]}=re:run(Bin,"(a)",[{capture,[1],binary}]),
+ 255 = binary:referenced_byte_size(D),
+ ok.
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput1 b/lib/stdlib/test/re_SUITE_data/testoutput1
index 3bf4ffbeee..3ed635146a 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput1
+++ b/lib/stdlib/test/re_SUITE_data/testoutput1
@@ -1,3 +1,7 @@
+/-- This set of tests is for features that are compatible with all versions of
+ Perl >= 5.10, in non-UTF-8 mode. It should run clean for both the 8-bit and
+ 16-bit PCRE libraries. --/
+
/the quick brown fox/
the quick brown fox
0: the quick brown fox
@@ -2281,7 +2285,7 @@ No match
0: c
*** Failers
0: s
- abk
+ abk
No match
/[^k]{2,3}$/
@@ -2289,7 +2293,7 @@ No match
0: abc
kbc
0: bc
- kabc
+ kabc
0: abc
*** Failers
0: ers
@@ -2859,7 +2863,7 @@ No match
the \"quick\" brown fox
0: "quick"
1: quick
- \"the \\\"quick\\\" brown fox\"
+ \"the \\\"quick\\\" brown fox\"
0: "the \"quick\" brown fox"
1: brown fox
@@ -3749,10 +3753,10 @@ No match
foobarbaz
No match
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
+/The cases of aaaa and aaaaaa are missed out below because Perl does things/
+/differently. We know that odd, and maybe incorrect, things happen with/
No match
-/where it does set $1 to aa when matching aaaaaa./
+/recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
No match
/^(a\1?){4}$/
@@ -3762,9 +3766,6 @@ No match
No match
aaa
No match
- aaaa
- 0: aaaa
- 1: a
aaaaa
0: aaaaa
1: a
@@ -6159,11 +6160,9 @@ No match
1: bc
2: bc
-/-- This tests for an IPv6 address in the form where it can have up to --/
-/-- eight components, one and only one of which is empty. This must be --/
-No match
-/-- an internal component. --/
-No match
+/-- This tests for an IPv6 address in the form where it can have up to
+ eight components, one and only one of which is empty. This must be
+ an internal component. --/
/^(?!:) # colon disallowed at start
(?: # start of item
@@ -6605,4 +6604,2600 @@ No match
p
0: p
-/ End of testinput1 /
+/.*[op][xyz]/
+ fooabcfoo
+No match
+
+/(?(?=.*b)b|^)/
+ adc
+ 0:
+ abc
+ 0: b
+
+/(?(?=^.*b)b|^)/
+ adc
+ 0:
+ abc
+No match
+
+/(?(?=.*b)b|^)*/
+ adc
+ 0:
+ abc
+ 0:
+
+/(?(?=.*b)b|^)+/
+ adc
+ 0:
+ abc
+ 0: b
+
+/(?(?=b).*b|^d)/
+ abc
+ 0: b
+
+/(?(?=.*b).*b|^d)/
+ abc
+ 0: ab
+
+/^%((?(?=[a])[^%])|b)*%$/
+ %ab%
+ 0: %ab%
+ 1:
+
+/(?i)a(?-i)b|c/
+ XabX
+ 0: ab
+ XAbX
+ 0: Ab
+ CcC
+ 0: c
+ ** Failers
+No match
+ XABX
+No match
+
+/[\x00-\xff\s]+/
+ \x0a\x0b\x0c\x0d
+ 0: \x0a\x0b\x0c\x0d
+
+/^\c/
+ ?
+ 0: ?
+
+/(abc)\1/i
+ abc
+No match
+
+/(abc)\1/
+ abc
+No match
+
+/[^a]*/i
+ 12abc
+ 0: 12
+ 12ABC
+ 0: 12
+
+/[^a]*+/i
+ 12abc
+ 0: 12
+ 12ABC
+ 0: 12
+
+/[^a]*?X/i
+ ** Failers
+No match
+ 12abc
+No match
+ 12ABC
+No match
+
+/[^a]+?X/i
+ ** Failers
+No match
+ 12abc
+No match
+ 12ABC
+No match
+
+/[^a]?X/i
+ 12aXbcX
+ 0: X
+ 12AXBCX
+ 0: X
+ BCX
+ 0: CX
+
+/[^a]??X/i
+ 12aXbcX
+ 0: X
+ 12AXBCX
+ 0: X
+ BCX
+ 0: CX
+
+/[^a]?+X/i
+ 12aXbcX
+ 0: cX
+ 12AXBCX
+ 0: CX
+ BCX
+ 0: CX
+
+/[^a]{2,3}/i
+ abcdef
+ 0: bcd
+ ABCDEF
+ 0: BCD
+
+/[^a]{2,3}?/i
+ abcdef
+ 0: bc
+ ABCDEF
+ 0: BC
+
+/[^a]{2,3}+/i
+ abcdef
+ 0: bcd
+ ABCDEF
+ 0: BCD
+
+/((a|)+)+Z/
+ Z
+ 0: Z
+ 1:
+ 2:
+
+/(a)b|(a)c/
+ ac
+ 0: ac
+ 1: <unset>
+ 2: a
+
+/(?>(a))b|(a)c/
+ ac
+ 0: ac
+ 1: <unset>
+ 2: a
+
+/(?=(a))ab|(a)c/
+ ac
+ 0: ac
+ 1: <unset>
+ 2: a
+
+/((?>(a))b|(a)c)/
+ ac
+ 0: ac
+ 1: ac
+ 2: <unset>
+ 3: a
+
+/((?>(a))b|(a)c)++/
+ ac
+ 0: ac
+ 1: ac
+ 2: <unset>
+ 3: a
+
+/(?:(?>(a))b|(a)c)++/
+ ac
+ 0: ac
+ 1: <unset>
+ 2: a
+
+/(?=(?>(a))b|(a)c)(..)/
+ ac
+ 0: ac
+ 1: <unset>
+ 2: a
+ 3: ac
+
+/(?>(?>(a))b|(a)c)/
+ ac
+ 0: ac
+ 1: <unset>
+ 2: a
+
+/(?:(?>([ab])))+a=/+
+ =ba=
+ 0: ba=
+ 0+
+ 1: b
+
+/(?>([ab]))+a=/+
+ =ba=
+ 0: ba=
+ 0+
+ 1: b
+
+/((?>(a+)b)+(aabab))/
+ aaaabaaabaabab
+ 0: aaaabaaabaabab
+ 1: aaaabaaabaabab
+ 2: aaa
+ 3: aabab
+
+/(?>a+|ab)+?c/
+ aabc
+No match
+
+/(?>a+|ab)+c/
+ aabc
+No match
+
+/(?:a+|ab)+c/
+ aabc
+ 0: aabc
+
+/(?(?=(a))a)/
+ a
+ 0: a
+ 1: a
+
+/(?(?=(a))a)(b)/
+ ab
+ 0: ab
+ 1: a
+ 2: b
+
+/^(?:a|ab)++c/
+ aaaabc
+No match
+
+/^(?>a|ab)++c/
+ aaaabc
+No match
+
+/^(?:a|ab)+c/
+ aaaabc
+ 0: aaaabc
+
+/(?=abc){3}abc/+
+ abcabcabc
+ 0: abc
+ 0+ abcabc
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=abc)+abc/+
+ abcabcabc
+ 0: abc
+ 0+ abcabc
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=abc)++abc/+
+ abcabcabc
+ 0: abc
+ 0+ abcabc
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=abc){0}xyz/
+ xyz
+ 0: xyz
+
+/(?=abc){1}xyz/
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=(a))?./
+ ab
+ 0: a
+ 1: a
+ bc
+ 0: b
+
+/(?=(a))??./
+ ab
+ 0: a
+ bc
+ 0: b
+
+/^(?=(a)){0}b(?1)/
+ backgammon
+ 0: ba
+
+/^(?=(?1))?[az]([abc])d/
+ abd
+ 0: abd
+ 1: b
+ zcdxx
+ 0: zcd
+ 1: c
+
+/^(?!a){0}\w+/
+ aaaaa
+ 0: aaaaa
+
+/(?<=(abc))?xyz/
+ abcxyz
+ 0: xyz
+ 1: abc
+ pqrxyz
+ 0: xyz
+
+/^[\g<a>]+/
+ ggg<<<aaa>>>
+ 0: ggg<<<aaa>>>
+ ** Failers
+No match
+ \\ga
+No match
+
+/^[\ga]+/
+ gggagagaxyz
+ 0: gggagaga
+
+/^[:a[:digit:]]+/
+ aaaa444:::Z
+ 0: aaaa444:::
+
+/^[:a[:digit:]:b]+/
+ aaaa444:::bbbZ
+ 0: aaaa444:::bbb
+
+/[:a]xxx[b:]/
+ :xxx:
+ 0: :xxx:
+
+/(?<=a{2})b/i
+ xaabc
+ 0: b
+ ** Failers
+No match
+ xabc
+No match
+
+/(?<!a{2})b/i
+ xabc
+ 0: b
+ ** Failers
+No match
+ xaabc
+No match
+
+/(?<=a\h)c/
+ xa c
+ 0: c
+
+/(?<=[^a]{2})b/
+ axxbc
+ 0: b
+ aAAbc
+ 0: b
+ ** Failers
+No match
+ xaabc
+No match
+
+/(?<=[^a]{2})b/i
+ axxbc
+ 0: b
+ ** Failers
+No match
+ aAAbc
+No match
+ xaabc
+No match
+
+/(?<=a\H)c/
+ abc
+ 0: c
+
+/(?<=a\V)c/
+ abc
+ 0: c
+
+/(?<=a\v)c/
+ a\nc
+ 0: c
+
+/(?(?=c)c|d)++Y/
+ XcccddYX
+ 0: cccddY
+
+/(?(?=c)c|d)*+Y/
+ XcccddYX
+ 0: cccddY
+
+/^(a{2,3}){2,}+a/
+ aaaaaaa
+ 0: aaaaaaa
+ 1: aaa
+ ** Failers
+No match
+ aaaaaa
+No match
+ aaaaaaaaa
+No match
+
+/^(a{2,3})++a/
+ ** Failers
+No match
+ aaaaaa
+No match
+
+/^(a{2,3})*+a/
+ ** Failers
+No match
+ aaaaaa
+No match
+
+/ab\Cde/
+ abXde
+ 0: abXde
+
+/(?<=ab\Cde)X/
+ abZdeX
+ 0: X
+
+/a[\CD]b/
+ aCb
+ 0: aCb
+ aDb
+ 0: aDb
+
+/a[\C-X]b/
+ aJb
+ 0: aJb
+
+/\H\h\V\v/
+ X X\x0a
+ 0: X X\x0a
+ X\x09X\x0b
+ 0: X\x09X\x0b
+ ** Failers
+No match
+ \xa0 X\x0a
+No match
+
+/\H*\h+\V?\v{3,4}/
+ \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
+ 0: \x09 \xa0X\x0a\x0b\x0c\x0d
+ \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
+ 0: \x09 \xa0\x0a\x0b\x0c\x0d
+ \x09\x20\xa0\x0a\x0b\x0c
+ 0: \x09 \xa0\x0a\x0b\x0c
+ ** Failers
+No match
+ \x09\x20\xa0\x0a\x0b
+No match
+
+/\H{3,4}/
+ XY ABCDE
+ 0: ABCD
+ XY PQR ST
+ 0: PQR
+
+/.\h{3,4}./
+ XY AB PQRS
+ 0: B P
+
+/\h*X\h?\H+Y\H?Z/
+ >XNNNYZ
+ 0: XNNNYZ
+ > X NYQZ
+ 0: X NYQZ
+ ** Failers
+No match
+ >XYZ
+No match
+ > X NY Z
+No match
+
+/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
+ >XY\x0aZ\x0aA\x0bNN\x0c
+ 0: XY\x0aZ\x0aA\x0bNN\x0c
+ >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
+ 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
+
+/(foo)\Kbar/
+ foobar
+ 0: bar
+ 1: foo
+
+/(foo)(\Kbar|baz)/
+ foobar
+ 0: bar
+ 1: foo
+ 2: bar
+ foobaz
+ 0: foobaz
+ 1: foo
+ 2: baz
+
+/(foo\Kbar)baz/
+ foobarbaz
+ 0: barbaz
+ 1: foobar
+
+/abc\K|def\K/g+
+ Xabcdefghi
+ 0:
+ 0+ defghi
+ 0:
+ 0+ ghi
+
+/ab\Kc|de\Kf/g+
+ Xabcdefghi
+ 0: c
+ 0+ defghi
+ 0: f
+ 0+ ghi
+
+/(?=C)/g+
+ ABCDECBA
+ 0:
+ 0+ CDECBA
+ 0:
+ 0+ CBA
+
+/^abc\K/+
+ abcdef
+ 0:
+ 0+ def
+ ** Failers
+No match
+ defabcxyz
+No match
+
+/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
+ ababababbbabZXXXX
+ 0: ababababbbabZ
+ 1: ab
+ 2: b
+
+/(?<A>tom|bon)-\g{A}/
+ tom-tom
+ 0: tom-tom
+ 1: tom
+ bon-bon
+ 0: bon-bon
+ 1: bon
+
+/(^(a|b\g{-1}))/
+ bacxxx
+No match
+
+/(?|(abc)|(xyz))\1/
+ abcabc
+ 0: abcabc
+ 1: abc
+ xyzxyz
+ 0: xyzxyz
+ 1: xyz
+ ** Failers
+No match
+ abcxyz
+No match
+ xyzabc
+No match
+
+/(?|(abc)|(xyz))(?1)/
+ abcabc
+ 0: abcabc
+ 1: abc
+ xyzabc
+ 0: xyzabc
+ 1: xyz
+ ** Failers
+No match
+ xyzxyz
+No match
+
+/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
+ XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: Y
+
+/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
+ XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: <unset>
+ 4: <unset>
+ 5: c
+ 6: d
+ 7: Y
+
+/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
+ XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: <unset>
+ 4: <unset>
+ 5: c
+ 6: d
+ 7: Y
+
+/(?'abc'\w+):\k<abc>{2}/
+ a:aaxyz
+ 0: a:aa
+ 1: a
+ ab:ababxyz
+ 0: ab:abab
+ 1: ab
+ ** Failers
+No match
+ a:axyz
+No match
+ ab:abxyz
+No match
+
+/(?'abc'\w+):\g{abc}{2}/
+ a:aaxyz
+ 0: a:aa
+ 1: a
+ ab:ababxyz
+ 0: ab:abab
+ 1: ab
+ ** Failers
+No match
+ a:axyz
+No match
+ ab:abxyz
+No match
+
+/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
+ abd
+ 0: abd
+ 1: a
+ ce
+ 0: ce
+
+/^(a.)\g-1Z/
+ aXaXZ
+ 0: aXaXZ
+ 1: aX
+
+/^(a.)\g{-1}Z/
+ aXaXZ
+ 0: aXaXZ
+ 1: aX
+
+/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
+ abcd
+ 0: ab
+
+/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\d+)
+ )/x
+ metcalfe 33
+ 0: metcalfe 33
+ 1: metcalfe
+ 2: 33
+
+/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
+ 1.2.3.4
+ 0: 1.2.3.4
+ 1: <unset>
+ 2: .4
+ 131.111.10.206
+ 0: 131.111.10.206
+ 1: <unset>
+ 2: .206
+ 10.0.0.0
+ 0: 10.0.0.0
+ 1: <unset>
+ 2: .0
+ ** Failers
+No match
+ 10.6
+No match
+ 455.3.4.5
+No match
+
+/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
+ 1.2.3.4
+ 0: 1.2.3.4
+ 1: .4
+ 131.111.10.206
+ 0: 131.111.10.206
+ 1: .206
+ 10.0.0.0
+ 0: 10.0.0.0
+ 1: .0
+ ** Failers
+No match
+ 10.6
+No match
+ 455.3.4.5
+No match
+
+/^(\w++|\s++)*$/
+ now is the time for all good men to come to the aid of the party
+ 0: now is the time for all good men to come to the aid of the party
+ 1: party
+ *** Failers
+No match
+ this is not a line with only words and spaces!
+No match
+
+/(\d++)(\w)/
+ 12345a
+ 0: 12345a
+ 1: 12345
+ 2: a
+ *** Failers
+No match
+ 12345+
+No match
+
+/a++b/
+ aaab
+ 0: aaab
+
+/(a++b)/
+ aaab
+ 0: aaab
+ 1: aaab
+
+/(a++)b/
+ aaab
+ 0: aaab
+ 1: aaa
+
+/([^()]++|\([^()]*\))+/
+ ((abc(ade)ufh()()x
+ 0: abc(ade)ufh()()x
+ 1: x
+
+/\(([^()]++|\([^()]+\))+\)/
+ (abc)
+ 0: (abc)
+ 1: abc
+ (abc(def)xyz)
+ 0: (abc(def)xyz)
+ 1: xyz
+ *** Failers
+No match
+ ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+
+/^([^()]|\((?1)*\))*$/
+ abc
+ 0: abc
+ 1: c
+ a(b)c
+ 0: a(b)c
+ 1: c
+ a(b(c))d
+ 0: a(b(c))d
+ 1: d
+ *** Failers)
+No match
+ a(b(c)d
+No match
+
+/^>abc>([^()]|\((?1)*\))*<xyz<$/
+ >abc>123<xyz<
+ 0: >abc>123<xyz<
+ 1: 3
+ >abc>1(2)3<xyz<
+ 0: >abc>1(2)3<xyz<
+ 1: 3
+ >abc>(1(2)3)<xyz<
+ 0: >abc>(1(2)3)<xyz<
+ 1: (1(2)3)
+
+/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
+ 1221
+ 0: 1221
+ 1: 1221
+ 2: 1
+ Satanoscillatemymetallicsonatas
+ 0: Satanoscillatemymetallicsonatas
+ 1: <unset>
+ 2: <unset>
+ 3: Satanoscillatemymetallicsonatas
+ 4: S
+ AmanaplanacanalPanama
+ 0: AmanaplanacanalPanama
+ 1: <unset>
+ 2: <unset>
+ 3: AmanaplanacanalPanama
+ 4: A
+ AblewasIereIsawElba
+ 0: AblewasIereIsawElba
+ 1: <unset>
+ 2: <unset>
+ 3: AblewasIereIsawElba
+ 4: A
+ *** Failers
+No match
+ Thequickbrownfox
+No match
+
+/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
+ 12
+ 0: 12
+ 1: 12
+ (((2+2)*-3)-7)
+ 0: (((2+2)*-3)-7)
+ 1: (((2+2)*-3)-7)
+ 2: -
+ -12
+ 0: -12
+ 1: -12
+ *** Failers
+No match
+ ((2+2)*-3)-7)
+No match
+
+/^(x(y|(?1){2})z)/
+ xyz
+ 0: xyz
+ 1: xyz
+ 2: y
+ xxyzxyzz
+ 0: xxyzxyzz
+ 1: xxyzxyzz
+ 2: xyzxyz
+ *** Failers
+No match
+ xxyzz
+No match
+ xxyzxyzxyzz
+No match
+
+/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
+ <>
+ 0: <>
+ 1: <>
+ 2: <>
+ <abcd>
+ 0: <abcd>
+ 1: <abcd>
+ 2: <abcd>
+ <abc <123> hij>
+ 0: <abc <123> hij>
+ 1: <abc <123> hij>
+ 2: <abc <123> hij>
+ <abc <def> hij>
+ 0: <def>
+ 1: <def>
+ 2: <def>
+ <abc<>def>
+ 0: <abc<>def>
+ 1: <abc<>def>
+ 2: <abc<>def>
+ <abc<>
+ 0: <>
+ 1: <>
+ 2: <>
+ *** Failers
+No match
+ <abc
+No match
+
+/^a+(*FAIL)/
+ aaaaaa
+No match
+
+/a+b?c+(*FAIL)/
+ aaabccc
+No match
+
+/a+b?(*PRUNE)c+(*FAIL)/
+ aaabccc
+No match
+
+/a+b?(*COMMIT)c+(*FAIL)/
+ aaabccc
+No match
+
+/a+b?(*SKIP)c+(*FAIL)/
+ aaabcccaaabccc
+No match
+
+/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
+ aaaxxxxxx
+ 0: aaaxxxxxx
+ aaa++++++
+ 0: aaa
+ bbbxxxxx
+ 0: bbbxxxxx
+ bbb+++++
+ 0: bbb
+ cccxxxx
+ 0: cccxxxx
+ ccc++++
+ 0: ccc
+ dddddddd
+ 0: ddd
+
+/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
+ aaaxxxxxx
+ 0: aaaxxxxxx
+ 1: aaaxxxxxx
+ aaa++++++
+ 0: aaa
+ 1: aaa
+ bbbxxxxx
+ 0: bbbxxxxx
+ 1: bbbxxxxx
+ bbb+++++
+ 0: bbb
+ 1: bbb
+ cccxxxx
+ 0: cccxxxx
+ 1: cccxxxx
+ ccc++++
+ 0: ccc
+ 1: ccc
+ dddddddd
+ 0: ddd
+ 1: ddd
+
+/a+b?(*THEN)c+(*FAIL)/
+ aaabccc
+No match
+
+/(A (A|B(*ACCEPT)|C) D)(E)/x
+ AB
+ 0: AB
+ 1: AB
+ 2: B
+ ABX
+ 0: AB
+ 1: AB
+ 2: B
+ AADE
+ 0: AADE
+ 1: AAD
+ 2: A
+ 3: E
+ ACDE
+ 0: ACDE
+ 1: ACD
+ 2: C
+ 3: E
+ ** Failers
+No match
+ AD
+No match
+
+/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
+ 1221
+ 0: 1221
+ 1: 1221
+ 2: 1
+ Satan, oscillate my metallic sonatas!
+ 0: Satan, oscillate my metallic sonatas!
+ 1: <unset>
+ 2: <unset>
+ 3: Satan, oscillate my metallic sonatas
+ 4: S
+ A man, a plan, a canal: Panama!
+ 0: A man, a plan, a canal: Panama!
+ 1: <unset>
+ 2: <unset>
+ 3: A man, a plan, a canal: Panama
+ 4: A
+ Able was I ere I saw Elba.
+ 0: Able was I ere I saw Elba.
+ 1: <unset>
+ 2: <unset>
+ 3: Able was I ere I saw Elba
+ 4: A
+ *** Failers
+No match
+ The quick brown fox
+No match
+
+/^((.)(?1)\2|.)$/
+ a
+ 0: a
+ 1: a
+ aba
+ 0: aba
+ 1: aba
+ 2: a
+ aabaa
+ 0: aabaa
+ 1: aabaa
+ 2: a
+ abcdcba
+ 0: abcdcba
+ 1: abcdcba
+ 2: a
+ pqaabaaqp
+ 0: pqaabaaqp
+ 1: pqaabaaqp
+ 2: p
+ ablewasiereisawelba
+ 0: ablewasiereisawelba
+ 1: ablewasiereisawelba
+ 2: a
+ rhubarb
+No match
+ the quick brown fox
+No match
+
+/(a)(?<=b(?1))/
+ baz
+ 0: a
+ 1: a
+ ** Failers
+No match
+ caz
+No match
+
+/(?<=b(?1))(a)/
+ zbaaz
+ 0: a
+ 1: a
+ ** Failers
+No match
+ aaa
+No match
+
+/(?<X>a)(?<=b(?&X))/
+ baz
+ 0: a
+ 1: a
+
+/^(?|(abc)|(def))\1/
+ abcabc
+ 0: abcabc
+ 1: abc
+ defdef
+ 0: defdef
+ 1: def
+ ** Failers
+No match
+ abcdef
+No match
+ defabc
+No match
+
+/^(?|(abc)|(def))(?1)/
+ abcabc
+ 0: abcabc
+ 1: abc
+ defabc
+ 0: defabc
+ 1: def
+ ** Failers
+No match
+ defdef
+No match
+ abcdef
+No match
+
+/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
+ a\"aaaaa
+ 0: a"aaaaa
+ 1: "
+ 2: <unset>
+ 3: "
+ b\"aaaaa
+ 0: b"aaaaa
+ 1: <unset>
+ 2: <unset>
+ 3: <unset>
+ 4: "
+ 5: <unset>
+ 6: "
+ ** Failers
+No match
+ b\"11111
+No match
+
+/(?:(?1)|B)(A(*F)|C)/
+ ABCD
+ 0: BC
+ 1: C
+ CCD
+ 0: CC
+ 1: C
+ ** Failers
+No match
+ CAD
+No match
+
+/^(?:(?1)|B)(A(*F)|C)/
+ CCD
+ 0: CC
+ 1: C
+ BCD
+ 0: BC
+ 1: C
+ ** Failers
+No match
+ ABCD
+No match
+ CAD
+No match
+ BAD
+No match
+
+/(?:(?1)|B)(A(*ACCEPT)XX|C)D/
+ AAD
+ 0: AA
+ 1: A
+ ACD
+ 0: ACD
+ 1: C
+ BAD
+ 0: BA
+ 1: A
+ BCD
+ 0: BCD
+ 1: C
+ BAX
+ 0: BA
+ 1: A
+ ** Failers
+No match
+ ACX
+No match
+ ABC
+No match
+
+/(?(DEFINE)(A))B(?1)C/
+ BAC
+ 0: BAC
+
+/(?(DEFINE)((A)\2))B(?1)C/
+ BAAC
+ 0: BAAC
+
+/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
+ (ab(cd)ef)
+ 0: (ab(cd)ef)
+ 1: (ab(cd)ef)
+ 2: ef
+
+/^(?=a(*SKIP)b|ac)/
+ ** Failers
+No match
+ ac
+No match
+
+/^(?=a(*PRUNE)b)/
+ ab
+ 0:
+ ** Failers
+No match
+ ac
+No match
+
+/^(?=a(*ACCEPT)b)/
+ ac
+ 0:
+
+/(?>a\Kb)/
+ ab
+ 0: b
+
+/((?>a\Kb))/
+ ab
+ 0: b
+ 1: ab
+
+/(a\Kb)/
+ ab
+ 0: b
+ 1: ab
+
+/^a\Kcz|ac/
+ ac
+ 0: ac
+
+/(?>a\Kbz|ab)/
+ ab
+ 0: ab
+
+/^(?&t)(?(DEFINE)(?<t>a\Kb))$/
+ ab
+ 0: b
+
+/^([^()]|\((?1)*\))*$/
+ a(b)c
+ 0: a(b)c
+ 1: c
+ a(b(c)d)e
+ 0: a(b(c)d)e
+ 1: e
+
+/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
+ 0
+ 0: 0
+ 1: 0
+ 00
+ 0: 00
+ 1: 00
+ 2: 0
+ 0000
+ 0: 0000
+ 1: 0000
+ 2: 0
+
+/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
+ 0
+ 0: 0
+ 1: 0
+ 2: 0
+ 00
+ 0: 0
+ 1: 0
+ 2: 0
+ 0000
+ 0: 0
+ 1: 0
+ 2: 0
+
+/--- This one does fail, as expected, in Perl. It needs the complex item at the
+ end of the pattern. A single letter instead of (B|D) makes it not fail,
+ which I think is a Perl bug. --- /
+
+/A(*COMMIT)(B|D)/
+ ACABX
+No match
+
+/--- Check the use of names for failure ---/
+
+/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
+ ** Failers
+No match
+ AC
+No match, mark = A
+ CB
+No match, mark = B
+
+/--- Force no study, otherwise mark is not seen. The studied version is in
+ test 2 because it isn't Perl-compatible. ---/
+
+/(*MARK:A)(*SKIP:B)(C|X)/KSS
+ C
+ 0: C
+ 1: C
+MK: A
+ D
+No match, mark = A
+
+/^(A(*THEN:A)B|C(*THEN:B)D)/K
+ ** Failers
+No match
+ CB
+No match, mark = B
+
+/^(?:A(*THEN:A)B|C(*THEN:B)D)/K
+ CB
+No match, mark = B
+
+/^(?>A(*THEN:A)B|C(*THEN:B)D)/K
+ CB
+No match, mark = B
+
+/--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
+that we have to have something complicated such as (B|Z) at the end because,
+for Perl, a simple character somehow causes an unwanted optimization to mess
+with the handling of backtracking verbs. ---/
+
+/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
+ AAAC
+ 0: AC
+
+/--- Test skipping over a non-matching mark. ---/
+
+/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
+ AAAC
+ 0: AC
+
+/--- Check shorthand for MARK ---/
+
+/A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
+ AAAC
+ 0: AC
+
+/--- Don't loop! Force no study, otherwise mark is not seen. ---/
+
+/(*:A)A+(*SKIP:A)(B|Z)/KSS
+ AAAC
+No match, mark = A
+
+/--- This should succeed, as a non-existent skip name disables the skip ---/
+
+/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
+ AAAC
+ 0: AC
+
+/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
+ AAAC
+ 0: AC
+MK: B
+
+/--- COMMIT at the start of a pattern should act like an anchor. Again,
+however, we need the complication for Perl. ---/
+
+/(*COMMIT)(A|P)(B|P)(C|P)/
+ ABCDEFG
+ 0: ABC
+ 1: A
+ 2: B
+ 3: C
+ ** Failers
+No match
+ DEFGABC
+No match
+
+/--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
+
+/(\w+)(?>b(*COMMIT))\w{2}/
+ abbb
+ 0: abbb
+ 1: a
+
+/(\w+)b(*COMMIT)\w{2}/
+ abbb
+No match
+
+/--- Check opening parens in comment when seeking forward reference. ---/
+
+/(?&t)(?#()(?(DEFINE)(?<t>a))/
+ bac
+ 0: a
+
+/--- COMMIT should override THEN ---/
+
+/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
+ yes
+No match
+
+/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
+ yes
+No match
+
+/b?(*SKIP)c/
+ bc
+ 0: bc
+ abc
+ 0: bc
+
+/(*SKIP)bc/
+ a
+No match
+
+/(*SKIP)b/
+ a
+No match
+
+/(?P<abn>(?P=abn)xxx|)+/
+ xxx
+ 0:
+ 1:
+
+/(?i:([^b]))(?1)/
+ aa
+ 0: aa
+ 1: a
+ aA
+ 0: aA
+ 1: a
+ ** Failers
+ 0: **
+ 1: *
+ ab
+No match
+ aB
+No match
+ Ba
+No match
+ ba
+No match
+
+/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
+ aaaaaaX
+ 0: aaaaaaX
+ ** Failers
+No match
+ aaaaaa
+No match
+
+/^(?&t)*(?(DEFINE)(?<t>a))\w$/
+ aaaaaaX
+ 0: aaaaaaX
+ aaaaaa
+ 0: aaaaaa
+
+/^(a)*+(\w)/
+ aaaaX
+ 0: aaaaX
+ 1: a
+ 2: X
+ YZ
+ 0: Y
+ 1: <unset>
+ 2: Y
+ ** Failers
+No match
+ aaaa
+No match
+
+/^(?:a)*+(\w)/
+ aaaaX
+ 0: aaaaX
+ 1: X
+ YZ
+ 0: Y
+ 1: Y
+ ** Failers
+No match
+ aaaa
+No match
+
+/^(a)++(\w)/
+ aaaaX
+ 0: aaaaX
+ 1: a
+ 2: X
+ ** Failers
+No match
+ aaaa
+No match
+ YZ
+No match
+
+/^(?:a)++(\w)/
+ aaaaX
+ 0: aaaaX
+ 1: X
+ ** Failers
+No match
+ aaaa
+No match
+ YZ
+No match
+
+/^(a)?+(\w)/
+ aaaaX
+ 0: aa
+ 1: a
+ 2: a
+ YZ
+ 0: Y
+ 1: <unset>
+ 2: Y
+
+/^(?:a)?+(\w)/
+ aaaaX
+ 0: aa
+ 1: a
+ YZ
+ 0: Y
+ 1: Y
+
+/^(a){2,}+(\w)/
+ aaaaX
+ 0: aaaaX
+ 1: a
+ 2: X
+ ** Failers
+No match
+ aaa
+No match
+ YZ
+No match
+
+/^(?:a){2,}+(\w)/
+ aaaaX
+ 0: aaaaX
+ 1: X
+ ** Failers
+No match
+ aaa
+No match
+ YZ
+No match
+
+/(a|)*(?1)b/
+ b
+ 0: b
+ 1:
+ ab
+ 0: ab
+ 1:
+ aab
+ 0: aab
+ 1:
+
+/(a)++(?1)b/
+ ** Failers
+No match
+ ab
+No match
+ aab
+No match
+
+/(a)*+(?1)b/
+ ** Failers
+No match
+ ab
+No match
+ aab
+No match
+
+/(?1)(?:(b)){0}/
+ b
+ 0: b
+
+/(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
+ foo(bar(baz)+baz(bop))
+ 0: foo(bar(baz)+baz(bop))
+ 1: foo(bar(baz)+baz(bop))
+ 2: (bar(baz)+baz(bop))
+ 3: bar(baz)+baz(bop)
+
+/(A (A|B(*ACCEPT)|C) D)(E)/x
+ AB
+ 0: AB
+ 1: AB
+ 2: B
+
+/\A.*?(a|bc)/
+ ba
+ 0: ba
+ 1: a
+
+/\A.*?(?:a|bc)++/
+ ba
+ 0: ba
+
+/\A.*?(a|bc)++/
+ ba
+ 0: ba
+ 1: a
+
+/\A.*?(?:a|bc|d)/
+ ba
+ 0: ba
+
+/(?:(b))++/
+ beetle
+ 0: b
+ 1: b
+
+/(?(?=(a(*ACCEPT)z))a)/
+ a
+ 0: a
+ 1: a
+
+/^(a)(?1)+ab/
+ aaaab
+ 0: aaaab
+ 1: a
+
+/^(a)(?1)++ab/
+ aaaab
+No match
+
+/^(?=a(*:M))aZ/K
+ aZbc
+ 0: aZ
+MK: M
+
+/^(?!(*:M)b)aZ/K
+ aZbc
+ 0: aZ
+
+/(?(DEFINE)(a))?b(?1)/
+ backgammon
+ 0: ba
+
+/^\N+/
+ abc\ndef
+ 0: abc
+
+/^\N{1,}/
+ abc\ndef
+ 0: abc
+
+/(?(R)a+|(?R)b)/
+ aaaabcde
+ 0: aaaab
+
+/(?(R)a+|((?R))b)/
+ aaaabcde
+ 0: aaaab
+ 1: aaaa
+
+/((?(R)a+|(?1)b))/
+ aaaabcde
+ 0: aaaab
+ 1: aaaab
+
+/((?(R1)a+|(?1)b))/
+ aaaabcde
+ 0: aaaab
+ 1: aaaab
+
+/a(*:any
+name)/K
+ abc
+ 0: a
+MK: any \x0aname
+
+/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
+ a
+ 0: a
+ ba
+ 0: a
+ bba
+ 0: a
+
+/--- Checking revised (*THEN) handling ---/
+
+/--- Capture ---/
+
+/^.*? (a(*THEN)b) c/x
+ aabc
+No match
+
+/^.*? (a(*THEN)b|(*F)) c/x
+ aabc
+ 0: aabc
+ 1: ab
+
+/^.*? ( (a(*THEN)b) | (*F) ) c/x
+ aabc
+ 0: aabc
+ 1: ab
+ 2: ab
+
+/^.*? ( (a(*THEN)b) ) c/x
+ aabc
+No match
+
+/--- Non-capture ---/
+
+/^.*? (?:a(*THEN)b) c/x
+ aabc
+No match
+
+/^.*? (?:a(*THEN)b|(*F)) c/x
+ aabc
+ 0: aabc
+
+/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
+ aabc
+ 0: aabc
+
+/^.*? (?: (?:a(*THEN)b) ) c/x
+ aabc
+No match
+
+/--- Atomic ---/
+
+/^.*? (?>a(*THEN)b) c/x
+ aabc
+No match
+
+/^.*? (?>a(*THEN)b|(*F)) c/x
+ aabc
+ 0: aabc
+
+/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
+ aabc
+ 0: aabc
+
+/^.*? (?> (?>a(*THEN)b) ) c/x
+ aabc
+No match
+
+/--- Possessive capture ---/
+
+/^.*? (a(*THEN)b)++ c/x
+ aabc
+No match
+
+/^.*? (a(*THEN)b|(*F))++ c/x
+ aabc
+ 0: aabc
+ 1: ab
+
+/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
+ aabc
+ 0: aabc
+ 1: ab
+ 2: ab
+
+/^.*? ( (a(*THEN)b)++ )++ c/x
+ aabc
+No match
+
+/--- Possessive non-capture ---/
+
+/^.*? (?:a(*THEN)b)++ c/x
+ aabc
+No match
+
+/^.*? (?:a(*THEN)b|(*F))++ c/x
+ aabc
+ 0: aabc
+
+/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
+ aabc
+ 0: aabc
+
+/^.*? (?: (?:a(*THEN)b)++ )++ c/x
+ aabc
+No match
+
+/--- Condition assertion ---/
+
+/^(?(?=a(*THEN)b)ab|ac)/
+ ac
+ 0: ac
+
+/--- Condition ---/
+
+/^.*?(?(?=a)a|b(*THEN)c)/
+ ba
+No match
+
+/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
+ ba
+ 0: ba
+
+/^.*?(?(?=a)a(*THEN)b|c)/
+ ac
+No match
+
+/--- Assertion ---/
+
+/^.*(?=a(*THEN)b)/
+ aabc
+ 0: a
+
+/------------------------------/
+
+/(?>a(*:m))/imsxSK
+ a
+ 0: a
+MK: m
+
+/(?>(a)(*:m))/imsxSK
+ a
+ 0: a
+ 1: a
+MK: m
+
+/(?<=a(*ACCEPT)b)c/
+ xacd
+ 0: c
+
+/(?<=(a(*ACCEPT)b))c/
+ xacd
+ 0: c
+ 1: a
+
+/(?<=(a(*COMMIT)b))c/
+ xabcd
+ 0: c
+ 1: ab
+ ** Failers
+No match
+ xacd
+No match
+
+/(?<!a(*FAIL)b)c/
+ xcd
+ 0: c
+ acd
+ 0: c
+
+/(?<=a(*:N)b)c/K
+ xabcd
+ 0: c
+MK: N
+
+/(?<=a(*PRUNE)b)c/
+ xabcd
+ 0: c
+
+/(?<=a(*SKIP)b)c/
+ xabcd
+ 0: c
+
+/(?<=a(*THEN)b)c/
+ xabcd
+ 0: c
+
+/(a)(?2){2}(.)/
+ abcd
+ 0: abcd
+ 1: a
+ 2: d
+
+/(*MARK:A)(*PRUNE:B)(C|X)/KS
+ C
+ 0: C
+ 1: C
+MK: B
+ D
+No match, mark = B
+
+/(*MARK:A)(*PRUNE:B)(C|X)/KSS
+ C
+ 0: C
+ 1: C
+MK: B
+ D
+No match, mark = B
+
+/(*MARK:A)(*THEN:B)(C|X)/KS
+ C
+ 0: C
+ 1: C
+MK: B
+ D
+No match, mark = B
+
+/(*MARK:A)(*THEN:B)(C|X)/KSY
+ C
+ 0: C
+ 1: C
+MK: B
+ D
+No match, mark = B
+
+/(*MARK:A)(*THEN:B)(C|X)/KSS
+ C
+ 0: C
+ 1: C
+MK: B
+ D
+No match, mark = B
+
+/--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
+
+/A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
+ AAAC
+No match, mark = A
+
+/--- Same --/
+
+/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
+ AAAC
+No match, mark = B
+
+/A(*:A)A+(*SKIP)(B|Z) | AC/xK
+ AAAC
+No match, mark = A
+
+/--- This should fail, as a null name is the same as no name ---/
+
+/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
+ AAAC
+No match, mark = A
+
+/--- A check on what happens after hitting a mark and them bumping along to
+something that does not even start. Perl reports tags after the failures here,
+though it does not when the individual letters are made into something
+more complicated. ---/
+
+/A(*:A)B|XX(*:B)Y/K
+ AABC
+ 0: AB
+MK: A
+ XXYZ
+ 0: XXY
+MK: B
+ ** Failers
+No match
+ XAQQ
+No match, mark = A
+ XAQQXZZ
+No match, mark = A
+ AXQQQ
+No match, mark = A
+ AXXQQQ
+No match, mark = B
+
+/^(A(*THEN:A)B|C(*THEN:B)D)/K
+ AB
+ 0: AB
+ 1: AB
+MK: A
+ CD
+ 0: CD
+ 1: CD
+MK: B
+ ** Failers
+No match
+ AC
+No match, mark = A
+ CB
+No match, mark = B
+
+/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
+ AB
+ 0: AB
+ 1: AB
+MK: A
+ CD
+ 0: CD
+ 1: CD
+MK: B
+ ** Failers
+No match
+ AC
+No match, mark = A
+ CB
+No match, mark = B
+
+/--- An empty name does not pass back an empty string. It is the same as if no
+name were given. ---/
+
+/^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
+ AB
+ 0: AB
+ 1: AB
+ CD
+ 0: CD
+ 1: CD
+MK: B
+
+/--- PRUNE goes to next bumpalong; COMMIT does not. ---/
+
+/A(*PRUNE:A)B/K
+ ACAB
+ 0: AB
+MK: A
+
+/--- Mark names can be duplicated ---/
+
+/A(*:A)B|X(*:A)Y/K
+ AABC
+ 0: AB
+MK: A
+ XXYZ
+ 0: XY
+MK: A
+
+/b(*:m)f|a(*:n)w/K
+ aw
+ 0: aw
+MK: n
+ ** Failers
+No match, mark = n
+ abc
+No match, mark = m
+
+/b(*:m)f|aw/K
+ abaw
+ 0: aw
+ ** Failers
+No match
+ abc
+No match, mark = m
+ abax
+No match, mark = m
+
+/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
+ AAAC
+ 0: AAC
+
+/a(*PRUNE:X)bc|qq/KY
+ ** Failers
+No match, mark = X
+ axy
+No match, mark = X
+
+/a(*THEN:X)bc|qq/KY
+ ** Failers
+No match, mark = X
+ axy
+No match, mark = X
+
+/(?=a(*MARK:A)b)..x/K
+ abxy
+ 0: abx
+MK: A
+ ** Failers
+No match
+ abpq
+No match
+
+/(?=a(*MARK:A)b)..(*:Y)x/K
+ abxy
+ 0: abx
+MK: Y
+ ** Failers
+No match
+ abpq
+No match
+
+/(?=a(*PRUNE:A)b)..x/K
+ abxy
+ 0: abx
+MK: A
+ ** Failers
+No match
+ abpq
+No match
+
+/(?=a(*PRUNE:A)b)..(*:Y)x/K
+ abxy
+ 0: abx
+MK: Y
+ ** Failers
+No match
+ abpq
+No match
+
+/(?=a(*THEN:A)b)..x/K
+ abxy
+ 0: abx
+MK: A
+ ** Failers
+No match
+ abpq
+No match
+
+/(?=a(*THEN:A)b)..(*:Y)x/K
+ abxy
+ 0: abx
+MK: Y
+ ** Failers
+No match
+ abpq
+No match
+
+/(another)?(\1?)test/
+ hello world test
+ 0: test
+ 1: <unset>
+ 2:
+
+/(another)?(\1+)test/
+ hello world test
+No match
+
+/(a(*COMMIT)b){0}a(?1)|aac/
+ aac
+ 0: aac
+
+/((?:a?)*)*c/
+ aac
+ 0: aac
+ 1:
+
+/((?>a?)*)*c/
+ aac
+ 0: aac
+ 1:
+
+/(?>.*?a)(?<=ba)/
+ aba
+ 0: ba
+
+/(?:.*?a)(?<=ba)/
+ aba
+ 0: aba
+
+/.*?a(*PRUNE)b/
+ aab
+ 0: ab
+
+/.*?a(*PRUNE)b/s
+ aab
+ 0: ab
+
+/^a(*PRUNE)b/s
+ aab
+No match
+
+/.*?a(*SKIP)b/
+ aab
+ 0: ab
+
+/(?>.*?a)b/s
+ aab
+ 0: ab
+
+/(?>.*?a)b/
+ aab
+ 0: ab
+
+/(?>^a)b/s
+ aab
+No match
+
+/(?>.*?)(?<=(abcd)|(wxyz))/
+ alphabetabcd
+ 0:
+ 1: abcd
+ endingwxyz
+ 0:
+ 1: <unset>
+ 2: wxyz
+
+/(?>.*)(?<=(abcd)|(wxyz))/
+ alphabetabcd
+ 0: alphabetabcd
+ 1: abcd
+ endingwxyz
+ 0: endingwxyz
+ 1: <unset>
+ 2: wxyz
+
+"(?>.*)foo"
+ abcdfooxyz
+No match
+
+"(?>.*?)foo"
+ abcdfooxyz
+ 0: foo
+
+/(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
+ ac
+ 0: ac
+
+/(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
+ ac
+ 0: ac
+
+/(?<=(*SKIP)ac)a/
+ aa
+No match
+
+/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
+ AAAC
+ 0: AC
+
+/a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
+ acacd
+ 0: acd
+MK: n
+
+/A(*SKIP:m)x|A(*SKIP:n)x|AB/K
+ AB
+ 0: AB
+
+/((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
+ acacd
+ 0: ac
+MK: n
+
+/-- Tests that try to figure out how Perl works. My hypothesis is that the
+ first verb that is backtracked onto is the one that acts. This seems to be
+ the case almost all the time, but there is one exception that is perhaps a
+ bug. --/
+
+/-- This matches "aaaac"; each PRUNE advances one character until the subject
+ no longer starts with 5 'a's. --/
+
+/aaaaa(*PRUNE)b|a+c/
+ aaaaaac
+ 0: aaaac
+
+/-- Putting SKIP in front of PRUNE makes no difference, as it is never
+backtracked onto, whether or not it has a label. --/
+
+/aaaaa(*SKIP)(*PRUNE)b|a+c/
+ aaaaaac
+ 0: aaaac
+
+/aaaaa(*SKIP:N)(*PRUNE)b|a+c/
+ aaaaaac
+ 0: aaaac
+
+/aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
+ aaaaaac
+ 0: aaaac
+
+/-- Putting THEN in front makes no difference. */
+
+/aaaaa(*THEN)(*PRUNE)b|a+c/
+ aaaaaac
+ 0: aaaac
+
+/-- However, putting COMMIT in front of the prune changes it to "no match". I
+ think this is inconsistent and possibly a bug. For the moment, running this
+ test is moved out of the Perl-compatible file. --/
+
+/aaaaa(*COMMIT)(*PRUNE)b|a+c/
+
+
+/---- OK, lets play the same game again using SKIP instead of PRUNE. ----/
+
+/-- This matches "ac" because SKIP forces the next match to start on the
+ sixth "a". --/
+
+/aaaaa(*SKIP)b|a+c/
+ aaaaaac
+ 0: ac
+
+/-- Putting PRUNE in front makes no difference. --/
+
+/aaaaa(*PRUNE)(*SKIP)b|a+c/
+ aaaaaac
+ 0: ac
+
+/-- Putting THEN in front makes no difference. --/
+
+/aaaaa(*THEN)(*SKIP)b|a+c/
+ aaaaaac
+ 0: ac
+
+/-- In this case, neither does COMMIT. This still matches "ac". --/
+
+/aaaaa(*COMMIT)(*SKIP)b|a+c/
+ aaaaaac
+ 0: ac
+
+/-- This gives "no match", as expected. --/
+
+/aaaaa(*COMMIT)b|a+c/
+ aaaaaac
+No match
+
+
+/------ Tests using THEN ------/
+
+/-- This matches "aaaaaac", as expected. --/
+
+/aaaaa(*THEN)b|a+c/
+ aaaaaac
+ 0: aaaaaac
+
+/-- Putting SKIP in front makes no difference. --/
+
+/aaaaa(*SKIP)(*THEN)b|a+c/
+ aaaaaac
+ 0: aaaaaac
+
+/-- Putting PRUNE in front makes no difference. --/
+
+/aaaaa(*PRUNE)(*THEN)b|a+c/
+ aaaaaac
+ 0: aaaaaac
+
+/-- Putting COMMIT in front makes no difference. --/
+
+/aaaaa(*COMMIT)(*THEN)b|a+c/
+ aaaaaac
+ 0: aaaaaac
+
+/-- End of "priority" tests --/
+
+/aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
+ aaaaaa
+ 0: a
+
+/aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
+ aaaaaa
+ 0: a
+
+/aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
+ aaaaaa
+ 0: aaaa
+
+/aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
+ aaaaaa
+ 0: a
+
+/a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
+ aaaac
+ 0: aac
+
+/a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
+ aaaac
+ 0: ac
+
+/aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
+ aaaac
+ 0: aac
+
+/aaa(*MARK:A)a(*SKIP:A)b|a+c/
+ aaaac
+ 0: ac
+
+/a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
+ aaaaaac
+ 0: ac
+
+/.?(a|b(*THEN)c)/
+ ba
+ 0: ba
+ 1: a
+
+/(a(*COMMIT)b)c|abd/
+ abc
+ 0: abc
+ 1: ab
+ abd
+No match
+
+/(?=a(*COMMIT)b)abc|abd/
+ abc
+ 0: abc
+ abd
+ 0: abd
+
+/(?>a(*COMMIT)b)c|abd/
+ abc
+ 0: abc
+ abd
+ 0: abd
+
+/a(?=b(*COMMIT)c)[^d]|abd/
+ abd
+No match
+ abc
+ 0: ab
+
+/a(?=bc).|abd/
+ abd
+ 0: abd
+ abc
+ 0: ab
+
+/a(?>b(*COMMIT)c)d|abd/
+ abceabd
+No match
+
+/a(?>bc)d|abd/
+ abceabd
+ 0: abd
+
+/(?>a(*COMMIT)b)c|abd/
+ abd
+ 0: abd
+
+/(?>a(*COMMIT)c)d|abd/
+ abd
+No match
+
+/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
+ ac
+ 0: ac
+ 1: <unset>
+ 2: c
+
+/-- These tests were formerly in test 2, but changes in PCRE and Perl have
+ made them compatible. --/
+
+/^(a)?(?(1)a|b)+$/
+ *** Failers
+No match
+ a
+No match
+
+/(?=a\Kb)ab/
+ ab
+ 0: b
+
+/(?!a\Kb)ac/
+ ac
+ 0: ac
+
+/^abc(?<=b\Kc)d/
+ abcd
+ 0: cd
+
+/^abc(?<!b\Kq)d/
+ abcd
+ 0: abcd
+
+
+/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
+ AAAC
+No match, mark = A
+
+/^((abc|abcx)(*THEN)y|abcd)/
+ abcd
+ 0: abcd
+ 1: abcd
+ *** Failers
+No match
+ abcxy
+No match
+
+/^((yes|no)(*THEN)(*F))?/
+ yes
+No match
+
+/(A (.*) C? (*THEN) | A D) (*FAIL)/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) C? (*THEN) | A D) z/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) C? (*THEN) | A D) \s* z/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) (?:C|) (*THEN) | A D) z/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) C{0,6} (*THEN) | A D) z/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
+AbcdCEBefgBhiBqz
+No match
+
+/(A (.*) (CE){0,6} (*THEN) | A D) z/x
+AbcdCEBefgBhiBqz
+No match
+
+/(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
+AbcdCBefgBhiBqz
+No match
+
+/(A (.*) (CE*){0,6} (*THEN) | A D) z/x
+AbcdCBefgBhiBqz
+No match
+
+/(?=a(*COMMIT)b|ac)ac|ac/
+ ac
+No match
+
+/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
+ ac
+No match
+
+/--------/
+
+/(?(?!b(*THEN)a)bn|bnn)/
+ bnn
+ 0: bn
+
+/(?!b(*SKIP)a)bn|bnn/
+ bnn
+ 0: bn
+
+/(?(?!b(*SKIP)a)bn|bnn)/
+ bnn
+ 0: bn
+
+/(?!b(*PRUNE)a)bn|bnn/
+ bnn
+ 0: bn
+
+/(?(?!b(*PRUNE)a)bn|bnn)/
+ bnn
+ 0: bn
+
+/(?!b(*COMMIT)a)bn|bnn/
+ bnn
+ 0: bn
+
+/(?(?!b(*COMMIT)a)bn|bnn)/
+ bnn
+ 0: bn
+
+/(?=b(*SKIP)a)bn|bnn/
+ bnn
+No match
+
+/(?=b(*THEN)a)bn|bnn/
+ bnn
+ 0: bnn
+
+ /^(?!a(*SKIP)b)/
+ ac
+ 0:
+
+ /^(?!a(*SKIP)b)../
+ acd
+ 0: ac
+
+/(?!a(*SKIP)b)../
+ acd
+ 0: ac
+
+/^(?(?!a(*SKIP)b))/
+ ac
+ 0:
+
+/^(?!a(*PRUNE)b)../
+ acd
+ 0: ac
+
+/(?!a(*PRUNE)b)../
+ acd
+ 0: ac
+
+ /(?!a(*COMMIT)b)ac|cd/
+ ac
+ 0: ac
+
+/\A.*?(?:a|bc)/
+ ba
+ 0: ba
+
+/^(A(*THEN)B|C(*THEN)D)/
+ CD
+ 0: CD
+ 1: CD
+
+/(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
+ abc
+ 0: b
+MK: m(m
+
+/(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
+ abc
+ 0: b
+MK: m(m
+
+/(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
+ abc
+ 0: b
+
+/(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
+ abc
+ 0: b
+MK: m(m
+
+/^\d*\w{4}/
+ 1234
+ 0: 1234
+ 123
+No match
+
+/^[^b]*\w{4}/
+ aaaa
+ 0: aaaa
+ aaa
+No match
+
+/^[^b]*\w{4}/i
+ aaaa
+ 0: aaaa
+ aaa
+No match
+
+/^a*\w{4}/
+ aaaa
+ 0: aaaa
+ aaa
+No match
+
+/^a*\w{4}/i
+ aaaa
+ 0: aaaa
+ aaa
+No match
+
+/-- End of testinput1 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput10 b/lib/stdlib/test/re_SUITE_data/testoutput10
index dbd59241ad..c1c85f9a3b 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput10
+++ b/lib/stdlib/test/re_SUITE_data/testoutput10
@@ -1,19 +1,18 @@
/-- These are a few representative patterns whose lengths and offsets are to be
shown when the link size is 2. This is just a doublecheck test to ensure the
sizes don't go horribly wrong when something is changed. The pattern contents
-are all themselves checked in other tests. --/
+are all themselves checked in other tests. Unicode, including property support,
+is required for these tests. --/
/((?i)b)/BM
-Memory allocation (code space): 21
+Memory allocation (code space): 17
------------------------------------------------------------------
- 0 17 Bra
- 3 9 CBra 1
- 8 01 Opt
- 10 NC b
- 12 9 Ket
- 15 00 Opt
- 17 17 Ket
- 20 End
+ 0 13 Bra
+ 3 7 CBra 1
+ 8 /i b
+ 10 7 Ket
+ 13 13 Ket
+ 16 End
------------------------------------------------------------------
/(?s)(.*X|^B)/BM
@@ -21,7 +20,7 @@ Memory allocation (code space): 25
------------------------------------------------------------------
0 21 Bra
3 9 CBra 1
- 8 Any*
+ 8 AllAny*
10 X
12 6 Alt
15 ^
@@ -32,21 +31,18 @@ Memory allocation (code space): 25
------------------------------------------------------------------
/(?s:.*X|^B)/BM
-Memory allocation (code space): 29
+Memory allocation (code space): 23
------------------------------------------------------------------
- 0 25 Bra
- 3 9 Bra
- 6 04 Opt
- 8 Any*
- 10 X
- 12 8 Alt
- 15 04 Opt
- 17 ^
- 18 B
- 20 17 Ket
- 23 00 Opt
- 25 25 Ket
- 28 End
+ 0 19 Bra
+ 3 7 Bra
+ 6 AllAny*
+ 8 X
+ 10 6 Alt
+ 13 ^
+ 14 B
+ 16 13 Ket
+ 19 19 Ket
+ 22 End
------------------------------------------------------------------
/^[[:alnum:]]/BM
@@ -115,17 +111,15 @@ Memory allocation (code space): 19
------------------------------------------------------------------
/(x)*+/BM
-Memory allocation (code space): 24
+Memory allocation (code space): 18
------------------------------------------------------------------
- 0 20 Bra
- 3 14 Once
- 6 Brazero
- 7 7 CBra 1
- 12 x
- 14 7 KetRmax
- 17 14 Ket
- 20 20 Ket
- 23 End
+ 0 14 Bra
+ 3 Braposzero
+ 4 7 CBraPos 1
+ 9 x
+ 11 7 KetRpos
+ 14 14 Ket
+ 17 End
------------------------------------------------------------------
/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/BM
@@ -172,18 +166,16 @@ Memory allocation (code space): 816
------------------------------------------------------------------
/(a(?1)b)/BM
-Memory allocation (code space): 28
+Memory allocation (code space): 22
------------------------------------------------------------------
- 0 24 Bra
- 3 18 CBra 1
+ 0 18 Bra
+ 3 12 CBra 1
8 a
- 10 6 Once
- 13 3 Recurse
- 16 6 Ket
- 19 b
- 21 18 Ket
- 24 24 Ket
- 27 End
+ 10 3 Recurse
+ 13 b
+ 15 12 Ket
+ 18 18 Ket
+ 21 End
------------------------------------------------------------------
/(a(?1)+b)/BM
@@ -202,7 +194,7 @@ Memory allocation (code space): 28
------------------------------------------------------------------
/a(?P<name1>b|c)d(?P<longername2>e)/BM
-Memory allocation (code space): 42
+Memory allocation (code space): 36
------------------------------------------------------------------
0 32 Bra
3 a
@@ -220,7 +212,7 @@ Memory allocation (code space): 42
------------------------------------------------------------------
/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/BM
-Memory allocation (code space): 54
+Memory allocation (code space): 45
------------------------------------------------------------------
0 41 Bra
3 25 Bra
@@ -240,9 +232,9 @@ Memory allocation (code space): 54
------------------------------------------------------------------
/(?P<a>a)...(?P=a)bbb(?P>a)d/BM
-Memory allocation (code space): 43
+Memory allocation (code space): 34
------------------------------------------------------------------
- 0 36 Bra
+ 0 30 Bra
3 7 CBra 1
8 a
10 7 Ket
@@ -251,12 +243,10 @@ Memory allocation (code space): 43
15 Any
16 \1
19 bbb
- 25 6 Once
- 28 3 Recurse
- 31 6 Ket
- 34 d
- 36 36 Ket
- 39 End
+ 25 3 Recurse
+ 28 d
+ 30 30 Ket
+ 33 End
------------------------------------------------------------------
/abc(?C255)de(?C)f/BM
@@ -327,32 +317,17 @@ Memory allocation (code space): 12
11 End
------------------------------------------------------------------
-/\x{1000000}/8BM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra
- 3 \x{1000000}
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-
-/\x{4000000}/8BM
-Memory allocation (code space): 14
+/\x{10ffff}/8BM
+Memory allocation (code space): 12
------------------------------------------------------------------
- 0 10 Bra
- 3 \x{4000000}
- 10 10 Ket
- 13 End
+ 0 8 Bra
+ 3 \x{10ffff}
+ 8 8 Ket
+ 11 End
------------------------------------------------------------------
-/\x{7fffFFFF}/8BM
-Memory allocation (code space): 14
-------------------------------------------------------------------
- 0 10 Bra
- 3 \x{7fffffff}
- 10 10 Ket
- 13 End
-------------------------------------------------------------------
+/\x{110000}/8BM
+Failed: character value in \x{...} sequence is too large at offset 9
/[\x{ff}]/8BM
Memory allocation (code space): 10
@@ -364,12 +339,12 @@ Memory allocation (code space): 10
------------------------------------------------------------------
/[\x{100}]/8BM
-Memory allocation (code space): 15
+Memory allocation (code space): 10
------------------------------------------------------------------
- 0 11 Bra
- 3 [\x{100}]
- 11 11 Ket
- 14 End
+ 0 6 Bra
+ 3 \x{100}
+ 6 6 Ket
+ 9 End
------------------------------------------------------------------
/\x80/8BM
@@ -399,7 +374,7 @@ Memory allocation (code space): 18
17 End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
+Options: utf
First char = 'A'
Need char = '.'
@@ -412,9 +387,9 @@ Memory allocation (code space): 19
18 End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
-First char = 237
-Need char = 180
+Options: utf
+First char = \x{ed}
+Need char = \x{b4}
/\x{65e5}\x{672c}\x{8a9e}/D8M
Memory allocation (code space): 19
@@ -425,17 +400,17 @@ Memory allocation (code space): 19
18 End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
-First char = 230
-Need char = 158
+Options: utf
+First char = \x{e6}
+Need char = \x{9e}
/[\x{100}]/8BM
-Memory allocation (code space): 15
+Memory allocation (code space): 10
------------------------------------------------------------------
- 0 11 Bra
- 3 [\x{100}]
- 11 11 Ket
- 14 End
+ 0 6 Bra
+ 3 \x{100}
+ 6 6 Ket
+ 9 End
------------------------------------------------------------------
/[Z\x{100}]/8BM
@@ -537,7 +512,7 @@ Memory allocation (code space): 48
Memory allocation (code space): 25
------------------------------------------------------------------
0 21 Bra
- 3 NC A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 3 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
21 21 Ket
24 End
------------------------------------------------------------------
@@ -616,7 +591,7 @@ Memory allocation (code space): 9
Memory allocation (code space): 9
------------------------------------------------------------------
0 5 Bra
- 3 \xaa
+ 3 \x{aa}
5 5 Ket
8 End
------------------------------------------------------------------
@@ -652,18 +627,87 @@ Memory allocation (code space): 9
Memory allocation (code space): 9
------------------------------------------------------------------
0 5 Bra
- 3 [^\xaa]
+ 3 [^\x{aa}]
5 5 Ket
8 End
------------------------------------------------------------------
/[^\xaa]/8BM
-Memory allocation (code space): 40
+Memory allocation (code space): 10
------------------------------------------------------------------
- 0 36 Bra
- 3 [\x00-\xa9\xab-\xff] (neg)
- 36 36 Ket
- 39 End
+ 0 6 Bra
+ 3 [^\x{aa}]
+ 6 6 Ket
+ 9 End
+------------------------------------------------------------------
+
+/[^\d]/8WB
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [^\p{Nd}]
+ 11 11 Ket
+ 14 End
------------------------------------------------------------------
-/ End of testinput10 /
+/[[:^alpha:][:^cntrl:]]+/8WB
+------------------------------------------------------------------
+ 0 44 Bra
+ 3 [ -~\x80-\xff\P{L}]+
+ 44 44 Ket
+ 47 End
+------------------------------------------------------------------
+
+/[[:^cntrl:][:^alpha:]]+/8WB
+------------------------------------------------------------------
+ 0 44 Bra
+ 3 [ -~\x80-\xff\P{L}]+
+ 44 44 Ket
+ 47 End
+------------------------------------------------------------------
+
+/[[:alpha:]]+/8WB
+------------------------------------------------------------------
+ 0 12 Bra
+ 3 [\p{L}]+
+ 12 12 Ket
+ 15 End
+------------------------------------------------------------------
+
+/[[:^alpha:]\S]+/8WB
+------------------------------------------------------------------
+ 0 15 Bra
+ 3 [\P{L}\P{Xsp}]+
+ 15 15 Ket
+ 18 End
+------------------------------------------------------------------
+
+/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/B
+------------------------------------------------------------------
+ 0 73 Bra
+ 3 abc
+ 9 7 CBra 1
+ 14 d
+ 16 5 Alt
+ 19 e
+ 21 12 Ket
+ 24 *THEN
+ 25 x
+ 27 14 CBra 2
+ 32 123
+ 38 *THEN
+ 39 4
+ 41 29 Alt
+ 44 567
+ 50 7 CBra 3
+ 55 b
+ 57 5 Alt
+ 60 q
+ 62 12 Ket
+ 65 *THEN
+ 66 xx
+ 70 43 Ket
+ 73 73 Ket
+ 76 End
+------------------------------------------------------------------
+
+/-- End of testinput11 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput2 b/lib/stdlib/test/re_SUITE_data/testoutput2
index dba227f503..fd958c2eb7 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput2
+++ b/lib/stdlib/test/re_SUITE_data/testoutput2
@@ -1,3 +1,13 @@
+/-- This set of tests is not Perl-compatible. It checks on special features
+ of PCRE's API, error diagnostics, and the compiled code of some patterns.
+ It also checks the non-Perl syntax the PCRE supports (Python, .NET,
+ Oniguruma). Finally, there are some tests where PCRE and Perl differ,
+ either because PCRE can't be compatible, or there is a possible Perl
+ bug.
+
+ NOTE: This is a non-UTF set of tests. When UTF support is needed, use
+ test 5, and if Unicode Property Support is needed, use test 7. --/
+
/(a)b|/I
Capturing subpattern count = 1
No options
@@ -40,28 +50,24 @@ No match
/a+bc/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'c'
/a*bc/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = 'c'
/a{3}bc/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'c'
/(abc|a+z)/I
Capturing subpattern count = 1
-Partial matching not supported
No options
First char = 'a'
No need char
@@ -96,6 +102,36 @@ Failed: missing terminating ] for character class at offset 5
/(?X)[\B]/
Failed: invalid escape sequence in character class at offset 6
+/(?X)[\R]/
+Failed: invalid escape sequence in character class at offset 6
+
+/(?X)[\X]/
+Failed: invalid escape sequence in character class at offset 6
+
+/[\B]/BZ
+------------------------------------------------------------------
+ Bra
+ B
+ Ket
+ End
+------------------------------------------------------------------
+
+/[\R]/BZ
+------------------------------------------------------------------
+ Bra
+ R
+ Ket
+ End
+------------------------------------------------------------------
+
+/[\X]/BZ
+------------------------------------------------------------------
+ Bra
+ X
+ Ket
+ End
+------------------------------------------------------------------
+
/[z-a]/
Failed: range out of order in character class at offset 3
@@ -113,14 +149,12 @@ Failed: unrecognized character after (? or (?- at offset 2
/.*b/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char at start or follows newline
Need char = 'b'
/.*?b/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char at start or follows newline
Need char = 'b'
@@ -140,6 +174,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 3
Starting byte set: c d e
this sentence eventually mentions a cat
0: cat
@@ -151,6 +186,7 @@ Capturing subpattern count = 0
Options: caseless
No first char
No need char
+Subject length lower bound = 3
Starting byte set: C D E c d e
this sentence eventually mentions a CAT cat
0: CAT
@@ -162,6 +198,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b c d
/(a|[^\dZ])/IS
@@ -169,6 +206,7 @@ Capturing subpattern count = 1
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a
\x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19
\x1a \x1b \x1c \x1d \x1e \x1f \x20 ! " # $ % & ' ( ) * + , - . / : ; < = >
@@ -189,6 +227,7 @@ Capturing subpattern count = 1
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: \x09 \x0a \x0c \x0d \x20 a b
/(ab\2)/
@@ -324,7 +363,6 @@ No need char
/.*((abc)$|(def))/I
Capturing subpattern count = 3
-Partial matching not supported
No options
First char at start or follows newline
No need char
@@ -338,61 +376,6 @@ No need char
2: <unset>
3: def
-/abc/IP
- abc
- 0: abc
- *** Failers
-No match: POSIX code 17: match failed
-
-/^abc|def/IP
- abcdef
- 0: abc
- abcdef\B
- 0: def
-
-/.*((abc)$|(def))/IP
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 3: def
-
-/the quick brown fox/IP
- the quick brown fox
- 0: the quick brown fox
- *** Failers
-No match: POSIX code 17: match failed
- The Quick Brown Fox
-No match: POSIX code 17: match failed
-
-/the quick brown fox/IPi
- the quick brown fox
- 0: the quick brown fox
- The Quick Brown Fox
- 0: The Quick Brown Fox
-
-/abc.def/IP
- *** Failers
-No match: POSIX code 17: match failed
- abc\ndef
-No match: POSIX code 17: match failed
-
-/abc$/IP
- abc
- 0: abc
- abc\n
- 0: abc
-
-/(abc)\2/IP
-Failed: POSIX code 15: bad back reference at offset 7
-
-/(abc\1)/IP
- abc
-No match: POSIX code 17: match failed
-
/)/
Failed: unmatched parentheses at offset 0
@@ -401,7 +384,6 @@ Failed: missing terminating ] for character class at offset 4
/[^aeiou ]{3,}/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -410,7 +392,6 @@ No need char
/<.*>/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = '<'
Need char = '>'
@@ -419,7 +400,6 @@ Need char = '>'
/<.*?>/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = '<'
Need char = '>'
@@ -428,7 +408,6 @@ Need char = '>'
/<.*>/IU
Capturing subpattern count = 0
-Partial matching not supported
Options: ungreedy
First char = '<'
Need char = '>'
@@ -437,7 +416,6 @@ Need char = '>'
/(?U)<.*>/I
Capturing subpattern count = 0
-Partial matching not supported
Options: ungreedy
First char = '<'
Need char = '>'
@@ -446,7 +424,6 @@ Need char = '>'
/<.*?>/IU
Capturing subpattern count = 0
-Partial matching not supported
Options: ungreedy
First char = '<'
Need char = '>'
@@ -455,7 +432,6 @@ Need char = '>'
/={3,}/IU
Capturing subpattern count = 0
-Partial matching not supported
Options: ungreedy
First char = '='
Need char = '='
@@ -464,7 +440,6 @@ Need char = '='
/(?U)={3,}?/I
Capturing subpattern count = 0
-Partial matching not supported
Options: ungreedy
First char = '='
Need char = '='
@@ -473,6 +448,7 @@ Need char = '='
/(?<!bar|cattle)foo/I
Capturing subpattern count = 0
+Max lookbehind = 6
No options
First char = 'f'
Need char = 'o'
@@ -522,7 +498,6 @@ No need char
/(?s).*/I
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored dotall
No first char
No need char
@@ -532,6 +507,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b c d
/(?i)[abcd]/IS
@@ -539,6 +515,7 @@ Capturing subpattern count = 0
Options: caseless
No first char
No need char
+Subject length lower bound = 1
Starting byte set: A B C D a b c d
/(?m)[xy]|(b|c)/IS
@@ -546,6 +523,7 @@ Capturing subpattern count = 1
Options: multiline
No first char
No need char
+Subject length lower bound = 1
Starting byte set: b c x y
/(^a|^b)/Im
@@ -584,7 +562,6 @@ Failed: syntax error in subpattern name (missing terminator) at offset 7
/((?s)blah)\s+\1/I
Capturing subpattern count = 1
Max back reference = 1
-Partial matching not supported
No options
First char = 'b'
Need char = 'h'
@@ -592,7 +569,6 @@ Need char = 'h'
/((?i)blah)\s+\1/I
Capturing subpattern count = 1
Max back reference = 1
-Partial matching not supported
No options
First char = 'b' (caseless)
Need char = 'h' (caseless)
@@ -601,10 +577,8 @@ Need char = 'h' (caseless)
------------------------------------------------------------------
Bra
CBra 1
- 01 Opt
- NC b
+ /i b
Ket
- 00 Opt
Ket
End
------------------------------------------------------------------
@@ -612,14 +586,15 @@ Capturing subpattern count = 1
No options
First char = 'b' (caseless)
No need char
-Study returned NULL
+Subject length lower bound = 1
+No set of starting bytes
/(a*b|(?i:c*(?-i)d))/IS
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: C a b c d
/a$/I
@@ -656,6 +631,7 @@ No match
/\Aabc/Im
Capturing subpattern count = 0
+Max lookbehind = 1
Options: anchored multiline
No first char
No need char
@@ -668,7 +644,6 @@ Need char = 'c'
/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/I
Capturing subpattern count = 5
-Partial matching not supported
Options: anchored
No first char
No need char
@@ -682,16 +657,20 @@ No need char
/(?<=foo)[ab]/IS
Capturing subpattern count = 0
+Max lookbehind = 3
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b
/(?<!foo)(alpha|omega)/IS
Capturing subpattern count = 1
+Max lookbehind = 3
No options
No first char
Need char = 'a'
+Subject length lower bound = 5
Starting byte set: a o
/(?!alphabet)[ab]/IS
@@ -699,10 +678,12 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b
/(?<=foo\n)^bar/Im
Capturing subpattern count = 0
+Max lookbehind = 4
Contains explicit CR or LF match
Options: multiline
No first char
@@ -720,6 +701,7 @@ No match
/^(?<=foo\n)bar/Im
Capturing subpattern count = 0
+Max lookbehind = 4
Contains explicit CR or LF match
Options: multiline
First char at start or follows newline
@@ -762,6 +744,7 @@ Failed: lookbehind assertion is not fixed length at offset 13
/(?<=bullock|donkey)-cart/I
Capturing subpattern count = 0
+Max lookbehind = 7
No options
First char = '-'
Need char = 't'
@@ -778,15 +761,16 @@ No match
/(?<=ab(?i)x|y|z)/I
Capturing subpattern count = 0
+Max lookbehind = 3
No options
No first char
No need char
/(?>.*)(?<=(abcd)|(xyz))/I
Capturing subpattern count = 2
-Partial matching not supported
+Max lookbehind = 4
No options
-First char at start or follows newline
+No first char
No need char
alphabetabcd
0: alphabetabcd
@@ -798,6 +782,7 @@ No need char
/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/I
Capturing subpattern count = 0
+Max lookbehind = 4
No options
First char = 'Z'
Need char = 'Z'
@@ -826,6 +811,7 @@ No match
/(?<!(foo)a)bar/I
Capturing subpattern count = 1
+Max lookbehind = 4
No options
First char = 'b'
Need char = 'r'
@@ -838,23 +824,7 @@ No match
fooabar
No match
-/This one is here because Perl 5.005_02 doesn't fail it/I
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 't'
-
-/^(a)?(?(1)a|b)+$/I
-Capturing subpattern count = 1
-Options: anchored
-No first char
-No need char
- *** Failers
-No match
- a
-No match
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/I
+/This one is here because Perl behaves differently; see also the following/I
Capturing subpattern count = 0
No options
First char = 'T'
@@ -866,9 +836,34 @@ Max back reference = 1
Options: anchored
No first char
No need char
+ aaaa
+No match
aaaaaa
- 0: aaaaaa
- 1: aa
+No match
+
+/Perl does not fail these two for the final subjects. Neither did PCRE until/
+/release 8.01. The problem is in backtracking into a subpattern that contains/
+No match
+/a recursive reference to itself. PCRE has now made these into atomic patterns./
+No match
+
+/^(xa|=?\1a){2}$/
+ xa=xaa
+ 0: xa=xaa
+ 1: =xaa
+ ** Failers
+No match
+ xa=xaaa
+No match
+
+/^(xa|=?\1a)+$/
+ xa=xaa
+ 0: xa=xaa
+ 1: =xaa
+ ** Failers
+No match
+ xa=xaaa
+No match
/These are syntax tests from Perl 5.005/I
Capturing subpattern count = 0
@@ -975,9 +970,6 @@ Failed: numbers out of order in {} quantifier at offset 7
/abc/\
Failed: \ at end of pattern at offset 4
-/abc/\P
-Failed: POSIX code 9: bad escape sequence at offset 4
-
/abc/\i
Failed: \ at end of pattern at offset 4
@@ -1003,7 +995,6 @@ copy substring 5 failed -7
/(.{20})/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
@@ -1021,7 +1012,6 @@ No need char
/(.{15})/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
@@ -1036,7 +1026,6 @@ No need char
/(.{16})/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
@@ -1096,14 +1085,13 @@ No first char
No need char
abc\00def\L\C0
0: abc\x00def
- 0C abc (7)
+ 0C abc\x00def (7)
0L abc
/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
)?)?)?)?)?)?)?)?)?otherword/I
Capturing subpattern count = 8
-Partial matching not supported
Contains explicit CR or LF match
No options
First char = 'w'
@@ -1118,7 +1106,6 @@ Need char = 'd'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
No options
First char at start or follows newline
Need char = 'X'
@@ -1126,13 +1113,12 @@ Need char = 'X'
/.*X/IDZs
------------------------------------------------------------------
Bra
- Any*
+ AllAny*
X
Ket
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored dotall
No first char
Need char = 'X'
@@ -1151,7 +1137,6 @@ Need char = 'X'
End
------------------------------------------------------------------
Capturing subpattern count = 1
-Partial matching not supported
No options
First char at start or follows newline
No need char
@@ -1160,7 +1145,7 @@ No need char
------------------------------------------------------------------
Bra
CBra 1
- Any*
+ AllAny*
X
Alt
^
@@ -1170,7 +1155,6 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 1
-Partial matching not supported
Options: anchored dotall
No first char
No need char
@@ -1179,7 +1163,7 @@ No need char
------------------------------------------------------------------
Bra
CBra 1
- Any*
+ AllAny*
X
Alt
^
@@ -1189,7 +1173,6 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 1
-Partial matching not supported
Options: anchored dotall
No first char
No need char
@@ -1198,26 +1181,23 @@ No need char
------------------------------------------------------------------
Bra
Bra
- 04 Opt
- Any*
+ AllAny*
X
Alt
- 04 Opt
^
B
Ket
- 00 Opt
Ket
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-No options
-First char at start or follows newline
+Options: anchored
+No first char
No need char
/\Biss\B/I+
Capturing subpattern count = 0
+Max lookbehind = 1
No options
First char = 'i'
Need char = 's'
@@ -1225,11 +1205,6 @@ Need char = 's'
0: iss
0+ issippi
-/\Biss\B/I+P
- Mississippi
- 0: iss
- 0+ issippi
-
/iss/IG+
Capturing subpattern count = 0
No options
@@ -1243,6 +1218,7 @@ Need char = 's'
/\Biss\B/IG+
Capturing subpattern count = 0
+Max lookbehind = 1
No options
First char = 'i'
Need char = 's'
@@ -1252,6 +1228,7 @@ Need char = 's'
/\Biss\B/Ig+
Capturing subpattern count = 0
+Max lookbehind = 1
No options
First char = 'i'
Need char = 's'
@@ -1267,6 +1244,7 @@ No match
/(?<=[Ms])iss/Ig+
Capturing subpattern count = 0
+Max lookbehind = 1
No options
First char = 'i'
Need char = 's'
@@ -1278,6 +1256,7 @@ Need char = 's'
/(?<=[Ms])iss/IG+
Capturing subpattern count = 0
+Max lookbehind = 1
No options
First char = 'i'
Need char = 's'
@@ -1296,7 +1275,6 @@ No need char
/.*iss/Ig+
Capturing subpattern count = 0
-Partial matching not supported
No options
First char at start or follows newline
Need char = 's'
@@ -1360,7 +1338,7 @@ Capturing subpattern count = 0
Contains explicit CR or LF match
Options: multiline
First char at start or follows newline
-Need char = 10
+Need char = \x0a
ab\nab\ncd
0: ab\x0a
0+ ab\x0acd
@@ -1399,42 +1377,36 @@ Need char = 'c'
/a*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
/a+/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
No need char
/(baa|a+)/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
Need char = 'a'
/a{0,3}/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
/baa{3,}/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'b'
Need char = 'a'
/"([^\\"]+|\\.)*"/I
Capturing subpattern count = 1
-Partial matching not supported
No options
First char = '"'
Need char = '"'
@@ -1465,6 +1437,7 @@ Need char = 'r'
/...(?<=abc)/I
Capturing subpattern count = 0
+Max lookbehind = 3
No options
No first char
No need char
@@ -1489,70 +1462,60 @@ Need char = 'b'
/abc*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
/ab.c*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
/a.c*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
No need char
/.c*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
/ac*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
No need char
/(a.c*|b.c*)/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
/a.c*|aba/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
No need char
/.+a/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = 'a'
/(?=abcda)a.*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'a'
/(?=a)a.*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
No need char
@@ -1565,14 +1528,12 @@ No need char
/a\d*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
No need char
/ab\d*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
@@ -1591,7 +1552,6 @@ Need char = 'd'
/ab\d+/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
@@ -1666,39 +1626,13 @@ No need char
\Nabc
No match
-/a*(b+)(z)(z)/IP
- aaaabbbbzzzz
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- 0: aaaabbbbzz
- aaaabbbbzzzz\O2
- 0: aaaabbbbzz
- 1: bbbb
- aaaabbbbzzzz\O3
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- aaaabbbbzzzz\O4
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O5
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
-
/^.?abcd/IS
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'd'
-Study returned NULL
+Subject length lower bound = 4
+No set of starting bytes
/\( # ( at start
(?: # Non-capturing bracket
@@ -1709,7 +1643,6 @@ Study returned NULL
\) # Closing )
/Ix
Capturing subpattern count = 0
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1738,7 +1671,6 @@ No match
/\( ( (?>[^()]+) | (?R) )* \) /Ixg
Capturing subpattern count = 1
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1753,7 +1685,6 @@ Need char = ')'
/\( (?: (?>[^()]+) | (?R) ) \) /Ix
Capturing subpattern count = 0
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1772,7 +1703,6 @@ No match
/\( (?: (?>[^()]+) | (?R) )? \) /Ix
Capturing subpattern count = 0
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1783,7 +1713,6 @@ Need char = ')'
/\( ( (?>[^()]+) | (?R) )* \) /Ix
Capturing subpattern count = 1
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1793,7 +1722,6 @@ Need char = ')'
/\( ( ( (?>[^()]+) | (?R) )* ) \) /Ix
Capturing subpattern count = 2
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1804,7 +1732,6 @@ Need char = ')'
/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /Ix
Capturing subpattern count = 3
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1821,7 +1748,6 @@ Need char = ')'
/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /Ix
Capturing subpattern count = 3
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1838,7 +1764,6 @@ Need char = ')'
/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /Ix
Capturing subpattern count = 11
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1858,7 +1783,6 @@ Need char = ')'
/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /Ix
Capturing subpattern count = 3
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1866,11 +1790,9 @@ Need char = ')'
0: (abcd(xyz<p>qrs)123)
1: abcd(xyz<p>qrs)123
2: 123
- 3: <unset>
/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /Ix
Capturing subpattern count = 3
-Partial matching not supported
Options: extended
First char = '('
Need char = ')'
@@ -1942,6 +1864,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
_ a b c d e f g h i j k l m n o p q r s t u v w x y z
@@ -2003,6 +1926,7 @@ Contains explicit CR or LF match
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: \x09 \x0a \x0b \x0c \x0d \x20
/^[[:cntrl:]]/DZ
@@ -2249,7 +2173,6 @@ Need char = 'd'
/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/I
Capturing subpattern count = 271
Max back reference = 270
-Partial matching not supported
No options
No first char
No need char
@@ -2746,8 +2669,7 @@ No need char
------------------------------------------------------------------
Bra
a
- 01 Opt
- NC b
+ /i b
Ket
End
------------------------------------------------------------------
@@ -2769,10 +2691,8 @@ No match
Bra
CBra 1
a
- 01 Opt
- NC b
+ /i b
Ket
- 00 Opt
Ket
End
------------------------------------------------------------------
@@ -2794,7 +2714,7 @@ No match
/ (?i)abc/IxDZ
------------------------------------------------------------------
Bra
- NC abc
+ /i abc
Ket
End
------------------------------------------------------------------
@@ -2807,7 +2727,7 @@ Need char = 'c' (caseless)
(?i)abc/IxDZ
------------------------------------------------------------------
Bra
- NC abc
+ /i abc
Ket
End
------------------------------------------------------------------
@@ -2930,7 +2850,6 @@ Need char = 'c'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -2959,7 +2878,6 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'x'
No need char
@@ -2975,7 +2893,6 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'x'
No need char
@@ -2983,12 +2900,10 @@ No need char
/(x)*+/DZ
------------------------------------------------------------------
Bra
- Once
- Brazero
- CBra 1
+ Braposzero
+ CBraPos 1
x
- KetRmax
- Ket
+ KetRpos
Ket
End
------------------------------------------------------------------
@@ -2999,7 +2914,6 @@ No need char
/^(\w++|\s++)*$/I
Capturing subpattern count = 1
-Partial matching not supported
Options: anchored
No first char
No need char
@@ -3013,7 +2927,6 @@ No match
/(\d++)(\w)/I
Capturing subpattern count = 2
-Partial matching not supported
No options
No first char
No need char
@@ -3028,7 +2941,6 @@ No match
/a++b/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
@@ -3037,7 +2949,6 @@ Need char = 'b'
/(a++b)/I
Capturing subpattern count = 1
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
@@ -3047,7 +2958,6 @@ Need char = 'b'
/(a++)b/I
Capturing subpattern count = 1
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
@@ -3057,7 +2967,6 @@ Need char = 'b'
/([^()]++|\([^()]*\))+/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
@@ -3067,7 +2976,6 @@ No need char
/\(([^()]++|\([^()]+\))+\)/I
Capturing subpattern count = 1
-Partial matching not supported
No options
First char = '('
Need char = ')'
@@ -3130,7 +3038,6 @@ Failed: nothing to repeat at offset 7
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'x'
Need char = 'b'
@@ -3147,7 +3054,6 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: ungreedy
First char = 'x'
Need char = 'b'
@@ -3176,7 +3082,6 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 5
-Partial matching not supported
Options: anchored
No first char
No need char
@@ -3192,7 +3097,6 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored
No first char
Need char = 'b'
@@ -3210,7 +3114,6 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 1
-Partial matching not supported
Options: anchored
No first char
Need char = 'b'
@@ -3225,19 +3128,19 @@ Failed: POSIX collating elements are not supported at offset 0
Failed: POSIX named classes are supported only within a class at offset 0
/\l/I
-Failed: PCRE does not support \L, \l, \N, \U, or \u at offset 1
+Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1
/\L/I
-Failed: PCRE does not support \L, \l, \N, \U, or \u at offset 1
+Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1
/\N{name}/I
-Failed: PCRE does not support \L, \l, \N, \U, or \u at offset 1
+Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1
/\u/I
-Failed: PCRE does not support \L, \l, \N, \U, or \u at offset 1
+Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1
/\U/I
-Failed: PCRE does not support \L, \l, \N, \U, or \u at offset 1
+Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1
/[/I
Failed: missing terminating ] for character class at offset 1
@@ -3286,7 +3189,6 @@ No need char
/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/Ix
Capturing subpattern count = 0
-Partial matching not supported
Options: extended
First char = '<'
Need char = '>'
@@ -3316,6 +3218,7 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 0
+Max lookbehind = 1
No options
First char = '8'
Need char = 'X'
@@ -3329,6 +3232,7 @@ Need char = 'X'
End
------------------------------------------------------------------
Capturing subpattern count = 0
+Max lookbehind = 1
No options
First char = '$'
Need char = 'X'
@@ -3336,14 +3240,12 @@ Need char = 'X'
/(.*)\d+\1/I
Capturing subpattern count = 1
Max back reference = 1
-Partial matching not supported
No options
No first char
No need char
/(.*)\d+/I
Capturing subpattern count = 1
-Partial matching not supported
No options
First char at start or follows newline
No need char
@@ -3351,14 +3253,12 @@ No need char
/(.*)\d+\1/Is
Capturing subpattern count = 1
Max back reference = 1
-Partial matching not supported
Options: dotall
No first char
No need char
/(.*)\d+/Is
Capturing subpattern count = 1
-Partial matching not supported
Options: anchored dotall
No first char
No need char
@@ -3366,7 +3266,6 @@ No need char
/(.*(xyz))\d+\2/I
Capturing subpattern count = 2
Max back reference = 2
-Partial matching not supported
No options
First char at start or follows newline
Need char = 'z'
@@ -3374,7 +3273,6 @@ Need char = 'z'
/((.*))\d+\1/I
Capturing subpattern count = 2
Max back reference = 1
-Partial matching not supported
No options
No first char
No need char
@@ -3391,7 +3289,6 @@ Need char = 'b'
/(?=a).*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
First char = 'a'
No need char
@@ -3497,6 +3394,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b
/[^a]/I
@@ -3516,6 +3414,7 @@ Capturing subpattern count = 0
No options
No first char
Need char = '6'
+Subject length lower bound = 4
Starting byte set: 0 1 2 3 4 5 6 7 8 9
/a^b/I
@@ -3549,6 +3448,7 @@ Capturing subpattern count = 0
Options: caseless
No first char
No need char
+Subject length lower bound = 1
Starting byte set: A B a b
/[ab](?i)cd/IS
@@ -3556,6 +3456,7 @@ Capturing subpattern count = 0
No options
No first char
Need char = 'd' (caseless)
+Subject length lower bound = 3
Starting byte set: a b
/abc(?C)def/I
@@ -3591,7 +3492,27 @@ Need char = 'f'
1 ^ ^ f
0: abcdef
-/(?C1)\dabc(?C2)def/I
+/(?C1)\dabc(?C2)def/IS
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'f'
+Subject length lower bound = 7
+Starting byte set: 0 1 2 3 4 5 6 7 8 9
+ 1234abcdef
+--->1234abcdef
+ 1 ^ \d
+ 1 ^ \d
+ 1 ^ \d
+ 1 ^ \d
+ 2 ^ ^ d
+ 0: 4abcdef
+ *** Failers
+No match
+ abcdef
+No match
+
+/(?C1)\dabc(?C2)def/ISS
Capturing subpattern count = 0
No options
No first char
@@ -3713,7 +3634,6 @@ No need char
/(\d{3}(?C))*/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
@@ -3828,6 +3748,7 @@ Callout 2: last capture = -1
/(?<=(abc)(?C))xyz/I
Capturing subpattern count = 1
+Max lookbehind = 3
No options
First char = 'x'
Need char = 'z'
@@ -3842,7 +3763,6 @@ Callout 0: last capture = 1
/a(b+)(c*)(?C1)/I
Capturing subpattern count = 2
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
@@ -3868,7 +3788,6 @@ No match
/a(b+?)(c*?)(?C1)/I
Capturing subpattern count = 2
-Partial matching not supported
No options
First char = 'a'
Need char = 'b'
@@ -3909,6 +3828,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b
/(?R)/I
@@ -3997,9 +3917,7 @@ Need char = '<'
Bra
CBra 1
a
- Once
Recurse
- Ket
b
Ket
Ket
@@ -4028,43 +3946,8 @@ No options
First char = 'a'
Need char = 'b'
-/^\W*(?:((.)\W*(?1)\W*\2|)|((.)\W*(?3)\W*\4|\W*.\W*))\W*$/Ii
-Capturing subpattern count = 4
-Max back reference = 4
-Partial matching not supported
-Options: anchored caseless
-No first char
-No need char
- 1221
- 0: 1221
- 1: 1221
- 2: 1
- Satan, oscillate my metallic sonatas!
- 0: Satan, oscillate my metallic sonatas!
- 1: <unset>
- 2: <unset>
- 3: Satan, oscillate my metallic sonatas
- 4: S
- A man, a plan, a canal: Panama!
- 0: A man, a plan, a canal: Panama!
- 1: <unset>
- 2: <unset>
- 3: A man, a plan, a canal: Panama
- 4: A
- Able was I ere I saw Elba.
- 0: Able was I ere I saw Elba.
- 1: <unset>
- 2: <unset>
- 3: Able was I ere I saw Elba
- 4: A
- *** Failers
-No match
- The quick brown fox
-No match
-
/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/I
Capturing subpattern count = 2
-Partial matching not supported
Options: anchored
No first char
No need char
@@ -4105,7 +3988,6 @@ No match
/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/Ix
Capturing subpattern count = 2
-Partial matching not supported
Options: extended
First char = '<'
Need char = '>'
@@ -4256,9 +4138,7 @@ Need char = 'a'
Any
\1
bbb
- Once
Recurse
- Ket
d
Ket
End
@@ -4279,7 +4159,6 @@ Named capturing subpatterns:
one 1
three 3
two 2
-Partial matching not supported
Options: anchored caseless
No first char
No need char
@@ -4325,7 +4204,6 @@ No need char
/(.*)a/Is
Capturing subpattern count = 1
-Partial matching not supported
Options: anchored dotall
No first char
Need char = 'a'
@@ -4333,7 +4211,6 @@ Need char = 'a'
/(.*)a\1/Is
Capturing subpattern count = 1
Max back reference = 1
-Partial matching not supported
Options: dotall
No first char
Need char = 'a'
@@ -4341,14 +4218,12 @@ Need char = 'a'
/(.*)a(b)\2/Is
Capturing subpattern count = 2
Max back reference = 2
-Partial matching not supported
Options: anchored dotall
No first char
Need char = 'b'
/((.*)a|(.*)b)z/Is
Capturing subpattern count = 3
-Partial matching not supported
Options: anchored dotall
No first char
Need char = 'z'
@@ -4356,7 +4231,6 @@ Need char = 'z'
/((.*)a|(.*)b)z\1/Is
Capturing subpattern count = 3
Max back reference = 1
-Partial matching not supported
Options: dotall
No first char
Need char = 'z'
@@ -4364,7 +4238,6 @@ Need char = 'z'
/((.*)a|(.*)b)z\2/Is
Capturing subpattern count = 3
Max back reference = 2
-Partial matching not supported
Options: dotall
No first char
Need char = 'z'
@@ -4372,7 +4245,6 @@ Need char = 'z'
/((.*)a|(.*)b)z\3/Is
Capturing subpattern count = 3
Max back reference = 3
-Partial matching not supported
Options: dotall
No first char
Need char = 'z'
@@ -4380,14 +4252,12 @@ Need char = 'z'
/((.*)a|^(.*)b)z\3/Is
Capturing subpattern count = 3
Max back reference = 3
-Partial matching not supported
Options: anchored dotall
No first char
Need char = 'z'
/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a/Is
Capturing subpattern count = 31
-Partial matching not supported
Options: anchored dotall
No first char
No need char
@@ -4395,7 +4265,6 @@ No need char
/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\31/Is
Capturing subpattern count = 31
Max back reference = 31
-Partial matching not supported
Options: dotall
No first char
No need char
@@ -4403,7 +4272,6 @@ No need char
/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\32/Is
Capturing subpattern count = 32
Max back reference = 32
-Partial matching not supported
Options: dotall
No first char
No need char
@@ -4470,7 +4338,6 @@ Need char = 'c'
/(a+)*zz/I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
Need char = 'z'
@@ -4481,7 +4348,7 @@ Minimum match() recursion limit = 6
1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaz\M
Minimum match() limit = 32768
-Minimum match() recursion limit = 42
+Minimum match() recursion limit = 29
No match
/(aaa(?C1)bbb|ab)/I
@@ -4607,7 +4474,6 @@ Failed: two named subpatterns have the same name at offset 30
Capturing subpattern count = 3
Named capturing subpatterns:
elem 2
-Partial matching not supported
No options
First char = '['
Need char = ']'
@@ -4625,7 +4491,6 @@ No match
Capturing subpattern count = 3
Named capturing subpatterns:
elem 2
-Partial matching not supported
No options
First char = '['
Need char = ']'
@@ -4645,9 +4510,7 @@ Need char = ']'
a
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -4667,9 +4530,7 @@ No need char
a
CBra 2
b
- Once
Recurse
- Ket
c
Ket
KetRmax
@@ -4690,9 +4551,7 @@ No need char
a
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -4701,9 +4560,7 @@ No need char
a
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -4732,7 +4589,6 @@ No need char
/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/Ii
Capturing subpattern count = 3
-Partial matching not supported
Options: caseless
No first char
Need char = 'g' (caseless)
@@ -4742,11 +4598,11 @@ Need char = 'g' (caseless)
/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/IiS
Capturing subpattern count = 3
-Partial matching not supported
Options: caseless
No first char
Need char = 'g' (caseless)
-Study returned NULL
+Subject length lower bound = 8
+No set of starting bytes
Baby Bjorn Active Carrier - With free SHIPPING!!
0: Baby Bjorn Active Carrier - With free SHIPPING!!
1: Baby Bjorn Active Carrier - With free SHIPPING!!
@@ -4761,11 +4617,11 @@ Study returned NULL
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = 'b'
-Study returned NULL
+Subject length lower bound = 1
+No set of starting bytes
/(a|b)*.?c/ISDZ
------------------------------------------------------------------
@@ -4785,7 +4641,8 @@ Capturing subpattern count = 1
No options
No first char
Need char = 'c'
-Study returned NULL
+Subject length lower bound = 1
+No set of starting bytes
/abc(?C255)de(?C)f/DZ
------------------------------------------------------------------
@@ -4842,7 +4699,51 @@ Need char = 'e'
+4 ^ ^ e
No match
-/a*b/ICDZ
+/a*b/ICDZS
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 2
+ a*+
+ Callout 255 2 1
+ b
+ Callout 255 3 0
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options:
+No first char
+Need char = 'b'
+Subject length lower bound = 1
+Starting byte set: a b
+ ab
+--->ab
+ +0 ^ a*
+ +2 ^^ b
+ +3 ^ ^
+ 0: ab
+ aaaab
+--->aaaab
+ +0 ^ a*
+ +2 ^ ^ b
+ +3 ^ ^
+ 0: aaaab
+ aaaacb
+--->aaaacb
+ +0 ^ a*
+ +2 ^ ^ b
+ +0 ^ a*
+ +2 ^ ^ b
+ +0 ^ a*
+ +2 ^ ^ b
+ +0 ^ a*
+ +2 ^^ b
+ +0 ^ a*
+ +2 ^ b
+ +3 ^^
+ 0: b
+
+/a*b/ICDZSS
------------------------------------------------------------------
Bra
Callout 255 0 2
@@ -4854,7 +4755,6 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options:
No first char
Need char = 'b'
@@ -4899,7 +4799,6 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options:
First char = 'a'
Need char = 'b'
@@ -4927,7 +4826,83 @@ Need char = 'b'
+2 ^^ b
No match
-/(abc|def)x/ICDZ
+/(abc|def)x/ICDZS
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 9
+ CBra 1
+ Callout 255 1 1
+ a
+ Callout 255 2 1
+ b
+ Callout 255 3 1
+ c
+ Callout 255 4 0
+ Alt
+ Callout 255 5 1
+ d
+ Callout 255 6 1
+ e
+ Callout 255 7 1
+ f
+ Callout 255 8 0
+ Ket
+ Callout 255 9 1
+ x
+ Callout 255 10 0
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Options:
+No first char
+Need char = 'x'
+Subject length lower bound = 4
+Starting byte set: a d
+ abcx
+--->abcx
+ +0 ^ (abc|def)
+ +1 ^ a
+ +2 ^^ b
+ +3 ^ ^ c
+ +4 ^ ^ |
+ +9 ^ ^ x
++10 ^ ^
+ 0: abcx
+ 1: abc
+ defx
+--->defx
+ +0 ^ (abc|def)
+ +1 ^ a
+ +5 ^ d
+ +6 ^^ e
+ +7 ^ ^ f
+ +8 ^ ^ )
+ +9 ^ ^ x
++10 ^ ^
+ 0: defx
+ 1: def
+ ** Failers
+No match
+ abcdefzx
+--->abcdefzx
+ +0 ^ (abc|def)
+ +1 ^ a
+ +2 ^^ b
+ +3 ^ ^ c
+ +4 ^ ^ |
+ +9 ^ ^ x
+ +5 ^ d
+ +0 ^ (abc|def)
+ +1 ^ a
+ +5 ^ d
+ +6 ^^ e
+ +7 ^ ^ f
+ +8 ^ ^ )
+ +9 ^ ^ x
+No match
+
+/(abc|def)x/ICDZSS
------------------------------------------------------------------
Bra
Callout 255 0 9
@@ -4981,6 +4956,8 @@ Need char = 'x'
+10 ^ ^
0: defx
1: def
+ ** Failers
+No match
abcdefzx
--->abcdefzx
+0 ^ (abc|def)
@@ -5081,7 +5058,58 @@ No need char
0: abcdcdcd
1: cd
-/([ab]{,4}c|xy)/ICDZ
+/([ab]{,4}c|xy)/ICDZS
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 14
+ CBra 1
+ Callout 255 1 4
+ [ab]
+ Callout 255 5 1
+ {
+ Callout 255 6 1
+ ,
+ Callout 255 7 1
+ 4
+ Callout 255 8 1
+ }
+ Callout 255 9 1
+ c
+ Callout 255 10 0
+ Alt
+ Callout 255 11 1
+ x
+ Callout 255 12 1
+ y
+ Callout 255 13 0
+ Ket
+ Callout 255 14 0
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Options:
+No first char
+No need char
+Subject length lower bound = 2
+Starting byte set: a b x
+ Note: that { does NOT introduce a quantifier
+--->Note: that { does NOT introduce a quantifier
+ +0 ^ ([ab]{,4}c|xy)
+ +1 ^ [ab]
+ +5 ^^ {
++11 ^ x
+ +0 ^ ([ab]{,4}c|xy)
+ +1 ^ [ab]
+ +5 ^^ {
++11 ^ x
+ +0 ^ ([ab]{,4}c|xy)
+ +1 ^ [ab]
+ +5 ^^ {
++11 ^ x
+No match
+
+/([ab]{,4}c|xy)/ICDZSS
------------------------------------------------------------------
Bra
Callout 255 0 14
@@ -5337,7 +5365,6 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 1
-Partial matching not supported
Options:
No first char
Need char = '3'
@@ -5369,7 +5396,7 @@ Need char = '3'
/\b.*/I
Capturing subpattern count = 0
-Partial matching not supported
+Max lookbehind = 1
No options
No first char
No need char
@@ -5378,7 +5405,7 @@ No need char
/\b.*/Is
Capturing subpattern count = 0
-Partial matching not supported
+Max lookbehind = 1
Options: dotall
No first char
No need char
@@ -5387,7 +5414,6 @@ No need char
/(?!.bcd).*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -5400,15 +5426,15 @@ No options
First char = 'a'
Need char = 'e'
ab\P
-Partial match
+Partial match: ab
abc\P
-Partial match
+Partial match: abc
abcd\P
-Partial match
+Partial match: abcd
abcde\P
0: abcde
the quick brown abc\P
-Partial match
+Partial match: abc
** Failers\P
No match
the quick brown abxyz fox\P
@@ -5433,23 +5459,23 @@ Need char = '/'
1: 02
2: 05
1\P
-Partial match
+Partial match: 1
1/2\P
-Partial match
+Partial match: 1/2
1/2/0\P
-Partial match
+Partial match: 1/2/0
1/2/04\P
0: 1/2/04
1: 1
2: 2
0\P
-Partial match
+Partial match: 0
02/\P
-Partial match
+Partial match: 02/
02/0\P
-Partial match
+Partial match: 02/0
02/1\P
-Partial match
+Partial match: 02/1
** Failers\P
No match
\P
@@ -5471,28 +5497,24 @@ No match
/0{0,2}ABC/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = 'C'
/\d{3,}ABC/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = 'C'
/\d*ABC/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = 'C'
/[abc]+DE/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = 'E'
@@ -5505,13 +5527,13 @@ Need char = '3'
123\P
0: 123
a\P
-Partial match
+Partial match: a
b\P
-Partial match
+Partial match: b
c\P
-Partial match
+Partial match: c
c12\P
-Partial match
+Partial match: c12
c123\P
0: c123
@@ -5521,17 +5543,17 @@ Options: anchored
No first char
Need char = 'X'
1\P
-Partial match
+Partial match: 1
123\P
-Partial match
+Partial match: 123
123X
0: 123X
1234\P
-Partial match
+Partial match: 1234
1234X
0: 1234X
12345\P
-Partial match
+Partial match: 12345
12345X
0: 12345X
*** Failers
@@ -5541,14 +5563,33 @@ No match
123456\P
No match
-/abc/I>testsavedregex
+/abc/IS>testsavedregex
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
-Compiled regex written to testsavedregex
+Subject length lower bound = 3
+No set of starting bytes
+Compiled pattern written to testsavedregex
+Study data written to testsavedregex
<testsavedregex
-Compiled regex loaded from testsavedregex
+Compiled pattern loaded from testsavedregex
+Study data loaded from testsavedregex
+ abc
+ 0: abc
+ ** Failers
+No match
+ bca
+No match
+
+/abc/ISS>testsavedregex
+Capturing subpattern count = 0
+No options
+First char = 'a'
+Need char = 'c'
+Compiled pattern written to testsavedregex
+<testsavedregex
+Compiled pattern loaded from testsavedregex
No study data
abc
0: abc
@@ -5557,14 +5598,33 @@ No match
bca
No match
-/abc/IF>testsavedregex
+/abc/IFS>testsavedregex
+Capturing subpattern count = 0
+No options
+First char = 'a'
+Need char = 'c'
+Subject length lower bound = 3
+No set of starting bytes
+Compiled pattern written to testsavedregex
+Study data written to testsavedregex
+<testsavedregex
+Compiled pattern (byte-inverted) loaded from testsavedregex
+Study data loaded from testsavedregex
+ abc
+ 0: abc
+ ** Failers
+No match
+ bca
+No match
+
+/abc/IFSS>testsavedregex
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
-Compiled regex written to testsavedregex
+Compiled pattern written to testsavedregex
<testsavedregex
-Compiled regex (byte-inverted) loaded from testsavedregex
+Compiled pattern (byte-inverted) loaded from testsavedregex
No study data
abc
0: abc
@@ -5578,11 +5638,12 @@ Capturing subpattern count = 1
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b
-Compiled regex written to testsavedregex
+Compiled pattern written to testsavedregex
Study data written to testsavedregex
<testsavedregex
-Compiled regex loaded from testsavedregex
+Compiled pattern loaded from testsavedregex
Study data loaded from testsavedregex
abc
0: a
@@ -5593,16 +5654,35 @@ Study data loaded from testsavedregex
def
No match
+/(a|b)/ISS>testsavedregex
+Capturing subpattern count = 1
+No options
+No first char
+No need char
+Compiled pattern written to testsavedregex
+<testsavedregex
+Compiled pattern loaded from testsavedregex
+No study data
+ abc
+ 0: a
+ 1: a
+ ** Failers
+ 0: a
+ 1: a
+ def
+No match
+
/(a|b)/ISF>testsavedregex
Capturing subpattern count = 1
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b
-Compiled regex written to testsavedregex
+Compiled pattern written to testsavedregex
Study data written to testsavedregex
<testsavedregex
-Compiled regex (byte-inverted) loaded from testsavedregex
+Compiled pattern (byte-inverted) loaded from testsavedregex
Study data loaded from testsavedregex
abc
0: a
@@ -5613,14 +5693,31 @@ Study data loaded from testsavedregex
def
No match
+/(a|b)/ISSF>testsavedregex
+Capturing subpattern count = 1
+No options
+No first char
+No need char
+Compiled pattern written to testsavedregex
+<testsavedregex
+Compiled pattern (byte-inverted) loaded from testsavedregex
+No study data
+ abc
+ 0: a
+ 1: a
+ ** Failers
+ 0: a
+ 1: a
+ def
+No match
+
~<(\w+)/?>(.)*</(\1)>~smgI
Capturing subpattern count = 3
Max back reference = 1
-Partial matching not supported
Options: multiline dotall
First char = '<'
Need char = '>'
- <!DOCTYPE seite SYSTEM "http://www.lco.lineas.de/xmlCms.dtd">\n<seite>\n<dokumenteninformation>\n<seitentitel>Partner der LCO</seitentitel>\n<sprache>de</sprache>\n<seitenbeschreibung>Partner der LINEAS Consulting\nGmbH</seitenbeschreibung>\n<schluesselworte>LINEAS Consulting GmbH Hamburg\nPartnerfirmen</schluesselworte>\n<revisit>30 days</revisit>\n<robots>index,follow</robots>\n<menueinformation>\n<aktiv>ja</aktiv>\n<menueposition>3</menueposition>\n<menuetext>Partner</menuetext>\n</menueinformation>\n<lastedited>\n<autor>LCO</autor>\n<firma>LINEAS Consulting</firma>\n<datum>15.10.2003</datum>\n</lastedited>\n</dokumenteninformation>\n<inhalt>\n\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\nGmbH</absatzueberschrift>\n\n<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\n<bild name="logo_ca.gif" rahmen="no"/></link> <link\nziel="http://www.ey.com/" zielfenster="_blank"><bild\nname="logo_euy.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\n<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\n\n<absatz><link ziel="http://www.atelion.de/"\nzielfenster="_blank"><bild\nname="logo_atelion.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.line-information.de/"\nzielfenster="_blank">\n<bild name="logo_line_information.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\n\n<absatz><link ziel="http://www.incognis.de/"\nzielfenster="_blank"><bild\nname="logo_incognis.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.addcraft.com/"\nzielfenster="_blank"><bild\nname="logo_addcraft.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.comendo.com/"\nzielfenster="_blank"><bild\nname="logo_comendo.gif" rahmen="no"/></link></absatz>\n\n</inhalt>\n</seite>
+ \J1024<!DOCTYPE seite SYSTEM "http://www.lco.lineas.de/xmlCms.dtd">\n<seite>\n<dokumenteninformation>\n<seitentitel>Partner der LCO</seitentitel>\n<sprache>de</sprache>\n<seitenbeschreibung>Partner der LINEAS Consulting\nGmbH</seitenbeschreibung>\n<schluesselworte>LINEAS Consulting GmbH Hamburg\nPartnerfirmen</schluesselworte>\n<revisit>30 days</revisit>\n<robots>index,follow</robots>\n<menueinformation>\n<aktiv>ja</aktiv>\n<menueposition>3</menueposition>\n<menuetext>Partner</menuetext>\n</menueinformation>\n<lastedited>\n<autor>LCO</autor>\n<firma>LINEAS Consulting</firma>\n<datum>15.10.2003</datum>\n</lastedited>\n</dokumenteninformation>\n<inhalt>\n\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\nGmbH</absatzueberschrift>\n\n<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\n<bild name="logo_ca.gif" rahmen="no"/></link> <link\nziel="http://www.ey.com/" zielfenster="_blank"><bild\nname="logo_euy.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\n<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\n\n<absatz><link ziel="http://www.atelion.de/"\nzielfenster="_blank"><bild\nname="logo_atelion.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.line-information.de/"\nzielfenster="_blank">\n<bild name="logo_line_information.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\n\n<absatz><link ziel="http://www.incognis.de/"\nzielfenster="_blank"><bild\nname="logo_incognis.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.addcraft.com/"\nzielfenster="_blank"><bild\nname="logo_addcraft.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.comendo.com/"\nzielfenster="_blank"><bild\nname="logo_comendo.gif" rahmen="no"/></link></absatz>\n\n</inhalt>\n</seite>
0: <seite>\x0a<dokumenteninformation>\x0a<seitentitel>Partner der LCO</seitentitel>\x0a<sprache>de</sprache>\x0a<seitenbeschreibung>Partner der LINEAS Consulting\x0aGmbH</seitenbeschreibung>\x0a<schluesselworte>LINEAS Consulting GmbH Hamburg\x0aPartnerfirmen</schluesselworte>\x0a<revisit>30 days</revisit>\x0a<robots>index,follow</robots>\x0a<menueinformation>\x0a<aktiv>ja</aktiv>\x0a<menueposition>3</menueposition>\x0a<menuetext>Partner</menuetext>\x0a</menueinformation>\x0a<lastedited>\x0a<autor>LCO</autor>\x0a<firma>LINEAS Consulting</firma>\x0a<datum>15.10.2003</datum>\x0a</lastedited>\x0a</dokumenteninformation>\x0a<inhalt>\x0a\x0a<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\x0aGmbH</absatzueberschrift>\x0a\x0a<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\x0a<bild name="logo_ca.gif" rahmen="no"/></link> <link\x0aziel="http://www.ey.com/" zielfenster="_blank"><bild\x0aname="logo_euy.gif" rahmen="no"/></link>\x0a</absatz>\x0a\x0a<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\x0a<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\x0a\x0a<absatz><link ziel="http://www.atelion.de/"\x0azielfenster="_blank"><bild\x0aname="logo_atelion.gif" rahmen="no"/></link>\x0a</absatz>\x0a\x0a<absatz><link ziel="http://www.line-information.de/"\x0azielfenster="_blank">\x0a<bild name="logo_line_information.gif" rahmen="no"/></link>\x0a</absatz>\x0a\x0a<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\x0a\x0a<absatz><link ziel="http://www.incognis.de/"\x0azielfenster="_blank"><bild\x0aname="logo_incognis.gif" rahmen="no"/></link></absatz>\x0a\x0a<absatz><link ziel="http://www.addcraft.com/"\x0azielfenster="_blank"><bild\x0aname="logo_addcraft.gif" rahmen="no"/></link></absatz>\x0a\x0a<absatz><link ziel="http://www.comendo.com/"\x0azielfenster="_blank"><bild\x0aname="logo_comendo.gif" rahmen="no"/></link></absatz>\x0a\x0a</inhalt>\x0a</seite>
1: seite
2: \x0a
@@ -5669,24 +5766,6 @@ No match
line one\nthis is a line\nbreak in the second line
No match
-/ab.cd/IP
- ab-cd
- 0: ab-cd
- ab=cd
- 0: ab=cd
- ** Failers
-No match: POSIX code 17: match failed
- ab\ncd
-No match: POSIX code 17: match failed
-
-/ab.cd/IPs
- ab-cd
- 0: ab-cd
- ab=cd
- 0: ab=cd
- ab\ncd
- 0: ab\x0acd
-
/(?i)(?-i)AbCd/I
Capturing subpattern count = 0
No options
@@ -5923,7 +6002,6 @@ Matched, but too many substrings
/[^()]*(?:\((?R)\)[^()]*)*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -5936,7 +6014,6 @@ No need char
/[^()]*(?:\((?>(?R))\)[^()]*)*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -5947,7 +6024,6 @@ No need char
/[^()]*(?:\((?R)\))*[^()]*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -5958,7 +6034,6 @@ No need char
/(?:\((?R)\))*[^()]*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -5971,7 +6046,6 @@ No need char
/(?:\((?R)\))|[^()]*/I
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
No need char
@@ -5984,21 +6058,10 @@ No need char
((this))
0: ((this))
-/a(b)c/IPN
- abc
-Matched with REG_NOSUB
-
-/a(?P<name>b)c/IPN
- abc
-Matched with REG_NOSUB
-
-/\x{100}/I
-Failed: character value in \x{...} sequence is too large at offset 6
-
/\x{0000ff}/I
Capturing subpattern count = 0
No options
-First char = 255
+First char = \xff
No need char
/^((?P<A>a1)|(?P<A>a2)b)/I
@@ -6108,7 +6171,7 @@ no parentheses with name "Z"
0: a1
1: a1
2: a1
-copy substring Z failed -7
+get substring Z failed -7
G a1 (2) A
/^(?P<A>a)(?P<A>b)/IJ
@@ -6140,7 +6203,7 @@ No need char
G a (1) A
cd\GA
0: cd
-copy substring A failed -7
+get substring A failed -7
/^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/IJ
Capturing subpattern count = 4
@@ -6308,15 +6371,12 @@ No need char
9:
10: Y
-/\777/I
-Failed: octal value is greater than \377 (not in UTF-8 mode) at offset 3
-
/\s*,\s*/IS
Capturing subpattern count = 0
-Partial matching not supported
No options
No first char
Need char = ','
+Subject length lower bound = 1
Starting byte set: \x09 \x0a \x0c \x0d \x20 ,
\x0b,\x0b
0: ,
@@ -6443,7 +6503,6 @@ Unknown newline type at: <bad>
/.*/I<lf>
Capturing subpattern count = 0
-Partial matching not supported
Options:
Forced newline sequence: LF
First char at start or follows newline
@@ -6469,7 +6528,6 @@ No need char
/\w+(.)(.)?def/Is
Capturing subpattern count = 2
-Partial matching not supported
Options: dotall
No first char
Need char = 'f'
@@ -6486,7 +6544,6 @@ Need char = 'f'
+((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)+I
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
@@ -6621,10 +6678,10 @@ No need char
/(a*b|(?i:c*(?-i)d))/IS
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: C a b c d
/()[ab]xyz/IS
@@ -6632,6 +6689,7 @@ Capturing subpattern count = 1
No options
No first char
Need char = 'z'
+Subject length lower bound = 4
Starting byte set: a b
/(|)[ab]xyz/IS
@@ -6639,6 +6697,7 @@ Capturing subpattern count = 1
No options
No first char
Need char = 'z'
+Subject length lower bound = 4
Starting byte set: a b
/(|c)[ab]xyz/IS
@@ -6646,6 +6705,7 @@ Capturing subpattern count = 1
No options
No first char
Need char = 'z'
+Subject length lower bound = 4
Starting byte set: a b c
/(|c?)[ab]xyz/IS
@@ -6653,6 +6713,7 @@ Capturing subpattern count = 1
No options
No first char
Need char = 'z'
+Subject length lower bound = 4
Starting byte set: a b c
/(d?|c?)[ab]xyz/IS
@@ -6660,6 +6721,7 @@ Capturing subpattern count = 1
No options
No first char
Need char = 'z'
+Subject length lower bound = 4
Starting byte set: a b c d
/(d?|c)[ab]xyz/IS
@@ -6667,6 +6729,7 @@ Capturing subpattern count = 1
No options
No first char
Need char = 'z'
+Subject length lower bound = 4
Starting byte set: a b c d
/^a*b\d/DZ
@@ -6680,7 +6743,6 @@ Starting byte set: a b c d
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored
No first char
Need char = 'b'
@@ -6696,7 +6758,6 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored
No first char
Need char = 'b'
@@ -6712,7 +6773,6 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored
No first char
Need char = 'b'
@@ -6728,7 +6788,6 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored
No first char
Need char = 'A'
@@ -6743,14 +6802,13 @@ No match
------------------------------------------------------------------
Bra
^
- a*
- NC A
+ /i a*
+ /i A
\d
Ket
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
Options: anchored caseless
No first char
Need char = 'A' (caseless)
@@ -6761,34 +6819,34 @@ Need char = 'A' (caseless)
/(a*|b*)[cd]/IS
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b c d
/(a+|b*)[cd]/IS
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b c d
/(a*|b+)[cd]/IS
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: a b c d
/(a+|b+)[cd]/IS
Capturing subpattern count = 1
-Partial matching not supported
No options
No first char
No need char
+Subject length lower bound = 2
Starting byte set: a b
/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
@@ -7373,8 +7431,8 @@ Matched, but too many substrings
/[^a]+a/BZi
------------------------------------------------------------------
Bra
- [^A]++
- NC a
+ /i [^a]++
+ /i a
Ket
End
------------------------------------------------------------------
@@ -7382,8 +7440,8 @@ Matched, but too many substrings
/[^a]+A/BZi
------------------------------------------------------------------
Bra
- [^A]++
- NC A
+ /i [^a]++
+ /i A
Ket
End
------------------------------------------------------------------
@@ -7578,9 +7636,7 @@ No match
------------------------------------------------------------------
Bra
^
- Once
Recurse
- Ket
[()]
CBra 1
Ket
@@ -7594,7 +7650,7 @@ No match
^
CBra 1
Cond
- 2 Cond ref
+ 2 Cond nref
y
Ket
[()]
@@ -7614,9 +7670,7 @@ No match
------------------------------------------------------------------
Bra
^
- Once
Recurse
- Ket
()
CBra 1
Ket
@@ -7628,9 +7682,7 @@ No match
------------------------------------------------------------------
Bra
^
- Once
Recurse
- Ket
[(\]a]
CBra 1
Ket
@@ -7643,9 +7695,7 @@ No match
------------------------------------------------------------------
Bra
^
- Once
Recurse
- Ket
CBra 1
Ket
Ket
@@ -7660,7 +7710,6 @@ Named capturing subpatterns:
one 1
three 3
two 2
-Partial matching not supported
Options: anchored caseless
No first char
No need char
@@ -7694,7 +7743,6 @@ No match
/(?=(\w+))\1:/I
Capturing subpattern count = 1
Max back reference = 1
-Partial matching not supported
No options
No first char
Need char = ':'
@@ -7707,7 +7755,6 @@ Capturing subpattern count = 1
Max back reference = 1
Named capturing subpatterns:
abc 1
-Partial matching not supported
No options
No first char
Need char = ':'
@@ -7715,20 +7762,6 @@ Need char = ':'
0: abcd:
1: abcd
-/(?'abc'\w+):\k<abc>{2}/
- a:aaxyz
- 0: a:aa
- 1: a
- ab:ababxyz
- 0: ab:abab
- 1: ab
- ** Failers
-No match
- a:axyz
-No match
- ab:abxyz
-No match
-
/(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/J
adaa
0: adaa
@@ -7755,13 +7788,6 @@ No match
bddd
No match
-/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
- abd
- 0: abd
- 1: a
- ce
- 0: ce
-
/(?(<bc))/
Failed: malformed number or name after (?( at offset 6
@@ -7792,24 +7818,6 @@ Failed: reference to non-existent subpattern at offset 29
1: abcabc1Xabc2XabcX
2: abcabc1Xabc2XabcX
-/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
- abcd
- 0: ab
- 1: <unset>
- 2: <unset>
-
-/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
- (?(DEFINE)
- (?<NAME_PAT>[a-z]+)
- (?<ADDRESS_PAT>\d+)
- )/x
- metcalfe 33
- 0: metcalfe 33
- 1: metcalfe
- 2: 33
- 3: <unset>
- 4: <unset>
-
/^(?(DEFINE) abc | xyz ) /x
Failed: DEFINE group contains more than one branch at offset 22
@@ -7819,9 +7827,6 @@ Options: extended
First char = 'x'
Need char = 'z'
-/(?(DEFINE) abc){3} xyz/x
-Failed: repeating a DEFINE group is not allowed at offset 17
-
/(a|)*\d/
\O0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -7851,7 +7856,7 @@ No match
No match
/^abc./mgx<any>
- abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 \x{2028}abc8 \x{2029}abc9 JUNK
+ abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
0: abc1
0: abc2
0: abc3
@@ -7861,7 +7866,7 @@ No match
0: abc7
/abc.$/mgx<any>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7 abc9
0: abc1
0: abc2
0: abc3
@@ -7987,46 +7992,6 @@ Need char = 'P'
0: PXP
1: P
-/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
- 1.2.3.4
- 0: 1.2.3.4
- 1: <unset>
- 2: .4
- 131.111.10.206
- 0: 131.111.10.206
- 1: <unset>
- 2: .206
- 10.0.0.0
- 0: 10.0.0.0
- 1: <unset>
- 2: .0
- ** Failers
-No match
- 10.6
-No match
- 455.3.4.5
-No match
-
-/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
- 1.2.3.4
- 0: 1.2.3.4
- 1: .4
- 2: <unset>
- 131.111.10.206
- 0: 131.111.10.206
- 1: .206
- 2: <unset>
- 10.0.0.0
- 0: 10.0.0.0
- 1: .0
- 2: <unset>
- ** Failers
-No match
- 10.6
-No match
- 455.3.4.5
-No match
-
/(?:a(?&abc)b)*(?<abc>x)/
123axbaxbaxbx456
0: axbaxbaxbx
@@ -8064,23 +8029,17 @@ No match
DEFabcABCXYZ
No match
-/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
- ababababbbabZXXXX
- 0: ababababbbabZ
- 1: ab
- 2: b
-
/^(a)\g-2/
Failed: reference to non-existent subpattern at offset 7
/^(a)\g/
-Failed: \g is not followed by a braced name or an optionally braced non-zero number at offset 5
+Failed: a numbered reference must not be zero at offset 5
/^(a)\g{0}/
-Failed: \g is not followed by a braced name or an optionally braced non-zero number at offset 7
+Failed: a numbered reference must not be zero at offset 8
/^(a)\g{3/
-Failed: \g is not followed by a braced name or an optionally braced non-zero number at offset 8
+Failed: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number at offset 8
/^(a)\g{4a}/
Failed: reference to non-existent subpattern at offset 9
@@ -8163,7 +8122,7 @@ No match
0+
/abc.$/mgx<anycrlf>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
0: abc1
0: abc4
0: abc5
@@ -8185,10 +8144,8 @@ No match
Alt
c
Ket
- Once
Recurse
Ket
- Ket
End
------------------------------------------------------------------
abc
@@ -8199,9 +8156,7 @@ No match
------------------------------------------------------------------
Bra
xy
- Once
Recurse
- Ket
CBra 1
abc
Ket
@@ -8217,13 +8172,13 @@ No match
No match
/x(?-0)y/
-Failed: (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number at offset 5
+Failed: a numbered reference must not be zero at offset 5
/x(?-1)y/
Failed: reference to non-existent subpattern at offset 5
/x(?+0)y/
-Failed: (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number at offset 5
+Failed: a numbered reference must not be zero at offset 5
/x(?+1)y/
Failed: reference to non-existent subpattern at offset 5
@@ -8325,26 +8280,6 @@ Failed: reference to non-existent subpattern at offset 7
0: Y!
1: !
-/(foo)\Kbar/
- foobar
- 0: bar
- 1: foo
-
-/(foo)(\Kbar|baz)/
- foobar
- 0: bar
- 1: foo
- 2: bar
- foobaz
- 0: foobaz
- 1: foo
- 2: baz
-
-/(foo\Kbar)baz/
- foobarbaz
- 0: barbaz
- 1: foobar
-
/(?<A>tom|bon)-\k{A}/
tom-tom
0: tom-tom
@@ -8357,14 +8292,6 @@ No match
tom-bon
No match
-/(?<A>tom|bon)-\g{A}/
- tom-tom
- 0: tom-tom
- 1: tom
- bon-bon
- 0: bon-bon
- 1: bon
-
/\g{A/
Failed: syntax error in subpattern name (missing terminator) at offset 4
@@ -8459,142 +8386,6 @@ Failed: syntax error in subpattern name (missing terminator) at offset 4
3: <unset>
4: x
-/(?|(abc)|(xyz))\1/
- abcabc
- 0: abcabc
- 1: abc
- xyzxyz
- 0: xyzxyz
- 1: xyz
- ** Failers
-No match
- abcxyz
-No match
- xyzabc
-No match
-
-/(?|(abc)|(xyz))(?1)/
- abcabc
- 0: abcabc
- 1: abc
- xyzabc
- 0: xyzabc
- 1: xyz
- ** Failers
-No match
- xyzxyz
-No match
-
-/\H\h\V\v/
- X X\x0a
- 0: X X\x0a
- X\x09X\x0b
- 0: X\x09X\x0b
- ** Failers
-No match
- \xa0 X\x0a
-No match
-
-/\H*\h+\V?\v{3,4}/
- \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
- 0: \x09 \xa0X\x0a\x0b\x0c\x0d
- \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
- 0: \x09 \xa0\x0a\x0b\x0c\x0d
- \x09\x20\xa0\x0a\x0b\x0c
- 0: \x09 \xa0\x0a\x0b\x0c
- ** Failers
-No match
- \x09\x20\xa0\x0a\x0b
-No match
-
-/\H{3,4}/
- XY ABCDE
- 0: ABCD
- XY PQR ST
- 0: PQR
-
-/.\h{3,4}./
- XY AB PQRS
- 0: B P
-
-/\h*X\h?\H+Y\H?Z/
- >XNNNYZ
- 0: XNNNYZ
- > X NYQZ
- 0: X NYQZ
- ** Failers
-No match
- >XYZ
-No match
- > X NY Z
-No match
-
-/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
- >XY\x0aZ\x0aA\x0bNN\x0c
- 0: XY\x0aZ\x0aA\x0bNN\x0c
- >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
- 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
-
-/[\h]/BZ
-------------------------------------------------------------------
- Bra
- [\x09 \xa0]
- Ket
- End
-------------------------------------------------------------------
- >\x09<
- 0: \x09
-
-/[\h]+/BZ
-------------------------------------------------------------------
- Bra
- [\x09 \xa0]+
- Ket
- End
-------------------------------------------------------------------
- >\x09\x20\xa0<
- 0: \x09 \xa0
-
-/[\v]/BZ
-------------------------------------------------------------------
- Bra
- [\x0a-\x0d\x85]
- Ket
- End
-------------------------------------------------------------------
-
-/[\H]/BZ
-------------------------------------------------------------------
- Bra
- [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff]
- Ket
- End
-------------------------------------------------------------------
-
-/[^\h]/BZ
-------------------------------------------------------------------
- Bra
- [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff] (neg)
- Ket
- End
-------------------------------------------------------------------
-
-/[\V]/BZ
-------------------------------------------------------------------
- Bra
- [\x00-\x09\x0e-\x84\x86-\xff]
- Ket
- End
-------------------------------------------------------------------
-
-/[\x0a\V]/BZ
-------------------------------------------------------------------
- Bra
- [\x00-\x0a\x0e-\x84\x86-\xff]
- Ket
- End
-------------------------------------------------------------------
-
/\H++X/BZ
------------------------------------------------------------------
Bra
@@ -8786,7 +8577,7 @@ No match
------------------------------------------------------------------
/\( (?: [^()]* | (?R) )* \)/x
-(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(0(0(0(0(0(0(0(0(0(00)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)0)0)0)0)0)0)0)0)0)
+\J1024(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(0(0(0(0(0(0(0(0(0(00)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)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)0)0)0)0)0)0)0)0)0)
/[\E]AAA/
@@ -8831,87 +8622,6 @@ Failed: missing terminating ] for character class at offset 10
End
------------------------------------------------------------------
-/^a+(*FAIL)/
- aaaaaa
-No match
-
-/a+b?c+(*FAIL)/
- aaabccc
-No match
-
-/a+b?(*PRUNE)c+(*FAIL)/
- aaabccc
-No match
-
-/a+b?(*COMMIT)c+(*FAIL)/
- aaabccc
-No match
-
-/a+b?(*SKIP)c+(*FAIL)/
- aaabcccaaabccc
-No match
-
-/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
- aaaxxxxxx
- 0: aaaxxxxxx
- aaa++++++
- 0: aaa
- bbbxxxxx
- 0: bbbxxxxx
- bbb+++++
- 0: bbb
- cccxxxx
- 0: cccxxxx
- ccc++++
- 0: ccc
- dddddddd
- 0: ddd
-
-/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
- aaaxxxxxx
- 0: aaaxxxxxx
- 1: aaaxxxxxx
- aaa++++++
- 0: aaa
- 1: aaa
- bbbxxxxx
- 0: bbbxxxxx
- 1: bbbxxxxx
- bbb+++++
- 0: bbb
- 1: bbb
- cccxxxx
- 0: cccxxxx
- 1: cccxxxx
- ccc++++
- 0: ccc
- 1: ccc
- dddddddd
- 0: ddd
- 1: ddd
-
-/a+b?(*THEN)c+(*FAIL)/
- aaabccc
-No match
-
-/(A (A|B(*ACCEPT)|C) D)(E)/x
- ABX
- 0: AB
- AADE
- 0: AADE
- 1: AAD
- 2: A
- 3: E
- ACDE
- 0: ACDE
- 1: ACD
- 2: C
- 3: E
- ** Failers
-No match
- AD
-No match
-
/^a+(*FAIL)/C
aaaaaa
--->aaaaaa
@@ -9040,11 +8750,8 @@ No match
+13 ^ ^ (*FAIL)
No match
-/a(*PRUNE:XXX)b/
-Failed: (*VERB) with an argument is not supported at offset 8
-
/a(*MARK)b/
-Failed: (*VERB) not recognized at offset 7
+Failed: (*MARK) must have an argument at offset 7
/(?i:A{1,}\6666666666)/
Failed: number is too big at offset 19
@@ -9052,8 +8759,13 @@ Failed: number is too big at offset 19
/\g6666666666/
Failed: number is too big at offset 11
-/[\g6666666666]/
-Failed: number is too big at offset 12
+/[\g6666666666]/BZ
+------------------------------------------------------------------
+ Bra
+ [6g]
+ Ket
+ End
+------------------------------------------------------------------
/(?1)\c[/
Failed: reference to non-existent subpattern at offset 3
@@ -9076,7 +8788,7 @@ No match
1: \x0a
/a(*CR)b/
-Failed: (*VERB) not recognized at offset 5
+Failed: (*VERB) not recognized or malformed at offset 5
/(*CR)a.b/
a\nb
@@ -9133,6 +8845,27 @@ No match
No match
a\x85b
No match
+
+/(*ANY).*/g
+ abc\r\ndef
+ 0: abc
+ 0:
+ 0: def
+ 0:
+
+/(*ANYCRLF).*/g
+ abc\r\ndef
+ 0: abc
+ 0:
+ 0: def
+ 0:
+
+/(*CRLF).*/g
+ abc\r\ndef
+ 0: abc
+ 0:
+ 0: def
+ 0:
/a\Rb/I<bsr_anycrlf>
Capturing subpattern count = 0
@@ -9216,7 +8949,6 @@ No match
/a\R{2,4}b/I<bsr_anycrlf>
Capturing subpattern count = 0
-Partial matching not supported
Options: bsr_anycrlf
First char = 'a'
Need char = 'b'
@@ -9235,7 +8967,6 @@ No match
/a\R{2,4}b/I<bsr_unicode>
Capturing subpattern count = 0
-Partial matching not supported
Options: bsr_unicode
First char = 'a'
Need char = 'b'
@@ -9340,6 +9071,12 @@ Failed: subpattern name expected at offset 3
/\k{}/
Failed: subpattern name expected at offset 3
+/\k/
+Failed: \k is not followed by a braced, angle-bracketed, or quoted name at offset 2
+
+/\kabc/
+Failed: \k is not followed by a braced, angle-bracketed, or quoted name at offset 5
+
/(?P=)/
Failed: subpattern name expected at offset 4
@@ -9385,4 +9122,3547 @@ Failed: unknown POSIX class name at offset 6
/[[:a\dz:]]/
Failed: unknown POSIX class name at offset 3
-/ End of testinput2 /
+/(^(a|b\g<-1'c))/
+Failed: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number at offset 15
+
+/^(?+1)(?<a>x|y){0}z/
+ xzxx
+ 0: xz
+ yzyy
+ 0: yz
+ ** Failers
+No match
+ xxz
+No match
+
+/(\3)(\1)(a)/
+ cat
+No match
+
+/(\3)(\1)(a)/<JS>
+ cat
+ 0: a
+ 1:
+ 2:
+ 3: a
+
+/TA]/
+ The ACTA] comes
+ 0: TA]
+
+/TA]/<JS>
+Failed: ] is an invalid data character in JavaScript compatibility mode at offset 2
+
+/(?2)[]a()b](abc)/
+Failed: reference to non-existent subpattern at offset 3
+
+/(?2)[^]a()b](abc)/
+Failed: reference to non-existent subpattern at offset 3
+
+/(?1)[]a()b](abc)/
+ abcbabc
+ 0: abcbabc
+ 1: abc
+ ** Failers
+No match
+ abcXabc
+No match
+
+/(?1)[^]a()b](abc)/
+ abcXabc
+ 0: abcXabc
+ 1: abc
+ ** Failers
+No match
+ abcbabc
+No match
+
+/(?2)[]a()b](abc)(xyz)/
+ xyzbabcxyz
+ 0: xyzbabcxyz
+ 1: abc
+ 2: xyz
+
+/(?&N)[]a(?<N>)](?<M>abc)/
+Failed: reference to non-existent subpattern at offset 4
+
+/(?&N)[]a(?<N>)](abc)/
+Failed: reference to non-existent subpattern at offset 4
+
+/a[]b/
+Failed: missing terminating ] for character class at offset 4
+
+/a[^]b/
+Failed: missing terminating ] for character class at offset 5
+
+/a[]b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]*+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]b/<JS>
+ aXb
+ 0: aXb
+ a\nb
+ 0: a\x0ab
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]+b/<JS>
+ aXb
+ 0: aXb
+ a\nX\nXb
+ 0: a\x0aX\x0aXb
+ ** Failers
+No match
+ ab
+No match
+
+/a(?!)+b/
+Failed: nothing to repeat at offset 5
+
+/a(*FAIL)+b/
+Failed: nothing to repeat at offset 8
+
+/(abc|pqr|123){0}[xyz]/SI
+Capturing subpattern count = 1
+No options
+No first char
+No need char
+Subject length lower bound = 1
+Starting byte set: x y z
+
+/(?(?=.*b)b|^)/CI
+Capturing subpattern count = 0
+Options:
+No first char
+No need char
+ adc
+--->adc
+ +0 ^ (?(?=.*b)b|^)
+ +2 ^ (?=.*b)
+ +5 ^ .*
+ +7 ^ ^ b
+ +7 ^ ^ b
+ +7 ^^ b
+ +7 ^ b
++11 ^ ^
++12 ^ )
++13 ^
+ 0:
+ abc
+--->abc
+ +0 ^ (?(?=.*b)b|^)
+ +2 ^ (?=.*b)
+ +5 ^ .*
+ +7 ^ ^ b
+ +7 ^ ^ b
+ +7 ^^ b
+ +8 ^ ^ )
+ +9 ^ b
+ +0 ^ (?(?=.*b)b|^)
+ +2 ^ (?=.*b)
+ +5 ^ .*
+ +7 ^ ^ b
+ +7 ^^ b
+ +7 ^ b
+ +8 ^^ )
+ +9 ^ b
++10 ^^ |
++13 ^^
+ 0: b
+
+/(?(?=b).*b|^d)/I
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+
+/(?(?=.*b).*b|^d)/I
+Capturing subpattern count = 0
+No options
+First char at start or follows newline
+No need char
+
+/xyz/C
+ xyz
+--->xyz
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +3 ^ ^
+ 0: xyz
+ abcxyz
+--->abcxyz
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +3 ^ ^
+ 0: xyz
+ abcxyz\Y
+--->abcxyz
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +3 ^ ^
+ 0: xyz
+ ** Failers
+No match
+ abc
+No match
+ abc\Y
+--->abc
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+No match
+ abcxypqr
+No match
+ abcxypqr\Y
+--->abcxypqr
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+No match
+
+/(*NO_START_OPT)xyz/C
+ abcxyz
+--->abcxyz
++15 ^ x
++15 ^ x
++15 ^ x
++15 ^ x
++16 ^^ y
++17 ^ ^ z
++18 ^ ^
+ 0: xyz
+
+/xyz/CY
+ abcxyz
+--->abcxyz
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +3 ^ ^
+ 0: xyz
+
+/^"((?(?=[a])[^"])|b)*"$/C
+ "ab"
+--->"ab"
+ +0 ^ ^
+ +1 ^ "
+ +2 ^^ ((?(?=[a])[^"])|b)*
+ +3 ^^ (?(?=[a])[^"])
+ +5 ^^ (?=[a])
+ +8 ^^ [a]
++11 ^ ^ )
++12 ^^ [^"]
++16 ^ ^ )
++17 ^ ^ |
+ +3 ^ ^ (?(?=[a])[^"])
+ +5 ^ ^ (?=[a])
+ +8 ^ ^ [a]
++17 ^ ^ |
++21 ^ ^ "
++18 ^ ^ b
++19 ^ ^ )
+ +3 ^ ^ (?(?=[a])[^"])
+ +5 ^ ^ (?=[a])
+ +8 ^ ^ [a]
++17 ^ ^ |
++21 ^ ^ "
++22 ^ ^ $
++23 ^ ^
+ 0: "ab"
+ 1:
+
+/^"((?(?=[a])[^"])|b)*"$/
+ "ab"
+ 0: "ab"
+ 1:
+
+/^X(?5)(a)(?|(b)|(q))(c)(d)Y/
+Failed: reference to non-existent subpattern at offset 5
+
+/^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/
+ XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: Y
+
+/Xa{2,4}b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/Xa{2,4}?b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/Xa{2,4}+b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X\d{2,4}b/
+ X\P
+Partial match: X
+ X3\P
+Partial match: X3
+ X33\P
+Partial match: X33
+ X333\P
+Partial match: X333
+ X3333\P
+Partial match: X3333
+
+/X\d{2,4}?b/
+ X\P
+Partial match: X
+ X3\P
+Partial match: X3
+ X33\P
+Partial match: X33
+ X333\P
+Partial match: X333
+ X3333\P
+Partial match: X3333
+
+/X\d{2,4}+b/
+ X\P
+Partial match: X
+ X3\P
+Partial match: X3
+ X33\P
+Partial match: X33
+ X333\P
+Partial match: X333
+ X3333\P
+Partial match: X3333
+
+/X\D{2,4}b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X\D{2,4}?b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X\D{2,4}+b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X[abc]{2,4}b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X[abc]{2,4}?b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X[abc]{2,4}+b/
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X[^a]{2,4}b/
+ X\P
+Partial match: X
+ Xz\P
+Partial match: Xz
+ Xzz\P
+Partial match: Xzz
+ Xzzz\P
+Partial match: Xzzz
+ Xzzzz\P
+Partial match: Xzzzz
+
+/X[^a]{2,4}?b/
+ X\P
+Partial match: X
+ Xz\P
+Partial match: Xz
+ Xzz\P
+Partial match: Xzz
+ Xzzz\P
+Partial match: Xzzz
+ Xzzzz\P
+Partial match: Xzzzz
+
+/X[^a]{2,4}+b/
+ X\P
+Partial match: X
+ Xz\P
+Partial match: Xz
+ Xzz\P
+Partial match: Xzz
+ Xzzz\P
+Partial match: Xzzz
+ Xzzzz\P
+Partial match: Xzzzz
+
+/(Y)X\1{2,4}b/
+ YX\P
+Partial match: YX
+ YXY\P
+Partial match: YXY
+ YXYY\P
+Partial match: YXYY
+ YXYYY\P
+Partial match: YXYYY
+ YXYYYY\P
+Partial match: YXYYYY
+
+/(Y)X\1{2,4}?b/
+ YX\P
+Partial match: YX
+ YXY\P
+Partial match: YXY
+ YXYY\P
+Partial match: YXYY
+ YXYYY\P
+Partial match: YXYYY
+ YXYYYY\P
+Partial match: YXYYYY
+
+/(Y)X\1{2,4}+b/
+ YX\P
+Partial match: YX
+ YXY\P
+Partial match: YXY
+ YXYY\P
+Partial match: YXYY
+ YXYYY\P
+Partial match: YXYYY
+ YXYYYY\P
+Partial match: YXYYYY
+
+/\++\KZ|\d+X|9+Y/
+ ++++123999\P
+Partial match: 123999
+ ++++123999Y\P
+ 0: 999Y
+ ++++Z1234\P
+ 0: Z
+
+/Z(*F)/
+ Z\P
+No match
+ ZA\P
+No match
+
+/Z(?!)/
+ Z\P
+No match
+ ZA\P
+No match
+
+/dog(sbody)?/
+ dogs\P
+ 0: dog
+ dogs\P\P
+Partial match: dogs
+
+/dog(sbody)??/
+ dogs\P
+ 0: dog
+ dogs\P\P
+ 0: dog
+
+/dog|dogsbody/
+ dogs\P
+ 0: dog
+ dogs\P\P
+ 0: dog
+
+/dogsbody|dog/
+ dogs\P
+ 0: dog
+ dogs\P\P
+Partial match: dogs
+
+/\bthe cat\b/
+ the cat\P
+ 0: the cat
+ the cat\P\P
+Partial match: the cat
+
+/abc/
+ abc\P
+ 0: abc
+ abc\P\P
+ 0: abc
+
+/abc\K123/
+ xyzabc123pqr
+ 0: 123
+ xyzabc12\P
+Partial match: abc12
+ xyzabc12\P\P
+Partial match: abc12
+
+/(?<=abc)123/
+ xyzabc123pqr
+ 0: 123
+ xyzabc12\P
+Partial match at offset 6: abc12
+ xyzabc12\P\P
+Partial match at offset 6: abc12
+
+/\babc\b/
+ +++abc+++
+ 0: abc
+ +++ab\P
+Partial match at offset 3: +ab
+ +++ab\P\P
+Partial match at offset 3: +ab
+
+/(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\w*+))/BZ
+------------------------------------------------------------------
+ Bra
+ Recurse
+ Recurse
+ Cond
+ Cond def
+ CBra 1
+ <
+ [^m]
+ [^>]
+ >
+ [^<]
+ Ket
+ CBra 2
+ \w*+
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?&word)(?&element)(?(DEFINE)(?<element><[^\d][^>]>[^<])(?<word>\w*+))/BZ
+------------------------------------------------------------------
+ Bra
+ Recurse
+ Recurse
+ Cond
+ Cond def
+ CBra 1
+ <
+ [\x00-/:-\xff] (neg)
+ [^>]
+ >
+ [^<]
+ Ket
+ CBra 2
+ \w*+
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/(ab)(x(y)z(cd(*ACCEPT)))pq/BZ
+------------------------------------------------------------------
+ Bra
+ CBra 1
+ ab
+ Ket
+ CBra 2
+ x
+ CBra 3
+ y
+ Ket
+ z
+ CBra 4
+ cd
+ Close 4
+ Close 2
+ *ACCEPT
+ Ket
+ Ket
+ pq
+ Ket
+ End
+------------------------------------------------------------------
+
+/abc\K/+
+ abcdef
+ 0:
+ 0+ def
+ abcdef\N\N
+ 0:
+ 0+ def
+ xyzabcdef\N\N
+ 0:
+ 0+ def
+ ** Failers
+No match
+ abcdef\N
+No match
+ xyzabcdef\N
+No match
+
+/^(?:(?=abc)|abc\K)/+
+ abcdef
+ 0:
+ 0+ abcdef
+ abcdef\N\N
+ 0:
+ 0+ def
+ ** Failers
+No match
+ abcdef\N
+No match
+
+/a?b?/+
+ xyz
+ 0:
+ 0+ xyz
+ xyzabc
+ 0:
+ 0+ xyzabc
+ xyzabc\N
+ 0: ab
+ 0+ c
+ xyzabc\N\N
+ 0:
+ 0+ yzabc
+ xyz\N\N
+ 0:
+ 0+ yz
+ ** Failers
+ 0:
+ 0+ ** Failers
+ xyz\N
+No match
+
+/^a?b?/+
+ xyz
+ 0:
+ 0+ xyz
+ xyzabc
+ 0:
+ 0+ xyzabc
+ ** Failers
+ 0:
+ 0+ ** Failers
+ xyzabc\N
+No match
+ xyzabc\N\N
+No match
+ xyz\N\N
+No match
+ xyz\N
+No match
+
+/^(?<name>a|b\g<name>c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(?<name>a|b\g'name'c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(a|b\g<1>c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(a|b\g'1'c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(a|b\g'-1'c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/(^(a|b\g<-1>c))/
+ aaaa
+ 0: a
+ 1: a
+ 2: a
+ bacxxx
+ 0: bac
+ 1: bac
+ 2: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ 2: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+ 2: bbbaccc
+
+/(?-i:\g<name>)(?i:(?<name>a))/
+ XaaX
+ 0: aa
+ 1: a
+ XAAX
+ 0: AA
+ 1: A
+
+/(?i:\g<name>)(?-i:(?<name>a))/
+ XaaX
+ 0: aa
+ 1: a
+ ** Failers
+No match
+ XAAX
+No match
+
+/(?-i:\g<+1>)(?i:(a))/
+ XaaX
+ 0: aa
+ 1: a
+ XAAX
+ 0: AA
+ 1: A
+
+/(?=(?<regex>(?#simplesyntax)\$(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?<index>[a-zA-Z0-9_\x{7f}-\x{ff}]+|\$\g<name>)\]|->\g<name>(\(.*?\))?)?|(?#simple syntax withbraces)\$\{(?:\g<name>(?<indices>\[(?:\g<index>|'(?:\\.|[^'\\])*'|"(?:\g<regex>|\\.|[^"\\])*")\])?|\g<complex>|\$\{\g<complex>\})\}|(?#complexsyntax)\{(?<complex>\$(?<segment>\g<name>(\g<indices>*|\(.*?\))?)(?:->\g<segment>)*|\$\g<complex>|\$\{\g<complex>\})\}))\{/
+
+/(?<n>a|b|c)\g<n>*/
+ abc
+ 0: abc
+ 1: a
+ accccbbb
+ 0: accccbbb
+ 1: a
+
+/^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/
+ XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: <unset>
+ 4: <unset>
+ 5: c
+ 6: d
+ 7: Y
+
+/(?<=b(?1)|zzz)(a)/
+ xbaax
+ 0: a
+ 1: a
+ xzzzax
+ 0: a
+ 1: a
+
+/(a)(?<=b\1)/
+Failed: lookbehind assertion is not fixed length at offset 10
+
+/(a)(?<=b+(?1))/
+Failed: lookbehind assertion is not fixed length at offset 13
+
+/(a+)(?<=b(?1))/
+Failed: lookbehind assertion is not fixed length at offset 14
+
+/(a(?<=b(?1)))/
+Failed: lookbehind assertion is not fixed length at offset 13
+
+/(?<=b(?1))xyz/
+Failed: reference to non-existent subpattern at offset 8
+
+/(?<=b(?1))xyz(b+)pqrstuvew/
+Failed: lookbehind assertion is not fixed length at offset 26
+
+/(a|bc)\1/SI
+Capturing subpattern count = 1
+Max back reference = 1
+No options
+No first char
+No need char
+Subject length lower bound = 2
+Starting byte set: a b
+
+/(a|bc)\1{2,3}/SI
+Capturing subpattern count = 1
+Max back reference = 1
+No options
+No first char
+No need char
+Subject length lower bound = 3
+Starting byte set: a b
+
+/(a|bc)(?1)/SI
+Capturing subpattern count = 1
+No options
+No first char
+No need char
+Subject length lower bound = 2
+Starting byte set: a b
+
+/(a|b\1)(a|b\1)/SI
+Capturing subpattern count = 2
+Max back reference = 1
+No options
+No first char
+No need char
+Subject length lower bound = 2
+Starting byte set: a b
+
+/(a|b\1){2}/SI
+Capturing subpattern count = 1
+Max back reference = 1
+No options
+No first char
+No need char
+Subject length lower bound = 2
+Starting byte set: a b
+
+/(a|bbbb\1)(a|bbbb\1)/SI
+Capturing subpattern count = 2
+Max back reference = 1
+No options
+No first char
+No need char
+Subject length lower bound = 2
+Starting byte set: a b
+
+/(a|bbbb\1){2}/SI
+Capturing subpattern count = 1
+Max back reference = 1
+No options
+No first char
+No need char
+Subject length lower bound = 2
+Starting byte set: a b
+
+/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/SI
+Capturing subpattern count = 1
+Options: anchored
+No first char
+Need char = ':'
+Subject length lower bound = 22
+No set of starting bytes
+
+/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/isIS
+Capturing subpattern count = 11
+Options: caseless dotall
+First char = '<'
+Need char = '>'
+Subject length lower bound = 47
+No set of starting bytes
+
+"(?>.*/)foo"SI
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'o'
+Subject length lower bound = 4
+No set of starting bytes
+
+/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /xSI
+Capturing subpattern count = 0
+Options: extended
+No first char
+Need char = '-'
+Subject length lower bound = 8
+No set of starting bytes
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/iSI
+Capturing subpattern count = 1
+Options: caseless
+No first char
+No need char
+Subject length lower bound = 1
+Starting byte set: A B C a b c
+
+/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/SI
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'b'
+Subject length lower bound = 41
+Starting byte set: c d
+
+/<a[\s]+href[\s]*=[\s]* # find <a href=
+ ([\"\'])? # find single or double quote
+ (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
+ # quote, otherwise match up to next space
+/isxSI
+Capturing subpattern count = 3
+Max back reference = 1
+Options: caseless extended dotall
+First char = '<'
+Need char = '='
+Subject length lower bound = 9
+No set of starting bytes
+
+/^(?!:) # colon disallowed at start
+ (?: # start of item
+ (?: [0-9a-f]{1,4} | # 1-4 hex digits or
+ (?(1)0 | () ) ) # if null previously matched, fail; else null
+ : # followed by colon
+ ){1,7} # end item; 1-7 of them required
+ [0-9a-f]{1,4} $ # final hex number at end of string
+ (?(1)|.) # check that there was an empty component
+ /xiIS
+Capturing subpattern count = 1
+Options: anchored caseless extended
+No first char
+Need char = ':'
+Subject length lower bound = 2
+No set of starting bytes
+
+/(?|(?<a>A)|(?<a>B))/I
+Capturing subpattern count = 1
+Named capturing subpatterns:
+ a 1
+ a 1
+No options
+No first char
+No need char
+ AB\Ca
+ 0: A
+ 1: A
+ C A (1) a
+ BA\Ca
+ 0: B
+ 1: B
+ C B (1) a
+
+/(?|(?<a>A)|(?<b>B))/
+Failed: different names for subpatterns of the same number are not allowed at offset 15
+
+/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |
+ b(?<quote> (?<apostrophe>')|(?<realquote>")) )
+ (?('quote')[a-z]+|[0-9]+)/JIx
+Capturing subpattern count = 6
+Named capturing subpatterns:
+ apostrophe 2
+ apostrophe 5
+ quote 1
+ quote 4
+ realquote 3
+ realquote 6
+Options: extended dupnames
+No first char
+No need char
+ a"aaaaa
+ 0: a"aaaaa
+ 1: "
+ 2: <unset>
+ 3: "
+ b"aaaaa
+ 0: b"aaaaa
+ 1: <unset>
+ 2: <unset>
+ 3: <unset>
+ 4: "
+ 5: <unset>
+ 6: "
+ ** Failers
+No match
+ b"11111
+No match
+ a"11111
+No match
+
+/^(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/JDZx
+------------------------------------------------------------------
+ Bra
+ ^
+ Bra
+ CBra 1
+ a
+ Ket
+ CBra 2
+ b
+ Ket
+ CBra 3
+ c
+ Ket
+ CBra 4
+ d
+ Ket
+ Alt
+ CBra 1
+ e
+ Ket
+ Ket
+ Cond
+ 4 Cond nref
+ X
+ Alt
+ Y
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 4
+Named capturing subpatterns:
+ D 4
+ D 1
+Options: anchored extended dupnames
+No first char
+No need char
+ abcdX
+ 0: abcdX
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ eX
+ 0: eX
+ 1: e
+ ** Failers
+No match
+ abcdY
+No match
+ ey
+No match
+
+/(?<A>a) (b)(c) (?<A>d (?(R&A)$ | (?4)) )/JDZx
+------------------------------------------------------------------
+ Bra
+ CBra 1
+ a
+ Ket
+ CBra 2
+ b
+ Ket
+ CBra 3
+ c
+ Ket
+ CBra 4
+ d
+ Cond
+ Cond nrecurse 1
+ $
+ Alt
+ Recurse
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 4
+Named capturing subpatterns:
+ A 1
+ A 4
+Options: extended dupnames
+First char = 'a'
+Need char = 'd'
+ abcdd
+ 0: abcdd
+ 1: a
+ 2: b
+ 3: c
+ 4: dd
+ ** Failers
+No match
+ abcdde
+No match
+
+/abcd*/
+ xxxxabcd\P
+ 0: abcd
+ xxxxabcd\P\P
+Partial match: abcd
+
+/abcd*/i
+ xxxxabcd\P
+ 0: abcd
+ xxxxabcd\P\P
+Partial match: abcd
+ XXXXABCD\P
+ 0: ABCD
+ XXXXABCD\P\P
+Partial match: ABCD
+
+/abc\d*/
+ xxxxabc1\P
+ 0: abc1
+ xxxxabc1\P\P
+Partial match: abc1
+
+/(a)bc\1*/
+ xxxxabca\P
+ 0: abca
+ 1: a
+ xxxxabca\P\P
+Partial match: abca
+
+/abc[de]*/
+ xxxxabcde\P
+ 0: abcde
+ xxxxabcde\P\P
+Partial match: abcde
+
+/-- This is not in the Perl-compatible test because Perl seems currently to be
+ broken and not behaving as specified in that it *does* bumpalong after
+ hitting (*COMMIT). --/
+
+/(?1)(A(*COMMIT)|B)D/
+ ABD
+ 0: ABD
+ 1: B
+ XABD
+ 0: ABD
+ 1: B
+ BAD
+ 0: BAD
+ 1: A
+ ABXABD
+ 0: ABD
+ 1: B
+ ** Failers
+No match
+ ABX
+No match
+ BAXBAD
+No match
+
+/(\3)(\1)(a)/<JS>
+ cat
+ 0: a
+ 1:
+ 2:
+ 3: a
+
+/(\3)(\1)(a)/SI<JS>
+Capturing subpattern count = 3
+Max back reference = 3
+Options:
+No first char
+Need char = 'a'
+Subject length lower bound = 1
+No set of starting bytes
+ cat
+ 0: a
+ 1:
+ 2:
+ 3: a
+
+/(\3)(\1)(a)/SI
+Capturing subpattern count = 3
+Max back reference = 3
+No options
+No first char
+Need char = 'a'
+Subject length lower bound = 3
+No set of starting bytes
+ cat
+No match
+
+/i(?(DEFINE)(?<s>a))/SI
+Capturing subpattern count = 1
+Named capturing subpatterns:
+ s 1
+No options
+First char = 'i'
+No need char
+Subject length lower bound = 1
+No set of starting bytes
+ i
+ 0: i
+
+/()i(?(1)a)/SI
+Capturing subpattern count = 1
+No options
+No first char
+Need char = 'i'
+Subject length lower bound = 1
+Starting byte set: i
+ ia
+ 0: ia
+ 1:
+
+/(?i)a(?-i)b|c/BZ
+------------------------------------------------------------------
+ Bra
+ /i a
+ b
+ Alt
+ c
+ Ket
+ End
+------------------------------------------------------------------
+ XabX
+ 0: ab
+ XAbX
+ 0: Ab
+ CcC
+ 0: c
+ ** Failers
+No match
+ XABX
+No match
+
+/(?i)a(?s)b|c/BZ
+------------------------------------------------------------------
+ Bra
+ /i ab
+ Alt
+ /i c
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?i)a(?s-i)b|c/BZ
+------------------------------------------------------------------
+ Bra
+ /i a
+ b
+ Alt
+ c
+ Ket
+ End
+------------------------------------------------------------------
+
+/^(ab(c\1)d|x){2}$/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ Once
+ CBra 1
+ ab
+ CBra 2
+ c
+ \1
+ Ket
+ d
+ Alt
+ x
+ Ket
+ Ket
+ Once
+ CBra 1
+ ab
+ CBra 2
+ c
+ \1
+ Ket
+ d
+ Alt
+ x
+ Ket
+ Ket
+ $
+ Ket
+ End
+------------------------------------------------------------------
+ xabcxd
+ 0: xabcxd
+ 1: abcxd
+ 2: cx
+
+/^(?&t)*+(?(DEFINE)(?<t>.))$/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ Braposzero
+ SBraPos
+ Recurse
+ KetRpos
+ Cond
+ Cond def
+ CBra 1
+ Any
+ Ket
+ Ket
+ $
+ Ket
+ End
+------------------------------------------------------------------
+
+/^(?&t)*(?(DEFINE)(?<t>.))$/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ Brazero
+ Once
+ Recurse
+ KetRmax
+ Cond
+ Cond def
+ CBra 1
+ Any
+ Ket
+ Ket
+ $
+ Ket
+ End
+------------------------------------------------------------------
+
+/ -- This one is here because Perl gives the match as "b" rather than "ab". I
+ believe this to be a Perl bug. --/
+
+/(?>a\Kb)z|(ab)/
+ ab
+ 0: ab
+ 1: ab
+
+/(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/
+Failed: recursive call could loop indefinitely at offset 31
+
+/abc(*MARK:)pqr/
+Failed: (*MARK) must have an argument at offset 10
+
+/abc(*:)pqr/
+Failed: (*MARK) must have an argument at offset 6
+
+/abc(*FAIL:123)xyz/
+Failed: an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT) at offset 13
+
+/--- This should, and does, fail. In Perl, it does not, which I think is a
+ bug because replacing the B in the pattern by (B|D) does make it fail. ---/
+
+/A(*COMMIT)B/+K
+ ACABX
+No match
+
+/--- These should be different, but in Perl they are not, which I think
+ is a bug in Perl. ---/
+
+/A(*THEN)B|A(*THEN)C/K
+ AC
+ 0: AC
+
+/A(*PRUNE)B|A(*PRUNE)C/K
+ AC
+No match
+
+/--- Mark names can be duplicated. Perl doesn't give a mark for this one,
+though PCRE does. ---/
+
+/^A(*:A)B|^X(*:A)Y/K
+ ** Failers
+No match
+ XAQQ
+No match, mark = A
+
+/--- COMMIT at the start of a pattern should be the same as an anchor. Perl
+optimizations defeat this. So does the PCRE optimization unless we disable it
+with \Y. ---/
+
+/(*COMMIT)ABC/
+ ABCDEFG
+ 0: ABC
+ ** Failers
+No match
+ DEFGABC\Y
+No match
+
+/^(ab (c+(*THEN)cd) | xyz)/x
+ abcccd
+No match
+
+/^(ab (c+(*PRUNE)cd) | xyz)/x
+ abcccd
+No match
+
+/^(ab (c+(*FAIL)cd) | xyz)/x
+ abcccd
+No match
+
+/--- Perl gets some of these wrong ---/
+
+/(?>.(*ACCEPT))*?5/
+ abcde
+ 0: a
+
+/(.(*ACCEPT))*?5/
+ abcde
+ 0: a
+ 1: a
+
+/(.(*ACCEPT))5/
+ abcde
+ 0: a
+ 1: a
+
+/(.(*ACCEPT))*5/
+ abcde
+ 0: a
+ 1: a
+
+/A\NB./BZ
+------------------------------------------------------------------
+ Bra
+ A
+ Any
+ B
+ Any
+ Ket
+ End
+------------------------------------------------------------------
+ ACBD
+ 0: ACBD
+ *** Failers
+No match
+ A\nB
+No match
+ ACB\n
+No match
+
+/A\NB./sBZ
+------------------------------------------------------------------
+ Bra
+ A
+ Any
+ B
+ AllAny
+ Ket
+ End
+------------------------------------------------------------------
+ ACBD
+ 0: ACBD
+ ACB\n
+ 0: ACB\x0a
+ *** Failers
+No match
+ A\nB
+No match
+
+/A\NB/<crlf>
+ A\nB
+ 0: A\x0aB
+ A\rB
+ 0: A\x0dB
+ ** Failers
+No match
+ A\r\nB
+No match
+
+/\R+b/BZ
+------------------------------------------------------------------
+ Bra
+ \R++
+ b
+ Ket
+ End
+------------------------------------------------------------------
+
+/\R+\n/BZ
+------------------------------------------------------------------
+ Bra
+ \R+
+ \x0a
+ Ket
+ End
+------------------------------------------------------------------
+
+/\R+\d/BZ
+------------------------------------------------------------------
+ Bra
+ \R++
+ \d
+ Ket
+ End
+------------------------------------------------------------------
+
+/\d*\R/BZ
+------------------------------------------------------------------
+ Bra
+ \d*+
+ \R
+ Ket
+ End
+------------------------------------------------------------------
+
+/\s*\R/BZ
+------------------------------------------------------------------
+ Bra
+ \s*
+ \R
+ Ket
+ End
+------------------------------------------------------------------
+ \x20\x0a
+ 0: \x0a
+ \x20\x0d
+ 0: \x0d
+ \x20\x0d\x0a
+ 0: \x0d\x0a
+
+/\S*\R/BZ
+------------------------------------------------------------------
+ Bra
+ \S*+
+ \R
+ Ket
+ End
+------------------------------------------------------------------
+ a\x0a
+ 0: a\x0a
+
+/X\h*\R/BZ
+------------------------------------------------------------------
+ Bra
+ X
+ \h*+
+ \R
+ Ket
+ End
+------------------------------------------------------------------
+ X\x20\x0a
+ 0: X \x0a
+
+/X\H*\R/BZ
+------------------------------------------------------------------
+ Bra
+ X
+ \H*
+ \R
+ Ket
+ End
+------------------------------------------------------------------
+ X\x0d\x0a
+ 0: X\x0d\x0a
+
+/X\H+\R/BZ
+------------------------------------------------------------------
+ Bra
+ X
+ \H+
+ \R
+ Ket
+ End
+------------------------------------------------------------------
+ X\x0d\x0a
+ 0: X\x0d\x0a
+
+/X\H++\R/BZ
+------------------------------------------------------------------
+ Bra
+ X
+ \H++
+ \R
+ Ket
+ End
+------------------------------------------------------------------
+ X\x0d\x0a
+No match
+
+/(?<=abc)def/
+ abc\P\P
+Partial match at offset 3: abc
+
+/abc$/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc$/m
+ abc
+ 0: abc
+ abc\n
+ 0: abc
+ abc\P\P
+Partial match: abc
+ abc\n\P\P
+ 0: abc
+ abc\P
+ 0: abc
+ abc\n\P
+ 0: abc
+
+/abc\z/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc\Z/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc\b/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc\B/
+ abc
+No match
+ abc\P
+Partial match: abc
+ abc\P\P
+Partial match: abc
+
+/.+/
+ abc\>0
+ 0: abc
+ abc\>1
+ 0: bc
+ abc\>2
+ 0: c
+ abc\>3
+No match
+ abc\>4
+Error -24 (bad offset value)
+ abc\>-4
+Error -24 (bad offset value)
+
+/^\cģ/
+Failed: \c must be followed by an ASCII character at offset 3
+
+/(?P<abn>(?P=abn)xxx)/BZ
+------------------------------------------------------------------
+ Bra
+ Once
+ CBra 1
+ \1
+ xxx
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/(a\1z)/BZ
+------------------------------------------------------------------
+ Bra
+ Once
+ CBra 1
+ a
+ \1
+ z
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?P<abn>(?P=abn)(?<badstufxxx)/BZ
+Failed: syntax error in subpattern name (missing terminator) at offset 29
+
+/(?P<abn>(?P=axn)xxx)/BZ
+Failed: reference to non-existent subpattern at offset 15
+
+/(?P<abn>(?P=axn)xxx)(?<axn>yy)/BZ
+------------------------------------------------------------------
+ Bra
+ CBra 1
+ \2
+ xxx
+ Ket
+ CBra 2
+ yy
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/-- These tests are here because Perl gets the first one wrong. --/
+
+/(\R*)(.)/s
+ \r\n
+ 0: \x0d
+ 1:
+ 2: \x0d
+ \r\r\n\n\r
+ 0: \x0d\x0d\x0a\x0a\x0d
+ 1: \x0d\x0d\x0a\x0a
+ 2: \x0d
+ \r\r\n\n\r\n
+ 0: \x0d\x0d\x0a\x0a\x0d
+ 1: \x0d\x0d\x0a\x0a
+ 2: \x0d
+
+/(\R)*(.)/s
+ \r\n
+ 0: \x0d
+ 1: <unset>
+ 2: \x0d
+ \r\r\n\n\r
+ 0: \x0d\x0d\x0a\x0a\x0d
+ 1: \x0a
+ 2: \x0d
+ \r\r\n\n\r\n
+ 0: \x0d\x0d\x0a\x0a\x0d
+ 1: \x0a
+ 2: \x0d
+
+/((?>\r\n|\n|\x0b|\f|\r|\x85)*)(.)/s
+ \r\n
+ 0: \x0d
+ 1:
+ 2: \x0d
+ \r\r\n\n\r
+ 0: \x0d\x0d\x0a\x0a\x0d
+ 1: \x0d\x0d\x0a\x0a
+ 2: \x0d
+ \r\r\n\n\r\n
+ 0: \x0d\x0d\x0a\x0a\x0d
+ 1: \x0d\x0d\x0a\x0a
+ 2: \x0d
+
+/-- --/
+
+/^abc$/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ abc
+ $
+ Ket
+ End
+------------------------------------------------------------------
+
+/^abc$/BZm
+------------------------------------------------------------------
+ Bra
+ /m ^
+ abc
+ /m $
+ Ket
+ End
+------------------------------------------------------------------
+
+/^(a)*+(\w)/S
+ aaaaX
+ 0: aaaaX
+ 1: a
+ 2: X
+ ** Failers
+No match
+ aaaa
+No match
+
+/^(?:a)*+(\w)/S
+ aaaaX
+ 0: aaaaX
+ 1: X
+ ** Failers
+No match
+ aaaa
+No match
+
+/(a)++1234/SDZ
+------------------------------------------------------------------
+ Bra
+ CBraPos 1
+ a
+ KetRpos
+ 1234
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+No options
+First char = 'a'
+Need char = '4'
+Subject length lower bound = 5
+No set of starting bytes
+
+/([abc])++1234/SI
+Capturing subpattern count = 1
+No options
+No first char
+Need char = '4'
+Subject length lower bound = 5
+Starting byte set: a b c
+
+/(?<=(abc)+)X/
+Failed: lookbehind assertion is not fixed length at offset 10
+
+/(^ab)/I
+Capturing subpattern count = 1
+Options: anchored
+No first char
+No need char
+
+/(^ab)++/I
+Capturing subpattern count = 1
+Options: anchored
+No first char
+No need char
+
+/(^ab|^)+/I
+Capturing subpattern count = 1
+Options: anchored
+No first char
+No need char
+
+/(^ab|^)++/I
+Capturing subpattern count = 1
+Options: anchored
+No first char
+No need char
+
+/(?:^ab)/I
+Capturing subpattern count = 0
+Options: anchored
+No first char
+No need char
+
+/(?:^ab)++/I
+Capturing subpattern count = 0
+Options: anchored
+No first char
+No need char
+
+/(?:^ab|^)+/I
+Capturing subpattern count = 0
+Options: anchored
+No first char
+No need char
+
+/(?:^ab|^)++/I
+Capturing subpattern count = 0
+Options: anchored
+No first char
+No need char
+
+/(.*ab)/I
+Capturing subpattern count = 1
+No options
+First char at start or follows newline
+Need char = 'b'
+
+/(.*ab)++/I
+Capturing subpattern count = 1
+No options
+First char at start or follows newline
+Need char = 'b'
+
+/(.*ab|.*)+/I
+Capturing subpattern count = 1
+No options
+First char at start or follows newline
+No need char
+
+/(.*ab|.*)++/I
+Capturing subpattern count = 1
+No options
+First char at start or follows newline
+No need char
+
+/(?:.*ab)/I
+Capturing subpattern count = 0
+No options
+First char at start or follows newline
+Need char = 'b'
+
+/(?:.*ab)++/I
+Capturing subpattern count = 0
+No options
+First char at start or follows newline
+Need char = 'b'
+
+/(?:.*ab|.*)+/I
+Capturing subpattern count = 0
+No options
+First char at start or follows newline
+No need char
+
+/(?:.*ab|.*)++/I
+Capturing subpattern count = 0
+No options
+First char at start or follows newline
+No need char
+
+/(?=a)[bcd]/I
+Capturing subpattern count = 0
+No options
+First char = 'a'
+No need char
+
+/((?=a))[bcd]/I
+Capturing subpattern count = 1
+No options
+First char = 'a'
+No need char
+
+/((?=a))+[bcd]/I
+Capturing subpattern count = 1
+No options
+First char = 'a'
+No need char
+
+/((?=a))++[bcd]/I
+Capturing subpattern count = 1
+No options
+First char = 'a'
+No need char
+
+/(?=a+)[bcd]/iI
+Capturing subpattern count = 0
+Options: caseless
+First char = 'a' (caseless)
+No need char
+
+/(?=a+?)[bcd]/iI
+Capturing subpattern count = 0
+Options: caseless
+First char = 'a' (caseless)
+No need char
+
+/(?=a++)[bcd]/iI
+Capturing subpattern count = 0
+Options: caseless
+First char = 'a' (caseless)
+No need char
+
+/(?=a{3})[bcd]/iI
+Capturing subpattern count = 0
+Options: caseless
+First char = 'a' (caseless)
+Need char = 'a' (caseless)
+
+/(abc)\1+/S
+
+/-- Perl doesn't get these right IMO (the 3rd is PCRE-specific) --/
+
+/(?1)(?:(b(*ACCEPT))){0}/
+ b
+ 0: b
+
+/(?1)(?:(b(*ACCEPT))){0}c/
+ bc
+ 0: bc
+ ** Failers
+No match
+ b
+No match
+
+/(?1)(?:((*ACCEPT))){0}c/
+ c
+ 0: c
+ c\N
+ 0: c
+
+/^.*?(?(?=a)a|b(*THEN)c)/
+ ba
+No match
+
+/^.*?(?(?=a)a|bc)/
+ ba
+ 0: ba
+
+/^.*?(?(?=a)a(*THEN)b|c)/
+ ac
+No match
+
+/^.*?(?(?=a)a(*THEN)b)c/
+ ac
+No match
+
+/^.*?(a(*THEN)b)c/
+ aabc
+No match
+
+/^.*? (?1) c (?(DEFINE)(a(*THEN)b))/x
+ aabc
+ 0: aabc
+
+/^.*?(a(*THEN)b|z)c/
+ aabc
+ 0: aabc
+ 1: ab
+
+/^.*?(z|a(*THEN)b)c/
+ aabc
+ 0: aabc
+ 1: ab
+
+/-- --/
+
+/-- These studied versions are here because they are not Perl-compatible; the
+ studying means the mark is not seen. --/
+
+/(*MARK:A)(*SKIP:B)(C|X)/KS
+ C
+ 0: C
+ 1: C
+MK: A
+ D
+No match, mark = A
+
+/(*:A)A+(*SKIP:A)(B|Z)/KS
+ AAAC
+No match, mark = A
+
+/-- --/
+
+"(?=a*(*ACCEPT)b)c"
+ c
+ 0: c
+ c\N
+ 0: c
+
+/(?1)c(?(DEFINE)((*ACCEPT)b))/
+ c
+ 0: c
+ c\N
+ 0: c
+
+/(?>(*ACCEPT)b)c/
+ c
+ 0:
+ c\N
+No match
+
+/(?:(?>(a)))+a%/++
+ %aa%
+ 0: aa%
+ 0+
+ 1: a
+ 1+ a%
+
+/(a)b|ac/++SS
+ ac\O3
+ 0: ac
+ 0+
+
+/(a)(b)x|abc/++
+ abc\O6
+ 0: abc
+ 0+
+
+/(a)bc|(a)(b)\2/
+ \O3abc
+Matched, but too many substrings
+ 0: abc
+ \O4abc
+Matched, but too many substrings
+ 0: abc
+
+/(?(DEFINE)(a(?2)|b)(b(?1)|a))(?:(?1)|(?2))/SI
+Capturing subpattern count = 2
+No options
+No first char
+No need char
+Subject length lower bound = 1
+No set of starting bytes
+
+/(a(?2)|b)(b(?1)|a)(?:(?1)|(?2))/SI
+Capturing subpattern count = 2
+No options
+No first char
+No need char
+Subject length lower bound = 3
+Starting byte set: a b
+
+/(a(?2)|b)(b(?1)|a)(?1)(?2)/SI
+Capturing subpattern count = 2
+No options
+No first char
+No need char
+Subject length lower bound = 4
+Starting byte set: a b
+
+/(abc)(?1)/SI
+Capturing subpattern count = 1
+No options
+First char = 'a'
+Need char = 'c'
+Subject length lower bound = 6
+No set of starting bytes
+
+/^(?>a)++/
+ aa\M
+Minimum match() limit = 5
+Minimum match() recursion limit = 2
+ 0: aa
+ aaaaaaaaa\M
+Minimum match() limit = 12
+Minimum match() recursion limit = 2
+ 0: aaaaaaaaa
+
+/(a)(?1)++/
+ aa\M
+Minimum match() limit = 7
+Minimum match() recursion limit = 4
+ 0: aa
+ 1: a
+ aaaaaaaaa\M
+Minimum match() limit = 21
+Minimum match() recursion limit = 4
+ 0: aaaaaaaaa
+ 1: a
+
+/(?:(foo)|(bar)|(baz))X/SS=
+ bazfooX
+ 0: fooX
+ 1: foo
+ 2: <unset>
+ 3: <unset>
+ foobazbarX
+ 0: barX
+ 1: <unset>
+ 2: bar
+ 3: <unset>
+ barfooX
+ 0: fooX
+ 1: foo
+ 2: <unset>
+ 3: <unset>
+ bazX
+ 0: bazX
+ 1: <unset>
+ 2: <unset>
+ 3: baz
+ foobarbazX
+ 0: bazX
+ 1: <unset>
+ 2: <unset>
+ 3: baz
+ bazfooX\O0
+Matched, but too many substrings
+ bazfooX\O2
+Matched, but too many substrings
+ 0: fooX
+ bazfooX\O4
+Matched, but too many substrings
+ 0: fooX
+ 1: <unset>
+ bazfooX\O6
+Matched, but too many substrings
+ 0: fooX
+ 1: foo
+ 2: <unset>
+ bazfooX\O8
+Matched, but too many substrings
+ 0: fooX
+ 1: foo
+ 2: <unset>
+ 3: <unset>
+ bazfooX\O10
+ 0: fooX
+ 1: foo
+ 2: <unset>
+ 3: <unset>
+
+/(?=abc){3}abc/BZ
+------------------------------------------------------------------
+ Bra
+ Assert
+ abc
+ Ket
+ abc
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?=abc)+abc/BZ
+------------------------------------------------------------------
+ Bra
+ Assert
+ abc
+ Ket
+ abc
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?=abc)++abc/BZ
+------------------------------------------------------------------
+ Bra
+ Assert
+ abc
+ Ket
+ abc
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?=abc){0}xyz/BZ
+------------------------------------------------------------------
+ Bra
+ Skip zero
+ Assert
+ abc
+ Ket
+ xyz
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?=(a))?./BZ
+------------------------------------------------------------------
+ Bra
+ Brazero
+ Assert
+ CBra 1
+ a
+ Ket
+ Ket
+ Any
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?=(a))??./BZ
+------------------------------------------------------------------
+ Bra
+ Braminzero
+ Assert
+ CBra 1
+ a
+ Ket
+ Ket
+ Any
+ Ket
+ End
+------------------------------------------------------------------
+
+/^(?=(a)){0}b(?1)/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ Skip zero
+ Assert
+ CBra 1
+ a
+ Ket
+ Ket
+ b
+ Recurse
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?(DEFINE)(a))?b(?1)/BZ
+------------------------------------------------------------------
+ Bra
+ Cond
+ Cond def
+ CBra 1
+ a
+ Ket
+ Ket
+ b
+ Recurse
+ Ket
+ End
+------------------------------------------------------------------
+
+/^(?=(?1))?[az]([abc])d/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ Brazero
+ Assert
+ Recurse
+ Ket
+ [az]
+ CBra 1
+ [a-c]
+ Ket
+ d
+ Ket
+ End
+------------------------------------------------------------------
+
+/^(?!a){0}\w+/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ Skip zero
+ Assert not
+ a
+ Ket
+ \w+
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?<=(abc))?xyz/BZ
+------------------------------------------------------------------
+ Bra
+ Brazero
+ AssertB
+ Reverse
+ CBra 1
+ abc
+ Ket
+ Ket
+ xyz
+ Ket
+ End
+------------------------------------------------------------------
+
+/[:a[:abc]b:]/BZ
+------------------------------------------------------------------
+ Bra
+ [:[a-c]
+ b:]
+ Ket
+ End
+------------------------------------------------------------------
+
+/((?2))((?1))/SS
+ abc
+Error -26 (nested recursion at the same subject position)
+
+/((?(R2)a+|(?1)b))/SS
+ aaaabcde
+Error -26 (nested recursion at the same subject position)
+
+/(?(R)a*(?1)|((?R))b)/SS
+ aaaabcde
+Error -26 (nested recursion at the same subject position)
+
+/(a+|(?R)b)/
+Failed: recursive call could loop indefinitely at offset 7
+
+/^(a(*:A)(d|e(*:B))z|aeq)/C
+ adz
+--->adz
+ +0 ^ ^
+ +1 ^ (a(*:A)(d|e(*:B))z|aeq)
+ +2 ^ a
+ +3 ^^ (*:A)
+ +8 ^^ (d|e(*:B))
+Latest Mark: A
+ +9 ^^ d
++10 ^ ^ |
++18 ^ ^ z
++19 ^ ^ |
++24 ^ ^
+ 0: adz
+ 1: adz
+ 2: d
+ aez
+--->aez
+ +0 ^ ^
+ +1 ^ (a(*:A)(d|e(*:B))z|aeq)
+ +2 ^ a
+ +3 ^^ (*:A)
+ +8 ^^ (d|e(*:B))
+Latest Mark: A
+ +9 ^^ d
++11 ^^ e
++12 ^ ^ (*:B)
++17 ^ ^ )
+Latest Mark: B
++18 ^ ^ z
++19 ^ ^ |
++24 ^ ^
+ 0: aez
+ 1: aez
+ 2: e
+ aeqwerty
+--->aeqwerty
+ +0 ^ ^
+ +1 ^ (a(*:A)(d|e(*:B))z|aeq)
+ +2 ^ a
+ +3 ^^ (*:A)
+ +8 ^^ (d|e(*:B))
+Latest Mark: A
+ +9 ^^ d
++11 ^^ e
++12 ^ ^ (*:B)
++17 ^ ^ )
+Latest Mark: B
++18 ^ ^ z
++20 ^ a
++21 ^^ e
++22 ^ ^ q
++23 ^ ^ )
++24 ^ ^
+ 0: aeq
+ 1: aeq
+
+/.(*F)/
+ \P\Pabc
+No match
+
+/\btype\b\W*?\btext\b\W*?\bjavascript\b/IS
+Capturing subpattern count = 0
+Max lookbehind = 1
+No options
+First char = 't'
+Need char = 't'
+Subject length lower bound = 18
+No set of starting bytes
+
+/\btype\b\W*?\btext\b\W*?\bjavascript\b|\burl\b\W*?\bshell:|<input\b.*?\btype\b\W*?\bimage\b|\bonkeyup\b\W*?\=/IS
+Capturing subpattern count = 0
+Max lookbehind = 1
+No options
+No first char
+No need char
+Subject length lower bound = 8
+Starting byte set: < o t u
+
+/a(*SKIP)c|b(*ACCEPT)|/+S!I
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+Subject length lower bound = -1
+No set of starting bytes
+ a
+ 0:
+ 0+
+
+/a(*SKIP)c|b(*ACCEPT)cd(*ACCEPT)|x/SI
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+Subject length lower bound = -1
+Starting byte set: a b x
+ ax
+ 0: x
+
+'a*(*ACCEPT)b'+
+ \N\N
+No match
+ abc\N\N
+ 0: a
+ 0+ bc
+ bbb\N\N
+ 0:
+ 0+ bb
+
+/(*ACCEPT)a/+I
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+ bax
+ 0:
+ 0+ bax
+
+/z(*ACCEPT)a/+I
+Capturing subpattern count = 0
+No options
+First char = 'z'
+No need char
+ baxzbx
+ 0: z
+ 0+ bx
+
+/a(?:.)*?a/ims
+ \Mabbbbbbbbbbbbbbbbbbbbba
+Minimum match() limit = 65
+Minimum match() recursion limit = 2
+ 0: abbbbbbbbbbbbbbbbbbbbba
+
+/a(?:.(*THEN))*?a/ims
+ \Mabbbbbbbbbbbbbbbbbbbbba
+Minimum match() limit = 86
+Minimum match() recursion limit = 45
+ 0: abbbbbbbbbbbbbbbbbbbbba
+
+/a(?:.(*THEN:ABC))*?a/ims
+ \Mabbbbbbbbbbbbbbbbbbbbba
+Minimum match() limit = 86
+Minimum match() recursion limit = 45
+ 0: abbbbbbbbbbbbbbbbbbbbba
+
+/^(?>a+)(?>(z+))\w/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ Once_NC
+ a+
+ Ket
+ Once
+ CBra 1
+ z+
+ Ket
+ Ket
+ \w
+ Ket
+ End
+------------------------------------------------------------------
+ aaaazzzzb
+ 0: aaaazzzzb
+ 1: zzzz
+ ** Failers
+No match
+ aazz
+No match
+
+/(.)(\1|a(?2))/
+ bab
+ 0: bab
+ 1: b
+ 2: ab
+
+/\1|(.)(?R)\1/
+ cbbbc
+ 0: cbbbc
+ 1: c
+
+/(.)((?(1)c|a)|a(?2))/
+ baa
+No match
+
+/(?P<abn>(?P=abn)xxx)/BZ
+------------------------------------------------------------------
+ Bra
+ Once
+ CBra 1
+ \1
+ xxx
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/(a\1z)/BZ
+------------------------------------------------------------------
+ Bra
+ Once
+ CBra 1
+ a
+ \1
+ z
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
+ \Maabbccddee
+Minimum match() limit = 12
+Minimum match() recursion limit = 3
+ 0: aabbccddee
+
+/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
+ \Maabbccddee
+Minimum match() limit = 22
+Minimum match() recursion limit = 21
+ 0: aabbccddee
+ 1: aa
+ 2: bb
+ 3: cc
+ 4: dd
+ 5: ee
+
+/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
+ \Maabbccddee
+Minimum match() limit = 18
+Minimum match() recursion limit = 13
+ 0: aabbccddee
+ 1: aa
+ 2: cc
+ 3: ee
+
+/^a\x41z/<JS>
+ aAz
+ 0: aAz
+ *** Failers
+No match
+ ax41z
+No match
+
+/^a[m\x41]z/<JS>
+ aAz
+ 0: aAz
+
+/^a\x1z/<JS>
+ ax1z
+ 0: ax1z
+
+/^a\u0041z/<JS>
+ aAz
+ 0: aAz
+ *** Failers
+No match
+ au0041z
+No match
+
+/^a[m\u0041]z/<JS>
+ aAz
+ 0: aAz
+
+/^a\u041z/<JS>
+ au041z
+ 0: au041z
+ *** Failers
+No match
+ aAz
+No match
+
+/^a\U0041z/<JS>
+ aU0041z
+ 0: aU0041z
+ *** Failers
+No match
+ aAz
+No match
+
+/(?(?=c)c|d)++Y/BZ
+------------------------------------------------------------------
+ Bra
+ BraPos
+ Cond
+ Assert
+ c
+ Ket
+ c
+ Alt
+ d
+ Ket
+ KetRpos
+ Y
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?(?=c)c|d)*+Y/BZ
+------------------------------------------------------------------
+ Bra
+ Braposzero
+ BraPos
+ Cond
+ Assert
+ c
+ Ket
+ c
+ Alt
+ d
+ Ket
+ KetRpos
+ Y
+ Ket
+ End
+------------------------------------------------------------------
+
+/a[\NB]c/
+Failed: \N is not supported in a class at offset 3
+
+/a[B-\Nc]/
+Failed: \N is not supported in a class at offset 5
+
+/(a)(?2){0,1999}?(b)/
+
+/(a)(?(DEFINE)(b))(?2){0,1999}?(?2)/
+
+/--- This test, with something more complicated than individual letters, causes
+different behaviour in Perl. Perhaps it disables some optimization; no tag is
+passed back for the failures, whereas in PCRE there is a tag. ---/
+
+/(A|P)(*:A)(B|P) | (X|P)(X|P)(*:B)(Y|P)/xK
+ AABC
+ 0: AB
+ 1: A
+ 2: B
+MK: A
+ XXYZ
+ 0: XXY
+ 1: <unset>
+ 2: <unset>
+ 3: X
+ 4: X
+ 5: Y
+MK: B
+ ** Failers
+No match
+ XAQQ
+No match, mark = A
+ XAQQXZZ
+No match, mark = A
+ AXQQQ
+No match, mark = A
+ AXXQQQ
+No match, mark = B
+
+/-- Perl doesn't give marks for these, though it does if the alternatives are
+replaced by single letters. --/
+
+/(b|q)(*:m)f|a(*:n)w/K
+ aw
+ 0: aw
+MK: n
+ ** Failers
+No match, mark = n
+ abc
+No match, mark = m
+
+/(q|b)(*:m)f|a(*:n)w/K
+ aw
+ 0: aw
+MK: n
+ ** Failers
+No match, mark = n
+ abc
+No match, mark = m
+
+/-- After a partial match, the behaviour is as for a failure. --/
+
+/^a(*:X)bcde/K
+ abc\P
+Partial match, mark=X: abc
+
+/-- These are here because Perl doesn't return a mark, except for the first --/
+
+/(?=(*:x))(q|)/K+
+ abc
+ 0:
+ 0+ abc
+ 1:
+MK: x
+
+/(?=(*:x))((*:y)q|)/K+
+ abc
+ 0:
+ 0+ abc
+ 1:
+MK: x
+
+/(?=(*:x))(?:(*:y)q|)/K+
+ abc
+ 0:
+ 0+ abc
+MK: x
+
+/(?=(*:x))(?>(*:y)q|)/K+
+ abc
+ 0:
+ 0+ abc
+MK: x
+
+/(?=a(*:x))(?!a(*:y)c)/K+
+ ab
+ 0:
+ 0+ ab
+MK: x
+
+/(?=a(*:x))(?=a(*:y)c|)/K+
+ ab
+ 0:
+ 0+ ab
+MK: x
+
+/(..)\1/
+ ab\P
+Partial match: ab
+ aba\P
+Partial match: aba
+ abab\P
+ 0: abab
+ 1: ab
+
+/(..)\1/i
+ ab\P
+Partial match: ab
+ abA\P
+Partial match: abA
+ aBAb\P
+ 0: aBAb
+ 1: aB
+
+/(..)\1{2,}/
+ ab\P
+Partial match: ab
+ aba\P
+Partial match: aba
+ abab\P
+Partial match: abab
+ ababa\P
+Partial match: ababa
+ ababab\P
+ 0: ababab
+ 1: ab
+ ababab\P\P
+Partial match: ababab
+ abababa\P
+ 0: ababab
+ 1: ab
+ abababa\P\P
+Partial match: abababa
+
+/(..)\1{2,}/i
+ ab\P
+Partial match: ab
+ aBa\P
+Partial match: aBa
+ aBAb\P
+Partial match: aBAb
+ AbaBA\P
+Partial match: AbaBA
+ abABAb\P
+ 0: abABAb
+ 1: ab
+ aBAbaB\P\P
+Partial match: aBAbaB
+ abABabA\P
+ 0: abABab
+ 1: ab
+ abaBABa\P\P
+Partial match: abaBABa
+
+/(..)\1{2,}?x/i
+ ab\P
+Partial match: ab
+ abA\P
+Partial match: abA
+ aBAb\P
+Partial match: aBAb
+ abaBA\P
+Partial match: abaBA
+ abAbaB\P
+Partial match: abAbaB
+ abaBabA\P
+Partial match: abaBabA
+ abAbABaBx\P
+ 0: abAbABaBx
+ 1: ab
+
+/^(..)\1/
+ aba\P
+Partial match: aba
+
+/^(..)\1{2,3}x/
+ aba\P
+Partial match: aba
+ ababa\P
+Partial match: ababa
+ ababa\P\P
+Partial match: ababa
+ abababx
+ 0: abababx
+ 1: ab
+ ababababx
+ 0: ababababx
+ 1: ab
+
+/^(..)\1{2,3}?x/
+ aba\P
+Partial match: aba
+ ababa\P
+Partial match: ababa
+ ababa\P\P
+Partial match: ababa
+ abababx
+ 0: abababx
+ 1: ab
+ ababababx
+ 0: ababababx
+ 1: ab
+
+/^(..)(\1{2,3})ab/
+ abababab
+ 0: abababab
+ 1: ab
+ 2: abab
+
+/^\R/
+ \r\P
+ 0: \x0d
+ \r\P\P
+Partial match: \x0d
+
+/^\R{2,3}x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+Partial match: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+Partial match: \x0d\x0d\x0d
+ \r\r\r\P\P
+Partial match: \x0d\x0d\x0d
+ \r\rx
+ 0: \x0d\x0dx
+ \r\r\rx
+ 0: \x0d\x0d\x0dx
+
+/^\R{2,3}?x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+Partial match: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+Partial match: \x0d\x0d\x0d
+ \r\r\r\P\P
+Partial match: \x0d\x0d\x0d
+ \r\rx
+ 0: \x0d\x0dx
+ \r\r\rx
+ 0: \x0d\x0d\x0dx
+
+/^\R?x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ x
+ 0: x
+ \rx
+ 0: \x0dx
+
+/^\R+x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\n\P
+Partial match: \x0d\x0a
+ \r\n\P\P
+Partial match: \x0d\x0a
+ \rx
+ 0: \x0dx
+
+/^a$/<CRLF>
+ a\r\P
+Partial match: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/^a$/m<CRLF>
+ a\r\P
+Partial match: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/^(a$|a\r)/<CRLF>
+ a\r\P
+ 0: a\x0d
+ 1: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/^(a$|a\r)/m<CRLF>
+ a\r\P
+ 0: a\x0d
+ 1: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/./<CRLF>
+ \r\P
+ 0: \x0d
+ \r\P\P
+Partial match: \x0d
+
+/.{2,3}/<CRLF>
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+ 0: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+ 0: \x0d\x0d\x0d
+ \r\r\r\P\P
+Partial match: \x0d\x0d\x0d
+
+/.{2,3}?/<CRLF>
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+ 0: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+ 0: \x0d\x0d
+ \r\r\r\P\P
+ 0: \x0d\x0d
+
+"AB(C(D))(E(F))?(?(?=\2)(?=\4))"
+ ABCDGHI\O03
+Matched, but too many substrings
+ 0: ABCD
+
+/-- These are all run as real matches in test 1; here we are just checking the
+settings of the anchored and startline bits. --/
+
+/(?>.*?a)(?<=ba)/I
+Capturing subpattern count = 0
+Max lookbehind = 2
+No options
+No first char
+Need char = 'a'
+
+/(?:.*?a)(?<=ba)/I
+Capturing subpattern count = 0
+Max lookbehind = 2
+No options
+First char at start or follows newline
+Need char = 'a'
+
+/.*?a(*PRUNE)b/I
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'b'
+
+/.*?a(*PRUNE)b/sI
+Capturing subpattern count = 0
+Options: dotall
+No first char
+Need char = 'b'
+
+/^a(*PRUNE)b/sI
+Capturing subpattern count = 0
+Options: anchored dotall
+No first char
+No need char
+
+/.*?a(*SKIP)b/I
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'b'
+
+/(?>.*?a)b/sI
+Capturing subpattern count = 0
+Options: dotall
+No first char
+Need char = 'b'
+
+/(?>.*?a)b/I
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'b'
+
+/(?>^a)b/sI
+Capturing subpattern count = 0
+Options: anchored dotall
+No first char
+No need char
+
+/(?>.*?)(?<=(abcd)|(wxyz))/I
+Capturing subpattern count = 2
+Max lookbehind = 4
+No options
+No first char
+No need char
+
+/(?>.*)(?<=(abcd)|(wxyz))/I
+Capturing subpattern count = 2
+Max lookbehind = 4
+No options
+No first char
+No need char
+
+"(?>.*)foo"I
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'o'
+
+"(?>.*?)foo"I
+Capturing subpattern count = 0
+No options
+No first char
+Need char = 'o'
+
+/(?>^abc)/mI
+Capturing subpattern count = 0
+Options: multiline
+First char at start or follows newline
+Need char = 'c'
+
+/(?>.*abc)/mI
+Capturing subpattern count = 0
+Options: multiline
+No first char
+Need char = 'c'
+
+/(?:.*abc)/mI
+Capturing subpattern count = 0
+Options: multiline
+First char at start or follows newline
+Need char = 'c'
+
+/-- Check PCRE_STUDY_EXTRA_NEEDED --/
+
+/.?/S-I
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+Study returned NULL
+
+/.?/S!I
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+Subject length lower bound = -1
+No set of starting bytes
+
+/(?:(a)+(?C1)bb|aa(?C2)b)/
+ aab\C+
+Callout 1: last capture = 1
+ 0: <unset>
+ 1: a
+--->aab
+ ^ ^ b
+Callout 1: last capture = 1
+ 0: <unset>
+ 1: a
+--->aab
+ ^^ b
+Callout 2: last capture = -1
+ 0: <unset>
+--->aab
+ ^ ^ b
+ 0: aab
+
+/(?:(a)++(?C1)bb|aa(?C2)b)/
+ aab\C+
+Callout 1: last capture = 1
+ 0: <unset>
+ 1: a
+--->aab
+ ^ ^ b
+Callout 2: last capture = -1
+ 0: <unset>
+--->aab
+ ^ ^ b
+ 0: aab
+
+/(?:(?>(a))(?C1)bb|aa(?C2)b)/
+ aab\C+
+Callout 1: last capture = 1
+ 0: <unset>
+ 1: a
+--->aab
+ ^^ b
+Callout 2: last capture = -1
+ 0: <unset>
+--->aab
+ ^ ^ b
+ 0: aab
+
+/(?:(?1)(?C1)x|ab(?C2))((a)){0}/
+ aab\C+
+Callout 1: last capture = -1
+ 0: <unset>
+--->aab
+ ^^ x
+Callout 1: last capture = -1
+ 0: <unset>
+--->aab
+ ^^ x
+Callout 2: last capture = -1
+ 0: <unset>
+--->aab
+ ^ ^ )
+ 0: ab
+
+/(?1)(?C1)((a)(?C2)){0}/
+ aab\C+
+Callout 2: last capture = 2
+ 0: <unset>
+ 1: <unset>
+ 2: a
+--->aab
+ ^^ )
+Callout 1: last capture = -1
+ 0: <unset>
+--->aab
+ ^^ ((a)(?C2)){0}
+ 0: a
+
+/(?:(a)+(?C1)bb|aa(?C2)b)++/
+ aab\C+
+Callout 1: last capture = 1
+ 0: <unset>
+ 1: a
+--->aab
+ ^ ^ b
+Callout 1: last capture = 1
+ 0: <unset>
+ 1: a
+--->aab
+ ^^ b
+Callout 2: last capture = -1
+ 0: <unset>
+--->aab
+ ^ ^ b
+ 0: aab
+ aab\C+\O2
+Callout 1: last capture = 1
+ 0: <unset>
+--->aab
+ ^ ^ b
+Callout 1: last capture = 1
+ 0: <unset>
+--->aab
+ ^^ b
+Callout 2: last capture = -1
+ 0: <unset>
+--->aab
+ ^ ^ b
+ 0: aab
+
+/(ab)x|ab/
+ ab\O3
+ 0: ab
+ ab\O2
+ 0: ab
+
+/(ab)/
+ ab\O3
+Matched, but too many substrings
+ 0: ab
+ ab\O2
+Matched, but too many substrings
+ 0: ab
+
+/(?<=123)(*MARK:xx)abc/K
+ xxxx123a\P\P
+Partial match at offset 7, mark=xx: 123a
+ xxxx123a\P
+Partial match at offset 7, mark=xx: 123a
+
+/123\Kabc/
+ xxxx123a\P\P
+Partial match: 123a
+ xxxx123a\P
+Partial match: 123a
+
+/^(?(?=a)aa|bb)/C
+ bb
+--->bb
+ +0 ^ ^
+ +1 ^ (?(?=a)aa|bb)
+ +3 ^ (?=a)
+ +6 ^ a
++11 ^ b
++12 ^^ b
++13 ^ ^ )
++14 ^ ^
+ 0: bb
+
+/(?C1)^(?C2)(?(?C99)(?=(?C3)a(?C4))(?C5)a(?C6)a(?C7)|(?C8)b(?C9)b(?C10))(?C11)/
+ bb
+--->bb
+ 1 ^ ^
+ 2 ^ (?(?C99)(?=(?C3)a(?C4))(?C5)a(?C6)a(?C7)|(?C8)b(?C9)b(?C10))
+ 99 ^ (?=(?C3)a(?C4))
+ 3 ^ a
+ 8 ^ b
+ 9 ^^ b
+ 10 ^ ^ )
+ 11 ^ ^
+ 0: bb
+
+/-- Perl seems to have a bug with this one --/
+
+/aaaaa(*COMMIT)(*PRUNE)b|a+c/
+ aaaaaac
+ 0: aaaac
+
+/-- Here are some that Perl treats differently because of the way it handles
+backtracking verbs. --/
+
+ /(?!a(*COMMIT)b)ac|ad/
+ ac
+ 0: ac
+ ad
+ 0: ad
+
+/^(?!a(*THEN)b|ac)../
+ ac
+No match
+ ad
+ 0: ad
+
+/^(?=a(*THEN)b|ac)/
+ ac
+ 0:
+
+/\A.*?(?:a|b(*THEN)c)/
+ ba
+ 0: ba
+
+/\A.*?(?:a|b(*THEN)c)++/
+ ba
+ 0: ba
+
+/\A.*?(?:a|b(*THEN)c|d)/
+ ba
+ 0: ba
+
+/(?:(a(*MARK:X)a+(*SKIP:X)b)){0}(?:(?1)|aac)/
+ aac
+ 0: aac
+
+/\A.*?(a|b(*THEN)c)/
+ ba
+ 0: ba
+ 1: a
+
+/^(A(*THEN)B|A(*THEN)D)/
+ AD
+ 0: AD
+ 1: AD
+
+/(?!b(*THEN)a)bn|bnn/
+ bnn
+ 0: bn
+
+/(?(?=b(*SKIP)a)bn|bnn)/
+ bnn
+No match
+
+/(?=b(*THEN)a|)bn|bnn/
+ bnn
+ 0: bn
+
+/-------------------------/
+
+/(*LIMIT_MATCH=12bc)abc/
+Failed: (*VERB) not recognized or malformed at offset 7
+
+/(*LIMIT_MATCH=4294967290)abc/
+Failed: (*VERB) not recognized or malformed at offset 7
+
+/(*LIMIT_RECURSION=4294967280)abc/I
+Capturing subpattern count = 0
+Recursion limit = 4294967280
+No options
+First char = 'a'
+Need char = 'c'
+
+/(a+)*zz/
+ aaaaaaaaaaaaaz
+No match
+ aaaaaaaaaaaaaz\q3000
+Error -8 (match limit exceeded)
+
+/(a+)*zz/S-
+ aaaaaaaaaaaaaz\Q10
+Error -21 (recursion limit exceeded)
+
+/(*LIMIT_MATCH=3000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 3000
+No options
+No first char
+Need char = 'z'
+ aaaaaaaaaaaaaz
+Error -8 (match limit exceeded)
+ aaaaaaaaaaaaaz\q60000
+Error -8 (match limit exceeded)
+
+/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 3000
+No options
+No first char
+Need char = 'z'
+ aaaaaaaaaaaaaz
+Error -8 (match limit exceeded)
+
+/(*LIMIT_MATCH=60000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 60000
+No options
+No first char
+Need char = 'z'
+ aaaaaaaaaaaaaz
+No match
+ aaaaaaaaaaaaaz\q3000
+Error -8 (match limit exceeded)
+
+/(*LIMIT_RECURSION=10)(a+)*zz/IS-
+Capturing subpattern count = 1
+Recursion limit = 10
+No options
+No first char
+Need char = 'z'
+Subject length lower bound = 2
+Starting byte set: a z
+ aaaaaaaaaaaaaz
+Error -21 (recursion limit exceeded)
+ aaaaaaaaaaaaaz\Q1000
+Error -21 (recursion limit exceeded)
+
+/(*LIMIT_RECURSION=10)(*LIMIT_RECURSION=1000)(a+)*zz/IS-
+Capturing subpattern count = 1
+Recursion limit = 10
+No options
+No first char
+Need char = 'z'
+Subject length lower bound = 2
+Starting byte set: a z
+ aaaaaaaaaaaaaz
+Error -21 (recursion limit exceeded)
+
+/(*LIMIT_RECURSION=1000)(a+)*zz/IS-
+Capturing subpattern count = 1
+Recursion limit = 1000
+No options
+No first char
+Need char = 'z'
+Subject length lower bound = 2
+Starting byte set: a z
+ aaaaaaaaaaaaaz
+No match
+ aaaaaaaaaaaaaz\Q10
+Error -21 (recursion limit exceeded)
+
+/-- End of testinput2 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput3 b/lib/stdlib/test/re_SUITE_data/testoutput3
index 28b1c3aaaf..7b0a3e926e 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput3
+++ b/lib/stdlib/test/re_SUITE_data/testoutput3
@@ -1,3 +1,7 @@
+/-- This set of tests checks local-specific features, using the fr_FR locale.
+ It is not Perl-compatible. There is different version called wintestinput3
+ f or use on Windows, where the locale is called "french". --/
+
/^[\w]+/
*** Failers
No match
@@ -83,6 +87,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
@@ -91,6 +96,7 @@ Capturing subpattern count = 0
No options
No first char
No need char
+Subject length lower bound = 1
Starting byte set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
@@ -160,4 +166,4 @@ No options
No first char
No need char
-/ End of testinput3 /
+/-- End of testinput3 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput4 b/lib/stdlib/test/re_SUITE_data/testoutput4
index d87ea4bcc4..6694111fb5 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput4
+++ b/lib/stdlib/test/re_SUITE_data/testoutput4
@@ -1,9 +1,7 @@
-/-- Do not use the \x{} construct except with patterns that have the --/
-/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
-No match
-/-- that option is set. However, the latest Perls recognize them always. --/
-No match
-
+/-- This set of tests is for UTF support, excluding Unicode properties. It is
+ compatible with all versions of Perl >= 5.10 and both the 8-bit and 16-bit
+ PCRE libraries. --/
+
/a.b/8
acb
0: acb
@@ -258,46 +256,6 @@ No match
XYZ
No match
-/X(\C{3})/8
- X\x{1234}
- 0: X\x{1234}
- 1: \x{1234}
-
-/X(\C{4})/8
- X\x{1234}YZ
- 0: X\x{1234}Y
- 1: \x{1234}Y
-
-/X\C*/8
- XYZabcdce
- 0: XYZabcdce
-
-/X\C*?/8
- XYZabcde
- 0: X
-
-/X\C{3,5}/8
- Xabcdefg
- 0: Xabcde
- X\x{1234}
- 0: X\x{1234}
- X\x{1234}YZ
- 0: X\x{1234}YZ
- X\x{1234}\x{512}
- 0: X\x{1234}\x{512}
- X\x{1234}\x{512}YZ
- 0: X\x{1234}\x{512}
-
-/X\C{3,5}?/8
- Xabcdefg
- 0: Xabc
- X\x{1234}
- 0: X\x{1234}
- X\x{1234}YZ
- 0: X\x{1234}
- X\x{1234}\x{512}
- 0: X\x{1234}
-
/[^a]+/8g
bcd
0: bcd
@@ -794,22 +752,6 @@ No match
\x{200}X
No match
-/a\Cb/
- aXb
- 0: aXb
- a\nb
- 0: a\x0ab
-
-/a\Cb/8
- aXb
- 0: aXb
- a\nb
- 0: a\x{0a}b
- *** Failers
-No match
- a\x{100}b
-No match
-
/[z-\x{100}]/8i
z
0: z
@@ -1071,4 +1013,248 @@ No match
/[^ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉƊƋƎƏƐƑƓƔƖƗƘƜƝƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫϒϓϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸԀԂԄԆԈԊԌԎԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸἈἉἊἋἌἍἎἏἘἙἚἛἜἝἨἩἪἫἬἭἮἯἸἹἺἻἼἽἾἿὈὉὊὋὌὍὙὛὝὟὨὩὪὫὬὭὮὯᾸᾹᾺΆῈΈῊΉῘῙῚΊῨῩῪΎῬῸΌῺΏabcdefghijklmnopqrstuvwxyzªµºßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķĸĺļľŀłńņňʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżžſƀƃƅƈƌƍƒƕƙƚƛƞơƣƥƨƪƫƭưƴƶƹƺƽƾƿdžljnjǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳȴȵȶȷȸȹȼȿɀɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϐϑϕϖϗϙϛϝϟϡϣϥϧϩϫϭϯϰϱϲϳϵϸϻϼабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹԁԃԅԇԉԋԍԏաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆևᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵹᵺᵻᵼᵽᵾᵿᶀᶁᶂᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌᶍᶎᶏᶐᶑᶒᶓᶔᶕᶖᶗᶘᶙᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚẛạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹἀἁἂἃἄἅἆἇἐἑἒἓἔἕἠἡἢἣἤἥἦἧἰἱἲἳἴἵἶἷὀὁὂὃὄὅὐὑὒὓὔὕὖὗὠὡὢὣὤὥὦὧὰάὲέὴήὶίὸόὺύὼώᾀᾁᾂᾃᾄᾅᾆᾇᾐᾑᾒᾓᾔᾕᾖᾗᾠᾡᾢᾣᾤᾥᾦᾧᾰᾱᾲᾳᾴᾶᾷιῂῃῄῆῇῐῑῒΐῖῗῠῡῢΰῤῥῦῧῲῳῴῶῷⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⴀⴁⴂⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌⴍⴎⴏⴐⴑⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜⴝⴞⴟⴠⴡⴢⴣⴤⴥfffiflffifflſtstﬓﬔﬕﬖﬗ\d-_^]/8
-/ End of testinput4 /
+/^[^d]*?$/
+ abc
+ 0: abc
+
+/^[^d]*?$/8
+ abc
+ 0: abc
+
+/^[^d]*?$/i
+ abc
+ 0: abc
+
+/^[^d]*?$/8i
+ abc
+ 0: abc
+
+/(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]/8
+
+/^[a\x{c0}]b/8
+ \x{c0}b
+ 0: \x{c0}b
+
+/^([a\x{c0}]*?)aa/8
+ a\x{c0}aaaa/
+ 0: a\x{c0}aa
+ 1: a\x{c0}
+
+/^([a\x{c0}]*?)aa/8
+ a\x{c0}aaaa/
+ 0: a\x{c0}aa
+ 1: a\x{c0}
+ a\x{c0}a\x{c0}aaa/
+ 0: a\x{c0}a\x{c0}aa
+ 1: a\x{c0}a\x{c0}
+
+/^([a\x{c0}]*)aa/8
+ a\x{c0}aaaa/
+ 0: a\x{c0}aaaa
+ 1: a\x{c0}aa
+ a\x{c0}a\x{c0}aaa/
+ 0: a\x{c0}a\x{c0}aaa
+ 1: a\x{c0}a\x{c0}a
+
+/^([a\x{c0}]*)a\x{c0}/8
+ a\x{c0}aaaa/
+ 0: a\x{c0}
+ 1:
+ a\x{c0}a\x{c0}aaa/
+ 0: a\x{c0}a\x{c0}
+ 1: a\x{c0}
+
+/A*/g8
+ AAB\x{123}BAA
+ 0: AA
+ 0:
+ 0:
+ 0:
+ 0: AA
+ 0:
+
+/(abc)\1/8i
+ abc
+No match
+
+/(abc)\1/8
+ abc
+No match
+
+/a(*:a\x{1234}b)/8K
+ abc
+ 0: a
+MK: a\x{1234}b
+
+/a(*:a£b)/8K
+ abc
+ 0: a
+MK: a\x{a3}b
+
+/-- Noncharacters --/
+
+/./8
+ \x{fffe}
+ 0: \x{fffe}
+ \x{ffff}
+ 0: \x{ffff}
+ \x{1fffe}
+ 0: \x{1fffe}
+ \x{1ffff}
+ 0: \x{1ffff}
+ \x{2fffe}
+ 0: \x{2fffe}
+ \x{2ffff}
+ 0: \x{2ffff}
+ \x{3fffe}
+ 0: \x{3fffe}
+ \x{3ffff}
+ 0: \x{3ffff}
+ \x{4fffe}
+ 0: \x{4fffe}
+ \x{4ffff}
+ 0: \x{4ffff}
+ \x{5fffe}
+ 0: \x{5fffe}
+ \x{5ffff}
+ 0: \x{5ffff}
+ \x{6fffe}
+ 0: \x{6fffe}
+ \x{6ffff}
+ 0: \x{6ffff}
+ \x{7fffe}
+ 0: \x{7fffe}
+ \x{7ffff}
+ 0: \x{7ffff}
+ \x{8fffe}
+ 0: \x{8fffe}
+ \x{8ffff}
+ 0: \x{8ffff}
+ \x{9fffe}
+ 0: \x{9fffe}
+ \x{9ffff}
+ 0: \x{9ffff}
+ \x{afffe}
+ 0: \x{afffe}
+ \x{affff}
+ 0: \x{affff}
+ \x{bfffe}
+ 0: \x{bfffe}
+ \x{bffff}
+ 0: \x{bffff}
+ \x{cfffe}
+ 0: \x{cfffe}
+ \x{cffff}
+ 0: \x{cffff}
+ \x{dfffe}
+ 0: \x{dfffe}
+ \x{dffff}
+ 0: \x{dffff}
+ \x{efffe}
+ 0: \x{efffe}
+ \x{effff}
+ 0: \x{effff}
+ \x{ffffe}
+ 0: \x{ffffe}
+ \x{fffff}
+ 0: \x{fffff}
+ \x{10fffe}
+ 0: \x{10fffe}
+ \x{10ffff}
+ 0: \x{10ffff}
+ \x{fdd0}
+ 0: \x{fdd0}
+ \x{fdd1}
+ 0: \x{fdd1}
+ \x{fdd2}
+ 0: \x{fdd2}
+ \x{fdd3}
+ 0: \x{fdd3}
+ \x{fdd4}
+ 0: \x{fdd4}
+ \x{fdd5}
+ 0: \x{fdd5}
+ \x{fdd6}
+ 0: \x{fdd6}
+ \x{fdd7}
+ 0: \x{fdd7}
+ \x{fdd8}
+ 0: \x{fdd8}
+ \x{fdd9}
+ 0: \x{fdd9}
+ \x{fdda}
+ 0: \x{fdda}
+ \x{fddb}
+ 0: \x{fddb}
+ \x{fddc}
+ 0: \x{fddc}
+ \x{fddd}
+ 0: \x{fddd}
+ \x{fdde}
+ 0: \x{fdde}
+ \x{fddf}
+ 0: \x{fddf}
+ \x{fde0}
+ 0: \x{fde0}
+ \x{fde1}
+ 0: \x{fde1}
+ \x{fde2}
+ 0: \x{fde2}
+ \x{fde3}
+ 0: \x{fde3}
+ \x{fde4}
+ 0: \x{fde4}
+ \x{fde5}
+ 0: \x{fde5}
+ \x{fde6}
+ 0: \x{fde6}
+ \x{fde7}
+ 0: \x{fde7}
+ \x{fde8}
+ 0: \x{fde8}
+ \x{fde9}
+ 0: \x{fde9}
+ \x{fdea}
+ 0: \x{fdea}
+ \x{fdeb}
+ 0: \x{fdeb}
+ \x{fdec}
+ 0: \x{fdec}
+ \x{fded}
+ 0: \x{fded}
+ \x{fdee}
+ 0: \x{fdee}
+ \x{fdef}
+ 0: \x{fdef}
+
+/^\d*\w{4}/8
+ 1234
+ 0: 1234
+ 123
+No match
+
+/^[^b]*\w{4}/8
+ aaaa
+ 0: aaaa
+ aaa
+No match
+
+/^[^b]*\w{4}/8i
+ aaaa
+ 0: aaaa
+ aaa
+No match
+
+/^\x{100}*.{4}/8
+ \x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}\x{100}\x{100}\x{100}
+ \x{100}\x{100}\x{100}
+No match
+
+/^\x{100}*.{4}/8i
+ \x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}\x{100}\x{100}\x{100}
+ \x{100}\x{100}\x{100}
+No match
+
+/-- End of testinput4 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput5 b/lib/stdlib/test/re_SUITE_data/testoutput5
index abbe1c87de..d583119dd9 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput5
+++ b/lib/stdlib/test/re_SUITE_data/testoutput5
@@ -1,110 +1,9 @@
-/\x{100}/8DZ
-------------------------------------------------------------------
- Bra
- \x{100}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 128
+/-- This set of tests checks the API, internals, and non-Perl stuff for UTF
+ support, excluding Unicode properties. However, tests that give different
+ results in 8-bit and 16-bit modes are excluded (see tests 16 and 17). --/
-/\x{1000}/8DZ
-------------------------------------------------------------------
- Bra
- \x{1000}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 225
-Need char = 128
-
-/\x{10000}/8DZ
-------------------------------------------------------------------
- Bra
- \x{10000}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 128
-
-/\x{100000}/8DZ
-------------------------------------------------------------------
- Bra
- \x{100000}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 244
-Need char = 128
-
-/\x{1000000}/8DZ
-------------------------------------------------------------------
- Bra
- \x{1000000}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 249
-Need char = 128
-
-/\x{4000000}/8DZ
-------------------------------------------------------------------
- Bra
- \x{4000000}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 252
-Need char = 128
-
-/\x{7fffFFFF}/8DZ
-------------------------------------------------------------------
- Bra
- \x{7fffffff}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 253
-Need char = 191
-
-/[\x{ff}]/8DZ
-------------------------------------------------------------------
- Bra
- \x{ff}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 195
-Need char = 191
-
-/[\x{100}]/8DZ
-------------------------------------------------------------------
- Bra
- [\x{100}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
+/\x{110000}/8DZ
+Failed: character value in \x{...} sequence is too large at offset 9
/\x{ffffffff}/8
Failed: character value in \x{...} sequence is too large at offset 11
@@ -112,34 +11,20 @@ Failed: character value in \x{...} sequence is too large at offset 11
/\x{100000000}/8
Failed: character value in \x{...} sequence is too large at offset 12
+/\x{d800}/8
+Failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7
+
+/\x{dfff}/8
+Failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7
+
+/\x{d7ff}/8
+
+/\x{e000}/8
+
/^\x{100}a\x{1234}/8
\x{100}a\x{1234}bcd
0: \x{100}a\x{1234}
-/\x80/8DZ
-------------------------------------------------------------------
- Bra
- \x{80}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\xff/8DZ
-------------------------------------------------------------------
- Bra
- \x{ff}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 195
-Need char = 191
-
/\x{0041}\x{2262}\x{0391}\x{002e}/DZ8
------------------------------------------------------------------
Bra
@@ -148,100 +33,12 @@ Need char = 191
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
+Options: utf
First char = 'A'
Need char = '.'
\x{0041}\x{2262}\x{0391}\x{002e}
0: A\x{2262}\x{391}.
-/\x{D55c}\x{ad6d}\x{C5B4}/DZ8
-------------------------------------------------------------------
- Bra
- \x{d55c}\x{ad6d}\x{c5b4}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 237
-Need char = 180
- \x{D55c}\x{ad6d}\x{C5B4}
- 0: \x{d55c}\x{ad6d}\x{c5b4}
-
-/\x{65e5}\x{672c}\x{8a9e}/DZ8
-------------------------------------------------------------------
- Bra
- \x{65e5}\x{672c}\x{8a9e}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 230
-Need char = 158
- \x{65e5}\x{672c}\x{8a9e}
- 0: \x{65e5}\x{672c}\x{8a9e}
-
-/\x{80}/DZ8
-------------------------------------------------------------------
- Bra
- \x{80}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\x{084}/DZ8
-------------------------------------------------------------------
- Bra
- \x{84}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 132
-
-/\x{104}/DZ8
-------------------------------------------------------------------
- Bra
- \x{104}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 132
-
-/\x{861}/DZ8
-------------------------------------------------------------------
- Bra
- \x{861}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 224
-Need char = 161
-
-/\x{212ab}/DZ8
-------------------------------------------------------------------
- Bra
- \x{212ab}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 171
-
/.{3,5}X/DZ8
------------------------------------------------------------------
Bra
@@ -252,14 +49,12 @@ Need char = 171
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
Need char = 'X'
\x{212ab}\x{212ab}\x{212ab}\x{861}X
0: \x{212ab}\x{212ab}\x{212ab}\x{861}X
-
/.{3,5}?/DZ8
------------------------------------------------------------------
Bra
@@ -269,69 +64,15 @@ Need char = 'X'
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
\x{212ab}\x{212ab}\x{212ab}\x{861}
0: \x{212ab}\x{212ab}\x{212ab}
-/-- These tests are here rather than in testinput4 because Perl 5.6 has some
-problems with UTF-8 support, in the area of \x{..} where the value is < 255.
-It grumbles about invalid UTF-8 strings. --/
-
-/^[a\x{c0}]b/8
- \x{c0}b
- 0: \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aa
- 1: a\x{c0}a\x{c0}
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aaaa
- 1: a\x{c0}aa
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aaa
- 1: a\x{c0}a\x{c0}a
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- 0: a\x{c0}
- 1:
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}
- 1: a\x{c0}
-
-/-- --/
-
/(?<=\C)X/8
Failed: \C not allowed in lookbehind assertion at offset 6
-/-- This one is here not because it's different to Perl, but because the way
-the captured single-byte is displayed. (In Perl it becomes a character, and you
-can't tell the difference.) --/
-
-/X(\C)(.*)/8
- X\x{1234}
- 0: X\x{1234}
- 1: \xe1
- 2: \x88\xb4
- X\nabc
- 0: X\x{0a}abc
- 1: \x{0a}
- 2: abc
-
/^[ab]/8DZ
------------------------------------------------------------------
Bra
@@ -341,7 +82,7 @@ can't tell the difference.) --/
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: anchored utf8
+Options: anchored utf
No first char
No need char
bar
@@ -364,7 +105,7 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: anchored utf8
+Options: anchored utf
No first char
No need char
c
@@ -378,135 +119,6 @@ No need char
aaa
No match
-/[^ab\xC0-\xF0]/8SDZ
-------------------------------------------------------------------
- Bra
- [\x00-`c-\xbf\xf1-\xff] (neg)
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
-Starting byte set: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a
- \x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19
- \x1a \x1b \x1c \x1d \x1e \x1f \x20 ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4
- 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y
- Z [ \ ] ^ _ ` c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f
- \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0
- \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf
- \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee
- \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd
- \xfe \xff
- \x{f1}
- 0: \x{f1}
- \x{bf}
- 0: \x{bf}
- \x{100}
- 0: \x{100}
- \x{1000}
- 0: \x{1000}
- *** Failers
- 0: *
- \x{c0}
-No match
- \x{f0}
-No match
-
-/Ā{3,4}/8SDZ
-------------------------------------------------------------------
- Bra
- \x{100}{3}
- \x{100}?
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-First char = 196
-Need char = 128
-Study returned NULL
- \x{100}\x{100}\x{100}\x{100\x{100}
- 0: \x{100}\x{100}\x{100}
-
-/(\x{100}+|x)/8SDZ
-------------------------------------------------------------------
- Bra
- CBra 1
- \x{100}+
- Alt
- x
- Ket
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Partial matching not supported
-Options: utf8
-No first char
-No need char
-Starting byte set: x \xc4
-
-/(\x{100}*a|x)/8SDZ
-------------------------------------------------------------------
- Bra
- CBra 1
- \x{100}*+
- a
- Alt
- x
- Ket
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Partial matching not supported
-Options: utf8
-No first char
-No need char
-Starting byte set: a x \xc4
-
-/(\x{100}{0,2}a|x)/8SDZ
-------------------------------------------------------------------
- Bra
- CBra 1
- \x{100}{0,2}
- a
- Alt
- x
- Ket
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Partial matching not supported
-Options: utf8
-No first char
-No need char
-Starting byte set: a x \xc4
-
-/(\x{100}{1,2}a|x)/8SDZ
-------------------------------------------------------------------
- Bra
- CBra 1
- \x{100}
- \x{100}{0,1}
- a
- Alt
- x
- Ket
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Partial matching not supported
-Options: utf8
-No first char
-No need char
-Starting byte set: x \xc4
-
/\x{100}*(\d+|"(?1)")/8
1234
0: 1234
@@ -531,18 +143,6 @@ No match
\x{100}\x{100}abcd
No match
-/\x{100}/8DZ
-------------------------------------------------------------------
- Bra
- \x{100}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 128
-
/\x{100}*/8DZ
------------------------------------------------------------------
Bra
@@ -551,8 +151,7 @@ Need char = 128
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
@@ -565,8 +164,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
First char = 'a'
No need char
@@ -579,39 +177,10 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
First char = 'a'
Need char = 'b'
-/a\x{100}\x{101}*/8DZ
-------------------------------------------------------------------
- Bra
- a\x{100}
- \x{101}*
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-First char = 'a'
-Need char = 128
-
-/a\x{100}\x{101}+/8DZ
-------------------------------------------------------------------
- Bra
- a\x{100}
- \x{101}+
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-First char = 'a'
-Need char = 129
-
/\x{100}*A/8DZ
------------------------------------------------------------------
Bra
@@ -621,8 +190,7 @@ Need char = 129
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
Need char = 'A'
A
@@ -633,61 +201,14 @@ Need char = 'A'
Bra
\x{100}*+
\d
- Once
Recurse
Ket
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-No first char
-No need char
-
-/[^\x{c4}]/DZ
-------------------------------------------------------------------
- Bra
- [^\xc4]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[^\x{c4}]/8DZ
-------------------------------------------------------------------
- Bra
- [\x00-\xc3\xc5-\xff] (neg)
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
-
-/[\x{100}]/8DZ
-------------------------------------------------------------------
- Bra
- [\x{100}]
- Ket
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
+Options: utf
No first char
No need char
- \x{100}
- 0: \x{100}
- Z\x{100}
- 0: \x{100}
- \x{100}Z
- 0: \x{100}
- *** Failers
-No match
/[Z\x{100}]/8DZ
------------------------------------------------------------------
@@ -697,7 +218,7 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
+Options: utf
No first char
No need char
Z\x{100}
@@ -732,7 +253,7 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
+Options: utf
No first char
No need char
@@ -744,7 +265,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: utf8
+Options: utf
No first char
No need char
\x{100}
@@ -755,35 +276,21 @@ No need char
/[\xFF]/DZ
------------------------------------------------------------------
Bra
- \xff
+ \x{ff}
Ket
End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
-First char = 255
+First char = \xff
No need char
>\xff<
0: \xff
-/[\xff]/DZ8
-------------------------------------------------------------------
- Bra
- \x{ff}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 195
-Need char = 191
- >\x{ff}<
- 0: \x{ff}
-
/[^\xFF]/DZ
------------------------------------------------------------------
Bra
- [^\xff]
+ [^\x{ff}]
Ket
End
------------------------------------------------------------------
@@ -792,18 +299,6 @@ No options
No first char
No need char
-/[^\xff]/8DZ
-------------------------------------------------------------------
- Bra
- [\x00-\xfe] (neg)
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
-
/[Ä-Ü]/8
Ö # Matches without Study
0: \x{d6}
@@ -828,99 +323,6 @@ No need char
\x{d6}
0: \x{d6}
-/[�]/8
-Failed: invalid UTF-8 string at offset 2
-
-/�/8
-Failed: invalid UTF-8 string at offset 0
-
-/���xxx/8
-Failed: invalid UTF-8 string at offset 1
-
-/���xxx/8?DZ
-------------------------------------------------------------------
- Bra
- \X{c0}\X{c0}\X{c0}xxx
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8 no_utf8_check
-First char = 195
-Need char = 'x'
-
-/abc/8
- �]
-Error -10
- �
-Error -10
- ���
-Error -10
- ���\?
-No match
-
-/anything/8
- \xc0\x80
-Error -10
- \xc1\x8f
-Error -10
- \xe0\x9f\x80
-Error -10
- \xf0\x8f\x80\x80
-Error -10
- \xf8\x87\x80\x80\x80
-Error -10
- \xfc\x83\x80\x80\x80\x80
-Error -10
- \xfe\x80\x80\x80\x80\x80
-Error -10
- \xff\x80\x80\x80\x80\x80
-Error -10
- \xc3\x8f
-No match
- \xe0\xaf\x80
-No match
- \xe1\x80\x80
-No match
- \xf0\x9f\x80\x80
-No match
- \xf1\x8f\x80\x80
-No match
- \xf8\x88\x80\x80\x80
-Error -10
- \xf9\x87\x80\x80\x80
-Error -10
- \xfc\x84\x80\x80\x80\x80
-Error -10
- \xfd\x83\x80\x80\x80\x80
-Error -10
- \?\xf8\x88\x80\x80\x80
-No match
- \?\xf9\x87\x80\x80\x80
-No match
- \?\xfc\x84\x80\x80\x80\x80
-No match
- \?\xfd\x83\x80\x80\x80\x80
-No match
-
-/\x{100}abc(xyz(?1))/8DZ
-------------------------------------------------------------------
- Bra
- \x{100}abc
- CBra 1
- xyz
- Once
- Recurse
- Ket
- Ket
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: utf8
-First char = 196
-Need char = 'z'
-
/[^\x{100}]abc(xyz(?1))/8DZ
------------------------------------------------------------------
Bra
@@ -928,15 +330,13 @@ Need char = 'z'
abc
CBra 1
xyz
- Once
Recurse
Ket
Ket
- Ket
End
------------------------------------------------------------------
Capturing subpattern count = 1
-Options: utf8
+Options: utf
No first char
Need char = 'z'
@@ -947,15 +347,13 @@ Need char = 'z'
abc
CBra 1
xyz
- Once
Recurse
Ket
Ket
- Ket
End
------------------------------------------------------------------
Capturing subpattern count = 1
-Options: utf8
+Options: utf
No first char
Need char = 'z'
@@ -967,9 +365,7 @@ Need char = 'z'
\x{100}
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -977,7 +373,7 @@ Need char = 'z'
End
------------------------------------------------------------------
Capturing subpattern count = 2
-Options: utf8
+Options: utf
No first char
No need char
@@ -990,9 +386,7 @@ No need char
\x{100}
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -1001,9 +395,7 @@ No need char
\x{100}
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -1012,7 +404,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 2
-Options: utf8
+Options: utf
No first char
No need char
@@ -1024,9 +416,7 @@ No need char
\x{100}
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -1034,7 +424,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 2
-Options: utf8
+Options: utf
No first char
No need char
@@ -1047,9 +437,7 @@ No need char
\x{100}
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -1058,9 +446,7 @@ No need char
\x{100}
CBra 2
b
- Once
Recurse
- Ket
c
Ket
Ket
@@ -1069,7 +455,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 2
-Options: utf8
+Options: utf
No first char
No need char
@@ -1083,10 +469,6 @@ No need char
\x{100}X
0: X
-/a\x{1234}b/P8
- a\x{1234}b
- 0: a\x{1234}b
-
/^\ሴ/8DZ
------------------------------------------------------------------
Bra
@@ -1096,23 +478,10 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Options: anchored utf8
+Options: anchored utf
No first char
No need char
-/\777/I
-Failed: octal value is greater than \377 (not in UTF-8 mode) at offset 3
-
-/\777/8I
-Capturing subpattern count = 0
-Options: utf8
-First char = 199
-Need char = 191
- \x{1ff}
- 0: \x{1ff}
- \777
- 0: \x{1ff}
-
/\x{100}*\d/8DZ
------------------------------------------------------------------
Bra
@@ -1122,8 +491,7 @@ Need char = 191
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
@@ -1136,8 +504,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
@@ -1150,8 +517,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
@@ -1164,8 +530,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
@@ -1178,8 +543,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
@@ -1192,53 +556,10 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
+Options: utf
No first char
No need char
-/\x{100}+\x{200}/8DZ
-------------------------------------------------------------------
- Bra
- \x{100}++
- \x{200}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-First char = 196
-Need char = 128
-
-/\x{100}+X/8DZ
-------------------------------------------------------------------
- Bra
- \x{100}++
- X
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-First char = 196
-Need char = 'X'
-
-/X+\x{200}/8DZ
-------------------------------------------------------------------
- Bra
- X++
- \x{200}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-First char = 'X'
-Need char = 128
-
/()()()()()()()()()()
()()()()()()()()()()
()()()()()()()()()()
@@ -1280,9 +601,6 @@ Matched, but too many substrings
End
------------------------------------------------------------------
-/^[\QĀ\E-\QŐ\E/BZ8
-Failed: missing terminating ] for character class at offset 15
-
/^abc./mgx8<any>
abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x{0085}abc7 \x{2028}abc8 \x{2029}abc9 JUNK
0: abc1
@@ -1468,7 +786,7 @@ No match
/[\H]/8BZ
------------------------------------------------------------------
Bra
- [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff\x{100}-\x{167f}\x{1681}-\x{180d}\x{180f}-\x{1fff}\x{200b}-\x{202e}\x{2030}-\x{205e}\x{2060}-\x{2fff}\x{3001}-\x{7fffffff}]
+ [\x00-\x08\x0a-\x1f!-\x9f\x{a1}-\x{167f}\x{1681}-\x{180d}\x{180f}-\x{1fff}\x{200b}-\x{202e}\x{2030}-\x{205e}\x{2060}-\x{2fff}\x{3001}-\x{10ffff}]
Ket
End
------------------------------------------------------------------
@@ -1476,7 +794,7 @@ No match
/[\V]/8BZ
------------------------------------------------------------------
Bra
- [\x00-\x09\x0e-\x84\x86-\xff\x{100}-\x{2027}\x{2029}-\x{7fffffff}]
+ [\x00-\x09\x0e-\x84\x{86}-\x{2027}\x{202a}-\x{10ffff}]
Ket
End
------------------------------------------------------------------
@@ -1485,39 +803,9 @@ No match
\x{1ec5}
0: \x{1ec5}
-/-- This tests the stricter UTF-8 check according to RFC 3629. --/
-
-/X/8
- \x{0}\x{d7ff}\x{e000}\x{10ffff}
-No match
- \x{d800}
-Error -10
- \x{d800}\?
-No match
- \x{da00}
-Error -10
- \x{da00}\?
-No match
- \x{dfff}
-Error -10
- \x{dfff}\?
-No match
- \x{110000}
-Error -10
- \x{110000}\?
-No match
- \x{2000000}
-Error -10
- \x{2000000}\?
-No match
- \x{7fffffff}
-Error -10
- \x{7fffffff}\?
-No match
-
/a\Rb/I8<bsr_anycrlf>
Capturing subpattern count = 0
-Options: bsr_anycrlf utf8
+Options: bsr_anycrlf utf
First char = 'a'
Need char = 'b'
a\rb
@@ -1535,7 +823,7 @@ No match
/a\Rb/I8<bsr_unicode>
Capturing subpattern count = 0
-Options: bsr_unicode utf8
+Options: bsr_unicode utf
First char = 'a'
Need char = 'b'
a\rb
@@ -1557,7 +845,7 @@ No match
/a\R?b/I8<bsr_anycrlf>
Capturing subpattern count = 0
-Options: bsr_anycrlf utf8
+Options: bsr_anycrlf utf
First char = 'a'
Need char = 'b'
a\rb
@@ -1575,7 +863,7 @@ No match
/a\R?b/I8<bsr_unicode>
Capturing subpattern count = 0
-Options: bsr_unicode utf8
+Options: bsr_unicode utf
First char = 'a'
Need char = 'b'
a\rb
@@ -1608,4 +896,954 @@ No match
/[[:a\x{100}b:]]/8
Failed: unknown POSIX class name at offset 3
-/ End of testinput5 /
+/a[^]b/<JS>8
+ a\x{1234}b
+ 0: a\x{1234}b
+ a\nb
+ 0: a\x{0a}b
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]+b/<JS>8
+ aXb
+ 0: aXb
+ a\nX\nX\x{1234}b
+ 0: a\x{0a}X\x{0a}X\x{1234}b
+ ** Failers
+No match
+ ab
+No match
+
+/(\x{de})\1/
+ \x{de}\x{de}
+ 0: \xde\xde
+ 1: \xde
+
+/X/8f<any>
+ A\x{1ec5}ABCXYZ
+ 0: X
+
+/Xa{2,4}b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/Xa{2,4}?b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/Xa{2,4}+b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X\x{123}{2,4}b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X\x{123}{2,4}?b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X\x{123}{2,4}+b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X\x{123}{2,4}b/8
+ Xx\P
+No match
+ X\x{123}x\P
+No match
+ X\x{123}\x{123}x\P
+No match
+ X\x{123}\x{123}\x{123}x\P
+No match
+ X\x{123}\x{123}\x{123}\x{123}x\P
+No match
+
+/X\x{123}{2,4}?b/8
+ Xx\P
+No match
+ X\x{123}x\P
+No match
+ X\x{123}\x{123}x\P
+No match
+ X\x{123}\x{123}\x{123}x\P
+No match
+ X\x{123}\x{123}\x{123}\x{123}x\P
+No match
+
+/X\x{123}{2,4}+b/8
+ Xx\P
+No match
+ X\x{123}x\P
+No match
+ X\x{123}\x{123}x\P
+No match
+ X\x{123}\x{123}\x{123}x\P
+No match
+ X\x{123}\x{123}\x{123}\x{123}x\P
+No match
+
+/X\d{2,4}b/8
+ X\P
+Partial match: X
+ X3\P
+Partial match: X3
+ X33\P
+Partial match: X33
+ X333\P
+Partial match: X333
+ X3333\P
+Partial match: X3333
+
+/X\d{2,4}?b/8
+ X\P
+Partial match: X
+ X3\P
+Partial match: X3
+ X33\P
+Partial match: X33
+ X333\P
+Partial match: X333
+ X3333\P
+Partial match: X3333
+
+/X\d{2,4}+b/8
+ X\P
+Partial match: X
+ X3\P
+Partial match: X3
+ X33\P
+Partial match: X33
+ X333\P
+Partial match: X333
+ X3333\P
+Partial match: X3333
+
+/X\D{2,4}b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X\D{2,4}?b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X\D{2,4}+b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X\D{2,4}b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X\D{2,4}?b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X\D{2,4}+b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X[abc]{2,4}b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X[abc]{2,4}?b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X[abc]{2,4}+b/8
+ X\P
+Partial match: X
+ Xa\P
+Partial match: Xa
+ Xaa\P
+Partial match: Xaa
+ Xaaa\P
+Partial match: Xaaa
+ Xaaaa\P
+Partial match: Xaaaa
+
+/X[abc\x{123}]{2,4}b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X[abc\x{123}]{2,4}?b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X[abc\x{123}]{2,4}+b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X[^a]{2,4}b/8
+ X\P
+Partial match: X
+ Xz\P
+Partial match: Xz
+ Xzz\P
+Partial match: Xzz
+ Xzzz\P
+Partial match: Xzzz
+ Xzzzz\P
+Partial match: Xzzzz
+
+/X[^a]{2,4}?b/8
+ X\P
+Partial match: X
+ Xz\P
+Partial match: Xz
+ Xzz\P
+Partial match: Xzz
+ Xzzz\P
+Partial match: Xzzz
+ Xzzzz\P
+Partial match: Xzzzz
+
+/X[^a]{2,4}+b/8
+ X\P
+Partial match: X
+ Xz\P
+Partial match: Xz
+ Xzz\P
+Partial match: Xzz
+ Xzzz\P
+Partial match: Xzzz
+ Xzzzz\P
+Partial match: Xzzzz
+
+/X[^a]{2,4}b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X[^a]{2,4}?b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/X[^a]{2,4}+b/8
+ X\P
+Partial match: X
+ X\x{123}\P
+Partial match: X\x{123}
+ X\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}
+ X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: X\x{123}\x{123}\x{123}\x{123}
+
+/(Y)X\1{2,4}b/8
+ YX\P
+Partial match: YX
+ YXY\P
+Partial match: YXY
+ YXYY\P
+Partial match: YXYY
+ YXYYY\P
+Partial match: YXYYY
+ YXYYYY\P
+Partial match: YXYYYY
+
+/(Y)X\1{2,4}?b/8
+ YX\P
+Partial match: YX
+ YXY\P
+Partial match: YXY
+ YXYY\P
+Partial match: YXYY
+ YXYYY\P
+Partial match: YXYYY
+ YXYYYY\P
+Partial match: YXYYYY
+
+/(Y)X\1{2,4}+b/8
+ YX\P
+Partial match: YX
+ YXY\P
+Partial match: YXY
+ YXYY\P
+Partial match: YXYY
+ YXYYY\P
+Partial match: YXYYY
+ YXYYYY\P
+Partial match: YXYYYY
+
+/(\x{123})X\1{2,4}b/8
+ \x{123}X\P
+Partial match: \x{123}X
+ \x{123}X\x{123}\P
+Partial match: \x{123}X\x{123}
+ \x{123}X\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}
+ \x{123}X\x{123}\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}\x{123}
+ \x{123}X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123}
+
+/(\x{123})X\1{2,4}?b/8
+ \x{123}X\P
+Partial match: \x{123}X
+ \x{123}X\x{123}\P
+Partial match: \x{123}X\x{123}
+ \x{123}X\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}
+ \x{123}X\x{123}\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}\x{123}
+ \x{123}X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123}
+
+/(\x{123})X\1{2,4}+b/8
+ \x{123}X\P
+Partial match: \x{123}X
+ \x{123}X\x{123}\P
+Partial match: \x{123}X\x{123}
+ \x{123}X\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}
+ \x{123}X\x{123}\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}\x{123}
+ \x{123}X\x{123}\x{123}\x{123}\x{123}\P
+Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123}
+
+/\bthe cat\b/8
+ the cat\P
+ 0: the cat
+ the cat\P\P
+Partial match: the cat
+
+/abcd*/8
+ xxxxabcd\P
+ 0: abcd
+ xxxxabcd\P\P
+Partial match: abcd
+
+/abcd*/i8
+ xxxxabcd\P
+ 0: abcd
+ xxxxabcd\P\P
+Partial match: abcd
+ XXXXABCD\P
+ 0: ABCD
+ XXXXABCD\P\P
+Partial match: ABCD
+
+/abc\d*/8
+ xxxxabc1\P
+ 0: abc1
+ xxxxabc1\P\P
+Partial match: abc1
+
+/(a)bc\1*/8
+ xxxxabca\P
+ 0: abca
+ 1: a
+ xxxxabca\P\P
+Partial match: abca
+
+/abc[de]*/8
+ xxxxabcde\P
+ 0: abcde
+ xxxxabcde\P\P
+Partial match: abcde
+
+/X\W{3}X/8
+ \PX
+Partial match: X
+
+/\sxxx\s/8T1
+ AB\x{85}xxx\x{a0}XYZ
+ 0: \x{85}xxx\x{a0}
+ AB\x{a0}xxx\x{85}XYZ
+ 0: \x{a0}xxx\x{85}
+
+/\S \S/8T1
+ \x{a2} \x{84}
+ 0: \x{a2} \x{84}
+
+'A#хц'8x<any>BZ
+------------------------------------------------------------------
+ Bra
+ A
+ Ket
+ End
+------------------------------------------------------------------
+
+'A#хц
+ PQ'8x<any>BZ
+------------------------------------------------------------------
+ Bra
+ APQ
+ Ket
+ End
+------------------------------------------------------------------
+
+/a+#хaa
+ z#XX?/8x<any>BZ
+------------------------------------------------------------------
+ Bra
+ a++
+ z
+ Ket
+ End
+------------------------------------------------------------------
+
+/a+#хaa
+ z#х?/8x<any>BZ
+------------------------------------------------------------------
+ Bra
+ a++
+ z
+ Ket
+ End
+------------------------------------------------------------------
+
+/\g{A}xxx#bXX(?'A'123) (?'A'456)/8x<any>BZ
+------------------------------------------------------------------
+ Bra
+ \1
+ xxx
+ CBra 1
+ 456
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/\g{A}xxx#bх(?'A'123) (?'A'456)/8x<any>BZ
+------------------------------------------------------------------
+ Bra
+ \1
+ xxx
+ CBra 1
+ 456
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/^\cģ/8
+Failed: \c must be followed by an ASCII character at offset 3
+
+/(\R*)(.)/s8
+ \r\n
+ 0: \x{0d}
+ 1:
+ 2: \x{0d}
+ \r\r\n\n\r
+ 0: \x{0d}\x{0d}\x{0a}\x{0a}\x{0d}
+ 1: \x{0d}\x{0d}\x{0a}\x{0a}
+ 2: \x{0d}
+ \r\r\n\n\r\n
+ 0: \x{0d}\x{0d}\x{0a}\x{0a}\x{0d}
+ 1: \x{0d}\x{0d}\x{0a}\x{0a}
+ 2: \x{0d}
+
+/(\R)*(.)/s8
+ \r\n
+ 0: \x{0d}
+ 1: <unset>
+ 2: \x{0d}
+ \r\r\n\n\r
+ 0: \x{0d}\x{0d}\x{0a}\x{0a}\x{0d}
+ 1: \x{0a}
+ 2: \x{0d}
+ \r\r\n\n\r\n
+ 0: \x{0d}\x{0d}\x{0a}\x{0a}\x{0d}
+ 1: \x{0a}
+ 2: \x{0d}
+
+/[^\x{1234}]+/iS8I
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 1
+No set of starting bytes
+
+/[^\x{1234}]+?/iS8I
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 1
+No set of starting bytes
+
+/[^\x{1234}]++/iS8I
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 1
+No set of starting bytes
+
+/[^\x{1234}]{2}/iS8I
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 2
+No set of starting bytes
+
+//<bsr_anycrlf><bsr_unicode>
+Failed: inconsistent NEWLINE options at offset 0
+
+/f.*/
+ \P\Pfor
+Partial match: for
+
+/f.*/s
+ \P\Pfor
+Partial match: for
+
+/f.*/8
+ \P\Pfor
+Partial match: for
+
+/f.*/8s
+ \P\Pfor
+Partial match: for
+
+/\x{d7ff}\x{e000}/8
+
+/\x{d800}/8
+Failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7
+
+/\x{dfff}/8
+Failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7
+
+/\h+/8
+ \x{1681}\x{200b}\x{1680}\x{2000}\x{202f}\x{3000}
+ 0: \x{1680}\x{2000}\x{202f}\x{3000}
+ \x{3001}\x{2fff}\x{200a}\x{a0}\x{2000}
+ 0: \x{200a}\x{a0}\x{2000}
+
+/[\h\x{e000}]+/8BZ
+------------------------------------------------------------------
+ Bra
+ [\x09 \xa0\x{1680}\x{180e}\x{2000}-\x{200a}\x{202f}\x{205f}\x{3000}\x{e000}]+
+ Ket
+ End
+------------------------------------------------------------------
+ \x{1681}\x{200b}\x{1680}\x{2000}\x{202f}\x{3000}
+ 0: \x{1680}\x{2000}\x{202f}\x{3000}
+ \x{3001}\x{2fff}\x{200a}\x{a0}\x{2000}
+ 0: \x{200a}\x{a0}\x{2000}
+
+/\H+/8
+ \x{1680}\x{180e}\x{167f}\x{1681}\x{180d}\x{180f}
+ 0: \x{167f}\x{1681}\x{180d}\x{180f}
+ \x{2000}\x{200a}\x{1fff}\x{200b}
+ 0: \x{1fff}\x{200b}
+ \x{202f}\x{205f}\x{202e}\x{2030}\x{205e}\x{2060}
+ 0: \x{202e}\x{2030}\x{205e}\x{2060}
+ \x{a0}\x{3000}\x{9f}\x{a1}\x{2fff}\x{3001}
+ 0: \x{9f}\x{a1}\x{2fff}\x{3001}
+
+/[\H\x{d7ff}]+/8BZ
+------------------------------------------------------------------
+ Bra
+ [\x00-\x08\x0a-\x1f!-\x9f\x{a1}-\x{167f}\x{1681}-\x{180d}\x{180f}-\x{1fff}\x{200b}-\x{202e}\x{2030}-\x{205e}\x{2060}-\x{2fff}\x{3001}-\x{10ffff}\x{d7ff}]+
+ Ket
+ End
+------------------------------------------------------------------
+ \x{1680}\x{180e}\x{167f}\x{1681}\x{180d}\x{180f}
+ 0: \x{167f}\x{1681}\x{180d}\x{180f}
+ \x{2000}\x{200a}\x{1fff}\x{200b}
+ 0: \x{1fff}\x{200b}
+ \x{202f}\x{205f}\x{202e}\x{2030}\x{205e}\x{2060}
+ 0: \x{202e}\x{2030}\x{205e}\x{2060}
+ \x{a0}\x{3000}\x{9f}\x{a1}\x{2fff}\x{3001}
+ 0: \x{9f}\x{a1}\x{2fff}\x{3001}
+
+/\v+/8
+ \x{2027}\x{2030}\x{2028}\x{2029}
+ 0: \x{2028}\x{2029}
+ \x09\x0e\x{84}\x{86}\x{85}\x0a\x0b\x0c\x0d
+ 0: \x{85}\x{0a}\x{0b}\x{0c}\x{0d}
+
+/[\v\x{e000}]+/8BZ
+------------------------------------------------------------------
+ Bra
+ [\x0a-\x0d\x85\x{2028}-\x{2029}\x{e000}]+
+ Ket
+ End
+------------------------------------------------------------------
+ \x{2027}\x{2030}\x{2028}\x{2029}
+ 0: \x{2028}\x{2029}
+ \x09\x0e\x{84}\x{86}\x{85}\x0a\x0b\x0c\x0d
+ 0: \x{85}\x{0a}\x{0b}\x{0c}\x{0d}
+
+/\V+/8
+ \x{2028}\x{2029}\x{2027}\x{2030}
+ 0: \x{2027}\x{2030}
+ \x{85}\x0a\x0b\x0c\x0d\x09\x0e\x{84}\x{86}
+ 0: \x{09}\x{0e}\x{84}\x{86}
+
+/[\V\x{d7ff}]+/8BZ
+------------------------------------------------------------------
+ Bra
+ [\x00-\x09\x0e-\x84\x{86}-\x{2027}\x{202a}-\x{10ffff}\x{d7ff}]+
+ Ket
+ End
+------------------------------------------------------------------
+ \x{2028}\x{2029}\x{2027}\x{2030}
+ 0: \x{2027}\x{2030}
+ \x{85}\x0a\x0b\x0c\x0d\x09\x0e\x{84}\x{86}
+ 0: \x{09}\x{0e}\x{84}\x{86}
+
+/\R+/8<bsr_unicode>
+ \x{2027}\x{2030}\x{2028}\x{2029}
+ 0: \x{2028}\x{2029}
+ \x09\x0e\x{84}\x{86}\x{85}\x0a\x0b\x0c\x0d
+ 0: \x{85}\x{0a}\x{0b}\x{0c}\x{0d}
+
+/(..)\1/8
+ ab\P
+Partial match: ab
+ aba\P
+Partial match: aba
+ abab\P
+ 0: abab
+ 1: ab
+
+/(..)\1/8i
+ ab\P
+Partial match: ab
+ abA\P
+Partial match: abA
+ aBAb\P
+ 0: aBAb
+ 1: aB
+
+/(..)\1{2,}/8
+ ab\P
+Partial match: ab
+ aba\P
+Partial match: aba
+ abab\P
+Partial match: abab
+ ababa\P
+Partial match: ababa
+ ababab\P
+ 0: ababab
+ 1: ab
+ ababab\P\P
+Partial match: ababab
+ abababa\P
+ 0: ababab
+ 1: ab
+ abababa\P\P
+Partial match: abababa
+
+/(..)\1{2,}/8i
+ ab\P
+Partial match: ab
+ aBa\P
+Partial match: aBa
+ aBAb\P
+Partial match: aBAb
+ AbaBA\P
+Partial match: AbaBA
+ abABAb\P
+ 0: abABAb
+ 1: ab
+ aBAbaB\P\P
+Partial match: aBAbaB
+ abABabA\P
+ 0: abABab
+ 1: ab
+ abaBABa\P\P
+Partial match: abaBABa
+
+/(..)\1{2,}?x/8i
+ ab\P
+Partial match: ab
+ abA\P
+Partial match: abA
+ aBAb\P
+Partial match: aBAb
+ abaBA\P
+Partial match: abaBA
+ abAbaB\P
+Partial match: abAbaB
+ abaBabA\P
+Partial match: abaBabA
+ abAbABaBx\P
+ 0: abAbABaBx
+ 1: ab
+
+/./8<CRLF>
+ \r\P
+ 0: \x{0d}
+ \r\P\P
+Partial match: \x{0d}
+
+/.{2,3}/8<CRLF>
+ \r\P
+Partial match: \x{0d}
+ \r\P\P
+Partial match: \x{0d}
+ \r\r\P
+ 0: \x{0d}\x{0d}
+ \r\r\P\P
+Partial match: \x{0d}\x{0d}
+ \r\r\r\P
+ 0: \x{0d}\x{0d}\x{0d}
+ \r\r\r\P\P
+Partial match: \x{0d}\x{0d}\x{0d}
+
+/.{2,3}?/8<CRLF>
+ \r\P
+Partial match: \x{0d}
+ \r\P\P
+Partial match: \x{0d}
+ \r\r\P
+ 0: \x{0d}\x{0d}
+ \r\r\P\P
+Partial match: \x{0d}\x{0d}
+ \r\r\r\P
+ 0: \x{0d}\x{0d}
+ \r\r\r\P\P
+ 0: \x{0d}\x{0d}
+
+/[^\x{100}][^\x{1234}][^\x{ffff}][^\x{10000}][^\x{10ffff}]/8BZ
+------------------------------------------------------------------
+ Bra
+ [^\x{100}]
+ [^\x{1234}]
+ [^\x{ffff}]
+ [^\x{10000}]
+ [^\x{10ffff}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^\x{100}][^\x{1234}][^\x{ffff}][^\x{10000}][^\x{10ffff}]/8BZi
+------------------------------------------------------------------
+ Bra
+ /i [^\x{100}]
+ /i [^\x{1234}]
+ /i [^\x{ffff}]
+ /i [^\x{10000}]
+ /i [^\x{10ffff}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^\x{100}]*[^\x{10000}]+[^\x{10ffff}]??[^\x{8000}]{4,}[^\x{7fff}]{2,9}?[^\x{fffff}]{5,6}+/8BZ
+------------------------------------------------------------------
+ Bra
+ [^\x{100}]*
+ [^\x{10000}]+
+ [^\x{10ffff}]??
+ [^\x{8000}]{4}
+ [^\x{8000}]*
+ [^\x{7fff}]{2}
+ [^\x{7fff}]{0,7}?
+ [^\x{fffff}]{5}
+ [^\x{fffff}]?+
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^\x{100}]*[^\x{10000}]+[^\x{10ffff}]??[^\x{8000}]{4,}[^\x{7fff}]{2,9}?[^\x{fffff}]{5,6}+/8BZi
+------------------------------------------------------------------
+ Bra
+ /i [^\x{100}]*
+ /i [^\x{10000}]+
+ /i [^\x{10ffff}]??
+ /i [^\x{8000}]{4}
+ /i [^\x{8000}]*
+ /i [^\x{7fff}]{2}
+ /i [^\x{7fff}]{0,7}?
+ Once
+ /i [^\x{fffff}]{5}
+ /i [^\x{fffff}]?
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?<=\x{1234}\x{1234})\bxy/I8
+Capturing subpattern count = 0
+Max lookbehind = 2
+Options: utf
+First char = 'x'
+Need char = 'y'
+
+/(?<!^)ETA/8
+ ETA
+No match
+
+/\u0100/<JS>8BZ
+------------------------------------------------------------------
+ Bra
+ \x{100}
+ Ket
+ End
+------------------------------------------------------------------
+
+/[\u0100-\u0200]/<JS>8BZ
+------------------------------------------------------------------
+ Bra
+ [\x{100}-\x{200}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/\ud800/<JS>8
+Failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 5
+
+/-- End of testinput5 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput6 b/lib/stdlib/test/re_SUITE_data/testoutput6
index db825b08c1..b1d4579926 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput6
+++ b/lib/stdlib/test/re_SUITE_data/testoutput6
@@ -1,3 +1,6 @@
+/-- This set of tests is for Unicode property support. It is compatible with
+ Perl >= 5.15. --/
+
/^\pC\pL\pM\pN\pP\pS\pZ</8
\x7f\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
0: \x{7f}\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
@@ -98,14 +101,6 @@ No match
\x{09f}
No match
-/^\p{Cs}/8
- \?\x{dfff}
- 0: \x{dfff}
- ** Failers
-No match
- \x{09f}
-No match
-
/^\p{Ll}/8
a
0: a
@@ -338,18 +333,6 @@ No match
\x{f3b}
No match
-/^\p{Sc}+/8
- $\x{a2}\x{a3}\x{a4}\x{a5}\x{a6}
- 0: $\x{a2}\x{a3}\x{a4}\x{a5}
- \x{9f2}
- 0: \x{9f2}
- ** Failers
-No match
- X
-No match
- \x{2c2}
-No match
-
/^\p{Sk}/8
\x{2c2}
0: \x{2c2}
@@ -402,26 +385,6 @@ No match
\x{2028}
No match
-/^\p{Zs}/8
- \ \
- 0:
- \x{a0}
- 0: \x{a0}
- \x{1680}
- 0: \x{1680}
- \x{180e}
- 0: \x{180e}
- \x{2000}
- 0: \x{2000}
- \x{2001}
- 0: \x{2001}
- ** Failers
-No match
- \x{2028}
-No match
- \x{200d}
-No match
-
/\p{Nd}+(..)/8
\x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}AB
@@ -494,34 +457,6 @@ No match
\x{660}\x{661}\x{662}ABC
No match
-/\p{Lu}/8i
- A
- 0: A
- a\x{10a0}B
- 0: \x{10a0}
- ** Failers
- 0: F
- a
-No match
- \x{1d00}
-No match
-
-/\p{^Lu}/8i
- 1234
- 0: 1
- ** Failers
- 0: *
- ABC
-No match
-
-/\P{Lu}/8i
- 1234
- 0: 1
- ** Failers
- 0: *
- ABC
-No match
-
/(?<=A\p{Nd})XYZ/8
A2XYZ
0: XYZ
@@ -548,103 +483,6 @@ No match
WXYZ
No match
-/[\p{L}]/DZ
-------------------------------------------------------------------
- Bra
- [\p{L}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[\p{^L}]/DZ
-------------------------------------------------------------------
- Bra
- [\P{L}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[\P{L}]/DZ
-------------------------------------------------------------------
- Bra
- [\P{L}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[\P{^L}]/DZ
-------------------------------------------------------------------
- Bra
- [\p{L}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[abc\p{L}\x{0660}]/8DZ
-------------------------------------------------------------------
- Bra
- [a-c\p{L}\x{660}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
-
-/[\p{Nd}]/8DZ
-------------------------------------------------------------------
- Bra
- [\p{Nd}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
- 1234
- 0: 1
-
-/[\p{Nd}+-]+/8DZ
-------------------------------------------------------------------
- Bra
- [+\-\p{Nd}]+
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Partial matching not supported
-Options: utf8
-No first char
-No need char
- 1234
- 0: 1234
- 12-34
- 0: 12-34
- 12+\x{661}-34
- 0: 12+\x{661}-34
- ** Failers
-No match
- abcd
-No match
-
/[\P{Nd}]+/8
abcd
0: abcd
@@ -725,28 +563,6 @@ No match
ABC
No match
-/\p{Ll}/8i
- a
- 0: a
- Az
- 0: z
- ** Failers
- 0: a
- ABC
-No match
-
-/^\x{c0}$/8i
- \x{c0}
- 0: \x{c0}
- \x{e0}
- 0: \x{e0}
-
-/^\x{e0}$/8i
- \x{c0}
- 0: \x{c0}
- \x{e0}
- 0: \x{e0}
-
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8
A\x{391}\x{10427}\x{ff3a}\x{1fb0}
0: A\x{391}\x{10427}\x{ff3a}\x{1fb0}
@@ -777,54 +593,6 @@ No match
A\x{391}\x{10427}\x{ff3a}\x{1fb8}
0: A\x{391}\x{10427}\x{ff3a}\x{1fb8}
-/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8iDZ
-------------------------------------------------------------------
- Bra
- NC A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: caseless utf8
-First char = 'A' (caseless)
-No need char
-
-/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8DZ
-------------------------------------------------------------------
- Bra
- A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 'A'
-Need char = 176
-
-/AB\x{1fb0}/8DZ
-------------------------------------------------------------------
- Bra
- AB\x{1fb0}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 'A'
-Need char = 176
-
-/AB\x{1fb0}/8DZi
-------------------------------------------------------------------
- Bra
- NC AB\x{1fb0}
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: caseless utf8
-First char = 'A' (caseless)
-Need char = 'B' (caseless)
-
/\x{391}+/8i
\x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
0: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
@@ -849,98 +617,6 @@ Need char = 'B' (caseless)
\x{ff5a}
0: \x{ff5a}
-/[\x{c0}\x{391}]/8i
- \x{c0}
- 0: \x{c0}
- \x{e0}
- 0: \x{e0}
-
-/[\x{105}-\x{109}]/8iDZ
-------------------------------------------------------------------
- Bra
- [\x{104}-\x{109}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: caseless utf8
-No first char
-No need char
- \x{104}
- 0: \x{104}
- \x{105}
- 0: \x{105}
- \x{109}
- 0: \x{109}
- ** Failers
-No match
- \x{100}
-No match
- \x{10a}
-No match
-
-/[z-\x{100}]/8iDZ
-------------------------------------------------------------------
- Bra
- [Z\x{39c}\x{178}z-\x{101}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: caseless utf8
-No first char
-No need char
- Z
- 0: Z
- z
- 0: z
- \x{39c}
- 0: \x{39c}
- \x{178}
- 0: \x{178}
- |
- 0: |
- \x{80}
- 0: \x{80}
- \x{ff}
- 0: \x{ff}
- \x{100}
- 0: \x{100}
- \x{101}
- 0: \x{101}
- ** Failers
-No match
- \x{102}
-No match
- Y
-No match
- y
-No match
-
-/[z-\x{100}]/8DZi
-------------------------------------------------------------------
- Bra
- [Z\x{39c}\x{178}z-\x{101}]
- Ket
- End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: caseless utf8
-No first char
-No need char
-
-/^\X/8
- A
- 0: A
- A\x{300}BC
- 0: A\x{300}
- A\x{300}\x{301}\x{302}BC
- 0: A\x{300}\x{301}\x{302}
- *** Failers
- 0: *
- \x{300}
-No match
-
/^[\X]/8
X123
0: X
@@ -1019,7 +695,17 @@ No match
A\x{300}\x{301}B\x{300}C\x{300}\x{301}DA\x{300}X
0: A\x{300}\x{301}B\x{300}C
1: C
-
+
+/^\X/8
+ A
+ 0: A
+ A\x{300}BC
+ 0: A\x{300}
+ A\x{300}\x{301}\x{302}BC
+ 0: A\x{300}\x{301}\x{302}
+ \x{300}
+ 0: \x{300}
+
/^\p{Han}+/8
\x{2e81}\x{3007}\x{2f804}\x{31a0}
0: \x{2e81}\x{3007}\x{2f804}
@@ -1408,42 +1094,10 @@ No match
1: L=abc
2: abc
-/The next two should be Perl-compatible, but it fails to match \x{e0}. PCRE
-will match it only with UCP support, because without that it has no notion
-of case for anything other than the ASCII letters. /
-
-/((?i)[\x{c0}])/8
- \x{c0}
- 0: \x{c0}
- 1: \x{c0}
- \x{e0}
- 0: \x{e0}
- 1: \x{e0}
-
-/(?i:[\x{c0}])/8
- \x{c0}
- 0: \x{c0}
- \x{e0}
- 0: \x{e0}
-
/^\p{Balinese}\p{Cuneiform}\p{Nko}\p{Phags_Pa}\p{Phoenician}/8
\x{1b00}\x{12000}\x{7c0}\x{a840}\x{10900}
0: \x{1b00}\x{12000}\x{7c0}\x{a840}\x{10900}
-/The next two are special cases where the lengths of the different cases of the
-same character differ. The first went wrong with heap fram storage; the 2nd
-was broken in all cases./
-
-/^\x{023a}+?(\x{0130}+)/8i
- \x{023a}\x{2c65}\x{0130}
- 0: \x{23a}\x{2c65}\x{130}
- 1: \x{130}
-
-/^\x{023a}+([^X])/8i
- \x{023a}\x{2c65}X
- 0: \x{23a}\x{2c65}
- 1: \x{2c65}
-
/Check property support in non-UTF-8 mode/
/\p{L}{4}/
@@ -1468,61 +1122,9 @@ No match
A\x80
0: A\x80
-/(?:[\PPa*]*){8,}/
-
-/[\P{Any}]/BZ
-------------------------------------------------------------------
- Bra
- [\P{Any}]
- Ket
- End
-------------------------------------------------------------------
-
-/[\P{Any}\E]/BZ
-------------------------------------------------------------------
- Bra
- [\P{Any}]
- Ket
- End
-------------------------------------------------------------------
-
-/(\P{Yi}+\277)/
-
-/(\P{Yi}+\277)?/
-
-/(?<=\P{Yi}{3}A)X/
-
-/\p{Yi}+(\P{Yi}+)(?1)/
-
-/(\P{Yi}{2}\277)?/
-
-/[\P{Yi}A]/
-
-/[\P{Yi}\P{Yi}\P{Yi}A]/
-
-/[^\P{Yi}A]/
-
-/[^\P{Yi}\P{Yi}\P{Yi}A]/
-
-/(\P{Yi}*\277)*/
-
-/(\P{Yi}*?\277)*/
-
-/(\p{Yi}*+\277)*/
-
-/(\P{Yi}?\277)*/
-
-/(\P{Yi}??\277)*/
-
-/(\p{Yi}?+\277)*/
-
-/(\P{Yi}{0,3}\277)*/
-
-/(\P{Yi}{0,3}?\277)*/
-
-/(\p{Yi}{0,3}+\277)*/
-
/^[\p{Arabic}]/8
+ \x{604}
+ 0: \x{604}
\x{60e}
0: \x{60e}
\x{656}
@@ -1543,6 +1145,8 @@ No match
0: \x{65d}
\x{65e}
0: \x{65e}
+ \x{65f}
+ 0: \x{65f}
\x{66a}
0: \x{66a}
\x{6e9}
@@ -1553,8 +1157,6 @@ No match
0: \x{6fa}
** Failers
No match
- \x{600}
-No match
\x{650}
No match
\x{651}
@@ -1567,8 +1169,6 @@ No match
No match
\x{655}
No match
- \x{65f}
-No match
/^\p{Cyrillic}/8
\x{1d2b}
@@ -1585,8 +1185,6 @@ No match
0: \x{964}
\x{965}
0: \x{965}
- \x{970}
- 0: \x{970}
/^\p{Inherited}/8
\x{64b}
@@ -1634,49 +1232,918 @@ No match
\x{104aa}
No match
-/\p{Zl}{2,3}+/8BZ
-------------------------------------------------------------------
- Bra
- prop Zl {2}
- prop Zl ?+
- Ket
- End
-------------------------------------------------------------------
- \xe2\x80\xa8\xe2\x80\xa8
- 0: \x{2028}\x{2028}
- \x{2028}\x{2028}\x{2028}
- 0: \x{2028}\x{2028}\x{2028}
+/\p{Carian}\p{Cham}\p{Kayah_Li}\p{Lepcha}\p{Lycian}\p{Lydian}\p{Ol_Chiki}\p{Rejang}\p{Saurashtra}\p{Sundanese}\p{Vai}/8
+ \x{102A4}\x{AA52}\x{A91D}\x{1C46}\x{10283}\x{1092E}\x{1C6B}\x{A93B}\x{A8BF}\x{1BA0}\x{A50A}====
+ 0: \x{102a4}\x{aa52}\x{a91d}\x{1c46}\x{10283}\x{1092e}\x{1c6b}\x{a93b}\x{a8bf}\x{1ba0}\x{a50a}
+
+/\x{a77d}\x{1d79}/8i
+ \x{a77d}\x{1d79}
+ 0: \x{a77d}\x{1d79}
+ \x{1d79}\x{a77d}
+ 0: \x{1d79}\x{a77d}
+
+/\x{a77d}\x{1d79}/8
+ \x{a77d}\x{1d79}
+ 0: \x{a77d}\x{1d79}
+ ** Failers
+No match
+ \x{1d79}\x{a77d}
+No match
+
+/(A)\1/8i
+ AA
+ 0: AA
+ 1: A
+ Aa
+ 0: Aa
+ 1: A
+ aa
+ 0: aa
+ 1: a
+ aA
+ 0: aA
+ 1: a
+
+/(\x{10a})\1/8i
+ \x{10a}\x{10a}
+ 0: \x{10a}\x{10a}
+ 1: \x{10a}
+ \x{10a}\x{10b}
+ 0: \x{10a}\x{10b}
+ 1: \x{10a}
+ \x{10b}\x{10b}
+ 0: \x{10b}\x{10b}
+ 1: \x{10b}
+ \x{10b}\x{10a}
+ 0: \x{10b}\x{10a}
+ 1: \x{10b}
+
+/The next two tests are for property support in non-UTF-8 mode/
+
+/(?:\p{Lu}|\x20)+/
+ \x41\x20\x50\xC2\x54\xC9\x20\x54\x4F\x44\x41\x59
+ 0: A P\xc2T\xc9 TODAY
+
+/[\p{Lu}\x20]+/
+ \x41\x20\x50\xC2\x54\xC9\x20\x54\x4F\x44\x41\x59
+ 0: A P\xc2T\xc9 TODAY
+
+/\p{Avestan}\p{Bamum}\p{Egyptian_Hieroglyphs}\p{Imperial_Aramaic}\p{Inscriptional_Pahlavi}\p{Inscriptional_Parthian}\p{Javanese}\p{Kaithi}\p{Lisu}\p{Meetei_Mayek}\p{Old_South_Arabian}\p{Old_Turkic}\p{Samaritan}\p{Tai_Tham}\p{Tai_Viet}/8
+ \x{10b00}\x{a6ef}\x{13007}\x{10857}\x{10b78}\x{10b58}\x{a980}\x{110c1}\x{a4ff}\x{abc0}\x{10a7d}\x{10c48}\x{0800}\x{1aad}\x{aac0}
+ 0: \x{10b00}\x{a6ef}\x{13007}\x{10857}\x{10b78}\x{10b58}\x{a980}\x{110c1}\x{a4ff}\x{abc0}\x{10a7d}\x{10c48}\x{800}\x{1aad}\x{aac0}
+
+/^\w+/8W
+ Az_\x{aa}\x{c0}\x{1c5}\x{2b0}\x{3b6}\x{1d7c9}\x{2fa1d}1\x{660}\x{bef}\x{16ee}
+ 0: Az_\x{aa}\x{c0}\x{1c5}\x{2b0}\x{3b6}\x{1d7c9}\x{2fa1d}1\x{660}\x{bef}\x{16ee}
+
+/^[[:xdigit:]]*/8W
+ 1a\x{660}\x{bef}\x{16ee}
+ 0: 1a
+
+/^\d+/8W
+ 1\x{660}\x{bef}\x{16ee}
+ 0: 1\x{660}\x{bef}
+
+/^[[:digit:]]+/8W
+ 1\x{660}\x{bef}\x{16ee}
+ 0: 1\x{660}\x{bef}
+
+/^>\s+/8W
+ >\x{20}\x{a0}\x{1680}\x{2028}\x{2029}\x{202f}\x{9}\x{b}
+ 0: > \x{a0}\x{1680}\x{2028}\x{2029}\x{202f}\x{09}
+
+/^>\pZ+/8W
+ >\x{20}\x{a0}\x{1680}\x{2028}\x{2029}\x{202f}\x{9}\x{b}
+ 0: > \x{a0}\x{1680}\x{2028}\x{2029}\x{202f}
+
+/^>[[:space:]]*/8W
+ >\x{20}\x{a0}\x{1680}\x{2028}\x{2029}\x{202f}\x{9}\x{b}
+ 0: > \x{a0}\x{1680}\x{2028}\x{2029}\x{202f}\x{09}\x{0b}
+
+/^>[[:blank:]]*/8W
+ >\x{20}\x{a0}\x{1680}\x{180e}\x{2000}\x{202f}\x{9}\x{b}\x{2028}
+ 0: > \x{a0}\x{1680}\x{180e}\x{2000}\x{202f}\x{09}
+
+/^[[:alpha:]]*/8W
+ Az\x{aa}\x{c0}\x{1c5}\x{2b0}\x{3b6}\x{1d7c9}\x{2fa1d}
+ 0: Az\x{aa}\x{c0}\x{1c5}\x{2b0}\x{3b6}\x{1d7c9}\x{2fa1d}
+
+/^[[:alnum:]]*/8W
+ Az\x{aa}\x{c0}\x{1c5}\x{2b0}\x{3b6}\x{1d7c9}\x{2fa1d}1\x{660}\x{bef}\x{16ee}
+ 0: Az\x{aa}\x{c0}\x{1c5}\x{2b0}\x{3b6}\x{1d7c9}\x{2fa1d}1\x{660}\x{bef}\x{16ee}
+
+/^[[:cntrl:]]*/8W
+ \x{0}\x{09}\x{1f}\x{7f}\x{9f}
+ 0: \x{00}\x{09}\x{1f}\x{7f}
+
+/^[[:graph:]]*/8W
+ A\x{a1}\x{a0}
+ 0: A
+
+/^[[:print:]]*/8W
+ A z\x{a0}\x{a1}
+ 0: A z
+
+/^[[:punct:]]*/8W
+ .+\x{a1}\x{a0}
+ 0: .+
+
+/\p{Zs}*?\R/
+ ** Failers
+No match
+ a\xFCb
+No match
+
+/\p{Zs}*\R/
+ ** Failers
+No match
+ a\xFCb
+No match
+
+/ⱥ/8i
+ ⱥ
+ 0: \x{2c65}
+ Ⱥx
+ 0: \x{23a}
+ Ⱥ
+ 0: \x{23a}
+
+/[ⱥ]/8i
+ ⱥ
+ 0: \x{2c65}
+ Ⱥx
+ 0: \x{23a}
+ Ⱥ
+ 0: \x{23a}
+
+/Ⱥ/8i
+ Ⱥ
+ 0: \x{23a}
+ ⱥ
+ 0: \x{2c65}
+
+/-- These are tests for extended grapheme clusters --/
+
+/^\X/8+
+ G\x{34e}\x{34e}X
+ 0: G\x{34e}\x{34e}
+ 0+ X
+ \x{34e}\x{34e}X
+ 0: \x{34e}\x{34e}
+ 0+ X
+ \x04X
+ 0: \x{04}
+ 0+ X
+ \x{1100}X
+ 0: \x{1100}
+ 0+ X
+ \x{1100}\x{34e}X
+ 0: \x{1100}\x{34e}
+ 0+ X
+ \x{1b04}\x{1b04}X
+ 0: \x{1b04}\x{1b04}
+ 0+ X
+ *These match up to the roman letters
+ 0: *
+ 0+ These match up to the roman letters
+ \x{1111}\x{1111}L,L
+ 0: \x{1111}\x{1111}
+ 0+ L,L
+ \x{1111}\x{1111}\x{1169}L,L,V
+ 0: \x{1111}\x{1111}\x{1169}
+ 0+ L,L,V
+ \x{1111}\x{ae4c}L, LV
+ 0: \x{1111}\x{ae4c}
+ 0+ L, LV
+ \x{1111}\x{ad89}L, LVT
+ 0: \x{1111}\x{ad89}
+ 0+ L, LVT
+ \x{1111}\x{ae4c}\x{1169}L, LV, V
+ 0: \x{1111}\x{ae4c}\x{1169}
+ 0+ L, LV, V
+ \x{1111}\x{ae4c}\x{1169}\x{1169}L, LV, V, V
+ 0: \x{1111}\x{ae4c}\x{1169}\x{1169}
+ 0+ L, LV, V, V
+ \x{1111}\x{ae4c}\x{1169}\x{11fe}L, LV, V, T
+ 0: \x{1111}\x{ae4c}\x{1169}\x{11fe}
+ 0+ L, LV, V, T
+ \x{1111}\x{ad89}\x{11fe}L, LVT, T
+ 0: \x{1111}\x{ad89}\x{11fe}
+ 0+ L, LVT, T
+ \x{1111}\x{ad89}\x{11fe}\x{11fe}L, LVT, T, T
+ 0: \x{1111}\x{ad89}\x{11fe}\x{11fe}
+ 0+ L, LVT, T, T
+ \x{ad89}\x{11fe}\x{11fe}LVT, T, T
+ 0: \x{ad89}\x{11fe}\x{11fe}
+ 0+ LVT, T, T
+ *These match just the first codepoint (invalid sequence)
+ 0: *
+ 0+ These match just the first codepoint (invalid sequence)
+ \x{1111}\x{11fe}L, T
+ 0: \x{1111}
+ 0+ \x{11fe}L, T
+ \x{ae4c}\x{1111}LV, L
+ 0: \x{ae4c}
+ 0+ \x{1111}LV, L
+ \x{ae4c}\x{ae4c}LV, LV
+ 0: \x{ae4c}
+ 0+ \x{ae4c}LV, LV
+ \x{ae4c}\x{ad89}LV, LVT
+ 0: \x{ae4c}
+ 0+ \x{ad89}LV, LVT
+ \x{1169}\x{1111}V, L
+ 0: \x{1169}
+ 0+ \x{1111}V, L
+ \x{1169}\x{ae4c}V, LV
+ 0: \x{1169}
+ 0+ \x{ae4c}V, LV
+ \x{1169}\x{ad89}V, LVT
+ 0: \x{1169}
+ 0+ \x{ad89}V, LVT
+ \x{ad89}\x{1111}LVT, L
+ 0: \x{ad89}
+ 0+ \x{1111}LVT, L
+ \x{ad89}\x{1169}LVT, V
+ 0: \x{ad89}
+ 0+ \x{1169}LVT, V
+ \x{ad89}\x{ae4c}LVT, LV
+ 0: \x{ad89}
+ 0+ \x{ae4c}LVT, LV
+ \x{ad89}\x{ad89}LVT, LVT
+ 0: \x{ad89}
+ 0+ \x{ad89}LVT, LVT
+ \x{11fe}\x{1111}T, L
+ 0: \x{11fe}
+ 0+ \x{1111}T, L
+ \x{11fe}\x{1169}T, V
+ 0: \x{11fe}
+ 0+ \x{1169}T, V
+ \x{11fe}\x{ae4c}T, LV
+ 0: \x{11fe}
+ 0+ \x{ae4c}T, LV
+ \x{11fe}\x{ad89}T, LVT
+ 0: \x{11fe}
+ 0+ \x{ad89}T, LVT
+ *Test extend and spacing mark
+ 0: *
+ 0+ Test extend and spacing mark
+ \x{1111}\x{ae4c}\x{0711}L, LV, extend
+ 0: \x{1111}\x{ae4c}\x{711}
+ 0+ L, LV, extend
+ \x{1111}\x{ae4c}\x{1b04}L, LV, spacing mark
+ 0: \x{1111}\x{ae4c}\x{1b04}
+ 0+ L, LV, spacing mark
+ \x{1111}\x{ae4c}\x{1b04}\x{0711}\x{1b04}L, LV, spacing mark, extend, spacing mark
+ 0: \x{1111}\x{ae4c}\x{1b04}\x{711}\x{1b04}
+ 0+ L, LV, spacing mark, extend, spacing mark
+ *Test CR, LF, and control
+ 0: *
+ 0+ Test CR, LF, and control
+ \x0d\x{0711}CR, extend
+ 0: \x{0d}
+ 0+ \x{711}CR, extend
+ \x0d\x{1b04}CR, spacingmark
+ 0: \x{0d}
+ 0+ \x{1b04}CR, spacingmark
+ \x0a\x{0711}LF, extend
+ 0: \x{0a}
+ 0+ \x{711}LF, extend
+ \x0a\x{1b04}LF, spacingmark
+ 0: \x{0a}
+ 0+ \x{1b04}LF, spacingmark
+ \x0b\x{0711}Control, extend
+ 0: \x{0b}
+ 0+ \x{711}Control, extend
+ \x09\x{1b04}Control, spacingmark
+ 0: \x{09}
+ 0+ \x{1b04}Control, spacingmark
+ *There are no Prepend characters, so we can't test Prepend, CR
+ 0: *
+ 0+ There are no Prepend characters, so we can't test Prepend, CR
+
+/^(?>\X{2})X/8+
+ \x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0: \x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0+
+
+/^\X{2,4}X/8+
+ \x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0: \x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0+
+ \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0: \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0+
+ \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0: \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0+
+
+/^\X{2,4}?X/8+
+ \x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0: \x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0+
+ \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0: \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0+
+ \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0: \x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
+ 0+
+
+/-- --/
+
+/\x{1e9e}+/8i
+ \x{1e9e}\x{00df}
+ 0: \x{1e9e}\x{df}
+
+/[z\x{1e9e}]+/8i
+ \x{1e9e}\x{00df}
+ 0: \x{1e9e}\x{df}
+
+/\x{00df}+/8i
+ \x{1e9e}\x{00df}
+ 0: \x{1e9e}\x{df}
+
+/[z\x{00df}]+/8i
+ \x{1e9e}\x{00df}
+ 0: \x{1e9e}\x{df}
+
+/\x{1f88}+/8i
+ \x{1f88}\x{1f80}
+ 0: \x{1f88}\x{1f80}
+
+/[z\x{1f88}]+/8i
+ \x{1f88}\x{1f80}
+ 0: \x{1f88}\x{1f80}
+
+/-- Characters with more than one other case; test in classes --/
+
+/[z\x{00b5}]+/8i
+ \x{00b5}\x{039c}\x{03bc}
+ 0: \x{b5}\x{39c}\x{3bc}
+
+/[z\x{039c}]+/8i
+ \x{00b5}\x{039c}\x{03bc}
+ 0: \x{b5}\x{39c}\x{3bc}
+
+/[z\x{03bc}]+/8i
+ \x{00b5}\x{039c}\x{03bc}
+ 0: \x{b5}\x{39c}\x{3bc}
+
+/[z\x{00c5}]+/8i
+ \x{00c5}\x{00e5}\x{212b}
+ 0: \x{c5}\x{e5}\x{212b}
+
+/[z\x{00e5}]+/8i
+ \x{00c5}\x{00e5}\x{212b}
+ 0: \x{c5}\x{e5}\x{212b}
+
+/[z\x{212b}]+/8i
+ \x{00c5}\x{00e5}\x{212b}
+ 0: \x{c5}\x{e5}\x{212b}
+
+/[z\x{01c4}]+/8i
+ \x{01c4}\x{01c5}\x{01c6}
+ 0: \x{1c4}\x{1c5}\x{1c6}
+
+/[z\x{01c5}]+/8i
+ \x{01c4}\x{01c5}\x{01c6}
+ 0: \x{1c4}\x{1c5}\x{1c6}
+
+/[z\x{01c6}]+/8i
+ \x{01c4}\x{01c5}\x{01c6}
+ 0: \x{1c4}\x{1c5}\x{1c6}
+
+/[z\x{01c7}]+/8i
+ \x{01c7}\x{01c8}\x{01c9}
+ 0: \x{1c7}\x{1c8}\x{1c9}
+
+/[z\x{01c8}]+/8i
+ \x{01c7}\x{01c8}\x{01c9}
+ 0: \x{1c7}\x{1c8}\x{1c9}
+
+/[z\x{01c9}]+/8i
+ \x{01c7}\x{01c8}\x{01c9}
+ 0: \x{1c7}\x{1c8}\x{1c9}
+
+/[z\x{01ca}]+/8i
+ \x{01ca}\x{01cb}\x{01cc}
+ 0: \x{1ca}\x{1cb}\x{1cc}
+
+/[z\x{01cb}]+/8i
+ \x{01ca}\x{01cb}\x{01cc}
+ 0: \x{1ca}\x{1cb}\x{1cc}
+
+/[z\x{01cc}]+/8i
+ \x{01ca}\x{01cb}\x{01cc}
+ 0: \x{1ca}\x{1cb}\x{1cc}
+
+/[z\x{01f1}]+/8i
+ \x{01f1}\x{01f2}\x{01f3}
+ 0: \x{1f1}\x{1f2}\x{1f3}
+
+/[z\x{01f2}]+/8i
+ \x{01f1}\x{01f2}\x{01f3}
+ 0: \x{1f1}\x{1f2}\x{1f3}
+
+/[z\x{01f3}]+/8i
+ \x{01f1}\x{01f2}\x{01f3}
+ 0: \x{1f1}\x{1f2}\x{1f3}
+
+/[z\x{0345}]+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+/[z\x{0399}]+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+/[z\x{03b9}]+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+/[z\x{1fbe}]+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+/[z\x{0392}]+/8i
+ \x{0392}\x{03b2}\x{03d0}
+ 0: \x{392}\x{3b2}\x{3d0}
+
+/[z\x{03b2}]+/8i
+ \x{0392}\x{03b2}\x{03d0}
+ 0: \x{392}\x{3b2}\x{3d0}
+
+/[z\x{03d0}]+/8i
+ \x{0392}\x{03b2}\x{03d0}
+ 0: \x{392}\x{3b2}\x{3d0}
+
+/[z\x{0395}]+/8i
+ \x{0395}\x{03b5}\x{03f5}
+ 0: \x{395}\x{3b5}\x{3f5}
+
+/[z\x{03b5}]+/8i
+ \x{0395}\x{03b5}\x{03f5}
+ 0: \x{395}\x{3b5}\x{3f5}
+
+/[z\x{03f5}]+/8i
+ \x{0395}\x{03b5}\x{03f5}
+ 0: \x{395}\x{3b5}\x{3f5}
+
+/[z\x{0398}]+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+/[z\x{03b8}]+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+/[z\x{03d1}]+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+/[z\x{03f4}]+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+/[z\x{039a}]+/8i
+ \x{039a}\x{03ba}\x{03f0}
+ 0: \x{39a}\x{3ba}\x{3f0}
+
+/[z\x{03ba}]+/8i
+ \x{039a}\x{03ba}\x{03f0}
+ 0: \x{39a}\x{3ba}\x{3f0}
+
+/[z\x{03f0}]+/8i
+ \x{039a}\x{03ba}\x{03f0}
+ 0: \x{39a}\x{3ba}\x{3f0}
+
+/[z\x{03a0}]+/8i
+ \x{03a0}\x{03c0}\x{03d6}
+ 0: \x{3a0}\x{3c0}\x{3d6}
+
+/[z\x{03c0}]+/8i
+ \x{03a0}\x{03c0}\x{03d6}
+ 0: \x{3a0}\x{3c0}\x{3d6}
+
+/[z\x{03d6}]+/8i
+ \x{03a0}\x{03c0}\x{03d6}
+ 0: \x{3a0}\x{3c0}\x{3d6}
+
+/[z\x{03a1}]+/8i
+ \x{03a1}\x{03c1}\x{03f1}
+ 0: \x{3a1}\x{3c1}\x{3f1}
+
+/[z\x{03c1}]+/8i
+ \x{03a1}\x{03c1}\x{03f1}
+ 0: \x{3a1}\x{3c1}\x{3f1}
+
+/[z\x{03f1}]+/8i
+ \x{03a1}\x{03c1}\x{03f1}
+ 0: \x{3a1}\x{3c1}\x{3f1}
+
+/[z\x{03a3}]+/8i
+ \x{03A3}\x{03C2}\x{03C3}
+ 0: \x{3a3}\x{3c2}\x{3c3}
+
+/[z\x{03c2}]+/8i
+ \x{03A3}\x{03C2}\x{03C3}
+ 0: \x{3a3}\x{3c2}\x{3c3}
+
+/[z\x{03c3}]+/8i
+ \x{03A3}\x{03C2}\x{03C3}
+ 0: \x{3a3}\x{3c2}\x{3c3}
+
+/[z\x{03a6}]+/8i
+ \x{03a6}\x{03c6}\x{03d5}
+ 0: \x{3a6}\x{3c6}\x{3d5}
+
+/[z\x{03c6}]+/8i
+ \x{03a6}\x{03c6}\x{03d5}
+ 0: \x{3a6}\x{3c6}\x{3d5}
+
+/[z\x{03d5}]+/8i
+ \x{03a6}\x{03c6}\x{03d5}
+ 0: \x{3a6}\x{3c6}\x{3d5}
+
+/[z\x{03c9}]+/8i
+ \x{03c9}\x{03a9}\x{2126}
+ 0: \x{3c9}\x{3a9}\x{2126}
+
+/[z\x{03a9}]+/8i
+ \x{03c9}\x{03a9}\x{2126}
+ 0: \x{3c9}\x{3a9}\x{2126}
+
+/[z\x{2126}]+/8i
+ \x{03c9}\x{03a9}\x{2126}
+ 0: \x{3c9}\x{3a9}\x{2126}
+
+/[z\x{1e60}]+/8i
+ \x{1e60}\x{1e61}\x{1e9b}
+ 0: \x{1e60}\x{1e61}\x{1e9b}
+
+/[z\x{1e61}]+/8i
+ \x{1e60}\x{1e61}\x{1e9b}
+ 0: \x{1e60}\x{1e61}\x{1e9b}
+
+/[z\x{1e9b}]+/8i
+ \x{1e60}\x{1e61}\x{1e9b}
+ 0: \x{1e60}\x{1e61}\x{1e9b}
+
+/-- Perl 5.12.4 gets these wrong, but 5.15.3 is OK --/
+
+/[z\x{004b}]+/8i
+ \x{004b}\x{006b}\x{212a}
+ 0: Kk\x{212a}
+
+/[z\x{006b}]+/8i
+ \x{004b}\x{006b}\x{212a}
+ 0: Kk\x{212a}
+
+/[z\x{212a}]+/8i
+ \x{004b}\x{006b}\x{212a}
+ 0: Kk\x{212a}
+
+/[z\x{0053}]+/8i
+ \x{0053}\x{0073}\x{017f}
+ 0: Ss\x{17f}
+
+/[z\x{0073}]+/8i
+ \x{0053}\x{0073}\x{017f}
+ 0: Ss\x{17f}
+
+/[z\x{017f}]+/8i
+ \x{0053}\x{0073}\x{017f}
+ 0: Ss\x{17f}
+
+/-- --/
+
+/(ΣΆΜΟΣ) \1/8i
+ ΣΆΜΟΣ ΣΆΜΟΣ
+ 0: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3} \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ 1: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ ΣΆΜΟΣ σάμος
+ 0: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3} \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ 1: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ σάμος σάμος
+ 0: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2} \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ 1: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ σάμος σάμοσ
+ 0: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2} \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c3}
+ 1: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ σάμος ΣΆΜΟΣ
+ 0: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2} \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ 1: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+
+/(σάμος) \1/8i
+ ΣΆΜΟΣ ΣΆΜΟΣ
+ 0: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3} \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ 1: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ ΣΆΜΟΣ σάμος
+ 0: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3} \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ 1: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ σάμος σάμος
+ 0: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2} \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ 1: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ σάμος σάμοσ
+ 0: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2} \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c3}
+ 1: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ σάμος ΣΆΜΟΣ
+ 0: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2} \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ 1: \x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+
+/(ΣΆΜΟΣ) \1*/8i
+ ΣΆΜΟΣ\x20
+ 0: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ 1: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+ ΣΆΜΟΣ ΣΆΜΟΣσάμοςσάμος
+ 0: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3} \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}\x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}\x{3c3}\x{3ac}\x{3bc}\x{3bf}\x{3c2}
+ 1: \x{3a3}\x{386}\x{39c}\x{39f}\x{3a3}
+
+/-- Perl matches these --/
+
+/\x{00b5}+/8i
+ \x{00b5}\x{039c}\x{03bc}
+ 0: \x{b5}\x{39c}\x{3bc}
+
+/\x{039c}+/8i
+ \x{00b5}\x{039c}\x{03bc}
+ 0: \x{b5}\x{39c}\x{3bc}
+
+/\x{03bc}+/8i
+ \x{00b5}\x{039c}\x{03bc}
+ 0: \x{b5}\x{39c}\x{3bc}
+
+
+/\x{00c5}+/8i
+ \x{00c5}\x{00e5}\x{212b}
+ 0: \x{c5}\x{e5}\x{212b}
+
+/\x{00e5}+/8i
+ \x{00c5}\x{00e5}\x{212b}
+ 0: \x{c5}\x{e5}\x{212b}
+
+/\x{212b}+/8i
+ \x{00c5}\x{00e5}\x{212b}
+ 0: \x{c5}\x{e5}\x{212b}
+
+
+/\x{01c4}+/8i
+ \x{01c4}\x{01c5}\x{01c6}
+ 0: \x{1c4}\x{1c5}\x{1c6}
+
+/\x{01c5}+/8i
+ \x{01c4}\x{01c5}\x{01c6}
+ 0: \x{1c4}\x{1c5}\x{1c6}
+
+/\x{01c6}+/8i
+ \x{01c4}\x{01c5}\x{01c6}
+ 0: \x{1c4}\x{1c5}\x{1c6}
+
+
+/\x{01c7}+/8i
+ \x{01c7}\x{01c8}\x{01c9}
+ 0: \x{1c7}\x{1c8}\x{1c9}
+
+/\x{01c8}+/8i
+ \x{01c7}\x{01c8}\x{01c9}
+ 0: \x{1c7}\x{1c8}\x{1c9}
+
+/\x{01c9}+/8i
+ \x{01c7}\x{01c8}\x{01c9}
+ 0: \x{1c7}\x{1c8}\x{1c9}
+
+
+/\x{01ca}+/8i
+ \x{01ca}\x{01cb}\x{01cc}
+ 0: \x{1ca}\x{1cb}\x{1cc}
+
+/\x{01cb}+/8i
+ \x{01ca}\x{01cb}\x{01cc}
+ 0: \x{1ca}\x{1cb}\x{1cc}
+
+/\x{01cc}+/8i
+ \x{01ca}\x{01cb}\x{01cc}
+ 0: \x{1ca}\x{1cb}\x{1cc}
+
+
+/\x{01f1}+/8i
+ \x{01f1}\x{01f2}\x{01f3}
+ 0: \x{1f1}\x{1f2}\x{1f3}
+
+/\x{01f2}+/8i
+ \x{01f1}\x{01f2}\x{01f3}
+ 0: \x{1f1}\x{1f2}\x{1f3}
+
+/\x{01f3}+/8i
+ \x{01f1}\x{01f2}\x{01f3}
+ 0: \x{1f1}\x{1f2}\x{1f3}
+
+
+/\x{0345}+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+/\x{0399}+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+/\x{03b9}+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+/\x{1fbe}+/8i
+ \x{0345}\x{0399}\x{03b9}\x{1fbe}
+ 0: \x{345}\x{399}\x{3b9}\x{1fbe}
+
+
+/\x{0392}+/8i
+ \x{0392}\x{03b2}\x{03d0}
+ 0: \x{392}\x{3b2}\x{3d0}
+
+/\x{03b2}+/8i
+ \x{0392}\x{03b2}\x{03d0}
+ 0: \x{392}\x{3b2}\x{3d0}
+
+/\x{03d0}+/8i
+ \x{0392}\x{03b2}\x{03d0}
+ 0: \x{392}\x{3b2}\x{3d0}
+
+
+/\x{0395}+/8i
+ \x{0395}\x{03b5}\x{03f5}
+ 0: \x{395}\x{3b5}\x{3f5}
+
+/\x{03b5}+/8i
+ \x{0395}\x{03b5}\x{03f5}
+ 0: \x{395}\x{3b5}\x{3f5}
+
+/\x{03f5}+/8i
+ \x{0395}\x{03b5}\x{03f5}
+ 0: \x{395}\x{3b5}\x{3f5}
+
+
+/\x{0398}+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+/\x{03b8}+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+/\x{03d1}+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+/\x{03f4}+/8i
+ \x{0398}\x{03b8}\x{03d1}\x{03f4}
+ 0: \x{398}\x{3b8}\x{3d1}\x{3f4}
+
+
+/\x{039a}+/8i
+ \x{039a}\x{03ba}\x{03f0}
+ 0: \x{39a}\x{3ba}\x{3f0}
+
+/\x{03ba}+/8i
+ \x{039a}\x{03ba}\x{03f0}
+ 0: \x{39a}\x{3ba}\x{3f0}
+
+/\x{03f0}+/8i
+ \x{039a}\x{03ba}\x{03f0}
+ 0: \x{39a}\x{3ba}\x{3f0}
+
+
+/\x{03a0}+/8i
+ \x{03a0}\x{03c0}\x{03d6}
+ 0: \x{3a0}\x{3c0}\x{3d6}
+
+/\x{03c0}+/8i
+ \x{03a0}\x{03c0}\x{03d6}
+ 0: \x{3a0}\x{3c0}\x{3d6}
+
+/\x{03d6}+/8i
+ \x{03a0}\x{03c0}\x{03d6}
+ 0: \x{3a0}\x{3c0}\x{3d6}
+
+
+/\x{03a1}+/8i
+ \x{03a1}\x{03c1}\x{03f1}
+ 0: \x{3a1}\x{3c1}\x{3f1}
+
+/\x{03c1}+/8i
+ \x{03a1}\x{03c1}\x{03f1}
+ 0: \x{3a1}\x{3c1}\x{3f1}
+
+/\x{03f1}+/8i
+ \x{03a1}\x{03c1}\x{03f1}
+ 0: \x{3a1}\x{3c1}\x{3f1}
+
+
+/\x{03a3}+/8i
+ \x{03A3}\x{03C2}\x{03C3}
+ 0: \x{3a3}\x{3c2}\x{3c3}
+
+/\x{03c2}+/8i
+ \x{03A3}\x{03C2}\x{03C3}
+ 0: \x{3a3}\x{3c2}\x{3c3}
+
+/\x{03c3}+/8i
+ \x{03A3}\x{03C2}\x{03C3}
+ 0: \x{3a3}\x{3c2}\x{3c3}
+
+
+/\x{03a6}+/8i
+ \x{03a6}\x{03c6}\x{03d5}
+ 0: \x{3a6}\x{3c6}\x{3d5}
+
+/\x{03c6}+/8i
+ \x{03a6}\x{03c6}\x{03d5}
+ 0: \x{3a6}\x{3c6}\x{3d5}
+
+/\x{03d5}+/8i
+ \x{03a6}\x{03c6}\x{03d5}
+ 0: \x{3a6}\x{3c6}\x{3d5}
+
+
+/\x{03c9}+/8i
+ \x{03c9}\x{03a9}\x{2126}
+ 0: \x{3c9}\x{3a9}\x{2126}
+
+/\x{03a9}+/8i
+ \x{03c9}\x{03a9}\x{2126}
+ 0: \x{3c9}\x{3a9}\x{2126}
+
+/\x{2126}+/8i
+ \x{03c9}\x{03a9}\x{2126}
+ 0: \x{3c9}\x{3a9}\x{2126}
+
+
+/\x{1e60}+/8i
+ \x{1e60}\x{1e61}\x{1e9b}
+ 0: \x{1e60}\x{1e61}\x{1e9b}
+
+/\x{1e61}+/8i
+ \x{1e60}\x{1e61}\x{1e9b}
+ 0: \x{1e60}\x{1e61}\x{1e9b}
+
+/\x{1e9b}+/8i
+ \x{1e60}\x{1e61}\x{1e9b}
+ 0: \x{1e60}\x{1e61}\x{1e9b}
+
+
+/\x{1e9e}+/8i
+ \x{1e9e}\x{00df}
+ 0: \x{1e9e}\x{df}
+
+/\x{00df}+/8i
+ \x{1e9e}\x{00df}
+ 0: \x{1e9e}\x{df}
+
+
+/\x{1f88}+/8i
+ \x{1f88}\x{1f80}
+ 0: \x{1f88}\x{1f80}
+
+/\x{1f80}+/8i
+ \x{1f88}\x{1f80}
+ 0: \x{1f88}\x{1f80}
+
+
+/-- Perl 5.12.4 gets these wrong, but 5.15.3 is OK --/
+
+/\x{004b}+/8i
+ \x{004b}\x{006b}\x{212a}
+ 0: Kk\x{212a}
+
+/\x{006b}+/8i
+ \x{004b}\x{006b}\x{212a}
+ 0: Kk\x{212a}
+
+/\x{212a}+/8i
+ \x{004b}\x{006b}\x{212a}
+ 0: Kk\x{212a}
+
+
+/\x{0053}+/8i
+ \x{0053}\x{0073}\x{017f}
+ 0: Ss\x{17f}
+
+/\x{0073}+/8i
+ \x{0053}\x{0073}\x{017f}
+ 0: Ss\x{17f}
+
+/\x{017f}+/8i
+ \x{0053}\x{0073}\x{017f}
+ 0: Ss\x{17f}
+
+/^\p{Any}*\d{4}/8
+ 1234
+ 0: 1234
+ 123
+No match
+
+/^\X*\w{4}/8
+ 1234
+ 0: 1234
+ 123
+No match
-/\p{Zl}/8BZ
-------------------------------------------------------------------
- Bra
- prop Zl
- Ket
- End
-------------------------------------------------------------------
-
-/\p{Lu}{3}+/8BZ
-------------------------------------------------------------------
- Bra
- prop Lu {3}
- Ket
- End
-------------------------------------------------------------------
-
-/\pL{2}+/8BZ
-------------------------------------------------------------------
- Bra
- prop L {2}
- Ket
- End
-------------------------------------------------------------------
-
-/\p{Cc}{2}+/8BZ
-------------------------------------------------------------------
- Bra
- prop Cc {2}
- Ket
- End
-------------------------------------------------------------------
-
-/ End of testinput6 /
+/-- End of testinput6 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput7 b/lib/stdlib/test/re_SUITE_data/testoutput7
index d8e3833f39..ddd96fc2ed 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput7
+++ b/lib/stdlib/test/re_SUITE_data/testoutput7
@@ -1,7215 +1,1581 @@
-/abc/
- abc
- 0: abc
-
-/ab*c/
- abc
- 0: abc
- abbbbc
- 0: abbbbc
- ac
- 0: ac
-
-/ab+c/
- abc
- 0: abc
- abbbbbbc
- 0: abbbbbbc
- *** Failers
-No match
- ac
-No match
- ab
-No match
-
-/a*/
- a
- 0: a
- 1:
- aaaaaaaaaaaaaaaaa
- 0: aaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaa
- 5: aaaaaaaaaaaa
- 6: aaaaaaaaaaa
- 7: aaaaaaaaaa
- 8: aaaaaaaaa
- 9: aaaaaaaa
-10: aaaaaaa
-11: aaaaaa
-12: aaaaa
-13: aaaa
-14: aaa
-15: aa
-16: a
-17:
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-Matched, but too many subsidiary matches
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaaaaaaaaaaaaaaa
- 5: aaaaaaaaaaaaaaaaaaaaaaaaa
- 6: aaaaaaaaaaaaaaaaaaaaaaaa
- 7: aaaaaaaaaaaaaaaaaaaaaaa
- 8: aaaaaaaaaaaaaaaaaaaaaa
- 9: aaaaaaaaaaaaaaaaaaaaa
-10: aaaaaaaaaaaaaaaaaaaa
-11: aaaaaaaaaaaaaaaaaaa
-12: aaaaaaaaaaaaaaaaaa
-13: aaaaaaaaaaaaaaaaa
-14: aaaaaaaaaaaaaaaa
-15: aaaaaaaaaaaaaaa
-16: aaaaaaaaaaaaaa
-17: aaaaaaaaaaaaa
-18: aaaaaaaaaaaa
-19: aaaaaaaaaaa
-20: aaaaaaaaaa
-21: aaaaaaaaa
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\F
- 0:
-
-/(a|abcd|african)/
- a
- 0: a
- abcd
- 0: abcd
- 1: a
- african
- 0: african
- 1: a
-
-/^abc/
- abcdef
- 0: abc
- *** Failers
-No match
- xyzabc
-No match
- xyz\nabc
-No match
-
-/^abc/m
- abcdef
- 0: abc
- xyz\nabc
- 0: abc
- *** Failers
-No match
- xyzabc
-No match
-
-/\Aabc/
- abcdef
- 0: abc
- *** Failers
-No match
- xyzabc
-No match
- xyz\nabc
-No match
-
-/\Aabc/m
- abcdef
- 0: abc
- *** Failers
-No match
- xyzabc
-No match
- xyz\nabc
-No match
-
-/\Gabc/
- abcdef
- 0: abc
- xyzabc\>3
- 0: abc
- *** Failers
-No match
- xyzabc
-No match
- xyzabc\>2
-No match
-
-/x\dy\Dz/
- x9yzz
- 0: x9yzz
- x0y+z
- 0: x0y+z
- *** Failers
-No match
- xyz
-No match
- xxy0z
-No match
-
-/x\sy\Sz/
- x yzz
- 0: x yzz
- x y+z
- 0: x y+z
- *** Failers
-No match
- xyz
-No match
- xxyyz
-No match
-
-/x\wy\Wz/
- xxy+z
- 0: xxy+z
- *** Failers
-No match
- xxy0z
-No match
- x+y+z
-No match
-
-/x.y/
- x+y
- 0: x+y
- x-y
- 0: x-y
- *** Failers
-No match
- x\ny
-No match
-
-/x.y/s
- x+y
- 0: x+y
- x-y
- 0: x-y
- x\ny
- 0: x\x0ay
-
-/(a.b(?s)c.d|x.y)p.q/
- a+bc+dp+q
- 0: a+bc+dp+q
- a+bc\ndp+q
- 0: a+bc\x0adp+q
- x\nyp+q
- 0: x\x0ayp+q
- *** Failers
-No match
- a\nbc\ndp+q
-No match
- a+bc\ndp\nq
-No match
- x\nyp\nq
-No match
-
-/a\d\z/
- ba0
- 0: a0
- *** Failers
-No match
- ba0\n
-No match
- ba0\ncd
-No match
-
-/a\d\z/m
- ba0
- 0: a0
- *** Failers
-No match
- ba0\n
-No match
- ba0\ncd
-No match
-
-/a\d\Z/
- ba0
- 0: a0
- ba0\n
- 0: a0
- *** Failers
-No match
- ba0\ncd
-No match
+/-- These tests for Unicode property support test PCRE's API and show some of
+ the compiled code. They are not Perl-compatible. --/
+
+/[\p{L}]/DZ
+------------------------------------------------------------------
+ Bra
+ [\p{L}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+
+/[\p{^L}]/DZ
+------------------------------------------------------------------
+ Bra
+ [\P{L}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+
+/[\P{L}]/DZ
+------------------------------------------------------------------
+ Bra
+ [\P{L}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+
+/[\P{^L}]/DZ
+------------------------------------------------------------------
+ Bra
+ [\p{L}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+No options
+No first char
+No need char
+
+/[abc\p{L}\x{0660}]/8DZ
+------------------------------------------------------------------
+ Bra
+ [a-c\p{L}\x{660}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+No first char
+No need char
+
+/[\p{Nd}]/8DZ
+------------------------------------------------------------------
+ Bra
+ [\p{Nd}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+No first char
+No need char
+ 1234
+ 0: 1
-/a\d\Z/m
- ba0
- 0: a0
- ba0\n
- 0: a0
- *** Failers
+/[\p{Nd}+-]+/8DZ
+------------------------------------------------------------------
+ Bra
+ [+\-\p{Nd}]+
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+No first char
+No need char
+ 1234
+ 0: 1234
+ 12-34
+ 0: 12-34
+ 12+\x{661}-34
+ 0: 12+\x{661}-34
+ ** Failers
No match
- ba0\ncd
+ abcd
No match
-/a\d$/
- ba0
- 0: a0
- ba0\n
- 0: a0
- *** Failers
+/[\x{105}-\x{109}]/8iDZ
+------------------------------------------------------------------
+ Bra
+ [\x{104}-\x{109}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+ \x{104}
+ 0: \x{104}
+ \x{105}
+ 0: \x{105}
+ \x{109}
+ 0: \x{109}
+ ** Failers
No match
- ba0\ncd
+ \x{100}
No match
-
-/a\d$/m
- ba0
- 0: a0
- ba0\n
- 0: a0
- ba0\ncd
- 0: a0
- *** Failers
+ \x{10a}
No match
-
-/abc/i
- abc
- 0: abc
- aBc
- 0: aBc
- ABC
- 0: ABC
-/[^a]/
- abcd
- 0: b
-
-/ab?\w/
- abz
- 0: abz
- 1: ab
- abbz
- 0: abb
- 1: ab
- azz
- 0: az
-
-/x{0,3}yz/
- ayzq
- 0: yz
- axyzq
- 0: xyz
- axxyz
- 0: xxyz
- axxxyzq
- 0: xxxyz
- axxxxyzq
- 0: xxxyz
- *** Failers
-No match
- ax
-No match
- axx
-No match
-
-/x{3}yz/
- axxxyzq
- 0: xxxyz
- axxxxyzq
- 0: xxxyz
- *** Failers
-No match
- ax
-No match
- axx
-No match
- ayzq
-No match
- axyzq
-No match
- axxyz
-No match
-
-/x{2,3}yz/
- axxyz
- 0: xxyz
- axxxyzq
- 0: xxxyz
- axxxxyzq
- 0: xxxyz
- *** Failers
-No match
- ax
-No match
- axx
+/[z-\x{100}]/8iDZ
+------------------------------------------------------------------
+ Bra
+ [Z\x{39c}\x{3bc}\x{1e9e}\x{178}z-\x{101}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+ Z
+ 0: Z
+ z
+ 0: z
+ \x{39c}
+ 0: \x{39c}
+ \x{178}
+ 0: \x{178}
+ |
+ 0: |
+ \x{80}
+ 0: \x{80}
+ \x{ff}
+ 0: \x{ff}
+ \x{100}
+ 0: \x{100}
+ \x{101}
+ 0: \x{101}
+ ** Failers
No match
- ayzq
+ \x{102}
No match
- axyzq
+ Y
No match
-
-/[^a]+/
- bac
- 0: b
- bcdefax
- 0: bcdef
- 1: bcde
- 2: bcd
- 3: bc
- 4: b
- *** Failers
- 0: *** F
- 1: ***
- 2: ***
- 3: **
- 4: *
- aaaaa
+ y
No match
-/[^a]*/
- bac
- 0: b
- 1:
- bcdefax
- 0: bcdef
- 1: bcde
- 2: bcd
- 3: bc
- 4: b
- 5:
- *** Failers
- 0: *** F
- 1: ***
- 2: ***
- 3: **
- 4: *
- 5:
- aaaaa
- 0:
-
-/[^a]{3,5}/
- xyz
- 0: xyz
- awxyza
- 0: wxyz
- 1: wxy
- abcdefa
- 0: bcdef
- 1: bcde
- 2: bcd
- abcdefghijk
- 0: bcdef
- 1: bcde
- 2: bcd
- *** Failers
- 0: *** F
- 1: ***
- 2: ***
- axya
-No match
- axa
-No match
- aaaaa
-No match
+/[z-\x{100}]/8DZi
+------------------------------------------------------------------
+ Bra
+ [Z\x{39c}\x{3bc}\x{1e9e}\x{178}z-\x{101}]
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
-/\d*/
- 1234b567
- 0: 1234
- 1: 123
- 2: 12
- 3: 1
- 4:
- xyz
- 0:
-
-/\D*/
- a1234b567
- 0: a
- 1:
- xyz
- 0: xyz
- 1: xy
- 2: x
- 3:
-
-/\d+/
- ab1234c56
- 0: 1234
- 1: 123
- 2: 12
- 3: 1
- *** Failers
-No match
- xyz
-No match
-
-/\D+/
- ab123c56
- 0: ab
- 1: a
- *** Failers
- 0: *** Failers
- 1: *** Failer
- 2: *** Faile
- 3: *** Fail
- 4: *** Fai
- 5: *** Fa
- 6: *** F
- 7: ***
- 8: ***
- 9: **
-10: *
- 789
-No match
-
-/\d?A/
- 045ABC
- 0: 5A
- ABC
- 0: A
- *** Failers
-No match
- XYZ
-No match
-
-/\D?A/
- ABC
- 0: A
- BAC
- 0: BA
- 9ABC
- 0: A
- *** Failers
-No match
+/(?:[\PPa*]*){8,}/
-/a+/
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
-
-/^.*xyz/
- xyz
- 0: xyz
- ggggggggxyz
- 0: ggggggggxyz
-
-/^.+xyz/
- abcdxyz
- 0: abcdxyz
- axyz
- 0: axyz
- *** Failers
-No match
- xyz
-No match
-
-/^.?xyz/
- xyz
- 0: xyz
- cxyz
- 0: cxyz
-
-/^\d{2,3}X/
- 12X
- 0: 12X
- 123X
- 0: 123X
- *** Failers
-No match
- X
-No match
- 1X
-No match
- 1234X
-No match
+/[\P{Any}]/BZ
+------------------------------------------------------------------
+ Bra
+ [\P{Any}]
+ Ket
+ End
+------------------------------------------------------------------
-/^[abcd]\d/
- a45
- 0: a4
- b93
- 0: b9
- c99z
- 0: c9
- d04
- 0: d0
- *** Failers
-No match
- e45
-No match
- abcd
-No match
- abcd1234
-No match
- 1234
-No match
+/[\P{Any}\E]/BZ
+------------------------------------------------------------------
+ Bra
+ [\P{Any}]
+ Ket
+ End
+------------------------------------------------------------------
-/^[abcd]*\d/
- a45
- 0: a4
- b93
- 0: b9
- c99z
- 0: c9
- d04
- 0: d0
- abcd1234
- 0: abcd1
- 1234
- 0: 1
- *** Failers
-No match
- e45
-No match
- abcd
-No match
+/(\P{Yi}+\277)/
-/^[abcd]+\d/
- a45
- 0: a4
- b93
- 0: b9
- c99z
- 0: c9
- d04
- 0: d0
- abcd1234
- 0: abcd1
- *** Failers
-No match
- 1234
-No match
- e45
-No match
- abcd
-No match
+/(\P{Yi}+\277)?/
-/^a+X/
- aX
- 0: aX
- aaX
- 0: aaX
-
-/^[abcd]?\d/
- a45
- 0: a4
- b93
- 0: b9
- c99z
- 0: c9
- d04
- 0: d0
- 1234
- 0: 1
- *** Failers
-No match
- abcd1234
-No match
- e45
-No match
+/(?<=\P{Yi}{3}A)X/
-/^[abcd]{2,3}\d/
- ab45
- 0: ab4
- bcd93
- 0: bcd9
- *** Failers
-No match
- 1234
-No match
- a36
-No match
- abcd1234
-No match
- ee45
-No match
+/\p{Yi}+(\P{Yi}+)(?1)/
-/^(abc)*\d/
- abc45
- 0: abc4
- abcabcabc45
- 0: abcabcabc4
- 42xyz
- 0: 4
- *** Failers
-No match
+/(\P{Yi}{2}\277)?/
-/^(abc)+\d/
- abc45
- 0: abc4
- abcabcabc45
- 0: abcabcabc4
- *** Failers
-No match
- 42xyz
-No match
+/[\P{Yi}A]/
-/^(abc)?\d/
- abc45
- 0: abc4
- 42xyz
- 0: 4
- *** Failers
-No match
- abcabcabc45
-No match
+/[\P{Yi}\P{Yi}\P{Yi}A]/
-/^(abc){2,3}\d/
- abcabc45
- 0: abcabc4
- abcabcabc45
- 0: abcabcabc4
- *** Failers
-No match
- abcabcabcabc45
-No match
- abc45
-No match
- 42xyz
-No match
+/[^\P{Yi}A]/
-/1(abc|xyz)2(?1)3/
- 1abc2abc3456
- 0: 1abc2abc3
- 1abc2xyz3456
- 0: 1abc2xyz3
+/[^\P{Yi}\P{Yi}\P{Yi}A]/
-/^(a*\w|ab)=(a*\w|ab)/
- ab=ab
- 0: ab=ab
- 1: ab=a
+/(\P{Yi}*\277)*/
-/^(a*\w|ab)=(?1)/
- ab=ab
- 0: ab=ab
+/(\P{Yi}*?\277)*/
-/^([^()]|\((?1)*\))*$/
- abc
- 0: abc
- a(b)c
- 0: a(b)c
- a(b(c))d
- 0: a(b(c))d
- *** Failers)
-No match
- a(b(c)d
-No match
+/(\p{Yi}*+\277)*/
-/^>abc>([^()]|\((?1)*\))*<xyz<$/
- >abc>123<xyz<
- 0: >abc>123<xyz<
- >abc>1(2)3<xyz<
- 0: >abc>1(2)3<xyz<
- >abc>(1(2)3)<xyz<
- 0: >abc>(1(2)3)<xyz<
-
-/^(?>a*)\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9
- *** Failers
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
+/(\P{Yi}?\277)*/
-/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/x
- <>
- 0: <>
- <abcd>
- 0: <abcd>
- <abc <123> hij>
- 0: <abc <123> hij>
- <abc <def> hij>
- 0: <def>
- <abc<>def>
- 0: <abc<>def>
- <abc<>
- 0: <>
- *** Failers
-No match
- <abc
-No match
+/(\P{Yi}??\277)*/
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
-
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
+/(\p{Yi}?+\277)*/
-/^(?=abc)\w{5}:$/
- abcde:
- 0: abcde:
- *** Failers
-No match
- abc..
-No match
- 123
-No match
- vwxyz
-No match
-
-/^(?!abc)\d\d$/
- 12
- 0: 12
- *** Failers
-No match
- abcde:
-No match
- abc..
-No match
- 123
-No match
- vwxyz
-No match
+/(\P{Yi}{0,3}\277)*/
-/(?<=abc|xy)123/
- abc12345
- 0: 123
- wxy123z
- 0: 123
- *** Failers
-No match
- 123abc
-No match
+/(\P{Yi}{0,3}?\277)*/
-/(?<!abc|xy)123/
- 123abc
- 0: 123
- mno123456
- 0: 123
- *** Failers
-No match
- abc12345
-No match
- wxy123z
-No match
-
-/abc(?C1)xyz/
- abcxyz
---->abcxyz
- 1 ^ ^ x
- 0: abcxyz
- 123abcxyz999
---->123abcxyz999
- 1 ^ ^ x
- 0: abcxyz
-
-/(ab|cd){3,4}/C
- ababab
---->ababab
- +0 ^ (ab|cd){3,4}
- +1 ^ a
- +4 ^ c
- +2 ^^ b
- +3 ^ ^ |
- +1 ^ ^ a
- +4 ^ ^ c
- +2 ^ ^ b
- +3 ^ ^ |
- +1 ^ ^ a
- +4 ^ ^ c
- +2 ^ ^ b
- +3 ^ ^ |
-+12 ^ ^
- +1 ^ ^ a
- +4 ^ ^ c
- 0: ababab
- abcdabcd
---->abcdabcd
- +0 ^ (ab|cd){3,4}
- +1 ^ a
- +4 ^ c
- +2 ^^ b
- +3 ^ ^ |
- +1 ^ ^ a
- +4 ^ ^ c
- +5 ^ ^ d
- +6 ^ ^ )
- +1 ^ ^ a
- +4 ^ ^ c
- +2 ^ ^ b
- +3 ^ ^ |
-+12 ^ ^
- +1 ^ ^ a
- +4 ^ ^ c
- +5 ^ ^ d
- +6 ^ ^ )
-+12 ^ ^
- 0: abcdabcd
- 1: abcdab
- abcdcdcdcdcd
---->abcdcdcdcdcd
- +0 ^ (ab|cd){3,4}
- +1 ^ a
- +4 ^ c
- +2 ^^ b
- +3 ^ ^ |
- +1 ^ ^ a
- +4 ^ ^ c
- +5 ^ ^ d
- +6 ^ ^ )
- +1 ^ ^ a
- +4 ^ ^ c
- +5 ^ ^ d
- +6 ^ ^ )
-+12 ^ ^
- +1 ^ ^ a
- +4 ^ ^ c
- +5 ^ ^ d
- +6 ^ ^ )
-+12 ^ ^
- 0: abcdcdcd
- 1: abcdcd
-
-/^abc/
- abcdef
- 0: abc
- *** Failers
-No match
- abcdef\B
-No match
+/(\p{Yi}{0,3}+\277)*/
-/^(a*|xyz)/
- bcd
- 0:
- aaabcd
- 0: aaa
- 1: aa
- 2: a
- 3:
- xyz
- 0: xyz
- 1:
- xyz\N
- 0: xyz
- *** Failers
- 0:
- bcd\N
-No match
+/\p{Zl}{2,3}+/8BZ
+------------------------------------------------------------------
+ Bra
+ prop Zl {2}
+ prop Zl ?+
+ Ket
+ End
+------------------------------------------------------------------
+ 


+ 0: \x{2028}\x{2028}
+ \x{2028}\x{2028}\x{2028}
+ 0: \x{2028}\x{2028}\x{2028}
-/xyz$/
- xyz
- 0: xyz
- xyz\n
- 0: xyz
- *** Failers
-No match
- xyz\Z
-No match
- xyz\n\Z
-No match
-
-/xyz$/m
- xyz
- 0: xyz
- xyz\n
- 0: xyz
- abcxyz\npqr
- 0: xyz
- abcxyz\npqr\Z
- 0: xyz
- xyz\n\Z
- 0: xyz
- *** Failers
-No match
- xyz\Z
-No match
+/\p{Zl}/8BZ
+------------------------------------------------------------------
+ Bra
+ prop Zl
+ Ket
+ End
+------------------------------------------------------------------
-/\Gabc/
- abcdef
- 0: abc
- defabcxyz\>3
- 0: abc
- *** Failers
-No match
- defabcxyz
-No match
+/\p{Lu}{3}+/8BZ
+------------------------------------------------------------------
+ Bra
+ prop Lu {3}
+ Ket
+ End
+------------------------------------------------------------------
-/^abcdef/
- ab\P
-Partial match: ab
- abcde\P
-Partial match: abcde
- abcdef\P
- 0: abcdef
- *** Failers
-No match
- abx\P
-No match
+/\pL{2}+/8BZ
+------------------------------------------------------------------
+ Bra
+ prop L {2}
+ Ket
+ End
+------------------------------------------------------------------
-/^a{2,4}\d+z/
- a\P
-Partial match: a
- aa\P
-Partial match: aa
- aa2\P
-Partial match: aa2
- aaa\P
-Partial match: aaa
- aaa23\P
-Partial match: aaa23
- aaaa12345\P
-Partial match: aaaa12345
- aa0z\P
- 0: aa0z
- aaaa4444444444444z\P
- 0: aaaa4444444444444z
- *** Failers
-No match
- az\P
-No match
- aaaaa\P
-No match
- a56\P
-No match
+/\p{Cc}{2}+/8BZ
+------------------------------------------------------------------
+ Bra
+ prop Cc {2}
+ Ket
+ End
+------------------------------------------------------------------
-/^abcdef/
- abc\P
-Partial match: abc
- def\R
- 0: def
-
-/(?<=foo)bar/
- xyzfo\P
-No match
- foob\P\>2
-Partial match: b
- foobar...\R\P\>4
- 0: ar
- xyzfo\P
-No match
- foobar\>2
- 0: bar
- *** Failers
-No match
- xyzfo\P
-No match
- obar\R
-No match
-
-/(ab*(cd|ef))+X/
- adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\P\Z
-No match
- lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\P\B\Z
-Partial match: abbbbbbcdaefabbbbbbbefa
- cdabbbbbbbb\P\R\B\Z
-Partial match: cdabbbbbbbb
- efabbbbbbbbbbbbbbbb\P\R\B\Z
-Partial match: efabbbbbbbbbbbbbbbb
- bbbbbbbbbbbbcdXyasdfadf\P\R\B\Z
- 0: bbbbbbbbbbbbcdX
-
-/(a|b)/SF>testsavedregex
-Compiled regex written to testsavedregex
-Study data written to testsavedregex
-<testsavedregex
-Compiled regex (byte-inverted) loaded from testsavedregex
-Study data loaded from testsavedregex
- abc
- 0: a
+/^\p{Cs}/8
+ \?\x{dfff}
+ 0: \x{dfff}
** Failers
- 0: a
- def
-No match
-
-/the quick brown fox/
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
-No match
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
-No match
-
-/The quick brown fox/i
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
- 0: The quick brown FOX
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
- 0: THE QUICK BROWN FOX
-
-/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
- 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
-
-/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- 0: aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- 0: aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- 0: aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- 0: aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- 0: abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- 0: aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- 0: abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- 0: aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- 0: aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- 0: aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- *** Failers
-No match
- abxyzpqrrabbxyyyypqAzz
-No match
- abxyzpqrrrrabbxyyyypqAzz
-No match
- abxyzpqrrrabxyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
-No match
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
-No match
-
-/^(abc){1,2}zz/
- abczz
- 0: abczz
- abcabczz
- 0: abcabczz
- *** Failers
-No match
- zz
-No match
- abcabcabczz
-No match
- >>abczz
-No match
-
-/^(b+?|a){1,2}?c/
- bc
- 0: bc
- bbc
- 0: bbc
- bbbc
- 0: bbbc
- bac
- 0: bac
- bbac
- 0: bbac
- aac
- 0: aac
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}c/
- bc
- 0: bc
- bbc
- 0: bbc
- bbbc
- 0: bbbc
- bac
- 0: bac
- bbac
- 0: bbac
- aac
- 0: aac
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}?bc/
- bbc
- 0: bbc
-
-/^(b*|ba){1,2}?bc/
- babc
- 0: babc
- bbabc
- 0: bbabc
- bababc
- 0: bababc
- *** Failers
No match
- bababbc
+ \x{09f}
No match
- babababc
-No match
-
-/^(ba|b*){1,2}?bc/
- babc
- 0: babc
- bbabc
- 0: bbabc
- bababc
- 0: bababc
- *** Failers
-No match
- bababbc
-No match
- babababc
-No match
-
-/^\ca\cA\c[\c{\c:/
- \x01\x01\e;z
- 0: \x01\x01\x1b;z
-
-/^[ab\]cde]/
- athing
- 0: a
- bthing
- 0: b
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- fthing
-No match
- [thing
-No match
- \\thing
-No match
-
-/^[]cde]/
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- athing
-No match
- fthing
-No match
-
-/^[^ab\]cde]/
- fthing
- 0: f
- [thing
- 0: [
- \\thing
- 0: \
- *** Failers
- 0: *
- athing
+
+/^\p{Sc}+/8
+ $\x{a2}\x{a3}\x{a4}\x{a5}\x{a6}
+ 0: $\x{a2}\x{a3}\x{a4}\x{a5}
+ \x{9f2}
+ 0: \x{9f2}
+ ** Failers
No match
- bthing
+ X
No match
- ]thing
+ \x{2c2}
No match
- cthing
+
+/^\p{Zs}/8
+ \ \
+ 0:
+ \x{a0}
+ 0: \x{a0}
+ \x{1680}
+ 0: \x{1680}
+ \x{180e}
+ 0: \x{180e}
+ \x{2000}
+ 0: \x{2000}
+ \x{2001}
+ 0: \x{2001}
+ ** Failers
No match
- dthing
+ \x{2028}
No match
- ething
+ \x{200d}
No match
-
-/^[^]cde]/
- athing
- 0: a
- fthing
- 0: f
- *** Failers
+
+/-- These four are here rather than in test 6 because Perl has problems with
+ the negative versions of the properties. --/
+
+/\p{^Lu}/8i
+ 1234
+ 0: 1
+ ** Failers
0: *
- ]thing
-No match
- cthing
-No match
- dthing
-No match
- ething
+ ABC
No match
-/^\�/
- �
- 0: \x81
-
-/^�/
- �
- 0: \xff
-
-/^[0-9]+$/
- 0
- 0: 0
- 1
+/\P{Lu}/8i
+ 1234
0: 1
- 2
- 0: 2
- 3
- 0: 3
- 4
- 0: 4
- 5
- 0: 5
- 6
- 0: 6
- 7
- 0: 7
- 8
- 0: 8
- 9
- 0: 9
- 10
- 0: 10
- 100
- 0: 100
- *** Failers
-No match
- abc
-No match
-
-/^.*nter/
- enter
- 0: enter
- inter
- 0: inter
- uponter
- 0: uponter
-
-/^xxx[0-9]+$/
- xxx0
- 0: xxx0
- xxx1234
- 0: xxx1234
- *** Failers
-No match
- xxx
-No match
-
-/^.+[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^.+?[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- 0: abc!pqr=apquxz.ixr.zzz.ac.uk
- *** Failers
-No match
- !pqr=apquxz.ixr.zzz.ac.uk
-No match
- abc!=apquxz.ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz:ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz.ixr.zzz.ac.ukk
-No match
-
-/:/
- Well, we need a colon: somewhere
- 0: :
- *** Fail if we don't
-No match
-
-/([\da-f:]+)$/i
- 0abc
- 0: 0abc
- abc
- 0: abc
- fed
- 0: fed
- E
- 0: E
- ::
- 0: ::
- 5f03:12C0::932e
- 0: 5f03:12C0::932e
- fed def
- 0: def
- Any old stuff
- 0: ff
- *** Failers
-No match
- 0zzz
-No match
- gzzz
-No match
- fed\x20
-No match
- Any old rubbish
-No match
-
-/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- 0: .1.2.3
- A.12.123.0
- 0: A.12.123.0
- *** Failers
-No match
- .1.2.3333
-No match
- 1.2.3
-No match
- 1234.2.3
-No match
-
-/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 0: 1 IN SOA non-sp1 non-sp2(
- 1 IN SOA non-sp1 non-sp2 (
- 0: 1 IN SOA non-sp1 non-sp2 (
- *** Failers
-No match
- 1IN SOA non-sp1 non-sp2(
-No match
-
-/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- 0: a.
- Z.
- 0: Z.
- 2.
- 0: 2.
- ab-c.pq-r.
- 0: ab-c.pq-r.
- sxk.zzz.ac.uk.
- 0: sxk.zzz.ac.uk.
- x-.y-.
- 0: x-.y-.
- *** Failers
-No match
- -abc.peq.
-No match
-
-/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- 0: *.a
- *.b0-a
- 0: *.b0-a
- *.c3-b.c
- 0: *.c3-b.c
- *.c-a.b-c
- 0: *.c-a.b-c
- *** Failers
-No match
- *.0
-No match
- *.a-
-No match
- *.a-b.c-
-No match
- *.c-a.0-c
-No match
-
-/^(?=ab(de))(abd)(e)/
- abde
- 0: abde
-
-/^(?!(ab)de|x)(abd)(f)/
- abdf
- 0: abdf
-
-/^(?=(ab(cd)))(ab)/
- abcd
- 0: ab
-
-/^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- 0: a.b.c.d
- A.B.C.D
- 0: A.B.C.D
- a.b.c.1.2.3.C
- 0: a.b.c.1.2.3.C
-
-/^\".*\"\s*(;.*)?$/
- \"1234\"
- 0: "1234"
- \"abcd\" ;
- 0: "abcd" ;
- \"\" ; rhubarb
- 0: "" ; rhubarb
- *** Failers
-No match
- \"1234\" : things
-No match
-
-/^$/
- \
- 0:
- *** Failers
-No match
-
-/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/^ a\ b[c ]d $/x
- a bcd
- 0: a bcd
- a b d
- 0: a b d
- *** Failers
-No match
- abcd
-No match
- ab d
+ ** Failers
+ 0: *
+ ABC
No match
-/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
-
-/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
-
-/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
- 0: a+ Z0+\x08\x0a\x1d\x12
-
-/^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
- 0: .^$(*+)|{?,?}
- 1: .^$(*+)|{?,?
- 2: .^$(*+)|{?,
- 3: .^$(*+)|{?
- 4: .^$(*+)|{
- 5: .^$(*+)|
- 6: .^$(*+)
- 7: .^$(*+
- 8: .^$(*
- 9: .^$(
-10: .^$
-11: .^
-12: .
-
-/^a*\w/
- z
- 0: z
- az
- 0: az
- 1: a
- aaaz
- 0: aaaz
- 1: aaa
- 2: aa
- 3: a
+/\p{Ll}/8i
a
0: a
- aa
- 0: aa
- 1: a
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
- a+
- 0: a
- aa+
- 0: aa
- 1: a
-
-/^a*?\w/
- z
+ Az
0: z
- az
- 0: az
- 1: a
- aaaz
- 0: aaaz
- 1: aaa
- 2: aa
- 3: a
- a
- 0: a
- aa
- 0: aa
- 1: a
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
- a+
- 0: a
- aa+
- 0: aa
- 1: a
-
-/^a+\w/
- az
- 0: az
- aaaz
- 0: aaaz
- 1: aaa
- 2: aa
- aa
- 0: aa
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- aa+
- 0: aa
-
-/^a+?\w/
- az
- 0: az
- aaaz
- 0: aaaz
- 1: aaa
- 2: aa
- aa
- 0: aa
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- aa+
- 0: aa
-
-/^\d{8}\w{2,}/
- 1234567890
- 0: 1234567890
- 12345678ab
- 0: 12345678ab
- 12345678__
- 0: 12345678__
- *** Failers
-No match
- 1234567
-No match
-
-/^[aeiou\d]{4,5}$/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 12345
- aaaaa
- 0: aaaaa
- *** Failers
-No match
- 123456
-No match
-
-/^[aeiou\d]{4,5}?/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 12345
- 1: 1234
- aaaaa
- 0: aaaaa
- 1: aaaa
- 123456
- 0: 12345
- 1: 1234
-
-/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
-
-/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- From abcd Mon Sep 1 12:33:02 1997
- 0: From abcd Mon Sep 1 12:33
- *** Failers
-No match
- From abcd Sep 01 12:33:02 1997
-No match
-
-/^12.34/s
- 12\n34
- 0: 12\x0a34
- 12\r34
- 0: 12\x0d34
-
-/\w+(?=\t)/
- the quick brown\t fox
- 0: brown
-
-/foo(?!bar)(.*)/
- foobar is foolish see?
- 0: foolish see?
- 1: foolish see
- 2: foolish se
- 3: foolish s
- 4: foolish
- 5: foolish
- 6: foolis
- 7: fooli
- 8: fool
- 9: foo
-
-/(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- 0: rowbar etc
- 1: rowbar et
- 2: rowbar e
- 3: rowbar
- 4: rowbar
- barrel
- 0: barrel
- 1: barre
- 2: barr
- 3: bar
- 2barrel
- 0: 2barrel
- 1: 2barre
- 2: 2barr
- 3: 2bar
- A barrel
- 0: A barrel
- 1: A barre
- 2: A barr
- 3: A bar
-
-/^(\D*)(?=\d)(?!123)/
- abc456
- 0: abc
- *** Failers
-No match
- abc123
-No match
-
-/^1234(?# test newlines
- inside)/
- 1234
- 0: 1234
-
-/^1234 #comment in extended re
- /x
- 1234
- 0: 1234
-
-/#rhubarb
- abcd/x
- abcd
- 0: abcd
-
-/^abcd#rhubarb/x
- abcd
- 0: abcd
-
-/(?!^)abc/
- the abc
- 0: abc
- *** Failers
-No match
- abc
-No match
-
-/(?=^)abc/
- abc
- 0: abc
- *** Failers
-No match
- the abc
-No match
-
-/^[ab]{1,3}(ab*|b)/
- aabbbbb
- 0: aabbbbb
- 1: aabbbb
- 2: aabbb
- 3: aabb
- 4: aab
- 5: aa
-
-/^[ab]{1,3}?(ab*|b)/
- aabbbbb
- 0: aabbbbb
- 1: aabbbb
- 2: aabbb
- 3: aabb
- 4: aab
- 5: aa
-
-/^[ab]{1,3}?(ab*?|b)/
- aabbbbb
- 0: aabbbbb
- 1: aabbbb
- 2: aabbb
- 3: aabb
- 4: aab
- 5: aa
-
-/^[ab]{1,3}(ab*?|b)/
- aabbbbb
- 0: aabbbbb
- 1: aabbbb
- 2: aabbb
- 3: aabb
- 4: aab
- 5: aa
-
-/ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional leading comment
-(?: (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # one word, optionally followed by....
-(?:
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
-\(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) | # comments, or...
-
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-# quoted strings
-)*
-< (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # leading <
-(?: @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* , (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-)* # further okay, if led by comma
-: # closing colon
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* )? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address spec
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* > # trailing >
-# name and address
-) (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional trailing comment
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <[email protected]>
- <user\@dom.ain>
- 1: user@dom
- user\@dom.ain
- 1: user@dom
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <[email protected]> (a comment)
- 1: "A. Other" <[email protected]>
- 2: "A. Other" <[email protected]>
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <[email protected]> (a comment)
- 1: Other <[email protected]>
- 2: Other <[email protected]>
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
- A missing angle <user\@some.where
- 1: user@some
- *** Failers
-No match
- The quick brown fox
-No match
-
-/[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional leading comment
-(?:
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-# leading word
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
-(?:
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-|
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-) # "special" comment or quoted string
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
-)*
-<
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# <
-(?:
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-(?: ,
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-)* # additional domains
-:
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address spec
-> # >
-# name and address
-)
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <[email protected]>
- <user\@dom.ain>
- 1: user@dom
- user\@dom.ain
- 1: user@dom
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <[email protected]>
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <[email protected]>
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
- A missing angle <user\@some.where
- 1: user@some
- *** Failers
-No match
- The quick brown fox
-No match
-
-/abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- 0: abc\x00def\x00pqr\x00xyz\x000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
- 0: abc\x00def\x00pqr\x00xyz\x000AB
-
-/abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
-
-/^[\000-\037]/
- \0A
- 0: \x00
- \01B
- 0: \x01
- \037C
- 0: \x1f
-
-/\0*/
- \0\0\0\0
- 0: \x00\x00\x00\x00
- 1: \x00\x00\x00
- 2: \x00\x00
- 3: \x00
- 4:
-
-/A\x0{2,3}Z/
- The A\x0\x0Z
- 0: A\x00\x00Z
- An A\0\x0\0Z
- 0: A\x00\x00\x00Z
- *** Failers
-No match
- A\0Z
-No match
- A\0\x0\0\x0Z
-No match
-
-/^\s/
- \040abc
- 0:
- \x0cabc
- 0: \x0c
- \nabc
- 0: \x0a
- \rabc
- 0: \x0d
- \tabc
- 0: \x09
- *** Failers
-No match
- abc
-No match
-
-/^a b
- c/x
- abc
- 0: abc
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
- abbbc
- 0: abbbc
- abbc
- 0: abbc
- *** Failers
-No match
- abc
-No match
- abbbbbc
-No match
-
-/([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1.title:TBlah blah bla
- 2: track1.title:TBlah blah bl
- 3: track1.title:TBlah blah b
- 4: track1.title:TBlah blah
- 5: track1.title:TBlah blah
- 6: track1.title:TBlah bla
- 7: track1.title:TBlah bl
- 8: track1.title:TBlah b
- 9: track1.title:TBlah
-10: track1.title:TBlah
-11: track1.title:TBla
-12: track1.title:TBl
-13: track1.title:TB
-14: track1.title:T
-
-/([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1.title:TBlah blah bla
- 2: track1.title:TBlah blah bl
- 3: track1.title:TBlah blah b
- 4: track1.title:TBlah blah
- 5: track1.title:TBlah blah
- 6: track1.title:TBlah bla
- 7: track1.title:TBlah bl
- 8: track1.title:TBlah b
- 9: track1.title:TBlah
-10: track1.title:TBlah
-11: track1.title:TBla
-12: track1.title:TBl
-13: track1.title:TB
-14: track1.title:T
-
-/([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1.title:TBlah blah bla
- 2: track1.title:TBlah blah bl
- 3: track1.title:TBlah blah b
- 4: track1.title:TBlah blah
- 5: track1.title:TBlah blah
- 6: track1.title:TBlah bla
- 7: track1.title:TBlah bl
- 8: track1.title:TBlah b
- 9: track1.title:TBlah
-10: track1.title:TBlah
-11: track1.title:TBla
-12: track1.title:TBl
-13: track1.title:TB
-14: track1.title:T
-
-/^[W-c]+$/
- WXY_^abc
- 0: WXY_^abc
- *** Failers
-No match
- wxy
-No match
-
-/^[W-c]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^[\x3f-\x5F]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^abc$/m
- abc
- 0: abc
- qqq\nabc
- 0: abc
- abc\nzzz
- 0: abc
- qqq\nabc\nzzz
- 0: abc
-
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\Aabc\Z/m
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\A(.)*\Z/s
- abc\ndef
- 0: abc\x0adef
-
-/\A(.)*\Z/m
- *** Failers
- 0: *** Failers
- abc\ndef
-No match
-
-/(?:b)|(?::+)/
- b::c
- 0: b
- c::b
- 0: ::
- 1: :
-
-/[-az]+/
- az-
- 0: az-
- 1: az
- 2: a
- *** Failers
- 0: a
- b
-No match
-
-/[az-]+/
- za-
- 0: za-
- 1: za
- 2: z
- *** Failers
- 0: a
- b
-No match
-
-/[a\-z]+/
- a-z
- 0: a-z
- 1: a-
- 2: a
- *** Failers
+ ** Failers
0: a
- b
-No match
-
-/[a-z]+/
- abcdxyz
- 0: abcdxyz
- 1: abcdxy
- 2: abcdx
- 3: abcd
- 4: abc
- 5: ab
- 6: a
-
-/[\d-]+/
- 12-34
- 0: 12-34
- 1: 12-3
- 2: 12-
- 3: 12
- 4: 1
- *** Failers
-No match
- aaa
+ ABC
No match
-/[\d-z]+/
- 12-34z
- 0: 12-34z
- 1: 12-34
- 2: 12-3
- 3: 12-
- 4: 12
- 5: 1
- *** Failers
-No match
- aaa
-No match
-
-/\x5c/
- \\
- 0: \
-
-/\x20Z/
- the Zoo
- 0: Z
- *** Failers
-No match
- Zulu
-No match
-
-/ab{3cd/
- ab{3cd
- 0: ab{3cd
-
-/ab{3,cd/
- ab{3,cd
- 0: ab{3,cd
-
-/ab{3,4a}cd/
- ab{3,4a}cd
- 0: ab{3,4a}cd
-
-/{4,5a}bc/
- {4,5a}bc
- 0: {4,5a}bc
-
-/^a.b/<lf>
- a\rb
- 0: a\x0db
- *** Failers
-No match
- a\nb
-No match
-
-/abc$/
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- abc\ndef
-No match
-
-/(abc)\123/
- abc\x53
- 0: abcS
-
-/(abc)\223/
- abc\x93
- 0: abc\x93
-
-/(abc)\323/
- abc\xd3
- 0: abc\xd3
-
-/(abc)\100/
- abc\x40
- 0: abc@
- abc\100
- 0: abc@
-
-/(abc)\1000/
- abc\x400
- 0: abc@0
- abc\x40\x30
- 0: abc@0
- abc\1000
- 0: abc@0
- abc\100\x30
- 0: abc@0
- abc\100\060
- 0: abc@0
- abc\100\60
- 0: abc@0
-
-/abc\81/
- abc\081
- 0: abc\x0081
- abc\0\x38\x31
- 0: abc\x0081
-
-/abc\91/
- abc\091
- 0: abc\x0091
- abc\0\x39\x31
- 0: abc\x0091
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
- 0: abcdefghijk\x0aS
-
-/ab\idef/
- abidef
- 0: abidef
-
-/a{0}bc/
- bc
- 0: bc
-
-/(a|(bc)){0,0}?xyz/
- xyz
- 0: xyz
-
-/abc[\10]de/
- abc\010de
- 0: abc\x08de
-
-/abc[\1]de/
- abc\1de
- 0: abc\x01de
-
-/(abc)[\1]de/
- abc\1de
- 0: abc\x01de
-
-/(?s)a.b/
- a\nb
- 0: a\x0ab
-
-/^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- 0: baNOTcccc
- 1: baNOTccc
- 2: baNOTcc
- 3: baNOTc
- 4: baNOT
- baNOTcccd
- 0: baNOTccc
- 1: baNOTcc
- 2: baNOTc
- 3: baNOT
- baNOTccd
- 0: baNOTcc
- 1: baNOTc
- 2: baNOT
- bacccd
- 0: baccc
- *** Failers
- 0: *** Failers
- 1: *** Failer
- 2: *** Faile
- 3: *** Fail
- 4: *** Fai
- 5: *** Fa
- 6: *** F
- anything
-No match
- b\bc
-No match
- baccd
-No match
-
-/[^a]/
- Abc
+/\p{Lu}/8i
+ A
0: A
-
-/[^a]/i
- Abc
- 0: b
-
-/[^a]+/
- AAAaAbc
- 0: AAA
- 1: AA
- 2: A
-
-/[^a]+/i
- AAAaAbc
- 0: bc
- 1: b
-
-/[^a]+/
- bbb\nccc
- 0: bbb\x0accc
- 1: bbb\x0acc
- 2: bbb\x0ac
- 3: bbb\x0a
- 4: bbb
- 5: bb
- 6: b
-
-/[^k]$/
- abc
- 0: c
- *** Failers
- 0: s
- abk
-No match
-
-/[^k]{2,3}$/
- abc
- 0: abc
- kbc
- 0: bc
- kabc
- 0: abc
- *** Failers
- 0: ers
- abk
-No match
- akb
-No match
- akk
-No match
-
-/^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 123456789\@x.y.z
- *** Failers
-No match
- 12345678\@x.y.uk
+ a\x{10a0}B
+ 0: \x{10a0}
+ ** Failers
+ 0: F
+ a
No match
- 1234567\@a.b.c.d
+ \x{1d00}
No match
-/[^a]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
+/[\x{c0}\x{391}]/8i
+ \x{c0}
+ 0: \x{c0}
+ \x{e0}
+ 0: \x{e0}
-/[^a]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
+/-- The next two are special cases where the lengths of the different cases of
+the same character differ. The first went wrong with heap frame storage; the
+second was broken in all cases. --/
-/[^az]/
- aaaabcd
- 0: b
- aaAabcd
+/^\x{023a}+?(\x{0130}+)/8i
+ \x{023a}\x{2c65}\x{0130}
+ 0: \x{23a}\x{2c65}\x{130}
+ 1: \x{130}
+
+/^\x{023a}+([^X])/8i
+ \x{023a}\x{2c65}X
+ 0: \x{23a}\x{2c65}
+ 1: \x{2c65}
+
+/\x{c0}+\x{116}+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+ 0: \x{c0}\x{e0}\x{116}\x{117}
+
+/[\x{c0}\x{116}]+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+ 0: \x{c0}\x{e0}\x{116}\x{117}
+
+/(\x{de})\1/8i
+ \x{de}\x{de}
+ 0: \x{de}\x{de}
+ 1: \x{de}
+ \x{de}\x{fe}
+ 0: \x{de}\x{fe}
+ 1: \x{de}
+ \x{fe}\x{fe}
+ 0: \x{fe}\x{fe}
+ 1: \x{fe}
+ \x{fe}\x{de}
+ 0: \x{fe}\x{de}
+ 1: \x{fe}
+
+/^\x{c0}$/8i
+ \x{c0}
+ 0: \x{c0}
+ \x{e0}
+ 0: \x{e0}
+
+/^\x{e0}$/8i
+ \x{c0}
+ 0: \x{c0}
+ \x{e0}
+ 0: \x{e0}
+
+/-- The next two should be Perl-compatible, but it fails to match \x{e0}. PCRE
+will match it only with UCP support, because without that it has no notion
+of case for anything other than the ASCII letters. --/
+
+/((?i)[\x{c0}])/8
+ \x{c0}
+ 0: \x{c0}
+ 1: \x{c0}
+ \x{e0}
+ 0: \x{e0}
+ 1: \x{e0}
+
+/(?i:[\x{c0}])/8
+ \x{c0}
+ 0: \x{c0}
+ \x{e0}
+ 0: \x{e0}
+
+/-- These are PCRE's extra properties to help with Unicodizing \d etc. --/
+
+/^\p{Xan}/8
+ ABCD
0: A
-
-/[^az]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
-
-/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
- 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
-
-/P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/(\.\d\d[1-9]?)\d+/
- 1.230003938
- 0: .230003938
- 1: .23000393
- 2: .2300039
- 3: .230003
- 4: .23000
- 5: .2300
- 6: .230
- 1.875000282
- 0: .875000282
- 1: .87500028
- 2: .8750002
- 3: .875000
- 4: .87500
- 5: .8750
- 6: .875
- 1.235
- 0: .235
-
-/(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 0: .230
- 1: .23
- 1.875000282
- 0: .875
- *** Failers
-No match
- 1.235
-No match
-
-/a(?)b/
- ab
- 0: ab
-
-/\b(foo)\s+(\w+)/i
- Food is on the foo table
- 0: foo table
- 1: foo tabl
- 2: foo tab
- 3: foo ta
- 4: foo t
-
-/foo(.*)bar/
- The food is under the bar in the barn.
- 0: food is under the bar in the bar
- 1: food is under the bar
-
-/foo(.*?)bar/
- The food is under the bar in the barn.
- 0: food is under the bar in the bar
- 1: food is under the bar
-
-/(.*)(\d*)/
- I have 2 numbers: 53147
-Matched, but too many subsidiary matches
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: I have 2 numbers: 531
- 3: I have 2 numbers: 53
- 4: I have 2 numbers: 5
- 5: I have 2 numbers:
- 6: I have 2 numbers:
- 7: I have 2 numbers
- 8: I have 2 number
- 9: I have 2 numbe
-10: I have 2 numb
-11: I have 2 num
-12: I have 2 nu
-13: I have 2 n
-14: I have 2
-15: I have 2
-16: I have
-17: I have
-18: I hav
-19: I ha
-20: I h
-21: I
-
-/(.*)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: I have 2 numbers: 531
- 3: I have 2 numbers: 53
- 4: I have 2 numbers: 5
- 5: I have 2
-
-/(.*?)(\d*)/
- I have 2 numbers: 53147
-Matched, but too many subsidiary matches
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: I have 2 numbers: 531
- 3: I have 2 numbers: 53
- 4: I have 2 numbers: 5
- 5: I have 2 numbers:
- 6: I have 2 numbers:
- 7: I have 2 numbers
- 8: I have 2 number
- 9: I have 2 numbe
-10: I have 2 numb
-11: I have 2 num
-12: I have 2 nu
-13: I have 2 n
-14: I have 2
-15: I have 2
-16: I have
-17: I have
-18: I hav
-19: I ha
-20: I h
-21: I
-
-/(.*?)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: I have 2 numbers: 531
- 3: I have 2 numbers: 53
- 4: I have 2 numbers: 5
- 5: I have 2
-
-/(.*)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
-
-/(.*?)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
-
-/(.*)\b(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
-
-/(.*\D)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
-
-/^\D*(?!123)/
- ABC123
- 0: AB
- 1: A
- 2:
-
-/^(\D*)(?=\d)(?!123)/
- ABC445
- 0: ABC
- *** Failers
-No match
- ABC123
-No match
-
-/^[W-]46]/
- W46]789
- 0: W46]
- -46]789
- 0: -46]
- *** Failers
-No match
- Wall
-No match
- Zebra
-No match
- 42
-No match
- [abcd]
-No match
- ]abcd[
-No match
-
-/^[W-\]46]/
- W46]789
- 0: W
- Wall
- 0: W
- Zebra
- 0: Z
- Xylophone
- 0: X
- 42
- 0: 4
- [abcd]
- 0: [
- ]abcd[
- 0: ]
- \\backslash
- 0: \
- *** Failers
-No match
- -46]789
-No match
- well
+ 1234
+ 0: 1
+ \x{6ca}
+ 0: \x{6ca}
+ \x{a6c}
+ 0: \x{a6c}
+ \x{10a7}
+ 0: \x{10a7}
+ ** Failers
No match
-
-/\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
- 0: 01/01/2000
-
-/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
+ _ABC
No match
-/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+/^\p{Xan}+/8
+ ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+ 0: ABCD1234\x{6ca}\x{a6c}\x{10a7}
+ ** Failers
No match
-
-/^(a){0,0}/
- bcd
- 0:
- abc
- 0:
- aab
- 0:
-
-/^(a){0,1}/
- bcd
- 0:
- abc
- 0: a
- 1:
- aab
- 0: a
- 1:
-
-/^(a){0,2}/
- bcd
- 0:
- abc
- 0: a
- 1:
- aab
- 0: aa
- 1: a
- 2:
-
-/^(a){0,3}/
- bcd
- 0:
- abc
- 0: a
- 1:
- aab
- 0: aa
- 1: a
- 2:
- aaa
- 0: aaa
- 1: aa
- 2: a
- 3:
-
-/^(a){0,}/
- bcd
- 0:
- abc
- 0: a
- 1:
- aab
- 0: aa
- 1: a
- 2:
- aaa
- 0: aaa
- 1: aa
- 2: a
- 3:
- aaaaaaaa
- 0: aaaaaaaa
- 1: aaaaaaa
- 2: aaaaaa
- 3: aaaaa
- 4: aaaa
- 5: aaa
- 6: aa
- 7: a
- 8:
-
-/^(a){1,1}/
- bcd
+ _ABC
No match
- abc
- 0: a
- aab
- 0: a
-/^(a){1,2}/
- bcd
-No match
- abc
- 0: a
- aab
- 0: aa
- 1: a
+/^\p{Xan}+?/8
+ \x{6ca}\x{a6c}\x{10a7}_
+ 0: \x{6ca}
-/^(a){1,3}/
- bcd
-No match
- abc
- 0: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: aa
- 2: a
-
-/^(a){1,}/
- bcd
-No match
- abc
- 0: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: aa
- 2: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: aaaaaaa
- 2: aaaaaa
- 3: aaaaa
- 4: aaaa
- 5: aaa
- 6: aa
- 7: a
-
-/.*\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.{0,}\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/m
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
-/.*\.gif/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
+/^\p{Xan}*/8
+ ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+ 0: ABCD1234\x{6ca}\x{a6c}\x{10a7}
-/.*$/
- borfle\nbib.gif\nno
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
-/.*$/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
- 1: borfle\x0abib.gif
- 2: borfle
+/^\p{Xan}{2,9}/8
+ ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+ 0: ABCD1234\x{6ca}
-/.*$/
- borfle\nbib.gif\nno\n
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno\n
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
- 1: borfle\x0abib.gif\x0ano
-
-/.*$/ms
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
- 1: borfle\x0abib.gif\x0ano
- 2: borfle\x0abib.gif
- 3: borfle
+/^\p{Xan}{2,9}?/8
+ \x{6ca}\x{a6c}\x{10a7}_
+ 0: \x{6ca}\x{a6c}
-/(.*X|^B)/
- abcde\n1234Xyz
- 0: 1234X
- BarFoo
- 0: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/m
- abcde\n1234Xyz
- 0: 1234X
- BarFoo
- 0: B
- abcde\nBar
- 0: B
-
-/(.*X|^B)/s
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/ms
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- abcde\nBar
- 0: B
-
-/(?s)(.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(?s:.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/^.*B/
- **** Failers
-No match
- abc\nB
-No match
-
-/(?s)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?m)^.*B/
- abc\nB
- 0: B
-
-/(?ms)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?ms)^B/
- abc\nB
- 0: B
-
-/(?s)B$/
- B\n
- 0: B
-
-/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
- 0: 123456654321
-
-/^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
- 0: 123456654321
-
-/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
- 0: 123456654321
-
-/^[abc]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^[a-c]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^(a|b|c){12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- 0: n
- *** Failers
-No match
- z
-No match
-
-/abcde{0,0}/
- abcd
- 0: abcd
- *** Failers
-No match
- abce
-No match
-
-/ab[cd]{0,0}e/
- abe
- 0: abe
- *** Failers
+/^[\p{Xan}]/8
+ ABCD1234_
+ 0: A
+ 1234abcd_
+ 0: 1
+ \x{6ca}
+ 0: \x{6ca}
+ \x{a6c}
+ 0: \x{a6c}
+ \x{10a7}
+ 0: \x{10a7}
+ ** Failers
No match
- abcde
+ _ABC
No match
-
-/ab(c){0,0}d/
- abd
- 0: abd
- *** Failers
+
+/^[\p{Xan}]+/8
+ ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+ 0: ABCD1234\x{6ca}\x{a6c}\x{10a7}
+ ** Failers
No match
- abcd
+ _ABC
No match
-/a(b*)/
- a
- 0: a
- ab
- 0: ab
- 1: a
- abbbb
- 0: abbbb
- 1: abbb
- 2: abb
- 3: ab
- 4: a
- *** Failers
- 0: a
- bbbbb
-No match
-
-/ab\d{0}e/
- abe
- 0: abe
- *** Failers
+/^>\p{Xsp}/8
+ >\x{1680}\x{2028}\x{0b}
+ 0: >\x{1680}
+ >\x{a0}
+ 0: >\x{a0}
+ ** Failers
No match
- ab1e
+ \x{0b}
No match
-
-/"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- 0: "quick"
- \"the \\\"quick\\\" brown fox\"
- 0: "the \"quick\" brown fox"
-/.*?/g+
- abc
- 0: abc
- 0+
- 1: ab
- 2: a
- 3:
- 0:
- 0+
-
-/\b/g+
- abc
- 0:
- 0+ abc
- 0:
- 0+
+/^>\p{Xsp}+/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}
-/\b/+g
- abc
- 0:
- 0+ abc
- 0:
- 0+
+/^>\p{Xsp}+?/8
+ >\x{1680}\x{2028}\x{0b}
+ 0: >\x{1680}
-//g
- abc
- 0:
- 0:
- 0:
- 0:
-
-/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
-
-/a[^a]b/
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/a.b/
- acb
- 0: acb
- *** Failers
-No match
- a\nb
-No match
+/^>\p{Xsp}*/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}
-/a[^a]b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
+/^>\p{Xsp}{2,9}/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}
-/a.b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/^(b+?|a){1,2}?c/
- bac
- 0: bac
- bbac
- 0: bbac
- bbbac
- 0: bbbac
- bbbbac
- 0: bbbbac
- bbbbbac
- 0: bbbbbac
-
-/^(b+|a){1,2}?c/
- bac
- 0: bac
- bbac
- 0: bbac
- bbbac
- 0: bbbac
- bbbbac
- 0: bbbbac
- bbbbbac
- 0: bbbbbac
+/^>\p{Xsp}{2,9}?/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}
-/(?!\A)x/m
- x\nb\n
-No match
- a\bx\n
- 0: x
-
-/\x0{ab}/
- \0{ab}
- 0: \x00{ab}
-
-/(A|B)*?CD/
- CD
- 0: CD
-
-/(A|B)*CD/
- CD
- 0: CD
-
-/(?<!bar)foo/
- foo
- 0: foo
- catfood
- 0: foo
- arfootle
- 0: foo
- rfoosh
- 0: foo
- *** Failers
-No match
- barfoo
-No match
- towbarfoo
-No match
-
-/\w{3}(?<!bar)foo/
- catfood
- 0: catfoo
- *** Failers
-No match
- foo
-No match
- barfoo
+/^>[\p{Xsp}]/8
+ >\x{2028}\x{0b}
+ 0: >\x{2028}
+
+/^>[\p{Xsp}]+/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}
+
+/^>\p{Xps}/8
+ >\x{1680}\x{2028}\x{0b}
+ 0: >\x{1680}
+ >\x{a0}
+ 0: >\x{a0}
+ ** Failers
No match
- towbarfoo
+ \x{0b}
No match
-/(?<=(foo)a)bar/
- fooabar
- 0: bar
- *** Failers
-No match
- bar
-No match
- foobbar
-No match
-
-/\Aabc\z/m
- abc
- 0: abc
- *** Failers
-No match
- abc\n
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
+/^>\p{Xps}+/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-No match
+/^>\p{Xps}+?/8
+ >\x{1680}\x{2028}\x{0b}
+ 0: >\x{1680}
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
- 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 0: .230003938
- 1: .23000393
- 2: .2300039
- 3: .230003
- 4: .23000
- 5: .2300
- 6: .230
- 1.875000282
- 0: .875000282
- 1: .87500028
- 2: .8750002
- 3: .875000
- 4: .87500
- 5: .8750
- *** Failers
-No match
- 1.235
-No match
-
-/^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- *** Failers
-No match
- this is not a line with only words and spaces!
-No match
+/^>\p{Xps}*/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
-/(\d+)(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: 1234
- 3: 123
- 4: 12
- 12345+
- 0: 12345
- 1: 1234
- 2: 123
- 3: 12
-
-/((?>\d+))(\w)/
- 12345a
- 0: 12345a
- *** Failers
-No match
- 12345+
-No match
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/((?>a+)b)/
- aaab
- 0: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
-
-/(?>b)+/
- aaabbbccc
- 0: bbb
- 1: bb
- 2: b
-
-/(?>a+|b+|c+)*c/
- aaabbbbccccd
- 0: aaabbbbcccc
- 1: aaabbbbc
+/^>\p{Xps}{2,9}/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
-/(a+|b+|c+)*c/
- aaabbbbccccd
- 0: aaabbbbcccc
- 1: aaabbbbccc
- 2: aaabbbbcc
- 3: aaabbbbc
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: abc(ade)ufh()()
- 2: abc(ade)ufh()
- 3: abc(ade)ufh
- 4: abc(ade)
- 5: abc
+/^>\p{Xps}{2,9}?/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}
-/\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- 0: (abc)
- (abc(def)xyz)
- 0: (abc(def)xyz)
- *** Failers
-No match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
-
-/a(?-i)b/i
- ab
- 0: ab
- Ab
- 0: Ab
- *** Failers
-No match
- aB
-No match
- AB
-No match
-
-/(a (?x)b c)d e/
- a bcd e
- 0: a bcd e
- *** Failers
-No match
- a b cd e
-No match
- abcd e
-No match
- a bcde
-No match
+/^>[\p{Xps}]/8
+ >\x{2028}\x{0b}
+ 0: >\x{2028}
-/(a b(?x)c d (?-x)e f)/
- a bcde f
- 0: a bcde f
- *** Failers
-No match
- abcdef
-No match
+/^>[\p{Xps}]+/8
+ > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
+ 0: > \x{09}\x{0a}\x{0c}\x{0d}\x{a0}\x{1680}\x{2028}\x{0b}
-/(a(?i)b)c/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- abC
-No match
- aBC
-No match
- Abc
-No match
- ABc
-No match
- ABC
-No match
- AbC
-No match
-
-/a(?i:b)c/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- ABC
-No match
- abC
-No match
- aBC
-No match
-
-/a(?i:b)*c/
- aBc
- 0: aBc
- aBBc
- 0: aBBc
- *** Failers
-No match
- aBC
-No match
- aBBC
-No match
-
-/a(?=b(?i)c)\w\wd/
- abcd
- 0: abcd
- abCd
- 0: abCd
- *** Failers
-No match
- aBCd
-No match
- abcD
-No match
-
-/(?s-i:more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
+/^\p{Xwd}/8
+ ABCD
+ 0: A
+ 1234
+ 0: 1
+ \x{6ca}
+ 0: \x{6ca}
+ \x{a6c}
+ 0: \x{a6c}
+ \x{10a7}
+ 0: \x{10a7}
+ _ABC
+ 0: _
+ ** Failers
No match
- more \n than \n million
+ []
No match
-/(?:(?s-i)more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
-No match
- more \n than \n million
-No match
-
-/(?>a(?i)b+)+c/
- abc
- 0: abc
- aBbc
- 0: aBbc
- aBBc
- 0: aBBc
- *** Failers
-No match
- Abc
-No match
- abAb
-No match
- abbC
-No match
-
-/(?=a(?i)b)\w\wc/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- Ab
-No match
- abC
-No match
- aBC
-No match
-
-/(?<=a(?i)b)(\w\w)c/
- abxxc
- 0: xxc
- aBxxc
- 0: xxc
- *** Failers
-No match
- Abxxc
-No match
- ABxxc
-No match
- abxxC
-No match
+/^\p{Xwd}+/8
+ ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+ 0: ABCD1234\x{6ca}\x{a6c}\x{10a7}_
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
+/^\p{Xwd}+?/8
+ \x{6ca}\x{a6c}\x{10a7}_
+ 0: \x{6ca}
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
+/^\p{Xwd}*/8
+ ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+ 0: ABCD1234\x{6ca}\x{a6c}\x{10a7}_
-/(?(?<=foo)bar|cat)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/(?(?<!foo)cat|bar)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/(?>a*)*/
- a
- 0: a
- 1:
- aa
- 0: aa
- 1:
- aaaa
- 0: aaaa
- 1:
+/^\p{Xwd}{2,9}/8
+ A_B12\x{6ca}\x{a6c}\x{10a7}
+ 0: A_B12\x{6ca}\x{a6c}\x{10a7}
-/(abc|)+/
- abc
- 0: abc
- 1:
- abcabc
- 0: abcabc
- 1: abc
- 2:
- abcabcabc
- 0: abcabcabc
- 1: abcabc
- 2: abc
- 3:
- xyz
- 0:
-
-/([a]*)*/
- a
- 0: a
- 1:
- aaaaa
- 0: aaaaa
- 1: aaaa
- 2: aaa
- 3: aa
- 4: a
- 5:
-
-/([ab]*)*/
- a
- 0: a
- 1:
- b
- 0: b
- 1:
- ababab
- 0: ababab
- 1: ababa
- 2: abab
- 3: aba
- 4: ab
- 5: a
- 6:
- aaaabcde
- 0: aaaab
- 1: aaaa
- 2: aaa
- 3: aa
- 4: a
- 5:
- bbbb
- 0: bbbb
- 1: bbb
- 2: bb
- 3: b
- 4:
-
-/([^a]*)*/
- b
- 0: b
- 1:
- bbbb
- 0: bbbb
- 1: bbb
- 2: bb
- 3: b
- 4:
- aaa
- 0:
-
-/([^ab]*)*/
- cccc
- 0: cccc
- 1: ccc
- 2: cc
- 3: c
- 4:
- abab
- 0:
-
-/([a]*?)*/
- a
- 0: a
- 1:
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
- 4:
-
-/([ab]*?)*/
- a
- 0: a
- 1:
- b
- 0: b
- 1:
- abab
- 0: abab
- 1: aba
- 2: ab
- 3: a
- 4:
- baba
- 0: baba
- 1: bab
- 2: ba
- 3: b
- 4:
-
-/([^a]*?)*/
- b
- 0: b
- 1:
- bbbb
- 0: bbbb
- 1: bbb
- 2: bb
- 3: b
- 4:
- aaa
- 0:
-
-/([^ab]*?)*/
- c
- 0: c
- 1:
- cccc
- 0: cccc
- 1: ccc
- 2: cc
- 3: c
- 4:
- baba
- 0:
-
-/(?>a*)*/
- a
- 0: a
- 1:
- aaabcde
- 0: aaa
- 1:
-
-/((?>a*))*/
- aaaaa
- 0: aaaaa
- 1:
- aabbaa
- 0: aa
- 1:
-
-/((?>a*?))*/
- aaaaa
- 0: aaaaa
- 1:
- aabbaa
- 0: aa
- 1:
-
-/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 0: 12-sep-98
- 12-09-98
- 0: 12-09-98
- *** Failers
-No match
- sep-12-98
-No match
-
-/(?i:saturday|sunday)/
- saturday
- 0: saturday
- sunday
- 0: sunday
- Saturday
- 0: Saturday
- Sunday
- 0: Sunday
- SATURDAY
- 0: SATURDAY
- SUNDAY
- 0: SUNDAY
- SunDay
- 0: SunDay
+/^\p{Xwd}{2,9}?/8
+ \x{6ca}\x{a6c}\x{10a7}_
+ 0: \x{6ca}\x{a6c}
-/(a(?i)bc|BB)x/
- abcx
- 0: abcx
- aBCx
- 0: aBCx
- bbx
- 0: bbx
- BBx
- 0: BBx
- *** Failers
-No match
- abcX
-No match
- aBCX
-No match
- bbX
-No match
- BBX
-No match
-
-/^([ab](?i)[cd]|[ef])/
- ac
- 0: ac
- aC
- 0: aC
- bD
- 0: bD
- elephant
- 0: e
- Europe
- 0: E
- frog
- 0: f
- France
- 0: F
- *** Failers
-No match
- Africa
-No match
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- 0: ab
- aBd
- 0: aBd
- xy
- 0: xy
- xY
- 0: xY
- zebra
- 0: z
- Zambesi
- 0: Z
- *** Failers
-No match
- aCD
-No match
- XY
-No match
-
-/(?<=foo\n)^bar/m
- foo\nbar
- 0: bar
- *** Failers
-No match
- bar
-No match
- baz\nbar
-No match
-
-/(?<=(?<!foo)bar)baz/
- barbaz
- 0: baz
- barbarbaz
- 0: baz
- koobarbaz
- 0: baz
- *** Failers
-No match
- baz
-No match
- foobarbaz
-No match
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-No match
-
-/abc/
- abc
- 0: abc
- xabcy
- 0: abc
- ababc
- 0: abc
- *** Failers
-No match
- xbc
-No match
- axc
+/^[\p{Xwd}]/8
+ ABCD1234_
+ 0: A
+ 1234abcd_
+ 0: 1
+ \x{6ca}
+ 0: \x{6ca}
+ \x{a6c}
+ 0: \x{a6c}
+ \x{10a7}
+ 0: \x{10a7}
+ _ABC
+ 0: _
+ ** Failers
No match
- abx
+ []
No match
-
-/ab*c/
- abc
- 0: abc
-
-/ab*bc/
- abc
+
+/^[\p{Xwd}]+/8
+ ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+ 0: ABCD1234\x{6ca}\x{a6c}\x{10a7}_
+
+/-- A check not in UTF-8 mode --/
+
+/^[\p{Xwd}]+/
+ ABCD1234_
+ 0: ABCD1234_
+
+/-- Some negative checks --/
+
+/^[\P{Xwd}]+/8
+ !.+\x{019}\x{35a}AB
+ 0: !.+\x{19}\x{35a}
+
+/^[\p{^Xwd}]+/8
+ !.+\x{019}\x{35a}AB
+ 0: !.+\x{19}\x{35a}
+
+/[\D]/WBZ8
+------------------------------------------------------------------
+ Bra
+ [\P{Nd}]
+ Ket
+ End
+------------------------------------------------------------------
+ 1\x{3c8}2
+ 0: \x{3c8}
+
+/[\d]/WBZ8
+------------------------------------------------------------------
+ Bra
+ [\p{Nd}]
+ Ket
+ End
+------------------------------------------------------------------
+ >\x{6f4}<
+ 0: \x{6f4}
+
+/[\S]/WBZ8
+------------------------------------------------------------------
+ Bra
+ [\P{Xsp}]
+ Ket
+ End
+------------------------------------------------------------------
+ \x{1680}\x{6f4}\x{1680}
+ 0: \x{6f4}
+
+/[\s]/WBZ8
+------------------------------------------------------------------
+ Bra
+ [\p{Xsp}]
+ Ket
+ End
+------------------------------------------------------------------
+ >\x{1680}<
+ 0: \x{1680}
+
+/[\W]/WBZ8
+------------------------------------------------------------------
+ Bra
+ [\P{Xwd}]
+ Ket
+ End
+------------------------------------------------------------------
+ A\x{1712}B
+ 0: \x{1712}
+
+/[\w]/WBZ8
+------------------------------------------------------------------
+ Bra
+ [\p{Xwd}]
+ Ket
+ End
+------------------------------------------------------------------
+ >\x{1723}<
+ 0: \x{1723}
+
+/\D/WBZ8
+------------------------------------------------------------------
+ Bra
+ notprop Nd
+ Ket
+ End
+------------------------------------------------------------------
+ 1\x{3c8}2
+ 0: \x{3c8}
+
+/\d/WBZ8
+------------------------------------------------------------------
+ Bra
+ prop Nd
+ Ket
+ End
+------------------------------------------------------------------
+ >\x{6f4}<
+ 0: \x{6f4}
+
+/\S/WBZ8
+------------------------------------------------------------------
+ Bra
+ notprop Xsp
+ Ket
+ End
+------------------------------------------------------------------
+ \x{1680}\x{6f4}\x{1680}
+ 0: \x{6f4}
+
+/\s/WBZ8
+------------------------------------------------------------------
+ Bra
+ prop Xsp
+ Ket
+ End
+------------------------------------------------------------------
+ >\x{1680}>
+ 0: \x{1680}
+
+/\W/WBZ8
+------------------------------------------------------------------
+ Bra
+ notprop Xwd
+ Ket
+ End
+------------------------------------------------------------------
+ A\x{1712}B
+ 0: \x{1712}
+
+/\w/WBZ8
+------------------------------------------------------------------
+ Bra
+ prop Xwd
+ Ket
+ End
+------------------------------------------------------------------
+ >\x{1723}<
+ 0: \x{1723}
+
+/[[:alpha:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{L}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:lower:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{Ll}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:upper:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{Lu}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:alnum:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{Xan}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:ascii:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\x00-\x7f]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:cntrl:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\x00-\x1f\x7f]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:digit:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{Nd}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:graph:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [!-~]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:print:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [ -~]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:punct:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [!-/:-@[-`{-~]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:space:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{Xps}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:word:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{Xwd}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:xdigit:]]/WBZ
+------------------------------------------------------------------
+ Bra
+ [0-9A-Fa-f]
+ Ket
+ End
+------------------------------------------------------------------
+
+/-- Unicode properties for \b abd \B --/
+
+/\b...\B/8W
+ abc_
+ 0: abc
+ \x{37e}abc\x{376}
+ 0: abc
+ \x{37e}\x{376}\x{371}\x{393}\x{394}
+ 0: \x{376}\x{371}\x{393}
+ !\x{c0}++\x{c1}\x{c2}
+ 0: ++\x{c1}
+ !\x{c0}+++++
+ 0: \x{c0}++
+
+/-- Without PCRE_UCP, non-ASCII always fail, even if < 256 --/
+
+/\b...\B/8
+ abc_
0: abc
- abbc
- 0: abbc
- abbbbc
- 0: abbbbc
-
-/.{1}/
- abbbbc
- 0: a
-
-/.{3,4}/
- abbbbc
- 0: abbb
- 1: abb
-
-/ab{0,}bc/
- abbbbc
- 0: abbbbc
-
-/ab+bc/
- abbc
- 0: abbc
- *** Failers
+ ** Failers
+ 0: Fai
+ \x{37e}abc\x{376}
No match
- abc
+ \x{37e}\x{376}\x{371}\x{393}\x{394}
No match
- abq
+ !\x{c0}++\x{c1}\x{c2}
No match
-
-/ab{1,}bc/
-
-/ab+bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,}bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
-
-/ab{3,4}bc/
- abbbbc
- 0: abbbbc
-
-/ab{4,5}bc/
- *** Failers
-No match
- abq
+ !\x{c0}+++++
No match
- abbbbc
-No match
-
-/ab?bc/
- abbc
- 0: abbc
- abc
- 0: abc
-
-/ab{0,1}bc/
- abc
- 0: abc
-/ab?bc/
+/-- With PCRE_UCP, non-UTF8 chars that are < 256 still check properties --/
-/ab?c/
- abc
+/\b...\B/W
+ abc_
0: abc
+ !\x{c0}++\x{c1}\x{c2}
+ 0: ++\xc1
+ !\x{c0}+++++
+ 0: \xc0++
-/ab{0,1}c/
- abc
- 0: abc
+/-- Some of these are silly, but they check various combinations --/
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- abbbbc
-No match
- abcc
-No match
-
-/^abc/
- abcc
- 0: abc
-
-/^abc$/
-
-/abc$/
- aabc
- 0: abc
- *** Failers
-No match
- aabc
+/[[:^alpha:][:^cntrl:]]+/8WBZ
+------------------------------------------------------------------
+ Bra
+ [ -~\x80-\xff\P{L}]+
+ Ket
+ End
+------------------------------------------------------------------
+ 123
+ 0: 123
+ abc
0: abc
- aabcd
-No match
-
-/^/
- abc
- 0:
-/$/
- abc
- 0:
-
-/a.c/
- abc
+/[[:^cntrl:][:^alpha:]]+/8WBZ
+------------------------------------------------------------------
+ Bra
+ [ -~\x80-\xff\P{L}]+
+ Ket
+ End
+------------------------------------------------------------------
+ 123
+ 0: 123
+ abc
0: abc
- axc
- 0: axc
-
-/a.*c/
- axyzc
- 0: axyzc
-
-/a[bc]d/
- abd
- 0: abd
- *** Failers
-No match
- axyzd
-No match
- abc
-No match
-
-/a[b-d]e/
- ace
- 0: ace
-
-/a[b-d]/
- aac
- 0: ac
-
-/a[-b]/
- a-
- 0: a-
-
-/a[b-]/
- a-
- 0: a-
-
-/a]/
- a]
- 0: a]
-
-/a[]]b/
- a]b
- 0: a]b
-
-/a[^bc]d/
- aed
- 0: aed
- *** Failers
-No match
- abd
-No match
- abd
-No match
-
-/a[^-b]c/
- adc
- 0: adc
-
-/a[^]b]c/
- adc
- 0: adc
- *** Failers
-No match
- a-c
- 0: a-c
- a]c
-No match
-
-/\ba\b/
- a-
- 0: a
- -a
- 0: a
- -a-
- 0: a
-
-/\by\b/
- *** Failers
-No match
- xy
-No match
- yz
-No match
- xyz
-No match
-
-/\Ba\B/
- *** Failers
- 0: a
- a-
-No match
- -a
-No match
- -a-
-No match
-
-/\By\b/
- xy
- 0: y
-
-/\by\B/
- yz
- 0: y
-
-/\By\B/
- xyz
- 0: y
-
-/\w/
- a
- 0: a
-
-/\W/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-
-/a\sb/
- a b
- 0: a b
-
-/a\Sb/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/\d/
- 1
- 0: 1
-
-/\D/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/[\w]/
- a
- 0: a
-
-/[\W]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-/a[\s]b/
- a b
- 0: a b
-
-/a[\S]b/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/[\d]/
- 1
- 0: 1
-
-/[\D]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/ab|cd/
- abc
- 0: ab
- abcd
- 0: ab
-
-/()ef/
- def
- 0: ef
-
-/$b/
-
-/a\(b/
- a(b
- 0: a(b
-
-/a\(*b/
- ab
- 0: ab
- a((b
- 0: a((b
-
-/a\\b/
- a\b
-No match
-
-/((a))/
- abc
- 0: a
-
-/(a)b(c)/
+/[[:alpha:]]+/8WBZ
+------------------------------------------------------------------
+ Bra
+ [\p{L}]+
+ Ket
+ End
+------------------------------------------------------------------
abc
0: abc
-/a+b+c/
- aabbabc
+/[[:^alpha:]\S]+/8WBZ
+------------------------------------------------------------------
+ Bra
+ [\P{L}\P{Xsp}]+
+ Ket
+ End
+------------------------------------------------------------------
+ 123
+ 0: 123
+ abc
0: abc
-/a{1,}b{1,}c/
- aabbabc
+/[^\d]+/8WBZ
+------------------------------------------------------------------
+ Bra
+ [^\p{Nd}]+
+ Ket
+ End
+------------------------------------------------------------------
+ abc123
0: abc
-
-/a.+?c/
- abcabc
- 0: abcabc
- 1: abc
-
-/(a+|b)*/
- ab
- 0: ab
- 1: a
- 2:
-
-/(a+|b){0,}/
- ab
- 0: ab
- 1: a
- 2:
-
-/(a+|b)+/
- ab
- 0: ab
- 1: a
-
-/(a+|b){1,}/
- ab
- 0: ab
- 1: a
-
-/(a+|b)?/
- ab
- 0: a
- 1:
-
-/(a+|b){0,1}/
- ab
- 0: a
- 1:
-
-/[^ab]*/
- cde
- 0: cde
- 1: cd
- 2: c
- 3:
-
-/abc/
- *** Failers
+ abc\x{123}
+ 0: abc\x{123}
+ \x{660}abc
+ 0: abc
+
+/\p{Lu}+9\p{Lu}+B\p{Lu}+b/BZ
+------------------------------------------------------------------
+ Bra
+ prop Lu ++
+ 9
+ prop Lu +
+ B
+ prop Lu ++
+ b
+ Ket
+ End
+------------------------------------------------------------------
+
+/\p{^Lu}+9\p{^Lu}+B\p{^Lu}+b/BZ
+------------------------------------------------------------------
+ Bra
+ notprop Lu +
+ 9
+ notprop Lu ++
+ B
+ notprop Lu +
+ b
+ Ket
+ End
+------------------------------------------------------------------
+
+/\P{Lu}+9\P{Lu}+B\P{Lu}+b/BZ
+------------------------------------------------------------------
+ Bra
+ notprop Lu +
+ 9
+ notprop Lu ++
+ B
+ notprop Lu +
+ b
+ Ket
+ End
+------------------------------------------------------------------
+
+/\p{Han}+X\p{Greek}+\x{370}/BZ8
+------------------------------------------------------------------
+ Bra
+ prop Han ++
+ X
+ prop Greek +
+ \x{370}
+ Ket
+ End
+------------------------------------------------------------------
+
+/\p{Xan}+!\p{Xan}+A/BZ
+------------------------------------------------------------------
+ Bra
+ prop Xan ++
+ !
+ prop Xan +
+ A
+ Ket
+ End
+------------------------------------------------------------------
+
+/\p{Xsp}+!\p{Xsp}\t/BZ
+------------------------------------------------------------------
+ Bra
+ prop Xsp ++
+ !
+ prop Xsp
+ \x09
+ Ket
+ End
+------------------------------------------------------------------
+
+/\p{Xps}+!\p{Xps}\t/BZ
+------------------------------------------------------------------
+ Bra
+ prop Xps ++
+ !
+ prop Xps
+ \x09
+ Ket
+ End
+------------------------------------------------------------------
+
+/\p{Xwd}+!\p{Xwd}_/BZ
+------------------------------------------------------------------
+ Bra
+ prop Xwd ++
+ !
+ prop Xwd
+ _
+ Ket
+ End
+------------------------------------------------------------------
+
+/A+\p{N}A+\dB+\p{N}*B+\d*/WBZ
+------------------------------------------------------------------
+ Bra
+ A++
+ prop N
+ A++
+ prop Nd
+ B+
+ prop N *+
+ B+
+ prop Nd *
+ Ket
+ End
+------------------------------------------------------------------
+
+/-- These behaved oddly in Perl, so they are kept in this test --/
+
+/(\x{23a}\x{23a}\x{23a})?\1/8i
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
+No match
+
+/(ȺȺȺ)?\1/8i
+ ȺȺȺⱥⱥ
+No match
+
+/(\x{23a}\x{23a}\x{23a})?\1/8i
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
+ 1: \x{23a}\x{23a}\x{23a}
+
+/(ȺȺȺ)?\1/8i
+ ȺȺȺⱥⱥⱥ
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
+ 1: \x{23a}\x{23a}\x{23a}
+
+/(\x{23a}\x{23a}\x{23a})\1/8i
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
+No match
+
+/(ȺȺȺ)\1/8i
+ ȺȺȺⱥⱥ
+No match
+
+/(\x{23a}\x{23a}\x{23a})\1/8i
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
+ 1: \x{23a}\x{23a}\x{23a}
+
+/(ȺȺȺ)\1/8i
+ ȺȺȺⱥⱥⱥ
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
+ 1: \x{23a}\x{23a}\x{23a}
+
+/(\x{2c65}\x{2c65})\1/8i
+ \x{2c65}\x{2c65}\x{23a}\x{23a}
+ 0: \x{2c65}\x{2c65}\x{23a}\x{23a}
+ 1: \x{2c65}\x{2c65}
+
+/(ⱥⱥ)\1/8i
+ ⱥⱥȺȺ
+ 0: \x{2c65}\x{2c65}\x{23a}\x{23a}
+ 1: \x{2c65}\x{2c65}
+
+/(\x{23a}\x{23a}\x{23a})\1Y/8i
+ X\x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}YZ
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}Y
+ 1: \x{23a}\x{23a}\x{23a}
+
+/(\x{2c65}\x{2c65})\1Y/8i
+ X\x{2c65}\x{2c65}\x{23a}\x{23a}YZ
+ 0: \x{2c65}\x{2c65}\x{23a}\x{23a}Y
+ 1: \x{2c65}\x{2c65}
+
+/-- --/
+
+/-- These scripts weren't yet in Perl when I added Unicode 6.0.0 to PCRE --/
+
+/^[\p{Batak}]/8
+ \x{1bc0}
+ 0: \x{1bc0}
+ \x{1bff}
+ 0: \x{1bff}
+ ** Failers
No match
- b
+ \x{1bf4}
No match
-
-/a*/
-
-
-/([abc])*d/
- abbbcd
- 0: abbbcd
-
-/([abc])*bcd/
- abcd
- 0: abcd
-
-/a|b|c|d|e/
- e
- 0: e
-
-/(a|b|c|d|e)f/
- ef
- 0: ef
-
-/abcd*efg/
- abcdefg
- 0: abcdefg
-
-/ab*/
- xabyabbbz
- 0: ab
- 1: a
- xayabbbz
- 0: a
-
-/(ab|cd)e/
- abcde
- 0: cde
-
-/[abhgefdc]ij/
- hij
- 0: hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
- abcdef
- 0: ef
-
-/(a|b)c*d/
- abcd
- 0: bcd
-
-/(ab|ab*)bc/
- abc
- 0: abc
-
-/a([bc]*)c*/
- abc
- 0: abc
- 1: ab
- 2: a
-
-/a([bc]*)(c*d)/
- abcd
- 0: abcd
-
-/a([bc]+)(c*d)/
- abcd
- 0: abcd
-
-/a([bc]*)(c+d)/
- abcd
- 0: abcd
-
-/a[bcd]*dcdcde/
- adcdcde
- 0: adcdcde
-
-/a[bcd]+dcdcde/
- *** Failers
-No match
- abcde
-No match
- adcdcde
-No match
-
-/(ab|a)b*c/
- abc
- 0: abc
-
-/((a)(b)c)(d)/
- abcd
- 0: abcd
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
- 0: alpha
- 1: alph
- 2: alp
- 3: al
- 4: a
-
-/^a(bc+|b[eh])g|.h$/
- abh
- 0: bh
-
-/(bc+d$|ef*g.|h?i(j|k))/
- effgz
- 0: effgz
- ij
- 0: ij
- reffgz
- 0: effgz
- *** Failers
-No match
- effg
-No match
- bcdd
-No match
-
-/((((((((((a))))))))))/
- a
- 0: a
-
-/(((((((((a)))))))))/
- a
- 0: a
-
-/multiple words of text/
- *** Failers
-No match
- aa
-No match
- uh-uh
-No match
-
-/multiple words/
- multiple words, yeah
- 0: multiple words
-
-/(.*)c(.*)/
- abcde
- 0: abcde
- 1: abcd
- 2: abc
-
-/\((.*), (.*)\)/
- (a, b)
- 0: (a, b)
-
-/[k]/
-
-/abcd/
- abcd
- 0: abcd
-
-/a(bc)d/
- abcd
- 0: abcd
-
-/a[-]?c/
- ac
- 0: ac
-
-/abc/i
- ABC
- 0: ABC
- XABCY
- 0: ABC
- ABABC
- 0: ABC
- *** Failers
-No match
- aaxabxbaxbbx
-No match
- XBC
-No match
- AXC
-No match
- ABX
-No match
-
-/ab*c/i
- ABC
- 0: ABC
-
-/ab*bc/i
- ABC
- 0: ABC
- ABBC
- 0: ABBC
-
-/ab*?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{0,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab+?bc/i
- ABBC
- 0: ABBC
-
-/ab+bc/i
- *** Failers
-No match
- ABC
-No match
- ABQ
-No match
-
-/ab{1,}bc/i
-
-/ab+bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,3}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{3,4}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{4,5}?bc/i
- *** Failers
-No match
- ABQ
-No match
- ABBBBC
-No match
-
-/ab??bc/i
- ABBC
- 0: ABBC
- ABC
- 0: ABC
-
-/ab{0,1}?bc/i
- ABC
- 0: ABC
-
-/ab??bc/i
-
-/ab??c/i
- ABC
- 0: ABC
-
-/ab{0,1}?c/i
- ABC
- 0: ABC
-
-/^abc$/i
- ABC
- 0: ABC
- *** Failers
-No match
- ABBBBC
-No match
- ABCC
-No match
-
-/^abc/i
- ABCC
- 0: ABC
-
-/^abc$/i
-
-/abc$/i
- AABC
- 0: ABC
-
-/^/i
- ABC
- 0:
-
-/$/i
- ABC
- 0:
-
-/a.c/i
- ABC
- 0: ABC
- AXC
- 0: AXC
-
-/a.*?c/i
- AXYZC
- 0: AXYZC
-
-/a.*c/i
- *** Failers
-No match
- AABC
- 0: AABC
- AXYZD
-No match
-
-/a[bc]d/i
- ABD
- 0: ABD
-
-/a[b-d]e/i
- ACE
- 0: ACE
- *** Failers
-No match
- ABC
-No match
- ABD
-No match
-
-/a[b-d]/i
- AAC
- 0: AC
-
-/a[-b]/i
- A-
- 0: A-
-
-/a[b-]/i
- A-
- 0: A-
-
-/a]/i
- A]
- 0: A]
-
-/a[]]b/i
- A]B
- 0: A]B
-
-/a[^bc]d/i
- AED
- 0: AED
-
-/a[^-b]c/i
- ADC
- 0: ADC
- *** Failers
-No match
- ABD
+/^[\p{Brahmi}]/8
+ \x{11000}
+ 0: \x{11000}
+ \x{1106f}
+ 0: \x{1106f}
+ ** Failers
No match
- A-C
+ \x{1104e}
No match
-
-/a[^]b]c/i
- ADC
- 0: ADC
-
-/ab|cd/i
- ABC
- 0: AB
- ABCD
- 0: AB
-
-/()ef/i
- DEF
- 0: EF
-
-/$b/i
- *** Failers
-No match
- A]C
+
+/^[\p{Mandaic}]/8
+ \x{840}
+ 0: \x{840}
+ \x{85e}
+ 0: \x{85e}
+ ** Failers
No match
- B
+ \x{85c}
No match
-
-/a\(b/i
- A(B
- 0: A(B
-
-/a\(*b/i
- AB
- 0: AB
- A((B
- 0: A((B
-
-/a\\b/i
- A\B
+ \x{85d}
No match
-/((a))/i
- ABC
- 0: A
-
-/(a)b(c)/i
- ABC
- 0: ABC
-
-/a+b+c/i
- AABBABC
- 0: ABC
-
-/a{1,}b{1,}c/i
- AABBABC
- 0: ABC
-
-/a.+?c/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/a.*?c/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/a.{0,5}?c/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/(a+|b)*/i
- AB
- 0: AB
- 1: A
- 2:
-
-/(a+|b){0,}/i
- AB
- 0: AB
- 1: A
- 2:
-
-/(a+|b)+/i
- AB
- 0: AB
- 1: A
-
-/(a+|b){1,}/i
- AB
- 0: AB
- 1: A
-
-/(a+|b)?/i
- AB
- 0: A
- 1:
-
-/(a+|b){0,1}/i
- AB
- 0: A
- 1:
+/-- --/
-/(a+|b){0,1}?/i
- AB
+/(\X*)(.)/s8
+ A\x{300}
0: A
1:
-
-/[^ab]*/i
- CDE
- 0: CDE
- 1: CD
- 2: C
- 3:
-
-/abc/i
-
-/a*/i
-
-
-/([abc])*d/i
- ABBBCD
- 0: ABBBCD
-
-/([abc])*bcd/i
- ABCD
- 0: ABCD
-
-/a|b|c|d|e/i
- E
- 0: E
-
-/(a|b|c|d|e)f/i
- EF
- 0: EF
-
-/abcd*efg/i
- ABCDEFG
- 0: ABCDEFG
-
-/ab*/i
- XABYABBBZ
- 0: AB
- 1: A
- XAYABBBZ
- 0: A
-
-/(ab|cd)e/i
- ABCDE
- 0: CDE
-
-/[abhgefdc]ij/i
- HIJ
- 0: HIJ
-
-/^(ab|cd)e/i
- ABCDE
-No match
-
-/(abc|)ef/i
- ABCDEF
- 0: EF
-
-/(a|b)c*d/i
- ABCD
- 0: BCD
-
-/(ab|ab*)bc/i
- ABC
- 0: ABC
-
-/a([bc]*)c*/i
- ABC
- 0: ABC
- 1: AB
2: A
-/a([bc]*)(c*d)/i
- ABCD
- 0: ABCD
-
-/a([bc]+)(c*d)/i
- ABCD
- 0: ABCD
-
-/a([bc]*)(c+d)/i
- ABCD
- 0: ABCD
-
-/a[bcd]*dcdcde/i
- ADCDCDE
- 0: ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
- ABC
- 0: ABC
-
-/((a)(b)c)(d)/i
- ABCD
- 0: ABCD
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
- 0: ALPHA
- 1: ALPH
- 2: ALP
- 3: AL
- 4: A
-
-/^a(bc+|b[eh])g|.h$/i
- ABH
- 0: BH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- 0: EFFGZ
- IJ
- 0: IJ
- REFFGZ
- 0: EFFGZ
- *** Failers
-No match
- ADCDCDE
-No match
- EFFG
-No match
- BCDD
-No match
-
-/((((((((((a))))))))))/i
- A
- 0: A
-
-/(((((((((a)))))))))/i
- A
- 0: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
- 0: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
- 0: C
-
-/multiple words of text/i
- *** Failers
-No match
- AA
-No match
- UH-UH
-No match
-
-/multiple words/i
- MULTIPLE WORDS, YEAH
- 0: MULTIPLE WORDS
-
-/(.*)c(.*)/i
- ABCDE
- 0: ABCDE
- 1: ABCD
- 2: ABC
-
-/\((.*), (.*)\)/i
- (A, B)
- 0: (A, B)
-
-/[k]/i
-
-/abcd/i
- ABCD
- 0: ABCD
-
-/a(bc)d/i
- ABCD
- 0: ABCD
-
-/a[-]?c/i
- AC
- 0: AC
-
-/a(?!b)./
- abad
- 0: ad
-
-/a(?=d)./
- abad
- 0: ad
-
-/a(?=c|d)./
- abad
- 0: ad
-
-/a(?:b|c|d)(.)/
- ace
- 0: ace
-
-/a(?:b|c|d)*(.)/
- ace
- 0: ace
- 1: ac
-
-/a(?:b|c|d)+?(.)/
- ace
- 0: ace
- acdbcdbe
- 0: acdbcdbe
- 1: acdbcdb
- 2: acdbcd
- 3: acdbc
- 4: acdb
- 5: acd
-
-/a(?:b|c|d)+(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: acdbcdb
- 2: acdbcd
- 3: acdbc
- 4: acdb
- 5: acd
-
-/a(?:b|c|d){2}(.)/
- acdbcdbe
- 0: acdb
-
-/a(?:b|c|d){4,5}(.)/
- acdbcdbe
- 0: acdbcdb
- 1: acdbcd
-
-/a(?:b|c|d){4,5}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: acdbcd
-
-/((foo)|(bar))*/
- foobar
- 0: foobar
- 1: foo
- 2:
-
-/a(?:b|c|d){6,7}(.)/
- acdbcdbe
- 0: acdbcdbe
-
-/a(?:b|c|d){6,7}?(.)/
- acdbcdbe
- 0: acdbcdbe
-
-/a(?:b|c|d){5,6}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: acdbcdb
-
-/a(?:b|c|d){5,6}?(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: acdbcdb
-
-/a(?:b|c|d){5,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: acdbcdb
-
-/a(?:b|c|d){5,7}?(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: acdbcdb
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
- 0: ace
-
-/^(.+)?B/
- AB
- 0: AB
-
-/^([^a-z])|(\^)$/
- .
- 0: .
-
-/^[<>]&/
- <&OUT
- 0: <&
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
- foobar
- 0: foobar
- 1: foo
- 2:
-
-/(?<=a)b/
- ab
- 0: b
- *** Failers
-No match
- cb
-No match
- b
-No match
-
-/(?<!c)b/
- ab
- 0: b
- b
- 0: b
- b
- 0: b
-
-/(?:..)*a/
- aba
- 0: aba
- 1: a
-
-/(?:..)*?a/
- aba
- 0: aba
- 1: a
-
-/^(){3,5}/
- abc
- 0:
-
-/^(a+)*ax/
- aax
- 0: aax
-
-/^((a|b)+)*ax/
- aax
- 0: aax
-
-/^((a|bc)+)*ax/
- aax
- 0: aax
-
-/(a|x)*ab/
- cab
- 0: ab
-
-/(a)*ab/
- cab
- 0: ab
-
-/(?:(?i)a)b/
- ab
- 0: ab
-
-/((?i)a)b/
- ab
- 0: ab
-
-/(?:(?i)a)b/
- Ab
- 0: Ab
-
-/((?i)a)b/
- Ab
- 0: Ab
-
-/(?:(?i)a)b/
- *** Failers
-No match
- cb
-No match
- aB
-No match
-
-/((?i)a)b/
-
-/(?i:a)b/
- ab
- 0: ab
-
-/((?i:a))b/
- ab
- 0: ab
-
-/(?i:a)b/
- Ab
- 0: Ab
-
-/((?i:a))b/
- Ab
- 0: Ab
-
-/(?i:a)b/
- *** Failers
-No match
- aB
-No match
- aB
-No match
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
- ab
- 0: ab
-
-/((?-i)a)b/i
- ab
- 0: ab
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- aB
- 0: aB
- Ab
-No match
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
- ab
- 0: ab
-
-/((?-i:a))b/i
- ab
- 0: ab
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
-
-/(?-i:a)b/i
- *** Failers
-No match
- AB
-No match
- Ab
-No match
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
-
-/(?-i:a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
- *** Failers
-No match
- AB
-No match
- a\nB
-No match
-
-/((?s-i:a.))b/i
- a\nB
- 0: a\x0aB
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
- 0: cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/foo\w*\d{4}baz/
- foobar1234baz
- 0: foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
- x~~
- 0: x~~
- 1: x
-
-/^a(?#xxx){3}c/
- aaac
- 0: aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
- aaac
- 0: aaac
-
-/(?<![cd])b/
- *** Failers
-No match
- B\nB
-No match
- dbcb
-No match
-
-/(?<![cd])[ab]/
- dbaacb
- 0: a
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
- dbaacb
- 0: a
-
-/(?<!cd)[ab]/
- cdaccb
- 0: b
-
-/^(?:a?b?)*$/
- *** Failers
-No match
- dbcb
-No match
- a--
-No match
-
-/((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
- 0: a\x0ab
-
-/((?m)^b$)/
- a\nb\nc\n
- 0: b
-
-/(?m)^b/
- a\nb\n
- 0: b
-
-/(?m)^(b)/
- a\nb\n
- 0: b
-
-/((?m)^b)/
- a\nb\n
- 0: b
-
-/\n((?m)^b)/
- a\nb\n
- 0: \x0ab
-
-/((?s).)c(?!.)/
- a\nb\nc\n
- 0: \x0ac
- a\nb\nc\n
- 0: \x0ac
-
-/((?s)b.)c(?!.)/
- a\nb\nc\n
- 0: b\x0ac
- a\nb\nc\n
- 0: b\x0ac
-
-/^b/
-
-/()^b/
- *** Failers
-No match
- a\nb\nc\n
-No match
- a\nb\nc\n
-No match
-
-/((?m)^b)/
- a\nb\nc\n
- 0: b
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
- a
- 0: a
-
-/(?(?=a)b|a)/
- *** Failers
-No match
- a
-No match
- a
-No match
-
-/(?(?=a)a|b)/
- a
- 0: a
-
-/(\w+:)+/
- one:
- 0: one:
-
-/$(?<=^(a))/
- a
- 0:
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
-
-/(a*)b+/
- caab
- 0: aab
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- *** Failers
- 0: Failers
- abcd:
-No match
- abcd:
-No match
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
-
-/(>a+)ab/
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/([[:]+)/
- a:[b]:
- 0: :[
- 1: :
-
-/([[=]+)/
- a=[b]=
- 0: =[
- 1: =
-
-/([[.]+)/
- a.[b].
- 0: .[
- 1: .
-
-/((?>a+)b)/
- aaab
- 0: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: abc(ade)ufh()()
- 2: abc(ade)ufh()
- 3: abc(ade)ufh
- 4: abc(ade)
- 5: abc
-
-/a\Z/
- *** Failers
-No match
- aaab
-No match
- a\nb\n
-No match
-
-/b\Z/
- a\nb\n
- 0: b
-
-/b\z/
-
-/b\Z/
- a\nb
- 0: b
-
-/b\z/
- a\nb
- 0: b
- *** Failers
-No match
+/^S(\X*)e(\X*)$/8
+ Stéréo
+ 0: Ste\x{301}re\x{301}o
+ 1: te\x{301}r
+ 2: \x{301}o
-/(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- 0: alphabetabcd
- endingwxyz
- 0: endingwxyz
- *** Failers
-No match
- a rather long string that doesn't end with one of them
-No match
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/(?<=\d{3}(?!999))foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
-
-/(?<=(?!...999)\d{3})foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
+/^\X/8
+ ́réo
+ 0: \x{301}
-/(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
+/^a\X41z/<JS>
+ aX41z
+ 0: aX41z
*** Failers
No match
- 123999foo
-No match
-
-/(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- *** Failers
-No match
- 123999foo
+ aAz
No match
-/((Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: Z
- 2:
-
-/(Z()|A)*/
- ZABCDEFG
- 0: ZA
- 1: Z
- 2:
-
-/(Z(())|A)*/
- ZABCDEFG
- 0: ZA
- 1: Z
- 2:
-
-/((?>Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: Z
- 2:
-
-/((?>)+|A)*/
- ZABCDEFG
- 0:
-
-/a*/g
- abbab
- 0: a
- 1:
- 0:
- 0:
- 0: a
- 1:
- 0:
- 0:
+/(?<=ab\Cde)X/8
+Failed: \C not allowed in lookbehind assertion at offset 10
-/^[a-\d]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/^[\d-a]/
- abcde
+/\X/
+ a\P
0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/[[:space:]]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d\x0b
- 1: \x09\x0a\x0c\x0d
- 2: \x09\x0a\x0c
- 3: \x09\x0a
- 4: \x09
- 5:
-
-/[[:blank:]]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09
- 1:
-
-/[\s]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d
- 1: \x09\x0a\x0c
- 2: \x09\x0a
- 3: \x09
- 4:
-
-/\s+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d
- 1: \x09\x0a\x0c
- 2: \x09\x0a
- 3: \x09
- 4:
-
-/a b/x
- ab
-No match
-
-/(?!\A)x/m
- a\nxb\n
- 0: x
-
-/(?!^)x/m
- a\nxb\n
-No match
-
-/abc\Qabc\Eabc/
- abcabcabc
- 0: abcabcabc
-
-/abc\Q(*+|\Eabc/
- abc(*+|abc
- 0: abc(*+|abc
-
-/ abc\Q abc\Eabc/x
- abc abcabc
- 0: abc abcabc
- *** Failers
-No match
- abcabcabc
-No match
-
-/abc#comment
- \Q#not comment
- literal\E/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/abc#comment
- \Q#not comment
- literal/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/abc#comment
- \Q#not comment
- literal\E #more comment
- /x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/abc#comment
- \Q#not comment
- literal\E #more comment/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/\Qabc\$xyz\E/
- abc\\\$xyz
- 0: abc\$xyz
-
-/\Qabc\E\$\Qxyz\E/
- abc\$xyz
- 0: abc$xyz
-
-/\Gabc/
- abc
- 0: abc
- *** Failers
-No match
- xyzabc
-No match
-
-/\Gabc./g
- abc1abc2xyzabc3
- 0: abc1
- 0: abc2
-
-/abc./g
- abc1abc2xyzabc3
- 0: abc1
- 0: abc2
- 0: abc3
-
-/a(?x: b c )d/
- XabcdY
- 0: abcd
- *** Failers
-No match
- Xa b c d Y
-No match
-
-/((?x)x y z | a b c)/
- XabcY
- 0: abc
- AxyzB
- 0: xyz
+ a\P\P
+Partial match: a
-/(?i)AB(?-i)C/
- XabCY
- 0: abC
- *** Failers
-No match
- XabcY
-No match
+/\Xa/
+ aa\P
+ 0: aa
+ aa\P\P
+ 0: aa
-/((?i)AB(?-i)C|D)E/
- abCE
- 0: abCE
- DE
- 0: DE
- *** Failers
-No match
- abcE
-No match
- abCe
-No match
- dE
-No match
- De
-No match
+/\X{2}/
+ aa\P
+ 0: aa
+ aa\P\P
+Partial match: aa
-/[z\Qa-d]\E]/
- z
- 0: z
- a
- 0: a
- -
- 0: -
- d
- 0: d
- ]
- 0: ]
- *** Failers
- 0: a
- b
-No match
+/\X+a/
+ a\P
+Partial match: a
+ aa\P
+ 0: aa
+ aa\P\P
+Partial match: aa
-/[\z\C]/
- z
- 0: z
- C
- 0: C
-
-/\M/
- M
- 0: M
-
-/(a+)*b/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
-
-/(?i)reg(?:ul(?:[a�]|ae)r|ex)/
- REGular
- 0: REGular
- regulaer
- 0: regulaer
- Regex
- 0: Regex
- regul�r
- 0: regul\xe4r
-
-/����[�-��-�]+/
- �����
- 0: \xc5\xe6\xe5\xe4\xe0
- �����
- 0: \xc5\xe6\xe5\xe4\xff
- �����
- 0: \xc5\xe6\xe5\xe4\xc0
- �����
- 0: \xc5\xe6\xe5\xe4\xdf
-
-/(?<=Z)X./
- \x84XAZXB
- 0: XB
-
-/^(?(2)a|(1)(2))+$/
- 123a
-Error -17
-
-/(?<=a|bbbb)c/
- ac
- 0: c
- bbbbc
- 0: c
-
-/abc/>testsavedregex
-Compiled regex written to testsavedregex
-<testsavedregex
-Compiled regex loaded from testsavedregex
-No study data
- abc
- 0: abc
- *** Failers
-No match
- bca
-No match
+/\X+?a/
+ a\P
+Partial match: a
+ ab\P
+Partial match: ab
+ aa\P
+ 0: aa
+ aa\P\P
+ 0: aa
+ aba\P
+ 0: aba
-/abc/F>testsavedregex
-Compiled regex written to testsavedregex
-<testsavedregex
-Compiled regex (byte-inverted) loaded from testsavedregex
-No study data
- abc
- 0: abc
- *** Failers
-No match
- bca
-No match
+/-- These Unicode 6.1.0 scripts are not known to Perl. --/
-/(a|b)/S>testsavedregex
-Compiled regex written to testsavedregex
-Study data written to testsavedregex
-<testsavedregex
-Compiled regex loaded from testsavedregex
-Study data loaded from testsavedregex
- abc
- 0: a
- *** Failers
- 0: a
- def
-No match
-
-/(a|b)/SF>testsavedregex
-Compiled regex written to testsavedregex
-Study data written to testsavedregex
-<testsavedregex
-Compiled regex (byte-inverted) loaded from testsavedregex
-Study data loaded from testsavedregex
- abc
- 0: a
- *** Failers
- 0: a
- def
-No match
-
-/line\nbreak/
- this is a line\nbreak
- 0: line\x0abreak
- line one\nthis is a line\nbreak in the second line
- 0: line\x0abreak
-
-/line\nbreak/f
- this is a line\nbreak
- 0: line\x0abreak
- ** Failers
-No match
- line one\nthis is a line\nbreak in the second line
-No match
+/\p{Chakma}\d/8W
+ \x{11100}\x{1113c}
+ 0: \x{11100}\x{1113c}
-/line\nbreak/mf
- this is a line\nbreak
- 0: line\x0abreak
- ** Failers
-No match
- line one\nthis is a line\nbreak in the second line
-No match
+/\p{Takri}\d/8W
+ \x{11680}\x{116c0}
+ 0: \x{11680}\x{116c0}
-/1234/
- 123\P
-Partial match: 123
- a4\P\R
-No match
+/^\X/8
+ A\P
+ 0: A
+ A\P\P
+Partial match: A
+ A\x{300}\x{301}\P
+ 0: A\x{300}\x{301}
+ A\x{300}\x{301}\P\P
+Partial match: A\x{300}\x{301}
+ A\x{301}\P
+ 0: A\x{301}
+ A\x{301}\P\P
+Partial match: A\x{301}
+
+/^\X{2,3}/8
+ A\P
+Partial match: A
+ A\P\P
+Partial match: A
+ AA\P
+ 0: AA
+ AA\P\P
+Partial match: AA
+ A\x{300}\x{301}\P
+Partial match: A\x{300}\x{301}
+ A\x{300}\x{301}\P\P
+Partial match: A\x{300}\x{301}
+ A\x{300}\x{301}A\x{300}\x{301}\P
+ 0: A\x{300}\x{301}A\x{300}\x{301}
+ A\x{300}\x{301}A\x{300}\x{301}\P\P
+Partial match: A\x{300}\x{301}A\x{300}\x{301}
+
+/^\X{2}/8
+ AA\P
+ 0: AA
+ AA\P\P
+Partial match: AA
+ A\x{300}\x{301}A\x{300}\x{301}\P
+ 0: A\x{300}\x{301}A\x{300}\x{301}
+ A\x{300}\x{301}A\x{300}\x{301}\P\P
+Partial match: A\x{300}\x{301}A\x{300}\x{301}
+
+/^\X+/8
+ AA\P
+ 0: AA
+ AA\P\P
+Partial match: AA
+
+/^\X+?Z/8
+ AA\P
+Partial match: AA
+ AA\P\P
+Partial match: AA
+
+/A\x{3a3}B/8iDZ
+------------------------------------------------------------------
+ Bra
+ /i A
+ clist 03a3 03c2 03c3
+ /i B
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: caseless utf
+First char = 'A' (caseless)
+Need char = 'B' (caseless)
+
+/\x{3a3}B/8iDZ
+------------------------------------------------------------------
+ Bra
+ clist 03a3 03c2 03c3
+ /i B
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+Need char = 'B' (caseless)
+
+/[\x{3a3}]/8iBZ
+------------------------------------------------------------------
+ Bra
+ clist 03a3 03c2 03c3
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^\x{3a3}]/8iBZ
+------------------------------------------------------------------
+ Bra
+ not clist 03a3 03c2 03c3
+ Ket
+ End
+------------------------------------------------------------------
+
+/[\x{3a3}]+/8iBZ
+------------------------------------------------------------------
+ Bra
+ clist 03a3 03c2 03c3 +
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^\x{3a3}]+/8iBZ
+------------------------------------------------------------------
+ Bra
+ not clist 03a3 03c2 03c3 +
+ Ket
+ End
+------------------------------------------------------------------
+
+/a*\x{3a3}/8iBZ
+------------------------------------------------------------------
+ Bra
+ /i a*+
+ clist 03a3 03c2 03c3
+ Ket
+ End
+------------------------------------------------------------------
+
+/\x{3a3}+a/8iBZ
+------------------------------------------------------------------
+ Bra
+ clist 03a3 03c2 03c3 ++
+ /i a
+ Ket
+ End
+------------------------------------------------------------------
+
+/\x{3a3}*\x{3c2}/8iBZ
+------------------------------------------------------------------
+ Bra
+ clist 03a3 03c2 03c3 *
+ clist 03a3 03c2 03c3
+ Ket
+ End
+------------------------------------------------------------------
+
+/\x{3a3}{3}/8i+
+ \x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
+ 0: \x{3a3}\x{3c3}\x{3c2}
+ 0+ \x{3a3}\x{3c3}\x{3c2}
+
+/\x{3a3}{2,4}/8i+
+ \x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
+ 0: \x{3a3}\x{3c3}\x{3c2}\x{3a3}
+ 0+ \x{3c3}\x{3c2}
+
+/\x{3a3}{2,4}?/8i+
+ \x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
+ 0: \x{3a3}\x{3c3}
+ 0+ \x{3c2}\x{3a3}\x{3c3}\x{3c2}
+
+/\x{3a3}+./8i+
+ \x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
+ 0: \x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
+ 0+
-/1234/
- 123\P
-Partial match: 123
- 4\P\R
- 0: 4
-
-/^/mg
- a\nb\nc\n
- 0:
- 0:
- 0:
- \
- 0:
-
-/(?<=C\n)^/mg
- A\nC\nC\n
- 0:
-
-/(?s)A?B/
- AB
- 0: AB
- aB
- 0: B
-
-/(?s)A*B/
- AB
- 0: AB
- aB
- 0: B
-
-/(?m)A?B/
- AB
- 0: AB
- aB
- 0: B
-
-/(?m)A*B/
- AB
- 0: AB
- aB
- 0: B
-
-/Content-Type\x3A[^\r\n]{6,}/
- Content-Type:xxxxxyyy
- 0: Content-Type:xxxxxyyy
- 1: Content-Type:xxxxxyy
- 2: Content-Type:xxxxxy
-
-/Content-Type\x3A[^\r\n]{6,}z/
- Content-Type:xxxxxyyyz
- 0: Content-Type:xxxxxyyyz
-
-/Content-Type\x3A[^a]{6,}/
- Content-Type:xxxyyy
- 0: Content-Type:xxxyyy
-
-/Content-Type\x3A[^a]{6,}z/
- Content-Type:xxxyyyz
- 0: Content-Type:xxxyyyz
-
-/^abc/m
- xyz\nabc
- 0: abc
- xyz\nabc\<lf>
- 0: abc
- xyz\r\nabc\<lf>
- 0: abc
- xyz\rabc\<cr>
- 0: abc
- xyz\r\nabc\<crlf>
- 0: abc
- ** Failers
-No match
- xyz\nabc\<cr>
-No match
- xyz\r\nabc\<cr>
-No match
- xyz\nabc\<crlf>
-No match
- xyz\rabc\<crlf>
-No match
- xyz\rabc\<lf>
-No match
-
-/abc$/m<lf>
- xyzabc
- 0: abc
- xyzabc\n
- 0: abc
- xyzabc\npqr
- 0: abc
- xyzabc\r\<cr>
- 0: abc
- xyzabc\rpqr\<cr>
- 0: abc
- xyzabc\r\n\<crlf>
- 0: abc
- xyzabc\r\npqr\<crlf>
- 0: abc
+/\x{3a3}++./8i+
** Failers
No match
- xyzabc\r
-No match
- xyzabc\rpqr
-No match
- xyzabc\r\n
-No match
- xyzabc\r\npqr
-No match
-
-/^abc/m<cr>
- xyz\rabcdef
- 0: abc
- xyz\nabcdef\<lf>
- 0: abc
- ** Failers
-No match
- xyz\nabcdef
-No match
-
-/^abc/m<lf>
- xyz\nabcdef
- 0: abc
- xyz\rabcdef\<cr>
- 0: abc
- ** Failers
-No match
- xyz\rabcdef
-No match
-
-/^abc/m<crlf>
- xyz\r\nabcdef
- 0: abc
- xyz\rabcdef\<cr>
- 0: abc
- ** Failers
-No match
- xyz\rabcdef
-No match
-
-/.*/<lf>
- abc\ndef
- 0: abc
- 1: ab
- 2: a
- 3:
- abc\rdef
- 0: abc\x0ddef
- 1: abc\x0dde
- 2: abc\x0dd
- 3: abc\x0d
- 4: abc
- 5: ab
- 6: a
- 7:
- abc\r\ndef
- 0: abc\x0d
- 1: abc
- 2: ab
- 3: a
- 4:
- \<cr>abc\ndef
- 0: abc\x0adef
- 1: abc\x0ade
- 2: abc\x0ad
- 3: abc\x0a
- 4: abc
- 5: ab
- 6: a
- 7:
- \<cr>abc\rdef
- 0: abc
- 1: ab
- 2: a
- 3:
- \<cr>abc\r\ndef
- 0: abc
- 1: ab
- 2: a
- 3:
- \<crlf>abc\ndef
- 0: abc\x0adef
- 1: abc\x0ade
- 2: abc\x0ad
- 3: abc\x0a
- 4: abc
- 5: ab
- 6: a
- 7:
- \<crlf>abc\rdef
- 0: abc\x0ddef
- 1: abc\x0dde
- 2: abc\x0dd
- 3: abc\x0d
- 4: abc
- 5: ab
- 6: a
- 7:
- \<crlf>abc\r\ndef
- 0: abc
- 1: ab
- 2: a
- 3:
-
-/\w+(.)(.)?def/s
- abc\ndef
- 0: abc\x0adef
- abc\rdef
- 0: abc\x0ddef
- abc\r\ndef
- 0: abc\x0d\x0adef
-
-/^\w+=.*(\\\n.*)*/
- abc=xyz\\\npqr
- 0: abc=xyz\\x0apqr
- 1: abc=xyz\\x0apq
- 2: abc=xyz\\x0ap
- 3: abc=xyz\\x0a
- 4: abc=xyz\
- 5: abc=xyz
- 6: abc=xy
- 7: abc=x
- 8: abc=
-
-/^(a()*)*/
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
- 4:
-
-/^(?:a(?:(?:))*)*/
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
- 4:
-
-/^(a()+)+/
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
-
-/^(?:a(?:(?:))+)+/
- aaaa
- 0: aaaa
- 1: aaa
- 2: aa
- 3: a
-
-/(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
-
-/(?>a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
-
-/(?:a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
-
-/^a.b/<lf>
- a\rb
- 0: a\x0db
- a\nb\<cr>
- 0: a\x0ab
+ \x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
+No match
+
+/\x{3a3}*\x{3c2}/8iBZ
+------------------------------------------------------------------
+ Bra
+ clist 03a3 03c2 03c3 *
+ clist 03a3 03c2 03c3
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^\x{3a3}]*\x{3c2}/8iBZ
+------------------------------------------------------------------
+ Bra
+ not clist 03a3 03c2 03c3 *+
+ clist 03a3 03c2 03c3
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^a]*\x{3c2}/8iBZ
+------------------------------------------------------------------
+ Bra
+ /i [^a]*
+ clist 03a3 03c2 03c3
+ Ket
+ End
+------------------------------------------------------------------
+
+/ist/8iBZ
+------------------------------------------------------------------
+ Bra
+ /i i
+ clist 0053 0073 017f
+ /i t
+ Ket
+ End
+------------------------------------------------------------------
+ ikt
+No match
+
+/is+t/8i
+ iSs\x{17f}t
+ 0: iSs\x{17f}t
+ ikt
+No match
+
+/is+?t/8i
+ ikt
+No match
+
+/is?t/8i
+ ikt
+No match
+
+/is{2}t/8i
+ iskt
+No match
+
+/-- This property is a PCRE special --/
+
+/^\p{Xuc}/8
+ $abc
+ 0: $
+ @abc
+ 0: @
+ `abc
+ 0: `
+ \x{1234}abc
+ 0: \x{1234}
** Failers
No match
- a\nb
-No match
- a\nb\<any>
-No match
- a\rb\<cr>
-No match
- a\rb\<any>
+ abc
No match
-/^abc./mgx<any>
- abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 \x{2028}abc8 \x{2029}abc9 JUNK
- 0: abc1
- 0: abc2
- 0: abc3
- 0: abc4
- 0: abc5
- 0: abc6
- 0: abc7
-
-/abc.$/mgx<any>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
- 0: abc1
- 0: abc2
- 0: abc3
- 0: abc4
- 0: abc5
- 0: abc6
- 0: abc9
-
-/^a\Rb/<bsr_unicode>
- a\nb
- 0: a\x0ab
- a\rb
- 0: a\x0db
- a\r\nb
- 0: a\x0d\x0ab
- a\x0bb
- 0: a\x0bb
- a\x0cb
- 0: a\x0cb
- a\x85b
- 0: a\x85b
+/^\p{Xuc}+/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $@`\x{a0}\x{1234}\x{e000}
** Failers
No match
- a\n\rb
+ \x{9f}
No match
-/^a\R*b/<bsr_unicode>
- ab
- 0: ab
- a\nb
- 0: a\x0ab
- a\rb
- 0: a\x0db
- a\r\nb
- 0: a\x0d\x0ab
- a\x0bb
- 0: a\x0bb
- a\x0cb
- 0: a\x0cb
- a\x85b
- 0: a\x85b
- a\n\rb
- 0: a\x0a\x0db
- a\n\r\x85\x0cb
- 0: a\x0a\x0d\x85\x0cb
-
-/^a\R+b/<bsr_unicode>
- a\nb
- 0: a\x0ab
- a\rb
- 0: a\x0db
- a\r\nb
- 0: a\x0d\x0ab
- a\x0bb
- 0: a\x0bb
- a\x0cb
- 0: a\x0cb
- a\x85b
- 0: a\x85b
- a\n\rb
- 0: a\x0a\x0db
- a\n\r\x85\x0cb
- 0: a\x0a\x0d\x85\x0cb
- ** Failers
-No match
- ab
-No match
-
-/^a\R{1,3}b/<bsr_unicode>
- a\nb
- 0: a\x0ab
- a\n\rb
- 0: a\x0a\x0db
- a\n\r\x85b
- 0: a\x0a\x0d\x85b
- a\r\n\r\nb
- 0: a\x0d\x0a\x0d\x0ab
- a\r\n\r\n\r\nb
- 0: a\x0d\x0a\x0d\x0a\x0d\x0ab
- a\n\r\n\rb
- 0: a\x0a\x0d\x0a\x0db
- a\n\n\r\nb
- 0: a\x0a\x0a\x0d\x0ab
+/^\p{Xuc}+?/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $
** Failers
No match
- a\n\n\n\rb
-No match
- a\r
+ \x{9f}
No match
-/^a[\R]b/<bsr_unicode>
- aRb
- 0: aRb
+/^\p{Xuc}+?\*/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $@`\x{a0}\x{1234}\x{e000}*
** Failers
No match
- a\nb
+ \x{9f}
No match
-/.+foo/
- afoo
- 0: afoo
- ** Failers
-No match
- \r\nfoo
-No match
- \nfoo
-No match
-
-/.+foo/<crlf>
- afoo
- 0: afoo
- \nfoo
- 0: \x0afoo
- ** Failers
-No match
- \r\nfoo
-No match
-
-/.+foo/<any>
- afoo
- 0: afoo
- ** Failers
-No match
- \nfoo
-No match
- \r\nfoo
-No match
-
-/.+foo/s
- afoo
- 0: afoo
- \r\nfoo
- 0: \x0d\x0afoo
- \nfoo
- 0: \x0afoo
-
-/^$/mg<any>
- abc\r\rxyz
- 0:
- abc\n\rxyz
- 0:
- ** Failers
-No match
- abc\r\nxyz
-No match
-
-/^X/m
- XABC
- 0: X
- ** Failers
+/^\p{Xuc}++/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $@`\x{a0}\x{1234}\x{e000}
+ ** Failers
No match
- XABC\B
+ \x{9f}
No match
-/(?m)^$/<any>g+
- abc\r\n\r\n
- 0:
- 0+ \x0d\x0a
-
-/(?m)^$|^\r\n/<any>g+
- abc\r\n\r\n
- 0: \x0d\x0a
- 0+
- 1:
-
-/(?m)$/<any>g+
- abc\r\n\r\n
- 0:
- 0+ \x0d\x0a\x0d\x0a
- 0:
- 0+ \x0d\x0a
- 0:
- 0+
-
-/(?|(abc)|(xyz))/
- >abc<
- 0: abc
- >xyz<
- 0: xyz
-
-/(x)(?|(abc)|(xyz))(x)/
- xabcx
- 0: xabcx
- xxyzx
- 0: xxyzx
-
-/(x)(?|(abc)(pqr)|(xyz))(x)/
- xabcpqrx
- 0: xabcpqrx
- xxyzx
- 0: xxyzx
-
-/(?|(abc)|(xyz))(?1)/
- abcabc
- 0: abcabc
- xyzabc
- 0: xyzabc
- ** Failers
-No match
- xyzxyz
-No match
-
-/\H\h\V\v/
- X X\x0a
- 0: X X\x0a
- X\x09X\x0b
- 0: X\x09X\x0b
+/^\p{Xuc}{3,5}/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $@`\x{a0}\x{1234}
** Failers
No match
- \xa0 X\x0a
+ \x{9f}
No match
-
-/\H*\h+\V?\v{3,4}/
- \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
- 0: \x09 \xa0X\x0a\x0b\x0c\x0d
- 1: \x09 \xa0X\x0a\x0b\x0c
- \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
- 0: \x09 \xa0\x0a\x0b\x0c\x0d
- 1: \x09 \xa0\x0a\x0b\x0c
- \x09\x20\xa0\x0a\x0b\x0c
- 0: \x09 \xa0\x0a\x0b\x0c
- ** Failers
-No match
- \x09\x20\xa0\x0a\x0b
-No match
-
-/\H{3,4}/
- XY ABCDE
- 0: ABCD
- 1: ABC
- XY PQR ST
- 0: PQR
-
-/.\h{3,4}./
- XY AB PQRS
- 0: B P
- 1: B
-
-/\h*X\h?\H+Y\H?Z/
- >XNNNYZ
- 0: XNNNYZ
- > X NYQZ
- 0: X NYQZ
+
+/^\p{Xuc}{3,5}?/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $@`
** Failers
No match
- >XYZ
+ \x{9f}
No match
- > X NY Z
-No match
-
-/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
- >XY\x0aZ\x0aA\x0bNN\x0c
- 0: XY\x0aZ\x0aA\x0bNN\x0c
- >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
- 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
-/.+A/<crlf>
- \r\nA
-No match
-
-/\nA/<crlf>
- \r\nA
- 0: \x0aA
-
-/[\r\n]A/<crlf>
- \r\nA
- 0: \x0aA
-
-/(\r|\n)A/<crlf>
- \r\nA
- 0: \x0aA
-
-/a\Rb/I<bsr_anycrlf>
-Capturing subpattern count = 0
-Options: bsr_anycrlf
-First char = 'a'
-Need char = 'b'
- a\rb
- 0: a\x0db
- a\nb
- 0: a\x0ab
- a\r\nb
- 0: a\x0d\x0ab
+/^[\p{Xuc}]/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $
** Failers
No match
- a\x85b
-No match
- a\x0bb
+ \x{9f}
No match
-/a\Rb/I<bsr_unicode>
-Capturing subpattern count = 0
-Options: bsr_unicode
-First char = 'a'
-Need char = 'b'
- a\rb
- 0: a\x0db
- a\nb
- 0: a\x0ab
- a\r\nb
- 0: a\x0d\x0ab
- a\x85b
- 0: a\x85b
- a\x0bb
- 0: a\x0bb
- ** Failers
-No match
- a\x85b\<bsr_anycrlf>
-No match
- a\x0bb\<bsr_anycrlf>
-No match
-
-/a\R?b/I<bsr_anycrlf>
-Capturing subpattern count = 0
-Options: bsr_anycrlf
-First char = 'a'
-Need char = 'b'
- a\rb
- 0: a\x0db
- a\nb
- 0: a\x0ab
- a\r\nb
- 0: a\x0d\x0ab
+/^[\p{Xuc}]+/8
+ $@`\x{a0}\x{1234}\x{e000}**
+ 0: $@`\x{a0}\x{1234}\x{e000}
** Failers
No match
- a\x85b
-No match
- a\x0bb
+ \x{9f}
No match
-/a\R?b/I<bsr_unicode>
-Capturing subpattern count = 0
-Options: bsr_unicode
-First char = 'a'
-Need char = 'b'
- a\rb
- 0: a\x0db
- a\nb
- 0: a\x0ab
- a\r\nb
- 0: a\x0d\x0ab
- a\x85b
- 0: a\x85b
- a\x0bb
- 0: a\x0bb
- ** Failers
-No match
- a\x85b\<bsr_anycrlf>
-No match
- a\x0bb\<bsr_anycrlf>
-No match
-
-/a\R{2,4}b/I<bsr_anycrlf>
-Capturing subpattern count = 0
-Partial matching not supported
-Options: bsr_anycrlf
-First char = 'a'
-Need char = 'b'
- a\r\n\nb
- 0: a\x0d\x0a\x0ab
- a\n\r\rb
- 0: a\x0a\x0d\x0db
- a\r\n\r\n\r\n\r\nb
- 0: a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0ab
+/^\P{Xuc}/8
+ abc
+ 0: a
** Failers
+ 0: *
+ $abc
No match
- a\x85\85b
-No match
- a\x0b\0bb
+ @abc
No match
-
-/a\R{2,4}b/I<bsr_unicode>
-Capturing subpattern count = 0
-Partial matching not supported
-Options: bsr_unicode
-First char = 'a'
-Need char = 'b'
- a\r\rb
- 0: a\x0d\x0db
- a\n\n\nb
- 0: a\x0a\x0a\x0ab
- a\r\n\n\r\rb
- 0: a\x0d\x0a\x0a\x0d\x0db
- a\x85\85b
+ `abc
No match
- a\x0b\0bb
+ \x{1234}abc
No match
- ** Failers
+
+/^[\P{Xuc}]/8
+ abc
+ 0: a
+ ** Failers
+ 0: *
+ $abc
No match
- a\r\r\r\r\rb
+ @abc
No match
- a\x85\85b\<bsr_anycrlf>
+ `abc
No match
- a\x0b\0bb\<bsr_anycrlf>
+ \x{1234}abc
No match
-/ End of testinput7 /
+/-- End of testinput7 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput8 b/lib/stdlib/test/re_SUITE_data/testoutput8
index 631e5b82f9..75affbe2d4 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput8
+++ b/lib/stdlib/test/re_SUITE_data/testoutput8
@@ -1,1035 +1,6813 @@
-/-- Do not use the \x{} construct except with patterns that have the --/
-/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
+/-- This set of tests check the DFA matching functionality of pcre_dfa_exec().
+ The -dfa flag must be used with pcretest when running it. --/
+
+/abc/
+ abc
+ 0: abc
+
+/ab*c/
+ abc
+ 0: abc
+ abbbbc
+ 0: abbbbc
+ ac
+ 0: ac
+
+/ab+c/
+ abc
+ 0: abc
+ abbbbbbc
+ 0: abbbbbbc
+ *** Failers
No match
-/-- that option is set. However, the latest Perls recognize them always. --/
+ ac
No match
-
-/\x{100}ab/8
- \x{100}ab
- 0: \x{100}ab
-
-/a\x{100}*b/8
ab
- 0: ab
- a\x{100}b
- 0: a\x{100}b
- a\x{100}\x{100}b
- 0: a\x{100}\x{100}b
-
-/a\x{100}+b/8
- a\x{100}b
- 0: a\x{100}b
- a\x{100}\x{100}b
- 0: a\x{100}\x{100}b
+No match
+
+/a*/
+ a
+ 0: a
+ 1:
+ aaaaaaaaaaaaaaaaa
+ 0: aaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaa
+ 5: aaaaaaaaaaaa
+ 6: aaaaaaaaaaa
+ 7: aaaaaaaaaa
+ 8: aaaaaaaaa
+ 9: aaaaaaaa
+10: aaaaaaa
+11: aaaaaa
+12: aaaaa
+13: aaaa
+14: aaa
+15: aa
+16: a
+17:
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but offsets vector is too small to show all matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaa
+17: aaaaaaaaaaaaa
+18: aaaaaaaaaaaa
+19: aaaaaaaaaaa
+20: aaaaaaaaaa
+21: aaaaaaaaa
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\F
+ 0:
+
+/(a|abcd|african)/
+ a
+ 0: a
+ abcd
+ 0: abcd
+ 1: a
+ african
+ 0: african
+ 1: a
+
+/^abc/
+ abcdef
+ 0: abc
+ *** Failers
+No match
+ xyzabc
+No match
+ xyz\nabc
+No match
+
+/^abc/m
+ abcdef
+ 0: abc
+ xyz\nabc
+ 0: abc
+ *** Failers
+No match
+ xyzabc
+No match
+
+/\Aabc/
+ abcdef
+ 0: abc
+ *** Failers
+No match
+ xyzabc
+No match
+ xyz\nabc
+No match
+
+/\Aabc/m
+ abcdef
+ 0: abc
+ *** Failers
+No match
+ xyzabc
+No match
+ xyz\nabc
+No match
+
+/\Gabc/
+ abcdef
+ 0: abc
+ xyzabc\>3
+ 0: abc
+ *** Failers
+No match
+ xyzabc
+No match
+ xyzabc\>2
+No match
+
+/x\dy\Dz/
+ x9yzz
+ 0: x9yzz
+ x0y+z
+ 0: x0y+z
+ *** Failers
+No match
+ xyz
+No match
+ xxy0z
+No match
+
+/x\sy\Sz/
+ x yzz
+ 0: x yzz
+ x y+z
+ 0: x y+z
+ *** Failers
+No match
+ xyz
+No match
+ xxyyz
+No match
+
+/x\wy\Wz/
+ xxy+z
+ 0: xxy+z
+ *** Failers
+No match
+ xxy0z
+No match
+ x+y+z
+No match
+
+/x.y/
+ x+y
+ 0: x+y
+ x-y
+ 0: x-y
+ *** Failers
+No match
+ x\ny
+No match
+
+/x.y/s
+ x+y
+ 0: x+y
+ x-y
+ 0: x-y
+ x\ny
+ 0: x\x0ay
+
+/(a.b(?s)c.d|x.y)p.q/
+ a+bc+dp+q
+ 0: a+bc+dp+q
+ a+bc\ndp+q
+ 0: a+bc\x0adp+q
+ x\nyp+q
+ 0: x\x0ayp+q
*** Failers
No match
- ab
+ a\nbc\ndp+q
+No match
+ a+bc\ndp\nq
+No match
+ x\nyp\nq
+No match
+
+/a\d\z/
+ ba0
+ 0: a0
+ *** Failers
+No match
+ ba0\n
+No match
+ ba0\ncd
+No match
+
+/a\d\z/m
+ ba0
+ 0: a0
+ *** Failers
+No match
+ ba0\n
+No match
+ ba0\ncd
+No match
+
+/a\d\Z/
+ ba0
+ 0: a0
+ ba0\n
+ 0: a0
+ *** Failers
+No match
+ ba0\ncd
No match
+
+/a\d\Z/m
+ ba0
+ 0: a0
+ ba0\n
+ 0: a0
+ *** Failers
+No match
+ ba0\ncd
+No match
+
+/a\d$/
+ ba0
+ 0: a0
+ ba0\n
+ 0: a0
+ *** Failers
+No match
+ ba0\ncd
+No match
+
+/a\d$/m
+ ba0
+ 0: a0
+ ba0\n
+ 0: a0
+ ba0\ncd
+ 0: a0
+ *** Failers
+No match
+
+/abc/i
+ abc
+ 0: abc
+ aBc
+ 0: aBc
+ ABC
+ 0: ABC
+
+/[^a]/
+ abcd
+ 0: b
+
+/ab?\w/
+ abz
+ 0: abz
+ 1: ab
+ abbz
+ 0: abb
+ 1: ab
+ azz
+ 0: az
+
+/x{0,3}yz/
+ ayzq
+ 0: yz
+ axyzq
+ 0: xyz
+ axxyz
+ 0: xxyz
+ axxxyzq
+ 0: xxxyz
+ axxxxyzq
+ 0: xxxyz
+ *** Failers
+No match
+ ax
+No match
+ axx
+No match
+
+/x{3}yz/
+ axxxyzq
+ 0: xxxyz
+ axxxxyzq
+ 0: xxxyz
+ *** Failers
+No match
+ ax
+No match
+ axx
+No match
+ ayzq
+No match
+ axyzq
+No match
+ axxyz
+No match
+
+/x{2,3}yz/
+ axxyz
+ 0: xxyz
+ axxxyzq
+ 0: xxxyz
+ axxxxyzq
+ 0: xxxyz
+ *** Failers
+No match
+ ax
+No match
+ axx
+No match
+ ayzq
+No match
+ axyzq
+No match
+
+/[^a]+/
+ bac
+ 0: b
+ bcdefax
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+ 3: bc
+ 4: b
+ *** Failers
+ 0: *** F
+ 1: ***
+ 2: ***
+ 3: **
+ 4: *
+ aaaaa
+No match
+
+/[^a]*/
+ bac
+ 0: b
+ 1:
+ bcdefax
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+ 3: bc
+ 4: b
+ 5:
+ *** Failers
+ 0: *** F
+ 1: ***
+ 2: ***
+ 3: **
+ 4: *
+ 5:
+ aaaaa
+ 0:
+
+/[^a]{3,5}/
+ xyz
+ 0: xyz
+ awxyza
+ 0: wxyz
+ 1: wxy
+ abcdefa
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+ abcdefghijk
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+ *** Failers
+ 0: *** F
+ 1: ***
+ 2: ***
+ axya
+No match
+ axa
+No match
+ aaaaa
+No match
+
+/\d*/
+ 1234b567
+ 0: 1234
+ 1: 123
+ 2: 12
+ 3: 1
+ 4:
+ xyz
+ 0:
+
+/\D*/
+ a1234b567
+ 0: a
+ 1:
+ xyz
+ 0: xyz
+ 1: xy
+ 2: x
+ 3:
-/\bX/8
- Xoanon
- 0: X
- +Xoanon
- 0: X
- \x{300}Xoanon
- 0: X
- *** Failers
+/\d+/
+ ab1234c56
+ 0: 1234
+ 1: 123
+ 2: 12
+ 3: 1
+ *** Failers
No match
- YXoanon
+ xyz
No match
-/\BX/8
- YXoanon
- 0: X
+/\D+/
+ ab123c56
+ 0: ab
+ 1: a
*** Failers
+ 0: *** Failers
+ 1: *** Failer
+ 2: *** Faile
+ 3: *** Fail
+ 4: *** Fai
+ 5: *** Fa
+ 6: *** F
+ 7: ***
+ 8: ***
+ 9: **
+10: *
+ 789
No match
- Xoanon
+
+/\d?A/
+ 045ABC
+ 0: 5A
+ ABC
+ 0: A
+ *** Failers
No match
- +Xoanon
+ XYZ
No match
- \x{300}Xoanon
+
+/\D?A/
+ ABC
+ 0: A
+ BAC
+ 0: BA
+ 9ABC
+ 0: A
+ *** Failers
No match
-/X\b/8
- X+oanon
- 0: X
- ZX\x{300}oanon
- 0: X
- FAX
- 0: X
+/a+/
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+
+/^.*xyz/
+ xyz
+ 0: xyz
+ ggggggggxyz
+ 0: ggggggggxyz
+
+/^.+xyz/
+ abcdxyz
+ 0: abcdxyz
+ axyz
+ 0: axyz
+ *** Failers
+No match
+ xyz
+No match
+
+/^.?xyz/
+ xyz
+ 0: xyz
+ cxyz
+ 0: cxyz
+
+/^\d{2,3}X/
+ 12X
+ 0: 12X
+ 123X
+ 0: 123X
+ *** Failers
+No match
+ X
+No match
+ 1X
+No match
+ 1234X
+No match
+
+/^[abcd]\d/
+ a45
+ 0: a4
+ b93
+ 0: b9
+ c99z
+ 0: c9
+ d04
+ 0: d0
+ *** Failers
+No match
+ e45
+No match
+ abcd
+No match
+ abcd1234
+No match
+ 1234
+No match
+
+/^[abcd]*\d/
+ a45
+ 0: a4
+ b93
+ 0: b9
+ c99z
+ 0: c9
+ d04
+ 0: d0
+ abcd1234
+ 0: abcd1
+ 1234
+ 0: 1
+ *** Failers
+No match
+ e45
+No match
+ abcd
+No match
+
+/^[abcd]+\d/
+ a45
+ 0: a4
+ b93
+ 0: b9
+ c99z
+ 0: c9
+ d04
+ 0: d0
+ abcd1234
+ 0: abcd1
+ *** Failers
+No match
+ 1234
+No match
+ e45
+No match
+ abcd
+No match
+
+/^a+X/
+ aX
+ 0: aX
+ aaX
+ 0: aaX
+
+/^[abcd]?\d/
+ a45
+ 0: a4
+ b93
+ 0: b9
+ c99z
+ 0: c9
+ d04
+ 0: d0
+ 1234
+ 0: 1
+ *** Failers
+No match
+ abcd1234
+No match
+ e45
+No match
+
+/^[abcd]{2,3}\d/
+ ab45
+ 0: ab4
+ bcd93
+ 0: bcd9
+ *** Failers
+No match
+ 1234
+No match
+ a36
+No match
+ abcd1234
+No match
+ ee45
+No match
+
+/^(abc)*\d/
+ abc45
+ 0: abc4
+ abcabcabc45
+ 0: abcabcabc4
+ 42xyz
+ 0: 4
+ *** Failers
+No match
+
+/^(abc)+\d/
+ abc45
+ 0: abc4
+ abcabcabc45
+ 0: abcabcabc4
+ *** Failers
+No match
+ 42xyz
+No match
+
+/^(abc)?\d/
+ abc45
+ 0: abc4
+ 42xyz
+ 0: 4
+ *** Failers
+No match
+ abcabcabc45
+No match
+
+/^(abc){2,3}\d/
+ abcabc45
+ 0: abcabc4
+ abcabcabc45
+ 0: abcabcabc4
+ *** Failers
+No match
+ abcabcabcabc45
+No match
+ abc45
+No match
+ 42xyz
+No match
+
+/1(abc|xyz)2(?1)3/
+ 1abc2abc3456
+ 0: 1abc2abc3
+ 1abc2xyz3456
+ 0: 1abc2xyz3
+
+/^(a*\w|ab)=(a*\w|ab)/
+ ab=ab
+ 0: ab=ab
+ 1: ab=a
+
+/^(a*\w|ab)=(?1)/
+ ab=ab
+ 0: ab=ab
+ 1: ab=a
+
+/^([^()]|\((?1)*\))*$/
+ abc
+ 0: abc
+ a(b)c
+ 0: a(b)c
+ a(b(c))d
+ 0: a(b(c))d
+ *** Failers)
+No match
+ a(b(c)d
+No match
+
+/^>abc>([^()]|\((?1)*\))*<xyz<$/
+ >abc>123<xyz<
+ 0: >abc>123<xyz<
+ >abc>1(2)3<xyz<
+ 0: >abc>1(2)3<xyz<
+ >abc>(1(2)3)<xyz<
+ 0: >abc>(1(2)3)<xyz<
+
+/^(?>a*)\d/
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9
*** Failers
No match
- Xoanon
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+
+/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/x
+ <>
+ 0: <>
+ <abcd>
+ 0: <abcd>
+ <abc <123> hij>
+ 0: <abc <123> hij>
+ <abc <def> hij>
+ 0: <def>
+ <abc<>def>
+ 0: <abc<>def>
+ <abc<>
+ 0: <>
+ *** Failers
+No match
+ <abc
+No match
+
+/^(?(?=abc)\w{3}:|\d\d)$/
+ abc:
+ 0: abc:
+ 12
+ 0: 12
+ *** Failers
+No match
+ 123
+No match
+ xyz
+No match
+
+/^(?(?!abc)\d\d|\w{3}:)$/
+ abc:
+ 0: abc:
+ 12
+ 0: 12
+ *** Failers
+No match
+ 123
+No match
+ xyz
+No match
+
+/^(?=abc)\w{5}:$/
+ abcde:
+ 0: abcde:
+ *** Failers
+No match
+ abc..
+No match
+ 123
+No match
+ vwxyz
+No match
+
+/^(?!abc)\d\d$/
+ 12
+ 0: 12
+ *** Failers
+No match
+ abcde:
+No match
+ abc..
+No match
+ 123
+No match
+ vwxyz
+No match
+
+/(?<=abc|xy)123/
+ abc12345
+ 0: 123
+ wxy123z
+ 0: 123
+ *** Failers
+No match
+ 123abc
+No match
+
+/(?<!abc|xy)123/
+ 123abc
+ 0: 123
+ mno123456
+ 0: 123
+ *** Failers
+No match
+ abc12345
+No match
+ wxy123z
+No match
+
+/abc(?C1)xyz/
+ abcxyz
+--->abcxyz
+ 1 ^ ^ x
+ 0: abcxyz
+ 123abcxyz999
+--->123abcxyz999
+ 1 ^ ^ x
+ 0: abcxyz
+
+/(ab|cd){3,4}/C
+ ababab
+--->ababab
+ +0 ^ (ab|cd){3,4}
+ +1 ^ a
+ +4 ^ c
+ +2 ^^ b
+ +3 ^ ^ |
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +2 ^ ^ b
+ +3 ^ ^ |
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +2 ^ ^ b
+ +3 ^ ^ |
++12 ^ ^
+ +1 ^ ^ a
+ +4 ^ ^ c
+ 0: ababab
+ abcdabcd
+--->abcdabcd
+ +0 ^ (ab|cd){3,4}
+ +1 ^ a
+ +4 ^ c
+ +2 ^^ b
+ +3 ^ ^ |
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +5 ^ ^ d
+ +6 ^ ^ )
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +2 ^ ^ b
+ +3 ^ ^ |
++12 ^ ^
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +5 ^ ^ d
+ +6 ^ ^ )
++12 ^ ^
+ 0: abcdabcd
+ 1: abcdab
+ abcdcdcdcdcd
+--->abcdcdcdcdcd
+ +0 ^ (ab|cd){3,4}
+ +1 ^ a
+ +4 ^ c
+ +2 ^^ b
+ +3 ^ ^ |
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +5 ^ ^ d
+ +6 ^ ^ )
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +5 ^ ^ d
+ +6 ^ ^ )
++12 ^ ^
+ +1 ^ ^ a
+ +4 ^ ^ c
+ +5 ^ ^ d
+ +6 ^ ^ )
++12 ^ ^
+ 0: abcdcdcd
+ 1: abcdcd
+
+/^abc/
+ abcdef
+ 0: abc
+ *** Failers
+No match
+ abcdef\B
+No match
+
+/^(a*|xyz)/
+ bcd
+ 0:
+ aaabcd
+ 0: aaa
+ 1: aa
+ 2: a
+ 3:
+ xyz
+ 0: xyz
+ 1:
+ xyz\N
+ 0: xyz
+ *** Failers
+ 0:
+ bcd\N
No match
-/X\B/8
- Xoanon
- 0: X
+/xyz$/
+ xyz
+ 0: xyz
+ xyz\n
+ 0: xyz
*** Failers
No match
- X+oanon
+ xyz\Z
+No match
+ xyz\n\Z
No match
- ZX\x{300}oanon
+
+/xyz$/m
+ xyz
+ 0: xyz
+ xyz\n
+ 0: xyz
+ abcxyz\npqr
+ 0: xyz
+ abcxyz\npqr\Z
+ 0: xyz
+ xyz\n\Z
+ 0: xyz
+ *** Failers
+No match
+ xyz\Z
+No match
+
+/\Gabc/
+ abcdef
+ 0: abc
+ defabcxyz\>3
+ 0: abc
+ *** Failers
No match
- FAX
+ defabcxyz
+No match
+
+/^abcdef/
+ ab\P
+Partial match: ab
+ abcde\P
+Partial match: abcde
+ abcdef\P
+ 0: abcdef
+ *** Failers
+No match
+ abx\P
+No match
+
+/^a{2,4}\d+z/
+ a\P
+Partial match: a
+ aa\P
+Partial match: aa
+ aa2\P
+Partial match: aa2
+ aaa\P
+Partial match: aaa
+ aaa23\P
+Partial match: aaa23
+ aaaa12345\P
+Partial match: aaaa12345
+ aa0z\P
+ 0: aa0z
+ aaaa4444444444444z\P
+ 0: aaaa4444444444444z
+ *** Failers
+No match
+ az\P
+No match
+ aaaaa\P
+No match
+ a56\P
+No match
+
+/^abcdef/
+ abc\P
+Partial match: abc
+ def\R
+ 0: def
+
+/(?<=foo)bar/
+ xyzfo\P
+No match
+ foob\P\>2
+Partial match at offset 3: foob
+ foobar...\R\P\>4
+ 0: ar
+ xyzfo\P
+No match
+ foobar\>2
+ 0: bar
+ *** Failers
+No match
+ xyzfo\P
+No match
+ obar\R
+No match
+
+/(ab*(cd|ef))+X/
+ adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\P\Z
+No match
+ lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\P\B\Z
+Partial match: abbbbbbcdaefabbbbbbbefa
+ cdabbbbbbbb\P\R\B\Z
+Partial match: cdabbbbbbbb
+ efabbbbbbbbbbbbbbbb\P\R\B\Z
+Partial match: efabbbbbbbbbbbbbbbb
+ bbbbbbbbbbbbcdXyasdfadf\P\R\B\Z
+ 0: bbbbbbbbbbbbcdX
+
+/(a|b)/SF>testsavedregex
+Compiled pattern written to testsavedregex
+Study data written to testsavedregex
+<testsavedregex
+Compiled pattern (byte-inverted) loaded from testsavedregex
+Study data loaded from testsavedregex
+ abc
+ 0: a
+ ** Failers
+ 0: a
+ def
No match
-/[^a]/8
- abcd
+/the quick brown fox/
+ the quick brown fox
+ 0: the quick brown fox
+ The quick brown FOX
+No match
+ What do you know about the quick brown fox?
+ 0: the quick brown fox
+ What do you know about THE QUICK BROWN FOX?
+No match
+
+/The quick brown fox/i
+ the quick brown fox
+ 0: the quick brown fox
+ The quick brown FOX
+ 0: The quick brown FOX
+ What do you know about the quick brown fox?
+ 0: the quick brown fox
+ What do you know about THE QUICK BROWN FOX?
+ 0: THE QUICK BROWN FOX
+
+/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
+ abcd\t\n\r\f\a\e9;\$\\?caxyz
+ 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
+
+/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
+ abxyzpqrrrabbxyyyypqAzz
+ 0: abxyzpqrrrabbxyyyypqAzz
+ abxyzpqrrrabbxyyyypqAzz
+ 0: abxyzpqrrrabbxyyyypqAzz
+ aabxyzpqrrrabbxyyyypqAzz
+ 0: aabxyzpqrrrabbxyyyypqAzz
+ aaabxyzpqrrrabbxyyyypqAzz
+ 0: aaabxyzpqrrrabbxyyyypqAzz
+ aaaabxyzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzpqrrrabbxyyyypqAzz
+ abcxyzpqrrrabbxyyyypqAzz
+ 0: abcxyzpqrrrabbxyyyypqAzz
+ aabcxyzpqrrrabbxyyyypqAzz
+ 0: aabcxyzpqrrrabbxyyyypqAzz
+ aaabcxyzpqrrrabbxyyyypAzz
+ 0: aaabcxyzpqrrrabbxyyyypAzz
+ aaabcxyzpqrrrabbxyyyypqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqAzz
+ aaabcxyzpqrrrabbxyyyypqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqAzz
+ aaabcxyzpqrrrabbxyyyypqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqAzz
+ aaabcxyzpqrrrabbxyyyypqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
+ aaabcxyzpqrrrabbxyyyypqqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
+ aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+ aaaabcxyzpqrrrabbxyyyypqAzz
+ 0: aaaabcxyzpqrrrabbxyyyypqAzz
+ abxyzzpqrrrabbxyyyypqAzz
+ 0: abxyzzpqrrrabbxyyyypqAzz
+ aabxyzzzpqrrrabbxyyyypqAzz
+ 0: aabxyzzzpqrrrabbxyyyypqAzz
+ aaabxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaabxyzzzzpqrrrabbxyyyypqAzz
+ aaaabxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
+ abcxyzzpqrrrabbxyyyypqAzz
+ 0: abcxyzzpqrrrabbxyyyypqAzz
+ aabcxyzzzpqrrrabbxyyyypqAzz
+ 0: aabcxyzzzpqrrrabbxyyyypqAzz
+ aaabcxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
+ aaaabcxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
+ aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+ aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+ aaabcxyzpqrrrabbxyyyypABzz
+ 0: aaabcxyzpqrrrabbxyyyypABzz
+ aaabcxyzpqrrrabbxyyyypABBzz
+ 0: aaabcxyzpqrrrabbxyyyypABBzz
+ >>>aaabxyzpqrrrabbxyyyypqAzz
+ 0: aaabxyzpqrrrabbxyyyypqAzz
+ >aaaabxyzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzpqrrrabbxyyyypqAzz
+ >>>>abcxyzpqrrrabbxyyyypqAzz
+ 0: abcxyzpqrrrabbxyyyypqAzz
+ *** Failers
+No match
+ abxyzpqrrabbxyyyypqAzz
+No match
+ abxyzpqrrrrabbxyyyypqAzz
+No match
+ abxyzpqrrrabxyyyypqAzz
+No match
+ aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
+No match
+ aaaabcxyzzzzpqrrrabbbxyyypqAzz
+No match
+ aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
+No match
+
+/^(abc){1,2}zz/
+ abczz
+ 0: abczz
+ abcabczz
+ 0: abcabczz
+ *** Failers
+No match
+ zz
+No match
+ abcabcabczz
+No match
+ >>abczz
+No match
+
+/^(b+?|a){1,2}?c/
+ bc
+ 0: bc
+ bbc
+ 0: bbc
+ bbbc
+ 0: bbbc
+ bac
+ 0: bac
+ bbac
+ 0: bbac
+ aac
+ 0: aac
+ abbbbbbbbbbbc
+ 0: abbbbbbbbbbbc
+ bbbbbbbbbbbac
+ 0: bbbbbbbbbbbac
+ *** Failers
+No match
+ aaac
+No match
+ abbbbbbbbbbbac
+No match
+
+/^(b+|a){1,2}c/
+ bc
+ 0: bc
+ bbc
+ 0: bbc
+ bbbc
+ 0: bbbc
+ bac
+ 0: bac
+ bbac
+ 0: bbac
+ aac
+ 0: aac
+ abbbbbbbbbbbc
+ 0: abbbbbbbbbbbc
+ bbbbbbbbbbbac
+ 0: bbbbbbbbbbbac
+ *** Failers
+No match
+ aaac
+No match
+ abbbbbbbbbbbac
+No match
+
+/^(b+|a){1,2}?bc/
+ bbc
+ 0: bbc
+
+/^(b*|ba){1,2}?bc/
+ babc
+ 0: babc
+ bbabc
+ 0: bbabc
+ bababc
+ 0: bababc
+ *** Failers
+No match
+ bababbc
+No match
+ babababc
+No match
+
+/^(ba|b*){1,2}?bc/
+ babc
+ 0: babc
+ bbabc
+ 0: bbabc
+ bababc
+ 0: bababc
+ *** Failers
+No match
+ bababbc
+No match
+ babababc
+No match
+
+/^\ca\cA\c[\c{\c:/
+ \x01\x01\e;z
+ 0: \x01\x01\x1b;z
+
+/^[ab\]cde]/
+ athing
+ 0: a
+ bthing
0: b
- a\x{100}
- 0: \x{100}
+ ]thing
+ 0: ]
+ cthing
+ 0: c
+ dthing
+ 0: d
+ ething
+ 0: e
+ *** Failers
+No match
+ fthing
+No match
+ [thing
+No match
+ \\thing
+No match
-/^[abc\x{123}\x{400}-\x{402}]{2,3}\d/8
- ab99
- 0: ab9
- \x{123}\x{123}45
- 0: \x{123}\x{123}4
- \x{400}\x{401}\x{402}6
- 0: \x{400}\x{401}\x{402}6
+/^[]cde]/
+ ]thing
+ 0: ]
+ cthing
+ 0: c
+ dthing
+ 0: d
+ ething
+ 0: e
*** Failers
No match
- d99
+ athing
+No match
+ fthing
No match
- \x{123}\x{122}4
+
+/^[^ab\]cde]/
+ fthing
+ 0: f
+ [thing
+ 0: [
+ \\thing
+ 0: \
+ *** Failers
+ 0: *
+ athing
No match
- \x{400}\x{403}6
+ bthing
No match
- \x{400}\x{401}\x{402}\x{402}6
+ ]thing
+No match
+ cthing
+No match
+ dthing
+No match
+ ething
No match
-/abc/8
- �]
-Error -10
- �
-Error -10
- ���
-Error -10
- ���\?
+/^[^]cde]/
+ athing
+ 0: a
+ fthing
+ 0: f
+ *** Failers
+ 0: *
+ ]thing
+No match
+ cthing
+No match
+ dthing
+No match
+ ething
No match
-/a.b/8
- acb
- 0: acb
- a\x7fb
- 0: a\x{7f}b
- a\x{100}b
- 0: a\x{100}b
+/^\�/
+ �
+ 0: \x81
+
+/^�/
+ �
+ 0: \xff
+
+/^[0-9]+$/
+ 0
+ 0: 0
+ 1
+ 0: 1
+ 2
+ 0: 2
+ 3
+ 0: 3
+ 4
+ 0: 4
+ 5
+ 0: 5
+ 6
+ 0: 6
+ 7
+ 0: 7
+ 8
+ 0: 8
+ 9
+ 0: 9
+ 10
+ 0: 10
+ 100
+ 0: 100
*** Failers
No match
- a\nb
+ abc
+No match
+
+/^.*nter/
+ enter
+ 0: enter
+ inter
+ 0: inter
+ uponter
+ 0: uponter
+
+/^xxx[0-9]+$/
+ xxx0
+ 0: xxx0
+ xxx1234
+ 0: xxx1234
+ *** Failers
+No match
+ xxx
+No match
+
+/^.+[0-9][0-9][0-9]$/
+ x123
+ 0: x123
+ xx123
+ 0: xx123
+ 123456
+ 0: 123456
+ *** Failers
+No match
+ 123
+No match
+ x1234
+ 0: x1234
+
+/^.+?[0-9][0-9][0-9]$/
+ x123
+ 0: x123
+ xx123
+ 0: xx123
+ 123456
+ 0: 123456
+ *** Failers
+No match
+ 123
+No match
+ x1234
+ 0: x1234
+
+/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
+ abc!pqr=apquxz.ixr.zzz.ac.uk
+ 0: abc!pqr=apquxz.ixr.zzz.ac.uk
+ *** Failers
+No match
+ !pqr=apquxz.ixr.zzz.ac.uk
+No match
+ abc!=apquxz.ixr.zzz.ac.uk
+No match
+ abc!pqr=apquxz:ixr.zzz.ac.uk
+No match
+ abc!pqr=apquxz.ixr.zzz.ac.ukk
+No match
+
+/:/
+ Well, we need a colon: somewhere
+ 0: :
+ *** Fail if we don't
+No match
+
+/([\da-f:]+)$/i
+ 0abc
+ 0: 0abc
+ abc
+ 0: abc
+ fed
+ 0: fed
+ E
+ 0: E
+ ::
+ 0: ::
+ 5f03:12C0::932e
+ 0: 5f03:12C0::932e
+ fed def
+ 0: def
+ Any old stuff
+ 0: ff
+ *** Failers
+No match
+ 0zzz
+No match
+ gzzz
+No match
+ fed\x20
+No match
+ Any old rubbish
+No match
+
+/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
+ .1.2.3
+ 0: .1.2.3
+ A.12.123.0
+ 0: A.12.123.0
+ *** Failers
+No match
+ .1.2.3333
+No match
+ 1.2.3
+No match
+ 1234.2.3
+No match
+
+/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
+ 1 IN SOA non-sp1 non-sp2(
+ 0: 1 IN SOA non-sp1 non-sp2(
+ 1 IN SOA non-sp1 non-sp2 (
+ 0: 1 IN SOA non-sp1 non-sp2 (
+ *** Failers
+No match
+ 1IN SOA non-sp1 non-sp2(
+No match
+
+/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
+ a.
+ 0: a.
+ Z.
+ 0: Z.
+ 2.
+ 0: 2.
+ ab-c.pq-r.
+ 0: ab-c.pq-r.
+ sxk.zzz.ac.uk.
+ 0: sxk.zzz.ac.uk.
+ x-.y-.
+ 0: x-.y-.
+ *** Failers
+No match
+ -abc.peq.
+No match
+
+/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
+ *.a
+ 0: *.a
+ *.b0-a
+ 0: *.b0-a
+ *.c3-b.c
+ 0: *.c3-b.c
+ *.c-a.b-c
+ 0: *.c-a.b-c
+ *** Failers
+No match
+ *.0
+No match
+ *.a-
+No match
+ *.a-b.c-
+No match
+ *.c-a.0-c
+No match
+
+/^(?=ab(de))(abd)(e)/
+ abde
+ 0: abde
+
+/^(?!(ab)de|x)(abd)(f)/
+ abdf
+ 0: abdf
+
+/^(?=(ab(cd)))(ab)/
+ abcd
+ 0: ab
+
+/^[\da-f](\.[\da-f])*$/i
+ a.b.c.d
+ 0: a.b.c.d
+ A.B.C.D
+ 0: A.B.C.D
+ a.b.c.1.2.3.C
+ 0: a.b.c.1.2.3.C
+
+/^\".*\"\s*(;.*)?$/
+ \"1234\"
+ 0: "1234"
+ \"abcd\" ;
+ 0: "abcd" ;
+ \"\" ; rhubarb
+ 0: "" ; rhubarb
+ *** Failers
+No match
+ \"1234\" : things
+No match
+
+/^$/
+ \
+ 0:
+ *** Failers
+No match
+
+/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
+ ab c
+ 0: ab c
+ *** Failers
+No match
+ abc
+No match
+ ab cde
+No match
+
+/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
+ ab c
+ 0: ab c
+ *** Failers
+No match
+ abc
+No match
+ ab cde
+No match
+
+/^ a\ b[c ]d $/x
+ a bcd
+ 0: a bcd
+ a b d
+ 0: a b d
+ *** Failers
+No match
+ abcd
+No match
+ ab d
+No match
+
+/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
+ abcdefhijklm
+ 0: abcdefhijklm
+
+/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
+ abcdefhijklm
+ 0: abcdefhijklm
+
+/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
+ a+ Z0+\x08\n\x1d\x12
+ 0: a+ Z0+\x08\x0a\x1d\x12
+
+/^[.^$|()*+?{,}]+/
+ .^\$(*+)|{?,?}
+ 0: .^$(*+)|{?,?}
+ 1: .^$(*+)|{?,?
+ 2: .^$(*+)|{?,
+ 3: .^$(*+)|{?
+ 4: .^$(*+)|{
+ 5: .^$(*+)|
+ 6: .^$(*+)
+ 7: .^$(*+
+ 8: .^$(*
+ 9: .^$(
+10: .^$
+11: .^
+12: .
+
+/^a*\w/
+ z
+ 0: z
+ az
+ 0: az
+ 1: a
+ aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+ 3: a
+ a
+ 0: a
+ aa
+ 0: aa
+ 1: a
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+ a+
+ 0: a
+ aa+
+ 0: aa
+ 1: a
+
+/^a*?\w/
+ z
+ 0: z
+ az
+ 0: az
+ 1: a
+ aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+ 3: a
+ a
+ 0: a
+ aa
+ 0: aa
+ 1: a
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+ a+
+ 0: a
+ aa+
+ 0: aa
+ 1: a
+
+/^a+\w/
+ az
+ 0: az
+ aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+ aa
+ 0: aa
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ aa+
+ 0: aa
+
+/^a+?\w/
+ az
+ 0: az
+ aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+ aa
+ 0: aa
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ aa+
+ 0: aa
+
+/^\d{8}\w{2,}/
+ 1234567890
+ 0: 1234567890
+ 12345678ab
+ 0: 12345678ab
+ 12345678__
+ 0: 12345678__
+ *** Failers
+No match
+ 1234567
No match
-/a(.{3})b/8
- a\x{4000}xyb
- 0: a\x{4000}xyb
- a\x{4000}\x7fyb
- 0: a\x{4000}\x{7f}yb
- a\x{4000}\x{100}yb
- 0: a\x{4000}\x{100}yb
+/^[aeiou\d]{4,5}$/
+ uoie
+ 0: uoie
+ 1234
+ 0: 1234
+ 12345
+ 0: 12345
+ aaaaa
+ 0: aaaaa
*** Failers
No match
- a\x{4000}b
+ 123456
No match
- ac\ncb
+
+/^[aeiou\d]{4,5}?/
+ uoie
+ 0: uoie
+ 1234
+ 0: 1234
+ 12345
+ 0: 12345
+ 1: 1234
+ aaaaa
+ 0: aaaaa
+ 1: aaaa
+ 123456
+ 0: 12345
+ 1: 1234
+
+/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
+ From abcd Mon Sep 01 12:33:02 1997
+ 0: From abcd Mon Sep 01 12:33
+
+/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
+ From abcd Mon Sep 01 12:33:02 1997
+ 0: From abcd Mon Sep 01 12:33
+ From abcd Mon Sep 1 12:33:02 1997
+ 0: From abcd Mon Sep 1 12:33
+ *** Failers
+No match
+ From abcd Sep 01 12:33:02 1997
No match
-/a(.*?)(.)/
- a\xc0\x88b
- 0: a\xc0\x88b
- 1: a\xc0\x88
- 2: a\xc0
+/^12.34/s
+ 12\n34
+ 0: 12\x0a34
+ 12\r34
+ 0: 12\x0d34
-/a(.*?)(.)/8
- a\x{100}b
- 0: a\x{100}b
- 1: a\x{100}
-
-/a(.*)(.)/
- a\xc0\x88b
- 0: a\xc0\x88b
- 1: a\xc0\x88
- 2: a\xc0
+/\w+(?=\t)/
+ the quick brown\t fox
+ 0: brown
-/a(.*)(.)/8
- a\x{100}b
- 0: a\x{100}b
- 1: a\x{100}
+/foo(?!bar)(.*)/
+ foobar is foolish see?
+ 0: foolish see?
+ 1: foolish see
+ 2: foolish se
+ 3: foolish s
+ 4: foolish
+ 5: foolish
+ 6: foolis
+ 7: fooli
+ 8: fool
+ 9: foo
-/a(.)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
+/(?:(?!foo)...|^.{0,2})bar(.*)/
+ foobar crowbar etc
+ 0: rowbar etc
+ 1: rowbar et
+ 2: rowbar e
+ 3: rowbar
+ 4: rowbar
+ barrel
+ 0: barrel
+ 1: barre
+ 2: barr
+ 3: bar
+ 2barrel
+ 0: 2barrel
+ 1: 2barre
+ 2: 2barr
+ 3: 2bar
+ A barrel
+ 0: A barrel
+ 1: A barre
+ 2: A barr
+ 3: A bar
-/a(.)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
-
-/a(.?)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: a\xc0
-
-/a(.?)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: a\x{240}
-
-/a(.??)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: a\xc0
+/^(\D*)(?=\d)(?!123)/
+ abc456
+ 0: abc
+ *** Failers
+No match
+ abc123
+No match
-/a(.??)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: a\x{240}
+/^1234(?# test newlines
+ inside)/
+ 1234
+ 0: 1234
-/a(.{3})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
+/^1234 #comment in extended re
+ /x
+ 1234
+ 0: 1234
+
+/#rhubarb
+ abcd/x
+ abcd
+ 0: abcd
+
+/^abcd#rhubarb/x
+ abcd
+ 0: abcd
+
+/(?!^)abc/
+ the abc
+ 0: abc
*** Failers
No match
- a\x{1234}b
+ abc
No match
- ac\ncb
+
+/(?=^)abc/
+ abc
+ 0: abc
+ *** Failers
No match
+ the abc
+No match
+
+/^[ab]{1,3}(ab*|b)/
+ aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/^[ab]{1,3}?(ab*|b)/
+ aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/^[ab]{1,3}?(ab*?|b)/
+ aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/^[ab]{1,3}(ab*?|b)/
+ aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/ (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* # optional leading comment
+(?: (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?: # opening quote...
+[^\\\x80-\xff\n\015"] # Anything except backslash and quote
+| # or
+\\ [^\x80-\xff] # Escaped something (something != CR)
+)* " # closing quote
+) # initial word
+(?: (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* \. (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?: # opening quote...
+[^\\\x80-\xff\n\015"] # Anything except backslash and quote
+| # or
+\\ [^\x80-\xff] # Escaped something (something != CR)
+)* " # closing quote
+) )* # further okay, if led by a period
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* @ (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # initial subdomain
+(?: #
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* \. # if led by a period...
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # ...further okay
+)*
+# address
+| # or
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?: # opening quote...
+[^\\\x80-\xff\n\015"] # Anything except backslash and quote
+| # or
+\\ [^\x80-\xff] # Escaped something (something != CR)
+)* " # closing quote
+) # one word, optionally followed by....
+(?:
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
+\(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) | # comments, or...
-/a(.{3,})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- 0: axxxxbcdefghijb
- 1: axxxxb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+" (?: # opening quote...
+[^\\\x80-\xff\n\015"] # Anything except backslash and quote
+| # or
+\\ [^\x80-\xff] # Escaped something (something != CR)
+)* " # closing quote
+# quoted strings
+)*
+< (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* # leading <
+(?: @ (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # initial subdomain
+(?: #
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* \. # if led by a period...
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # ...further okay
+)*
+
+(?: (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* , (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* @ (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # initial subdomain
+(?: #
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* \. # if led by a period...
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # ...further okay
+)*
+)* # further okay, if led by comma
+: # closing colon
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* )? # optional route
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?: # opening quote...
+[^\\\x80-\xff\n\015"] # Anything except backslash and quote
+| # or
+\\ [^\x80-\xff] # Escaped something (something != CR)
+)* " # closing quote
+) # initial word
+(?: (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* \. (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?: # opening quote...
+[^\\\x80-\xff\n\015"] # Anything except backslash and quote
+| # or
+\\ [^\x80-\xff] # Escaped something (something != CR)
+)* " # closing quote
+) )* # further okay, if led by a period
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* @ (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # initial subdomain
+(?: #
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* \. # if led by a period...
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+| \[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+) # ...further okay
+)*
+# address spec
+(?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* > # trailing >
+# name and address
+) (?: [\040\t] | \(
+(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
+\) )* # optional trailing comment
+/x
+ Alan Other <user\@dom.ain>
+ 0: Alan Other <[email protected]>
+ <user\@dom.ain>
+ 1: user@dom
+ user\@dom.ain
+ 1: user@dom
+ \"A. Other\" <user.1234\@dom.ain> (a comment)
+ 0: "A. Other" <[email protected]> (a comment)
+ 1: "A. Other" <[email protected]>
+ 2: "A. Other" <[email protected]>
+ A. Other <user.1234\@dom.ain> (a comment)
+ 0: Other <[email protected]> (a comment)
+ 1: Other <[email protected]>
+ 2: Other <[email protected]>
+ \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
+ 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
+ 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
+ A missing angle <user\@some.where
+ 1: user@some
*** Failers
No match
- a\x{1234}b
+ The quick brown fox
No match
-/a(.{3,}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- 0: axxxxbcdefghijb
- 1: axxxxb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+/[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional leading comment
+(?:
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+| # or
+" # "
+[^\\\x80-\xff\n\015"] * # normal
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
+" # "
+# Quoted string
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+\.
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+| # or
+" # "
+[^\\\x80-\xff\n\015"] * # normal
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
+" # "
+# Quoted string
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# additional words
+)*
+@
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+)*
+# address
+| # or
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+| # or
+" # "
+[^\\\x80-\xff\n\015"] * # normal
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
+" # "
+# Quoted string
+)
+# leading word
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
+(?:
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+|
+" # "
+[^\\\x80-\xff\n\015"] * # normal
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
+" # "
+) # "special" comment or quoted string
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
+)*
+<
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# <
+(?:
+@
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+)*
+(?: ,
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+@
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+)*
+)* # additional domains
+:
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+)? # optional route
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+| # or
+" # "
+[^\\\x80-\xff\n\015"] * # normal
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
+" # "
+# Quoted string
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+\.
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+| # or
+" # "
+[^\\\x80-\xff\n\015"] * # normal
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
+" # "
+# Quoted string
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# additional words
+)*
+@
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[ # [
+(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
+\] # ]
+)
+[\040\t]* # Nab whitespace.
+(?:
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: # (
+(?: \\ [^\x80-\xff] |
+\( # (
+[^\\\x80-\xff\n\015()] * # normal*
+(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
+\) # )
+) # special
+[^\\\x80-\xff\n\015()] * # normal*
+)* # )*
+\) # )
+[\040\t]* )* # If comment found, allow more spaces.
+# optional trailing comments
+)*
+# address spec
+> # >
+# name and address
+)
+/x
+ Alan Other <user\@dom.ain>
+ 0: Alan Other <[email protected]>
+ <user\@dom.ain>
+ 1: user@dom
+ user\@dom.ain
+ 1: user@dom
+ \"A. Other\" <user.1234\@dom.ain> (a comment)
+ 0: "A. Other" <[email protected]>
+ A. Other <user.1234\@dom.ain> (a comment)
+ 0: Other <[email protected]>
+ \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
+ 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
+ 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
+ A missing angle <user\@some.where
+ 1: user@some
*** Failers
No match
- a\x{1234}b
+ The quick brown fox
No match
-/a(.{3,5})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- 0: axxxxb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- 0: axbxxb
- axxxxxbcdefghijb
- 0: axxxxxb
+/abc\0def\00pqr\000xyz\0000AB/
+ abc\0def\00pqr\000xyz\0000AB
+ 0: abc\x00def\x00pqr\x00xyz\x000AB
+ abc456 abc\0def\00pqr\000xyz\0000ABCDE
+ 0: abc\x00def\x00pqr\x00xyz\x000AB
+
+/abc\x0def\x00pqr\x000xyz\x0000AB/
+ abc\x0def\x00pqr\x000xyz\x0000AB
+ 0: abc\x0def\x00pqr\x000xyz\x0000AB
+ abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
+ 0: abc\x0def\x00pqr\x000xyz\x0000AB
+
+/^[\000-\037]/
+ \0A
+ 0: \x00
+ \01B
+ 0: \x01
+ \037C
+ 0: \x1f
+
+/\0*/
+ \0\0\0\0
+ 0: \x00\x00\x00\x00
+ 1: \x00\x00\x00
+ 2: \x00\x00
+ 3: \x00
+ 4:
+
+/A\x0{2,3}Z/
+ The A\x0\x0Z
+ 0: A\x00\x00Z
+ An A\0\x0\0Z
+ 0: A\x00\x00\x00Z
*** Failers
No match
- a\x{1234}b
+ A\0Z
No match
- axxxxxxbcdefghijb
+ A\0\x0\0\x0Z
No match
-/a(.{3,5}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- 0: axxxxb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- 0: axbxxb
- axxxxxbcdefghijb
- 0: axxxxxb
+/^\s/
+ \040abc
+ 0:
+ \x0cabc
+ 0: \x0c
+ \nabc
+ 0: \x0a
+ \rabc
+ 0: \x0d
+ \tabc
+ 0: \x09
*** Failers
No match
- a\x{1234}b
+ abc
No match
- axxxxxxbcdefghijb
+
+/^a b
+ c/x
+ abc
+ 0: abc
+
+/ab{1,3}bc/
+ abbbbc
+ 0: abbbbc
+ abbbc
+ 0: abbbc
+ abbc
+ 0: abbc
+ *** Failers
+No match
+ abc
+No match
+ abbbbbc
No match
-/^[a\x{c0}]/8
+/([^.]*)\.([^:]*):[T ]+(.*)/
+ track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1.title:TBlah blah bla
+ 2: track1.title:TBlah blah bl
+ 3: track1.title:TBlah blah b
+ 4: track1.title:TBlah blah
+ 5: track1.title:TBlah blah
+ 6: track1.title:TBlah bla
+ 7: track1.title:TBlah bl
+ 8: track1.title:TBlah b
+ 9: track1.title:TBlah
+10: track1.title:TBlah
+11: track1.title:TBla
+12: track1.title:TBl
+13: track1.title:TB
+14: track1.title:T
+
+/([^.]*)\.([^:]*):[T ]+(.*)/i
+ track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1.title:TBlah blah bla
+ 2: track1.title:TBlah blah bl
+ 3: track1.title:TBlah blah b
+ 4: track1.title:TBlah blah
+ 5: track1.title:TBlah blah
+ 6: track1.title:TBlah bla
+ 7: track1.title:TBlah bl
+ 8: track1.title:TBlah b
+ 9: track1.title:TBlah
+10: track1.title:TBlah
+11: track1.title:TBla
+12: track1.title:TBl
+13: track1.title:TB
+14: track1.title:T
+
+/([^.]*)\.([^:]*):[t ]+(.*)/i
+ track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1.title:TBlah blah bla
+ 2: track1.title:TBlah blah bl
+ 3: track1.title:TBlah blah b
+ 4: track1.title:TBlah blah
+ 5: track1.title:TBlah blah
+ 6: track1.title:TBlah bla
+ 7: track1.title:TBlah bl
+ 8: track1.title:TBlah b
+ 9: track1.title:TBlah
+10: track1.title:TBlah
+11: track1.title:TBla
+12: track1.title:TBl
+13: track1.title:TB
+14: track1.title:T
+
+/^[W-c]+$/
+ WXY_^abc
+ 0: WXY_^abc
*** Failers
No match
- \x{100}
+ wxy
No match
-/(?<=aXb)cd/8
- aXbcd
- 0: cd
+/^[W-c]+$/i
+ WXY_^abc
+ 0: WXY_^abc
+ wxy_^ABC
+ 0: wxy_^ABC
+
+/^[\x3f-\x5F]+$/i
+ WXY_^abc
+ 0: WXY_^abc
+ wxy_^ABC
+ 0: wxy_^ABC
-/(?<=a\x{100}b)cd/8
- a\x{100}bcd
- 0: cd
+/^abc$/m
+ abc
+ 0: abc
+ qqq\nabc
+ 0: abc
+ abc\nzzz
+ 0: abc
+ qqq\nabc\nzzz
+ 0: abc
+
+/^abc$/
+ abc
+ 0: abc
+ *** Failers
+No match
+ qqq\nabc
+No match
+ abc\nzzz
+No match
+ qqq\nabc\nzzz
+No match
-/(?<=a\x{100000}b)cd/8
- a\x{100000}bcd
- 0: cd
+/\Aabc\Z/m
+ abc
+ 0: abc
+ abc\n
+ 0: abc
+ *** Failers
+No match
+ qqq\nabc
+No match
+ abc\nzzz
+No match
+ qqq\nabc\nzzz
+No match
-/(?:\x{100}){3}b/8
- \x{100}\x{100}\x{100}b
- 0: \x{100}\x{100}\x{100}b
- *** Failers
+/\A(.)*\Z/s
+ abc\ndef
+ 0: abc\x0adef
+
+/\A(.)*\Z/m
+ *** Failers
+ 0: *** Failers
+ abc\ndef
+No match
+
+/(?:b)|(?::+)/
+ b::c
+ 0: b
+ c::b
+ 0: ::
+ 1: :
+
+/[-az]+/
+ az-
+ 0: az-
+ 1: az
+ 2: a
+ *** Failers
+ 0: a
+ b
+No match
+
+/[az-]+/
+ za-
+ 0: za-
+ 1: za
+ 2: z
+ *** Failers
+ 0: a
+ b
+No match
+
+/[a\-z]+/
+ a-z
+ 0: a-z
+ 1: a-
+ 2: a
+ *** Failers
+ 0: a
+ b
+No match
+
+/[a-z]+/
+ abcdxyz
+ 0: abcdxyz
+ 1: abcdxy
+ 2: abcdx
+ 3: abcd
+ 4: abc
+ 5: ab
+ 6: a
+
+/[\d-]+/
+ 12-34
+ 0: 12-34
+ 1: 12-3
+ 2: 12-
+ 3: 12
+ 4: 1
+ *** Failers
+No match
+ aaa
+No match
+
+/[\d-z]+/
+ 12-34z
+ 0: 12-34z
+ 1: 12-34
+ 2: 12-3
+ 3: 12-
+ 4: 12
+ 5: 1
+ *** Failers
No match
- \x{100}\x{100}b
+ aaa
No match
-/\x{ab}/8
- \x{ab}
- 0: \x{ab}
- \xc2\xab
- 0: \x{ab}
+/\x5c/
+ \\
+ 0: \
+
+/\x20Z/
+ the Zoo
+ 0: Z
+ *** Failers
+No match
+ Zulu
+No match
+
+/ab{3cd/
+ ab{3cd
+ 0: ab{3cd
+
+/ab{3,cd/
+ ab{3,cd
+ 0: ab{3,cd
+
+/ab{3,4a}cd/
+ ab{3,4a}cd
+ 0: ab{3,4a}cd
+
+/{4,5a}bc/
+ {4,5a}bc
+ 0: {4,5a}bc
+
+/^a.b/<lf>
+ a\rb
+ 0: a\x0db
+ *** Failers
+No match
+ a\nb
+No match
+
+/abc$/
+ abc
+ 0: abc
+ abc\n
+ 0: abc
+ *** Failers
+No match
+ abc\ndef
+No match
+
+/(abc)\123/
+ abc\x53
+ 0: abcS
+
+/(abc)\223/
+ abc\x93
+ 0: abc\x93
+
+/(abc)\323/
+ abc\xd3
+ 0: abc\xd3
+
+/(abc)\100/
+ abc\x40
+ 0: abc@
+ abc\100
+ 0: abc@
+
+/(abc)\1000/
+ abc\x400
+ 0: abc@0
+ abc\x40\x30
+ 0: abc@0
+ abc\1000
+ 0: abc@0
+ abc\100\x30
+ 0: abc@0
+ abc\100\060
+ 0: abc@0
+ abc\100\60
+ 0: abc@0
+
+/abc\81/
+ abc\081
+ 0: abc\x0081
+ abc\0\x38\x31
+ 0: abc\x0081
+
+/abc\91/
+ abc\091
+ 0: abc\x0091
+ abc\0\x39\x31
+ 0: abc\x0091
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
+ abcdefghijk\12S
+ 0: abcdefghijk\x0aS
+
+/ab\idef/
+ abidef
+ 0: abidef
+
+/a{0}bc/
+ bc
+ 0: bc
+
+/(a|(bc)){0,0}?xyz/
+ xyz
+ 0: xyz
+
+/abc[\10]de/
+ abc\010de
+ 0: abc\x08de
+
+/abc[\1]de/
+ abc\1de
+ 0: abc\x01de
+
+/(abc)[\1]de/
+ abc\1de
+ 0: abc\x01de
+
+/(?s)a.b/
+ a\nb
+ 0: a\x0ab
+
+/^([^a])([^\b])([^c]*)([^d]{3,4})/
+ baNOTccccd
+ 0: baNOTcccc
+ 1: baNOTccc
+ 2: baNOTcc
+ 3: baNOTc
+ 4: baNOT
+ baNOTcccd
+ 0: baNOTccc
+ 1: baNOTcc
+ 2: baNOTc
+ 3: baNOT
+ baNOTccd
+ 0: baNOTcc
+ 1: baNOTc
+ 2: baNOT
+ bacccd
+ 0: baccc
+ *** Failers
+ 0: *** Failers
+ 1: *** Failer
+ 2: *** Faile
+ 3: *** Fail
+ 4: *** Fai
+ 5: *** Fa
+ 6: *** F
+ anything
+No match
+ b\bc
+No match
+ baccd
+No match
+
+/[^a]/
+ Abc
+ 0: A
+
+/[^a]/i
+ Abc
+ 0: b
+
+/[^a]+/
+ AAAaAbc
+ 0: AAA
+ 1: AA
+ 2: A
+
+/[^a]+/i
+ AAAaAbc
+ 0: bc
+ 1: b
+
+/[^a]+/
+ bbb\nccc
+ 0: bbb\x0accc
+ 1: bbb\x0acc
+ 2: bbb\x0ac
+ 3: bbb\x0a
+ 4: bbb
+ 5: bb
+ 6: b
+
+/[^k]$/
+ abc
+ 0: c
+ *** Failers
+ 0: s
+ abk
+No match
+
+/[^k]{2,3}$/
+ abc
+ 0: abc
+ kbc
+ 0: bc
+ kabc
+ 0: abc
+ *** Failers
+ 0: ers
+ abk
+No match
+ akb
+No match
+ akk
+No match
+
+/^\d{8,}\@.+[^k]$/
+ 12345678\@a.b.c.d
+ 123456789\@x.y.z
+ *** Failers
+No match
+ 12345678\@x.y.uk
+No match
+ 1234567\@a.b.c.d
+No match
+
+/[^a]/
+ aaaabcd
+ 0: b
+ aaAabcd
+ 0: A
+
+/[^a]/i
+ aaaabcd
+ 0: b
+ aaAabcd
+ 0: b
+
+/[^az]/
+ aaaabcd
+ 0: b
+ aaAabcd
+ 0: A
+
+/[^az]/i
+ aaaabcd
+ 0: b
+ aaAabcd
+ 0: b
+
+/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
+ \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
+ 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
+
+/P[^*]TAIRE[^*]{1,6}?LL/
+ xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+ 0: PSTAIREISLL
+
+/P[^*]TAIRE[^*]{1,}?LL/
+ xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+ 0: PSTAIREISLL
+
+/(\.\d\d[1-9]?)\d+/
+ 1.230003938
+ 0: .230003938
+ 1: .23000393
+ 2: .2300039
+ 3: .230003
+ 4: .23000
+ 5: .2300
+ 6: .230
+ 1.875000282
+ 0: .875000282
+ 1: .87500028
+ 2: .8750002
+ 3: .875000
+ 4: .87500
+ 5: .8750
+ 6: .875
+ 1.235
+ 0: .235
+
+/(\.\d\d((?=0)|\d(?=\d)))/
+ 1.230003938
+ 0: .230
+ 1: .23
+ 1.875000282
+ 0: .875
*** Failers
No match
- \x00{ab}
+ 1.235
No match
+
+/a(?)b/
+ ab
+ 0: ab
+
+/\b(foo)\s+(\w+)/i
+ Food is on the foo table
+ 0: foo table
+ 1: foo tabl
+ 2: foo tab
+ 3: foo ta
+ 4: foo t
+
+/foo(.*)bar/
+ The food is under the bar in the barn.
+ 0: food is under the bar in the bar
+ 1: food is under the bar
+
+/foo(.*?)bar/
+ The food is under the bar in the barn.
+ 0: food is under the bar in the bar
+ 1: food is under the bar
-/(?<=(.))X/8
- WXYZ
- 0: X
- \x{256}XYZ
+/(.*)(\d*)/
+ I have 2 numbers: 53147
+Matched, but offsets vector is too small to show all matches
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2 numbers:
+ 6: I have 2 numbers:
+ 7: I have 2 numbers
+ 8: I have 2 number
+ 9: I have 2 numbe
+10: I have 2 numb
+11: I have 2 num
+12: I have 2 nu
+13: I have 2 n
+14: I have 2
+15: I have 2
+16: I have
+17: I have
+18: I hav
+19: I ha
+20: I h
+21: I
+
+/(.*)(\d+)/
+ I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2
+
+/(.*?)(\d*)/
+ I have 2 numbers: 53147
+Matched, but offsets vector is too small to show all matches
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2 numbers:
+ 6: I have 2 numbers:
+ 7: I have 2 numbers
+ 8: I have 2 number
+ 9: I have 2 numbe
+10: I have 2 numb
+11: I have 2 num
+12: I have 2 nu
+13: I have 2 n
+14: I have 2
+15: I have 2
+16: I have
+17: I have
+18: I hav
+19: I ha
+20: I h
+21: I
+
+/(.*?)(\d+)/
+ I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2
+
+/(.*)(\d+)$/
+ I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/(.*?)(\d+)$/
+ I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/(.*)\b(\d+)$/
+ I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/(.*\D)(\d+)$/
+ I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/^\D*(?!123)/
+ ABC123
+ 0: AB
+ 1: A
+ 2:
+
+/^(\D*)(?=\d)(?!123)/
+ ABC445
+ 0: ABC
+ *** Failers
+No match
+ ABC123
+No match
+
+/^[W-]46]/
+ W46]789
+ 0: W46]
+ -46]789
+ 0: -46]
+ *** Failers
+No match
+ Wall
+No match
+ Zebra
+No match
+ 42
+No match
+ [abcd]
+No match
+ ]abcd[
+No match
+
+/^[W-\]46]/
+ W46]789
+ 0: W
+ Wall
+ 0: W
+ Zebra
+ 0: Z
+ Xylophone
0: X
+ 42
+ 0: 4
+ [abcd]
+ 0: [
+ ]abcd[
+ 0: ]
+ \\backslash
+ 0: \
*** Failers
No match
- XYZ
+ -46]789
No match
+ well
+No match
+
+/\d\d\/\d\d\/\d\d\d\d/
+ 01/01/2000
+ 0: 01/01/2000
-/[^a]+/8g
- bcd
- 0: bcd
- 1: bc
- 2: b
- \x{100}aY\x{256}Z
- 0: \x{100}
- 0: Y\x{256}Z
- 1: Y\x{256}
- 2: Y
-
-/^[^a]{2}/8
- \x{100}bc
- 0: \x{100}b
-
-/^[^a]{2,}/8
- \x{100}bcAa
- 0: \x{100}bcA
- 1: \x{100}bc
- 2: \x{100}b
-
-/^[^a]{2,}?/8
- \x{100}bca
- 0: \x{100}bc
- 1: \x{100}b
-
-/[^a]+/8ig
+/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
+ word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ word cat dog elephant mussel cow horse canary baboon snake shark
+No match
+
+/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+ word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+No match
+
+/^(a){0,0}/
bcd
- 0: bcd
- 1: bc
- 2: b
- \x{100}aY\x{256}Z
- 0: \x{100}
- 0: Y\x{256}Z
- 1: Y\x{256}
- 2: Y
-
-/^[^a]{2}/8i
- \x{100}bc
- 0: \x{100}b
-
-/^[^a]{2,}/8i
- \x{100}bcAa
- 0: \x{100}bc
- 1: \x{100}b
+ 0:
+ abc
+ 0:
+ aab
+ 0:
-/^[^a]{2,}?/8i
- \x{100}bca
- 0: \x{100}bc
- 1: \x{100}b
+/^(a){0,1}/
+ bcd
+ 0:
+ abc
+ 0: a
+ 1:
+ aab
+ 0: a
+ 1:
-/\x{100}{0,0}/8
- abcd
+/^(a){0,2}/
+ bcd
0:
-
-/\x{100}?/8
- abcd
+ abc
+ 0: a
+ 1:
+ aab
+ 0: aa
+ 1: a
+ 2:
+
+/^(a){0,3}/
+ bcd
0:
- \x{100}\x{100}
- 0: \x{100}
+ abc
+ 0: a
1:
+ aab
+ 0: aa
+ 1: a
+ 2:
+ aaa
+ 0: aaa
+ 1: aa
+ 2: a
+ 3:
-/\x{100}{0,3}/8
- \x{100}\x{100}
- 0: \x{100}\x{100}
- 1: \x{100}
+/^(a){0,}/
+ bcd
+ 0:
+ abc
+ 0: a
+ 1:
+ aab
+ 0: aa
+ 1: a
2:
- \x{100}\x{100}\x{100}\x{100}
- 0: \x{100}\x{100}\x{100}
- 1: \x{100}\x{100}
- 2: \x{100}
+ aaa
+ 0: aaa
+ 1: aa
+ 2: a
3:
+ aaaaaaaa
+ 0: aaaaaaaa
+ 1: aaaaaaa
+ 2: aaaaaa
+ 3: aaaaa
+ 4: aaaa
+ 5: aaa
+ 6: aa
+ 7: a
+ 8:
+
+/^(a){1,1}/
+ bcd
+No match
+ abc
+ 0: a
+ aab
+ 0: a
+
+/^(a){1,2}/
+ bcd
+No match
+ abc
+ 0: a
+ aab
+ 0: aa
+ 1: a
+
+/^(a){1,3}/
+ bcd
+No match
+ abc
+ 0: a
+ aab
+ 0: aa
+ 1: a
+ aaa
+ 0: aaa
+ 1: aa
+ 2: a
+
+/^(a){1,}/
+ bcd
+No match
+ abc
+ 0: a
+ aab
+ 0: aa
+ 1: a
+ aaa
+ 0: aaa
+ 1: aa
+ 2: a
+ aaaaaaaa
+ 0: aaaaaaaa
+ 1: aaaaaaa
+ 2: aaaaaa
+ 3: aaaaa
+ 4: aaaa
+ 5: aaa
+ 6: aa
+ 7: a
+
+/.*\.gif/
+ borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.{0,}\.gif/
+ borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.*\.gif/m
+ borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.*\.gif/s
+ borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif
+
+/.*\.gif/ms
+ borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif
-/\x{100}*/8
- abce
- 0:
- \x{100}\x{100}\x{100}\x{100}
- 0: \x{100}\x{100}\x{100}\x{100}
- 1: \x{100}\x{100}\x{100}
- 2: \x{100}\x{100}
- 3: \x{100}
- 4:
+/.*$/
+ borfle\nbib.gif\nno
+ 0: no
-/\x{100}{1,1}/8
- abcd\x{100}\x{100}\x{100}\x{100}
- 0: \x{100}
-
-/\x{100}{1,3}/8
- abcd\x{100}\x{100}\x{100}\x{100}
- 0: \x{100}\x{100}\x{100}
- 1: \x{100}\x{100}
- 2: \x{100}
-
-/\x{100}+/8
- abcd\x{100}\x{100}\x{100}\x{100}
- 0: \x{100}\x{100}\x{100}\x{100}
- 1: \x{100}\x{100}\x{100}
- 2: \x{100}\x{100}
- 3: \x{100}
-
-/\x{100}{3}/8
- abcd\x{100}\x{100}\x{100}XX
- 0: \x{100}\x{100}\x{100}
-
-/\x{100}{3,5}/8
- abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
- 0: \x{100}\x{100}\x{100}\x{100}\x{100}
- 1: \x{100}\x{100}\x{100}\x{100}
- 2: \x{100}\x{100}\x{100}
-
-/\x{100}{3,}/8
- abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
- 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 1: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 2: \x{100}\x{100}\x{100}\x{100}\x{100}
- 3: \x{100}\x{100}\x{100}\x{100}
- 4: \x{100}\x{100}\x{100}
-
-/(?<=a\x{100}{2}b)X/8
- Xyyya\x{100}\x{100}bXzzz
- 0: X
+/.*$/m
+ borfle\nbib.gif\nno
+ 0: borfle
-/\D*/8
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-Matched, but too many subsidiary matches
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/\D*/8
- \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-Matched, but too many subsidiary matches
- 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 1: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 2: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 3: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 4: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 5: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 6: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 7: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 8: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
- 9: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-10: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-11: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-12: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-13: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-14: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-15: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-16: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-17: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-18: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-19: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-20: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-21: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
-
-/\D/8
- 1X2
- 0: X
- 1\x{100}2
- 0: \x{100}
+/.*$/s
+ borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif\x0ano
+
+/.*$/ms
+ borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif\x0ano
+ 1: borfle\x0abib.gif
+ 2: borfle
+
+/.*$/
+ borfle\nbib.gif\nno\n
+ 0: no
+
+/.*$/m
+ borfle\nbib.gif\nno\n
+ 0: borfle
+
+/.*$/s
+ borfle\nbib.gif\nno\n
+ 0: borfle\x0abib.gif\x0ano\x0a
+ 1: borfle\x0abib.gif\x0ano
+
+/.*$/ms
+ borfle\nbib.gif\nno\n
+ 0: borfle\x0abib.gif\x0ano\x0a
+ 1: borfle\x0abib.gif\x0ano
+ 2: borfle\x0abib.gif
+ 3: borfle
+
+/(.*X|^B)/
+ abcde\n1234Xyz
+ 0: 1234X
+ BarFoo
+ 0: B
+ *** Failers
+No match
+ abcde\nBar
+No match
+
+/(.*X|^B)/m
+ abcde\n1234Xyz
+ 0: 1234X
+ BarFoo
+ 0: B
+ abcde\nBar
+ 0: B
+
+/(.*X|^B)/s
+ abcde\n1234Xyz
+ 0: abcde\x0a1234X
+ BarFoo
+ 0: B
+ *** Failers
+No match
+ abcde\nBar
+No match
+
+/(.*X|^B)/ms
+ abcde\n1234Xyz
+ 0: abcde\x0a1234X
+ BarFoo
+ 0: B
+ abcde\nBar
+ 0: B
+
+/(?s)(.*X|^B)/
+ abcde\n1234Xyz
+ 0: abcde\x0a1234X
+ BarFoo
+ 0: B
+ *** Failers
+No match
+ abcde\nBar
+No match
+
+/(?s:.*X|^B)/
+ abcde\n1234Xyz
+ 0: abcde\x0a1234X
+ BarFoo
+ 0: B
+ *** Failers
+No match
+ abcde\nBar
+No match
+
+/^.*B/
+ **** Failers
+No match
+ abc\nB
+No match
+
+/(?s)^.*B/
+ abc\nB
+ 0: abc\x0aB
+
+/(?m)^.*B/
+ abc\nB
+ 0: B
+
+/(?ms)^.*B/
+ abc\nB
+ 0: abc\x0aB
+
+/(?ms)^B/
+ abc\nB
+ 0: B
+
+/(?s)B$/
+ B\n
+ 0: B
+
+/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
+ 123456654321
+ 0: 123456654321
-/>\S/8
- > >X Y
- 0: >X
- > >\x{100} Y
- 0: >\x{100}
+/^\d\d\d\d\d\d\d\d\d\d\d\d/
+ 123456654321
+ 0: 123456654321
+
+/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
+ 123456654321
+ 0: 123456654321
-/\d/8
- \x{100}3
- 0: 3
+/^[abc]{12}/
+ abcabcabcabc
+ 0: abcabcabcabc
-/\s/8
- \x{100} X
- 0:
+/^[a-c]{12}/
+ abcabcabcabc
+ 0: abcabcabcabc
-/\D+/8
- 12abcd34
+/^(a|b|c){12}/
+ abcabcabcabc
+ 0: abcabcabcabc
+
+/^[abcdefghijklmnopqrstuvwxy0123456789]/
+ n
+ 0: n
+ *** Failers
+No match
+ z
+No match
+
+/abcde{0,0}/
+ abcd
0: abcd
- 1: abc
- 2: ab
- 3: a
*** Failers
- 0: *** Failers
- 1: *** Failer
- 2: *** Faile
- 3: *** Fail
- 4: *** Fai
- 5: *** Fa
- 6: *** F
- 7: ***
- 8: ***
- 9: **
-10: *
- 1234
+No match
+ abce
No match
-/\D{2,3}/8
- 12abcd34
- 0: abc
- 1: ab
- 12ab34
+/ab[cd]{0,0}e/
+ abe
+ 0: abe
+ *** Failers
+No match
+ abcde
+No match
+
+/ab(c){0,0}d/
+ abd
+ 0: abd
+ *** Failers
+No match
+ abcd
+No match
+
+/a(b*)/
+ a
+ 0: a
+ ab
0: ab
- *** Failers
- 0: ***
- 1: **
- 1234
+ 1: a
+ abbbb
+ 0: abbbb
+ 1: abbb
+ 2: abb
+ 3: ab
+ 4: a
+ *** Failers
+ 0: a
+ bbbbb
No match
- 12a34
+
+/ab\d{0}e/
+ abe
+ 0: abe
+ *** Failers
No match
+ ab1e
+No match
+
+/"([^\\"]+|\\.)*"/
+ the \"quick\" brown fox
+ 0: "quick"
+ \"the \\\"quick\\\" brown fox\"
+ 0: "the \"quick\" brown fox"
-/\D{2,3}?/8
- 12abcd34
+/.*?/g+
+ abc
0: abc
+ 0+
1: ab
- 12ab34
+ 2: a
+ 3:
+ 0:
+ 0+
+
+/\b/g+
+ abc
+ 0:
+ 0+ abc
+ 0:
+ 0+
+
+/\b/+g
+ abc
+ 0:
+ 0+ abc
+ 0:
+ 0+
+
+//g
+ abc
+ 0:
+ 0:
+ 0:
+ 0:
+
+/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
+ <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
+ 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
+
+/a[^a]b/
+ acb
+ 0: acb
+ a\nb
+ 0: a\x0ab
+
+/a.b/
+ acb
+ 0: acb
+ *** Failers
+No match
+ a\nb
+No match
+
+/a[^a]b/s
+ acb
+ 0: acb
+ a\nb
+ 0: a\x0ab
+
+/a.b/s
+ acb
+ 0: acb
+ a\nb
+ 0: a\x0ab
+
+/^(b+?|a){1,2}?c/
+ bac
+ 0: bac
+ bbac
+ 0: bbac
+ bbbac
+ 0: bbbac
+ bbbbac
+ 0: bbbbac
+ bbbbbac
+ 0: bbbbbac
+
+/^(b+|a){1,2}?c/
+ bac
+ 0: bac
+ bbac
+ 0: bbac
+ bbbac
+ 0: bbbac
+ bbbbac
+ 0: bbbbac
+ bbbbbac
+ 0: bbbbbac
+
+/(?!\A)x/m
+ x\nb\n
+No match
+ a\bx\n
+ 0: x
+
+/\x0{ab}/
+ \0{ab}
+ 0: \x00{ab}
+
+/(A|B)*?CD/
+ CD
+ 0: CD
+
+/(A|B)*CD/
+ CD
+ 0: CD
+
+/(?<!bar)foo/
+ foo
+ 0: foo
+ catfood
+ 0: foo
+ arfootle
+ 0: foo
+ rfoosh
+ 0: foo
+ *** Failers
+No match
+ barfoo
+No match
+ towbarfoo
+No match
+
+/\w{3}(?<!bar)foo/
+ catfood
+ 0: catfoo
+ *** Failers
+No match
+ foo
+No match
+ barfoo
+No match
+ towbarfoo
+No match
+
+/(?<=(foo)a)bar/
+ fooabar
+ 0: bar
+ *** Failers
+No match
+ bar
+No match
+ foobbar
+No match
+
+/\Aabc\z/m
+ abc
+ 0: abc
+ *** Failers
+No match
+ abc\n
+No match
+ qqq\nabc
+No match
+ abc\nzzz
+No match
+ qqq\nabc\nzzz
+No match
+
+"(?>.*/)foo"
+ /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
+No match
+
+"(?>.*/)foo"
+ /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+ 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+
+/(?>(\.\d\d[1-9]?))\d+/
+ 1.230003938
+ 0: .230003938
+ 1: .23000393
+ 2: .2300039
+ 3: .230003
+ 4: .23000
+ 5: .2300
+ 6: .230
+ 1.875000282
+ 0: .875000282
+ 1: .87500028
+ 2: .8750002
+ 3: .875000
+ 4: .87500
+ 5: .8750
+ *** Failers
+No match
+ 1.235
+No match
+
+/^((?>\w+)|(?>\s+))*$/
+ now is the time for all good men to come to the aid of the party
+ 0: now is the time for all good men to come to the aid of the party
+ *** Failers
+No match
+ this is not a line with only words and spaces!
+No match
+
+/(\d+)(\w)/
+ 12345a
+ 0: 12345a
+ 1: 12345
+ 2: 1234
+ 3: 123
+ 4: 12
+ 12345+
+ 0: 12345
+ 1: 1234
+ 2: 123
+ 3: 12
+
+/((?>\d+))(\w)/
+ 12345a
+ 0: 12345a
+ *** Failers
+No match
+ 12345+
+No match
+
+/(?>a+)b/
+ aaab
+ 0: aaab
+
+/((?>a+)b)/
+ aaab
+ 0: aaab
+
+/(?>(a+))b/
+ aaab
+ 0: aaab
+
+/(?>b)+/
+ aaabbbccc
+ 0: bbb
+ 1: bb
+ 2: b
+
+/(?>a+|b+|c+)*c/
+ aaabbbbccccd
+ 0: aaabbbbcccc
+ 1: aaabbbbc
+
+/(a+|b+|c+)*c/
+ aaabbbbccccd
+ 0: aaabbbbcccc
+ 1: aaabbbbccc
+ 2: aaabbbbcc
+ 3: aaabbbbc
+
+/((?>[^()]+)|\([^()]*\))+/
+ ((abc(ade)ufh()()x
+ 0: abc(ade)ufh()()x
+ 1: abc(ade)ufh()()
+ 2: abc(ade)ufh()
+ 3: abc(ade)ufh
+ 4: abc(ade)
+ 5: abc
+
+/\(((?>[^()]+)|\([^()]+\))+\)/
+ (abc)
+ 0: (abc)
+ (abc(def)xyz)
+ 0: (abc(def)xyz)
+ *** Failers
+No match
+ ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+
+/a(?-i)b/i
+ ab
0: ab
- *** Failers
- 0: ***
- 1: **
- 1234
+ Ab
+ 0: Ab
+ *** Failers
+No match
+ aB
No match
- 12a34
+ AB
+No match
+
+/(a (?x)b c)d e/
+ a bcd e
+ 0: a bcd e
+ *** Failers
+No match
+ a b cd e
+No match
+ abcd e
+No match
+ a bcde
+No match
+
+/(a b(?x)c d (?-x)e f)/
+ a bcde f
+ 0: a bcde f
+ *** Failers
+No match
+ abcdef
No match
-/\d+/8
- 12abcd34
- 0: 12
- 1: 1
+/(a(?i)b)c/
+ abc
+ 0: abc
+ aBc
+ 0: aBc
+ *** Failers
+No match
+ abC
+No match
+ aBC
+No match
+ Abc
+No match
+ ABc
+No match
+ ABC
+No match
+ AbC
+No match
+
+/a(?i:b)c/
+ abc
+ 0: abc
+ aBc
+ 0: aBc
+ *** Failers
+No match
+ ABC
+No match
+ abC
+No match
+ aBC
+No match
+
+/a(?i:b)*c/
+ aBc
+ 0: aBc
+ aBBc
+ 0: aBBc
+ *** Failers
+No match
+ aBC
+No match
+ aBBC
+No match
+
+/a(?=b(?i)c)\w\wd/
+ abcd
+ 0: abcd
+ abCd
+ 0: abCd
+ *** Failers
+No match
+ aBCd
+No match
+ abcD
+No match
+
+/(?s-i:more.*than).*million/i
+ more than million
+ 0: more than million
+ more than MILLION
+ 0: more than MILLION
+ more \n than Million
+ 0: more \x0a than Million
*** Failers
No match
+ MORE THAN MILLION
+No match
+ more \n than \n million
+No match
-/\d{2,3}/8
- 12abcd34
+/(?:(?s-i)more.*than).*million/i
+ more than million
+ 0: more than million
+ more than MILLION
+ 0: more than MILLION
+ more \n than Million
+ 0: more \x0a than Million
+ *** Failers
+No match
+ MORE THAN MILLION
+No match
+ more \n than \n million
+No match
+
+/(?>a(?i)b+)+c/
+ abc
+ 0: abc
+ aBbc
+ 0: aBbc
+ aBBc
+ 0: aBBc
+ *** Failers
+No match
+ Abc
+No match
+ abAb
+No match
+ abbC
+No match
+
+/(?=a(?i)b)\w\wc/
+ abc
+ 0: abc
+ aBc
+ 0: aBc
+ *** Failers
+No match
+ Ab
+No match
+ abC
+No match
+ aBC
+No match
+
+/(?<=a(?i)b)(\w\w)c/
+ abxxc
+ 0: xxc
+ aBxxc
+ 0: xxc
+ *** Failers
+No match
+ Abxxc
+No match
+ ABxxc
+No match
+ abxxC
+No match
+
+/^(?(?=abc)\w{3}:|\d\d)$/
+ abc:
+ 0: abc:
+ 12
0: 12
- 1234abcd
- 0: 123
- 1: 12
- *** Failers
+ *** Failers
+No match
+ 123
No match
- 1.4
+ xyz
No match
-/\d{2,3}?/8
- 12abcd34
+/^(?(?!abc)\d\d|\w{3}:)$/
+ abc:
+ 0: abc:
+ 12
0: 12
- 1234abcd
- 0: 123
- 1: 12
- *** Failers
-No match
- 1.4
-No match
-
-/\S+/8
- 12abcd34
- 0: 12abcd34
- 1: 12abcd3
- 2: 12abcd
- 3: 12abc
- 4: 12ab
- 5: 12a
- 6: 12
- 7: 1
- *** Failers
- 0: ***
- 1: **
- 2: *
- \ \
-No match
-
-/\S{2,3}/8
- 12abcd34
- 0: 12a
- 1: 12
- 1234abcd
- 0: 123
- 1: 12
*** Failers
- 0: ***
- 1: **
- \ \
+No match
+ 123
+No match
+ xyz
+No match
+
+/(?(?<=foo)bar|cat)/
+ foobar
+ 0: bar
+ cat
+ 0: cat
+ fcat
+ 0: cat
+ focat
+ 0: cat
+ *** Failers
+No match
+ foocat
No match
-/\S{2,3}?/8
- 12abcd34
- 0: 12a
- 1: 12
- 1234abcd
- 0: 123
- 1: 12
+/(?(?<!foo)cat|bar)/
+ foobar
+ 0: bar
+ cat
+ 0: cat
+ fcat
+ 0: cat
+ focat
+ 0: cat
+ *** Failers
+No match
+ foocat
+No match
+
+/(?>a*)*/
+ a
+ 0: a
+ 1:
+ aa
+ 0: aa
+ 1:
+ aaaa
+ 0: aaaa
+ 1:
+
+/(abc|)+/
+ abc
+ 0: abc
+ 1:
+ abcabc
+ 0: abcabc
+ 1: abc
+ 2:
+ abcabcabc
+ 0: abcabcabc
+ 1: abcabc
+ 2: abc
+ 3:
+ xyz
+ 0:
+
+/([a]*)*/
+ a
+ 0: a
+ 1:
+ aaaaa
+ 0: aaaaa
+ 1: aaaa
+ 2: aaa
+ 3: aa
+ 4: a
+ 5:
+
+/([ab]*)*/
+ a
+ 0: a
+ 1:
+ b
+ 0: b
+ 1:
+ ababab
+ 0: ababab
+ 1: ababa
+ 2: abab
+ 3: aba
+ 4: ab
+ 5: a
+ 6:
+ aaaabcde
+ 0: aaaab
+ 1: aaaa
+ 2: aaa
+ 3: aa
+ 4: a
+ 5:
+ bbbb
+ 0: bbbb
+ 1: bbb
+ 2: bb
+ 3: b
+ 4:
+
+/([^a]*)*/
+ b
+ 0: b
+ 1:
+ bbbb
+ 0: bbbb
+ 1: bbb
+ 2: bb
+ 3: b
+ 4:
+ aaa
+ 0:
+
+/([^ab]*)*/
+ cccc
+ 0: cccc
+ 1: ccc
+ 2: cc
+ 3: c
+ 4:
+ abab
+ 0:
+
+/([a]*?)*/
+ a
+ 0: a
+ 1:
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+ 4:
+
+/([ab]*?)*/
+ a
+ 0: a
+ 1:
+ b
+ 0: b
+ 1:
+ abab
+ 0: abab
+ 1: aba
+ 2: ab
+ 3: a
+ 4:
+ baba
+ 0: baba
+ 1: bab
+ 2: ba
+ 3: b
+ 4:
+
+/([^a]*?)*/
+ b
+ 0: b
+ 1:
+ bbbb
+ 0: bbbb
+ 1: bbb
+ 2: bb
+ 3: b
+ 4:
+ aaa
+ 0:
+
+/([^ab]*?)*/
+ c
+ 0: c
+ 1:
+ cccc
+ 0: cccc
+ 1: ccc
+ 2: cc
+ 3: c
+ 4:
+ baba
+ 0:
+
+/(?>a*)*/
+ a
+ 0: a
+ 1:
+ aaabcde
+ 0: aaa
+ 1:
+
+/((?>a*))*/
+ aaaaa
+ 0: aaaaa
+ 1:
+ aabbaa
+ 0: aa
+ 1:
+
+/((?>a*?))*/
+ aaaaa
+ 0: aaaaa
+ 1:
+ aabbaa
+ 0: aa
+ 1:
+
+/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
+ 12-sep-98
+ 0: 12-sep-98
+ 12-09-98
+ 0: 12-09-98
*** Failers
- 0: ***
- 1: **
- \ \
+No match
+ sep-12-98
+No match
+
+/(?i:saturday|sunday)/
+ saturday
+ 0: saturday
+ sunday
+ 0: sunday
+ Saturday
+ 0: Saturday
+ Sunday
+ 0: Sunday
+ SATURDAY
+ 0: SATURDAY
+ SUNDAY
+ 0: SUNDAY
+ SunDay
+ 0: SunDay
+
+/(a(?i)bc|BB)x/
+ abcx
+ 0: abcx
+ aBCx
+ 0: aBCx
+ bbx
+ 0: bbx
+ BBx
+ 0: BBx
+ *** Failers
+No match
+ abcX
+No match
+ aBCX
+No match
+ bbX
+No match
+ BBX
No match
-/>\s+</8
- 12> <34
- 0: > <
+/^([ab](?i)[cd]|[ef])/
+ ac
+ 0: ac
+ aC
+ 0: aC
+ bD
+ 0: bD
+ elephant
+ 0: e
+ Europe
+ 0: E
+ frog
+ 0: f
+ France
+ 0: F
*** Failers
No match
+ Africa
+No match
-/>\s{2,3}</8
- ab> <cd
- 0: > <
- ab> <ce
- 0: > <
+/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
+ ab
+ 0: ab
+ aBd
+ 0: aBd
+ xy
+ 0: xy
+ xY
+ 0: xY
+ zebra
+ 0: z
+ Zambesi
+ 0: Z
*** Failers
No match
- ab> <cd
+ aCD
+No match
+ XY
No match
-/>\s{2,3}?</8
- ab> <cd
- 0: > <
- ab> <ce
- 0: > <
+/(?<=foo\n)^bar/m
+ foo\nbar
+ 0: bar
*** Failers
No match
- ab> <cd
+ bar
+No match
+ baz\nbar
No match
-/\w+/8
- 12 34
- 0: 12
- 1: 1
+/(?<=(?<!foo)bar)baz/
+ barbaz
+ 0: baz
+ barbarbaz
+ 0: baz
+ koobarbaz
+ 0: baz
*** Failers
- 0: Failers
- 1: Failer
- 2: Faile
- 3: Fail
- 4: Fai
- 5: Fa
- 6: F
- +++=*!
No match
+ baz
+No match
+ foobarbaz
+No match
+
+/The following tests are taken from the Perl 5.005 test suite; some of them/
+/are compatible with 5.004, but I'd rather not have to sort them out./
+No match
+
+/abc/
+ abc
+ 0: abc
+ xabcy
+ 0: abc
+ ababc
+ 0: abc
+ *** Failers
+No match
+ xbc
+No match
+ axc
+No match
+ abx
+No match
+
+/ab*c/
+ abc
+ 0: abc
+
+/ab*bc/
+ abc
+ 0: abc
+ abbc
+ 0: abbc
+ abbbbc
+ 0: abbbbc
+
+/.{1}/
+ abbbbc
+ 0: a
+
+/.{3,4}/
+ abbbbc
+ 0: abbb
+ 1: abb
+
+/ab{0,}bc/
+ abbbbc
+ 0: abbbbc
+
+/ab+bc/
+ abbc
+ 0: abbc
+ *** Failers
+No match
+ abc
+No match
+ abq
+No match
+
+/ab+bc/
+ abbbbc
+ 0: abbbbc
+
+/ab{1,}bc/
+ abbbbc
+ 0: abbbbc
+
+/ab{1,3}bc/
+ abbbbc
+ 0: abbbbc
+
+/ab{3,4}bc/
+ abbbbc
+ 0: abbbbc
+
+/ab{4,5}bc/
+ *** Failers
+No match
+ abq
+No match
+ abbbbc
+No match
+
+/ab?bc/
+ abbc
+ 0: abbc
+ abc
+ 0: abc
+
+/ab{0,1}bc/
+ abc
+ 0: abc
+
+/ab?bc/
+
+/ab?c/
+ abc
+ 0: abc
+
+/ab{0,1}c/
+ abc
+ 0: abc
+
+/^abc$/
+ abc
+ 0: abc
+ *** Failers
+No match
+ abbbbc
+No match
+ abcc
+No match
+
+/^abc/
+ abcc
+ 0: abc
+
+/^abc$/
+
+/abc$/
+ aabc
+ 0: abc
+ *** Failers
+No match
+ aabc
+ 0: abc
+ aabcd
+No match
+
+/^/
+ abc
+ 0:
+
+/$/
+ abc
+ 0:
+
+/a.c/
+ abc
+ 0: abc
+ axc
+ 0: axc
+
+/a.*c/
+ axyzc
+ 0: axyzc
+
+/a[bc]d/
+ abd
+ 0: abd
+ *** Failers
+No match
+ axyzd
+No match
+ abc
+No match
+
+/a[b-d]e/
+ ace
+ 0: ace
+
+/a[b-d]/
+ aac
+ 0: ac
+
+/a[-b]/
+ a-
+ 0: a-
+
+/a[b-]/
+ a-
+ 0: a-
-/\w{2,3}/8
- ab cd
+/a]/
+ a]
+ 0: a]
+
+/a[]]b/
+ a]b
+ 0: a]b
+
+/a[^bc]d/
+ aed
+ 0: aed
+ *** Failers
+No match
+ abd
+No match
+ abd
+No match
+
+/a[^-b]c/
+ adc
+ 0: adc
+
+/a[^]b]c/
+ adc
+ 0: adc
+ *** Failers
+No match
+ a-c
+ 0: a-c
+ a]c
+No match
+
+/\ba\b/
+ a-
+ 0: a
+ -a
+ 0: a
+ -a-
+ 0: a
+
+/\by\b/
+ *** Failers
+No match
+ xy
+No match
+ yz
+No match
+ xyz
+No match
+
+/\Ba\B/
+ *** Failers
+ 0: a
+ a-
+No match
+ -a
+No match
+ -a-
+No match
+
+/\By\b/
+ xy
+ 0: y
+
+/\by\B/
+ yz
+ 0: y
+
+/\By\B/
+ xyz
+ 0: y
+
+/\w/
+ a
+ 0: a
+
+/\W/
+ -
+ 0: -
+ *** Failers
+ 0: *
+ -
+ 0: -
+ a
+No match
+
+/a\sb/
+ a b
+ 0: a b
+
+/a\Sb/
+ a-b
+ 0: a-b
+ *** Failers
+No match
+ a-b
+ 0: a-b
+ a b
+No match
+
+/\d/
+ 1
+ 0: 1
+
+/\D/
+ -
+ 0: -
+ *** Failers
+ 0: *
+ -
+ 0: -
+ 1
+No match
+
+/[\w]/
+ a
+ 0: a
+
+/[\W]/
+ -
+ 0: -
+ *** Failers
+ 0: *
+ -
+ 0: -
+ a
+No match
+
+/a[\s]b/
+ a b
+ 0: a b
+
+/a[\S]b/
+ a-b
+ 0: a-b
+ *** Failers
+No match
+ a-b
+ 0: a-b
+ a b
+No match
+
+/[\d]/
+ 1
+ 0: 1
+
+/[\D]/
+ -
+ 0: -
+ *** Failers
+ 0: *
+ -
+ 0: -
+ 1
+No match
+
+/ab|cd/
+ abc
+ 0: ab
+ abcd
0: ab
- abcd ce
+
+/()ef/
+ def
+ 0: ef
+
+/$b/
+
+/a\(b/
+ a(b
+ 0: a(b
+
+/a\(*b/
+ ab
+ 0: ab
+ a((b
+ 0: a((b
+
+/a\\b/
+ a\b
+No match
+
+/((a))/
+ abc
+ 0: a
+
+/(a)b(c)/
+ abc
0: abc
- 1: ab
+
+/a+b+c/
+ aabbabc
+ 0: abc
+
+/a{1,}b{1,}c/
+ aabbabc
+ 0: abc
+
+/a.+?c/
+ abcabc
+ 0: abcabc
+ 1: abc
+
+/(a+|b)*/
+ ab
+ 0: ab
+ 1: a
+ 2:
+
+/(a+|b){0,}/
+ ab
+ 0: ab
+ 1: a
+ 2:
+
+/(a+|b)+/
+ ab
+ 0: ab
+ 1: a
+
+/(a+|b){1,}/
+ ab
+ 0: ab
+ 1: a
+
+/(a+|b)?/
+ ab
+ 0: a
+ 1:
+
+/(a+|b){0,1}/
+ ab
+ 0: a
+ 1:
+
+/[^ab]*/
+ cde
+ 0: cde
+ 1: cd
+ 2: c
+ 3:
+
+/abc/
*** Failers
- 0: Fai
- 1: Fa
- a.b.c
No match
+ b
+No match
+
+
+/a*/
+
+
+/([abc])*d/
+ abbbcd
+ 0: abbbcd
+
+/([abc])*bcd/
+ abcd
+ 0: abcd
+
+/a|b|c|d|e/
+ e
+ 0: e
-/\w{2,3}?/8
- ab cd
+/(a|b|c|d|e)f/
+ ef
+ 0: ef
+
+/abcd*efg/
+ abcdefg
+ 0: abcdefg
+
+/ab*/
+ xabyabbbz
0: ab
- abcd ce
+ 1: a
+ xayabbbz
+ 0: a
+
+/(ab|cd)e/
+ abcde
+ 0: cde
+
+/[abhgefdc]ij/
+ hij
+ 0: hij
+
+/^(ab|cd)e/
+
+/(abc|)ef/
+ abcdef
+ 0: ef
+
+/(a|b)c*d/
+ abcd
+ 0: bcd
+
+/(ab|ab*)bc/
+ abc
+ 0: abc
+
+/a([bc]*)c*/
+ abc
0: abc
1: ab
+ 2: a
+
+/a([bc]*)(c*d)/
+ abcd
+ 0: abcd
+
+/a([bc]+)(c*d)/
+ abcd
+ 0: abcd
+
+/a([bc]*)(c+d)/
+ abcd
+ 0: abcd
+
+/a[bcd]*dcdcde/
+ adcdcde
+ 0: adcdcde
+
+/a[bcd]+dcdcde/
*** Failers
- 0: Fai
- 1: Fa
- a.b.c
No match
+ abcde
+No match
+ adcdcde
+No match
+
+/(ab|a)b*c/
+ abc
+ 0: abc
-/\W+/8
- 12====34
- 0: ====
- 1: ===
- 2: ==
- 3: =
+/((a)(b)c)(d)/
+ abcd
+ 0: abcd
+
+/[a-zA-Z_][a-zA-Z0-9_]*/
+ alpha
+ 0: alpha
+ 1: alph
+ 2: alp
+ 3: al
+ 4: a
+
+/^a(bc+|b[eh])g|.h$/
+ abh
+ 0: bh
+
+/(bc+d$|ef*g.|h?i(j|k))/
+ effgz
+ 0: effgz
+ ij
+ 0: ij
+ reffgz
+ 0: effgz
*** Failers
- 0: ***
- 1: ***
- 2: **
- 3: *
- abcd
No match
+ effg
+No match
+ bcdd
+No match
+
+/((((((((((a))))))))))/
+ a
+ 0: a
+
+/(((((((((a)))))))))/
+ a
+ 0: a
-/\W{2,3}/8
- ab====cd
- 0: ===
- 1: ==
- ab==cd
- 0: ==
+/multiple words of text/
*** Failers
- 0: ***
- 1: **
- a.b.c
No match
+ aa
+No match
+ uh-uh
+No match
+
+/multiple words/
+ multiple words, yeah
+ 0: multiple words
+
+/(.*)c(.*)/
+ abcde
+ 0: abcde
+ 1: abcd
+ 2: abc
-/\W{2,3}?/8
- ab====cd
- 0: ===
- 1: ==
- ab==cd
- 0: ==
+/\((.*), (.*)\)/
+ (a, b)
+ 0: (a, b)
+
+/[k]/
+
+/abcd/
+ abcd
+ 0: abcd
+
+/a(bc)d/
+ abcd
+ 0: abcd
+
+/a[-]?c/
+ ac
+ 0: ac
+
+/abc/i
+ ABC
+ 0: ABC
+ XABCY
+ 0: ABC
+ ABABC
+ 0: ABC
*** Failers
- 0: ***
- 1: **
- a.b.c
+No match
+ aaxabxbaxbbx
+No match
+ XBC
+No match
+ AXC
+No match
+ ABX
No match
-/[\x{100}]/8
- \x{100}
- 0: \x{100}
- Z\x{100}
- 0: \x{100}
- \x{100}Z
- 0: \x{100}
- *** Failers
+/ab*c/i
+ ABC
+ 0: ABC
+
+/ab*bc/i
+ ABC
+ 0: ABC
+ ABBC
+ 0: ABBC
+
+/ab*?bc/i
+ ABBBBC
+ 0: ABBBBC
+
+/ab{0,}?bc/i
+ ABBBBC
+ 0: ABBBBC
+
+/ab+?bc/i
+ ABBC
+ 0: ABBC
+
+/ab+bc/i
+ *** Failers
+No match
+ ABC
+No match
+ ABQ
No match
-/[Z\x{100}]/8
- Z\x{100}
- 0: Z
- \x{100}
- 0: \x{100}
- \x{100}Z
- 0: \x{100}
- *** Failers
+/ab{1,}bc/i
+
+/ab+bc/i
+ ABBBBC
+ 0: ABBBBC
+
+/ab{1,}?bc/i
+ ABBBBC
+ 0: ABBBBC
+
+/ab{1,3}?bc/i
+ ABBBBC
+ 0: ABBBBC
+
+/ab{3,4}?bc/i
+ ABBBBC
+ 0: ABBBBC
+
+/ab{4,5}?bc/i
+ *** Failers
+No match
+ ABQ
+No match
+ ABBBBC
No match
-/[\x{100}\x{200}]/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- *** Failers
-No match
-
-/[\x{100}-\x{200}]/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{111}cd
- 0: \x{111}
- *** Failers
-No match
-
-/[z-\x{200}]/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{111}cd
- 0: \x{111}
- abzcd
- 0: z
- ab|cd
- 0: |
- *** Failers
-No match
-
-/[Q\x{100}\x{200}]/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- Q?
- 0: Q
- *** Failers
-No match
-
-/[Q\x{100}-\x{200}]/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{111}cd
- 0: \x{111}
- Q?
- 0: Q
- *** Failers
-No match
-
-/[Qz-\x{200}]/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{111}cd
- 0: \x{111}
- abzcd
- 0: z
- ab|cd
- 0: |
- Q?
- 0: Q
- *** Failers
-No match
-
-/[\x{100}\x{200}]{1,3}/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
- 0: \x{200}\x{100}\x{200}
- 1: \x{200}\x{100}
- 2: \x{200}
- *** Failers
-No match
-
-/[\x{100}\x{200}]{1,3}?/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
- 0: \x{200}\x{100}\x{200}
- 1: \x{200}\x{100}
- 2: \x{200}
- *** Failers
-No match
-
-/[Q\x{100}\x{200}]{1,3}/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
- 0: \x{200}\x{100}\x{200}
- 1: \x{200}\x{100}
- 2: \x{200}
- *** Failers
-No match
-
-/[Q\x{100}\x{200}]{1,3}?/8
- ab\x{100}cd
- 0: \x{100}
- ab\x{200}cd
- 0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
- 0: \x{200}\x{100}\x{200}
- 1: \x{200}\x{100}
- 2: \x{200}
- *** Failers
-No match
-
-/(?<=[\x{100}\x{200}])X/8
- abc\x{200}X
- 0: X
- abc\x{100}X
- 0: X
+/ab??bc/i
+ ABBC
+ 0: ABBC
+ ABC
+ 0: ABC
+
+/ab{0,1}?bc/i
+ ABC
+ 0: ABC
+
+/ab??bc/i
+
+/ab??c/i
+ ABC
+ 0: ABC
+
+/ab{0,1}?c/i
+ ABC
+ 0: ABC
+
+/^abc$/i
+ ABC
+ 0: ABC
*** Failers
No match
- X
+ ABBBBC
+No match
+ ABCC
No match
-/(?<=[Q\x{100}\x{200}])X/8
- abc\x{200}X
- 0: X
- abc\x{100}X
- 0: X
- abQX
- 0: X
+/^abc/i
+ ABCC
+ 0: ABC
+
+/^abc$/i
+
+/abc$/i
+ AABC
+ 0: ABC
+
+/^/i
+ ABC
+ 0:
+
+/$/i
+ ABC
+ 0:
+
+/a.c/i
+ ABC
+ 0: ABC
+ AXC
+ 0: AXC
+
+/a.*?c/i
+ AXYZC
+ 0: AXYZC
+
+/a.*c/i
*** Failers
No match
- X
+ AABC
+ 0: AABC
+ AXYZD
No match
-/(?<=[\x{100}\x{200}]{3})X/8
- abc\x{100}\x{200}\x{100}X
- 0: X
+/a[bc]d/i
+ ABD
+ 0: ABD
+
+/a[b-d]e/i
+ ACE
+ 0: ACE
*** Failers
No match
- abc\x{200}X
+ ABC
No match
- X
+ ABD
No match
-/[^\x{100}\x{200}]X/8
- AX
- 0: AX
- \x{150}X
- 0: \x{150}X
- \x{500}X
- 0: \x{500}X
+/a[b-d]/i
+ AAC
+ 0: AC
+
+/a[-b]/i
+ A-
+ 0: A-
+
+/a[b-]/i
+ A-
+ 0: A-
+
+/a]/i
+ A]
+ 0: A]
+
+/a[]]b/i
+ A]B
+ 0: A]B
+
+/a[^bc]d/i
+ AED
+ 0: AED
+
+/a[^-b]c/i
+ ADC
+ 0: ADC
*** Failers
No match
- \x{100}X
+ ABD
No match
- \x{200}X
+ A-C
No match
-/[^Q\x{100}\x{200}]X/8
- AX
- 0: AX
- \x{150}X
- 0: \x{150}X
- \x{500}X
- 0: \x{500}X
+/a[^]b]c/i
+ ADC
+ 0: ADC
+
+/ab|cd/i
+ ABC
+ 0: AB
+ ABCD
+ 0: AB
+
+/()ef/i
+ DEF
+ 0: EF
+
+/$b/i
*** Failers
No match
- \x{100}X
+ A]C
No match
- \x{200}X
+ B
No match
- QX
+
+/a\(b/i
+ A(B
+ 0: A(B
+
+/a\(*b/i
+ AB
+ 0: AB
+ A((B
+ 0: A((B
+
+/a\\b/i
+ A\B
No match
-/[^\x{100}-\x{200}]X/8
- AX
- 0: AX
- \x{500}X
- 0: \x{500}X
+/((a))/i
+ ABC
+ 0: A
+
+/(a)b(c)/i
+ ABC
+ 0: ABC
+
+/a+b+c/i
+ AABBABC
+ 0: ABC
+
+/a{1,}b{1,}c/i
+ AABBABC
+ 0: ABC
+
+/a.+?c/i
+ ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/a.*?c/i
+ ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/a.{0,5}?c/i
+ ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/(a+|b)*/i
+ AB
+ 0: AB
+ 1: A
+ 2:
+
+/(a+|b){0,}/i
+ AB
+ 0: AB
+ 1: A
+ 2:
+
+/(a+|b)+/i
+ AB
+ 0: AB
+ 1: A
+
+/(a+|b){1,}/i
+ AB
+ 0: AB
+ 1: A
+
+/(a+|b)?/i
+ AB
+ 0: A
+ 1:
+
+/(a+|b){0,1}/i
+ AB
+ 0: A
+ 1:
+
+/(a+|b){0,1}?/i
+ AB
+ 0: A
+ 1:
+
+/[^ab]*/i
+ CDE
+ 0: CDE
+ 1: CD
+ 2: C
+ 3:
+
+/abc/i
+
+/a*/i
+
+
+/([abc])*d/i
+ ABBBCD
+ 0: ABBBCD
+
+/([abc])*bcd/i
+ ABCD
+ 0: ABCD
+
+/a|b|c|d|e/i
+ E
+ 0: E
+
+/(a|b|c|d|e)f/i
+ EF
+ 0: EF
+
+/abcd*efg/i
+ ABCDEFG
+ 0: ABCDEFG
+
+/ab*/i
+ XABYABBBZ
+ 0: AB
+ 1: A
+ XAYABBBZ
+ 0: A
+
+/(ab|cd)e/i
+ ABCDE
+ 0: CDE
+
+/[abhgefdc]ij/i
+ HIJ
+ 0: HIJ
+
+/^(ab|cd)e/i
+ ABCDE
+No match
+
+/(abc|)ef/i
+ ABCDEF
+ 0: EF
+
+/(a|b)c*d/i
+ ABCD
+ 0: BCD
+
+/(ab|ab*)bc/i
+ ABC
+ 0: ABC
+
+/a([bc]*)c*/i
+ ABC
+ 0: ABC
+ 1: AB
+ 2: A
+
+/a([bc]*)(c*d)/i
+ ABCD
+ 0: ABCD
+
+/a([bc]+)(c*d)/i
+ ABCD
+ 0: ABCD
+
+/a([bc]*)(c+d)/i
+ ABCD
+ 0: ABCD
+
+/a[bcd]*dcdcde/i
+ ADCDCDE
+ 0: ADCDCDE
+
+/a[bcd]+dcdcde/i
+
+/(ab|a)b*c/i
+ ABC
+ 0: ABC
+
+/((a)(b)c)(d)/i
+ ABCD
+ 0: ABCD
+
+/[a-zA-Z_][a-zA-Z0-9_]*/i
+ ALPHA
+ 0: ALPHA
+ 1: ALPH
+ 2: ALP
+ 3: AL
+ 4: A
+
+/^a(bc+|b[eh])g|.h$/i
+ ABH
+ 0: BH
+
+/(bc+d$|ef*g.|h?i(j|k))/i
+ EFFGZ
+ 0: EFFGZ
+ IJ
+ 0: IJ
+ REFFGZ
+ 0: EFFGZ
*** Failers
No match
- \x{100}X
+ ADCDCDE
No match
- \x{150}X
+ EFFG
No match
- \x{200}X
+ BCDD
No match
-/[z-\x{100}]/8i
- z
- 0: z
- Z
- 0: Z
- \x{100}
- 0: \x{100}
+/((((((((((a))))))))))/i
+ A
+ 0: A
+
+/(((((((((a)))))))))/i
+ A
+ 0: A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
+ A
+ 0: A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
+ C
+ 0: C
+
+/multiple words of text/i
*** Failers
No match
- \x{102}
+ AA
No match
- y
+ UH-UH
No match
-/[\xFF]/
- >\xff<
- 0: \xff
+/multiple words/i
+ MULTIPLE WORDS, YEAH
+ 0: MULTIPLE WORDS
-/[\xff]/8
- >\x{ff}<
- 0: \x{ff}
+/(.*)c(.*)/i
+ ABCDE
+ 0: ABCDE
+ 1: ABCD
+ 2: ABC
-/[^\xFF]/
- XYZ
- 0: X
+/\((.*), (.*)\)/i
+ (A, B)
+ 0: (A, B)
-/[^\xff]/8
- XYZ
- 0: X
- \x{123}
- 0: \x{123}
+/[k]/i
+
+/abcd/i
+ ABCD
+ 0: ABCD
+
+/a(bc)d/i
+ ABCD
+ 0: ABCD
+
+/a[-]?c/i
+ AC
+ 0: AC
+
+/a(?!b)./
+ abad
+ 0: ad
+
+/a(?=d)./
+ abad
+ 0: ad
+
+/a(?=c|d)./
+ abad
+ 0: ad
+
+/a(?:b|c|d)(.)/
+ ace
+ 0: ace
+
+/a(?:b|c|d)*(.)/
+ ace
+ 0: ace
+ 1: ac
+
+/a(?:b|c|d)+?(.)/
+ ace
+ 0: ace
+ acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+ 2: acdbcd
+ 3: acdbc
+ 4: acdb
+ 5: acd
+
+/a(?:b|c|d)+(.)/
+ acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+ 2: acdbcd
+ 3: acdbc
+ 4: acdb
+ 5: acd
+
+/a(?:b|c|d){2}(.)/
+ acdbcdbe
+ 0: acdb
+
+/a(?:b|c|d){4,5}(.)/
+ acdbcdbe
+ 0: acdbcdb
+ 1: acdbcd
+
+/a(?:b|c|d){4,5}?(.)/
+ acdbcdbe
+ 0: acdbcdb
+ 1: acdbcd
+
+/((foo)|(bar))*/
+ foobar
+ 0: foobar
+ 1: foo
+ 2:
+
+/a(?:b|c|d){6,7}(.)/
+ acdbcdbe
+ 0: acdbcdbe
+
+/a(?:b|c|d){6,7}?(.)/
+ acdbcdbe
+ 0: acdbcdbe
+
+/a(?:b|c|d){5,6}(.)/
+ acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|c|d){5,6}?(.)/
+ acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|c|d){5,7}(.)/
+ acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|c|d){5,7}?(.)/
+ acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|(c|e){1,2}?|d)+?(.)/
+ ace
+ 0: ace
+
+/^(.+)?B/
+ AB
+ 0: AB
+
+/^([^a-z])|(\^)$/
+ .
+ 0: .
+
+/^[<>]&/
+ <&OUT
+ 0: <&
+
+/(?:(f)(o)(o)|(b)(a)(r))*/
+ foobar
+ 0: foobar
+ 1: foo
+ 2:
+
+/(?<=a)b/
+ ab
+ 0: b
+ *** Failers
+No match
+ cb
+No match
+ b
+No match
+
+/(?<!c)b/
+ ab
+ 0: b
+ b
+ 0: b
+ b
+ 0: b
+
+/(?:..)*a/
+ aba
+ 0: aba
+ 1: a
+
+/(?:..)*?a/
+ aba
+ 0: aba
+ 1: a
+
+/^(){3,5}/
+ abc
+ 0:
+
+/^(a+)*ax/
+ aax
+ 0: aax
+
+/^((a|b)+)*ax/
+ aax
+ 0: aax
+
+/^((a|bc)+)*ax/
+ aax
+ 0: aax
+
+/(a|x)*ab/
+ cab
+ 0: ab
+
+/(a)*ab/
+ cab
+ 0: ab
+
+/(?:(?i)a)b/
+ ab
+ 0: ab
+
+/((?i)a)b/
+ ab
+ 0: ab
+
+/(?:(?i)a)b/
+ Ab
+ 0: Ab
+
+/((?i)a)b/
+ Ab
+ 0: Ab
+
+/(?:(?i)a)b/
+ *** Failers
+No match
+ cb
+No match
+ aB
+No match
+
+/((?i)a)b/
+
+/(?i:a)b/
+ ab
+ 0: ab
+
+/((?i:a))b/
+ ab
+ 0: ab
+
+/(?i:a)b/
+ Ab
+ 0: Ab
+
+/((?i:a))b/
+ Ab
+ 0: Ab
+
+/(?i:a)b/
+ *** Failers
+No match
+ aB
+No match
+ aB
+No match
+
+/((?i:a))b/
+
+/(?:(?-i)a)b/i
+ ab
+ 0: ab
+
+/((?-i)a)b/i
+ ab
+ 0: ab
+
+/(?:(?-i)a)b/i
+ aB
+ 0: aB
+
+/((?-i)a)b/i
+ aB
+ 0: aB
+
+/(?:(?-i)a)b/i
+ *** Failers
+No match
+ aB
+ 0: aB
+ Ab
+No match
+
+/((?-i)a)b/i
+
+/(?:(?-i)a)b/i
+ aB
+ 0: aB
+
+/((?-i)a)b/i
+ aB
+ 0: aB
+
+/(?:(?-i)a)b/i
+ *** Failers
+No match
+ Ab
+No match
+ AB
+No match
+
+/((?-i)a)b/i
+
+/(?-i:a)b/i
+ ab
+ 0: ab
+
+/((?-i:a))b/i
+ ab
+ 0: ab
+
+/(?-i:a)b/i
+ aB
+ 0: aB
+
+/((?-i:a))b/i
+ aB
+ 0: aB
+
+/(?-i:a)b/i
+ *** Failers
+No match
+ AB
+No match
+ Ab
+No match
+
+/((?-i:a))b/i
+
+/(?-i:a)b/i
+ aB
+ 0: aB
+
+/((?-i:a))b/i
+ aB
+ 0: aB
+
+/(?-i:a)b/i
+ *** Failers
+No match
+ Ab
+No match
+ AB
+No match
+
+/((?-i:a))b/i
+
+/((?-i:a.))b/i
+ *** Failers
+No match
+ AB
+No match
+ a\nB
+No match
+
+/((?s-i:a.))b/i
+ a\nB
+ 0: a\x0aB
+
+/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
+ cabbbb
+ 0: cabbbb
+
+/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
+ caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+ 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+
+/foo\w*\d{4}baz/
+ foobar1234baz
+ 0: foobar1234baz
+
+/x(~~)*(?:(?:F)?)?/
+ x~~
+ 0: x~~
+ 1: x
-/^[ac]*b/8
- xb
+/^a(?#xxx){3}c/
+ aaac
+ 0: aaac
+
+/^a (?#xxx) (?#yyy) {3}c/x
+ aaac
+ 0: aaac
+
+/(?<![cd])b/
+ *** Failers
+No match
+ B\nB
+No match
+ dbcb
+No match
+
+/(?<![cd])[ab]/
+ dbaacb
+ 0: a
+
+/(?<!(c|d))b/
+
+/(?<!(c|d))[ab]/
+ dbaacb
+ 0: a
+
+/(?<!cd)[ab]/
+ cdaccb
+ 0: b
+
+/^(?:a?b?)*$/
+ *** Failers
+No match
+ dbcb
+No match
+ a--
+No match
+
+/((?s)^a(.))((?m)^b$)/
+ a\nb\nc\n
+ 0: a\x0ab
+
+/((?m)^b$)/
+ a\nb\nc\n
+ 0: b
+
+/(?m)^b/
+ a\nb\n
+ 0: b
+
+/(?m)^(b)/
+ a\nb\n
+ 0: b
+
+/((?m)^b)/
+ a\nb\n
+ 0: b
+
+/\n((?m)^b)/
+ a\nb\n
+ 0: \x0ab
+
+/((?s).)c(?!.)/
+ a\nb\nc\n
+ 0: \x0ac
+ a\nb\nc\n
+ 0: \x0ac
+
+/((?s)b.)c(?!.)/
+ a\nb\nc\n
+ 0: b\x0ac
+ a\nb\nc\n
+ 0: b\x0ac
+
+/^b/
+
+/()^b/
+ *** Failers
+No match
+ a\nb\nc\n
+No match
+ a\nb\nc\n
No match
-/^[ac\x{100}]*b/8
- xb
+/((?m)^b)/
+ a\nb\nc\n
+ 0: b
+
+/(?(?!a)a|b)/
+
+/(?(?!a)b|a)/
+ a
+ 0: a
+
+/(?(?=a)b|a)/
+ *** Failers
+No match
+ a
+No match
+ a
+No match
+
+/(?(?=a)a|b)/
+ a
+ 0: a
+
+/(\w+:)+/
+ one:
+ 0: one:
+
+/$(?<=^(a))/
+ a
+ 0:
+
+/([\w:]+::)?(\w+)$/
+ abcd
+ 0: abcd
+ xy:z:::abcd
+ 0: xy:z:::abcd
+
+/^[^bcd]*(c+)/
+ aexycd
+ 0: aexyc
+
+/(a*)b+/
+ caab
+ 0: aab
+
+/([\w:]+::)?(\w+)$/
+ abcd
+ 0: abcd
+ xy:z:::abcd
+ 0: xy:z:::abcd
+ *** Failers
+ 0: Failers
+ abcd:
+No match
+ abcd:
+No match
+
+/^[^bcd]*(c+)/
+ aexycd
+ 0: aexyc
+
+/(>a+)ab/
+
+/(?>a+)b/
+ aaab
+ 0: aaab
+
+/([[:]+)/
+ a:[b]:
+ 0: :[
+ 1: :
+
+/([[=]+)/
+ a=[b]=
+ 0: =[
+ 1: =
+
+/([[.]+)/
+ a.[b].
+ 0: .[
+ 1: .
+
+/((?>a+)b)/
+ aaab
+ 0: aaab
+
+/(?>(a+))b/
+ aaab
+ 0: aaab
+
+/((?>[^()]+)|\([^()]*\))+/
+ ((abc(ade)ufh()()x
+ 0: abc(ade)ufh()()x
+ 1: abc(ade)ufh()()
+ 2: abc(ade)ufh()
+ 3: abc(ade)ufh
+ 4: abc(ade)
+ 5: abc
+
+/a\Z/
+ *** Failers
+No match
+ aaab
+No match
+ a\nb\n
No match
-/^[^x]*b/8i
- xb
+/b\Z/
+ a\nb\n
+ 0: b
+
+/b\z/
+
+/b\Z/
+ a\nb
+ 0: b
+
+/b\z/
+ a\nb
+ 0: b
+ *** Failers
+No match
+
+/(?>.*)(?<=(abcd|wxyz))/
+ alphabetabcd
+ 0: alphabetabcd
+ endingwxyz
+ 0: endingwxyz
+ *** Failers
+No match
+ a rather long string that doesn't end with one of them
No match
-/^[^x]*b/8
- xb
+/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
+ word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ word cat dog elephant mussel cow horse canary baboon snake shark
No match
-/^\d*b/8
- xb
+/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
+ word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
No match
-/(|a)/g8
- catac
+/(?<=\d{3}(?!999))foo/
+ 999foo
+ 0: foo
+ 123999foo
+ 0: foo
+ *** Failers
+No match
+ 123abcfoo
+No match
+
+/(?<=(?!...999)\d{3})foo/
+ 999foo
+ 0: foo
+ 123999foo
+ 0: foo
+ *** Failers
+No match
+ 123abcfoo
+No match
+
+/(?<=\d{3}(?!999)...)foo/
+ 123abcfoo
+ 0: foo
+ 123456foo
+ 0: foo
+ *** Failers
+No match
+ 123999foo
+No match
+
+/(?<=\d{3}...)(?<!999)foo/
+ 123abcfoo
+ 0: foo
+ 123456foo
+ 0: foo
+ *** Failers
+No match
+ 123999foo
+No match
+
+/((Z)+|A)*/
+ ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2:
+
+/(Z()|A)*/
+ ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2:
+
+/(Z(())|A)*/
+ ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2:
+
+/((?>Z)+|A)*/
+ ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2:
+
+/((?>)+|A)*/
+ ZABCDEFG
0:
+
+/a*/g
+ abbab
0: a
1:
0:
+ 0:
0: a
1:
0:
0:
- a\x{256}a
+
+/^[a-\d]/
+ abcde
0: a
- 1:
- 0:
+ -things
+ 0: -
+ 0digit
+ 0: 0
+ *** Failers
+No match
+ bcdef
+No match
+
+/^[\d-a]/
+ abcde
0: a
- 1:
+ -things
+ 0: -
+ 0digit
+ 0: 0
+ *** Failers
+No match
+ bcdef
+No match
+
+/[[:space:]]+/
+ > \x09\x0a\x0c\x0d\x0b<
+ 0: \x09\x0a\x0c\x0d\x0b
+ 1: \x09\x0a\x0c\x0d
+ 2: \x09\x0a\x0c
+ 3: \x09\x0a
+ 4: \x09
+ 5:
+
+/[[:blank:]]+/
+ > \x09\x0a\x0c\x0d\x0b<
+ 0: \x09
+ 1:
+
+/[\s]+/
+ > \x09\x0a\x0c\x0d\x0b<
+ 0: \x09\x0a\x0c\x0d
+ 1: \x09\x0a\x0c
+ 2: \x09\x0a
+ 3: \x09
+ 4:
+
+/\s+/
+ > \x09\x0a\x0c\x0d\x0b<
+ 0: \x09\x0a\x0c\x0d
+ 1: \x09\x0a\x0c
+ 2: \x09\x0a
+ 3: \x09
+ 4:
+
+/a b/x
+ ab
+No match
+
+/(?!\A)x/m
+ a\nxb\n
+ 0: x
+
+/(?!^)x/m
+ a\nxb\n
+No match
+
+/abc\Qabc\Eabc/
+ abcabcabc
+ 0: abcabcabc
+
+/abc\Q(*+|\Eabc/
+ abc(*+|abc
+ 0: abc(*+|abc
+
+/ abc\Q abc\Eabc/x
+ abc abcabc
+ 0: abc abcabc
+ *** Failers
+No match
+ abcabcabc
+No match
+
+/abc#comment
+ \Q#not comment
+ literal\E/x
+ abc#not comment\n literal
+ 0: abc#not comment\x0a literal
+
+/abc#comment
+ \Q#not comment
+ literal/x
+ abc#not comment\n literal
+ 0: abc#not comment\x0a literal
+
+/abc#comment
+ \Q#not comment
+ literal\E #more comment
+ /x
+ abc#not comment\n literal
+ 0: abc#not comment\x0a literal
+
+/abc#comment
+ \Q#not comment
+ literal\E #more comment/x
+ abc#not comment\n literal
+ 0: abc#not comment\x0a literal
+
+/\Qabc\$xyz\E/
+ abc\\\$xyz
+ 0: abc\$xyz
+
+/\Qabc\E\$\Qxyz\E/
+ abc\$xyz
+ 0: abc$xyz
+
+/\Gabc/
+ abc
+ 0: abc
+ *** Failers
+No match
+ xyzabc
+No match
+
+/\Gabc./g
+ abc1abc2xyzabc3
+ 0: abc1
+ 0: abc2
+
+/abc./g
+ abc1abc2xyzabc3
+ 0: abc1
+ 0: abc2
+ 0: abc3
+
+/a(?x: b c )d/
+ XabcdY
+ 0: abcd
+ *** Failers
+No match
+ Xa b c d Y
+No match
+
+/((?x)x y z | a b c)/
+ XabcY
+ 0: abc
+ AxyzB
+ 0: xyz
+
+/(?i)AB(?-i)C/
+ XabCY
+ 0: abC
+ *** Failers
+No match
+ XabcY
+No match
+
+/((?i)AB(?-i)C|D)E/
+ abCE
+ 0: abCE
+ DE
+ 0: DE
+ *** Failers
+No match
+ abcE
+No match
+ abCe
+No match
+ dE
+No match
+ De
+No match
+
+/[z\Qa-d]\E]/
+ z
+ 0: z
+ a
+ 0: a
+ -
+ 0: -
+ d
+ 0: d
+ ]
+ 0: ]
+ *** Failers
+ 0: a
+ b
+No match
+
+/[\z\C]/
+ z
+ 0: z
+ C
+ 0: C
+
+/\M/
+ M
+ 0: M
+
+/(a+)*b/
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+
+/(?i)reg(?:ul(?:[a�]|ae)r|ex)/
+ REGular
+ 0: REGular
+ regulaer
+ 0: regulaer
+ Regex
+ 0: Regex
+ regul�r
+ 0: regul\xe4r
+
+/����[�-��-�]+/
+ �����
+ 0: \xc5\xe6\xe5\xe4\xe0
+ �����
+ 0: \xc5\xe6\xe5\xe4\xff
+ �����
+ 0: \xc5\xe6\xe5\xe4\xc0
+ �����
+ 0: \xc5\xe6\xe5\xe4\xdf
+
+/(?<=Z)X./
+ \x84XAZXB
+ 0: XB
+
+/^(?(2)a|(1)(2))+$/
+ 123a
+Error -17 (backreference condition or recursion test not supported for DFA matching)
+
+/(?<=a|bbbb)c/
+ ac
+ 0: c
+ bbbbc
+ 0: c
+
+/abc/SS>testsavedregex
+Compiled pattern written to testsavedregex
+<testsavedregex
+Compiled pattern loaded from testsavedregex
+No study data
+ abc
+ 0: abc
+ *** Failers
+No match
+ bca
+No match
+
+/abc/FSS>testsavedregex
+Compiled pattern written to testsavedregex
+<testsavedregex
+Compiled pattern (byte-inverted) loaded from testsavedregex
+No study data
+ abc
+ 0: abc
+ *** Failers
+No match
+ bca
+No match
+
+/(a|b)/S>testsavedregex
+Compiled pattern written to testsavedregex
+Study data written to testsavedregex
+<testsavedregex
+Compiled pattern loaded from testsavedregex
+Study data loaded from testsavedregex
+ abc
+ 0: a
+ *** Failers
+ 0: a
+ def
+No match
+
+/(a|b)/SF>testsavedregex
+Compiled pattern written to testsavedregex
+Study data written to testsavedregex
+<testsavedregex
+Compiled pattern (byte-inverted) loaded from testsavedregex
+Study data loaded from testsavedregex
+ abc
+ 0: a
+ *** Failers
+ 0: a
+ def
+No match
+
+/line\nbreak/
+ this is a line\nbreak
+ 0: line\x0abreak
+ line one\nthis is a line\nbreak in the second line
+ 0: line\x0abreak
+
+/line\nbreak/f
+ this is a line\nbreak
+ 0: line\x0abreak
+ ** Failers
+No match
+ line one\nthis is a line\nbreak in the second line
+No match
+
+/line\nbreak/mf
+ this is a line\nbreak
+ 0: line\x0abreak
+ ** Failers
+No match
+ line one\nthis is a line\nbreak in the second line
+No match
+
+/1234/
+ 123\P
+Partial match: 123
+ a4\P\R
+No match
+
+/1234/
+ 123\P
+Partial match: 123
+ 4\P\R
+ 0: 4
+
+/^/mg
+ a\nb\nc\n
+ 0:
+ 0:
0:
+ \
+ 0:
+
+/(?<=C\n)^/mg
+ A\nC\nC\n
+ 0:
+
+/(?s)A?B/
+ AB
+ 0: AB
+ aB
+ 0: B
+
+/(?s)A*B/
+ AB
+ 0: AB
+ aB
+ 0: B
+
+/(?m)A?B/
+ AB
+ 0: AB
+ aB
+ 0: B
+
+/(?m)A*B/
+ AB
+ 0: AB
+ aB
+ 0: B
+
+/Content-Type\x3A[^\r\n]{6,}/
+ Content-Type:xxxxxyyy
+ 0: Content-Type:xxxxxyyy
+ 1: Content-Type:xxxxxyy
+ 2: Content-Type:xxxxxy
+
+/Content-Type\x3A[^\r\n]{6,}z/
+ Content-Type:xxxxxyyyz
+ 0: Content-Type:xxxxxyyyz
+
+/Content-Type\x3A[^a]{6,}/
+ Content-Type:xxxyyy
+ 0: Content-Type:xxxyyy
+
+/Content-Type\x3A[^a]{6,}z/
+ Content-Type:xxxyyyz
+ 0: Content-Type:xxxyyyz
+
+/^abc/m
+ xyz\nabc
+ 0: abc
+ xyz\nabc\<lf>
+ 0: abc
+ xyz\r\nabc\<lf>
+ 0: abc
+ xyz\rabc\<cr>
+ 0: abc
+ xyz\r\nabc\<crlf>
+ 0: abc
+ ** Failers
+No match
+ xyz\nabc\<cr>
+No match
+ xyz\r\nabc\<cr>
+No match
+ xyz\nabc\<crlf>
+No match
+ xyz\rabc\<crlf>
+No match
+ xyz\rabc\<lf>
+No match
+
+/abc$/m<lf>
+ xyzabc
+ 0: abc
+ xyzabc\n
+ 0: abc
+ xyzabc\npqr
+ 0: abc
+ xyzabc\r\<cr>
+ 0: abc
+ xyzabc\rpqr\<cr>
+ 0: abc
+ xyzabc\r\n\<crlf>
+ 0: abc
+ xyzabc\r\npqr\<crlf>
+ 0: abc
+ ** Failers
+No match
+ xyzabc\r
+No match
+ xyzabc\rpqr
+No match
+ xyzabc\r\n
+No match
+ xyzabc\r\npqr
+No match
+
+/^abc/m<cr>
+ xyz\rabcdef
+ 0: abc
+ xyz\nabcdef\<lf>
+ 0: abc
+ ** Failers
+No match
+ xyz\nabcdef
+No match
+
+/^abc/m<lf>
+ xyz\nabcdef
+ 0: abc
+ xyz\rabcdef\<cr>
+ 0: abc
+ ** Failers
+No match
+ xyz\rabcdef
+No match
+
+/^abc/m<crlf>
+ xyz\r\nabcdef
+ 0: abc
+ xyz\rabcdef\<cr>
+ 0: abc
+ ** Failers
+No match
+ xyz\rabcdef
+No match
+
+/.*/<lf>
+ abc\ndef
+ 0: abc
+ 1: ab
+ 2: a
+ 3:
+ abc\rdef
+ 0: abc\x0ddef
+ 1: abc\x0dde
+ 2: abc\x0dd
+ 3: abc\x0d
+ 4: abc
+ 5: ab
+ 6: a
+ 7:
+ abc\r\ndef
+ 0: abc\x0d
+ 1: abc
+ 2: ab
+ 3: a
+ 4:
+ \<cr>abc\ndef
+ 0: abc\x0adef
+ 1: abc\x0ade
+ 2: abc\x0ad
+ 3: abc\x0a
+ 4: abc
+ 5: ab
+ 6: a
+ 7:
+ \<cr>abc\rdef
+ 0: abc
+ 1: ab
+ 2: a
+ 3:
+ \<cr>abc\r\ndef
+ 0: abc
+ 1: ab
+ 2: a
+ 3:
+ \<crlf>abc\ndef
+ 0: abc\x0adef
+ 1: abc\x0ade
+ 2: abc\x0ad
+ 3: abc\x0a
+ 4: abc
+ 5: ab
+ 6: a
+ 7:
+ \<crlf>abc\rdef
+ 0: abc\x0ddef
+ 1: abc\x0dde
+ 2: abc\x0dd
+ 3: abc\x0d
+ 4: abc
+ 5: ab
+ 6: a
+ 7:
+ \<crlf>abc\r\ndef
+ 0: abc
+ 1: ab
+ 2: a
+ 3:
+
+/\w+(.)(.)?def/s
+ abc\ndef
+ 0: abc\x0adef
+ abc\rdef
+ 0: abc\x0ddef
+ abc\r\ndef
+ 0: abc\x0d\x0adef
-/^\x{85}$/8i
- \x{85}
- 0: \x{85}
+/^\w+=.*(\\\n.*)*/
+ abc=xyz\\\npqr
+ 0: abc=xyz\\x0apqr
+ 1: abc=xyz\\x0apq
+ 2: abc=xyz\\x0ap
+ 3: abc=xyz\\x0a
+ 4: abc=xyz\
+ 5: abc=xyz
+ 6: abc=xy
+ 7: abc=x
+ 8: abc=
+
+/^(a()*)*/
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+ 4:
+
+/^(?:a(?:(?:))*)*/
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+ 4:
+
+/^(a()+)+/
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+
+/^(?:a(?:(?:))+)+/
+ aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+
+/(a|)*\d/
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+
+/(?>a|)*\d/
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
-/^abc./mgx8<any>
- abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x{0085}abc7 \x{2028}abc8 \x{2029}abc9 JUNK
+/(?:a|)*\d/
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+
+/^a.b/<lf>
+ a\rb
+ 0: a\x0db
+ a\nb\<cr>
+ 0: a\x0ab
+ ** Failers
+No match
+ a\nb
+No match
+ a\nb\<any>
+No match
+ a\rb\<cr>
+No match
+ a\rb\<any>
+No match
+
+/^abc./mgx<any>
+ abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
0: abc1
0: abc2
0: abc3
@@ -1037,100 +6815,92 @@ No match
0: abc5
0: abc6
0: abc7
- 0: abc8
- 0: abc9
-/abc.$/mgx8<any>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x{0085} abc7\x{2028} abc8\x{2029} abc9
+/abc.$/mgx<any>
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
0: abc1
0: abc2
0: abc3
0: abc4
0: abc5
0: abc6
- 0: abc7
- 0: abc8
0: abc9
-/^a\Rb/8<bsr_unicode>
+/^a\Rb/<bsr_unicode>
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\rb
- 0: a\x{0d}b
+ 0: a\x0db
a\r\nb
- 0: a\x{0d}\x{0a}b
+ 0: a\x0d\x0ab
a\x0bb
- 0: a\x{0b}b
+ 0: a\x0bb
a\x0cb
- 0: a\x{0c}b
- a\x{85}b
- 0: a\x{85}b
- a\x{2028}b
- 0: a\x{2028}b
- a\x{2029}b
- 0: a\x{2029}b
+ 0: a\x0cb
+ a\x85b
+ 0: a\x85b
** Failers
No match
a\n\rb
No match
-/^a\R*b/8<bsr_unicode>
+/^a\R*b/<bsr_unicode>
ab
0: ab
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\rb
- 0: a\x{0d}b
+ 0: a\x0db
a\r\nb
- 0: a\x{0d}\x{0a}b
+ 0: a\x0d\x0ab
a\x0bb
- 0: a\x{0b}b
- a\x0c\x{2028}\x{2029}b
- 0: a\x{0c}\x{2028}\x{2029}b
- a\x{85}b
- 0: a\x{85}b
+ 0: a\x0bb
+ a\x0cb
+ 0: a\x0cb
+ a\x85b
+ 0: a\x85b
a\n\rb
- 0: a\x{0a}\x{0d}b
- a\n\r\x{85}\x0cb
- 0: a\x{0a}\x{0d}\x{85}\x{0c}b
+ 0: a\x0a\x0db
+ a\n\r\x85\x0cb
+ 0: a\x0a\x0d\x85\x0cb
-/^a\R+b/8<bsr_unicode>
+/^a\R+b/<bsr_unicode>
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\rb
- 0: a\x{0d}b
+ 0: a\x0db
a\r\nb
- 0: a\x{0d}\x{0a}b
+ 0: a\x0d\x0ab
a\x0bb
- 0: a\x{0b}b
- a\x0c\x{2028}\x{2029}b
- 0: a\x{0c}\x{2028}\x{2029}b
- a\x{85}b
- 0: a\x{85}b
+ 0: a\x0bb
+ a\x0cb
+ 0: a\x0cb
+ a\x85b
+ 0: a\x85b
a\n\rb
- 0: a\x{0a}\x{0d}b
- a\n\r\x{85}\x0cb
- 0: a\x{0a}\x{0d}\x{85}\x{0c}b
+ 0: a\x0a\x0db
+ a\n\r\x85\x0cb
+ 0: a\x0a\x0d\x85\x0cb
** Failers
No match
ab
No match
-
-/^a\R{1,3}b/8<bsr_unicode>
+
+/^a\R{1,3}b/<bsr_unicode>
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\n\rb
- 0: a\x{0a}\x{0d}b
- a\n\r\x{85}b
- 0: a\x{0a}\x{0d}\x{85}b
+ 0: a\x0a\x0db
+ a\n\r\x85b
+ 0: a\x0a\x0d\x85b
a\r\n\r\nb
- 0: a\x{0d}\x{0a}\x{0d}\x{0a}b
+ 0: a\x0d\x0a\x0d\x0ab
a\r\n\r\n\r\nb
- 0: a\x{0d}\x{0a}\x{0d}\x{0a}\x{0d}\x{0a}b
+ 0: a\x0d\x0a\x0d\x0a\x0d\x0ab
a\n\r\n\rb
- 0: a\x{0a}\x{0d}\x{0a}\x{0d}b
+ 0: a\x0a\x0d\x0a\x0db
a\n\n\r\nb
- 0: a\x{0a}\x{0a}\x{0d}\x{0a}b
+ 0: a\x0a\x0a\x0d\x0ab
** Failers
No match
a\n\n\n\rb
@@ -1138,150 +6908,1116 @@ No match
a\r
No match
-/\h+\V?\v{3,4}/8
- \x09\x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
- 0: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}\x{0d}
- 1: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}
+/^a[\R]b/<bsr_unicode>
+ aRb
+ 0: aRb
+ ** Failers
+No match
+ a\nb
+No match
-/\V?\v{3,4}/8
- \x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
- 0: X\x{0a}\x{0b}\x{0c}\x{0d}
- 1: X\x{0a}\x{0b}\x{0c}
+/.+foo/
+ afoo
+ 0: afoo
+ ** Failers
+No match
+ \r\nfoo
+No match
+ \nfoo
+No match
-/\h+\V?\v{3,4}/8
- >\x09\x20\x{a0}X\x0a\x0a\x0a<
- 0: \x{09} \x{a0}X\x{0a}\x{0a}\x{0a}
+/.+foo/<crlf>
+ afoo
+ 0: afoo
+ \nfoo
+ 0: \x0afoo
+ ** Failers
+No match
+ \r\nfoo
+No match
+
+/.+foo/<any>
+ afoo
+ 0: afoo
+ ** Failers
+No match
+ \nfoo
+No match
+ \r\nfoo
+No match
-/\V?\v{3,4}/8
- >\x09\x20\x{a0}X\x0a\x0a\x0a<
- 0: X\x{0a}\x{0a}\x{0a}
+/.+foo/s
+ afoo
+ 0: afoo
+ \r\nfoo
+ 0: \x0d\x0afoo
+ \nfoo
+ 0: \x0afoo
-/\H\h\V\v/8
+/^$/mg<any>
+ abc\r\rxyz
+ 0:
+ abc\n\rxyz
+ 0:
+ ** Failers
+No match
+ abc\r\nxyz
+No match
+
+/^X/m
+ XABC
+ 0: X
+ ** Failers
+No match
+ XABC\B
+No match
+
+/(?m)^$/<any>g+
+ abc\r\n\r\n
+ 0:
+ 0+ \x0d\x0a
+
+/(?m)^$|^\r\n/<any>g+
+ abc\r\n\r\n
+ 0: \x0d\x0a
+ 0+
+ 1:
+
+/(?m)$/<any>g+
+ abc\r\n\r\n
+ 0:
+ 0+ \x0d\x0a\x0d\x0a
+ 0:
+ 0+ \x0d\x0a
+ 0:
+ 0+
+
+/(?|(abc)|(xyz))/
+ >abc<
+ 0: abc
+ >xyz<
+ 0: xyz
+
+/(x)(?|(abc)|(xyz))(x)/
+ xabcx
+ 0: xabcx
+ xxyzx
+ 0: xxyzx
+
+/(x)(?|(abc)(pqr)|(xyz))(x)/
+ xabcpqrx
+ 0: xabcpqrx
+ xxyzx
+ 0: xxyzx
+
+/(?|(abc)|(xyz))(?1)/
+ abcabc
+ 0: abcabc
+ xyzabc
+ 0: xyzabc
+ ** Failers
+No match
+ xyzxyz
+No match
+
+/\H\h\V\v/
X X\x0a
- 0: X X\x{0a}
+ 0: X X\x0a
X\x09X\x0b
- 0: X\x{09}X\x{0b}
+ 0: X\x09X\x0b
** Failers
No match
- \x{a0} X\x0a
+ \xa0 X\x0a
No match
-/\H*\h+\V?\v{3,4}/8
- \x09\x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
- 0: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}\x{0d}
- 1: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}
- \x09\x20\x{a0}\x0a\x0b\x0c\x0d\x0a
- 0: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}\x{0d}
- 1: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}
- \x09\x20\x{a0}\x0a\x0b\x0c
- 0: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}
+/\H*\h+\V?\v{3,4}/
+ \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
+ 0: \x09 \xa0X\x0a\x0b\x0c\x0d
+ 1: \x09 \xa0X\x0a\x0b\x0c
+ \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
+ 0: \x09 \xa0\x0a\x0b\x0c\x0d
+ 1: \x09 \xa0\x0a\x0b\x0c
+ \x09\x20\xa0\x0a\x0b\x0c
+ 0: \x09 \xa0\x0a\x0b\x0c
** Failers
No match
- \x09\x20\x{a0}\x0a\x0b
+ \x09\x20\xa0\x0a\x0b
No match
-/\H\h\V\v/8
- \x{3001}\x{3000}\x{2030}\x{2028}
- 0: \x{3001}\x{3000}\x{2030}\x{2028}
- X\x{180e}X\x{85}
- 0: X\x{180e}X\x{85}
+/\H{3,4}/
+ XY ABCDE
+ 0: ABCD
+ 1: ABC
+ XY PQR ST
+ 0: PQR
+
+/.\h{3,4}./
+ XY AB PQRS
+ 0: B P
+ 1: B
+
+/\h*X\h?\H+Y\H?Z/
+ >XNNNYZ
+ 0: XNNNYZ
+ > X NYQZ
+ 0: X NYQZ
** Failers
No match
- \x{2009} X\x0a
+ >XYZ
No match
-
-/\H*\h+\V?\v{3,4}/8
- \x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x0c\x0d\x0a
- 0: \x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x{0c}\x{0d}
- 1: \x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x{0c}
- \x09\x{205f}\x{a0}\x0a\x{2029}\x0c\x{2028}\x0a
- 0: \x{09}\x{205f}\x{a0}\x{0a}\x{2029}\x{0c}\x{2028}
- 1: \x{09}\x{205f}\x{a0}\x{0a}\x{2029}\x{0c}
- \x09\x20\x{202f}\x0a\x0b\x0c
- 0: \x{09} \x{202f}\x{0a}\x{0b}\x{0c}
- ** Failers
+ > X NY Z
No match
- \x09\x{200a}\x{a0}\x{2028}\x0b
+
+/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
+ >XY\x0aZ\x0aA\x0bNN\x0c
+ 0: XY\x0aZ\x0aA\x0bNN\x0c
+ >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
+ 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
+
+/.+A/<crlf>
+ \r\nA
No match
-
-/a\Rb/I8<bsr_anycrlf>
+
+/\nA/<crlf>
+ \r\nA
+ 0: \x0aA
+
+/[\r\n]A/<crlf>
+ \r\nA
+ 0: \x0aA
+
+/(\r|\n)A/<crlf>
+ \r\nA
+ 0: \x0aA
+
+/a\Rb/I<bsr_anycrlf>
Capturing subpattern count = 0
-Options: bsr_anycrlf utf8
+Options: bsr_anycrlf
First char = 'a'
Need char = 'b'
a\rb
- 0: a\x{0d}b
+ 0: a\x0db
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\r\nb
- 0: a\x{0d}\x{0a}b
+ 0: a\x0d\x0ab
** Failers
No match
- a\x{85}b
+ a\x85b
No match
a\x0bb
No match
-/a\Rb/I8<bsr_unicode>
+/a\Rb/I<bsr_unicode>
Capturing subpattern count = 0
-Options: bsr_unicode utf8
+Options: bsr_unicode
First char = 'a'
Need char = 'b'
a\rb
- 0: a\x{0d}b
+ 0: a\x0db
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\r\nb
- 0: a\x{0d}\x{0a}b
- a\x{85}b
- 0: a\x{85}b
+ 0: a\x0d\x0ab
+ a\x85b
+ 0: a\x85b
a\x0bb
- 0: a\x{0b}b
+ 0: a\x0bb
** Failers
No match
- a\x{85}b\<bsr_anycrlf>
+ a\x85b\<bsr_anycrlf>
No match
a\x0bb\<bsr_anycrlf>
No match
-/a\R?b/I8<bsr_anycrlf>
+/a\R?b/I<bsr_anycrlf>
Capturing subpattern count = 0
-Options: bsr_anycrlf utf8
+Options: bsr_anycrlf
First char = 'a'
Need char = 'b'
a\rb
- 0: a\x{0d}b
+ 0: a\x0db
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\r\nb
- 0: a\x{0d}\x{0a}b
+ 0: a\x0d\x0ab
** Failers
No match
- a\x{85}b
+ a\x85b
No match
a\x0bb
No match
-/a\R?b/I8<bsr_unicode>
+/a\R?b/I<bsr_unicode>
Capturing subpattern count = 0
-Options: bsr_unicode utf8
+Options: bsr_unicode
First char = 'a'
Need char = 'b'
a\rb
- 0: a\x{0d}b
+ 0: a\x0db
a\nb
- 0: a\x{0a}b
+ 0: a\x0ab
a\r\nb
- 0: a\x{0d}\x{0a}b
- a\x{85}b
- 0: a\x{85}b
+ 0: a\x0d\x0ab
+ a\x85b
+ 0: a\x85b
a\x0bb
- 0: a\x{0b}b
+ 0: a\x0bb
** Failers
No match
- a\x{85}b\<bsr_anycrlf>
+ a\x85b\<bsr_anycrlf>
No match
a\x0bb\<bsr_anycrlf>
No match
+
+/a\R{2,4}b/I<bsr_anycrlf>
+Capturing subpattern count = 0
+Options: bsr_anycrlf
+First char = 'a'
+Need char = 'b'
+ a\r\n\nb
+ 0: a\x0d\x0a\x0ab
+ a\n\r\rb
+ 0: a\x0a\x0d\x0db
+ a\r\n\r\n\r\n\r\nb
+ 0: a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0ab
+ ** Failers
+No match
+ a\x85\85b
+No match
+ a\x0b\0bb
+No match
+
+/a\R{2,4}b/I<bsr_unicode>
+Capturing subpattern count = 0
+Options: bsr_unicode
+First char = 'a'
+Need char = 'b'
+ a\r\rb
+ 0: a\x0d\x0db
+ a\n\n\nb
+ 0: a\x0a\x0a\x0ab
+ a\r\n\n\r\rb
+ 0: a\x0d\x0a\x0a\x0d\x0db
+ a\x85\85b
+No match
+ a\x0b\0bb
+No match
+ ** Failers
+No match
+ a\r\r\r\r\rb
+No match
+ a\x85\85b\<bsr_anycrlf>
+No match
+ a\x0b\0bb\<bsr_anycrlf>
+No match
+
+/a(?!)|\wbc/
+ abc
+ 0: abc
+
+/a[]b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]*+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]b/<JS>
+ aXb
+ 0: aXb
+ a\nb
+ 0: a\x0ab
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]+b/<JS>
+ aXb
+ 0: aXb
+ a\nX\nXb
+ 0: a\x0aX\x0aXb
+ ** Failers
+No match
+ ab
+No match
+
+/X$/E
+ X
+ 0: X
+ ** Failers
+No match
+ X\n
+No match
+
+/X$/
+ X
+ 0: X
+ X\n
+ 0: X
+
+/xyz/C
+ xyz
+--->xyz
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +3 ^ ^
+ 0: xyz
+ abcxyz
+--->abcxyz
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +3 ^ ^
+ 0: xyz
+ abcxyz\Y
+--->abcxyz
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +3 ^ ^
+ 0: xyz
+ ** Failers
+No match
+ abc
+No match
+ abc\Y
+--->abc
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+No match
+ abcxypqr
+No match
+ abcxypqr\Y
+--->abcxypqr
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +1 ^^ y
+ +2 ^ ^ z
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+ +0 ^ x
+No match
+
+/(*NO_START_OPT)xyz/C
+ abcxyz
+--->abcxyz
++15 ^ x
++15 ^ x
++15 ^ x
++15 ^ x
++16 ^^ y
++17 ^ ^ z
++18 ^ ^
+ 0: xyz
+
+/(?C)ab/
+ ab
+--->ab
+ 0 ^ a
+ 0: ab
+ \C-ab
+ 0: ab
+
+/ab/C
+ ab
+--->ab
+ +0 ^ a
+ +1 ^^ b
+ +2 ^ ^
+ 0: ab
+ \C-ab
+ 0: ab
+
+/^"((?(?=[a])[^"])|b)*"$/C
+ "ab"
+--->"ab"
+ +0 ^ ^
+ +1 ^ "
+ +2 ^^ ((?(?=[a])[^"])|b)*
++21 ^^ "
+ +3 ^^ (?(?=[a])[^"])
++18 ^^ b
+ +5 ^^ (?=[a])
+ +8 ^ [a]
++11 ^^ )
++12 ^^ [^"]
++16 ^ ^ )
++17 ^ ^ |
++21 ^ ^ "
+ +3 ^ ^ (?(?=[a])[^"])
++18 ^ ^ b
+ +5 ^ ^ (?=[a])
+ +8 ^ [a]
++19 ^ ^ )
++21 ^ ^ "
+ +3 ^ ^ (?(?=[a])[^"])
++18 ^ ^ b
+ +5 ^ ^ (?=[a])
+ +8 ^ [a]
++17 ^ ^ |
++22 ^ ^ $
++23 ^ ^
+ 0: "ab"
+ \C-"ab"
+ 0: "ab"
+
+/\d+X|9+Y/
+ ++++123999\P
+Partial match: 123999
+ ++++123999Y\P
+ 0: 999Y
+
+/Z(*F)/
+ Z\P
+No match
+ ZA\P
+No match
+
+/Z(?!)/
+ Z\P
+No match
+ ZA\P
+No match
+
+/dog(sbody)?/
+ dogs\P
+ 0: dog
+ dogs\P\P
+Partial match: dogs
+
+/dog(sbody)??/
+ dogs\P
+ 0: dog
+ dogs\P\P
+Partial match: dogs
+
+/dog|dogsbody/
+ dogs\P
+ 0: dog
+ dogs\P\P
+Partial match: dogs
-/ End of testinput 8 /
+/dogsbody|dog/
+ dogs\P
+ 0: dog
+ dogs\P\P
+Partial match: dogs
+
+/Z(*F)Q|ZXY/
+ Z\P
+Partial match: Z
+ ZA\P
+No match
+ X\P
+No match
+
+/\bthe cat\b/
+ the cat\P
+ 0: the cat
+ the cat\P\P
+Partial match: the cat
+
+/dog(sbody)?/
+ dogs\D\P
+ 0: dog
+ body\D\R
+ 0: body
+
+/dog(sbody)?/
+ dogs\D\P\P
+Partial match: dogs
+ body\D\R
+ 0: body
+
+/abc/
+ abc\P
+ 0: abc
+ abc\P\P
+ 0: abc
+
+/abc\K123/
+ xyzabc123pqr
+Error -16 (item unsupported for DFA matching)
+
+/(?<=abc)123/
+ xyzabc123pqr
+ 0: 123
+ xyzabc12\P
+Partial match at offset 6: abc12
+ xyzabc12\P\P
+Partial match at offset 6: abc12
+
+/\babc\b/
+ +++abc+++
+ 0: abc
+ +++ab\P
+Partial match at offset 3: +ab
+ +++ab\P\P
+Partial match at offset 3: +ab
+
+/(?=C)/g+
+ ABCDECBA
+ 0:
+ 0+ CDECBA
+ 0:
+ 0+ CBA
+
+/(abc|def|xyz)/I
+Capturing subpattern count = 1
+No options
+No first char
+No need char
+ terhjk;abcdaadsfe
+ 0: abc
+ the quick xyz brown fox
+ 0: xyz
+ \Yterhjk;abcdaadsfe
+ 0: abc
+ \Ythe quick xyz brown fox
+ 0: xyz
+ ** Failers
+No match
+ thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
+No match
+ \Ythejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
+No match
+
+/(abc|def|xyz)/SI
+Capturing subpattern count = 1
+No options
+No first char
+No need char
+Subject length lower bound = 3
+Starting byte set: a d x
+ terhjk;abcdaadsfe
+ 0: abc
+ the quick xyz brown fox
+ 0: xyz
+ \Yterhjk;abcdaadsfe
+ 0: abc
+ \Ythe quick xyz brown fox
+ 0: xyz
+ ** Failers
+No match
+ thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
+No match
+ \Ythejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
+No match
+
+/abcd*/+
+ xxxxabcd\P
+ 0: abcd
+ 0+
+ 1: abc
+ xxxxabcd\P\P
+Partial match: abcd
+ dddxxx\R
+ 0: ddd
+ 0+ xxx
+ 1: dd
+ 2: d
+ 3:
+ xxxxabcd\P\P
+Partial match: abcd
+ xxx\R
+ 0:
+ 0+ xxx
+
+/abcd*/i
+ xxxxabcd\P
+ 0: abcd
+ 1: abc
+ xxxxabcd\P\P
+Partial match: abcd
+ XXXXABCD\P
+ 0: ABCD
+ 1: ABC
+ XXXXABCD\P\P
+Partial match: ABCD
+
+/abc\d*/
+ xxxxabc1\P
+ 0: abc1
+ 1: abc
+ xxxxabc1\P\P
+Partial match: abc1
+
+/abc[de]*/
+ xxxxabcde\P
+ 0: abcde
+ 1: abcd
+ 2: abc
+ xxxxabcde\P\P
+Partial match: abcde
+
+/(?:(?1)|B)(A(*F)|C)/
+ ABCD
+ 0: BC
+ CCD
+ 0: CC
+ ** Failers
+No match
+ CAD
+No match
+
+/^(?:(?1)|B)(A(*F)|C)/
+ CCD
+ 0: CC
+ BCD
+ 0: BC
+ ** Failers
+No match
+ ABCD
+No match
+ CAD
+No match
+ BAD
+No match
+
+/^(?!a(*SKIP)b)/
+ ac
+Error -16 (item unsupported for DFA matching)
+
+/^(?=a(*SKIP)b|ac)/
+ ** Failers
+No match
+ ac
+Error -16 (item unsupported for DFA matching)
+
+/^(?=a(*THEN)b|ac)/
+ ac
+Error -16 (item unsupported for DFA matching)
+
+/^(?=a(*PRUNE)b)/
+ ab
+Error -16 (item unsupported for DFA matching)
+ ** Failers
+No match
+ ac
+Error -16 (item unsupported for DFA matching)
+
+/^(?(?!a(*SKIP)b))/
+ ac
+Error -16 (item unsupported for DFA matching)
+
+/(?<=abc)def/
+ abc\P\P
+Partial match at offset 3: abc
+
+/abc$/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc$/m
+ abc
+ 0: abc
+ abc\n
+ 0: abc
+ abc\P\P
+Partial match: abc
+ abc\n\P\P
+ 0: abc
+ abc\P
+ 0: abc
+ abc\n\P
+ 0: abc
+
+/abc\z/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc\Z/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc\b/
+ abc
+ 0: abc
+ abc\P
+ 0: abc
+ abc\P\P
+Partial match: abc
+
+/abc\B/
+ abc
+No match
+ abc\P
+Partial match: abc
+ abc\P\P
+Partial match: abc
+
+/.+/
+ abc\>0
+ 0: abc
+ 1: ab
+ 2: a
+ abc\>1
+ 0: bc
+ 1: b
+ abc\>2
+ 0: c
+ abc\>3
+No match
+ abc\>4
+Error -24 (bad offset value)
+ abc\>-4
+Error -24 (bad offset value)
+
+/^(?:a)++\w/
+ aaaab
+ 0: aaaab
+ ** Failers
+No match
+ aaaa
+No match
+ bbb
+No match
+
+/^(?:aa|(?:a)++\w)/
+ aaaab
+ 0: aaaab
+ 1: aa
+ aaaa
+ 0: aa
+ ** Failers
+No match
+ bbb
+No match
+
+/^(?:a)*+\w/
+ aaaab
+ 0: aaaab
+ bbb
+ 0: b
+ ** Failers
+No match
+ aaaa
+No match
+
+/^(a)++\w/
+ aaaab
+ 0: aaaab
+ ** Failers
+No match
+ aaaa
+No match
+ bbb
+No match
+
+/^(a|)++\w/
+ aaaab
+ 0: aaaab
+ ** Failers
+No match
+ aaaa
+No match
+ bbb
+No match
+
+/(?=abc){3}abc/+
+ abcabcabc
+ 0: abc
+ 0+ abcabc
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=abc)+abc/+
+ abcabcabc
+ 0: abc
+ 0+ abcabc
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=abc)++abc/+
+ abcabcabc
+ 0: abc
+ 0+ abcabc
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=abc){0}xyz/
+ xyz
+ 0: xyz
+
+/(?=abc){1}xyz/
+ ** Failers
+No match
+ xyz
+No match
+
+/(?=(a))?./
+ ab
+ 0: a
+ bc
+ 0: b
+
+/(?=(a))??./
+ ab
+ 0: a
+ bc
+ 0: b
+
+/^(?=(a)){0}b(?1)/
+ backgammon
+ 0: ba
+
+/^(?=(?1))?[az]([abc])d/
+ abd
+ 0: abd
+ zcdxx
+ 0: zcd
+
+/^(?!a){0}\w+/
+ aaaaa
+ 0: aaaaa
+ 1: aaaa
+ 2: aaa
+ 3: aa
+ 4: a
+
+/(?<=(abc))?xyz/
+ abcxyz
+ 0: xyz
+ pqrxyz
+ 0: xyz
+
+/((?2))((?1))/
+ abc
+Error -26 (nested recursion at the same subject position)
+
+/(?(R)a+|(?R)b)/
+ aaaabcde
+ 0: aaaab
+
+/(?(R)a+|((?R))b)/
+ aaaabcde
+ 0: aaaab
+
+/((?(R)a+|(?1)b))/
+ aaaabcde
+ 0: aaaab
+
+/((?(R2)a+|(?1)b))/
+ aaaabcde
+Error -17 (backreference condition or recursion test not supported for DFA matching)
+
+/(?(R)a*(?1)|((?R))b)/
+ aaaabcde
+Error -26 (nested recursion at the same subject position)
+
+/(a+)/
+ \O6aaaa
+Matched, but offsets vector is too small to show all matches
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ \O8aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+
+/ab\Cde/
+ abXde
+ 0: abXde
+
+/(?<=ab\Cde)X/
+ abZdeX
+ 0: X
+
+/^\R/
+ \r\P
+ 0: \x0d
+ \r\P\P
+Partial match: \x0d
+
+/^\R{2,3}x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+Partial match: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+Partial match: \x0d\x0d\x0d
+ \r\r\r\P\P
+Partial match: \x0d\x0d\x0d
+ \r\rx
+ 0: \x0d\x0dx
+ \r\r\rx
+ 0: \x0d\x0d\x0dx
+
+/^\R{2,3}?x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+Partial match: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+Partial match: \x0d\x0d\x0d
+ \r\r\r\P\P
+Partial match: \x0d\x0d\x0d
+ \r\rx
+ 0: \x0d\x0dx
+ \r\r\rx
+ 0: \x0d\x0d\x0dx
+
+/^\R?x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ x
+ 0: x
+ \rx
+ 0: \x0dx
+
+/^\R+x/
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\n\P
+Partial match: \x0d\x0a
+ \r\n\P\P
+Partial match: \x0d\x0a
+ \rx
+ 0: \x0dx
+
+/^a$/<CRLF>
+ a\r\P
+Partial match: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/^a$/m<CRLF>
+ a\r\P
+Partial match: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/^(a$|a\r)/<CRLF>
+ a\r\P
+ 0: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/^(a$|a\r)/m<CRLF>
+ a\r\P
+ 0: a\x0d
+ a\r\P\P
+Partial match: a\x0d
+
+/./<CRLF>
+ \r\P
+ 0: \x0d
+ \r\P\P
+Partial match: \x0d
+
+/.{2,3}/<CRLF>
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+ 0: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+ 0: \x0d\x0d\x0d
+ 1: \x0d\x0d
+ \r\r\r\P\P
+Partial match: \x0d\x0d\x0d
+
+/.{2,3}?/<CRLF>
+ \r\P
+Partial match: \x0d
+ \r\P\P
+Partial match: \x0d
+ \r\r\P
+ 0: \x0d\x0d
+ \r\r\P\P
+Partial match: \x0d\x0d
+ \r\r\r\P
+ 0: \x0d\x0d\x0d
+ 1: \x0d\x0d
+ \r\r\r\P\P
+Partial match: \x0d\x0d\x0d
+
+/-- Test simple validity check for restarts --/
+
+/abcdef/
+ abc\R
+Error -30 (invalid data in workspace for DFA restart)
+
+/<H((?(?!<H|F>)(.)|(?R))++)*F>/
+ text <H more text <H texting more hexA0-"\xA0" hex above 7F-"\xBC" F> text xxxxx <H text F> text F> text2 <H text sample F> more text.
+ 0: <H more text <H texting more hexA0-"\xa0" hex above 7F-"\xbc" F> text xxxxx <H text F> text F>
+
+/^(?>.{4})abc|^\w\w.xabcd/
+ xxxxabcd
+ 0: xxxxabcd
+ 1: xxxxabc
+ xx\xa0xabcd
+ 0: xx\xa0xabcd
+ 1: xx\xa0xabc
+
+/^(.{4}){2}+abc|^\w\w.x\w\w\w\wabcd/
+ xxxxxxxxabcd
+ 0: xxxxxxxxabcd
+ 1: xxxxxxxxabc
+ xx\xa0xxxxxabcd
+ 0: xx\xa0xxxxxabcd
+ 1: xx\xa0xxxxxabc
+
+/abcd/
+ abcd\O0
+Matched, but offsets vector is too small to show all matches
+
+/-- End of testinput8 --/
diff --git a/lib/stdlib/test/re_SUITE_data/testoutput9 b/lib/stdlib/test/re_SUITE_data/testoutput9
index acaeb398dd..0bb101ad61 100644
--- a/lib/stdlib/test/re_SUITE_data/testoutput9
+++ b/lib/stdlib/test/re_SUITE_data/testoutput9
@@ -1,1643 +1,1371 @@
-/\pL\P{Nd}/8
- AB
- 0: AB
- *** Failers
- 0: Fa
- A0
+/-- This set of tests checks UTF-8 support with the DFA matching functionality
+ of pcre_dfa_exec(). The -dfa flag must be used with pcretest when running
+ it. --/
+
+/\x{100}ab/8
+ \x{100}ab
+ 0: \x{100}ab
+
+/a\x{100}*b/8
+ ab
+ 0: ab
+ a\x{100}b
+ 0: a\x{100}b
+ a\x{100}\x{100}b
+ 0: a\x{100}\x{100}b
+
+/a\x{100}+b/8
+ a\x{100}b
+ 0: a\x{100}b
+ a\x{100}\x{100}b
+ 0: a\x{100}\x{100}b
+ *** Failers
No match
- 00
+ ab
No match
-
-/\X./8
- AB
- 0: AB
- A\x{300}BC
- 0: A\x{300}B
- A\x{300}\x{301}\x{302}BC
- 0: A\x{300}\x{301}\x{302}B
- *** Failers
- 0: **
- \x{300}
+
+/\bX/8
+ Xoanon
+ 0: X
+ +Xoanon
+ 0: X
+ \x{300}Xoanon
+ 0: X
+ *** Failers
No match
-
-/\X\X/8
- ABC
- 0: AB
- A\x{300}B\x{300}\x{301}C
- 0: A\x{300}B\x{300}\x{301}
- A\x{300}\x{301}\x{302}BC
- 0: A\x{300}\x{301}\x{302}B
+ YXoanon
+No match
+
+/\BX/8
+ YXoanon
+ 0: X
*** Failers
- 0: **
- \x{300}
No match
-
-/^\pL+/8
- abcd
- 0: abcd
- 1: abc
- 2: ab
- 3: a
- a
- 0: a
- *** Failers
+ Xoanon
No match
-
-/^\PL+/8
- 1234
- 0: 1234
- 1: 123
- 2: 12
- 3: 1
- =
- 0: =
- *** Failers
- 0: ***
- 1: ***
- 2: **
- 3: *
- abcd
+ +Xoanon
+No match
+ \x{300}Xoanon
No match
-/^\X+/8
- abcdA\x{300}\x{301}\x{302}
- 0: abcdA\x{300}\x{301}\x{302}
- 1: abcd
- 2: abc
- 3: ab
- 4: a
- A\x{300}\x{301}\x{302}
- 0: A\x{300}\x{301}\x{302}
- A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}
- 0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}
- 1: A\x{300}\x{301}\x{302}
- a
- 0: a
+/X\b/8
+ X+oanon
+ 0: X
+ ZX\x{300}oanon
+ 0: X
+ FAX
+ 0: X
*** Failers
- 0: *** Failers
- 1: *** Failer
- 2: *** Faile
- 3: *** Fail
- 4: *** Fai
- 5: *** Fa
- 6: *** F
- 7: ***
- 8: ***
- 9: **
-10: *
- \x{300}\x{301}\x{302}
No match
-
-/\X?abc/8
- abc
- 0: abc
- A\x{300}abc
- 0: A\x{300}abc
- A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
- 0: A\x{300}abc
- \x{300}abc
- 0: abc
- *** Failers
+ Xoanon
No match
-
-/^\X?abc/8
- abc
- 0: abc
- A\x{300}abc
- 0: A\x{300}abc
+
+/X\B/8
+ Xoanon
+ 0: X
*** Failers
No match
- A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+ X+oanon
No match
- \x{300}abc
+ ZX\x{300}oanon
No match
-
-/\X*abc/8
- abc
- 0: abc
- A\x{300}abc
- 0: A\x{300}abc
- A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
- 0: A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abc
- \x{300}abc
- 0: abc
- *** Failers
+ FAX
No match
+
+/[^a]/8
+ abcd
+ 0: b
+ a\x{100}
+ 0: \x{100}
-/^\X*abc/8
- abc
- 0: abc
- A\x{300}abc
- 0: A\x{300}abc
- A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
- 0: A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abc
+/^[abc\x{123}\x{400}-\x{402}]{2,3}\d/8
+ ab99
+ 0: ab9
+ \x{123}\x{123}45
+ 0: \x{123}\x{123}4
+ \x{400}\x{401}\x{402}6
+ 0: \x{400}\x{401}\x{402}6
*** Failers
No match
- \x{300}abc
+ d99
No match
-
-/^\pL?=./8
- A=b
- 0: A=b
- =c
- 0: =c
- *** Failers
+ \x{123}\x{122}4
No match
- 1=2
+ \x{400}\x{403}6
No match
- AAAA=b
+ \x{400}\x{401}\x{402}\x{402}6
No match
-/^\pL*=./8
- AAAA=b
- 0: AAAA=b
- =c
- 0: =c
+/a.b/8
+ acb
+ 0: acb
+ a\x7fb
+ 0: a\x{7f}b
+ a\x{100}b
+ 0: a\x{100}b
*** Failers
No match
- 1=2
+ a\nb
No match
-/^\X{2,3}X/8
- A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
- 0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
- A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
- 0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+/a(.{3})b/8
+ a\x{4000}xyb
+ 0: a\x{4000}xyb
+ a\x{4000}\x7fyb
+ 0: a\x{4000}\x{7f}yb
+ a\x{4000}\x{100}yb
+ 0: a\x{4000}\x{100}yb
*** Failers
No match
- X
+ a\x{4000}b
+No match
+ ac\ncb
+No match
+
+/a(.*?)(.)/
+ a\xc0\x88b
+ 0: a\xc0\x88b
+ 1: a\xc0\x88
+ 2: a\xc0
+
+/a(.*?)(.)/8
+ a\x{100}b
+ 0: a\x{100}b
+ 1: a\x{100}
+
+/a(.*)(.)/
+ a\xc0\x88b
+ 0: a\xc0\x88b
+ 1: a\xc0\x88
+ 2: a\xc0
+
+/a(.*)(.)/8
+ a\x{100}b
+ 0: a\x{100}b
+ 1: a\x{100}
+
+/a(.)(.)/
+ a\xc0\x92bcd
+ 0: a\xc0\x92
+
+/a(.)(.)/8
+ a\x{240}bcd
+ 0: a\x{240}b
+
+/a(.?)(.)/
+ a\xc0\x92bcd
+ 0: a\xc0\x92
+ 1: a\xc0
+
+/a(.?)(.)/8
+ a\x{240}bcd
+ 0: a\x{240}b
+ 1: a\x{240}
+
+/a(.??)(.)/
+ a\xc0\x92bcd
+ 0: a\xc0\x92
+ 1: a\xc0
+
+/a(.??)(.)/8
+ a\x{240}bcd
+ 0: a\x{240}b
+ 1: a\x{240}
+
+/a(.{3})b/8
+ a\x{1234}xyb
+ 0: a\x{1234}xyb
+ a\x{1234}\x{4321}yb
+ 0: a\x{1234}\x{4321}yb
+ a\x{1234}\x{4321}\x{3412}b
+ 0: a\x{1234}\x{4321}\x{3412}b
+ *** Failers
No match
- A\x{300}\x{301}\x{302}X
+ a\x{1234}b
No match
- A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+ ac\ncb
No match
-/^\pC\pL\pM\pN\pP\pS\pZ</8
- \x7f\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
- 0: \x{7f}\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
- \np\x{300}9!\$ <
- 0: \x{0a}p\x{300}9!$ <
- ** Failers
-No match
- ap\x{300}9!\$ <
-No match
-
-/^\PC/8
- X
- 0: X
- ** Failers
- 0: *
- \x7f
+/a(.{3,})b/8
+ a\x{1234}xyb
+ 0: a\x{1234}xyb
+ a\x{1234}\x{4321}yb
+ 0: a\x{1234}\x{4321}yb
+ a\x{1234}\x{4321}\x{3412}b
+ 0: a\x{1234}\x{4321}\x{3412}b
+ axxxxbcdefghijb
+ 0: axxxxbcdefghijb
+ 1: axxxxb
+ a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ *** Failers
No match
-
-/^\PL/8
- 9
- 0: 9
- ** Failers
- 0: *
- \x{c0}
+ a\x{1234}b
+No match
+
+/a(.{3,}?)b/8
+ a\x{1234}xyb
+ 0: a\x{1234}xyb
+ a\x{1234}\x{4321}yb
+ 0: a\x{1234}\x{4321}yb
+ a\x{1234}\x{4321}\x{3412}b
+ 0: a\x{1234}\x{4321}\x{3412}b
+ axxxxbcdefghijb
+ 0: axxxxbcdefghijb
+ 1: axxxxb
+ a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ *** Failers
No match
-
-/^\PM/8
- X
- 0: X
- ** Failers
- 0: *
- \x{30f}
+ a\x{1234}b
+No match
+
+/a(.{3,5})b/8
+ a\x{1234}xyb
+ 0: a\x{1234}xyb
+ a\x{1234}\x{4321}yb
+ 0: a\x{1234}\x{4321}yb
+ a\x{1234}\x{4321}\x{3412}b
+ 0: a\x{1234}\x{4321}\x{3412}b
+ axxxxbcdefghijb
+ 0: axxxxb
+ a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ axbxxbcdefghijb
+ 0: axbxxb
+ axxxxxbcdefghijb
+ 0: axxxxxb
+ *** Failers
No match
-
-/^\PN/8
- X
- 0: X
- ** Failers
- 0: *
- \x{660}
+ a\x{1234}b
+No match
+ axxxxxxbcdefghijb
+No match
+
+/a(.{3,5}?)b/8
+ a\x{1234}xyb
+ 0: a\x{1234}xyb
+ a\x{1234}\x{4321}yb
+ 0: a\x{1234}\x{4321}yb
+ a\x{1234}\x{4321}\x{3412}b
+ 0: a\x{1234}\x{4321}\x{3412}b
+ axxxxbcdefghijb
+ 0: axxxxb
+ a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ axbxxbcdefghijb
+ 0: axbxxb
+ axxxxxbcdefghijb
+ 0: axxxxxb
+ *** Failers
No match
-
-/^\PP/8
- X
- 0: X
- ** Failers
+ a\x{1234}b
No match
- \x{66c}
+ axxxxxxbcdefghijb
No match
-
-/^\PS/8
- X
- 0: X
- ** Failers
- 0: *
- \x{f01}
+
+/^[a\x{c0}]/8
+ *** Failers
No match
-
-/^\PZ/8
- X
- 0: X
- ** Failers
- 0: *
- \x{1680}
+ \x{100}
No match
+
+/(?<=aXb)cd/8
+ aXbcd
+ 0: cd
+
+/(?<=a\x{100}b)cd/8
+ a\x{100}bcd
+ 0: cd
+
+/(?<=a\x{100000}b)cd/8
+ a\x{100000}bcd
+ 0: cd
-/^\p{Cc}/8
- \x{017}
- 0: \x{17}
- \x{09f}
- 0: \x{9f}
- ** Failers
-No match
- \x{0600}
-No match
-
-/^\p{Cf}/8
- \x{601}
- 0: \x{601}
- ** Failers
-No match
- \x{09f}
-No match
-
-/^\p{Cn}/8
- ** Failers
-No match
- \x{09f}
-No match
-
-/^\p{Co}/8
- \x{f8ff}
- 0: \x{f8ff}
- ** Failers
-No match
- \x{09f}
-No match
-
-/^\p{Cs}/8
- \?\x{dfff}
- 0: \x{dfff}
- ** Failers
-No match
- \x{09f}
-No match
-
-/^\p{Ll}/8
- a
- 0: a
- ** Failers
-No match
- Z
-No match
- \x{e000}
-No match
-
-/^\p{Lm}/8
- \x{2b0}
- 0: \x{2b0}
- ** Failers
-No match
- a
-No match
-
-/^\p{Lo}/8
- \x{1bb}
- 0: \x{1bb}
- ** Failers
-No match
- a
-No match
- \x{2b0}
-No match
-
-/^\p{Lt}/8
- \x{1c5}
- 0: \x{1c5}
- ** Failers
-No match
- a
-No match
- \x{2b0}
-No match
-
-/^\p{Lu}/8
- A
- 0: A
- ** Failers
-No match
- \x{2b0}
-No match
-
-/^\p{Mc}/8
- \x{903}
- 0: \x{903}
- ** Failers
-No match
- X
-No match
- \x{300}
-No match
-
-/^\p{Me}/8
- \x{488}
- 0: \x{488}
- ** Failers
-No match
- X
-No match
- \x{903}
-No match
- \x{300}
-No match
-
-/^\p{Mn}/8
- \x{300}
- 0: \x{300}
- ** Failers
-No match
- X
-No match
- \x{903}
-No match
-
-/^\p{Nd}+/8
- 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}\x{669}\x{66a}
- 0: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}\x{669}
- 1: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}
- 2: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}
- 3: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}
- 4: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}
- 5: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}
- 6: 0123456789\x{660}\x{661}\x{662}\x{663}
- 7: 0123456789\x{660}\x{661}\x{662}
- 8: 0123456789\x{660}\x{661}
- 9: 0123456789\x{660}
-10: 0123456789
-11: 012345678
-12: 01234567
-13: 0123456
-14: 012345
-15: 01234
-16: 0123
-17: 012
-18: 01
-19: 0
- \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}\x{6fa}
- 0: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}
- 1: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}
- 2: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}
- 3: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}
- 4: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}
- 5: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}
- 6: \x{6f0}\x{6f1}\x{6f2}\x{6f3}
- 7: \x{6f0}\x{6f1}\x{6f2}
- 8: \x{6f0}\x{6f1}
- 9: \x{6f0}
- \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}\x{970}
- 0: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}
- 1: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}
- 2: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}
- 3: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}
- 4: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}
- 5: \x{966}\x{967}\x{968}\x{969}\x{96a}
- 6: \x{966}\x{967}\x{968}\x{969}
- 7: \x{966}\x{967}\x{968}
- 8: \x{966}\x{967}
- 9: \x{966}
- ** Failers
-No match
- X
-No match
-
-/^\p{Nl}/8
- \x{16ee}
- 0: \x{16ee}
- ** Failers
-No match
- X
-No match
- \x{966}
-No match
-
-/^\p{No}/8
- \x{b2}
- 0: \x{b2}
- \x{b3}
- 0: \x{b3}
- ** Failers
-No match
- X
-No match
- \x{16ee}
-No match
-
-/^\p{Pc}/8
- \x5f
- 0: _
- \x{203f}
- 0: \x{203f}
- ** Failers
-No match
- X
-No match
- -
-No match
- \x{58a}
-No match
-
-/^\p{Pd}/8
- -
- 0: -
- \x{58a}
- 0: \x{58a}
- ** Failers
-No match
- X
-No match
- \x{203f}
-No match
-
-/^\p{Pe}/8
- )
- 0: )
- ]
- 0: ]
- }
- 0: }
- \x{f3b}
- 0: \x{f3b}
- ** Failers
-No match
- X
-No match
- \x{203f}
-No match
- (
-No match
- [
-No match
- {
-No match
- \x{f3c}
-No match
-
-/^\p{Pf}/8
- \x{bb}
- 0: \x{bb}
- \x{2019}
- 0: \x{2019}
- ** Failers
-No match
- X
+/(?:\x{100}){3}b/8
+ \x{100}\x{100}\x{100}b
+ 0: \x{100}\x{100}\x{100}b
+ *** Failers
No match
- \x{203f}
+ \x{100}\x{100}b
No match
-
-/^\p{Pi}/8
- \x{ab}
+
+/\x{ab}/8
+ \x{ab}
0: \x{ab}
- \x{2018}
- 0: \x{2018}
- ** Failers
-No match
- X
-No match
- \x{203f}
-No match
-
-/^\p{Po}/8
- !
- 0: !
- \x{37e}
- 0: \x{37e}
- ** Failers
- 0: *
- X
-No match
- \x{203f}
-No match
-
-/^\p{Ps}/8
- (
- 0: (
- [
- 0: [
- {
- 0: {
- \x{f3c}
- 0: \x{f3c}
- ** Failers
-No match
- X
-No match
- )
-No match
- ]
-No match
- }
-No match
- \x{f3b}
-No match
-
-/^\p{Sc}+/8
- $\x{a2}\x{a3}\x{a4}\x{a5}\x{a6}
- 0: $\x{a2}\x{a3}\x{a4}\x{a5}
- 1: $\x{a2}\x{a3}\x{a4}
- 2: $\x{a2}\x{a3}
- 3: $\x{a2}
- 4: $
- \x{9f2}
- 0: \x{9f2}
- ** Failers
-No match
- X
-No match
- \x{2c2}
-No match
-
-/^\p{Sk}/8
- \x{2c2}
- 0: \x{2c2}
- ** Failers
-No match
- X
-No match
- \x{9f2}
-No match
-
-/^\p{Sm}+/8
- +<|~\x{ac}\x{2044}
- 0: +<|~\x{ac}\x{2044}
- 1: +<|~\x{ac}
- 2: +<|~
- 3: +<|
- 4: +<
- 5: +
- ** Failers
-No match
- X
-No match
- \x{9f2}
-No match
-
-/^\p{So}/8
- \x{a6}
- 0: \x{a6}
- \x{482}
- 0: \x{482}
- ** Failers
-No match
- X
-No match
- \x{9f2}
+ \xc2\xab
+ 0: \x{ab}
+ *** Failers
No match
-
-/^\p{Zl}/8
- \x{2028}
- 0: \x{2028}
- ** Failers
+ \x00{ab}
No match
- X
+
+/(?<=(.))X/8
+ WXYZ
+ 0: X
+ \x{256}XYZ
+ 0: X
+ *** Failers
No match
- \x{2029}
+ XYZ
No match
+
+/[^a]+/8g
+ bcd
+ 0: bcd
+ 1: bc
+ 2: b
+ \x{100}aY\x{256}Z
+ 0: \x{100}
+ 0: Y\x{256}Z
+ 1: Y\x{256}
+ 2: Y
+
+/^[^a]{2}/8
+ \x{100}bc
+ 0: \x{100}b
+
+/^[^a]{2,}/8
+ \x{100}bcAa
+ 0: \x{100}bcA
+ 1: \x{100}bc
+ 2: \x{100}b
+
+/^[^a]{2,}?/8
+ \x{100}bca
+ 0: \x{100}bc
+ 1: \x{100}b
+
+/[^a]+/8ig
+ bcd
+ 0: bcd
+ 1: bc
+ 2: b
+ \x{100}aY\x{256}Z
+ 0: \x{100}
+ 0: Y\x{256}Z
+ 1: Y\x{256}
+ 2: Y
+
+/^[^a]{2}/8i
+ \x{100}bc
+ 0: \x{100}b
+
+/^[^a]{2,}/8i
+ \x{100}bcAa
+ 0: \x{100}bc
+ 1: \x{100}b
+
+/^[^a]{2,}?/8i
+ \x{100}bca
+ 0: \x{100}bc
+ 1: \x{100}b
+
+/\x{100}{0,0}/8
+ abcd
+ 0:
+
+/\x{100}?/8
+ abcd
+ 0:
+ \x{100}\x{100}
+ 0: \x{100}
+ 1:
+
+/\x{100}{0,3}/8
+ \x{100}\x{100}
+ 0: \x{100}\x{100}
+ 1: \x{100}
+ 2:
+ \x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}
+ 2: \x{100}
+ 3:
+
+/\x{100}*/8
+ abce
+ 0:
+ \x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}
+ 3: \x{100}
+ 4:
+
+/\x{100}{1,1}/8
+ abcd\x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}
+
+/\x{100}{1,3}/8
+ abcd\x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}
+ 2: \x{100}
+
+/\x{100}+/8
+ abcd\x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}
+ 3: \x{100}
+
+/\x{100}{3}/8
+ abcd\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}
+
+/\x{100}{3,5}/8
+ abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}\x{100}
+
+/\x{100}{3,}/8
+ abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}\x{100}\x{100}\x{100}
+ 3: \x{100}\x{100}\x{100}\x{100}
+ 4: \x{100}\x{100}\x{100}
+
+/(?<=a\x{100}{2}b)X/8
+ Xyyya\x{100}\x{100}bXzzz
+ 0: X
+
+/\D*/8
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but offsets vector is too small to show all matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/\D*/8
+ \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+Matched, but offsets vector is too small to show all matches
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 3: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 4: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 5: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 6: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 7: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 8: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 9: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+10: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+11: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+12: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+13: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+14: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+15: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+16: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+17: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+18: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+19: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+20: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+21: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+
+/\D/8
+ 1X2
+ 0: X
+ 1\x{100}2
+ 0: \x{100}
-/^\p{Zp}/8
- \x{2029}
- 0: \x{2029}
- ** Failers
-No match
- X
-No match
- \x{2028}
-No match
+/>\S/8
+ > >X Y
+ 0: >X
+ > >\x{100} Y
+ 0: >\x{100}
-/^\p{Zs}/8
- \ \
+/\d/8
+ \x{100}3
+ 0: 3
+
+/\s/8
+ \x{100} X
0:
- \x{a0}
- 0: \x{a0}
- \x{1680}
- 0: \x{1680}
- \x{180e}
- 0: \x{180e}
- \x{2000}
- 0: \x{2000}
- \x{2001}
- 0: \x{2001}
- ** Failers
-No match
- \x{2028}
-No match
- \x{200d}
-No match
-
-/\p{Nd}+(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
- 2: \x{660}\x{661}\x{662}
-
-/\p{Nd}+?(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
- 2: \x{660}\x{661}\x{662}
-
-/\p{Nd}{2,}(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
-
-/\p{Nd}{2,}?(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
-
-/\p{Nd}*(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
- 2: \x{660}\x{661}\x{662}
- 3: \x{660}\x{661}
-
-/\p{Nd}*?(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
- 2: \x{660}\x{661}\x{662}
- 3: \x{660}\x{661}
-
-/\p{Nd}{2}(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}A
-
-/\p{Nd}{2,3}(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
-
-/\p{Nd}{2,3}?(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
- 1: \x{660}\x{661}\x{662}A
-
-/\p{Nd}?(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}
- 1: \x{660}\x{661}
-
-/\p{Nd}??(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}
- 1: \x{660}\x{661}
-
-/\p{Nd}*+(..)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}AB
-
-/\p{Nd}*+(...)/8
- \x{660}\x{661}\x{662}ABC
- 0: \x{660}\x{661}\x{662}ABC
-
-/\p{Nd}*+(....)/8
- ** Failers
- 0: ** F
- \x{660}\x{661}\x{662}ABC
+
+/\D+/8
+ 12abcd34
+ 0: abcd
+ 1: abc
+ 2: ab
+ 3: a
+ *** Failers
+ 0: *** Failers
+ 1: *** Failer
+ 2: *** Faile
+ 3: *** Fail
+ 4: *** Fai
+ 5: *** Fa
+ 6: *** F
+ 7: ***
+ 8: ***
+ 9: **
+10: *
+ 1234
No match
-
-/\p{Lu}/8i
- A
- 0: A
- a\x{10a0}B
- 0: \x{10a0}
- ** Failers
- 0: F
- a
+
+/\D{2,3}/8
+ 12abcd34
+ 0: abc
+ 1: ab
+ 12ab34
+ 0: ab
+ *** Failers
+ 0: ***
+ 1: **
+ 1234
No match
- \x{1d00}
+ 12a34
No match
-/\p{^Lu}/8i
+/\D{2,3}?/8
+ 12abcd34
+ 0: abc
+ 1: ab
+ 12ab34
+ 0: ab
+ *** Failers
+ 0: ***
+ 1: **
1234
- 0: 1
- ** Failers
- 0: *
- ABC
+No match
+ 12a34
No match
-/\P{Lu}/8i
- 1234
- 0: 1
- ** Failers
- 0: *
- ABC
+/\d+/8
+ 12abcd34
+ 0: 12
+ 1: 1
+ *** Failers
No match
-/(?<=A\p{Nd})XYZ/8
- A2XYZ
- 0: XYZ
- 123A5XYZPQR
- 0: XYZ
- ABA\x{660}XYZpqr
- 0: XYZ
- ** Failers
+/\d{2,3}/8
+ 12abcd34
+ 0: 12
+ 1234abcd
+ 0: 123
+ 1: 12
+ *** Failers
No match
- AXYZ
+ 1.4
No match
- XYZ
+
+/\d{2,3}?/8
+ 12abcd34
+ 0: 12
+ 1234abcd
+ 0: 123
+ 1: 12
+ *** Failers
No match
-
-/(?<!\pL)XYZ/8
- 1XYZ
- 0: XYZ
- AB=XYZ..
- 0: XYZ
- XYZ
- 0: XYZ
- ** Failers
+ 1.4
No match
- WXYZ
+
+/\S+/8
+ 12abcd34
+ 0: 12abcd34
+ 1: 12abcd3
+ 2: 12abcd
+ 3: 12abc
+ 4: 12ab
+ 5: 12a
+ 6: 12
+ 7: 1
+ *** Failers
+ 0: ***
+ 1: **
+ 2: *
+ \ \
+No match
+
+/\S{2,3}/8
+ 12abcd34
+ 0: 12a
+ 1: 12
+ 1234abcd
+ 0: 123
+ 1: 12
+ *** Failers
+ 0: ***
+ 1: **
+ \ \
+No match
+
+/\S{2,3}?/8
+ 12abcd34
+ 0: 12a
+ 1: 12
+ 1234abcd
+ 0: 123
+ 1: 12
+ *** Failers
+ 0: ***
+ 1: **
+ \ \
No match
-/[\p{Nd}]/8
- 1234
- 0: 1
+/>\s+</8
+ 12> <34
+ 0: > <
+ *** Failers
+No match
-/[\p{Nd}+-]+/8
- 1234
- 0: 1234
- 1: 123
- 2: 12
- 3: 1
- 12-34
- 0: 12-34
- 1: 12-3
- 2: 12-
- 3: 12
- 4: 1
- 12+\x{661}-34
- 0: 12+\x{661}-34
- 1: 12+\x{661}-3
- 2: 12+\x{661}-
- 3: 12+\x{661}
- 4: 12+
- 5: 12
- 6: 1
- ** Failers
+/>\s{2,3}</8
+ ab> <cd
+ 0: > <
+ ab> <ce
+ 0: > <
+ *** Failers
No match
- abcd
+ ab> <cd
No match
-/[\P{Nd}]+/8
- abcd
- 0: abcd
- 1: abc
- 2: ab
- 3: a
- ** Failers
- 0: ** Failers
- 1: ** Failer
- 2: ** Faile
- 3: ** Fail
- 4: ** Fai
- 5: ** Fa
- 6: ** F
- 7: **
- 8: **
- 9: *
- 1234
+/>\s{2,3}?</8
+ ab> <cd
+ 0: > <
+ ab> <ce
+ 0: > <
+ *** Failers
No match
-
-/\D+/8
- 11111111111111111111111111111111111111111111111111111111111111111111111
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-Matched, but too many subsidiary matches
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/\P{Nd}+/8
- 11111111111111111111111111111111111111111111111111111111111111111111111
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-Matched, but too many subsidiary matches
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\D]+/8
- 11111111111111111111111111111111111111111111111111111111111111111111111
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-Matched, but too many subsidiary matches
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\P{Nd}]+/8
- 11111111111111111111111111111111111111111111111111111111111111111111111
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-Matched, but too many subsidiary matches
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\D\P{Nd}]+/8
- 11111111111111111111111111111111111111111111111111111111111111111111111
-No match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-Matched, but too many subsidiary matches
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/\pL/8
- a
- 0: a
- A
- 0: A
-
-/\pL/8i
- a
- 0: a
- A
- 0: A
-
-/\p{Lu}/8
- A
- 0: A
- aZ
- 0: Z
- ** Failers
- 0: F
- abc
+ ab> <cd
No match
-/\p{Lu}/8i
- A
- 0: A
- aZ
- 0: Z
- ** Failers
- 0: F
- abc
+/\w+/8
+ 12 34
+ 0: 12
+ 1: 1
+ *** Failers
+ 0: Failers
+ 1: Failer
+ 2: Faile
+ 3: Fail
+ 4: Fai
+ 5: Fa
+ 6: F
+ +++=*!
+No match
+
+/\w{2,3}/8
+ ab cd
+ 0: ab
+ abcd ce
+ 0: abc
+ 1: ab
+ *** Failers
+ 0: Fai
+ 1: Fa
+ a.b.c
No match
-/\p{Ll}/8
- a
- 0: a
- Az
- 0: z
- ** Failers
- 0: a
- ABC
+/\w{2,3}?/8
+ ab cd
+ 0: ab
+ abcd ce
+ 0: abc
+ 1: ab
+ *** Failers
+ 0: Fai
+ 1: Fa
+ a.b.c
No match
-/\p{Ll}/8i
- a
- 0: a
- Az
- 0: z
- ** Failers
- 0: a
- ABC
+/\W+/8
+ 12====34
+ 0: ====
+ 1: ===
+ 2: ==
+ 3: =
+ *** Failers
+ 0: ***
+ 1: ***
+ 2: **
+ 3: *
+ abcd
No match
-/^\x{c0}$/8i
- \x{c0}
- 0: \x{c0}
- \x{e0}
- 0: \x{e0}
-
-/^\x{e0}$/8i
- \x{c0}
- 0: \x{c0}
- \x{e0}
- 0: \x{e0}
-
-/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8
- A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- 0: A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- ** Failers
+/\W{2,3}/8
+ ab====cd
+ 0: ===
+ 1: ==
+ ab==cd
+ 0: ==
+ *** Failers
+ 0: ***
+ 1: **
+ a.b.c
No match
- a\x{391}\x{10427}\x{ff3a}\x{1fb0}
-No match
- A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
-No match
- A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
-No match
- A\x{391}\x{10427}\x{ff5a}\x{1fb0}
-No match
- A\x{391}\x{10427}\x{ff3a}\x{1fb8}
-No match
-
-/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8i
- A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- 0: A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- a\x{391}\x{10427}\x{ff3a}\x{1fb0}
- 0: a\x{391}\x{10427}\x{ff3a}\x{1fb0}
- A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
- 0: A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
- A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
- 0: A\x{391}\x{1044f}\x{ff3a}\x{1fb0}
- A\x{391}\x{10427}\x{ff5a}\x{1fb0}
- 0: A\x{391}\x{10427}\x{ff5a}\x{1fb0}
- A\x{391}\x{10427}\x{ff3a}\x{1fb8}
- 0: A\x{391}\x{10427}\x{ff3a}\x{1fb8}
-
-/\x{391}+/8i
- \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
- 0: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
- 1: \x{391}\x{3b1}\x{3b1}\x{3b1}
- 2: \x{391}\x{3b1}\x{3b1}
- 3: \x{391}\x{3b1}
- 4: \x{391}
-
-/\x{391}{3,5}(.)/8i
- \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
- 0: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
- 1: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
- 2: \x{391}\x{3b1}\x{3b1}\x{3b1}
-
-/\x{391}{3,5}?(.)/8i
- \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
- 0: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
- 1: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
- 2: \x{391}\x{3b1}\x{3b1}\x{3b1}
-
-/[\x{391}\x{ff3a}]/8i
- \x{391}
- 0: \x{391}
- \x{ff3a}
- 0: \x{ff3a}
- \x{3b1}
- 0: \x{3b1}
- \x{ff5a}
- 0: \x{ff5a}
-
-/[\x{c0}\x{391}]/8i
- \x{c0}
- 0: \x{c0}
- \x{e0}
- 0: \x{e0}
-
-/[\x{105}-\x{109}]/8i
- \x{104}
- 0: \x{104}
- \x{105}
- 0: \x{105}
- \x{109}
- 0: \x{109}
- ** Failers
+
+/\W{2,3}?/8
+ ab====cd
+ 0: ===
+ 1: ==
+ ab==cd
+ 0: ==
+ *** Failers
+ 0: ***
+ 1: **
+ a.b.c
No match
+
+/[\x{100}]/8
\x{100}
+ 0: \x{100}
+ Z\x{100}
+ 0: \x{100}
+ \x{100}Z
+ 0: \x{100}
+ *** Failers
No match
- \x{10a}
-No match
-
-/[z-\x{100}]/8i
- Z
+
+/[Z\x{100}]/8
+ Z\x{100}
0: Z
- z
- 0: z
- \x{39c}
- 0: \x{39c}
- \x{178}
- 0: \x{178}
- |
- 0: |
- \x{80}
- 0: \x{80}
- \x{ff}
- 0: \x{ff}
\x{100}
0: \x{100}
- \x{101}
- 0: \x{101}
- ** Failers
-No match
- \x{102}
-No match
- Y
-No match
- y
+ \x{100}Z
+ 0: \x{100}
+ *** Failers
No match
-/[z-\x{100}]/8i
-
-/^\X/8
- A
- 0: A
- A\x{300}BC
- 0: A\x{300}
- A\x{300}\x{301}\x{302}BC
- 0: A\x{300}\x{301}\x{302}
- *** Failers
- 0: *
- \x{300}
+/[\x{100}\x{200}]/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ *** Failers
No match
-/^[\X]/8
- X123
- 0: X
- *** Failers
-No match
- AXYZ
-No match
-
-/^(\X*)C/8
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}
- 0: A\x{300}\x{301}\x{302}BC
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 1: A\x{300}\x{301}\x{302}BC
-
-/^(\X*?)C/8
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}
- 0: A\x{300}\x{301}\x{302}BC
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 1: A\x{300}\x{301}\x{302}BC
-
-/^(\X*)(.)/8
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}
- 0: A\x{300}\x{301}\x{302}BCA
- 1: A\x{300}\x{301}\x{302}BC
- 2: A\x{300}\x{301}\x{302}B
- 3: A
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 1: A\x{300}\x{301}\x{302}BCA
- 2: A\x{300}\x{301}\x{302}BC
- 3: A\x{300}\x{301}\x{302}B
- 4: A
-
-/^(\X*?)(.)/8
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}
- 0: A\x{300}\x{301}\x{302}BCA
- 1: A\x{300}\x{301}\x{302}BC
- 2: A\x{300}\x{301}\x{302}B
- 3: A
- A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
- 1: A\x{300}\x{301}\x{302}BCA
- 2: A\x{300}\x{301}\x{302}BC
- 3: A\x{300}\x{301}\x{302}B
- 4: A
-
-/^\X(.)/8
- *** Failers
- 0: **
- A\x{300}\x{301}\x{302}
-No match
-
-/^\X{2,3}(.)/8
- A\x{300}\x{301}B\x{300}X
- 0: A\x{300}\x{301}B\x{300}X
- A\x{300}\x{301}B\x{300}C\x{300}\x{301}
- 0: A\x{300}\x{301}B\x{300}C
- A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
- 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
- 1: A\x{300}\x{301}B\x{300}C
- A\x{300}\x{301}B\x{300}C\x{300}\x{301}DA\x{300}X
- 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}D
- 1: A\x{300}\x{301}B\x{300}C
-
-/^\X{2,3}?(.)/8
- A\x{300}\x{301}B\x{300}X
- 0: A\x{300}\x{301}B\x{300}X
- A\x{300}\x{301}B\x{300}C\x{300}\x{301}
- 0: A\x{300}\x{301}B\x{300}C
- A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
- 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
- 1: A\x{300}\x{301}B\x{300}C
- A\x{300}\x{301}B\x{300}C\x{300}\x{301}DA\x{300}X
- 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}D
- 1: A\x{300}\x{301}B\x{300}C
-
-/^\pN{2,3}X/
- 12X
- 0: 12X
- 123X
- 0: 123X
- *** Failers
-No match
- X
+/[\x{100}-\x{200}]/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{111}cd
+ 0: \x{111}
+ *** Failers
No match
- 1X
+
+/[z-\x{200}]/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{111}cd
+ 0: \x{111}
+ abzcd
+ 0: z
+ ab|cd
+ 0: |
+ *** Failers
No match
- 1234X
+
+/[Q\x{100}\x{200}]/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ Q?
+ 0: Q
+ *** Failers
No match
-/\x{100}/i8
- \x{100}
+/[Q\x{100}-\x{200}]/8
+ ab\x{100}cd
0: \x{100}
- \x{101}
- 0: \x{101}
-
-/^\p{Han}+/8
- \x{2e81}\x{3007}\x{2f804}\x{31a0}
- 0: \x{2e81}\x{3007}\x{2f804}
- 1: \x{2e81}\x{3007}
- 2: \x{2e81}
- ** Failers
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{111}cd
+ 0: \x{111}
+ Q?
+ 0: Q
+ *** Failers
No match
- \x{2e7f}
+
+/[Qz-\x{200}]/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{111}cd
+ 0: \x{111}
+ abzcd
+ 0: z
+ ab|cd
+ 0: |
+ Q?
+ 0: Q
+ *** Failers
No match
-/^\P{Katakana}+/8
- \x{3105}
- 0: \x{3105}
- ** Failers
- 0: ** Failers
- 1: ** Failer
- 2: ** Faile
- 3: ** Fail
- 4: ** Fai
- 5: ** Fa
- 6: ** F
- 7: **
- 8: **
- 9: *
- \x{30ff}
-No match
-
-/^[\p{Arabic}]/8
- \x{06e9}
- 0: \x{6e9}
- \x{060b}
- 0: \x{60b}
- ** Failers
+/[\x{100}\x{200}]{1,3}/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+ *** Failers
No match
- X\x{06e9}
+
+/[\x{100}\x{200}]{1,3}?/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+ *** Failers
No match
-/^[\P{Yi}]/8
- \x{2f800}
- 0: \x{2f800}
- ** Failers
- 0: *
- \x{a014}
+/[Q\x{100}\x{200}]{1,3}/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+ *** Failers
No match
- \x{a4c6}
+
+/[Q\x{100}\x{200}]{1,3}?/8
+ ab\x{100}cd
+ 0: \x{100}
+ ab\x{200}cd
+ 0: \x{200}
+ ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+ *** Failers
No match
-/^\p{Any}X/8
- AXYZ
- 0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- ** Failers
+/(?<=[\x{100}\x{200}])X/8
+ abc\x{200}X
+ 0: X
+ abc\x{100}X
+ 0: X
+ *** Failers
No match
X
No match
-
-/^\P{Any}X/8
- ** Failers
-No match
- AX
-No match
-
-/^\p{Any}?X/8
- XYZ
+
+/(?<=[Q\x{100}\x{200}])X/8
+ abc\x{200}X
0: X
- AXYZ
- 0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- ** Failers
+ abc\x{100}X
+ 0: X
+ abQX
+ 0: X
+ *** Failers
No match
- ABXYZ
+ X
No match
-/^\P{Any}?X/8
- XYZ
+/(?<=[\x{100}\x{200}]{3})X/8
+ abc\x{100}\x{200}\x{100}X
0: X
- ** Failers
-No match
- AXYZ
+ *** Failers
No match
- \x{1234}XYZ
+ abc\x{200}X
No match
- ABXYZ
+ X
No match
-/^\p{Any}+X/8
- AXYZ
+/[^\x{100}\x{200}]X/8
+ AX
0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- A\x{1234}XYZ
- 0: A\x{1234}X
- ** Failers
+ \x{150}X
+ 0: \x{150}X
+ \x{500}X
+ 0: \x{500}X
+ *** Failers
No match
- XYZ
+ \x{100}X
No match
-
-/^\P{Any}+X/8
- ** Failers
+ \x{200}X
No match
- AXYZ
+
+/[^Q\x{100}\x{200}]X/8
+ AX
+ 0: AX
+ \x{150}X
+ 0: \x{150}X
+ \x{500}X
+ 0: \x{500}X
+ *** Failers
No match
- \x{1234}XYZ
+ \x{100}X
No match
- A\x{1234}XYZ
+ \x{200}X
No match
- XYZ
+ QX
No match
-/^\p{Any}*X/8
- XYZ
- 0: X
- AXYZ
+/[^\x{100}-\x{200}]X/8
+ AX
0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- A\x{1234}XYZ
- 0: A\x{1234}X
- ** Failers
-No match
-
-/^\P{Any}*X/8
- XYZ
- 0: X
- ** Failers
+ \x{500}X
+ 0: \x{500}X
+ *** Failers
No match
- AXYZ
+ \x{100}X
No match
- \x{1234}XYZ
+ \x{150}X
No match
- A\x{1234}XYZ
+ \x{200}X
No match
-/^[\p{Any}]X/8
- AXYZ
- 0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- ** Failers
-No match
- X
+/[z-\x{100}]/8i
+ z
+ 0: z
+ Z
+ 0: Z
+ \x{100}
+ 0: \x{100}
+ *** Failers
No match
-
-/^[\P{Any}]X/8
- ** Failers
+ \x{102}
No match
- AX
+ y
No match
-
-/^[\p{Any}]?X/8
+
+/[\xFF]/
+ >\xff<
+ 0: \xff
+
+/[\xff]/8
+ >\x{ff}<
+ 0: \x{ff}
+
+/[^\xFF]/
XYZ
0: X
- AXYZ
- 0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- ** Failers
-No match
- ABXYZ
-No match
-/^[\P{Any}]?X/8
+/[^\xff]/8
XYZ
0: X
- ** Failers
-No match
- AXYZ
-No match
- \x{1234}XYZ
-No match
- ABXYZ
-No match
+ \x{123}
+ 0: \x{123}
-/^[\p{Any}]+X/8
- AXYZ
- 0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- A\x{1234}XYZ
- 0: A\x{1234}X
- ** Failers
-No match
- XYZ
+/^[ac]*b/8
+ xb
No match
-/^[\P{Any}]+X/8
- ** Failers
-No match
- AXYZ
+/^[ac\x{100}]*b/8
+ xb
No match
- \x{1234}XYZ
+
+/^[^x]*b/8i
+ xb
No match
- A\x{1234}XYZ
+
+/^[^x]*b/8
+ xb
No match
- XYZ
+
+/^\d*b/8
+ xb
No match
-/^[\p{Any}]*X/8
- XYZ
- 0: X
- AXYZ
- 0: AX
- \x{1234}XYZ
- 0: \x{1234}X
- A\x{1234}XYZ
- 0: A\x{1234}X
+/(|a)/g8
+ catac
+ 0:
+ 0: a
+ 1:
+ 0:
+ 0: a
+ 1:
+ 0:
+ 0:
+ a\x{256}a
+ 0: a
+ 1:
+ 0:
+ 0: a
+ 1:
+ 0:
+
+/^\x{85}$/8i
+ \x{85}
+ 0: \x{85}
+
+/^abc./mgx8<any>
+ abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x{0085}abc7 \x{2028}abc8 \x{2029}abc9 JUNK
+ 0: abc1
+ 0: abc2
+ 0: abc3
+ 0: abc4
+ 0: abc5
+ 0: abc6
+ 0: abc7
+ 0: abc8
+ 0: abc9
+
+/abc.$/mgx8<any>
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x{0085} abc7\x{2028} abc8\x{2029} abc9
+ 0: abc1
+ 0: abc2
+ 0: abc3
+ 0: abc4
+ 0: abc5
+ 0: abc6
+ 0: abc7
+ 0: abc8
+ 0: abc9
+
+/^a\Rb/8<bsr_unicode>
+ a\nb
+ 0: a\x{0a}b
+ a\rb
+ 0: a\x{0d}b
+ a\r\nb
+ 0: a\x{0d}\x{0a}b
+ a\x0bb
+ 0: a\x{0b}b
+ a\x0cb
+ 0: a\x{0c}b
+ a\x{85}b
+ 0: a\x{85}b
+ a\x{2028}b
+ 0: a\x{2028}b
+ a\x{2029}b
+ 0: a\x{2029}b
** Failers
No match
-
-/^[\P{Any}]*X/8
- XYZ
- 0: X
+ a\n\rb
+No match
+
+/^a\R*b/8<bsr_unicode>
+ ab
+ 0: ab
+ a\nb
+ 0: a\x{0a}b
+ a\rb
+ 0: a\x{0d}b
+ a\r\nb
+ 0: a\x{0d}\x{0a}b
+ a\x0bb
+ 0: a\x{0b}b
+ a\x0c\x{2028}\x{2029}b
+ 0: a\x{0c}\x{2028}\x{2029}b
+ a\x{85}b
+ 0: a\x{85}b
+ a\n\rb
+ 0: a\x{0a}\x{0d}b
+ a\n\r\x{85}\x0cb
+ 0: a\x{0a}\x{0d}\x{85}\x{0c}b
+
+/^a\R+b/8<bsr_unicode>
+ a\nb
+ 0: a\x{0a}b
+ a\rb
+ 0: a\x{0d}b
+ a\r\nb
+ 0: a\x{0d}\x{0a}b
+ a\x0bb
+ 0: a\x{0b}b
+ a\x0c\x{2028}\x{2029}b
+ 0: a\x{0c}\x{2028}\x{2029}b
+ a\x{85}b
+ 0: a\x{85}b
+ a\n\rb
+ 0: a\x{0a}\x{0d}b
+ a\n\r\x{85}\x0cb
+ 0: a\x{0a}\x{0d}\x{85}\x{0c}b
** Failers
No match
- AXYZ
+ ab
+No match
+
+/^a\R{1,3}b/8<bsr_unicode>
+ a\nb
+ 0: a\x{0a}b
+ a\n\rb
+ 0: a\x{0a}\x{0d}b
+ a\n\r\x{85}b
+ 0: a\x{0a}\x{0d}\x{85}b
+ a\r\n\r\nb
+ 0: a\x{0d}\x{0a}\x{0d}\x{0a}b
+ a\r\n\r\n\r\nb
+ 0: a\x{0d}\x{0a}\x{0d}\x{0a}\x{0d}\x{0a}b
+ a\n\r\n\rb
+ 0: a\x{0a}\x{0d}\x{0a}\x{0d}b
+ a\n\n\r\nb
+ 0: a\x{0a}\x{0a}\x{0d}\x{0a}b
+ ** Failers
No match
- \x{1234}XYZ
+ a\n\n\n\rb
No match
- A\x{1234}XYZ
+ a\r
No match
-/^\p{Any}{3,5}?/8
- abcdefgh
- 0: abcde
- 1: abcd
- 2: abc
- \x{1234}\n\r\x{3456}xyz
- 0: \x{1234}\x{0a}\x{0d}\x{3456}x
- 1: \x{1234}\x{0a}\x{0d}\x{3456}
- 2: \x{1234}\x{0a}\x{0d}
+/\h+\V?\v{3,4}/8
+ \x09\x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
+ 0: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}\x{0d}
+ 1: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}
-/^\p{Any}{3,5}/8
- abcdefgh
- 0: abcde
- 1: abcd
- 2: abc
- \x{1234}\n\r\x{3456}xyz
- 0: \x{1234}\x{0a}\x{0d}\x{3456}x
- 1: \x{1234}\x{0a}\x{0d}\x{3456}
- 2: \x{1234}\x{0a}\x{0d}
+/\V?\v{3,4}/8
+ \x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
+ 0: X\x{0a}\x{0b}\x{0c}\x{0d}
+ 1: X\x{0a}\x{0b}\x{0c}
-/^\P{Any}{3,5}?/8
- ** Failers
-No match
- abcdefgh
-No match
- \x{1234}\n\r\x{3456}xyz
-No match
+/\h+\V?\v{3,4}/8
+ >\x09\x20\x{a0}X\x0a\x0a\x0a<
+ 0: \x{09} \x{a0}X\x{0a}\x{0a}\x{0a}
-/^\p{L&}X/8
- AXY
- 0: AX
- aXY
- 0: aX
- \x{1c5}XY
- 0: \x{1c5}X
- ** Failers
-No match
- \x{1bb}XY
-No match
- \x{2b0}XY
-No match
- !XY
-No match
-
-/^[\p{L&}]X/8
- AXY
- 0: AX
- aXY
- 0: aX
- \x{1c5}XY
- 0: \x{1c5}X
- ** Failers
-No match
- \x{1bb}XY
-No match
- \x{2b0}XY
-No match
- !XY
-No match
+/\V?\v{3,4}/8
+ >\x09\x20\x{a0}X\x0a\x0a\x0a<
+ 0: X\x{0a}\x{0a}\x{0a}
-/^\p{L&}+X/8
- AXY
- 0: AX
- aXY
- 0: aX
- AbcdeXyz
- 0: AbcdeX
- \x{1c5}AbXY
- 0: \x{1c5}AbX
- abcDEXypqreXlmn
- 0: abcDEXypqreX
- 1: abcDEX
- ** Failers
+/\H\h\V\v/8
+ X X\x0a
+ 0: X X\x{0a}
+ X\x09X\x0b
+ 0: X\x{09}X\x{0b}
+ ** Failers
No match
- \x{1bb}XY
+ \x{a0} X\x0a
No match
- \x{2b0}XY
+
+/\H*\h+\V?\v{3,4}/8
+ \x09\x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
+ 0: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}\x{0d}
+ 1: \x{09} \x{a0}X\x{0a}\x{0b}\x{0c}
+ \x09\x20\x{a0}\x0a\x0b\x0c\x0d\x0a
+ 0: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}\x{0d}
+ 1: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}
+ \x09\x20\x{a0}\x0a\x0b\x0c
+ 0: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}
+ ** Failers
No match
- !XY
+ \x09\x20\x{a0}\x0a\x0b
No match
-
-/^[\p{L&}]+X/8
- AXY
- 0: AX
- aXY
- 0: aX
- AbcdeXyz
- 0: AbcdeX
- \x{1c5}AbXY
- 0: \x{1c5}AbX
- abcDEXypqreXlmn
- 0: abcDEXypqreX
- 1: abcDEX
- ** Failers
+
+/\H\h\V\v/8
+ \x{3001}\x{3000}\x{2030}\x{2028}
+ 0: \x{3001}\x{3000}\x{2030}\x{2028}
+ X\x{180e}X\x{85}
+ 0: X\x{180e}X\x{85}
+ ** Failers
No match
- \x{1bb}XY
+ \x{2009} X\x0a
No match
- \x{2b0}XY
+
+/\H*\h+\V?\v{3,4}/8
+ \x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x0c\x0d\x0a
+ 0: \x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x{0c}\x{0d}
+ 1: \x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x{0c}
+ \x09\x{205f}\x{a0}\x0a\x{2029}\x0c\x{2028}\x0a
+ 0: \x{09}\x{205f}\x{a0}\x{0a}\x{2029}\x{0c}\x{2028}
+ 1: \x{09}\x{205f}\x{a0}\x{0a}\x{2029}\x{0c}
+ \x09\x20\x{202f}\x0a\x0b\x0c
+ 0: \x{09} \x{202f}\x{0a}\x{0b}\x{0c}
+ ** Failers
No match
- !XY
+ \x09\x{200a}\x{a0}\x{2028}\x0b
No match
-
-/^\p{L&}+?X/8
- AXY
- 0: AX
- aXY
- 0: aX
- AbcdeXyz
- 0: AbcdeX
- \x{1c5}AbXY
- 0: \x{1c5}AbX
- abcDEXypqreXlmn
- 0: abcDEXypqreX
- 1: abcDEX
- ** Failers
+
+/a\Rb/I8<bsr_anycrlf>
+Capturing subpattern count = 0
+Options: bsr_anycrlf utf
+First char = 'a'
+Need char = 'b'
+ a\rb
+ 0: a\x{0d}b
+ a\nb
+ 0: a\x{0a}b
+ a\r\nb
+ 0: a\x{0d}\x{0a}b
+ ** Failers
No match
- \x{1bb}XY
+ a\x{85}b
+No match
+ a\x0bb
+No match
+
+/a\Rb/I8<bsr_unicode>
+Capturing subpattern count = 0
+Options: bsr_unicode utf
+First char = 'a'
+Need char = 'b'
+ a\rb
+ 0: a\x{0d}b
+ a\nb
+ 0: a\x{0a}b
+ a\r\nb
+ 0: a\x{0d}\x{0a}b
+ a\x{85}b
+ 0: a\x{85}b
+ a\x0bb
+ 0: a\x{0b}b
+ ** Failers
No match
- \x{2b0}XY
+ a\x{85}b\<bsr_anycrlf>
No match
- !XY
+ a\x0bb\<bsr_anycrlf>
No match
-
-/^[\p{L&}]+?X/8
- AXY
- 0: AX
- aXY
- 0: aX
- AbcdeXyz
- 0: AbcdeX
- \x{1c5}AbXY
- 0: \x{1c5}AbX
- abcDEXypqreXlmn
- 0: abcDEXypqreX
- 1: abcDEX
- ** Failers
+
+/a\R?b/I8<bsr_anycrlf>
+Capturing subpattern count = 0
+Options: bsr_anycrlf utf
+First char = 'a'
+Need char = 'b'
+ a\rb
+ 0: a\x{0d}b
+ a\nb
+ 0: a\x{0a}b
+ a\r\nb
+ 0: a\x{0d}\x{0a}b
+ ** Failers
No match
- \x{1bb}XY
+ a\x{85}b
+No match
+ a\x0bb
+No match
+
+/a\R?b/I8<bsr_unicode>
+Capturing subpattern count = 0
+Options: bsr_unicode utf
+First char = 'a'
+Need char = 'b'
+ a\rb
+ 0: a\x{0d}b
+ a\nb
+ 0: a\x{0a}b
+ a\r\nb
+ 0: a\x{0d}\x{0a}b
+ a\x{85}b
+ 0: a\x{85}b
+ a\x0bb
+ 0: a\x{0b}b
+ ** Failers
No match
- \x{2b0}XY
+ a\x{85}b\<bsr_anycrlf>
No match
- !XY
+ a\x0bb\<bsr_anycrlf>
No match
+
+/X/8f<any>
+ A\x{1ec5}ABCXYZ
+ 0: X
-/^\P{L&}X/8
- !XY
- 0: !X
- \x{1bb}XY
- 0: \x{1bb}X
- \x{2b0}XY
- 0: \x{2b0}X
- ** Failers
-No match
- \x{1c5}XY
-No match
- AXY
-No match
+/abcd*/8
+ xxxxabcd\P
+ 0: abcd
+ 1: abc
+ xxxxabcd\P\P
+Partial match: abcd
-/^[\P{L&}]X/8
- !XY
- 0: !X
- \x{1bb}XY
- 0: \x{1bb}X
- \x{2b0}XY
- 0: \x{2b0}X
- ** Failers
-No match
- \x{1c5}XY
-No match
- AXY
-No match
+/abcd*/i8
+ xxxxabcd\P
+ 0: abcd
+ 1: abc
+ xxxxabcd\P\P
+Partial match: abcd
+ XXXXABCD\P
+ 0: ABCD
+ 1: ABC
+ XXXXABCD\P\P
+Partial match: ABCD
+
+/abc\d*/8
+ xxxxabc1\P
+ 0: abc1
+ 1: abc
+ xxxxabc1\P\P
+Partial match: abc1
-/^\x{023a}+?(\x{0130}+)/8i
- \x{023a}\x{2c65}\x{0130}
- 0: \x{23a}\x{2c65}\x{130}
+/abc[de]*/8
+ xxxxabcde\P
+ 0: abcde
+ 1: abcd
+ 2: abc
+ xxxxabcde\P\P
+Partial match: abcde
+
+/\bthe cat\b/8
+ the cat\P
+ 0: the cat
+ the cat\P\P
+Partial match: the cat
+
+/ab\Cde/8
+ abXde
+Error -16 (item unsupported for DFA matching)
+
+/(?<=ab\Cde)X/8
+Failed: \C not allowed in lookbehind assertion at offset 10
+
+/./8<CRLF>
+ \r\P
+ 0: \x{0d}
+ \r\P\P
+Partial match: \x{0d}
-/^\x{023a}+([^X])/8i
- \x{023a}\x{2c65}X
- 0: \x{23a}\x{2c65}
-
-/Check property support in non-UTF-8 mode/
-
-/\p{L}{4}/
- 123abcdefg
- 0: abcd
- 123abc\xc4\xc5zz
- 0: abc\xc4
+/.{2,3}/8<CRLF>
+ \r\P
+Partial match: \x{0d}
+ \r\P\P
+Partial match: \x{0d}
+ \r\r\P
+ 0: \x{0d}\x{0d}
+ \r\r\P\P
+Partial match: \x{0d}\x{0d}
+ \r\r\r\P
+ 0: \x{0d}\x{0d}\x{0d}
+ 1: \x{0d}\x{0d}
+ \r\r\r\P\P
+Partial match: \x{0d}\x{0d}\x{0d}
+
+/.{2,3}?/8<CRLF>
+ \r\P
+Partial match: \x{0d}
+ \r\P\P
+Partial match: \x{0d}
+ \r\r\P
+ 0: \x{0d}\x{0d}
+ \r\r\P\P
+Partial match: \x{0d}\x{0d}
+ \r\r\r\P
+ 0: \x{0d}\x{0d}\x{0d}
+ 1: \x{0d}\x{0d}
+ \r\r\r\P\P
+Partial match: \x{0d}\x{0d}\x{0d}
+
+/[^\x{100}]/8
+ \x{100}\x{101}X
+ 0: \x{101}
+
+/[^\x{100}]+/8
+ \x{100}\x{101}X
+ 0: \x{101}X
+ 1: \x{101}
-/ End /
+/-- End of testinput9 --/
diff --git a/lib/stdlib/test/re_testoutput1_replacement_test.erl b/lib/stdlib/test/re_testoutput1_replacement_test.erl
index 30ebab277a..e475b180eb 100644
--- a/lib/stdlib/test/re_testoutput1_replacement_test.erl
+++ b/lib/stdlib/test/re_testoutput1_replacement_test.erl
@@ -19,697 +19,755 @@
-module(re_testoutput1_replacement_test).
-compile(export_all).
-compile(no_native).
--include("test_server.hrl").
%% This file is generated by running run_pcre_tests:gen_repl_test("re_SUITE_data/testoutput1")
run() ->
-?line <<"WkCthe quick brown foxtthe quick brown foxjthe quick brown foxPpfmthe quick brown foxthe quick brown foxy">> = iolist_to_binary(re:replace("the quick brown fox","the quick brown fox","WkC&t\\1\\1&j&Ppfm&&y",[])),
-?line <<"WkCthe quick brown foxtthe quick brown foxjthe quick brown foxPpfmthe quick brown foxthe quick brown foxy">> = iolist_to_binary(re:replace("the quick brown fox","the quick brown fox","WkC&t\\1\\1&j&Ppfm&&y",[global])),
-?line <<"The quick brown FOX">> = iolist_to_binary(re:replace("The quick brown FOX","the quick brown fox","in&&CSwx",[])),
-?line <<"The quick brown FOX">> = iolist_to_binary(re:replace("The quick brown FOX","the quick brown fox","in&&CSwx",[global])),
-?line <<"What do you know about ORtMvuTRHtLthe quick brown foxiYthe quick brown foxGi?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","the quick brown fox","ORtMvuTRHtL&iY&Gi",[])),
-?line <<"What do you know about ORtMvuTRHtLthe quick brown foxiYthe quick brown foxGi?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","the quick brown fox","ORtMvuTRHtL&iY&Gi",[global])),
-?line <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","the quick brown fox","\\1nfTnvooMaxHdXgGO",[])),
-?line <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","the quick brown fox","\\1nfTnvooMaxHdXgGO",[global])),
-?line <<"hSniFQTqBU">> = iolist_to_binary(re:replace("the quick brown fox","The quick brown fox","hSniFQTqBU",[caseless])),
-?line <<"hSniFQTqBU">> = iolist_to_binary(re:replace("the quick brown fox","The quick brown fox","hSniFQTqBU",[caseless,
- global])),
-?line <<"q">> = iolist_to_binary(re:replace("The quick brown FOX","The quick brown fox","q",[caseless])),
-?line <<"q">> = iolist_to_binary(re:replace("The quick brown FOX","The quick brown fox","q",[caseless,
- global])),
-?line <<"What do you know about uJnke?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","The quick brown fox","uJ\\1nke",[caseless])),
-?line <<"What do you know about uJnke?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","The quick brown fox","uJ\\1nke",[caseless,
- global])),
-?line <<"What do you know about VRUTHE QUICK BROWN FOXYgJqUVfiTHE QUICK BROWN FOXqb?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","The quick brown fox","VRU&YgJqUVfi&\\1qb",[caseless])),
-?line <<"What do you know about VRUTHE QUICK BROWN FOXYgJqUVfiTHE QUICK BROWN FOXqb?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","The quick brown fox","VRU&YgJqUVfi&\\1qb",[caseless,
- global])),
-?line <<"jeUmEaUYOfHpPURCabcd
- 9;$\\?caxyz">> = iolist_to_binary(re:replace("abcd
- 9;$\\?caxyz","abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz","jeUmEaUYOfHpPURC&",[])),
-?line <<"jeUmEaUYOfHpPURCabcd
- 9;$\\?caxyz">> = iolist_to_binary(re:replace("abcd
- 9;$\\?caxyz","abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz","jeUmEaUYOfHpPURC&",[global])),
-?line <<"YVh">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","YVh",[])),
-?line <<"YVh">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","YVh",[global])),
-?line <<"wDCxbqXSqpabxyzpqrrrabbxyyyypqAzzX">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","wDCxbqXSqp&X",[])),
-?line <<"wDCxbqXSqpabxyzpqrrrabbxyyyypqAzzX">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","wDCxbqXSqp&X",[global])),
-?line <<"XOnDbhuPYPfGm">> = iolist_to_binary(re:replace("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1XOnDbhuP\\1Y\\1PfGm",[])),
-?line <<"XOnDbhuPYPfGm">> = iolist_to_binary(re:replace("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1XOnDbhuP\\1Y\\1PfGm",[global])),
-?line <<"vgswmIcA">> = iolist_to_binary(re:replace("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","vgswmI\\1cA",[])),
-?line <<"vgswmIcA">> = iolist_to_binary(re:replace("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","vgswmI\\1cA",[global])),
-?line <<"YaaaabxyzpqrrrabbxyyyypqAzzOXXRaa">> = iolist_to_binary(re:replace("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Y&OXXRaa",[])),
-?line <<"YaaaabxyzpqrrrabbxyyyypqAzzOXXRaa">> = iolist_to_binary(re:replace("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Y&OXXRaa",[global])),
-?line <<"CAeqsXe">> = iolist_to_binary(re:replace("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1CAeq\\1s\\1Xe",[])),
-?line <<"CAeqsXe">> = iolist_to_binary(re:replace("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1CAeq\\1s\\1Xe",[global])),
-?line <<"cDLaApdgW">> = iolist_to_binary(re:replace("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","cDLaApdgW",[])),
-?line <<"cDLaApdgW">> = iolist_to_binary(re:replace("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","cDLaApdgW",[global])),
-?line <<"aLfXiUYS">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","aLf\\1XiUYS",[])),
-?line <<"aLfXiUYS">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","aLf\\1XiUYS",[global])),
-?line <<"aaabcxyzpqrrrabbxyyyypqAzzBcaaabcxyzpqrrrabbxyyyypqAzzDAyoYqGn">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1&Bc&DAyoYqGn",[])),
-?line <<"aaabcxyzpqrrrabbxyyyypqAzzBcaaabcxyzpqrrrabbxyyyypqAzzDAyoYqGn">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1&Bc&DAyoYqGn",[global])),
-?line <<"aaabcxyzpqrrrabbxyyyypqqAzzijaaabcxyzpqrrrabbxyyyypqqAzzdIBcB">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&ij&dI\\1BcB",[])),
-?line <<"aaabcxyzpqrrrabbxyyyypqqAzzijaaabcxyzpqrrrabbxyyyypqqAzzdIBcB">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&ij&dI\\1BcB",[global])),
-?line <<"qrxTuPSgEjNvkaaabcxyzpqrrrabbxyyyypqqqAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1qrx\\1\\1TuPSgEjNvk&",[])),
-?line <<"qrxTuPSgEjNvkaaabcxyzpqrrrabbxyyyypqqqAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1qrx\\1\\1TuPSgEjNvk&",[global])),
-?line <<"oWxyrN">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1oWx\\1y\\1rN",[])),
-?line <<"oWxyrN">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1oWx\\1y\\1rN",[global])),
-?line <<"TPbeAcarX">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1T\\1PbeAcarX",[])),
-?line <<"TPbeAcarX">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1T\\1PbeAcarX",[global])),
-?line <<"xWhhgaaabcxyzpqrrrabbxyyyypqqqqqqAzzsHcQaaabcxyzpqrrrabbxyyyypqqqqqqAzzAeU">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","xWh\\1hg&sHcQ&AeU",[])),
-?line <<"xWhhgaaabcxyzpqrrrabbxyyyypqqqqqqAzzsHcQaaabcxyzpqrrrabbxyyyypqqqqqqAzzAeU">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","xWh\\1hg&sHcQ&AeU",[global])),
-?line <<"HasuDgVdEpaaaabcxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Hasu\\1\\1DgV\\1dEp&",[])),
-?line <<"HasuDgVdEpaaaabcxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Hasu\\1\\1DgV\\1dEp&",[global])),
-?line <<"XWMcabxyzzpqrrrabbxyyyypqAzzIUK">> = iolist_to_binary(re:replace("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XWMc&\\1IUK",[])),
-?line <<"XWMcabxyzzpqrrrabbxyyyypqAzzIUK">> = iolist_to_binary(re:replace("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XWMc&\\1IUK",[global])),
-?line <<"UBljDAPnposGdT">> = iolist_to_binary(re:replace("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","UBljDAPnposGdT",[])),
-?line <<"UBljDAPnposGdT">> = iolist_to_binary(re:replace("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","UBljDAPnposGdT",[global])),
-?line <<"boTxGt">> = iolist_to_binary(re:replace("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","boTxGt",[])),
-?line <<"boTxGt">> = iolist_to_binary(re:replace("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","boTxGt",[global])),
-?line <<"mnBWBx">> = iolist_to_binary(re:replace("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","mnB\\1\\1WBx",[])),
-?line <<"mnBWBx">> = iolist_to_binary(re:replace("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","mnB\\1\\1WBx",[global])),
-?line <<"lcgIVpnY">> = iolist_to_binary(re:replace("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","lcgIVpnY\\1",[])),
-?line <<"lcgIVpnY">> = iolist_to_binary(re:replace("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","lcgIVpnY\\1",[global])),
-?line <<"aabcxyzzzpqrrrabbxyyyypqAzznutiQsQaabcxyzzzpqrrrabbxyyyypqAzzokm">> = iolist_to_binary(re:replace("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&n\\1\\1utiQsQ&o\\1km",[])),
-?line <<"aabcxyzzzpqrrrabbxyyyypqAzznutiQsQaabcxyzzzpqrrrabbxyyyypqAzzokm">> = iolist_to_binary(re:replace("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&n\\1\\1utiQsQ&o\\1km",[global])),
-?line <<"rshbaaabcxyzzzzpqrrrabbxyyyypqAzzyCaaabcxyzzzzpqrrrabbxyyyypqAzzFuphTaaabcxyzzzzpqrrrabbxyyyypqAzzb">> = iolist_to_binary(re:replace("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","rshb&yC&FuphT&b",[])),
-?line <<"rshbaaabcxyzzzzpqrrrabbxyyyypqAzzyCaaabcxyzzzzpqrrrabbxyyyypqAzzFuphTaaabcxyzzzzpqrrrabbxyyyypqAzzb">> = iolist_to_binary(re:replace("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","rshb&yC&FuphT&b",[global])),
-?line <<"aaaabcxyzzzzpqrrrabbxyyyypqAzzDpUaaaabcxyzzzzpqrrrabbxyyyypqAzzWxWLwIQUnS">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&DpU&WxW\\1LwIQUnS",[])),
-?line <<"aaaabcxyzzzzpqrrrabbxyyyypqAzzDpUaaaabcxyzzzzpqrrrabbxyyyypqAzzWxWLwIQUnS">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&DpU&WxW\\1LwIQUnS",[global])),
-?line <<"maaaabcxyzzzzpqrrrabbbxyyyypqAzzaaaabcxyzzzzpqrrrabbbxyyyypqAzzdV">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","m\\1&&dV",[])),
-?line <<"maaaabcxyzzzzpqrrrabbbxyyyypqAzzaaaabcxyzzzzpqrrrabbbxyyyypqAzzdV">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","m\\1&&dV",[global])),
-?line <<"qABAquMpjbGrEQl">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","qAB\\1A\\1quMpjbGrEQl",[])),
-?line <<"qABAquMpjbGrEQl">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","qAB\\1A\\1quMpjbGrEQl",[global])),
-?line <<"XEmwtsQHVhnjgxANa">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XEmw\\1tsQHVhn\\1jgx\\1ANa",[])),
-?line <<"XEmwtsQHVhnjgxANa">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XEmw\\1tsQHVhn\\1jgx\\1ANa",[global])),
-?line <<"agMMGdMqblL">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","agMMGdMq\\1blL\\1",[])),
-?line <<"agMMGdMqblL">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","agMMGdMq\\1blL\\1",[global])),
-?line <<">>>EFCLJKUGJXH">> = iolist_to_binary(re:replace(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","EFCLJKUGJXH",[])),
-?line <<">>>EFCLJKUGJXH">> = iolist_to_binary(re:replace(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","EFCLJKUGJXH",[global])),
-?line <<">IW">> = iolist_to_binary(re:replace(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1IW",[])),
-?line <<">IW">> = iolist_to_binary(re:replace(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1IW",[global])),
-?line <<">>>>uiixDteuEA">> = iolist_to_binary(re:replace(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1uiixD\\1teuEA",[])),
-?line <<">>>>uiixDteuEA">> = iolist_to_binary(re:replace(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1uiixD\\1teuEA",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","vayXo\\1eo\\1H",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","vayXo\\1eo\\1H",[global])),
-?line <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","nJK",[])),
-?line <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","nJK",[global])),
-?line <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","msrV\\1",[])),
-?line <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","msrV\\1",[global])),
-?line <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","nVAVmEdY&rfTu",[])),
-?line <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","nVAVmEdY&rfTu",[global])),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&G&\\1eyiM",[])),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&G&\\1eyiM",[global])),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","AIYq\\1nFUePr&s\\1s",[])),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","AIYq\\1nFUePr&s\\1s",[global])),
-?line <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","G\\1\\1XF\\1XcTk&D&Vd",[])),
-?line <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","G\\1\\1XF\\1XcTk&D&Vd",[global])),
-?line <<"NMabcYpabcatqabczzabczzReBo">> = iolist_to_binary(re:replace("abczz","^(abc){1,2}zz","NM\\1Yp\\1atq&&ReBo",[])),
-?line <<"NMabcYpabcatqabczzabczzReBo">> = iolist_to_binary(re:replace("abczz","^(abc){1,2}zz","NM\\1Yp\\1atq&&ReBo",[global])),
-?line <<"PabcabczzabcsubxWpWrabcCabcabczzBDsb">> = iolist_to_binary(re:replace("abcabczz","^(abc){1,2}zz","P&\\1subxWpWr\\1C&BDsb",[])),
-?line <<"PabcabczzabcsubxWpWrabcCabcabczzBDsb">> = iolist_to_binary(re:replace("abcabczz","^(abc){1,2}zz","P&\\1subxWpWr\\1C&BDsb",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(abc){1,2}zz","u&MSQ\\1MwaXNEFxKb\\1v\\1r",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(abc){1,2}zz","u&MSQ\\1MwaXNEFxKb\\1v\\1r",[global])),
-?line <<"zz">> = iolist_to_binary(re:replace("zz","^(abc){1,2}zz","&XIfLMiKJsG&X",[])),
-?line <<"zz">> = iolist_to_binary(re:replace("zz","^(abc){1,2}zz","&XIfLMiKJsG&X",[global])),
-?line <<"abcabcabczz">> = iolist_to_binary(re:replace("abcabcabczz","^(abc){1,2}zz","k\\1S&UT&HR\\1\\1MHKIh&mv",[])),
-?line <<"abcabcabczz">> = iolist_to_binary(re:replace("abcabcabczz","^(abc){1,2}zz","k\\1S&UT&HR\\1\\1MHKIh&mv",[global])),
-?line <<">>abczz">> = iolist_to_binary(re:replace(">>abczz","^(abc){1,2}zz","R\\1GKCdWtC&\\1ULoV",[])),
-?line <<">>abczz">> = iolist_to_binary(re:replace(">>abczz","^(abc){1,2}zz","R\\1GKCdWtC&\\1ULoV",[global])),
-?line <<"bcbcvRuVbMbcbcOSuQfOJbc">> = iolist_to_binary(re:replace("bc","^(b+?|a){1,2}?c","&bcvRuV\\1M&&OSuQfOJ\\1c",[])),
-?line <<"bcbcvRuVbMbcbcOSuQfOJbc">> = iolist_to_binary(re:replace("bc","^(b+?|a){1,2}?c","&bcvRuV\\1M&&OSuQfOJ\\1c",[global])),
-?line <<"L">> = iolist_to_binary(re:replace("bbc","^(b+?|a){1,2}?c","L",[])),
-?line <<"L">> = iolist_to_binary(re:replace("bbc","^(b+?|a){1,2}?c","L",[global])),
-?line <<"pFFAeA">> = iolist_to_binary(re:replace("bbbc","^(b+?|a){1,2}?c","pFFAeA",[])),
-?line <<"pFFAeA">> = iolist_to_binary(re:replace("bbbc","^(b+?|a){1,2}?c","pFFAeA",[global])),
-?line <<"OpEK">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","OpEK",[])),
-?line <<"OpEK">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","OpEK",[global])),
-?line <<"bbacQeabbactAVaalybbacdBwbbac">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","&Qe\\1&tAV\\1\\1ly&dBw&",[])),
-?line <<"bbacQeabbactAVaalybbacdBwbbac">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","&Qe\\1&tAV\\1\\1ly&dBw&",[global])),
-?line <<"atVuxqLMNgBtlattKaT">> = iolist_to_binary(re:replace("aac","^(b+?|a){1,2}?c","\\1tVuxqLMNgBtl\\1ttKaT",[])),
-?line <<"atVuxqLMNgBtlattKaT">> = iolist_to_binary(re:replace("aac","^(b+?|a){1,2}?c","\\1tVuxqLMNgBtl\\1ttKaT",[global])),
-?line <<"Y">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+?|a){1,2}?c","Y",[])),
-?line <<"Y">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+?|a){1,2}?c","Y",[global])),
-?line <<"bbbbbbbbbbbactDhmKI">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+?|a){1,2}?c","&tDhmKI",[])),
-?line <<"bbbbbbbbbbbactDhmKI">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+?|a){1,2}?c","&tDhmKI",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+?|a){1,2}?c","qVVVR&C\\1&etAsmWh",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+?|a){1,2}?c","qVVVR&C\\1&etAsmWh",[global])),
-?line <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+?|a){1,2}?c","jD\\1&q&KCdV&RhT",[])),
-?line <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+?|a){1,2}?c","jD\\1&q&KCdV&RhT",[global])),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+?|a){1,2}?c","\\1jT&nRG",[])),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+?|a){1,2}?c","\\1jT&nRG",[global])),
-?line <<"bcXfvbIubUfhmIRev">> = iolist_to_binary(re:replace("bc","^(b+|a){1,2}c","&Xfv\\1IubUfhmIRev",[])),
-?line <<"bcXfvbIubUfhmIRev">> = iolist_to_binary(re:replace("bc","^(b+|a){1,2}c","&Xfv\\1IubUfhmIRev",[global])),
-?line <<"EbbbbcwbbWbbcVuAOqROLkbbcwbbc">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}c","E\\1&w\\1W&VuAOqROLk&w&",[])),
-?line <<"EbbbbcwbbWbbcVuAOqROLkbbcwbbc">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}c","E\\1&w\\1W&VuAOqROLk&w&",[global])),
-?line <<"I">> = iolist_to_binary(re:replace("bbbc","^(b+|a){1,2}c","I",[])),
-?line <<"I">> = iolist_to_binary(re:replace("bbbc","^(b+|a){1,2}c","I",[global])),
-?line <<"dctSELQIPb">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}c","dctSELQIPb",[])),
-?line <<"dctSELQIPb">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}c","dctSELQIPb",[global])),
-?line <<"kbdarKarpbbacbbacbDO">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}c","kbd\\1rK\\1rp&&bDO",[])),
-?line <<"kbdarKarpbbacbbacbDO">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}c","kbd\\1rK\\1rp&&bDO",[global])),
-?line <<"aFIlpaasKQWsFRadP">> = iolist_to_binary(re:replace("aac","^(b+|a){1,2}c","\\1FIlp\\1\\1sKQWsFR\\1dP",[])),
-?line <<"aFIlpaasKQWsFRadP">> = iolist_to_binary(re:replace("aac","^(b+|a){1,2}c","\\1FIlp\\1\\1sKQWsFR\\1dP",[global])),
-?line <<"bbbbbbbbbbbfbbbbbbbbbbbHo">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+|a){1,2}c","\\1f\\1Ho",[])),
-?line <<"bbbbbbbbbbbfbbbbbbbbbbbHo">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+|a){1,2}c","\\1f\\1Ho",[global])),
-?line <<"bbbbbbbbbbbacOuqvbbbbbbbbbbbaclVwIa">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+|a){1,2}c","&Ouqv&lVwI\\1",[])),
-?line <<"bbbbbbbbbbbacOuqvbbbbbbbbbbbaclVwIa">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+|a){1,2}c","&Ouqv&lVwI\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+|a){1,2}c","\\1sSSP\\1Tw&R&byI\\1TN",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+|a){1,2}c","\\1sSSP\\1Tw&R&byI\\1TN",[global])),
-?line <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+|a){1,2}c","lBeqV\\1ygD\\1oXXqs",[])),
-?line <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+|a){1,2}c","lBeqV\\1ygD\\1oXXqs",[global])),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+|a){1,2}c","HVL\\1kIEVrx\\1hyh\\1&eY\\1R",[])),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+|a){1,2}c","HVL\\1kIEVrx\\1hyh\\1&eY\\1R",[global])),
-?line <<"ScHjJbbcrs">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}?bc","ScHjJ&rs",[])),
-?line <<"ScHjJbbcrs">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}?bc","ScHjJ&rs",[global])),
-?line <<"xbabcCeyVbabcbaXLUCoov">> = iolist_to_binary(re:replace("babc","^(b*|ba){1,2}?bc","x&CeyV&\\1XLUCoov",[])),
-?line <<"xbabcCeyVbabcbaXLUCoov">> = iolist_to_binary(re:replace("babc","^(b*|ba){1,2}?bc","x&CeyV&\\1XLUCoov",[global])),
-?line <<"HbPsbrWbbabcba">> = iolist_to_binary(re:replace("bbabc","^(b*|ba){1,2}?bc","HbPsbrW&\\1",[])),
-?line <<"HbPsbrWbbabcba">> = iolist_to_binary(re:replace("bbabc","^(b*|ba){1,2}?bc","HbPsbrW&\\1",[global])),
-?line <<"IpbababcRBSkmAw">> = iolist_to_binary(re:replace("bababc","^(b*|ba){1,2}?bc","Ip&RBSkmAw",[])),
-?line <<"IpbababcRBSkmAw">> = iolist_to_binary(re:replace("bababc","^(b*|ba){1,2}?bc","Ip&RBSkmAw",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b*|ba){1,2}?bc","e\\1\\1Tx",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b*|ba){1,2}?bc","e\\1\\1Tx",[global])),
-?line <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(b*|ba){1,2}?bc","llyNxYhfjNKiNYM\\1&Ko",[])),
-?line <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(b*|ba){1,2}?bc","llyNxYhfjNKiNYM\\1&Ko",[global])),
-?line <<"babababc">> = iolist_to_binary(re:replace("babababc","^(b*|ba){1,2}?bc","R&TKD\\1JpYJGqtjf",[])),
-?line <<"babababc">> = iolist_to_binary(re:replace("babababc","^(b*|ba){1,2}?bc","R&TKD\\1JpYJGqtjf",[global])),
-?line <<"babcfHFubaafbYLoJba">> = iolist_to_binary(re:replace("babc","^(ba|b*){1,2}?bc","&fHFu\\1afbYLoJ\\1",[])),
-?line <<"babcfHFubaafbYLoJba">> = iolist_to_binary(re:replace("babc","^(ba|b*){1,2}?bc","&fHFu\\1afbYLoJ\\1",[global])),
-?line <<"ewhbbabc">> = iolist_to_binary(re:replace("bbabc","^(ba|b*){1,2}?bc","ewh&",[])),
-?line <<"ewhbbabc">> = iolist_to_binary(re:replace("bbabc","^(ba|b*){1,2}?bc","ewh&",[global])),
-?line <<"L">> = iolist_to_binary(re:replace("bababc","^(ba|b*){1,2}?bc","L",[])),
-?line <<"L">> = iolist_to_binary(re:replace("bababc","^(ba|b*){1,2}?bc","L",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ba|b*){1,2}?bc","\\1wv",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ba|b*){1,2}?bc","\\1wv",[global])),
-?line <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(ba|b*){1,2}?bc","&F",[])),
-?line <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(ba|b*){1,2}?bc","&F",[global])),
-?line <<"babababc">> = iolist_to_binary(re:replace("babababc","^(ba|b*){1,2}?bc","Yk",[])),
-?line <<"babababc">> = iolist_to_binary(re:replace("babababc","^(ba|b*){1,2}?bc","Yk",[global])),
-?line <<"rdI;zTYuI;zcdx">> = iolist_to_binary(re:replace(";z","^\\ca\\cA\\c[\\c{\\c:","rdI&TYuI&cdx\\1",[])),
-?line <<"rdI;zTYuI;zcdx">> = iolist_to_binary(re:replace(";z","^\\ca\\cA\\c[\\c{\\c:","rdI&TYuI&cdx\\1",[global])),
-?line <<"XgOhHATXLthing">> = iolist_to_binary(re:replace("athing","^[ab\\]cde]","XgO\\1hHATXL",[])),
-?line <<"XgOhHATXLthing">> = iolist_to_binary(re:replace("athing","^[ab\\]cde]","XgO\\1hHATXL",[global])),
-?line <<"xIBYFthing">> = iolist_to_binary(re:replace("bthing","^[ab\\]cde]","xIBYF",[])),
-?line <<"xIBYFthing">> = iolist_to_binary(re:replace("bthing","^[ab\\]cde]","xIBYF",[global])),
-?line <<"]lthing">> = iolist_to_binary(re:replace("]thing","^[ab\\]cde]","&l",[])),
-?line <<"]lthing">> = iolist_to_binary(re:replace("]thing","^[ab\\]cde]","&l",[global])),
-?line <<"qbsthing">> = iolist_to_binary(re:replace("cthing","^[ab\\]cde]","\\1qbs",[])),
-?line <<"qbsthing">> = iolist_to_binary(re:replace("cthing","^[ab\\]cde]","\\1qbs",[global])),
-?line <<"gyOCYsthing">> = iolist_to_binary(re:replace("dthing","^[ab\\]cde]","gyOCYs",[])),
-?line <<"gyOCYsthing">> = iolist_to_binary(re:replace("dthing","^[ab\\]cde]","gyOCYs",[global])),
-?line <<"DrUmPIeSUthing">> = iolist_to_binary(re:replace("ething","^[ab\\]cde]","DrUmP\\1IeSU",[])),
-?line <<"DrUmPIeSUthing">> = iolist_to_binary(re:replace("ething","^[ab\\]cde]","DrUmP\\1IeSU",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[ab\\]cde]","Xi\\1luACtdK",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[ab\\]cde]","Xi\\1luACtdK",[global])),
-?line <<"fthing">> = iolist_to_binary(re:replace("fthing","^[ab\\]cde]","&u&Y\\1obNLU\\1tyonhH",[])),
-?line <<"fthing">> = iolist_to_binary(re:replace("fthing","^[ab\\]cde]","&u&Y\\1obNLU\\1tyonhH",[global])),
-?line <<"[thing">> = iolist_to_binary(re:replace("[thing","^[ab\\]cde]","TVEAE&ooeuGQJgKnrqW",[])),
-?line <<"[thing">> = iolist_to_binary(re:replace("[thing","^[ab\\]cde]","TVEAE&ooeuGQJgKnrqW",[global])),
-?line <<"\\thing">> = iolist_to_binary(re:replace("\\thing","^[ab\\]cde]","vRby\\1&",[])),
-?line <<"\\thing">> = iolist_to_binary(re:replace("\\thing","^[ab\\]cde]","vRby\\1&",[global])),
-?line <<"]n]ExaxasbKqYi]CHthing">> = iolist_to_binary(re:replace("]thing","^[]cde]","&n&Ex\\1axa\\1sbKqYi&CH",[])),
-?line <<"]n]ExaxasbKqYi]CHthing">> = iolist_to_binary(re:replace("]thing","^[]cde]","&n&Ex\\1axa\\1sbKqYi&CH",[global])),
-?line <<"nLnsthing">> = iolist_to_binary(re:replace("cthing","^[]cde]","nLns",[])),
-?line <<"nLnsthing">> = iolist_to_binary(re:replace("cthing","^[]cde]","nLns",[global])),
-?line <<"dOETLdnanQKLkkVthing">> = iolist_to_binary(re:replace("dthing","^[]cde]","\\1&OET\\1L&nanQKLkkV",[])),
-?line <<"dOETLdnanQKLkkVthing">> = iolist_to_binary(re:replace("dthing","^[]cde]","\\1&OET\\1L&nanQKLkkV",[global])),
-?line <<"UKthing">> = iolist_to_binary(re:replace("ething","^[]cde]","UK",[])),
-?line <<"UKthing">> = iolist_to_binary(re:replace("ething","^[]cde]","UK",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[]cde]","OEN&h&RDky",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[]cde]","OEN&h&RDky",[global])),
-?line <<"athing">> = iolist_to_binary(re:replace("athing","^[]cde]","ADIYuoD\\1PwBWBN",[])),
-?line <<"athing">> = iolist_to_binary(re:replace("athing","^[]cde]","ADIYuoD\\1PwBWBN",[global])),
-?line <<"fthing">> = iolist_to_binary(re:replace("fthing","^[]cde]","H&UGGJFd\\1Ys\\1xgEg",[])),
-?line <<"fthing">> = iolist_to_binary(re:replace("fthing","^[]cde]","H&UGGJFd\\1Ys\\1xgEg",[global])),
-?line <<"yipHChvHfthing">> = iolist_to_binary(re:replace("fthing","^[^ab\\]cde]","yi\\1pHC\\1hvH&",[])),
-?line <<"yipHChvHfthing">> = iolist_to_binary(re:replace("fthing","^[^ab\\]cde]","yi\\1pHC\\1hvH&",[global])),
-?line <<"pthing">> = iolist_to_binary(re:replace("[thing","^[^ab\\]cde]","p",[])),
-?line <<"pthing">> = iolist_to_binary(re:replace("[thing","^[^ab\\]cde]","p",[global])),
-?line <<"nvbthing">> = iolist_to_binary(re:replace("\\thing","^[^ab\\]cde]","n\\1v\\1b",[])),
-?line <<"nvbthing">> = iolist_to_binary(re:replace("\\thing","^[^ab\\]cde]","n\\1v\\1b",[global])),
-?line <<"o*r*CQayoALTVo** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^ab\\]cde]","o&r&CQa\\1yoALTVo\\1",[])),
-?line <<"o*r*CQayoALTVo** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^ab\\]cde]","o&r&CQa\\1yoALTVo\\1",[global])),
-?line <<"athing">> = iolist_to_binary(re:replace("athing","^[^ab\\]cde]","k\\1&MCQ",[])),
-?line <<"athing">> = iolist_to_binary(re:replace("athing","^[^ab\\]cde]","k\\1&MCQ",[global])),
-?line <<"bthing">> = iolist_to_binary(re:replace("bthing","^[^ab\\]cde]","XKeFQEPnv",[])),
-?line <<"bthing">> = iolist_to_binary(re:replace("bthing","^[^ab\\]cde]","XKeFQEPnv",[global])),
-?line <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^ab\\]cde]","\\1",[])),
-?line <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^ab\\]cde]","\\1",[global])),
-?line <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^ab\\]cde]","NU",[])),
-?line <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^ab\\]cde]","NU",[global])),
-?line <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^ab\\]cde]","GVUo\\1m&I",[])),
-?line <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^ab\\]cde]","GVUo\\1m&I",[global])),
-?line <<"ething">> = iolist_to_binary(re:replace("ething","^[^ab\\]cde]","Ms\\1&GwiawlCHng&EEX",[])),
-?line <<"ething">> = iolist_to_binary(re:replace("ething","^[^ab\\]cde]","Ms\\1&GwiawlCHng&EEX",[global])),
-?line <<"lqtFwcAYthing">> = iolist_to_binary(re:replace("athing","^[^]cde]","lqtFwcAY",[])),
-?line <<"lqtFwcAYthing">> = iolist_to_binary(re:replace("athing","^[^]cde]","lqtFwcAY",[global])),
-?line <<"Fxtpjthing">> = iolist_to_binary(re:replace("fthing","^[^]cde]","Fxt\\1pj",[])),
-?line <<"Fxtpjthing">> = iolist_to_binary(re:replace("fthing","^[^]cde]","Fxt\\1pj",[global])),
-?line <<"xT*oD*U** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^]cde]","xT&oD\\1&U",[])),
-?line <<"xT*oD*U** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^]cde]","xT&oD\\1&U",[global])),
-?line <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^]cde]","R\\1M&\\1m",[])),
-?line <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^]cde]","R\\1M&\\1m",[global])),
-?line <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^]cde]","\\1tF\\1WOFN&fB",[])),
-?line <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^]cde]","\\1tF\\1WOFN&fB",[global])),
-?line <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^]cde]","y\\1I&MoqRPG&GQa\\1l",[])),
-?line <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^]cde]","y\\1I&MoqRPG&GQa\\1l",[global])),
-?line <<"ething">> = iolist_to_binary(re:replace("ething","^[^]cde]","AsxwUn\\1GqkWNdgRJk",[])),
-?line <<"ething">> = iolist_to_binary(re:replace("ething","^[^]cde]","AsxwUn\\1GqkWNdgRJk",[global])),
-?line <<"RornKmOnaFrtWgtW">> = iolist_to_binary(re:replace("","^\\","R\\1o\\1r\\1nKmOnaFr&tWgtW",[])),
-?line <<"RornKmOnaFrtWgtW">> = iolist_to_binary(re:replace("","^\\","R\\1o\\1r\\1nKmOnaFr&tWgtW",[global])),
-?line <<"ufbmbfOYuKÿwfÿEÿdx">> = iolist_to_binary(re:replace("ÿ","^ÿ","ufbmbfOYuK&wf&E&\\1dx",[])),
-?line <<"ufbmbfOYuKÿwfÿEÿdx">> = iolist_to_binary(re:replace("ÿ","^ÿ","ufbmbfOYuK&wf&E&\\1dx",[global])),
-?line <<"oAdJme0jw">> = iolist_to_binary(re:replace("0","^[0-9]+$","oAdJme\\1&jw",[])),
-?line <<"oAdJme0jw">> = iolist_to_binary(re:replace("0","^[0-9]+$","oAdJme\\1&jw",[global])),
-?line <<"1aoKN">> = iolist_to_binary(re:replace("1","^[0-9]+$","&aoKN",[])),
-?line <<"1aoKN">> = iolist_to_binary(re:replace("1","^[0-9]+$","&aoKN",[global])),
-?line <<"tIHn">> = iolist_to_binary(re:replace("2","^[0-9]+$","tIHn\\1",[])),
-?line <<"tIHn">> = iolist_to_binary(re:replace("2","^[0-9]+$","tIHn\\1",[global])),
-?line <<"wgA3cJbrrCyMvMXM3">> = iolist_to_binary(re:replace("3","^[0-9]+$","wgA&cJbrrCyMv\\1M\\1XM&",[])),
-?line <<"wgA3cJbrrCyMvMXM3">> = iolist_to_binary(re:replace("3","^[0-9]+$","wgA&cJbrrCyMv\\1M\\1XM&",[global])),
-?line <<"huUpJ">> = iolist_to_binary(re:replace("4","^[0-9]+$","huUpJ",[])),
-?line <<"huUpJ">> = iolist_to_binary(re:replace("4","^[0-9]+$","huUpJ",[global])),
-?line <<"Fe5F5">> = iolist_to_binary(re:replace("5","^[0-9]+$","F\\1e&F&",[])),
-?line <<"Fe5F5">> = iolist_to_binary(re:replace("5","^[0-9]+$","F\\1e&F&",[global])),
-?line <<"HJ">> = iolist_to_binary(re:replace("6","^[0-9]+$","HJ",[])),
-?line <<"HJ">> = iolist_to_binary(re:replace("6","^[0-9]+$","HJ",[global])),
-?line <<"e">> = iolist_to_binary(re:replace("7","^[0-9]+$","e",[])),
-?line <<"e">> = iolist_to_binary(re:replace("7","^[0-9]+$","e",[global])),
-?line <<"Fmds88NtMX">> = iolist_to_binary(re:replace("8","^[0-9]+$","F\\1mds&&Nt\\1MX",[])),
-?line <<"Fmds88NtMX">> = iolist_to_binary(re:replace("8","^[0-9]+$","F\\1mds&&Nt\\1MX",[global])),
-?line <<"99cE9SqMch">> = iolist_to_binary(re:replace("9","^[0-9]+$","&&cE&\\1SqMch",[])),
-?line <<"99cE9SqMch">> = iolist_to_binary(re:replace("9","^[0-9]+$","&&cE&\\1SqMch",[global])),
-?line <<"xhR">> = iolist_to_binary(re:replace("10","^[0-9]+$","xhR",[])),
-?line <<"xhR">> = iolist_to_binary(re:replace("10","^[0-9]+$","xhR",[global])),
-?line <<"j100">> = iolist_to_binary(re:replace("100","^[0-9]+$","j&",[])),
-?line <<"j100">> = iolist_to_binary(re:replace("100","^[0-9]+$","j&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[0-9]+$","SR&tOYsEgJid&hfCF",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[0-9]+$","SR&tOYsEgJid&hfCF",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","^[0-9]+$","JK&",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","^[0-9]+$","JK&",[global])),
-?line <<"rXjkB">> = iolist_to_binary(re:replace("enter","^.*nter","rXjkB",[])),
-?line <<"rXjkB">> = iolist_to_binary(re:replace("enter","^.*nter","rXjkB",[global])),
-?line <<"oOEtqV">> = iolist_to_binary(re:replace("inter","^.*nter","oO\\1EtqV",[])),
-?line <<"oOEtqV">> = iolist_to_binary(re:replace("inter","^.*nter","oO\\1EtqV",[global])),
-?line <<"">> = iolist_to_binary(re:replace("uponter","^.*nter","\\1",[])),
-?line <<"">> = iolist_to_binary(re:replace("uponter","^.*nter","\\1",[global])),
-?line <<"SODUcOgFnbuQEN">> = iolist_to_binary(re:replace("xxx0","^xxx[0-9]+$","\\1\\1SODU\\1\\1cOgFnbuQEN",[])),
-?line <<"SODUcOgFnbuQEN">> = iolist_to_binary(re:replace("xxx0","^xxx[0-9]+$","\\1\\1SODU\\1\\1cOgFnbuQEN",[global])),
-?line <<"hsacOxxx1234kudxxx1234sEIrIdI">> = iolist_to_binary(re:replace("xxx1234","^xxx[0-9]+$","hsacO\\1&kud&s\\1EIrIdI\\1",[])),
-?line <<"hsacOxxx1234kudxxx1234sEIrIdI">> = iolist_to_binary(re:replace("xxx1234","^xxx[0-9]+$","hsacO\\1&kud&s\\1EIrIdI\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^xxx[0-9]+$","e",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^xxx[0-9]+$","e",[global])),
-?line <<"xxx">> = iolist_to_binary(re:replace("xxx","^xxx[0-9]+$","oSBYD&M",[])),
-?line <<"xxx">> = iolist_to_binary(re:replace("xxx","^xxx[0-9]+$","oSBYD&M",[global])),
-?line <<"x123HgGUYCx123PowSBtYb">> = iolist_to_binary(re:replace("x123","^.+[0-9][0-9][0-9]$","&HgGUYC&PowSBtY\\1b",[])),
-?line <<"x123HgGUYCx123PowSBtYb">> = iolist_to_binary(re:replace("x123","^.+[0-9][0-9][0-9]$","&HgGUYC&PowSBtY\\1b",[global])),
-?line <<"mEVxx123SNuYPQIaJ">> = iolist_to_binary(re:replace("xx123","^.+[0-9][0-9][0-9]$","mE\\1V\\1&SNuYPQIa\\1J",[])),
-?line <<"mEVxx123SNuYPQIaJ">> = iolist_to_binary(re:replace("xx123","^.+[0-9][0-9][0-9]$","mE\\1V\\1&SNuYPQIa\\1J",[global])),
-?line <<"l123456O123456">> = iolist_to_binary(re:replace("123456","^.+[0-9][0-9][0-9]$","l&O&",[])),
-?line <<"l123456O123456">> = iolist_to_binary(re:replace("123456","^.+[0-9][0-9][0-9]$","l&O&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+[0-9][0-9][0-9]$","MX&hxvs",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+[0-9][0-9][0-9]$","MX&hxvs",[global])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^.+[0-9][0-9][0-9]$","RBYgTXkgO&TLdWqjEUps",[])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^.+[0-9][0-9][0-9]$","RBYgTXkgO&TLdWqjEUps",[global])),
-?line <<"fgx1234">> = iolist_to_binary(re:replace("x1234","^.+[0-9][0-9][0-9]$","fg&",[])),
-?line <<"fgx1234">> = iolist_to_binary(re:replace("x1234","^.+[0-9][0-9][0-9]$","fg&",[global])),
-?line <<"FLbkgx123RdPrD">> = iolist_to_binary(re:replace("x123","^.+?[0-9][0-9][0-9]$","FLbkg&R\\1dPrD",[])),
-?line <<"FLbkgx123RdPrD">> = iolist_to_binary(re:replace("x123","^.+?[0-9][0-9][0-9]$","FLbkg&R\\1dPrD",[global])),
-?line <<"C">> = iolist_to_binary(re:replace("xx123","^.+?[0-9][0-9][0-9]$","C",[])),
-?line <<"C">> = iolist_to_binary(re:replace("xx123","^.+?[0-9][0-9][0-9]$","C",[global])),
-?line <<"oWjVDKTAoaLU">> = iolist_to_binary(re:replace("123456","^.+?[0-9][0-9][0-9]$","oW\\1jVDK\\1TAoaLU",[])),
-?line <<"oWjVDKTAoaLU">> = iolist_to_binary(re:replace("123456","^.+?[0-9][0-9][0-9]$","oW\\1jVDK\\1TAoaLU",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+?[0-9][0-9][0-9]$","xA&\\1sIV",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+?[0-9][0-9][0-9]$","xA&\\1sIV",[global])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^.+?[0-9][0-9][0-9]$","ONX&",[])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^.+?[0-9][0-9][0-9]$","ONX&",[global])),
-?line <<"oLgQtiSmGx1234wqbuoRB">> = iolist_to_binary(re:replace("x1234","^.+?[0-9][0-9][0-9]$","\\1oLgQtiSm\\1\\1G&wqbuoRB",[])),
-?line <<"oLgQtiSmGx1234wqbuoRB">> = iolist_to_binary(re:replace("x1234","^.+?[0-9][0-9][0-9]$","\\1oLgQtiSm\\1\\1G&wqbuoRB",[global])),
-?line <<"mcpuCvaabc!pqr=apquxz.ixr.zzz.ac.ukgabc!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","mcpuCva&g&",[])),
-?line <<"mcpuCvaabc!pqr=apquxz.ixr.zzz.ac.ukgabc!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","mcpuCva&g&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","J&a\\1HaapJjylMMyeA\\1e",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","J&a\\1HaapJjylMMyeA\\1e",[global])),
-?line <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","FOOFh&nQLU\\1c",[])),
-?line <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","FOOFh&nQLU\\1c",[global])),
-?line <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","H\\1G",[])),
-?line <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","H\\1G",[global])),
-?line <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","&tBS&",[])),
-?line <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","&tBS&",[global])),
-?line <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","Gd&\\1CN\\1",[])),
-?line <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","Gd&\\1CN\\1",[global])),
-?line <<"Well, we need a colonGTdcJbUips: somewhere">> = iolist_to_binary(re:replace("Well, we need a colon: somewhere",":","GTdc\\1J\\1bUips\\1&",[])),
-?line <<"Well, we need a colonGTdcJbUips: somewhere">> = iolist_to_binary(re:replace("Well, we need a colon: somewhere",":","GTdc\\1J\\1bUips\\1&",[global])),
-?line <<"*** Fail if we don't">> = iolist_to_binary(re:replace("*** Fail if we don't",":","d",[])),
-?line <<"*** Fail if we don't">> = iolist_to_binary(re:replace("*** Fail if we don't",":","d",[global])),
-?line <<"0abcDqVs0abc0abcptNR">> = iolist_to_binary(re:replace("0abc","([\\da-f:]+)$","\\1DqVs\\1\\1ptNR",[caseless])),
-?line <<"0abcDqVs0abc0abcptNR">> = iolist_to_binary(re:replace("0abc","([\\da-f:]+)$","\\1DqVs\\1\\1ptNR",[caseless,
- global])),
-?line <<"abctJK">> = iolist_to_binary(re:replace("abc","([\\da-f:]+)$","&tJK",[caseless])),
-?line <<"abctJK">> = iolist_to_binary(re:replace("abc","([\\da-f:]+)$","&tJK",[caseless,
- global])),
-?line <<"quighClnfedRB">> = iolist_to_binary(re:replace("fed","([\\da-f:]+)$","quighCln\\1RB",[caseless])),
-?line <<"quighClnfedRB">> = iolist_to_binary(re:replace("fed","([\\da-f:]+)$","quighCln\\1RB",[caseless,
- global])),
-?line <<"ENd">> = iolist_to_binary(re:replace("E","([\\da-f:]+)$","\\1Nd",[caseless])),
-?line <<"ENd">> = iolist_to_binary(re:replace("E","([\\da-f:]+)$","\\1Nd",[caseless,
- global])),
-?line <<"o::U::lkIj::XoRWPah::s">> = iolist_to_binary(re:replace("::","([\\da-f:]+)$","o&U&lkIj\\1XoRWPah&s",[caseless])),
-?line <<"o::U::lkIj::XoRWPah::s">> = iolist_to_binary(re:replace("::","([\\da-f:]+)$","o&U&lkIj\\1XoRWPah&s",[caseless,
- global])),
-?line <<"ab5f03:12C0::932eONbt5f03:12C0::932ehnfLI5f03:12C0::932esqYx5f03:12C0::932e">> = iolist_to_binary(re:replace("5f03:12C0::932e","([\\da-f:]+)$","ab&ONbt\\1hnfLI\\1sqYx&",[caseless])),
-?line <<"ab5f03:12C0::932eONbt5f03:12C0::932ehnfLI5f03:12C0::932esqYx5f03:12C0::932e">> = iolist_to_binary(re:replace("5f03:12C0::932e","([\\da-f:]+)$","ab&ONbt\\1hnfLI\\1sqYx&",[caseless,
- global])),
-?line <<"fed OAMdefijvdef">> = iolist_to_binary(re:replace("fed def","([\\da-f:]+)$","OAM\\1ijv&",[caseless])),
-?line <<"fed OAMdefijvdef">> = iolist_to_binary(re:replace("fed def","([\\da-f:]+)$","OAM\\1ijv&",[caseless,
- global])),
-?line <<"Any old stuSVffaffeYffCjDlYffhWTMo">> = iolist_to_binary(re:replace("Any old stuff","([\\da-f:]+)$","SV&a\\1eY&CjDlY&hWTMo",[caseless])),
-?line <<"Any old stuSVffaffeYffCjDlYffhWTMo">> = iolist_to_binary(re:replace("Any old stuff","([\\da-f:]+)$","SV&a\\1eY&CjDlY&hWTMo",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","([\\da-f:]+)$","j&R\\1oXiR",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","([\\da-f:]+)$","j&R\\1oXiR",[caseless,
- global])),
-?line <<"0zzz">> = iolist_to_binary(re:replace("0zzz","([\\da-f:]+)$","&HUuWH\\1&VEg",[caseless])),
-?line <<"0zzz">> = iolist_to_binary(re:replace("0zzz","([\\da-f:]+)$","&HUuWH\\1&VEg",[caseless,
- global])),
-?line <<"gzzz">> = iolist_to_binary(re:replace("gzzz","([\\da-f:]+)$","l&n&p&DKUsLBFC",[caseless])),
-?line <<"gzzz">> = iolist_to_binary(re:replace("gzzz","([\\da-f:]+)$","l&n&p&DKUsLBFC",[caseless,
- global])),
-?line <<"fed ">> = iolist_to_binary(re:replace("fed ","([\\da-f:]+)$","KuLffd&Y",[caseless])),
-?line <<"fed ">> = iolist_to_binary(re:replace("fed ","([\\da-f:]+)$","KuLffd&Y",[caseless,
- global])),
-?line <<"Any old rubbish">> = iolist_to_binary(re:replace("Any old rubbish","([\\da-f:]+)$","Mid\\1",[caseless])),
-?line <<"Any old rubbish">> = iolist_to_binary(re:replace("Any old rubbish","([\\da-f:]+)$","Mid\\1",[caseless,
+ run0(),
+ run1(),
+ run2(),
+ run3(),
+ run4(),
+ run5(),
+ run6(),
+ run7(),
+ run8(),
+ run9(),
+ run10(),
+ run11(),
+ run12(),
+ run13(),
+ run14(),
+ run15(),
+ run16(),
+ run17(),
+ run18(),
+ run19(),
+ run20(),
+ run21(),
+ run22(),
+ run23(),
+ run24(),
+ run25(),
+ run26(),
+ run27(),
+ run28(),
+ run29(),
+ run30(),
+ run31(),
+ run32(),
+ run33(),
+ run34(),
+ run35(),
+ run36(),
+ run37(),
+ run38(),
+ run39(),
+ run40(),
+ run41(),
+ run42(),
+ run43(),
+ run44(),
+ run45(),
+ run46(),
+ run47(),
+ run48(),
+ run49(),
+ run50(),
+ run51(),
+ run52(),
+ run53(),
+ run54(),
+ ok.
+run0() ->
+ <<"KXii">> = iolist_to_binary(re:replace("the quick brown fox","the quick brown fox","KXii",[])),
+ <<"KXii">> = iolist_to_binary(re:replace("the quick brown fox","the quick brown fox","KXii",[global])),
+ <<"The quick brown FOX">> = iolist_to_binary(re:replace("The quick brown FOX","the quick brown fox","HRC\\1&rBc&X&M\\1",[])),
+ <<"The quick brown FOX">> = iolist_to_binary(re:replace("The quick brown FOX","the quick brown fox","HRC\\1&rBc&X&M\\1",[global])),
+ <<"What do you know about Hthe quick brown foxgViGthe quick brown fox?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","the quick brown fox","H&gViG\\1&",[])),
+ <<"What do you know about Hthe quick brown foxgViGthe quick brown fox?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","the quick brown fox","H&gViG\\1&",[global])),
+ <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","the quick brown fox","N&hDtbGaV",[])),
+ <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","the quick brown fox","N&hDtbGaV",[global])),
+ <<"hQCthe quick brown foxthe quick brown foxjQpvbBuHjthe quick brown foxw">> = iolist_to_binary(re:replace("the quick brown fox","The quick brown fox","hQC&&jQ\\1pvbBuHj&w",[caseless])),
+ <<"hQCthe quick brown foxthe quick brown foxjQpvbBuHjthe quick brown foxw">> = iolist_to_binary(re:replace("the quick brown fox","The quick brown fox","hQC&&jQ\\1pvbBuHj&w",[caseless,
+ global])),
+ <<"gkWwP">> = iolist_to_binary(re:replace("The quick brown FOX","The quick brown fox","gkWwP",[caseless])),
+ <<"gkWwP">> = iolist_to_binary(re:replace("The quick brown FOX","The quick brown fox","gkWwP",[caseless,
+ global])),
+ <<"What do you know about ncBxuJXMsIrBx?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","The quick brown fox","ncBxuJXMsIr\\1Bx",[caseless])),
+ <<"What do you know about ncBxuJXMsIrBx?">> = iolist_to_binary(re:replace("What do you know about the quick brown fox?","The quick brown fox","ncBxuJXMsIr\\1Bx",[caseless,
+ global])),
+ <<"What do you know about ESkbGx?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","The quick brown fox","ESkbGx",[caseless])),
+ <<"What do you know about ESkbGx?">> = iolist_to_binary(re:replace("What do you know about THE QUICK BROWN FOX?","The quick brown fox","ESkbGx",[caseless,
+ global])),
+ <<"UImxeSkabcd
+ 9;$\\?caxyzF">> = iolist_to_binary(re:replace("abcd
+ 9;$\\?caxyz","abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz","UImxeSk&F",[])),
+ <<"UImxeSkabcd
+ 9;$\\?caxyzF">> = iolist_to_binary(re:replace("abcd
+ 9;$\\?caxyz","abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz","UImxeSk&F",[global])),
+ <<"LhHLabxyzpqrrrabbxyyyypqAzzkWRsxabxyzpqrrrabbxyyyypqAzzVMIt">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","LhHL&kWRsx\\1\\1&VMIt",[])),
+ <<"LhHLabxyzpqrrrabbxyyyypqAzzkWRsxabxyzpqrrrabbxyyyypqAzzVMIt">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","LhHL&kWRsx\\1\\1&VMIt",[global])),
+ <<"HLabxyzpqrrrabbxyyyypqAzzOTupMnssabxyzpqrrrabbxyyyypqAzzJs">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","HL&OTupMnss&\\1Js",[])),
+ <<"HLabxyzpqrrrabbxyyyypqAzzOTupMnssabxyzpqrrrabbxyyyypqAzzJs">> = iolist_to_binary(re:replace("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","HL&OTupMnss&\\1Js",[global])),
+ <<"HrnoCAoMBaabxyzpqrrrabbxyyyypqAzzUYaabxyzpqrrrabbxyyyypqAzzXaabxyzpqrrrabbxyyyypqAzzaabxyzpqrrrabbxyyyypqAzzaabxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","HrnoCA\\1oM\\1B&\\1UY&X&&&",[])),
+ <<"HrnoCAoMBaabxyzpqrrrabbxyyyypqAzzUYaabxyzpqrrrabbxyyyypqAzzXaabxyzpqrrrabbxyyyypqAzzaabxyzpqrrrabbxyyyypqAzzaabxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","HrnoCA\\1oM\\1B&\\1UY&X&&&",[global])),
+ <<"aaabxyzpqrrrabbxyyyypqAzzsiD">> = iolist_to_binary(re:replace("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&siD",[])),
+ <<"aaabxyzpqrrrabbxyyyypqAzzsiD">> = iolist_to_binary(re:replace("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&siD",[global])),
+ <<"aaaabxyzpqrrrabbxyyyypqAzzqgRtoWloBl">> = iolist_to_binary(re:replace("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&q\\1gRt\\1oWloB\\1\\1\\1l",[])),
+ <<"aaaabxyzpqrrrabbxyyyypqAzzqgRtoWloBl">> = iolist_to_binary(re:replace("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&q\\1gRt\\1oWloB\\1\\1\\1l",[global])),
+ <<"sRmsQabcxyzpqrrrabbxyyyypqAzzThd">> = iolist_to_binary(re:replace("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sRmsQ&Thd",[])),
+ <<"sRmsQabcxyzpqrrrabbxyyyypqAzzThd">> = iolist_to_binary(re:replace("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sRmsQ&Thd",[global])),
+ <<"aabcxyzpqrrrabbxyyyypqAzzRHoaabcxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&RHo&",[])),
+ <<"aabcxyzpqrrrabbxyyyypqAzzRHoaabcxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&RHo&",[global])),
+ <<"kaaabcxyzpqrrrabbxyyyypAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","k\\1&",[])),
+ <<"kaaabcxyzpqrrrabbxyyyypAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","k\\1&",[global])),
+ <<"RxvGiseEerlAfPpFb">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","RxvGiseEerlAfPp\\1F\\1b",[])),
+ <<"RxvGiseEerlAfPpFb">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","RxvGiseEerlAfPp\\1F\\1b",[global])),
+ <<"sUgRgemex">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sUgR\\1gem\\1ex\\1",[])),
+ <<"sUgRgemex">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sUgR\\1gem\\1ex\\1",[global])),
+ <<"S">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","S",[])),
+ <<"S">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","S",[global])),
+ <<"QCVAHkaaabcxyzpqrrrabbxyyyypqqqqAzzCsM">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","QCVAHk&CsM",[])),
+ <<"QCVAHkaaabcxyzpqrrrabbxyyyypqqqqAzzCsM">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","QCVAHk&CsM",[global])),
+ <<"kV">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","kV",[])),
+ <<"kV">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","kV",[global])),
+ <<"sEX">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sEX",[])),
+ <<"sEX">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sEX",[global])),
+ <<"lgaaaabcxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1lg&",[])),
+ <<"lgaaaabcxyzpqrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1lg&",[global])),
+ <<"H">> = iolist_to_binary(re:replace("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","H",[])),
+ <<"H">> = iolist_to_binary(re:replace("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","H",[global])),
+ <<"sLyaabxyzzzpqrrrabbxyyyypqAzzJJPghXisEdXaabxyzzzpqrrrabbxyyyypqAzzS">> = iolist_to_binary(re:replace("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sLy&JJPghXi\\1sEdX&S\\1",[])),
+ <<"sLyaabxyzzzpqrrrabbxyyyypqAzzJJPghXisEdXaabxyzzzpqrrrabbxyyyypqAzzS">> = iolist_to_binary(re:replace("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","sLy&JJPghXi\\1sEdX&S\\1",[global])),
+ <<"">> = iolist_to_binary(re:replace("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1",[])),
+ <<"">> = iolist_to_binary(re:replace("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1",[global])),
+ <<"XHrPpSaaaabxyzzzzpqrrrabbxyyyypqAzzgAh">> = iolist_to_binary(re:replace("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XHr\\1PpS&gAh",[])),
+ <<"XHrPpSaaaabxyzzzzpqrrrabbxyyyypqAzzgAh">> = iolist_to_binary(re:replace("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XHr\\1PpS&gAh",[global])),
+ <<"NeJBabcxyzzpqrrrabbxyyyypqAzzGo">> = iolist_to_binary(re:replace("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","NeJB&Go",[])),
+ <<"NeJBabcxyzzpqrrrabbxyyyypqAzzGo">> = iolist_to_binary(re:replace("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","NeJB&Go",[global])),
+ <<"mu">> = iolist_to_binary(re:replace("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","mu",[])),
+ <<"mu">> = iolist_to_binary(re:replace("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","mu",[global])),
+ <<"aaabcxyzzzzpqrrrabbxyyyypqAzzaaabcxyzzzzpqrrrabbxyyyypqAzzN">> = iolist_to_binary(re:replace("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&&N",[])),
+ <<"aaabcxyzzzzpqrrrabbxyyyypqAzzaaabcxyzzzzpqrrrabbxyyyypqAzzN">> = iolist_to_binary(re:replace("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","&&N",[global])),
+ <<"TY">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","TY",[])),
+ <<"TY">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","TY",[global])),
+ <<"BSUyMaaaabcxyzzzzpqrrrabbbxyyyypqAzzeeab">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","BSUyM&e\\1eab",[])),
+ <<"BSUyMaaaabcxyzzzzpqrrrabbbxyyyypqAzzeeab">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","BSUyM&e\\1eab",[global])),
+ <<"bLbpTaaaabcxyzzzzpqrrrabbbxyyyyypqAzzcn">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1bLbp\\1T&cn",[])),
+ <<"bLbpTaaaabcxyzzzzpqrrrabbbxyyyyypqAzzcn">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1bLbp\\1T&cn",[global])),
+ <<"qOqibaaabcxyzpqrrrabbxyyyypABzzFnNENBaaabcxyzpqrrrabbxyyyypABzza">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","qOqib&F\\1\\1nNENB\\1&a",[])),
+ <<"qOqibaaabcxyzpqrrrabbxyyyypABzzFnNENBaaabcxyzpqrrrabbxyyyypABzza">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","qOqib&F\\1\\1nNENB\\1&a",[global])),
+ <<"SBfQjRuQKXkm">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","SBf\\1\\1QjR\\1uQKXkm\\1",[])),
+ <<"SBfQjRuQKXkm">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","SBf\\1\\1QjR\\1uQKXkm\\1",[global])),
+ <<">>>bVaaabxyzpqrrrabbxyyyypqAzzaaabxyzpqrrrabbxyyyypqAzzAiToCwaaabxyzpqrrrabbxyyyypqAzzcehOK">> = iolist_to_binary(re:replace(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","bV\\1\\1&&\\1AiToCw&cehOK",[])),
+ <<">>>bVaaabxyzpqrrrabbxyyyypqAzzaaabxyzpqrrrabbxyyyypqAzzAiToCwaaabxyzpqrrrabbxyyyypqAzzcehOK">> = iolist_to_binary(re:replace(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","bV\\1\\1&&\\1AiToCw&cehOK",[global])),
+ <<">RYHNAEdfNPaaaabxyzpqrrrabbxyyyypqAzzHLi">> = iolist_to_binary(re:replace(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","RY\\1HNA\\1\\1EdfNP&HLi",[])),
+ <<">RYHNAEdfNPaaaabxyzpqrrrabbxyyyypqAzzHLi">> = iolist_to_binary(re:replace(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","RY\\1HNA\\1\\1EdfNP&HLi",[global])),
+ <<">>>>wRIXabcxyzpqrrrabbxyyyypqAzzhabcxyzpqrrrabbxyyyypqAzzaCoikaFu">> = iolist_to_binary(re:replace(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1wRIX&h&aCoika\\1Fu",[])),
+ <<">>>>wRIXabcxyzpqrrrabbxyyyypqAzzhabcxyzpqrrrabbxyyyypqAzzaCoikaFu">> = iolist_to_binary(re:replace(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","\\1wRIX&h&aCoika\\1Fu",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XSdFB",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","XSdFB",[global])),
+ <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","p&sjpo&\\1MeLw",[])),
+ <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","p&sjpo&\\1MeLw",[global])),
+ <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Np\\1BvTaI&WRss&",[])),
+ <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Np\\1BvTaI&WRss&",[global])),
+ <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Jm\\1&IqjePLT",[])),
+ <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(re:replace("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","Jm\\1&IqjePLT",[global])),
+ <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","X&\\1EJejYwBT\\1N&Vu\\1\\1hj",[])),
+ <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","X&\\1EJejYwBT\\1N&Vu\\1\\1hj",[global])),
+ <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","ACr\\1ExPn&TggeSRc&pgC",[])),
+ <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(re:replace("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","ACr\\1ExPn&TggeSRc&pgC",[global])),
+ <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","AQG",[])),
+ <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(re:replace("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz","AQG",[global])),
+ <<"Ms">> = iolist_to_binary(re:replace("abczz","^(abc){1,2}zz","Ms",[])),
+ <<"Ms">> = iolist_to_binary(re:replace("abczz","^(abc){1,2}zz","Ms",[global])),
+ <<"abcjqKYJWAabcabczzXCsCP">> = iolist_to_binary(re:replace("abcabczz","^(abc){1,2}zz","\\1jqKYJWA&XCsCP",[])),
+ <<"abcjqKYJWAabcabczzXCsCP">> = iolist_to_binary(re:replace("abcabczz","^(abc){1,2}zz","\\1jqKYJWA&XCsCP",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(abc){1,2}zz","Q\\1PQoCjb\\1eQ&\\1JaSTQ",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(abc){1,2}zz","Q\\1PQoCjb\\1eQ&\\1JaSTQ",[global])),
+ <<"zz">> = iolist_to_binary(re:replace("zz","^(abc){1,2}zz","DxU",[])),
+ <<"zz">> = iolist_to_binary(re:replace("zz","^(abc){1,2}zz","DxU",[global])),
+ <<"abcabcabczz">> = iolist_to_binary(re:replace("abcabcabczz","^(abc){1,2}zz","wRiyMR&vafm&",[])),
+ <<"abcabcabczz">> = iolist_to_binary(re:replace("abcabcabczz","^(abc){1,2}zz","wRiyMR&vafm&",[global])),
+ <<">>abczz">> = iolist_to_binary(re:replace(">>abczz","^(abc){1,2}zz","fCQBocoTpl&om",[])),
+ <<">>abczz">> = iolist_to_binary(re:replace(">>abczz","^(abc){1,2}zz","fCQBocoTpl&om",[global])),
+ <<"BbtYviciAuOmX">> = iolist_to_binary(re:replace("bc","^(b+?|a){1,2}?c","B\\1tYviciAuOmX",[])),
+ <<"BbtYviciAuOmX">> = iolist_to_binary(re:replace("bc","^(b+?|a){1,2}?c","B\\1tYviciAuOmX",[global])),
+ <<"bbcbbcmoxNDbcM">> = iolist_to_binary(re:replace("bbc","^(b+?|a){1,2}?c","&&moxND\\1cM",[])),
+ <<"bbcbbcmoxNDbcM">> = iolist_to_binary(re:replace("bbc","^(b+?|a){1,2}?c","&&moxND\\1cM",[global])),
+ <<"HmYAbbbcbbuUEdmhvgxQbbbb">> = iolist_to_binary(re:replace("bbbc","^(b+?|a){1,2}?c","HmYA&\\1uUEdmhvgxQ\\1\\1",[])),
+ <<"HmYAbbbcbbuUEdmhvgxQbbbb">> = iolist_to_binary(re:replace("bbbc","^(b+?|a){1,2}?c","HmYA&\\1uUEdmhvgxQ\\1\\1",[global])),
+ <<"YRq">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","YRq",[])),
+ <<"YRq">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","YRq",[global])),
+ <<"bbacaOVQYgoesBaHi">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","&\\1OVQYgoesB\\1Hi",[])),
+ <<"bbacaOVQYgoesBaHi">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","&\\1OVQYgoesB\\1Hi",[global])),
+ <<"dIraaacvlpk">> = iolist_to_binary(re:replace("aac","^(b+?|a){1,2}?c","dIr\\1&vlpk",[])),
+ <<"dIraaacvlpk">> = iolist_to_binary(re:replace("aac","^(b+?|a){1,2}?c","dIr\\1&vlpk",[global])),
+ <<"KbbbbbbbbbbbobbbbbbbbbbbFjgyx">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+?|a){1,2}?c","K\\1o\\1Fjgyx",[])),
+ <<"KbbbbbbbbbbbobbbbbbbbbbbFjgyx">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+?|a){1,2}?c","K\\1o\\1Fjgyx",[global])),
+ <<"dkNSkahOVMwoAfbbbbbbbbbbbacchbbbbbbbbbbbacKA">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+?|a){1,2}?c","dkNSk\\1hOVMwoAf&ch&KA",[])),
+ <<"dkNSkahOVMwoAfbbbbbbbbbbbacchbbbbbbbbbbbacKA">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+?|a){1,2}?c","dkNSk\\1hOVMwoAf&ch&KA",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+?|a){1,2}?c","lRqMfmvH",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+?|a){1,2}?c","lRqMfmvH",[global])),
+ <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+?|a){1,2}?c","Ya\\1SeSYOH",[])),
+ <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+?|a){1,2}?c","Ya\\1SeSYOH",[global])),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+?|a){1,2}?c","Mjs\\1&mpd",[])),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+?|a){1,2}?c","Mjs\\1&mpd",[global])),
+ <<"MbGjTbfbuoXTyLDU">> = iolist_to_binary(re:replace("bc","^(b+|a){1,2}c","M\\1GjT\\1f\\1uoXTyLDU",[])),
+ <<"MbGjTbfbuoXTyLDU">> = iolist_to_binary(re:replace("bc","^(b+|a){1,2}c","M\\1GjT\\1f\\1uoXTyLDU",[global])),
+ <<"Xbbbbcbbihpfm">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}c","X\\1&\\1ihpfm",[])),
+ <<"Xbbbbcbbihpfm">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}c","X\\1&\\1ihpfm",[global])),
+ <<"bbbbbbpCDbbLKbbbq">> = iolist_to_binary(re:replace("bbbc","^(b+|a){1,2}c","\\1\\1pCDbbLK\\1q",[])),
+ <<"bbbbbbpCDbbLKbbbq">> = iolist_to_binary(re:replace("bbbc","^(b+|a){1,2}c","\\1\\1pCDbbLK\\1q",[global])),
+ <<"bacjc">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}c","&jc",[])),
+ <<"bacjc">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}c","&jc",[global])),
+ <<"bbacmybbacWtbbacjPQXaybbacl">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}c","&my&Wt&jPQXay&l",[])),
+ <<"bbacmybbacWtbbacjPQXaybbacl">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}c","&my&Wt&jPQXay&l",[global])),
+ <<"QcYXpaaGA">> = iolist_to_binary(re:replace("aac","^(b+|a){1,2}c","QcYXpa\\1GA",[])),
+ <<"QcYXpaaGA">> = iolist_to_binary(re:replace("aac","^(b+|a){1,2}c","QcYXpa\\1GA",[global])),
+ <<"habbbbbbbbbbbcYbbbbbbbbbbbY">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+|a){1,2}c","h&Y\\1Y",[])),
+ <<"habbbbbbbbbbbcYbbbbbbbbbbbY">> = iolist_to_binary(re:replace("abbbbbbbbbbbc","^(b+|a){1,2}c","h&Y\\1Y",[global])),
+ <<"DkD">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+|a){1,2}c","DkD",[])),
+ <<"DkD">> = iolist_to_binary(re:replace("bbbbbbbbbbbac","^(b+|a){1,2}c","DkD",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+|a){1,2}c","UgARueRrJoL\\1\\1WgjAP",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b+|a){1,2}c","UgARueRrJoL\\1\\1WgjAP",[global])),
+ <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+|a){1,2}c","IGJPbXNc&kfu\\1xi",[])),
+ <<"aaac">> = iolist_to_binary(re:replace("aaac","^(b+|a){1,2}c","IGJPbXNc&kfu\\1xi",[global])),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+|a){1,2}c","pWvBeG&&iyL",[])),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(re:replace("abbbbbbbbbbbac","^(b+|a){1,2}c","pWvBeG&&iyL",[global])),
+ <<"g">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}?bc","g",[])),
+ <<"g">> = iolist_to_binary(re:replace("bbc","^(b+|a){1,2}?bc","g",[global])),
+ <<"rXsdbaababcQbambabcWcnvbj">> = iolist_to_binary(re:replace("babc","^(b*|ba){1,2}?bc","rXsd\\1a&Q\\1m&Wcnvbj",[])),
+ <<"rXsdbaababcQbambabcWcnvbj">> = iolist_to_binary(re:replace("babc","^(b*|ba){1,2}?bc","rXsd\\1a&Q\\1m&Wcnvbj",[global])),
+ <<"x">> = iolist_to_binary(re:replace("bbabc","^(b*|ba){1,2}?bc","x",[])),
+ <<"x">> = iolist_to_binary(re:replace("bbabc","^(b*|ba){1,2}?bc","x",[global])),
+ <<"TMNcgqpTbaE">> = iolist_to_binary(re:replace("bababc","^(b*|ba){1,2}?bc","TMNcgqpT\\1E",[])),
+ <<"TMNcgqpTbaE">> = iolist_to_binary(re:replace("bababc","^(b*|ba){1,2}?bc","TMNcgqpT\\1E",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b*|ba){1,2}?bc","IM",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(b*|ba){1,2}?bc","IM",[global])),
+ <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(b*|ba){1,2}?bc","TbVp\\1&mhNgFw\\1",[])),
+ <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(b*|ba){1,2}?bc","TbVp\\1&mhNgFw\\1",[global])),
+ <<"babababc">> = iolist_to_binary(re:replace("babababc","^(b*|ba){1,2}?bc","&yrdhkl&hx&\\1M\\1\\1BiFK",[])),
+ <<"babababc">> = iolist_to_binary(re:replace("babababc","^(b*|ba){1,2}?bc","&yrdhkl&hx&\\1M\\1\\1BiFK",[global])),
+ <<"bailvqbafDWIOQe">> = iolist_to_binary(re:replace("babc","^(ba|b*){1,2}?bc","\\1ilvq\\1fDWIOQe",[])),
+ <<"bailvqbafDWIOQe">> = iolist_to_binary(re:replace("babc","^(ba|b*){1,2}?bc","\\1ilvq\\1fDWIOQe",[global])),
+ <<"o">> = iolist_to_binary(re:replace("bbabc","^(ba|b*){1,2}?bc","o",[])),
+ <<"o">> = iolist_to_binary(re:replace("bbabc","^(ba|b*){1,2}?bc","o",[global])),
+ <<"qyH">> = iolist_to_binary(re:replace("bababc","^(ba|b*){1,2}?bc","qyH",[])),
+ <<"qyH">> = iolist_to_binary(re:replace("bababc","^(ba|b*){1,2}?bc","qyH",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ba|b*){1,2}?bc","GBLVYAxKwO",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ba|b*){1,2}?bc","GBLVYAxKwO",[global])),
+ <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(ba|b*){1,2}?bc","u&GWGypjK&r\\1\\1&",[])),
+ <<"bababbc">> = iolist_to_binary(re:replace("bababbc","^(ba|b*){1,2}?bc","u&GWGypjK&r\\1\\1&",[global])),
+ <<"babababc">> = iolist_to_binary(re:replace("babababc","^(ba|b*){1,2}?bc","Vb",[])),
+ <<"babababc">> = iolist_to_binary(re:replace("babababc","^(ba|b*){1,2}?bc","Vb",[global])),
+ <<"nli;znvMfDQEb;zGHXN">> = iolist_to_binary(re:replace(";z","^\\ca\\cA\\c[\\c{\\c:","nli\\1\\1&nv\\1MfDQEb&GHXN",[])),
+ <<"nli;znvMfDQEb;zGHXN">> = iolist_to_binary(re:replace(";z","^\\ca\\cA\\c[\\c{\\c:","nli\\1\\1&nv\\1MfDQEb&GHXN",[global])),
+ <<"yxcaleHEFWgGiwbQathing">> = iolist_to_binary(re:replace("athing","^[ab\\]cde]","\\1yxc\\1&leHE\\1FWgGiwbQ&",[])),
+ <<"yxcaleHEFWgGiwbQathing">> = iolist_to_binary(re:replace("athing","^[ab\\]cde]","\\1yxc\\1&leHE\\1FWgGiwbQ&",[global])),
+ <<"MeNvthing">> = iolist_to_binary(re:replace("bthing","^[ab\\]cde]","MeNv\\1",[])),
+ <<"MeNvthing">> = iolist_to_binary(re:replace("bthing","^[ab\\]cde]","MeNv\\1",[global])),
+ <<"]T]qQDvRdthing">> = iolist_to_binary(re:replace("]thing","^[ab\\]cde]","&T&qQDvRd",[])),
+ <<"]T]qQDvRdthing">> = iolist_to_binary(re:replace("]thing","^[ab\\]cde]","&T&qQDvRd",[global])),
+ <<"GFxthing">> = iolist_to_binary(re:replace("cthing","^[ab\\]cde]","GFx",[])),
+ <<"GFxthing">> = iolist_to_binary(re:replace("cthing","^[ab\\]cde]","GFx",[global])),
+ <<"kLFxTOaEthing">> = iolist_to_binary(re:replace("dthing","^[ab\\]cde]","kLFxTOaE",[])),
+ <<"kLFxTOaEthing">> = iolist_to_binary(re:replace("dthing","^[ab\\]cde]","kLFxTOaE",[global])),
+ <<"RtthVFthing">> = iolist_to_binary(re:replace("ething","^[ab\\]cde]","Rtt\\1hVF",[])),
+ <<"RtthVFthing">> = iolist_to_binary(re:replace("ething","^[ab\\]cde]","Rtt\\1hVF",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[ab\\]cde]","Srer\\1pi",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[ab\\]cde]","Srer\\1pi",[global])),
+ <<"fthing">> = iolist_to_binary(re:replace("fthing","^[ab\\]cde]","&AaO",[])),
+ <<"fthing">> = iolist_to_binary(re:replace("fthing","^[ab\\]cde]","&AaO",[global])),
+ <<"[thing">> = iolist_to_binary(re:replace("[thing","^[ab\\]cde]","GujQJxlam\\1f\\1FD",[])),
+ <<"[thing">> = iolist_to_binary(re:replace("[thing","^[ab\\]cde]","GujQJxlam\\1f\\1FD",[global])),
+ <<"\\thing">> = iolist_to_binary(re:replace("\\thing","^[ab\\]cde]","&&yX",[])),
+ <<"\\thing">> = iolist_to_binary(re:replace("\\thing","^[ab\\]cde]","&&yX",[global])),
+ <<"s]tXLkthing">> = iolist_to_binary(re:replace("]thing","^[]cde]","s&tXLk",[])),
+ <<"s]tXLkthing">> = iolist_to_binary(re:replace("]thing","^[]cde]","s&tXLk",[global])),
+ <<"HiVDFyrMvAaDvdYdUthing">> = iolist_to_binary(re:replace("cthing","^[]cde]","H\\1iVDFyrMvAaDv\\1\\1dYdU",[])),
+ <<"HiVDFyrMvAaDvdYdUthing">> = iolist_to_binary(re:replace("cthing","^[]cde]","H\\1iVDFyrMvAaDv\\1\\1dYdU",[global])),
+ <<"jkWeKNthing">> = iolist_to_binary(re:replace("dthing","^[]cde]","jkWeKN",[])),
+ <<"jkWeKNthing">> = iolist_to_binary(re:replace("dthing","^[]cde]","jkWeKN",[global])),
+ <<"strycWDFQcthing">> = iolist_to_binary(re:replace("ething","^[]cde]","stry\\1cWDFQc",[])),
+ <<"strycWDFQcthing">> = iolist_to_binary(re:replace("ething","^[]cde]","stry\\1cWDFQc",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[]cde]","s",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[]cde]","s",[global])),
+ <<"athing">> = iolist_to_binary(re:replace("athing","^[]cde]","\\1xREinh\\1vCv",[])),
+ <<"athing">> = iolist_to_binary(re:replace("athing","^[]cde]","\\1xREinh\\1vCv",[global])),
+ <<"fthing">> = iolist_to_binary(re:replace("fthing","^[]cde]","\\1h&Y\\1HwTkCc",[])),
+ <<"fthing">> = iolist_to_binary(re:replace("fthing","^[]cde]","\\1h&Y\\1HwTkCc",[global])),
+ <<"uifmTffffWmKXllBthing">> = iolist_to_binary(re:replace("fthing","^[^ab\\]cde]","ui&mT&f&&WmKXllB",[])),
+ <<"uifmTffffWmKXllBthing">> = iolist_to_binary(re:replace("fthing","^[^ab\\]cde]","ui&mT&f&&WmKXllB",[global])),
+ <<"Kyn[lihrXoXthing">> = iolist_to_binary(re:replace("[thing","^[^ab\\]cde]","Kyn&lihrXoX",[])),
+ <<"Kyn[lihrXoXthing">> = iolist_to_binary(re:replace("[thing","^[^ab\\]cde]","Kyn&lihrXoX",[global])),
+ <<"UXMYd\\fthing">> = iolist_to_binary(re:replace("\\thing","^[^ab\\]cde]","U\\1XMYd\\1\\1&f\\1",[])),
+ <<"UXMYd\\fthing">> = iolist_to_binary(re:replace("\\thing","^[^ab\\]cde]","U\\1XMYd\\1\\1&f\\1",[global])),
+ <<"QYuh*KpbKbO** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^ab\\]cde]","\\1QYuh&KpbKbO",[])),
+ <<"QYuh*KpbKbO** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^ab\\]cde]","\\1QYuh&KpbKbO",[global])),
+ <<"athing">> = iolist_to_binary(re:replace("athing","^[^ab\\]cde]","JwKDqeNpO\\1&m",[])),
+ <<"athing">> = iolist_to_binary(re:replace("athing","^[^ab\\]cde]","JwKDqeNpO\\1&m",[global])),
+ <<"bthing">> = iolist_to_binary(re:replace("bthing","^[^ab\\]cde]","G",[])),
+ <<"bthing">> = iolist_to_binary(re:replace("bthing","^[^ab\\]cde]","G",[global])),
+ <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^ab\\]cde]","VomLLa&\\1xDtJWx",[])),
+ <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^ab\\]cde]","VomLLa&\\1xDtJWx",[global])),
+ <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^ab\\]cde]","&DWkG&&kk",[])),
+ <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^ab\\]cde]","&DWkG&&kk",[global])),
+ <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^ab\\]cde]","MYpgcbh&\\1knLFcDqwN",[])),
+ <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^ab\\]cde]","MYpgcbh&\\1knLFcDqwN",[global])),
+ <<"ething">> = iolist_to_binary(re:replace("ething","^[^ab\\]cde]","h\\1nb\\1c&&KMVOIu",[])),
+ <<"ething">> = iolist_to_binary(re:replace("ething","^[^ab\\]cde]","h\\1nb\\1c&&KMVOIu",[global])),
+ <<"qRaQDneiathing">> = iolist_to_binary(re:replace("athing","^[^]cde]","qR&QDnei&",[])),
+ <<"qRaQDneiathing">> = iolist_to_binary(re:replace("athing","^[^]cde]","qR&QDnei&",[global])),
+ <<"YtUthing">> = iolist_to_binary(re:replace("fthing","^[^]cde]","YtU",[])),
+ <<"YtUthing">> = iolist_to_binary(re:replace("fthing","^[^]cde]","YtU",[global])),
+ <<"PUGKhoJ*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^]cde]","P\\1UGKhoJ&",[])),
+ <<"PUGKhoJ*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[^]cde]","P\\1UGKhoJ&",[global])),
+ <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^]cde]","Xh&gbPHspjXNu&YKXwHH",[])),
+ <<"]thing">> = iolist_to_binary(re:replace("]thing","^[^]cde]","Xh&gbPHspjXNu&YKXwHH",[global])),
+ <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^]cde]","kmMlgoXI&xF\\1hwlT",[])),
+ <<"cthing">> = iolist_to_binary(re:replace("cthing","^[^]cde]","kmMlgoXI&xF\\1hwlT",[global])),
+ <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^]cde]","ue\\1\\1DU",[])),
+ <<"dthing">> = iolist_to_binary(re:replace("dthing","^[^]cde]","ue\\1\\1DU",[global])),
+ <<"ething">> = iolist_to_binary(re:replace("ething","^[^]cde]","x\\1CM",[])),
+ <<"ething">> = iolist_to_binary(re:replace("ething","^[^]cde]","x\\1CM",[global])),
+ <<"skV">> = iolist_to_binary(re:replace("0","^[0-9]+$","sk\\1V\\1",[])),
+ <<"skV">> = iolist_to_binary(re:replace("0","^[0-9]+$","sk\\1V\\1",[global])),
+ <<"dchqDQcnPE1m">> = iolist_to_binary(re:replace("1","^[0-9]+$","dchqDQcnPE&m",[])),
+ <<"dchqDQcnPE1m">> = iolist_to_binary(re:replace("1","^[0-9]+$","dchqDQcnPE&m",[global])),
+ <<"iKMEYpXlyVKXB">> = iolist_to_binary(re:replace("2","^[0-9]+$","iKMEYpXlyVK\\1XB",[])),
+ <<"iKMEYpXlyVKXB">> = iolist_to_binary(re:replace("2","^[0-9]+$","iKMEYpXlyVK\\1XB",[global])),
+ <<"lTM3XtBQD3KqG33G">> = iolist_to_binary(re:replace("3","^[0-9]+$","lTM&X\\1tBQD&KqG&&G",[])),
+ <<"lTM3XtBQD3KqG33G">> = iolist_to_binary(re:replace("3","^[0-9]+$","lTM&X\\1tBQD&KqG&&G",[global])),
+ <<"A4RtR4paCNffVmKS44ru">> = iolist_to_binary(re:replace("4","^[0-9]+$","A&RtR&paCNffVmKS&&ru",[])),
+ <<"A4RtR4paCNffVmKS44ru">> = iolist_to_binary(re:replace("4","^[0-9]+$","A&RtR&paCNffVmKS&&ru",[global])),
+ <<"FvNdw">> = iolist_to_binary(re:replace("5","^[0-9]+$","F\\1vNdw",[])),
+ <<"FvNdw">> = iolist_to_binary(re:replace("5","^[0-9]+$","F\\1vNdw",[global])),
+ <<"6bMIirlh">> = iolist_to_binary(re:replace("6","^[0-9]+$","&bMIi\\1rlh",[])),
+ <<"6bMIirlh">> = iolist_to_binary(re:replace("6","^[0-9]+$","&bMIi\\1rlh",[global])),
+ <<"7IgF">> = iolist_to_binary(re:replace("7","^[0-9]+$","\\1\\1&IgF\\1\\1",[])),
+ <<"7IgF">> = iolist_to_binary(re:replace("7","^[0-9]+$","\\1\\1&IgF\\1\\1",[global])),
+ <<"kXpaB8C">> = iolist_to_binary(re:replace("8","^[0-9]+$","kXpaB&C",[])),
+ <<"kXpaB8C">> = iolist_to_binary(re:replace("8","^[0-9]+$","kXpaB&C",[global])),
+ <<"rxDNFoULsT">> = iolist_to_binary(re:replace("9","^[0-9]+$","rxDNFoULsT",[])),
+ <<"rxDNFoULsT">> = iolist_to_binary(re:replace("9","^[0-9]+$","rxDNFoULsT",[global])),
+ <<"YmBdr10cd10f10RQlRK">> = iolist_to_binary(re:replace("10","^[0-9]+$","YmBd\\1r&cd&f&RQlRK",[])),
+ <<"YmBdr10cd10f10RQlRK">> = iolist_to_binary(re:replace("10","^[0-9]+$","YmBd\\1r&cd&f&RQlRK",[global])),
+ <<"RLqdwwceTW">> = iolist_to_binary(re:replace("100","^[0-9]+$","RLqdwwceTW\\1",[])),
+ <<"RLqdwwceTW">> = iolist_to_binary(re:replace("100","^[0-9]+$","RLqdwwceTW\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[0-9]+$","BdnjJh\\1urLa&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[0-9]+$","BdnjJh\\1urLa&",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","^[0-9]+$","&&oa&dfYGxAdt&\\1\\1Q&m",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","^[0-9]+$","&&oa&dfYGxAdt&\\1\\1Q&m",[global])),
+ <<"ndenterMpPenterqHbSYUGGN">> = iolist_to_binary(re:replace("enter","^.*nter","nd&MpP&qHb\\1SY\\1UGGN",[])),
+ <<"ndenterMpPenterqHbSYUGGN">> = iolist_to_binary(re:replace("enter","^.*nter","nd&MpP&qHb\\1SY\\1UGGN",[global])),
+ <<"LSinterEPdYinterHoNIyUIDOinter">> = iolist_to_binary(re:replace("inter","^.*nter","LS&\\1EPdY&Ho\\1NIyUIDO&",[])),
+ <<"LSinterEPdYinterHoNIyUIDOinter">> = iolist_to_binary(re:replace("inter","^.*nter","LS&\\1EPdY&Ho\\1NIyUIDO&",[global])),
+ <<"IIUwhHsQfXMYBSb">> = iolist_to_binary(re:replace("uponter","^.*nter","IIUwhHsQ\\1fX\\1MYBS\\1b",[])),
+ <<"IIUwhHsQfXMYBSb">> = iolist_to_binary(re:replace("uponter","^.*nter","IIUwhHsQ\\1fX\\1MYBS\\1b",[global])),
+ ok.
+run1() ->
+ <<"Bp">> = iolist_to_binary(re:replace("xxx0","^xxx[0-9]+$","B\\1\\1\\1p",[])),
+ <<"Bp">> = iolist_to_binary(re:replace("xxx0","^xxx[0-9]+$","B\\1\\1\\1p",[global])),
+ <<"xxx1234okNYhxxx1234tobCxxx1234fg">> = iolist_to_binary(re:replace("xxx1234","^xxx[0-9]+$","&okNYh&tobC\\1&fg",[])),
+ <<"xxx1234okNYhxxx1234tobCxxx1234fg">> = iolist_to_binary(re:replace("xxx1234","^xxx[0-9]+$","&okNYh&tobC\\1&fg",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^xxx[0-9]+$","hQ&ULnO\\1\\1\\1nNlLbQ",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^xxx[0-9]+$","hQ&ULnO\\1\\1\\1nNlLbQ",[global])),
+ <<"xxx">> = iolist_to_binary(re:replace("xxx","^xxx[0-9]+$","&KwHk\\1a\\1\\1\\1&&i",[])),
+ <<"xxx">> = iolist_to_binary(re:replace("xxx","^xxx[0-9]+$","&KwHk\\1a\\1\\1\\1&&i",[global])),
+ <<"ohMDx123xpx123mNT">> = iolist_to_binary(re:replace("x123","^.+[0-9][0-9][0-9]$","ohMD&xp\\1&mNT",[])),
+ <<"ohMDx123xpx123mNT">> = iolist_to_binary(re:replace("x123","^.+[0-9][0-9][0-9]$","ohMD&xp\\1&mNT",[global])),
+ <<"gYaxx123xx123XaaNxx123bNU">> = iolist_to_binary(re:replace("xx123","^.+[0-9][0-9][0-9]$","gYa&&XaaN&bNU",[])),
+ <<"gYaxx123xx123XaaNxx123bNU">> = iolist_to_binary(re:replace("xx123","^.+[0-9][0-9][0-9]$","gYa&&XaaN&bNU",[global])),
+ <<"iElVtor">> = iolist_to_binary(re:replace("123456","^.+[0-9][0-9][0-9]$","i\\1ElV\\1tor",[])),
+ <<"iElVtor">> = iolist_to_binary(re:replace("123456","^.+[0-9][0-9][0-9]$","i\\1ElV\\1tor",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+[0-9][0-9][0-9]$","BWxJ\\1uhGy&vgMLA",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+[0-9][0-9][0-9]$","BWxJ\\1uhGy&vgMLA",[global])),
+ <<"123">> = iolist_to_binary(re:replace("123","^.+[0-9][0-9][0-9]$","xTGS&sW\\1G&NlcW",[])),
+ <<"123">> = iolist_to_binary(re:replace("123","^.+[0-9][0-9][0-9]$","xTGS&sW\\1G&NlcW",[global])),
+ <<"Ix1234IUy">> = iolist_to_binary(re:replace("x1234","^.+[0-9][0-9][0-9]$","I\\1&\\1I\\1Uy",[])),
+ <<"Ix1234IUy">> = iolist_to_binary(re:replace("x1234","^.+[0-9][0-9][0-9]$","I\\1&\\1I\\1Uy",[global])),
+ <<"DBYEAgkI">> = iolist_to_binary(re:replace("x123","^.+?[0-9][0-9][0-9]$","DBYE\\1AgkI",[])),
+ <<"DBYEAgkI">> = iolist_to_binary(re:replace("x123","^.+?[0-9][0-9][0-9]$","DBYE\\1AgkI",[global])),
+ <<"EABxx123">> = iolist_to_binary(re:replace("xx123","^.+?[0-9][0-9][0-9]$","EAB&\\1",[])),
+ <<"EABxx123">> = iolist_to_binary(re:replace("xx123","^.+?[0-9][0-9][0-9]$","EAB&\\1",[global])),
+ <<"w">> = iolist_to_binary(re:replace("123456","^.+?[0-9][0-9][0-9]$","w",[])),
+ <<"w">> = iolist_to_binary(re:replace("123456","^.+?[0-9][0-9][0-9]$","w",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+?[0-9][0-9][0-9]$","jiMwkAneSrQ&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.+?[0-9][0-9][0-9]$","jiMwkAneSrQ&",[global])),
+ <<"123">> = iolist_to_binary(re:replace("123","^.+?[0-9][0-9][0-9]$","pg\\1cjQ&&&",[])),
+ <<"123">> = iolist_to_binary(re:replace("123","^.+?[0-9][0-9][0-9]$","pg\\1cjQ&&&",[global])),
+ <<"APdx1234Jdelcg">> = iolist_to_binary(re:replace("x1234","^.+?[0-9][0-9][0-9]$","A\\1Pd&Jdelcg",[])),
+ <<"APdx1234Jdelcg">> = iolist_to_binary(re:replace("x1234","^.+?[0-9][0-9][0-9]$","A\\1Pd&Jdelcg",[global])),
+ <<"abcVE">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","\\1VE",[])),
+ <<"abcVE">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","\\1VE",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","ysSa&O\\1ogTi\\1e\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","ysSa&O\\1ogTi\\1e\\1",[global])),
+ <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","eCQWoiG\\1",[])),
+ <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","eCQWoiG\\1",[global])),
+ <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","rYbgJDpc",[])),
+ <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","rYbgJDpc",[global])),
+ <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","vkuwBMsxa",[])),
+ <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(re:replace("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","vkuwBMsxa",[global])),
+ <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","e\\1KF&BD\\1C&kxH&rwWnu",[])),
+ <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(re:replace("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$","e\\1KF&BD\\1C&kxH&rwWnu",[global])),
+ <<"Well, we need a colongxIksrpvcmlefi:WmR somewhere">> = iolist_to_binary(re:replace("Well, we need a colon: somewhere",":","g\\1xIksrpvcmlefi&WmR",[])),
+ <<"Well, we need a colongxIksrpvcmlefi:WmR somewhere">> = iolist_to_binary(re:replace("Well, we need a colon: somewhere",":","g\\1xIksrpvcmlefi&WmR",[global])),
+ <<"*** Fail if we don't">> = iolist_to_binary(re:replace("*** Fail if we don't",":","g&BggNgoAXIe&s\\1NH",[])),
+ <<"*** Fail if we don't">> = iolist_to_binary(re:replace("*** Fail if we don't",":","g&BggNgoAXIe&s\\1NH",[global])),
+ <<"TkV0abcQpF0abci0abcyiC">> = iolist_to_binary(re:replace("0abc","([\\da-f:]+)$","TkV\\1QpF\\1i&yiC",[caseless])),
+ <<"TkV0abcQpF0abci0abcyiC">> = iolist_to_binary(re:replace("0abc","([\\da-f:]+)$","TkV\\1QpF\\1i&yiC",[caseless,
global])),
-?line <<"g.1.2.3WLxQ1s">> = iolist_to_binary(re:replace(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","g&WLxQ\\1s",[])),
-?line <<"g.1.2.3WLxQ1s">> = iolist_to_binary(re:replace(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","g&WLxQ\\1s",[global])),
-?line <<"12Oy">> = iolist_to_binary(re:replace("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","\\1Oy",[])),
-?line <<"12Oy">> = iolist_to_binary(re:replace("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","\\1Oy",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","eX\\1nRbXcnyEu",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","eX\\1nRbXcnyEu",[global])),
-?line <<".1.2.3333">> = iolist_to_binary(re:replace(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","&iIBylLhNq",[])),
-?line <<".1.2.3333">> = iolist_to_binary(re:replace(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","&iIBylLhNq",[global])),
-?line <<"1.2.3">> = iolist_to_binary(re:replace("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","\\1G&pFELr\\1\\1&\\1HPX",[])),
-?line <<"1.2.3">> = iolist_to_binary(re:replace("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","\\1G&pFELr\\1\\1&\\1HPX",[global])),
-?line <<"1234.2.3">> = iolist_to_binary(re:replace("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","&qtoJnh\\1h",[])),
-?line <<"1234.2.3">> = iolist_to_binary(re:replace("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","&qtoJnh\\1h",[global])),
-?line <<"eaSBc111LbN">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","eaSBc\\1\\1\\1LbN",[])),
-?line <<"eaSBc111LbN">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","eaSBc\\1\\1\\1LbN",[global])),
-?line <<"1 IN SOA non-sp1 non-sp2 (yranl1 IN SOA non-sp1 non-sp2 (kU">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","&yranl&kU",[])),
-?line <<"1 IN SOA non-sp1 non-sp2 (yranl1 IN SOA non-sp1 non-sp2 (kU">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","&yranl&kU",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","W",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","W",[global])),
-?line <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(re:replace("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","UyNVyrR",[])),
-?line <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(re:replace("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","UyNVyrR",[global])),
-?line <<"pbeGIhIlhvhv">> = iolist_to_binary(re:replace("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","pbeGIhIl\\1hvhv",[])),
-?line <<"pbeGIhIlhvhv">> = iolist_to_binary(re:replace("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","pbeGIhIl\\1hvhv",[global])),
-?line <<"gFDyTxSYOppWiRv">> = iolist_to_binary(re:replace("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","gFDyTxSYOppWiR\\1v",[])),
-?line <<"gFDyTxSYOppWiRv">> = iolist_to_binary(re:replace("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","gFDyTxSYOppWiR\\1v",[global])),
-?line <<"HSc2.vOMD">> = iolist_to_binary(re:replace("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","HSc&\\1vO\\1MD\\1",[])),
-?line <<"HSc2.vOMD">> = iolist_to_binary(re:replace("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","HSc&\\1vO\\1MD\\1",[global])),
-?line <<".pq-rd.pq-rG.pq-rUab-c.pq-r.HCGaTI">> = iolist_to_binary(re:replace("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","\\1d\\1G\\1U&HCGaTI",[])),
-?line <<".pq-rd.pq-rG.pq-rUab-c.pq-r.HCGaTI">> = iolist_to_binary(re:replace("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","\\1d\\1G\\1U&HCGaTI",[global])),
-?line <<"RwF">> = iolist_to_binary(re:replace("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","RwF",[])),
-?line <<"RwF">> = iolist_to_binary(re:replace("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","RwF",[global])),
-?line <<"oAJdUx-.y-.GMx-.y-.iBCRNx-.y-.wBW">> = iolist_to_binary(re:replace("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","oAJdU&GM&iBCRN&wBW",[])),
-?line <<"oAJdUx-.y-.GMx-.y-.iBCRNx-.y-.wBW">> = iolist_to_binary(re:replace("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","oAJdU&GM&iBCRN&wBW",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","wwA&\\1snkRSCcfnG&S",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","wwA&\\1snkRSCcfnG&S",[global])),
-?line <<"-abc.peq.">> = iolist_to_binary(re:replace("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","YaFu&cvVYqVy",[])),
-?line <<"-abc.peq.">> = iolist_to_binary(re:replace("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","YaFu&cvVYqVy",[global])),
-?line <<"*.aXojEWCW">> = iolist_to_binary(re:replace("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","&\\1XojEWCW",[])),
-?line <<"*.aXojEWCW">> = iolist_to_binary(re:replace("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","&\\1XojEWCW",[global])),
-?line <<"djXR0-a0-aFXv*.b0-awEtv">> = iolist_to_binary(re:replace("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","djXR\\1\\1FXv&wEtv",[])),
-?line <<"djXR0-a0-aFXv*.b0-awEtv">> = iolist_to_binary(re:replace("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","djXR\\1\\1FXv&wEtv",[global])),
-?line <<"*.c3-b.cregb">> = iolist_to_binary(re:replace("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","&regb",[])),
-?line <<"*.c3-b.cregb">> = iolist_to_binary(re:replace("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","&regb",[global])),
-?line <<"Vlm">> = iolist_to_binary(re:replace("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","Vlm",[])),
-?line <<"Vlm">> = iolist_to_binary(re:replace("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","Vlm",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","Vxm\\1SKnM",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","Vxm\\1SKnM",[global])),
-?line <<"*.0">> = iolist_to_binary(re:replace("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","n\\1",[])),
-?line <<"*.0">> = iolist_to_binary(re:replace("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","n\\1",[global])),
-?line <<"*.a-">> = iolist_to_binary(re:replace("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","SbmRQSxio",[])),
-?line <<"*.a-">> = iolist_to_binary(re:replace("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","SbmRQSxio",[global])),
-?line <<"*.a-b.c-">> = iolist_to_binary(re:replace("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","xINKaLRww\\1&\\1",[])),
-?line <<"*.a-b.c-">> = iolist_to_binary(re:replace("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","xINKaLRww\\1&\\1",[global])),
-?line <<"*.c-a.0-c">> = iolist_to_binary(re:replace("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","akuY\\1pMWNGWjJ\\1oFTV\\1t",[])),
-?line <<"*.c-a.0-c">> = iolist_to_binary(re:replace("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","akuY\\1pMWNGWjJ\\1oFTV\\1t",[global])),
-?line <<"Dy">> = iolist_to_binary(re:replace("abde","^(?=ab(de))(abd)(e)","Dy",[])),
-?line <<"Dy">> = iolist_to_binary(re:replace("abde","^(?=ab(de))(abd)(e)","Dy",[global])),
-?line <<"Sf">> = iolist_to_binary(re:replace("abdf","^(?!(ab)de|x)(abd)(f)","Sf",[])),
-?line <<"Sf">> = iolist_to_binary(re:replace("abdf","^(?!(ab)de|x)(abd)(f)","Sf",[global])),
-?line <<"IabcdJcd">> = iolist_to_binary(re:replace("abcd","^(?=(ab(cd)))(ab)","I\\1J",[])),
-?line <<"IabcdJcd">> = iolist_to_binary(re:replace("abcd","^(?=(ab(cd)))(ab)","I\\1J",[global])),
-?line <<"rvnE.d">> = iolist_to_binary(re:replace("a.b.c.d","^[\\da-f](\\.[\\da-f])*$","rvnE\\1",[caseless])),
-?line <<"rvnE.d">> = iolist_to_binary(re:replace("a.b.c.d","^[\\da-f](\\.[\\da-f])*$","rvnE\\1",[caseless,
- global])),
-?line <<"niA.B.C.DL.DCGxjcuA.B.C.DhA.B.C.DT.DA.B.C.D.DM">> = iolist_to_binary(re:replace("A.B.C.D","^[\\da-f](\\.[\\da-f])*$","ni&L\\1CGxjcu&h&T\\1&\\1M",[caseless])),
-?line <<"niA.B.C.DL.DCGxjcuA.B.C.DhA.B.C.DT.DA.B.C.D.DM">> = iolist_to_binary(re:replace("A.B.C.D","^[\\da-f](\\.[\\da-f])*$","ni&L\\1CGxjcu&h&T\\1&\\1M",[caseless,
- global])),
-?line <<"wARa.b.c.1.2.3.Ca.b.c.1.2.3.C.CpUAa.b.c.1.2.3.Cg">> = iolist_to_binary(re:replace("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$","wAR&&\\1pUA&g",[caseless])),
-?line <<"wARa.b.c.1.2.3.Ca.b.c.1.2.3.C.CpUAa.b.c.1.2.3.Cg">> = iolist_to_binary(re:replace("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$","wAR&&\\1pUA&g",[caseless,
- global])),
-?line <<"a">> = iolist_to_binary(re:replace("\"1234\"","^\\\".*\\\"\\s*(;.*)?$","\\1a",[])),
-?line <<"a">> = iolist_to_binary(re:replace("\"1234\"","^\\\".*\\\"\\s*(;.*)?$","\\1a",[global])),
-?line <<"CIv">> = iolist_to_binary(re:replace("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$","CIv",[])),
-?line <<"CIv">> = iolist_to_binary(re:replace("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$","CIv",[global])),
-?line <<"; rhubarbK">> = iolist_to_binary(re:replace("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$","\\1K",[])),
-?line <<"; rhubarbK">> = iolist_to_binary(re:replace("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$","\\1K",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\\".*\\\"\\s*(;.*)?$","aWrdsUS\\1QSjQ&dFoGfF",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\\".*\\\"\\s*(;.*)?$","aWrdsUS\\1QSjQ&dFoGfF",[global])),
-?line <<"\"1234\" : things">> = iolist_to_binary(re:replace("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$","khMGlmiUM&d\\1\\1GGb",[])),
-?line <<"\"1234\" : things">> = iolist_to_binary(re:replace("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$","khMGlmiUM&d\\1\\1GGb",[global])),
-?line <<"ddsaVnvP">> = iolist_to_binary(re:replace("","^$","ddsaVnvP",[])),
-?line <<"ddsaVnvP">> = iolist_to_binary(re:replace("","^$","ddsaVnvP",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^$","d\\1yl\\1chv&DYUrRBp",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^$","d\\1yl\\1chv&DYUrRBp",[global])),
-?line <<"ubIEeu">> = iolist_to_binary(re:replace("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","ubIEeu",[extended])),
-?line <<"ubIEeu">> = iolist_to_binary(re:replace("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","ubIEeu",[extended,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","hTyFd&e\\1&PttRSXjwggW",[extended])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","hTyFd&e\\1&PttRSXjwggW",[extended,
- global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","RUKr",[extended])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","RUKr",[extended,
- global])),
-?line <<"ab cde">> = iolist_to_binary(re:replace("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","&wELTyPo&oJqp&vLg\\1T",[extended])),
-?line <<"ab cde">> = iolist_to_binary(re:replace("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","&wELTyPo&oJqp&vLg\\1T",[extended,
- global])),
-?line <<"NNDSkqab cNfQkVqmWj">> = iolist_to_binary(re:replace("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","NN\\1DSk\\1q&NfQkVqmWj",[])),
-?line <<"NNDSkqab cNfQkVqmWj">> = iolist_to_binary(re:replace("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","NN\\1DSk\\1q&NfQkVqmWj",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","vkwk\\1js\\1pepFK\\1\\1Wa&g",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","vkwk\\1js\\1pepFK\\1\\1Wa&g",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","\\1&fYSPEB",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","\\1&fYSPEB",[global])),
-?line <<"ab cde">> = iolist_to_binary(re:replace("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","\\1D\\1\\1\\1by&lUP\\1jTlVc",[])),
-?line <<"ab cde">> = iolist_to_binary(re:replace("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","\\1D\\1\\1\\1by&lUP\\1jTlVc",[global])),
-?line <<"Pca bcdDXLbDTDa bcdja bcdTa bcdX">> = iolist_to_binary(re:replace("a bcd","^ a\\ b[c ]d $","Pc&DXLbDTD&j&T&X\\1",[extended])),
-?line <<"Pca bcdDXLbDTDa bcdja bcdTa bcdX">> = iolist_to_binary(re:replace("a bcd","^ a\\ b[c ]d $","Pc&DXLbDTD&j&T&X\\1",[extended,
- global])),
-?line <<"cbruWa b dWvF">> = iolist_to_binary(re:replace("a b d","^ a\\ b[c ]d $","cbruW&WvF\\1",[extended])),
-?line <<"cbruWa b dWvF">> = iolist_to_binary(re:replace("a b d","^ a\\ b[c ]d $","cbruW&WvF\\1",[extended,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^ a\\ b[c ]d $","xLsLvmNGGbWjEqU\\1q",[extended])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^ a\\ b[c ]d $","xLsLvmNGGbWjEqU\\1q",[extended,
- global])),
-?line <<"abcd">> = iolist_to_binary(re:replace("abcd","^ a\\ b[c ]d $","QvID",[extended])),
-?line <<"abcd">> = iolist_to_binary(re:replace("abcd","^ a\\ b[c ]d $","QvID",[extended,
+ <<"gAHIDgPO">> = iolist_to_binary(re:replace("abc","([\\da-f:]+)$","gAHIDgPO",[caseless])),
+ <<"gAHIDgPO">> = iolist_to_binary(re:replace("abc","([\\da-f:]+)$","gAHIDgPO",[caseless,
+ global])),
+ <<"QqLxYfedlXtfedNm">> = iolist_to_binary(re:replace("fed","([\\da-f:]+)$","QqLxY&lXt\\1Nm",[caseless])),
+ <<"QqLxYfedlXtfedNm">> = iolist_to_binary(re:replace("fed","([\\da-f:]+)$","QqLxY&lXt\\1Nm",[caseless,
global])),
-?line <<"ab d">> = iolist_to_binary(re:replace("ab d","^ a\\ b[c ]d $","CEUu&Jt",[extended])),
-?line <<"ab d">> = iolist_to_binary(re:replace("ab d","^ a\\ b[c ]d $","CEUu&Jt",[extended,
- global])),
-?line <<"ohu">> = iolist_to_binary(re:replace("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$","ohu",[])),
-?line <<"ohu">> = iolist_to_binary(re:replace("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$","ohu",[global])),
-?line <<"rbcmNabcdefhijklmabcdefhijklmNGkLNbcabcdefhijklmxnbclO">> = iolist_to_binary(re:replace("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$","r\\1mN&&NGkLN\\1&xn\\1lO",[])),
-?line <<"rbcmNabcdefhijklmabcdefhijklmNGkLNbcabcdefhijklmxnbclO">> = iolist_to_binary(re:replace("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$","r\\1mN&&NGkLN\\1&xn\\1lO",[global])),
-?line <<"I">> = iolist_to_binary(re:replace("a+ Z0+
-","^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]","I",[])),
-?line <<"I">> = iolist_to_binary(re:replace("a+ Z0+
-","^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]","I",[global])),
-?line <<"ANdwkyHnc">> = iolist_to_binary(re:replace(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+","ANdwkyHnc",[])),
-?line <<"ANdwkyHnc">> = iolist_to_binary(re:replace(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+","ANdwkyHnc",[global])),
-?line <<"Dx">> = iolist_to_binary(re:replace("z","^a*\\w","Dx",[])),
-?line <<"Dx">> = iolist_to_binary(re:replace("z","^a*\\w","Dx",[global])),
-?line <<"OpVTjQkTaz">> = iolist_to_binary(re:replace("az","^a*\\w","OpVTjQkT&",[])),
-?line <<"OpVTjQkTaz">> = iolist_to_binary(re:replace("az","^a*\\w","OpVTjQkT&",[global])),
-?line <<"LexbuooAmFDifW">> = iolist_to_binary(re:replace("aaaz","^a*\\w","LexbuooAm\\1FDifW",[])),
-?line <<"LexbuooAmFDifW">> = iolist_to_binary(re:replace("aaaz","^a*\\w","LexbuooAm\\1FDifW",[global])),
-?line <<"arpLCDAadYpPkb">> = iolist_to_binary(re:replace("a","^a*\\w","arpLCDAadYpPk\\1b",[])),
-?line <<"arpLCDAadYpPkb">> = iolist_to_binary(re:replace("a","^a*\\w","arpLCDAadYpPk\\1b",[global])),
-?line <<"CyElaaTHfV">> = iolist_to_binary(re:replace("aa","^a*\\w","CyEl&T\\1HfV",[])),
-?line <<"CyElaaTHfV">> = iolist_to_binary(re:replace("aa","^a*\\w","CyEl&T\\1HfV",[global])),
-?line <<"v">> = iolist_to_binary(re:replace("aaaa","^a*\\w","v\\1\\1",[])),
-?line <<"v">> = iolist_to_binary(re:replace("aaaa","^a*\\w","v\\1\\1",[global])),
-?line <<"COSWtMTXCLic+">> = iolist_to_binary(re:replace("a+","^a*\\w","COSWtMTXCLic",[])),
-?line <<"COSWtMTXCLic+">> = iolist_to_binary(re:replace("a+","^a*\\w","COSWtMTXCLic",[global])),
-?line <<"kaaDuaauKGaaIaaFUK+">> = iolist_to_binary(re:replace("aa+","^a*\\w","k&Du&uKG\\1&I&FU\\1\\1K\\1",[])),
-?line <<"kaaDuaauKGaaIaaFUK+">> = iolist_to_binary(re:replace("aa+","^a*\\w","k&Du&uKG\\1&I&FU\\1\\1K\\1",[global])),
-?line <<"Pttz">> = iolist_to_binary(re:replace("z","^a*?\\w","Ptt&",[])),
-?line <<"Pttz">> = iolist_to_binary(re:replace("z","^a*?\\w","Ptt&",[global])),
-?line <<"QEHxyFSkkaz">> = iolist_to_binary(re:replace("az","^a*?\\w","QEHxyFSkk&",[])),
-?line <<"QEHxyFSkkaz">> = iolist_to_binary(re:replace("az","^a*?\\w","QEHxyFSkk&",[global])),
-?line <<"atHEjpaKrKaaz">> = iolist_to_binary(re:replace("aaaz","^a*?\\w","&tHE\\1jp&KrK",[])),
-?line <<"atHEjpaKrKaaz">> = iolist_to_binary(re:replace("aaaz","^a*?\\w","&tHE\\1jp&KrK",[global])),
-?line <<"YaSeqaaeBiLO">> = iolist_to_binary(re:replace("a","^a*?\\w","Y&Seq\\1&&eBiLO",[])),
-?line <<"YaSeqaaeBiLO">> = iolist_to_binary(re:replace("a","^a*?\\w","Y&Seq\\1&&eBiLO",[global])),
-?line <<"UlaGeGnImSoQaHibARka">> = iolist_to_binary(re:replace("aa","^a*?\\w","Ul&GeGnImSoQ&HibARk",[])),
-?line <<"UlaGeGnImSoQaHibARka">> = iolist_to_binary(re:replace("aa","^a*?\\w","Ul&GeGnImSoQ&HibARk",[global])),
-?line <<"upDbxncvqbwvaaa">> = iolist_to_binary(re:replace("aaaa","^a*?\\w","upDbxncvqb\\1wv",[])),
-?line <<"upDbxncvqbwvaaa">> = iolist_to_binary(re:replace("aaaa","^a*?\\w","upDbxncvqb\\1wv",[global])),
-?line <<"MalqdUPrj+">> = iolist_to_binary(re:replace("a+","^a*?\\w","M&\\1lqdUPr\\1j\\1\\1",[])),
-?line <<"MalqdUPrj+">> = iolist_to_binary(re:replace("a+","^a*?\\w","M&\\1lqdUPr\\1j\\1\\1",[global])),
-?line <<"JTa+">> = iolist_to_binary(re:replace("aa+","^a*?\\w","JT",[])),
-?line <<"JTa+">> = iolist_to_binary(re:replace("aa+","^a*?\\w","JT",[global])),
-?line <<"nnvJUazdlV">> = iolist_to_binary(re:replace("az","^a+\\w","\\1nnvJU&dlV",[])),
-?line <<"nnvJUazdlV">> = iolist_to_binary(re:replace("az","^a+\\w","\\1nnvJU&dlV",[global])),
-?line <<"aaaz">> = iolist_to_binary(re:replace("aaaz","^a+\\w","\\1&",[])),
-?line <<"aaaz">> = iolist_to_binary(re:replace("aaaz","^a+\\w","\\1&",[global])),
-?line <<"daaRBaauOlL">> = iolist_to_binary(re:replace("aa","^a+\\w","d&RB&uO\\1lL",[])),
-?line <<"daaRBaauOlL">> = iolist_to_binary(re:replace("aa","^a+\\w","d&RB&uO\\1lL",[global])),
-?line <<"uaaaajkPXJqfBddNNYaaaa">> = iolist_to_binary(re:replace("aaaa","^a+\\w","u&jkPXJqfBddNNY&",[])),
-?line <<"uaaaajkPXJqfBddNNYaaaa">> = iolist_to_binary(re:replace("aaaa","^a+\\w","u&jkPXJqfBddNNY&",[global])),
-?line <<"YAJlePYgQb+">> = iolist_to_binary(re:replace("aa+","^a+\\w","YAJlePYgQb",[])),
-?line <<"YAJlePYgQb+">> = iolist_to_binary(re:replace("aa+","^a+\\w","YAJlePYgQb",[global])),
-?line <<"MXsW">> = iolist_to_binary(re:replace("az","^a+?\\w","MXsW",[])),
-?line <<"MXsW">> = iolist_to_binary(re:replace("az","^a+?\\w","MXsW",[global])),
-?line <<"GaaMGsaaPiMScaz">> = iolist_to_binary(re:replace("aaaz","^a+?\\w","G&MGs&P\\1i\\1MSc",[])),
-?line <<"GaaMGsaaPiMScaz">> = iolist_to_binary(re:replace("aaaz","^a+?\\w","G&MGs&P\\1i\\1MSc",[global])),
-?line <<"aaYUHgT">> = iolist_to_binary(re:replace("aa","^a+?\\w","&YUHgT",[])),
-?line <<"aaYUHgT">> = iolist_to_binary(re:replace("aa","^a+?\\w","&YUHgT",[global])),
-?line <<"ePknVhaa">> = iolist_to_binary(re:replace("aaaa","^a+?\\w","ePknVh\\1",[])),
-?line <<"ePknVhaa">> = iolist_to_binary(re:replace("aaaa","^a+?\\w","ePknVh\\1",[global])),
-?line <<"+">> = iolist_to_binary(re:replace("aa+","^a+?\\w","\\1",[])),
-?line <<"+">> = iolist_to_binary(re:replace("aa+","^a+?\\w","\\1",[global])),
-?line <<"AFRGuhtn1234567890rEtjU">> = iolist_to_binary(re:replace("1234567890","^\\d{8}\\w{2,}","\\1AFRGuhtn&rEtjU",[])),
-?line <<"AFRGuhtn1234567890rEtjU">> = iolist_to_binary(re:replace("1234567890","^\\d{8}\\w{2,}","\\1AFRGuhtn&rEtjU",[global])),
-?line <<"nNSL12345678abRY">> = iolist_to_binary(re:replace("12345678ab","^\\d{8}\\w{2,}","nNSL&RY",[])),
-?line <<"nNSL12345678abRY">> = iolist_to_binary(re:replace("12345678ab","^\\d{8}\\w{2,}","nNSL&RY",[global])),
-?line <<"12345678__JUDy">> = iolist_to_binary(re:replace("12345678__","^\\d{8}\\w{2,}","&JUDy",[])),
-?line <<"12345678__JUDy">> = iolist_to_binary(re:replace("12345678__","^\\d{8}\\w{2,}","&JUDy",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8}\\w{2,}","&OcK\\1P&XNvgrP",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8}\\w{2,}","&OcK\\1P&XNvgrP",[global])),
-?line <<"1234567">> = iolist_to_binary(re:replace("1234567","^\\d{8}\\w{2,}","&Mo",[])),
-?line <<"1234567">> = iolist_to_binary(re:replace("1234567","^\\d{8}\\w{2,}","&Mo",[global])),
-?line <<"O">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}$","O",[])),
-?line <<"O">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}$","O",[global])),
-?line <<"1234b1234n">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}$","&b&n",[])),
-?line <<"1234b1234n">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}$","&b&n",[global])),
-?line <<"YBp12345Ul">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}$","YBp&Ul",[])),
-?line <<"YBp12345Ul">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}$","YBp&Ul",[global])),
-?line <<"SVHQqBtcrMAtQxy">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}$","SVHQqBtcrMAtQxy\\1",[])),
-?line <<"SVHQqBtcrMAtQxy">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}$","SVHQqBtcrMAtQxy\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[aeiou\\d]{4,5}$","ne",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[aeiou\\d]{4,5}$","ne",[global])),
-?line <<"123456">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}$","QA&F\\1LJ",[])),
-?line <<"123456">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}$","QA&F\\1LJ",[global])),
-?line <<"gKGpFvTeUK">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}?","gKGpFvTeUK",[])),
-?line <<"gKGpFvTeUK">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}?","gKGpFvTeUK",[global])),
-?line <<"LCEqvLxHGWXWrexD">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}?","LCE\\1qvL\\1xHGWXWrexD",[])),
-?line <<"LCEqvLxHGWXWrexD">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}?","LCE\\1qvL\\1xHGWXWrexD",[global])),
-?line <<"QWV1234vhndnkkT1234l5">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}?","\\1QWV&\\1vhndnkk\\1T&l",[])),
-?line <<"QWV1234vhndnkkT1234l5">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}?","\\1QWV&\\1vhndnkk\\1T&l",[global])),
-?line <<"aaaaIaaaayaaaaEoAPYra">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}?","&I&y&E\\1oAPYr",[])),
-?line <<"aaaaIaaaayaaaaEoAPYra">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}?","&I&y&E\\1oAPYr",[global])),
-?line <<"xKUWgRs56">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}?","xKUWgRs",[])),
-?line <<"xKUWgRs56">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}?","xKUWgRs",[global])),
-?line <<"JlUywcabcvRabcPFPabcYSXE">> = iolist_to_binary(re:replace("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z","JlUywc\\1vR\\1PFP\\1YSXE",[])),
-?line <<"JlUywcabcvRabcPFPabcYSXE">> = iolist_to_binary(re:replace("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z","JlUywc\\1vR\\1PFP\\1YSXE",[global])),
-?line <<"def=defdefdefbucdef=defdefdef">> = iolist_to_binary(re:replace("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z","&buc&",[])),
-?line <<"def=defdefdefbucdef=defdefdef">> = iolist_to_binary(re:replace("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z","&buc&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z","AYuyHUCDlwjQc\\1OS",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z","AYuyHUCDlwjQc\\1OS",[global])),
-?line <<"abc=defdef">> = iolist_to_binary(re:replace("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z","PM&h\\1\\1xD\\1&",[])),
-?line <<"abc=defdef">> = iolist_to_binary(re:replace("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z","PM&h\\1\\1xD\\1&",[global])),
-?line <<"UFhaagoHObvFc">> = iolist_to_binary(re:replace("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","UFh\\1\\1goHObvFc",[])),
-?line <<"UFhaagoHObvFc">> = iolist_to_binary(re:replace("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","UFh\\1\\1goHObvFc",[global])),
-?line <<"aabcdefghijkkkkcda2abcdefghijkkkkcda2abcdefghijkkkkcda2vuYabcdefghijkkkkcda2xdabcdefghijkkkkcda2njaJQEF">> = iolist_to_binary(re:replace("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","\\1&&&vuY&xd&nj\\1JQEF",[])),
-?line <<"aabcdefghijkkkkcda2abcdefghijkkkkcda2abcdefghijkkkkcda2vuYabcdefghijkkkkcda2xdabcdefghijkkkkcda2njaJQEF">> = iolist_to_binary(re:replace("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","\\1&&&vuY&xd&nj\\1JQEF",[global])),
-?line <<"mcataractcataract cataract23YTkMcataract cataract23">> = iolist_to_binary(re:replace("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","m\\1&YTkM&",[])),
-?line <<"mcataractcataract cataract23YTkMcataract cataract23">> = iolist_to_binary(re:replace("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","m\\1&YTkM&",[global])),
-?line <<"OXcatatonicoHKaXHQpryKFyhVcatatonic">> = iolist_to_binary(re:replace("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","OX\\1oHKaXHQpryKFyhV\\1",[])),
-?line <<"OXcatatonicoHKaXHQpryKFyhVcatatonic">> = iolist_to_binary(re:replace("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","OX\\1oHKaXHQpryKFyhV\\1",[global])),
-?line <<"caterpillarcaterpillar caterpillar23foVlhvplLSebcaterpillar">> = iolist_to_binary(re:replace("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","\\1&foVlhvplLSeb\\1",[])),
-?line <<"caterpillarcaterpillar caterpillar23foVlhvplLSebcaterpillar">> = iolist_to_binary(re:replace("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","\\1&foVlhvplLSeb\\1",[global])),
-?line <<"From abcd Mon Sep 01 12:33TNVlANgYabcdabcdFrom abcd Mon Sep 01 12:33aIFrom abcd Mon Sep 01 12:33TqsabcdQ:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]","&TNVlANgY\\1\\1&aI&Tqs\\1Q",[])),
-?line <<"From abcd Mon Sep 01 12:33TNVlANgYabcdabcdFrom abcd Mon Sep 01 12:33aIFrom abcd Mon Sep 01 12:33TqsabcdQ:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]","&TNVlANgY\\1\\1&aI&Tqs\\1Q",[global])),
-?line <<"isKrFrom abcd Mon Sep 01 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","isKr&",[])),
-?line <<"isKrFrom abcd Mon Sep 01 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","isKr&",[global])),
-?line <<"lNtEJS:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","lNtEJS",[])),
-?line <<"lNtEJS:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","lNtEJS",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","aR\\1i&Fxe",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","aR\\1i&Fxe",[global])),
-?line <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","\\1NsrJ&\\1&PtWlXT",[])),
-?line <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","\\1NsrJ&\\1&PtWlXT",[global])),
-?line <<"nGixKixjMO12
-34BhoReSp">> = iolist_to_binary(re:replace("12
-34","^12.34","nGixKixjMO&BhoReSp",[dotall])),
-?line <<"nGixKixjMO12
-34BhoReSp">> = iolist_to_binary(re:replace("12
-34","^12.34","nGixKixjMO&BhoReSp",[dotall,global])),
-?line <<"12 34OBfpF12 3412 34fh">> = iolist_to_binary(re:replace("12 34","^12.34","&OBfpF&&fh",[dotall])),
-?line <<"12 34OBfpF12 3412 34fh">> = iolist_to_binary(re:replace("12 34","^12.34","&OBfpF&&fh",[dotall,
- global])),
-?line <<"the quick brownhubrownbrownubrownQ fox">> = iolist_to_binary(re:replace("the quick brown fox","\\w+(?=\\t)","&hu&&u&Q",[])),
-?line <<"the quick brownhubrownbrownubrownQ fox">> = iolist_to_binary(re:replace("the quick brown fox","\\w+(?=\\t)","&hu&&u&Q",[global])),
-?line <<"foobar is uqH">> = iolist_to_binary(re:replace("foobar is foolish see?","foo(?!bar)(.*)","uqH",[])),
-?line <<"foobar is uqH">> = iolist_to_binary(re:replace("foobar is foolish see?","foo(?!bar)(.*)","uqH",[global])),
-?line <<"foobar cn">> = iolist_to_binary(re:replace("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)","n",[])),
-?line <<"foobar cn">> = iolist_to_binary(re:replace("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)","n",[global])),
-?line <<"CpDjibh">> = iolist_to_binary(re:replace("barrel","(?:(?!foo)...|^.{0,2})bar(.*)","CpDjibh",[])),
-?line <<"CpDjibh">> = iolist_to_binary(re:replace("barrel","(?:(?!foo)...|^.{0,2})bar(.*)","CpDjibh",[global])),
-?line <<"wlcfLrelprelgrelD">> = iolist_to_binary(re:replace("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)","wlcfL\\1p\\1g\\1D",[])),
-?line <<"wlcfLrelprelgrelD">> = iolist_to_binary(re:replace("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)","wlcfL\\1p\\1g\\1D",[global])),
-?line <<"wbDA barrelYA barrelcQA barrelplrelA barrelXPrel">> = iolist_to_binary(re:replace("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)","wbD&Y&cQ&pl\\1&XP\\1",[])),
-?line <<"wbDA barrelYA barrelcQA barrelplrelA barrelXPrel">> = iolist_to_binary(re:replace("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)","wbD&Y&cQ&pl\\1&XP\\1",[global])),
-?line <<"PJMqUabctmoSPC456">> = iolist_to_binary(re:replace("abc456","^(\\D*)(?=\\d)(?!123)","PJMqU\\1tmoSPC",[])),
-?line <<"PJMqUabctmoSPC456">> = iolist_to_binary(re:replace("abc456","^(\\D*)(?=\\d)(?!123)","PJMqU\\1tmoSPC",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","k\\1&lgXOi",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","k\\1&lgXOi",[global])),
-?line <<"abc123">> = iolist_to_binary(re:replace("abc123","^(\\D*)(?=\\d)(?!123)","UgE&XTVNX&ygyaQdYO&",[])),
-?line <<"abc123">> = iolist_to_binary(re:replace("abc123","^(\\D*)(?=\\d)(?!123)","UgE&XTVNX&ygyaQdYO&",[global])),
-?line <<"CByu1234Oj12341234">> = iolist_to_binary(re:replace("1234","^1234(?# test newlines
- inside)","CByu&Oj&&",[])),
-?line <<"CByu1234Oj12341234">> = iolist_to_binary(re:replace("1234","^1234(?# test newlines
- inside)","CByu&Oj&&",[global])),
-?line <<"AVF1234DSEvHi">> = iolist_to_binary(re:replace("1234","^1234 #comment in extended re
- ","AVF&DSEvHi",[extended])),
-?line <<"AVF1234DSEvHi">> = iolist_to_binary(re:replace("1234","^1234 #comment in extended re
- ","AVF&DSEvHi",[extended,global])),
-?line <<"wiUNsYJdROkkkabcdSabcdjvS">> = iolist_to_binary(re:replace("abcd","#rhubarb
- abcd","wiUNsYJdROkkk&S&jvS",[extended])),
-?line <<"wiUNsYJdROkkkabcdSabcdjvS">> = iolist_to_binary(re:replace("abcd","#rhubarb
- abcd","wiUNsYJdROkkk&S&jvS",[extended,global])),
-?line <<"wxabcdyOpSDe">> = iolist_to_binary(re:replace("abcd","^abcd#rhubarb","wx&yOpSDe",[extended])),
-?line <<"wxabcdyOpSDe">> = iolist_to_binary(re:replace("abcd","^abcd#rhubarb","wx&yOpSDe",[extended,
+ <<"aXaxRLpEPRwSlQEEw">> = iolist_to_binary(re:replace("E","([\\da-f:]+)$","aXaxRLp\\1PRwSlQ\\1\\1w",[caseless])),
+ <<"aXaxRLpEPRwSlQEEw">> = iolist_to_binary(re:replace("E","([\\da-f:]+)$","aXaxRLp\\1PRwSlQ\\1\\1w",[caseless,
+ global])),
+ <<"srXTndsE::::kfsP::LR">> = iolist_to_binary(re:replace("::","([\\da-f:]+)$","srXTndsE&&kfsP&LR",[caseless])),
+ <<"srXTndsE::::kfsP::LR">> = iolist_to_binary(re:replace("::","([\\da-f:]+)$","srXTndsE&&kfsP&LR",[caseless,
+ global])),
+ <<"5f03:12C0::932ejAFV">> = iolist_to_binary(re:replace("5f03:12C0::932e","([\\da-f:]+)$","&jAFV",[caseless])),
+ <<"5f03:12C0::932ejAFV">> = iolist_to_binary(re:replace("5f03:12C0::932e","([\\da-f:]+)$","&jAFV",[caseless,
+ global])),
+ <<"fed yjdefSWAl">> = iolist_to_binary(re:replace("fed def","([\\da-f:]+)$","yj&SWAl",[caseless])),
+ <<"fed yjdefSWAl">> = iolist_to_binary(re:replace("fed def","([\\da-f:]+)$","yj&SWAl",[caseless,
+ global])),
+ <<"Any old stuqffffafSffkdOlpalffuffR">> = iolist_to_binary(re:replace("Any old stuff","([\\da-f:]+)$","q&\\1afS&kdOlpal&u\\1R",[caseless])),
+ <<"Any old stuqffffafSffkdOlpalffuffR">> = iolist_to_binary(re:replace("Any old stuff","([\\da-f:]+)$","q&\\1afS&kdOlpal&u\\1R",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","([\\da-f:]+)$","IyKK\\1DBvmhe",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","([\\da-f:]+)$","IyKK\\1DBvmhe",[caseless,
+ global])),
+ <<"0zzz">> = iolist_to_binary(re:replace("0zzz","([\\da-f:]+)$","rdo\\1x&nKGAa",[caseless])),
+ <<"0zzz">> = iolist_to_binary(re:replace("0zzz","([\\da-f:]+)$","rdo\\1x&nKGAa",[caseless,
+ global])),
+ <<"gzzz">> = iolist_to_binary(re:replace("gzzz","([\\da-f:]+)$","CUmRDqbGoniV\\1",[caseless])),
+ <<"gzzz">> = iolist_to_binary(re:replace("gzzz","([\\da-f:]+)$","CUmRDqbGoniV\\1",[caseless,
+ global])),
+ <<"fed ">> = iolist_to_binary(re:replace("fed ","([\\da-f:]+)$","bMg\\1\\1Smk",[caseless])),
+ <<"fed ">> = iolist_to_binary(re:replace("fed ","([\\da-f:]+)$","bMg\\1\\1Smk",[caseless,
+ global])),
+ <<"Any old rubbish">> = iolist_to_binary(re:replace("Any old rubbish","([\\da-f:]+)$","&NxG\\1osbOqKBX\\1UUxiI",[caseless])),
+ <<"Any old rubbish">> = iolist_to_binary(re:replace("Any old rubbish","([\\da-f:]+)$","&NxG\\1osbOqKBX\\1UUxiI",[caseless,
+ global])),
+ <<"xn1t">> = iolist_to_binary(re:replace(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","xn\\1t",[])),
+ <<"xn1t">> = iolist_to_binary(re:replace(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","xn\\1t",[global])),
+ <<"xuA.12.123.0pmID">> = iolist_to_binary(re:replace("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","xu&pmID",[])),
+ <<"xuA.12.123.0pmID">> = iolist_to_binary(re:replace("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","xu&pmID",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","p&&t\\1\\1M&oKI",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","p&&t\\1\\1M&oKI",[global])),
+ <<".1.2.3333">> = iolist_to_binary(re:replace(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","&p",[])),
+ <<".1.2.3333">> = iolist_to_binary(re:replace(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","&p",[global])),
+ <<"1.2.3">> = iolist_to_binary(re:replace("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","\\1&LbVkk&K&F&b",[])),
+ <<"1.2.3">> = iolist_to_binary(re:replace("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","\\1&LbVkk&K&F&b",[global])),
+ <<"1234.2.3">> = iolist_to_binary(re:replace("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","Paehh\\1",[])),
+ <<"1234.2.3">> = iolist_to_binary(re:replace("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$","Paehh\\1",[global])),
+ <<"1LAfJBRwFABikGlQ1 IN SOA non-sp1 non-sp2(jE1 IN SOA non-sp1 non-sp2(">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","\\1LAfJBRwFABikGlQ&jE&",[])),
+ <<"1LAfJBRwFABikGlQ1 IN SOA non-sp1 non-sp2(jE1 IN SOA non-sp1 non-sp2(">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","\\1LAfJBRwFABikGlQ&jE&",[global])),
+ <<"vcbW">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","vcbW",[])),
+ <<"vcbW">> = iolist_to_binary(re:replace("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","vcbW",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","N",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","N",[global])),
+ <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(re:replace("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","F\\1lEQb&&o&c&&",[])),
+ <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(re:replace("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$","F\\1lEQb&&o&c&&",[global])),
+ <<"csJqaGLOa.a.Ca.Ma.ja.r">> = iolist_to_binary(re:replace("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","c\\1s\\1JqaGLO&&C&M&j&r",[])),
+ <<"csJqaGLOa.a.Ca.Ma.ja.r">> = iolist_to_binary(re:replace("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","c\\1s\\1JqaGLO&&C&M&j&r",[global])),
+ <<"TBVOOLuZ.Y">> = iolist_to_binary(re:replace("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","TBVOO\\1Lu&Y",[])),
+ <<"TBVOOLuZ.Y">> = iolist_to_binary(re:replace("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","TBVOO\\1Lu&Y",[global])),
+ <<"lAHLHAaNu2.yfAUu">> = iolist_to_binary(re:replace("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","lAH\\1LHAaNu\\1&yfAUu",[])),
+ <<"lAHLHAaNu2.yfAUu">> = iolist_to_binary(re:replace("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","lAH\\1LHAaNu\\1&yfAUu",[global])),
+ <<"EKpab-c.pq-r.">> = iolist_to_binary(re:replace("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","EKp&",[])),
+ <<"EKpab-c.pq-r.">> = iolist_to_binary(re:replace("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","EKp&",[global])),
+ <<"Ersxk.zzz.ac.uk.">> = iolist_to_binary(re:replace("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","Er&",[])),
+ <<"Ersxk.zzz.ac.uk.">> = iolist_to_binary(re:replace("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","Er&",[global])),
+ <<"Xqs">> = iolist_to_binary(re:replace("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","Xqs",[])),
+ <<"Xqs">> = iolist_to_binary(re:replace("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","Xqs",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","&DsB",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","&DsB",[global])),
+ <<"-abc.peq.">> = iolist_to_binary(re:replace("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","Kqq&&AIru&&FA\\1gbG",[])),
+ <<"-abc.peq.">> = iolist_to_binary(re:replace("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$","Kqq&&AIru&&FA\\1gbG",[global])),
+ <<"OmWMM*.acuHiylpsiKq">> = iolist_to_binary(re:replace("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","\\1OmWMM&cuHiylpsiKq",[])),
+ <<"OmWMM*.acuHiylpsiKq">> = iolist_to_binary(re:replace("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","\\1OmWMM&cuHiylpsiKq",[global])),
+ <<"j0-a0-aXQ">> = iolist_to_binary(re:replace("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","j\\1\\1XQ",[])),
+ <<"j0-a0-aXQ">> = iolist_to_binary(re:replace("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","j\\1\\1XQ",[global])),
+ <<"r3-b">> = iolist_to_binary(re:replace("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","r\\1",[])),
+ <<"r3-b">> = iolist_to_binary(re:replace("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","r\\1",[global])),
+ <<"EAXRf*.c-a.b-cpOaqRe*.c-a.b-c-a*.c-a.b-cpGer*.c-a.b-c">> = iolist_to_binary(re:replace("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","EAXRf&pOaqRe&\\1&pGer&",[])),
+ <<"EAXRf*.c-a.b-cpOaqRe*.c-a.b-c-a*.c-a.b-cpGer*.c-a.b-c">> = iolist_to_binary(re:replace("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","EAXRf&pOaqRe&\\1&pGer&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","RmO\\1XAOA\\1p",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","RmO\\1XAOA\\1p",[global])),
+ <<"*.0">> = iolist_to_binary(re:replace("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","&&iBqKyU",[])),
+ <<"*.0">> = iolist_to_binary(re:replace("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","&&iBqKyU",[global])),
+ <<"*.a-">> = iolist_to_binary(re:replace("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","sHEtAniwkH&",[])),
+ <<"*.a-">> = iolist_to_binary(re:replace("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","sHEtAniwkH&",[global])),
+ <<"*.a-b.c-">> = iolist_to_binary(re:replace("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","qy",[])),
+ <<"*.a-b.c-">> = iolist_to_binary(re:replace("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","qy",[global])),
+ <<"*.c-a.0-c">> = iolist_to_binary(re:replace("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","iH\\1J\\1\\1&iul\\1uosFI",[])),
+ <<"*.c-a.0-c">> = iolist_to_binary(re:replace("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$","iH\\1J\\1\\1&iul\\1uosFI",[global])),
+ <<"RW">> = iolist_to_binary(re:replace("abde","^(?=ab(de))(abd)(e)","RW",[])),
+ <<"RW">> = iolist_to_binary(re:replace("abde","^(?=ab(de))(abd)(e)","RW",[global])),
+ <<"xrNrabdft">> = iolist_to_binary(re:replace("abdf","^(?!(ab)de|x)(abd)(f)","xrNr&t",[])),
+ <<"xrNrabdft">> = iolist_to_binary(re:replace("abdf","^(?!(ab)de|x)(abd)(f)","xrNr&t",[global])),
+ <<"PaGpuabSCqabcdabababpbcd">> = iolist_to_binary(re:replace("abcd","^(?=(ab(cd)))(ab)","PaGpu&SCq\\1&&&pb",[])),
+ <<"PaGpuabSCqabcdabababpbcd">> = iolist_to_binary(re:replace("abcd","^(?=(ab(cd)))(ab)","PaGpu&SCq\\1&&&pb",[global])),
+ <<"eB.d.dgKSFa.b.c.dVO">> = iolist_to_binary(re:replace("a.b.c.d","^[\\da-f](\\.[\\da-f])*$","eB\\1\\1gKSF&VO",[caseless])),
+ <<"eB.d.dgKSFa.b.c.dVO">> = iolist_to_binary(re:replace("a.b.c.d","^[\\da-f](\\.[\\da-f])*$","eB\\1\\1gKSF&VO",[caseless,
+ global])),
+ <<"jpA.B.C.D.Dc.DTWA.B.C.Dl.DKIiy">> = iolist_to_binary(re:replace("A.B.C.D","^[\\da-f](\\.[\\da-f])*$","jp&\\1c\\1TW&l\\1KIiy",[caseless])),
+ <<"jpA.B.C.D.Dc.DTWA.B.C.Dl.DKIiy">> = iolist_to_binary(re:replace("A.B.C.D","^[\\da-f](\\.[\\da-f])*$","jp&\\1c\\1TW&l\\1KIiy",[caseless,
+ global])),
+ <<"NToo.Ca.Ca.b.c.1.2.3.C">> = iolist_to_binary(re:replace("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$","NToo\\1a\\1&",[caseless])),
+ <<"NToo.Ca.Ca.b.c.1.2.3.C">> = iolist_to_binary(re:replace("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$","NToo\\1a\\1&",[caseless,
+ global])),
+ <<"EftEvTFmRH">> = iolist_to_binary(re:replace("\"1234\"","^\\\".*\\\"\\s*(;.*)?$","\\1\\1EftEvTFmRH",[])),
+ <<"EftEvTFmRH">> = iolist_to_binary(re:replace("\"1234\"","^\\\".*\\\"\\s*(;.*)?$","\\1\\1EftEvTFmRH",[global])),
+ <<"j\"abcd\" ;Hyx\"abcd\" ;QTtQvYM\"abcd\" ;BK">> = iolist_to_binary(re:replace("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$","j&Hyx&QTtQvYM&BK",[])),
+ <<"j\"abcd\" ;Hyx\"abcd\" ;QTtQvYM\"abcd\" ;BK">> = iolist_to_binary(re:replace("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$","j&Hyx&QTtQvYM&BK",[global])),
+ <<"nM">> = iolist_to_binary(re:replace("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$","nM",[])),
+ <<"nM">> = iolist_to_binary(re:replace("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$","nM",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\\".*\\\"\\s*(;.*)?$","oRWmakO\\1L&pj",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\\".*\\\"\\s*(;.*)?$","oRWmakO\\1L&pj",[global])),
+ <<"\"1234\" : things">> = iolist_to_binary(re:replace("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$","kLuRd&B",[])),
+ <<"\"1234\" : things">> = iolist_to_binary(re:replace("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$","kLuRd&B",[global])),
+ <<"ixuQHwgCDVra">> = iolist_to_binary(re:replace("","^$","\\1&i\\1x\\1uQHw&\\1&gCDVra",[])),
+ <<"ixuQHwgCDVra">> = iolist_to_binary(re:replace("","^$","\\1&i\\1x\\1uQHw&\\1&gCDVra",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^$","Rg\\1SwLH\\1bP\\1&&S\\1Xa\\1S&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^$","Rg\\1SwLH\\1bP\\1&&S\\1Xa\\1S&",[global])),
+ <<"bgab cxhab cxfOtXqErdcf">> = iolist_to_binary(re:replace("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","bg&xh&xfOtXqE\\1rdcf",[extended])),
+ <<"bgab cxhab cxfOtXqErdcf">> = iolist_to_binary(re:replace("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","bg&xh&xfOtXqE\\1rdcf",[extended,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","kltlQqVmioWPcgb\\1",[extended])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","kltlQqVmioWPcgb\\1",[extended,
+ global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","F\\1FmlIs\\1\\1A&gEMuW",[extended])),
+ <<"abc">> = iolist_to_binary(re:replace("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","F\\1FmlIs\\1\\1A&gEMuW",[extended,
+ global])),
+ <<"ab cde">> = iolist_to_binary(re:replace("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","&wqEXOys\\1L",[extended])),
+ <<"ab cde">> = iolist_to_binary(re:replace("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","&wqEXOys\\1L",[extended,
+ global])),
+ <<"yxGLPQCju">> = iolist_to_binary(re:replace("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","yxGLPQCju",[])),
+ <<"yxGLPQCju">> = iolist_to_binary(re:replace("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","yxGLPQCju",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","JqU&Xjf\\1JY\\1c",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","JqU&Xjf\\1JY\\1c",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","ASnRhMlmWOb\\1Y&&",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","ASnRhMlmWOb\\1Y&&",[global])),
+ <<"ab cde">> = iolist_to_binary(re:replace("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","QcD",[])),
+ <<"ab cde">> = iolist_to_binary(re:replace("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)","QcD",[global])),
+ <<"yao">> = iolist_to_binary(re:replace("a bcd","^ a\\ b[c ]d $","\\1yao",[extended])),
+ <<"yao">> = iolist_to_binary(re:replace("a bcd","^ a\\ b[c ]d $","\\1yao",[extended,
+ global])),
+ <<"TrwOQA">> = iolist_to_binary(re:replace("a b d","^ a\\ b[c ]d $","TrwOQA",[extended])),
+ <<"TrwOQA">> = iolist_to_binary(re:replace("a b d","^ a\\ b[c ]d $","TrwOQA",[extended,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^ a\\ b[c ]d $","&rUS&afjjm&",[extended])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^ a\\ b[c ]d $","&rUS&afjjm&",[extended,
+ global])),
+ <<"abcd">> = iolist_to_binary(re:replace("abcd","^ a\\ b[c ]d $","L&XB\\1P",[extended])),
+ <<"abcd">> = iolist_to_binary(re:replace("abcd","^ a\\ b[c ]d $","L&XB\\1P",[extended,
+ global])),
+ <<"ab d">> = iolist_to_binary(re:replace("ab d","^ a\\ b[c ]d $","UMS&\\1tPBWwogPDQ&",[extended])),
+ <<"ab d">> = iolist_to_binary(re:replace("ab d","^ a\\ b[c ]d $","UMS&\\1tPBWwogPDQ&",[extended,
+ global])),
+ <<"xToOqchxqabch">> = iolist_to_binary(re:replace("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$","xToOqchxq\\1h",[])),
+ <<"xToOqchxqabch">> = iolist_to_binary(re:replace("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$","xToOqchxq\\1h",[global])),
+ ok.
+run2() ->
+ <<"LpAcLI">> = iolist_to_binary(re:replace("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$","LpAcLI",[])),
+ <<"LpAcLI">> = iolist_to_binary(re:replace("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$","LpAcLI",[global])),
+ <<"MFa+ Z0+
+QQ">> = iolist_to_binary(re:replace("a+ Z0+
+","^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]","MF\\1&QQ",[])),
+ <<"MFa+ Z0+
+QQ">> = iolist_to_binary(re:replace("a+ Z0+
+","^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]","MF\\1&QQ",[global])),
+ <<".^$(*+)|{?,?}.^$(*+)|{?,?}suXo">> = iolist_to_binary(re:replace(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+","&&s\\1uX\\1o",[])),
+ <<".^$(*+)|{?,?}.^$(*+)|{?,?}suXo">> = iolist_to_binary(re:replace(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+","&&s\\1uX\\1o",[global])),
+ <<"KDgPpAUcYEXSK">> = iolist_to_binary(re:replace("z","^a*\\w","KDgP\\1pAUcYEX\\1SK",[])),
+ <<"KDgPpAUcYEXSK">> = iolist_to_binary(re:replace("z","^a*\\w","KDgP\\1pAUcYEX\\1SK",[global])),
+ <<"slipoLkQ">> = iolist_to_binary(re:replace("az","^a*\\w","slipoLkQ",[])),
+ <<"slipoLkQ">> = iolist_to_binary(re:replace("az","^a*\\w","slipoLkQ",[global])),
+ <<"ritcgAWBT">> = iolist_to_binary(re:replace("aaaz","^a*\\w","ritcgAWBT",[])),
+ <<"ritcgAWBT">> = iolist_to_binary(re:replace("aaaz","^a*\\w","ritcgAWBT",[global])),
+ <<"XcRsWQyYNjiYwb">> = iolist_to_binary(re:replace("a","^a*\\w","X\\1cRsWQyYNjiYwb",[])),
+ <<"XcRsWQyYNjiYwb">> = iolist_to_binary(re:replace("a","^a*\\w","X\\1cRsWQyYNjiYwb",[global])),
+ <<"MaaFKe">> = iolist_to_binary(re:replace("aa","^a*\\w","M&F\\1\\1K\\1e",[])),
+ <<"MaaFKe">> = iolist_to_binary(re:replace("aa","^a*\\w","M&F\\1\\1K\\1e",[global])),
+ <<"h">> = iolist_to_binary(re:replace("aaaa","^a*\\w","h",[])),
+ <<"h">> = iolist_to_binary(re:replace("aaaa","^a*\\w","h",[global])),
+ <<"qYN+">> = iolist_to_binary(re:replace("a+","^a*\\w","qYN",[])),
+ <<"qYN+">> = iolist_to_binary(re:replace("a+","^a*\\w","qYN",[global])),
+ <<"EfVPxKaaaaewBXaaaawUW+">> = iolist_to_binary(re:replace("aa+","^a*\\w","EfVPx\\1K&&ewBX&&wUW",[])),
+ <<"EfVPxKaaaaewBXaaaawUW+">> = iolist_to_binary(re:replace("aa+","^a*\\w","EfVPx\\1K&&ewBX&&wUW",[global])),
+ <<"hslzzPMpWzzIkdYL">> = iolist_to_binary(re:replace("z","^a*?\\w","hsl&&PMpW&&I\\1kdYL",[])),
+ <<"hslzzPMpWzzIkdYL">> = iolist_to_binary(re:replace("z","^a*?\\w","hsl&&PMpW&&I\\1kdYL",[global])),
+ <<"RBz">> = iolist_to_binary(re:replace("az","^a*?\\w","R\\1B",[])),
+ <<"RBz">> = iolist_to_binary(re:replace("az","^a*?\\w","R\\1B",[global])),
+ <<"IvEhVdavyqnaaz">> = iolist_to_binary(re:replace("aaaz","^a*?\\w","IvEhVd&vy\\1qn",[])),
+ <<"IvEhVdavyqnaaz">> = iolist_to_binary(re:replace("aaaz","^a*?\\w","IvEhVd&vy\\1qn",[global])),
+ <<"JnVaaH">> = iolist_to_binary(re:replace("a","^a*?\\w","JnV&&\\1H\\1",[])),
+ <<"JnVaaH">> = iolist_to_binary(re:replace("a","^a*?\\w","JnV&&\\1H\\1",[global])),
+ <<"JFfVUa">> = iolist_to_binary(re:replace("aa","^a*?\\w","\\1J\\1FfVU",[])),
+ <<"JFfVUa">> = iolist_to_binary(re:replace("aa","^a*?\\w","\\1J\\1FfVU",[global])),
+ <<"aDPvxaYarvWrRabShaHaaa">> = iolist_to_binary(re:replace("aaaa","^a*?\\w","aDPvx&Y&rvWrR&bShaH",[])),
+ <<"aDPvxaYarvWrRabShaHaaa">> = iolist_to_binary(re:replace("aaaa","^a*?\\w","aDPvx&Y&rvWrR&bShaH",[global])),
+ <<"Aih+">> = iolist_to_binary(re:replace("a+","^a*?\\w","Ai\\1h",[])),
+ <<"Aih+">> = iolist_to_binary(re:replace("a+","^a*?\\w","Ai\\1h",[global])),
+ <<"xbMsOXBdaaAa+">> = iolist_to_binary(re:replace("aa+","^a*?\\w","xbMsOXBd&&A",[])),
+ <<"xbMsOXBdaaAa+">> = iolist_to_binary(re:replace("aa+","^a*?\\w","xbMsOXBd&&A",[global])),
+ <<"azvPASpIqMtrikazJ">> = iolist_to_binary(re:replace("az","^a+\\w","&vPASpIq\\1Mt\\1r\\1ik&J",[])),
+ <<"azvPASpIqMtrikazJ">> = iolist_to_binary(re:replace("az","^a+\\w","&vPASpIq\\1Mt\\1r\\1ik&J",[global])),
+ <<"ofnsOlLLpmuNPiXJE">> = iolist_to_binary(re:replace("aaaz","^a+\\w","ofnsOlLLpmuNPiXJE",[])),
+ <<"ofnsOlLLpmuNPiXJE">> = iolist_to_binary(re:replace("aaaz","^a+\\w","ofnsOlLLpmuNPiXJE",[global])),
+ <<"baaDpxe">> = iolist_to_binary(re:replace("aa","^a+\\w","b&D\\1pxe",[])),
+ <<"baaDpxe">> = iolist_to_binary(re:replace("aa","^a+\\w","b&D\\1pxe",[global])),
+ <<"blkOVluqr">> = iolist_to_binary(re:replace("aaaa","^a+\\w","b\\1lkOV\\1luqr",[])),
+ <<"blkOVluqr">> = iolist_to_binary(re:replace("aaaa","^a+\\w","b\\1lkOV\\1luqr",[global])),
+ <<"RNRBD+">> = iolist_to_binary(re:replace("aa+","^a+\\w","RNRBD",[])),
+ <<"RNRBD+">> = iolist_to_binary(re:replace("aa+","^a+\\w","RNRBD",[global])),
+ <<"CyazerWDQaNazazxDT">> = iolist_to_binary(re:replace("az","^a+?\\w","Cy&\\1erWDQaN&&xDT\\1",[])),
+ <<"CyazerWDQaNazazxDT">> = iolist_to_binary(re:replace("az","^a+?\\w","Cy&\\1erWDQaN&&xDT\\1",[global])),
+ <<"pqJrRaaNRaz">> = iolist_to_binary(re:replace("aaaz","^a+?\\w","pq\\1J\\1rR&NR",[])),
+ <<"pqJrRaaNRaz">> = iolist_to_binary(re:replace("aaaz","^a+?\\w","pq\\1J\\1rR&NR",[global])),
+ <<"aaAdj">> = iolist_to_binary(re:replace("aa","^a+?\\w","&Ad\\1j",[])),
+ <<"aaAdj">> = iolist_to_binary(re:replace("aa","^a+?\\w","&Ad\\1j",[global])),
+ <<"JsRWaaEHmuaaFaaArLaNaaaa">> = iolist_to_binary(re:replace("aaaa","^a+?\\w","JsRW&EHmu&F&\\1ArLaN&",[])),
+ <<"JsRWaaEHmuaaFaaArLaNaaaa">> = iolist_to_binary(re:replace("aaaa","^a+?\\w","JsRW&EHmu&F&\\1ArLaN&",[global])),
+ <<"hQmeo+">> = iolist_to_binary(re:replace("aa+","^a+?\\w","hQmeo",[])),
+ <<"hQmeo+">> = iolist_to_binary(re:replace("aa+","^a+?\\w","hQmeo",[global])),
+ <<"tSwgJd1234567890">> = iolist_to_binary(re:replace("1234567890","^\\d{8}\\w{2,}","tSwgJd&",[])),
+ <<"tSwgJd1234567890">> = iolist_to_binary(re:replace("1234567890","^\\d{8}\\w{2,}","tSwgJd&",[global])),
+ <<"u">> = iolist_to_binary(re:replace("12345678ab","^\\d{8}\\w{2,}","u",[])),
+ <<"u">> = iolist_to_binary(re:replace("12345678ab","^\\d{8}\\w{2,}","u",[global])),
+ <<"12345678__JvTBhjF">> = iolist_to_binary(re:replace("12345678__","^\\d{8}\\w{2,}","&JvTBhj\\1F",[])),
+ <<"12345678__JvTBhjF">> = iolist_to_binary(re:replace("12345678__","^\\d{8}\\w{2,}","&JvTBhj\\1F",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8}\\w{2,}","JQw&GNCBooSB",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8}\\w{2,}","JQw&GNCBooSB",[global])),
+ <<"1234567">> = iolist_to_binary(re:replace("1234567","^\\d{8}\\w{2,}","oTp&mFd\\1",[])),
+ <<"1234567">> = iolist_to_binary(re:replace("1234567","^\\d{8}\\w{2,}","oTp&mFd\\1",[global])),
+ <<"truoieVC">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}$","tr&V\\1\\1C",[])),
+ <<"truoieVC">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}$","tr&V\\1\\1C",[global])),
+ <<"SIBB1234a">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}$","SIBB\\1&a",[])),
+ <<"SIBB1234a">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}$","SIBB\\1&a",[global])),
+ <<"12345KiNQWVML12345HyU">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}$","&KiN\\1QWVML&HyU",[])),
+ <<"12345KiNQWVML12345HyU">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}$","&KiN\\1QWVML&HyU",[global])),
+ <<"hxENo">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}$","\\1hxENo\\1",[])),
+ <<"hxENo">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}$","\\1hxENo\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[aeiou\\d]{4,5}$","h&RGpLB\\1hlS&pk\\1&yKh",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[aeiou\\d]{4,5}$","h&RGpLB\\1hlS&pk\\1&yKh",[global])),
+ <<"123456">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}$","&\\1rrEfxa\\1mc",[])),
+ <<"123456">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}$","&\\1rrEfxa\\1mc",[global])),
+ <<"hJscruoieFbuoie">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}?","hJs\\1cr&Fb&",[])),
+ <<"hJscruoieFbuoie">> = iolist_to_binary(re:replace("uoie","^[aeiou\\d]{4,5}?","hJs\\1cr&Fb&",[global])),
+ <<"OK12341234bV">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}?","OK&&bV",[])),
+ <<"OK12341234bV">> = iolist_to_binary(re:replace("1234","^[aeiou\\d]{4,5}?","OK&&bV",[global])),
+ <<"g5">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}?","g\\1",[])),
+ <<"g5">> = iolist_to_binary(re:replace("12345","^[aeiou\\d]{4,5}?","g\\1",[global])),
+ <<"MKbLkaaaajjoeeykaaaaa">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}?","MKbLk&jjoeeyk&",[])),
+ <<"MKbLkaaaajjoeeykaaaaa">> = iolist_to_binary(re:replace("aaaaa","^[aeiou\\d]{4,5}?","MKbLk&jjoeeyk&",[global])),
+ <<"qExB1234GQ56">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}?","qExB&GQ",[])),
+ <<"qExB1234GQ56">> = iolist_to_binary(re:replace("123456","^[aeiou\\d]{4,5}?","qExB&GQ",[global])),
+ <<"abc=abcabcshRMauJabceabcMabcvDjywabcw">> = iolist_to_binary(re:replace("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z","&shRMauJ\\1e\\1M\\1vDjyw\\1w",[])),
+ <<"abc=abcabcshRMauJabceabcMabcvDjywabcw">> = iolist_to_binary(re:replace("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z","&shRMauJ\\1e\\1M\\1vDjyw\\1w",[global])),
+ <<"def=defdefdefM">> = iolist_to_binary(re:replace("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z","&M",[])),
+ <<"def=defdefdefM">> = iolist_to_binary(re:replace("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z","&M",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z","\\1ums",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z","\\1ums",[global])),
+ <<"abc=defdef">> = iolist_to_binary(re:replace("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z","DkIJLD&Cwg&\\1kq&tsp&&",[])),
+ <<"abc=defdef">> = iolist_to_binary(re:replace("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z","DkIJLD&Cwg&\\1kq&tsp&&",[global])),
+ <<"uaahabcdefghijkcda2aqkRJhtVuiyWJaG">> = iolist_to_binary(re:replace("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","u\\1ah&\\1qkRJhtVuiyWJaG",[])),
+ <<"uaahabcdefghijkcda2aqkRJhtVuiyWJaG">> = iolist_to_binary(re:replace("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","u\\1ah&\\1qkRJhtVuiyWJaG",[global])),
+ <<"lBSDdJXabcdefghijkkkkcda2DPEXjc">> = iolist_to_binary(re:replace("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","lBSDdJX&DPEXjc",[])),
+ <<"lBSDdJXabcdefghijkkkkcda2DPEXjc">> = iolist_to_binary(re:replace("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$","lBSDdJX&DPEXjc",[global])),
+ <<"tEYloj">> = iolist_to_binary(re:replace("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","tEYloj",[])),
+ <<"tEYloj">> = iolist_to_binary(re:replace("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","tEYloj",[global])),
+ <<"catatonic catatonic23HiXcatatonic catatonic23">> = iolist_to_binary(re:replace("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","&HiX&",[])),
+ <<"catatonic catatonic23HiXcatatonic catatonic23">> = iolist_to_binary(re:replace("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","&HiX&",[global])),
+ <<"EtmqcaterpillarvtVmieDAa">> = iolist_to_binary(re:replace("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","Etmq\\1vtVmieDAa",[])),
+ <<"EtmqcaterpillarvtVmieDAa">> = iolist_to_binary(re:replace("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)","Etmq\\1vtVmieDAa",[global])),
+ <<"rFrom abcd Mon Sep 01 12:33aThFrom abcd Mon Sep 01 12:33rJabcd:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]","r&aTh&rJ\\1",[])),
+ <<"rFrom abcd Mon Sep 01 12:33aThFrom abcd Mon Sep 01 12:33rJabcd:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]","r&aTh&rJ\\1",[global])),
+ <<"tKjeGYi:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","tKjeGYi",[])),
+ <<"tKjeGYi:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","tKjeGYi",[global])),
+ <<"From abcd Mon Sep 1 12:33Sep WqBFrom abcd Mon Sep 1 12:33UFrom abcd Mon Sep 1 12:33MHUFrom abcd Mon Sep 1 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","&\\1WqB&U&MHU&",[])),
+ <<"From abcd Mon Sep 1 12:33Sep WqBFrom abcd Mon Sep 1 12:33UFrom abcd Mon Sep 1 12:33MHUFrom abcd Mon Sep 1 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","&\\1WqB&U&MHU&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","RWw&\\1f",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","RWw&\\1f",[global])),
+ <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","lDKNKPmMpd",[])),
+ <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(re:replace("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d","lDKNKPmMpd",[global])),
+ <<"eNnWbKP">> = iolist_to_binary(re:replace("12
+34","^12.34","eNnWbK\\1P",[dotall])),
+ <<"eNnWbKP">> = iolist_to_binary(re:replace("12
+34","^12.34","eNnWbK\\1P",[dotall,global])),
+ <<"fI12 34N">> = iolist_to_binary(re:replace("12 34","^12.34","fI&N\\1",[dotall])),
+ <<"fI12 34N">> = iolist_to_binary(re:replace("12 34","^12.34","fI&N\\1",[dotall,
+ global])),
+ <<"the quick jmlgbrownfrbrownIaXThxdySok fox">> = iolist_to_binary(re:replace("the quick brown fox","\\w+(?=\\t)","j\\1mlg&fr&IaXThxdySok",[])),
+ <<"the quick jmlgbrownfrbrownIaXThxdySok fox">> = iolist_to_binary(re:replace("the quick brown fox","\\w+(?=\\t)","j\\1mlg&fr&IaXThxdySok",[global])),
+ <<"foobar is vjQvQsKSfoolish see?cmTPlish see?DB">> = iolist_to_binary(re:replace("foobar is foolish see?","foo(?!bar)(.*)","vjQvQsKS&cmTP\\1DB",[])),
+ <<"foobar is vjQvQsKSfoolish see?cmTPlish see?DB">> = iolist_to_binary(re:replace("foobar is foolish see?","foo(?!bar)(.*)","vjQvQsKS&cmTP\\1DB",[global])),
+ <<"foobar cGBmrowbar etcrowbar etcxPCf etc">> = iolist_to_binary(re:replace("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)","GBm&&xPCf\\1",[])),
+ <<"foobar cGBmrowbar etcrowbar etcxPCf etc">> = iolist_to_binary(re:replace("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)","GBm&&xPCf\\1",[global])),
+ <<"GDErP">> = iolist_to_binary(re:replace("barrel","(?:(?!foo)...|^.{0,2})bar(.*)","GDErP",[])),
+ <<"GDErP">> = iolist_to_binary(re:replace("barrel","(?:(?!foo)...|^.{0,2})bar(.*)","GDErP",[global])),
+ <<"VFDc2barrelqsDrelRKrelbMVIi2barrelb2barrel">> = iolist_to_binary(re:replace("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)","VFDc&qsD\\1RK\\1bMVIi&b&",[])),
+ <<"VFDc2barrelqsDrelRKrelbMVIi2barrelb2barrel">> = iolist_to_binary(re:replace("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)","VFDc&qsD\\1RK\\1bMVIi&b&",[global])),
+ <<"DreltMOOKlgrelMMOgA barrel">> = iolist_to_binary(re:replace("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)","D\\1tMOOKlg\\1MMOg&",[])),
+ <<"DreltMOOKlgrelMMOgA barrel">> = iolist_to_binary(re:replace("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)","D\\1tMOOKlg\\1MMOg&",[global])),
+ <<"DiLKve456">> = iolist_to_binary(re:replace("abc456","^(\\D*)(?=\\d)(?!123)","DiLKve",[])),
+ <<"DiLKve456">> = iolist_to_binary(re:replace("abc456","^(\\D*)(?=\\d)(?!123)","DiLKve",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","BTbC",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","BTbC",[global])),
+ <<"abc123">> = iolist_to_binary(re:replace("abc123","^(\\D*)(?=\\d)(?!123)","DJbM\\1wLxB\\1J&&H\\1&uHc",[])),
+ <<"abc123">> = iolist_to_binary(re:replace("abc123","^(\\D*)(?=\\d)(?!123)","DJbM\\1wLxB\\1J&&H\\1&uHc",[global])),
+ ok.
+run3() ->
+ <<"1234cNbGaCaxuI">> = iolist_to_binary(re:replace("1234","^1234(?# test newlines
+ inside)","&cNbGaCaxuI",[])),
+ <<"1234cNbGaCaxuI">> = iolist_to_binary(re:replace("1234","^1234(?# test newlines
+ inside)","&cNbGaCaxuI",[global])),
+ <<"jmCvIAMNV1234nNrfW1234GM">> = iolist_to_binary(re:replace("1234","^1234 #comment in extended re
+ ","\\1jmCvIAMNV\\1&nNrfW&GM",[extended])),
+ <<"jmCvIAMNV1234nNrfW1234GM">> = iolist_to_binary(re:replace("1234","^1234 #comment in extended re
+ ","\\1jmCvIAMNV\\1&nNrfW&GM",[extended,global])),
+ <<"YyiILRKFjY">> = iolist_to_binary(re:replace("abcd","#rhubarb
+ abcd","YyiILRKFjY",[extended])),
+ <<"YyiILRKFjY">> = iolist_to_binary(re:replace("abcd","#rhubarb
+ abcd","YyiILRKFjY",[extended,global])),
+ <<"XbpsAef">> = iolist_to_binary(re:replace("abcd","^abcd#rhubarb","Xbps\\1Aef",[extended])),
+ <<"XbpsAef">> = iolist_to_binary(re:replace("abcd","^abcd#rhubarb","Xbps\\1Aef",[extended,
global])),
-?line <<"aqfaaaab">> = iolist_to_binary(re:replace("aaab","^(a)\\1{2,3}(.)","\\1qf\\1&",[])),
-?line <<"aqfaaaab">> = iolist_to_binary(re:replace("aaab","^(a)\\1{2,3}(.)","\\1qf\\1&",[global])),
-?line <<"aLGaaaabhavaLLxaIaaaabJaaaabidaaaab">> = iolist_to_binary(re:replace("aaaab","^(a)\\1{2,3}(.)","\\1LG&h\\1v\\1LLx\\1I&J&id&",[])),
-?line <<"aLGaaaabhavaLLxaIaaaabJaaaabidaaaab">> = iolist_to_binary(re:replace("aaaab","^(a)\\1{2,3}(.)","\\1LG&h\\1v\\1LLx\\1I&J&id&",[global])),
-?line <<"aaaaaEaaaaagaawPOaNaaaaab">> = iolist_to_binary(re:replace("aaaaab","^(a)\\1{2,3}(.)","&E&g\\1\\1wPO\\1N&",[])),
-?line <<"aaaaaEaaaaagaawPOaNaaaaab">> = iolist_to_binary(re:replace("aaaaab","^(a)\\1{2,3}(.)","&E&g\\1\\1wPO\\1N&",[global])),
-?line <<"QwegtaHxecVVVaaaaaab">> = iolist_to_binary(re:replace("aaaaaab","^(a)\\1{2,3}(.)","QwegtaHxecVVV&",[])),
-?line <<"QwegtaHxecVVVaaaaaab">> = iolist_to_binary(re:replace("aaaaaab","^(a)\\1{2,3}(.)","QwegtaHxecVVV&",[global])),
-?line <<"the EcabcmU">> = iolist_to_binary(re:replace("the abc","(?!^)abc","Ec&mU",[])),
-?line <<"the EcabcmU">> = iolist_to_binary(re:replace("the abc","(?!^)abc","Ec&mU",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?!^)abc","NA",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?!^)abc","NA",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(?!^)abc","yjhaoMMFW\\1",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(?!^)abc","yjhaoMMFW\\1",[global])),
-?line <<"PKCfTNYlWMooD">> = iolist_to_binary(re:replace("abc","(?=^)abc","\\1PK\\1CfTNYlWMooD",[])),
-?line <<"PKCfTNYlWMooD">> = iolist_to_binary(re:replace("abc","(?=^)abc","\\1PK\\1CfTNYlWMooD",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=^)abc","fR\\1ltffBHNVYixMX",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=^)abc","fR\\1ltffBHNVYixMX",[global])),
-?line <<"the abc">> = iolist_to_binary(re:replace("the abc","(?=^)abc","L\\1JJFtgfU&l",[])),
-?line <<"the abc">> = iolist_to_binary(re:replace("the abc","(?=^)abc","L\\1JJFtgfU&l",[global])),
-?line <<"aabbvbOdaabbyVtUjIbqObbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*|b)","&v\\1Od&yVtUjI\\1qO\\1",[])),
-?line <<"aabbvbOdaabbyVtUjIbqObbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*|b)","&v\\1Od&yVtUjI\\1qO\\1",[global])),
-?line <<"PLPJVxaabbbbbYrEOEywwHFp">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*|b)","PLPJVxa\\1YrEOEywwHFp",[])),
-?line <<"PLPJVxaabbbbbYrEOEywwHFp">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*|b)","PLPJVxa\\1YrEOEywwHFp",[global])),
-?line <<"VmghaaMBBitDaaaRnWKaaaAbbbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*?|b)","Vmgh&MBBitD&\\1RnWK&\\1A",[])),
-?line <<"VmghaaMBBitDaaaRnWKaaaAbbbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*?|b)","Vmgh&MBBitD&\\1RnWK&\\1A",[global])),
-?line <<"baabblNbbLhaabbtbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*?|b)","\\1&lNb\\1Lh&t",[])),
-?line <<"baabblNbbLhaabbtbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*?|b)","\\1&lNb\\1Lh&t",[global])),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
+ <<"iPHiDDB">> = iolist_to_binary(re:replace("aaab","^(a)\\1{2,3}(.)","iPHiDDB",[])),
+ <<"iPHiDDB">> = iolist_to_binary(re:replace("aaab","^(a)\\1{2,3}(.)","iPHiDDB",[global])),
+ <<"IXEQflgnaWgr">> = iolist_to_binary(re:replace("aaaab","^(a)\\1{2,3}(.)","IXEQflgn\\1Wgr",[])),
+ <<"IXEQflgnaWgr">> = iolist_to_binary(re:replace("aaaab","^(a)\\1{2,3}(.)","IXEQflgn\\1Wgr",[global])),
+ <<"gToJhaaaaaOaaaaaaaaaaaiaaaaaHLaNAWab">> = iolist_to_binary(re:replace("aaaaab","^(a)\\1{2,3}(.)","gToJh&O\\1&&i&HL\\1NAW\\1",[])),
+ <<"gToJhaaaaaOaaaaaaaaaaaiaaaaaHLaNAWab">> = iolist_to_binary(re:replace("aaaaab","^(a)\\1{2,3}(.)","gToJh&O\\1&&i&HL\\1NAW\\1",[global])),
+ <<"aaaaaaGwEYYdXmTRmaaaaasXab">> = iolist_to_binary(re:replace("aaaaaab","^(a)\\1{2,3}(.)","&\\1GwEYYdXmTRm&sX",[])),
+ <<"aaaaaaGwEYYdXmTRmaaaaasXab">> = iolist_to_binary(re:replace("aaaaaab","^(a)\\1{2,3}(.)","&\\1GwEYYdXmTRm&sX",[global])),
+ <<"the abcabcLiXhGXmrloabcEfabcAbS">> = iolist_to_binary(re:replace("the abc","(?!^)abc","&&LiXhGXmrlo&Ef&AbS",[])),
+ <<"the abcabcLiXhGXmrloabcEfabcAbS">> = iolist_to_binary(re:replace("the abc","(?!^)abc","&&LiXhGXmrlo&Ef&AbS",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?!^)abc","uyPPG",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?!^)abc","uyPPG",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(?!^)abc","x\\1sgS\\1tB\\1RcyA\\1enf",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(?!^)abc","x\\1sgS\\1tB\\1RcyA\\1enf",[global])),
+ <<"abcubl">> = iolist_to_binary(re:replace("abc","(?=^)abc","&ubl",[])),
+ <<"abcubl">> = iolist_to_binary(re:replace("abc","(?=^)abc","&ubl",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=^)abc","NPTqioPj",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=^)abc","NPTqioPj",[global])),
+ <<"the abc">> = iolist_to_binary(re:replace("the abc","(?=^)abc","\\1pNTRQmK\\1Hj",[])),
+ <<"the abc">> = iolist_to_binary(re:replace("the abc","(?=^)abc","\\1pNTRQmK\\1Hj",[global])),
+ <<"QpbbCJcbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*|b)","Qp\\1bCJc",[])),
+ <<"QpbbCJcbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*|b)","Qp\\1bCJc",[global])),
+ <<"PcVuJcWmvIiq">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*|b)","PcVuJcWmvIiq",[])),
+ <<"PcVuJcWmvIiq">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*|b)","PcVuJcWmvIiq",[global])),
+ <<"fwRaaeKbsaanjaKaUaadaaybbbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*?|b)","fwR&eKbs&nj\\1K\\1U&d\\1\\1y",[])),
+ <<"fwRaaeKbsaanjaKaUaadaaybbbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}?(ab*?|b)","fwR&eKbs&nj\\1K\\1U&d\\1\\1y",[global])),
+ <<"bblQaabbCsbbeeQvYbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*?|b)","\\1\\1lQ&Cs\\1\\1eeQvY",[])),
+ <<"bblQaabbCsbbeeQvYbbb">> = iolist_to_binary(re:replace("aabbbbb","^[ab]{1,3}(ab*?|b)","\\1\\1lQ&Cs\\1\\1eeQvY",[global])),
+ <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -901,8 +959,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","Ag",[extended])),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","SOd&j",[extended])),
+ <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1094,9 +1152,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","Ag",[extended,
- global])),
-?line <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","SOd&j",[extended,
+ global])),
+ <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1288,8 +1346,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","OcN\\1",[extended])),
-?line <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","Rli",[extended])),
+ <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1481,9 +1539,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","OcN\\1",[extended,
- global])),
-?line <<"user.ain">> = iolist_to_binary(re:replace("user.ain"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","Rli",[extended,
+ global])),
+ <<"user.ain">> = iolist_to_binary(re:replace("user.ain"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1675,8 +1733,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","P\\1\\1",[extended])),
-?line <<"user.ain">> = iolist_to_binary(re:replace("user.ain"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","g&TWfEDY",[extended])),
+ <<"user.ain">> = iolist_to_binary(re:replace("user.ain"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1868,9 +1926,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","P\\1\\1",[extended,
- global])),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","g&TWfEDY",[extended,
+ global])),
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2062,8 +2120,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","tFTD&XMAPNeq",[extended])),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","Cw",[extended])),
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2255,9 +2313,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","tFTD&XMAPNeq",[extended,
- global])),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","Cw",[extended,
+ global])),
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2449,8 +2507,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","c\\1&C&YTXnfnhWs\\1g",[extended])),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","ej",[extended])),
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2642,9 +2700,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","c\\1&C&YTXnfnhWs\\1g",[extended,
- global])),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","ej",[extended,
+ global])),
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2836,8 +2894,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","\\1R&P&\\1aCnlgH",[extended])),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","y\\1D",[extended])),
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3029,9 +3087,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","\\1R&P&\\1aCnlgH",[extended,
- global])),
-?line <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","y\\1D",[extended,
+ global])),
+ <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3223,8 +3281,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","p\\1u\\1REy&",[extended])),
-?line <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","\\1jrwjC",[extended])),
+ <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3416,9 +3474,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","p\\1u\\1REy&",[extended,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","\\1jrwjC",[extended,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3610,8 +3668,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","qytCjuWj\\1fpNNv\\1&ya",[extended])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","&qqjm",[extended])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3803,9 +3861,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","qytCjuWj\\1fpNNv\\1&ya",[extended,
- global])),
-?line <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","&qqjm",[extended,
+ global])),
+ <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3997,8 +4055,8 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","L",[extended])),
-?line <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox"," (?: [\\040\\t] | \\(
+\\) )* # optional trailing comment","m\\1K&o&&mg&qC&f\\1V\\1i",[extended])),
+ <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -4190,9 +4248,9 @@ run() ->
# name and address
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
-\\) )* # optional trailing comment","L",[extended,
- global])),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
+\\) )* # optional trailing comment","m\\1K&o&&mg&qC&f\\1V\\1i",[extended,
+ global])),
+ <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -4772,8 +4830,8 @@ run() ->
# address spec
> # >
# name and address
-)","\\1",[extended])),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
+)","d\\1&sJD\\1oA\\1Aruv",[extended])),
+ <<"Alan Other <user.ain>">> = iolist_to_binary(re:replace("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -5353,8 +5411,8 @@ run() ->
# address spec
> # >
# name and address
-)","\\1",[extended,global])),
-?line <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>","[\\040\\t]* # Nab whitespace.
+)","d\\1&sJD\\1oA\\1Aruv",[extended,global])),
+ <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -5934,8 +5992,8 @@ run() ->
# address spec
> # >
# name and address
-)","On",[extended])),
-?line <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>","[\\040\\t]* # Nab whitespace.
+)","HuWGl&iF&NPX&",[extended])),
+ <<"<user.ain>">> = iolist_to_binary(re:replace("<user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -6515,8 +6573,8 @@ run() ->
# address spec
> # >
# name and address
-)","On",[extended,global])),
-?line <<"user.ain">> = iolist_to_binary(re:replace("user.ain","[\\040\\t]* # Nab whitespace.
+)","HuWGl&iF&NPX&",[extended,global])),
+ <<"user.ain">> = iolist_to_binary(re:replace("user.ain","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -7096,8 +7154,8 @@ run() ->
# address spec
> # >
# name and address
-)","OLL\\1TqepmsD\\1V\\1\\1h\\1DsD",[extended])),
-?line <<"user.ain">> = iolist_to_binary(re:replace("user.ain","[\\040\\t]* # Nab whitespace.
+)","VhK&cYXg&Bq\\1f&F",[extended])),
+ <<"user.ain">> = iolist_to_binary(re:replace("user.ain","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -7677,8 +7735,8 @@ run() ->
# address spec
> # >
# name and address
-)","OLL\\1TqepmsD\\1V\\1\\1h\\1DsD",[extended,global])),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+)","VhK&cYXg&Bq\\1f&F",[extended,global])),
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -8258,8 +8316,8 @@ run() ->
# address spec
> # >
# name and address
-)","SHuKuC\\1Td",[extended])),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+)","a\\1&eMwwW",[extended])),
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -8839,8 +8897,8 @@ run() ->
# address spec
> # >
# name and address
-)","SHuKuC\\1Td",[extended,global])),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+)","a\\1&eMwwW",[extended,global])),
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -9420,8 +9478,8 @@ run() ->
# address spec
> # >
# name and address
-)","D&t&LSQGMfQpSXj",[extended])),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+)","\\1n\\1nYhyxBv&nk&&Sa",[extended])),
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(re:replace("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -10001,8 +10059,8 @@ run() ->
# address spec
> # >
# name and address
-)","D&t&LSQGMfQpSXj",[extended,global])),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
+)","\\1n\\1nYhyxBv&nk&&Sa",[extended,global])),
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -10582,8 +10640,8 @@ run() ->
# address spec
> # >
# name and address
-)","qDSGw",[extended])),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
+)","\\1fdORBWKv\\1&",[extended])),
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(re:replace("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -11163,8 +11221,8 @@ run() ->
# address spec
> # >
# name and address
-)","qDSGw",[extended,global])),
-?line <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
+)","\\1fdORBWKv\\1&",[extended,global])),
+ <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -11744,8 +11802,8 @@ run() ->
# address spec
> # >
# name and address
-)","SOYovQniOUVJIil\\1",[extended])),
-?line <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
+)","Utb&\\1l&M\\1aori&\\1&W",[extended])),
+ <<"A missing angle <user.where">> = iolist_to_binary(re:replace("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -12325,8 +12383,8 @@ run() ->
# address spec
> # >
# name and address
-)","SOYovQniOUVJIil\\1",[extended,global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\040\\t]* # Nab whitespace.
+)","Utb&\\1l&M\\1aori&\\1&W",[extended,global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -12906,8 +12964,8 @@ run() ->
# address spec
> # >
# name and address
-)","D\\1",[extended])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\040\\t]* # Nab whitespace.
+)","\\1&RUPp\\1",[extended])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -13487,8 +13545,8 @@ run() ->
# address spec
> # >
# name and address
-)","D\\1",[extended,global])),
-?line <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox","[\\040\\t]* # Nab whitespace.
+)","\\1&RUPp\\1",[extended,global])),
+ <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -14068,8 +14126,8 @@ run() ->
# address spec
> # >
# name and address
-)","X&ayUGYrNMDenjwrkvT",[extended])),
-?line <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox","[\\040\\t]* # Nab whitespace.
+)","M",[extended])),
+ <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -14649,3409 +14707,3433 @@ run() ->
# address spec
> # >
# name and address
-)","X&ayUGYrNMDenjwrkvT",[extended,global])),
-?line <<"abcdefpqrxyz0AB">> = iolist_to_binary(re:replace("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB","bYVVTfV",[])),
-?line <<"abcdefpqrxyz0AB">> = iolist_to_binary(re:replace("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB","bYVVTfV",[global])),
-?line <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(re:replace("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB","ALc",[])),
-?line <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(re:replace("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB","ALc",[global])),
-?line <<"abc efpqr0xyz00AB">> = iolist_to_binary(re:replace("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","FJjJa&MUN",[])),
-?line <<"abc efpqr0xyz00AB">> = iolist_to_binary(re:replace("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","FJjJa&MUN",[global])),
-?line <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(re:replace("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","IsJK",[])),
-?line <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(re:replace("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","IsJK",[global])),
-?line <<"A">> = iolist_to_binary(re:replace("A","^[\\000-\\037]","&&&l&oFiYRb&dwnRVIB",[])),
-?line <<"A">> = iolist_to_binary(re:replace("A","^[\\000-\\037]","&&&l&oFiYRb&dwnRVIB",[global])),
-?line <<"pJINBIVHkbsQpNB">> = iolist_to_binary(re:replace("B","^[\\000-\\037]","p\\1JINBIVHkbs&QpN",[])),
-?line <<"pJINBIVHkbsQpNB">> = iolist_to_binary(re:replace("B","^[\\000-\\037]","p\\1JINBIVHkbs&QpN",[global])),
-?line <<"qnaxlKtxgBKMC">> = iolist_to_binary(re:replace("C","^[\\000-\\037]","qnax&lKtxgB&KM",[])),
-?line <<"qnaxlKtxgBKMC">> = iolist_to_binary(re:replace("C","^[\\000-\\037]","qnax&lKtxgB&KM",[global])),
-?line <<"WuuRxIy">> = iolist_to_binary(re:replace("","\\0*","Wu&uRxIy",[])),
-?line <<"WuuRxIy">> = iolist_to_binary(re:replace("","\\0*","Wu&uRxIy",[global])),
-?line <<"The AZ">> = iolist_to_binary(re:replace("The AZ","A\\x0{2,3}Z","ggJSniphIbt",[])),
-?line <<"The AZ">> = iolist_to_binary(re:replace("The AZ","A\\x0{2,3}Z","ggJSniphIbt",[global])),
-?line <<"An AZ">> = iolist_to_binary(re:replace("An AZ","A\\x0{2,3}Z","s&\\1Bwkjj",[])),
-?line <<"An AZ">> = iolist_to_binary(re:replace("An AZ","A\\x0{2,3}Z","s&\\1Bwkjj",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","A\\x0{2,3}Z","\\1eJyYpl",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","A\\x0{2,3}Z","\\1eJyYpl",[global])),
-?line <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","aK\\1qVDC\\1uB",[])),
-?line <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","aK\\1qVDC\\1uB",[global])),
-?line <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","DMN&CNdjTe",[])),
-?line <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","DMN&CNdjTe",[global])),
-?line <<"cowcowbelldrlcowNSbcowcowbelladivdcowcowbell">> = iolist_to_binary(re:replace("cowcowbell","^(cow|)\\1(bell)","&drl\\1NSb&adivd&",[])),
-?line <<"cowcowbelldrlcowNSbcowcowbelladivdcowcowbell">> = iolist_to_binary(re:replace("cowcowbell","^(cow|)\\1(bell)","&drl\\1NSb&adivd&",[global])),
-?line <<"UUUBpbellPtC">> = iolist_to_binary(re:replace("bell","^(cow|)\\1(bell)","UUUBp&P\\1tC",[])),
-?line <<"UUUBpbellPtC">> = iolist_to_binary(re:replace("bell","^(cow|)\\1(bell)","UUUBp&P\\1tC",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(cow|)\\1(bell)","\\1\\1L\\1foe&LDaKY",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(cow|)\\1(bell)","\\1\\1L\\1foe&LDaKY",[global])),
-?line <<"cowbell">> = iolist_to_binary(re:replace("cowbell","^(cow|)\\1(bell)","&pE",[])),
-?line <<"cowbell">> = iolist_to_binary(re:replace("cowbell","^(cow|)\\1(bell)","&pE",[global])),
-?line <<"KEPMMarMefAQoabc">> = iolist_to_binary(re:replace(" abc","^\\s","KEP\\1MMa\\1rMefAQ\\1\\1\\1o",[])),
-?line <<"KEPMMarMefAQoabc">> = iolist_to_binary(re:replace(" abc","^\\s","KEP\\1MMa\\1rMefAQ\\1\\1\\1o",[global])),
-?line <<"mdPwbKbGabc">> = iolist_to_binary(re:replace(" abc","^\\s","mdPwbKbG",[])),
-?line <<"mdPwbKbGabc">> = iolist_to_binary(re:replace(" abc","^\\s","mdPwbKbG",[global])),
-?line <<"Ed
-FNgfabc">> = iolist_to_binary(re:replace("
-abc","^\\s","Ed&FNgf",[])),
-?line <<"Ed
-FNgfabc">> = iolist_to_binary(re:replace("
-abc","^\\s","Ed&FNgf",[global])),
-?line <<"iYCabc">> = iolist_to_binary(re:replace(" abc","^\\s","iYC",[])),
-?line <<"iYCabc">> = iolist_to_binary(re:replace(" abc","^\\s","iYC",[global])),
-?line <<"Y KyKjBtWUscEoeabc">> = iolist_to_binary(re:replace(" abc","^\\s","Y\\1&\\1KyKjBtWUscEoe",[])),
-?line <<"Y KyKjBtWUscEoeabc">> = iolist_to_binary(re:replace(" abc","^\\s","Y\\1&\\1KyKjBtWUscEoe",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\s","fMXHNBeT",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\s","fMXHNBeT",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","^\\s","GF\\1s&cS\\1yGC",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","^\\s","GF\\1s&cS\\1yGC",[global])),
-?line <<"Ur">> = iolist_to_binary(re:replace("abc","^a b
- c","Ur",[extended])),
-?line <<"Ur">> = iolist_to_binary(re:replace("abc","^a b
- c","Ur",[extended,global])),
-?line <<"UQqfOFVevBwaga">> = iolist_to_binary(re:replace("ab","^(a|)\\1*b","UQqfOFVevBwag\\1",[])),
-?line <<"UQqfOFVevBwaga">> = iolist_to_binary(re:replace("ab","^(a|)\\1*b","UQqfOFVevBwag\\1",[global])),
-?line <<"cAc">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1*b","cAc",[])),
-?line <<"cAc">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1*b","cAc",[global])),
-?line <<"QGbTLPFbbYYwpIhdW">> = iolist_to_binary(re:replace("b","^(a|)\\1*b","QG&TLPF&&YYwp\\1Ih\\1dW",[])),
-?line <<"QGbTLPFbbYYwpIhdW">> = iolist_to_binary(re:replace("b","^(a|)\\1*b","QG&TLPF&&YYwp\\1Ih\\1dW",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1*b","wY",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1*b","wY",[global])),
-?line <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1*b","IpD\\1tRUS",[])),
-?line <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1*b","IpD\\1tRUS",[global])),
-?line <<"PMaabaRKsKVgnxCiJtgp">> = iolist_to_binary(re:replace("aab","^(a|)\\1+b","PM&\\1RKsKVgnxCiJtgp",[])),
-?line <<"PMaabaRKsKVgnxCiJtgp">> = iolist_to_binary(re:replace("aab","^(a|)\\1+b","PM&\\1RKsKVgnxCiJtgp",[global])),
-?line <<"quaJPXxLfMHlVxH">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1+b","qu\\1JPXxLfMHlVxH",[])),
-?line <<"quaJPXxLfMHlVxH">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1+b","qu\\1JPXxLfMHlVxH",[global])),
-?line <<"b">> = iolist_to_binary(re:replace("b","^(a|)\\1+b","&",[])),
-?line <<"b">> = iolist_to_binary(re:replace("b","^(a|)\\1+b","&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1+b","ywXwC",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1+b","ywXwC",[global])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1+b","hwwbvhOrVEaVOsD\\1",[])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1+b","hwwbvhOrVEaVOsD\\1",[global])),
-?line <<"tNvaWAg">> = iolist_to_binary(re:replace("ab","^(a|)\\1?b","tNv\\1WAg",[])),
-?line <<"tNvaWAg">> = iolist_to_binary(re:replace("ab","^(a|)\\1?b","tNv\\1WAg",[global])),
-?line <<"K">> = iolist_to_binary(re:replace("aab","^(a|)\\1?b","K",[])),
-?line <<"K">> = iolist_to_binary(re:replace("aab","^(a|)\\1?b","K",[global])),
-?line <<"bRibsTbLcleUeb">> = iolist_to_binary(re:replace("b","^(a|)\\1?b","&Ri\\1&sT&L\\1cl\\1e\\1Ue&",[])),
-?line <<"bRibsTbLcleUeb">> = iolist_to_binary(re:replace("b","^(a|)\\1?b","&Ri\\1&sT&L\\1cl\\1e\\1Ue&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1?b","&CGRslcRfjatPWbOMT",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1?b","&CGRslcRfjatPWbOMT",[global])),
-?line <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1?b","&k\\1aoVMtug&hJsI",[])),
-?line <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1?b","&k\\1aoVMtug&hJsI",[global])),
-?line <<"gaaabFGtJRckPahi">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2}b","g&FGtJRckP\\1hi",[])),
-?line <<"gaaabFGtJRckPahi">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2}b","g&FGtJRckP\\1hi",[global])),
-?line <<"bINnRM">> = iolist_to_binary(re:replace("b","^(a|)\\1{2}b","bINnR\\1M",[])),
-?line <<"bINnRM">> = iolist_to_binary(re:replace("b","^(a|)\\1{2}b","bINnR\\1M",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2}b","cm",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2}b","cm",[global])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2}b","yT\\1\\1NlFQVleuHkXnE\\1",[])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2}b","yT\\1\\1NlFQVleuHkXnE\\1",[global])),
-?line <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2}b","PwBRhyP\\1txXQhbjE\\1a",[])),
-?line <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2}b","PwBRhyP\\1txXQhbjE\\1a",[global])),
-?line <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2}b","cxo",[])),
-?line <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2}b","cxo",[global])),
-?line <<"aaabXaaabMaaabdHhnqsiti">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2,3}b","&X&M&dHhnqsiti",[])),
-?line <<"aaabXaaabMaaabdHhnqsiti">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2,3}b","&X&M&dHhnqsiti",[global])),
-?line <<"QaaaablaaaabNnVdaaaabpaQEaaaaab">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2,3}b","Q&l&NnVd&p\\1QE\\1&",[])),
-?line <<"QaaaablaaaabNnVdaaaabpaQEaaaaab">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2,3}b","Q&l&NnVd&p\\1QE\\1&",[global])),
-?line <<"bCw">> = iolist_to_binary(re:replace("b","^(a|)\\1{2,3}b","&Cw",[])),
-?line <<"bCw">> = iolist_to_binary(re:replace("b","^(a|)\\1{2,3}b","&Cw",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2,3}b","\\1&puY",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2,3}b","\\1&puY",[global])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2,3}b","pbextvQnRWgXs",[])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2,3}b","pbextvQnRWgXs",[global])),
-?line <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2,3}b","fHRaaYYIr\\1l\\1",[])),
-?line <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2,3}b","fHRaaYYIr\\1l\\1",[global])),
-?line <<"aaaaab">> = iolist_to_binary(re:replace("aaaaab","^(a|)\\1{2,3}b","nXt&Aw\\1XCfLg\\1GGPmN",[])),
-?line <<"aaaaab">> = iolist_to_binary(re:replace("aaaaab","^(a|)\\1{2,3}b","nXt&Aw\\1XCfLg\\1GGPmN",[global])),
-?line <<"eRwvgLU">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","eRwvgLU",[])),
-?line <<"eRwvgLU">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","eRwvgLU",[global])),
-?line <<"mDnlkabbbcfTJ">> = iolist_to_binary(re:replace("abbbc","ab{1,3}bc","m\\1Dnl\\1k&fTJ",[])),
-?line <<"mDnlkabbbcfTJ">> = iolist_to_binary(re:replace("abbbc","ab{1,3}bc","m\\1Dnl\\1k&fTJ",[global])),
-?line <<"QabbcqIjjWabbchabbcBrTp">> = iolist_to_binary(re:replace("abbc","ab{1,3}bc","Q&qIjjW&h\\1&BrTp",[])),
-?line <<"QabbcqIjjWabbchabbcBrTp">> = iolist_to_binary(re:replace("abbc","ab{1,3}bc","Q&qIjjW&h\\1&BrTp",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{1,3}bc","\\1Wj&Y&ML\\1RBiGiweww",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{1,3}bc","\\1Wj&Y&ML\\1RBiGiweww",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","ab{1,3}bc","HmlRU&NUwwokL",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","ab{1,3}bc","HmlRU&NUwwokL",[global])),
-?line <<"abbbbbc">> = iolist_to_binary(re:replace("abbbbbc","ab{1,3}bc","FUyCCDShGVXhEHX\\1V\\1bK",[])),
-?line <<"abbbbbc">> = iolist_to_binary(re:replace("abbbbbc","ab{1,3}bc","FUyCCDShGVXhEHX\\1V\\1bK",[global])),
-?line <<"track1astrack1track1tIDhtrack1.title:TBlah blah blahiA">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","\\1as\\1\\1tIDh&iA",[])),
-?line <<"track1astrack1track1tIDhtrack1.title:TBlah blah blahiA">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","\\1as\\1\\1tIDh&iA",[global])),
-?line <<"wUVSR">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","wUVSR",[caseless])),
-?line <<"wUVSR">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","wUVSR",[caseless,
- global])),
-?line <<"htrack1TCNtrack1.title:TBlah blah blahpLtrack1.title:TBlah blah blahtrack1.title:TBlah blah blahFnNtrack1jOBdd">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)","h\\1TCN&pL&&FnN\\1jOBdd",[caseless])),
-?line <<"htrack1TCNtrack1.title:TBlah blah blahpLtrack1.title:TBlah blah blahtrack1.title:TBlah blah blahFnNtrack1jOBdd">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)","h\\1TCN&pL&&FnN\\1jOBdd",[caseless,
- global])),
-?line <<"OKnYPU">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","OKnYPU",[])),
-?line <<"OKnYPU">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","OKnYPU",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-c]+$","\\1GX\\1YVV&\\1WF",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-c]+$","\\1GX\\1YVV&\\1WF",[global])),
-?line <<"wxy">> = iolist_to_binary(re:replace("wxy","^[W-c]+$","Uax\\1F",[])),
-?line <<"wxy">> = iolist_to_binary(re:replace("wxy","^[W-c]+$","Uax\\1F",[global])),
-?line <<"WXY_^abcARKQ">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","&ARK\\1Q",[caseless])),
-?line <<"WXY_^abcARKQ">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","&ARK\\1Q",[caseless,
- global])),
-?line <<"fIwxy_^ABCwxy_^ABCGwxy_^ABCwAHLMA">> = iolist_to_binary(re:replace("wxy_^ABC","^[W-c]+$","fI&&G&w\\1AHL\\1MA",[caseless])),
-?line <<"fIwxy_^ABCwxy_^ABCGwxy_^ABCwAHLMA">> = iolist_to_binary(re:replace("wxy_^ABC","^[W-c]+$","fI&&G&w\\1AHL\\1MA",[caseless,
- global])),
-?line <<"WXY_^abcrgsgXuYrmtfAuS">> = iolist_to_binary(re:replace("WXY_^abc","^[\\x3f-\\x5F]+$","&rgsgXuYrmtfAuS",[caseless])),
-?line <<"WXY_^abcrgsgXuYrmtfAuS">> = iolist_to_binary(re:replace("WXY_^abc","^[\\x3f-\\x5F]+$","&rgsgXuYrmtfAuS",[caseless,
- global])),
-?line <<"FmwJKwxy_^ABCyluQcjQVnwQ">> = iolist_to_binary(re:replace("wxy_^ABC","^[\\x3f-\\x5F]+$","FmwJK&yluQcjQVnwQ",[caseless])),
-?line <<"FmwJKwxy_^ABCyluQcjQVnwQ">> = iolist_to_binary(re:replace("wxy_^ABC","^[\\x3f-\\x5F]+$","FmwJK&yluQcjQVnwQ",[caseless,
- global])),
-?line <<"abcabcMObxlD">> = iolist_to_binary(re:replace("abc","^abc$","&\\1&MObxlD",[multiline])),
-?line <<"abcabcMObxlD">> = iolist_to_binary(re:replace("abc","^abc$","&\\1&MObxlD",[multiline,
- global])),
-?line <<"qqq
-wgabc">> = iolist_to_binary(re:replace("qqq
-abc","^abc$","wg&",[multiline])),
-?line <<"qqq
-wgabc">> = iolist_to_binary(re:replace("qqq
-abc","^abc$","wg&",[multiline,global])),
-?line <<"abcwXeRgabcKmklKpYiE
+)","M",[extended,global])),
+ <<"abcdefpqrxyz0AB">> = iolist_to_binary(re:replace("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB","\\1\\1giII\\1hWW&bdV&",[])),
+ <<"abcdefpqrxyz0AB">> = iolist_to_binary(re:replace("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB","\\1\\1giII\\1hWW&bdV&",[global])),
+ <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(re:replace("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB","cc\\1IiVp",[])),
+ <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(re:replace("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB","cc\\1IiVp",[global])),
+ <<"abc efpqr0xyz00AB">> = iolist_to_binary(re:replace("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","prtuhkbIaj&qwHuPpE",[])),
+ <<"abc efpqr0xyz00AB">> = iolist_to_binary(re:replace("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","prtuhkbIaj&qwHuPpE",[global])),
+ <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(re:replace("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","&yfjpcn",[])),
+ <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(re:replace("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB","&yfjpcn",[global])),
+ <<"A">> = iolist_to_binary(re:replace("A","^[\\000-\\037]","fNpC&qUvThkjHh",[])),
+ <<"A">> = iolist_to_binary(re:replace("A","^[\\000-\\037]","fNpC&qUvThkjHh",[global])),
+ <<"QyKsB">> = iolist_to_binary(re:replace("B","^[\\000-\\037]","QyKs",[])),
+ <<"QyKsB">> = iolist_to_binary(re:replace("B","^[\\000-\\037]","QyKs",[global])),
+ <<"ESQC">> = iolist_to_binary(re:replace("C","^[\\000-\\037]","ESQ",[])),
+ <<"ESQC">> = iolist_to_binary(re:replace("C","^[\\000-\\037]","ESQ",[global])),
+ <<"aTcfAMkUonvqo">> = iolist_to_binary(re:replace("","\\0*","aT&cfAM&\\1kU\\1onvq&o",[])),
+ <<"aTcfAMkUonvqo">> = iolist_to_binary(re:replace("","\\0*","aT&cfAM&\\1kU\\1onvq&o",[global])),
+ <<"The AZ">> = iolist_to_binary(re:replace("The AZ","A\\x0{2,3}Z","vmgVokP\\1Omhk&",[])),
+ <<"The AZ">> = iolist_to_binary(re:replace("The AZ","A\\x0{2,3}Z","vmgVokP\\1Omhk&",[global])),
+ <<"An AZ">> = iolist_to_binary(re:replace("An AZ","A\\x0{2,3}Z","VQmaqWv&eULrw\\1glxho",[])),
+ <<"An AZ">> = iolist_to_binary(re:replace("An AZ","A\\x0{2,3}Z","VQmaqWv&eULrw\\1glxho",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","A\\x0{2,3}Z","UjPLaoqUhTok\\1&kA\\1G",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","A\\x0{2,3}Z","UjPLaoqUhTok\\1&kA\\1G",[global])),
+ <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","\\1&y&cuh&VgTD&wTnGp",[])),
+ <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","\\1&y&cuh&VgTD&wTnGp",[global])),
+ <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","gEElh\\1ECMKe&HElIjJc",[])),
+ <<"AZ">> = iolist_to_binary(re:replace("AZ","A\\x0{2,3}Z","gEElh\\1ECMKe&HElIjJc",[global])),
+ <<"cowcowbellYcowcowbelludyJcowE">> = iolist_to_binary(re:replace("cowcowbell","^(cow|)\\1(bell)","&Y&udyJ\\1E",[])),
+ <<"cowcowbellYcowcowbelludyJcowE">> = iolist_to_binary(re:replace("cowcowbell","^(cow|)\\1(bell)","&Y&udyJ\\1E",[global])),
+ <<"XIIG">> = iolist_to_binary(re:replace("bell","^(cow|)\\1(bell)","XIIG\\1",[])),
+ <<"XIIG">> = iolist_to_binary(re:replace("bell","^(cow|)\\1(bell)","XIIG\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(cow|)\\1(bell)","FV&UIVc&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(cow|)\\1(bell)","FV&UIVc&",[global])),
+ <<"cowbell">> = iolist_to_binary(re:replace("cowbell","^(cow|)\\1(bell)","C&&\\1YwKbOHQIgm&R\\1\\1t",[])),
+ <<"cowbell">> = iolist_to_binary(re:replace("cowbell","^(cow|)\\1(bell)","C&&\\1YwKbOHQIgm&R\\1\\1t",[global])),
+ <<"ywr abc">> = iolist_to_binary(re:replace(" abc","^\\s","ywr&",[])),
+ <<"ywr abc">> = iolist_to_binary(re:replace(" abc","^\\s","ywr&",[global])),
+ <<" fRabc">> = iolist_to_binary(re:replace(" abc","^\\s","&fR",[])),
+ <<" fRabc">> = iolist_to_binary(re:replace(" abc","^\\s","&fR",[global])),
+ <<"CHbSJabc">> = iolist_to_binary(re:replace("
+abc","^\\s","CHbSJ",[])),
+ <<"CHbSJabc">> = iolist_to_binary(re:replace("
+abc","^\\s","CHbSJ",[global])),
+ <<"nivOFemIauK XVEPabc">> = iolist_to_binary(re:replace(" abc","^\\s","n\\1ivOFemIauK&&XVEP",[])),
+ <<"nivOFemIauK XVEPabc">> = iolist_to_binary(re:replace(" abc","^\\s","n\\1ivOFemIauK&&XVEP",[global])),
+ <<"Hs Cwabc">> = iolist_to_binary(re:replace(" abc","^\\s","Hs&Cw",[])),
+ <<"Hs Cwabc">> = iolist_to_binary(re:replace(" abc","^\\s","Hs&Cw",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\s","wydaKxDrmaSC\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\s","wydaKxDrmaSC\\1",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","^\\s","&mmImPqIRmsQLWtEuv\\1",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","^\\s","&mmImPqIRmsQLWtEuv\\1",[global])),
+ ok.
+run4() ->
+ <<"KvcEQcubkfx">> = iolist_to_binary(re:replace("abc","^a b
+ c","KvcEQc\\1\\1ubkfx",[extended])),
+ <<"KvcEQcubkfx">> = iolist_to_binary(re:replace("abc","^a b
+ c","KvcEQc\\1\\1ubkfx",[extended,global])),
+ <<"IEabanuYG">> = iolist_to_binary(re:replace("ab","^(a|)\\1*b","IE&\\1nuYG",[])),
+ <<"IEabanuYG">> = iolist_to_binary(re:replace("ab","^(a|)\\1*b","IE&\\1nuYG",[global])),
+ <<"oaVSaaaabg">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1*b","o\\1VS&g",[])),
+ <<"oaVSaaaabg">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1*b","o\\1VS&g",[global])),
+ <<"midgkQDfLoqgoK">> = iolist_to_binary(re:replace("b","^(a|)\\1*b","midgk\\1\\1Q\\1DfLoqgoK",[])),
+ <<"midgkQDfLoqgoK">> = iolist_to_binary(re:replace("b","^(a|)\\1*b","midgk\\1\\1Q\\1DfLoqgoK",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1*b","iq\\1HM&PoX",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1*b","iq\\1HM&PoX",[global])),
+ <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1*b","pGDNJCvYBCUc&G&\\1\\1nc",[])),
+ <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1*b","pGDNJCvYBCUc&G&\\1\\1nc",[global])),
+ <<"NFaDYqrUAXIDCar">> = iolist_to_binary(re:replace("aab","^(a|)\\1+b","NFaDYqrUAXIDC\\1r",[])),
+ <<"NFaDYqrUAXIDCar">> = iolist_to_binary(re:replace("aab","^(a|)\\1+b","NFaDYqrUAXIDC\\1r",[global])),
+ <<"rVeVeoaaaabXIMIhaaaaboaRr">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1+b","rVeVeo&XIMIh&o\\1Rr",[])),
+ <<"rVeVeoaaaabXIMIhaaaaboaRr">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1+b","rVeVeo&XIMIh&o\\1Rr",[global])),
+ <<"MOSbVKbFIBNV">> = iolist_to_binary(re:replace("b","^(a|)\\1+b","MOS\\1&VKbFIBNV",[])),
+ <<"MOSbVKbFIBNV">> = iolist_to_binary(re:replace("b","^(a|)\\1+b","MOS\\1&VKbFIBNV",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1+b","&X\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1+b","&X\\1",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1+b","HAk\\1RB",[])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1+b","HAk\\1RB",[global])),
+ <<"T">> = iolist_to_binary(re:replace("ab","^(a|)\\1?b","T",[])),
+ <<"T">> = iolist_to_binary(re:replace("ab","^(a|)\\1?b","T",[global])),
+ <<"NpaabpafbAIXVrowk">> = iolist_to_binary(re:replace("aab","^(a|)\\1?b","Np&p\\1fbAIXVrowk",[])),
+ <<"NpaabpafbAIXVrowk">> = iolist_to_binary(re:replace("aab","^(a|)\\1?b","Np&p\\1fbAIXVrowk",[global])),
+ <<"bTLqWwDhuNEDr">> = iolist_to_binary(re:replace("b","^(a|)\\1?b","&TLqWwDhuNEDr",[])),
+ <<"bTLqWwDhuNEDr">> = iolist_to_binary(re:replace("b","^(a|)\\1?b","&TLqWwDhuNEDr",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1?b","k&M&WqVpmLKP",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1?b","k&M&WqVpmLKP",[global])),
+ <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1?b","sukwIjuiB",[])),
+ <<"acb">> = iolist_to_binary(re:replace("acb","^(a|)\\1?b","sukwIjuiB",[global])),
+ <<"rHnDYYvSYMasyvaMyaaabqJ">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2}b","rHnDYYvSYM\\1syv\\1My&qJ",[])),
+ <<"rHnDYYvSYMasyvaMyaaabqJ">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2}b","rHnDYYvSYM\\1syv\\1My&qJ",[global])),
+ <<"gdeUBJebtvLObDlYQ">> = iolist_to_binary(re:replace("b","^(a|)\\1{2}b","gdeU\\1BJe&tvL\\1ObDlYQ",[])),
+ <<"gdeUBJebtvLObDlYQ">> = iolist_to_binary(re:replace("b","^(a|)\\1{2}b","gdeU\\1BJe&tvL\\1ObDlYQ",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2}b","AVUEjXCeg&i\\1T\\1ejtKi",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2}b","AVUEjXCeg&i\\1T\\1ejtKi",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2}b","E\\1YBlG",[])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2}b","E\\1YBlG",[global])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2}b","&Oq&\\1IcB&LT",[])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2}b","&Oq&\\1IcB&LT",[global])),
+ <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2}b","Xh",[])),
+ <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2}b","Xh",[global])),
+ <<"gPaMHaaabaaabnaaOMIaVa">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2,3}b","gP\\1MH&&n\\1aOMI\\1Va",[])),
+ <<"gPaMHaaabaaabnaaOMIaVa">> = iolist_to_binary(re:replace("aaab","^(a|)\\1{2,3}b","gP\\1MH&&n\\1aOMI\\1Va",[global])),
+ <<"aaaabWf">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2,3}b","&Wf",[])),
+ <<"aaaabWf">> = iolist_to_binary(re:replace("aaaab","^(a|)\\1{2,3}b","&Wf",[global])),
+ <<"KKYfigIbbfyLvtL">> = iolist_to_binary(re:replace("b","^(a|)\\1{2,3}b","KKYfigI&&fyL\\1v\\1tL",[])),
+ <<"KKYfigIbbfyLvtL">> = iolist_to_binary(re:replace("b","^(a|)\\1{2,3}b","KKYfigI&&fyL\\1v\\1tL",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2,3}b","NFHl",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a|)\\1{2,3}b","NFHl",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2,3}b","ob\\1\\1J&ES\\1av\\1AM",[])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a|)\\1{2,3}b","ob\\1\\1J&ES\\1av\\1AM",[global])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2,3}b","\\1viNfcaQTcNH&ggGt",[])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","^(a|)\\1{2,3}b","\\1viNfcaQTcNH&ggGt",[global])),
+ <<"aaaaab">> = iolist_to_binary(re:replace("aaaaab","^(a|)\\1{2,3}b","vu",[])),
+ <<"aaaaab">> = iolist_to_binary(re:replace("aaaaab","^(a|)\\1{2,3}b","vu",[global])),
+ <<"aHJVskcmUR">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","\\1aHJVskcmUR",[])),
+ <<"aHJVskcmUR">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","\\1aHJVskcmUR",[global])),
+ <<"Rmabbbccackw">> = iolist_to_binary(re:replace("abbbc","ab{1,3}bc","Rm&cackw",[])),
+ <<"Rmabbbccackw">> = iolist_to_binary(re:replace("abbbc","ab{1,3}bc","Rm&cackw",[global])),
+ <<"VHGaMs">> = iolist_to_binary(re:replace("abbc","ab{1,3}bc","VHGaMs",[])),
+ <<"VHGaMs">> = iolist_to_binary(re:replace("abbc","ab{1,3}bc","VHGaMs",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{1,3}bc","UM&MN\\1&vHpV\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{1,3}bc","UM&MN\\1&vHpV\\1",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","ab{1,3}bc","os&Rm\\1akB\\1pkOAH",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","ab{1,3}bc","os&Rm\\1akB\\1pkOAH",[global])),
+ <<"abbbbbc">> = iolist_to_binary(re:replace("abbbbbc","ab{1,3}bc","oujXAne\\1\\1JsV&Y&I&",[])),
+ <<"abbbbbc">> = iolist_to_binary(re:replace("abbbbbc","ab{1,3}bc","oujXAne\\1\\1JsV&Y&I&",[global])),
+ <<"NCkLQtrack1">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","NCkLQ\\1",[])),
+ <<"NCkLQtrack1">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","NCkLQ\\1",[global])),
+ <<"track1.title:TBlah blah blahOtrack1.title:TBlah blah blahwtrack1fuQWtrack1.title:TBlah blah blahStrack1.title:TBlah blah blahkEFVKOH">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","&O&w\\1fuQW&S&kEFVKOH",[caseless])),
+ <<"track1.title:TBlah blah blahOtrack1.title:TBlah blah blahwtrack1fuQWtrack1.title:TBlah blah blahStrack1.title:TBlah blah blahkEFVKOH">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)","&O&w\\1fuQW&S&kEFVKOH",[caseless,
+ global])),
+ <<"VWgicEGtrack1">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)","VWgicEG\\1",[caseless])),
+ <<"VWgicEGtrack1">> = iolist_to_binary(re:replace("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)","VWgicEG\\1",[caseless,
+ global])),
+ <<"UKrqsWXY_^abcTa">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","UKr\\1\\1qs&Ta",[])),
+ <<"UKrqsWXY_^abcTa">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","UKr\\1\\1qs&Ta",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-c]+$","LV\\1&\\1&\\1Je&M\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-c]+$","LV\\1&\\1&\\1Je&M\\1",[global])),
+ <<"wxy">> = iolist_to_binary(re:replace("wxy","^[W-c]+$","yqUKKN",[])),
+ <<"wxy">> = iolist_to_binary(re:replace("wxy","^[W-c]+$","yqUKKN",[global])),
+ <<"MxOWXY_^abcqjWXY_^abcWXY_^abcocGDNJgwU">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","MxO&qj&&ocGDNJgwU",[caseless])),
+ <<"MxOWXY_^abcqjWXY_^abcWXY_^abcocGDNJgwU">> = iolist_to_binary(re:replace("WXY_^abc","^[W-c]+$","MxO&qj&&ocGDNJgwU",[caseless,
+ global])),
+ <<"lgkBEwxy_^ABCC">> = iolist_to_binary(re:replace("wxy_^ABC","^[W-c]+$","\\1lgkBE&C\\1",[caseless])),
+ <<"lgkBEwxy_^ABCC">> = iolist_to_binary(re:replace("wxy_^ABC","^[W-c]+$","\\1lgkBE&C\\1",[caseless,
+ global])),
+ <<"QSQrWXY_^abcvBpJUdCPFVxS">> = iolist_to_binary(re:replace("WXY_^abc","^[\\x3f-\\x5F]+$","QSQr&vBpJUdCP\\1F\\1VxS",[caseless])),
+ <<"QSQrWXY_^abcvBpJUdCPFVxS">> = iolist_to_binary(re:replace("WXY_^abc","^[\\x3f-\\x5F]+$","QSQr&vBpJUdCP\\1F\\1VxS",[caseless,
+ global])),
+ <<"tgwxy_^ABChAjHBwxy_^ABC">> = iolist_to_binary(re:replace("wxy_^ABC","^[\\x3f-\\x5F]+$","tg&hAjHB&",[caseless])),
+ <<"tgwxy_^ABChAjHBwxy_^ABC">> = iolist_to_binary(re:replace("wxy_^ABC","^[\\x3f-\\x5F]+$","tg&hAjHB&",[caseless,
+ global])),
+ <<"uyphoJSabcD">> = iolist_to_binary(re:replace("abc","^abc$","uyphoJS&D",[multiline])),
+ <<"uyphoJSabcD">> = iolist_to_binary(re:replace("abc","^abc$","uyphoJS&D",[multiline,
+ global])),
+ <<"qqq
+wupoAabcauHHyGGVeUwVabc">> = iolist_to_binary(re:replace("qqq
+abc","^abc$","wupoA&au\\1HHyGGVeUwV&",[multiline])),
+ <<"qqq
+wupoAabcauHHyGGVeUwVabc">> = iolist_to_binary(re:replace("qqq
+abc","^abc$","wupoA&au\\1HHyGGVeUwV&",[multiline,global])),
+ <<"gfEviFcl
zzz">> = iolist_to_binary(re:replace("abc
-zzz","^abc$","&wXe\\1Rg&K\\1mklKpYiE",[multiline])),
-?line <<"abcwXeRgabcKmklKpYiE
+zzz","^abc$","gf\\1EviFcl",[multiline])),
+ <<"gfEviFcl
zzz">> = iolist_to_binary(re:replace("abc
-zzz","^abc$","&wXe\\1Rg&K\\1mklKpYiE",[multiline,global])),
-?line <<"qqq
-CabcCKxlJamS
+zzz","^abc$","gf\\1EviFcl",[multiline,global])),
+ <<"qqq
+jwoabcabcBysLOHCR
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","^abc$","C&CKxlJam\\1S",[multiline])),
-?line <<"qqq
-CabcCKxlJamS
+zzz","^abc$","jwo&&BysLOHC\\1R",[multiline])),
+ <<"qqq
+jwoabcabcBysLOHCR
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","^abc$","C&CKxlJam\\1S",[multiline,global])),
-?line <<"MLKPlabcY">> = iolist_to_binary(re:replace("abc","^abc$","MLKPl&\\1Y",[])),
-?line <<"MLKPlabcY">> = iolist_to_binary(re:replace("abc","^abc$","MLKPl&\\1Y",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","\\1uRnMNc&\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","\\1uRnMNc&\\1",[global])),
-?line <<"qqq
+zzz","^abc$","jwo&&BysLOHC\\1R",[multiline,global])),
+ <<"fPMabcFHNJXabcJChQyabcU">> = iolist_to_binary(re:replace("abc","^abc$","fPM&FHNJX&JCh\\1Qy&U",[])),
+ <<"fPMabcFHNJXabcJChQyabcU">> = iolist_to_binary(re:replace("abc","^abc$","fPM&FHNJX&JCh\\1Qy&U",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","&\\1&R\\1oixQQMrImGsd&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","&\\1&R\\1oixQQMrImGsd&",[global])),
+ <<"qqq
abc">> = iolist_to_binary(re:replace("qqq
-abc","^abc$","b\\1",[])),
-?line <<"qqq
+abc","^abc$","rAUAF&gmNHyoIX\\1ymqk",[])),
+ <<"qqq
abc">> = iolist_to_binary(re:replace("qqq
-abc","^abc$","b\\1",[global])),
-?line <<"abc
+abc","^abc$","rAUAF&gmNHyoIX\\1ymqk",[global])),
+ <<"abc
zzz">> = iolist_to_binary(re:replace("abc
-zzz","^abc$","RAJ\\1a&Mvoue\\1d",[])),
-?line <<"abc
+zzz","^abc$","&&qL\\1YUdNN\\1\\1\\1O\\1",[])),
+ <<"abc
zzz">> = iolist_to_binary(re:replace("abc
-zzz","^abc$","RAJ\\1a&Mvoue\\1d",[global])),
-?line <<"qqq
+zzz","^abc$","&&qL\\1YUdNN\\1\\1\\1O\\1",[global])),
+ <<"qqq
abc
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","^abc$","\\1NghvSn\\1GSQvu&&grYN",[])),
-?line <<"qqq
+zzz","^abc$","u",[])),
+ <<"qqq
abc
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","^abc$","\\1NghvSn\\1GSQvu&&grYN",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","&",[multiline])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","&",[multiline,
- global])),
-?line <<"XQevmabcHXD">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","XQevm&HXD",[multiline])),
-?line <<"XQevmabcHXD">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","XQevm&HXD",[multiline,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\Z","plNA&&\\1Myw&e",[multiline])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\Z","plNA&&\\1Myw&e",[multiline,
- global])),
-?line <<"qqq
+zzz","^abc$","u",[global])),
+ <<"abcRqIabcuWabcabcFN">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","&\\1RqI&uW&&F\\1N",[multiline])),
+ <<"abcRqIabcuWabcabcFN">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","&\\1RqI&uW&&F\\1N",[multiline,
+ global])),
+ <<"abciwrfICONabcYabc">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","&iwrf\\1ICON&\\1Y&\\1\\1",[multiline])),
+ <<"abciwrfICONabcYabc">> = iolist_to_binary(re:replace("abc","\\Aabc\\Z","&iwrf\\1ICON&\\1Y&\\1\\1",[multiline,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\Z","RsIorq&kLBrJVt&Dq",[multiline])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\Z","RsIorq&kLBrJVt&Dq",[multiline,
+ global])),
+ <<"qqq
abc">> = iolist_to_binary(re:replace("qqq
-abc","\\Aabc\\Z","tActj",[multiline])),
-?line <<"qqq
+abc","\\Aabc\\Z","bByD\\1yC\\1hlr",[multiline])),
+ <<"qqq
abc">> = iolist_to_binary(re:replace("qqq
-abc","\\Aabc\\Z","tActj",[multiline,global])),
-?line <<"abc
+abc","\\Aabc\\Z","bByD\\1yC\\1hlr",[multiline,global])),
+ <<"abc
zzz">> = iolist_to_binary(re:replace("abc
-zzz","\\Aabc\\Z","&PAnUmSADdk",[multiline])),
-?line <<"abc
+zzz","\\Aabc\\Z","AuwHER\\1cj\\1XMx\\1jBcr&u",[multiline])),
+ <<"abc
zzz">> = iolist_to_binary(re:replace("abc
-zzz","\\Aabc\\Z","&PAnUmSADdk",[multiline,global])),
-?line <<"qqq
+zzz","\\Aabc\\Z","AuwHER\\1cj\\1XMx\\1jBcr&u",[multiline,
+ global])),
+ <<"qqq
abc
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","\\Aabc\\Z","O&&GYJA",[multiline])),
-?line <<"qqq
+zzz","\\Aabc\\Z","kiYxAVR&jFLIO&t\\1to&",[multiline])),
+ <<"qqq
abc
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","\\Aabc\\Z","O&&GYJA",[multiline,global])),
-?line <<"ejfGpamjOGidXfWabc
-defiXJg">> = iolist_to_binary(re:replace("abc
-def","\\A(.)*\\Z","ej\\1GpamjOGidX\\1W&iXJg",[dotall])),
-?line <<"ejfGpamjOGidXfWabc
-defiXJg">> = iolist_to_binary(re:replace("abc
-def","\\A(.)*\\Z","ej\\1GpamjOGidX\\1W&iXJg",[dotall,global])),
-?line <<"UTI*** FailersagVgtIFYe*** Failerss*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\A(.)*\\Z","UTI&agVgtIFYe&\\1&",[multiline])),
-?line <<"UTI*** FailersagVgtIFYe*** Failerss*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\A(.)*\\Z","UTI&agVgtIFYe&\\1&",[multiline,
- global])),
-?line <<"abc
+zzz","\\Aabc\\Z","kiYxAVR&jFLIO&t\\1to&",[multiline,global])),
+ <<"DGWRrfDctbIpuofabc
+defabc
+defHPf">> = iolist_to_binary(re:replace("abc
+def","\\A(.)*\\Z","DGWRr\\1DctbIpuo\\1&&HPf",[dotall])),
+ <<"DGWRrfDctbIpuofabc
+defabc
+defHPf">> = iolist_to_binary(re:replace("abc
+def","\\A(.)*\\Z","DGWRr\\1DctbIpuo\\1&&HPf",[dotall,global])),
+ <<"XsHV*** FailerstLRmsk*** FailersMPy">> = iolist_to_binary(re:replace("*** Failers","\\A(.)*\\Z","XsHV&tLRm\\1k&MPy",[multiline])),
+ <<"XsHV*** FailerstLRmsk*** FailersMPy">> = iolist_to_binary(re:replace("*** Failers","\\A(.)*\\Z","XsHV&tLRm\\1k&MPy",[multiline,
+ global])),
+ <<"abc
def">> = iolist_to_binary(re:replace("abc
-def","\\A(.)*\\Z","&PHW&rh&xcxs\\1Cy&Chhd",[multiline])),
-?line <<"abc
+def","\\A(.)*\\Z","v",[multiline])),
+ <<"abc
def">> = iolist_to_binary(re:replace("abc
-def","\\A(.)*\\Z","&PHW&rh&xcxs\\1Cy&Chhd",[multiline,global])),
-?line <<"cjOwaTTW::c">> = iolist_to_binary(re:replace("b::c","(?:b)|(?::+)","cjOwaTTW",[])),
-?line <<"cjOwaTTWcjOwaTTWc">> = iolist_to_binary(re:replace("b::c","(?:b)|(?::+)","cjOwaTTW",[global])),
-?line <<"c::ReJbWufqTUdDqlXQb">> = iolist_to_binary(re:replace("c::b","(?:b)|(?::+)","\\1&ReJbWufqTUdDqlXQ",[])),
-?line <<"c::ReJbWufqTUdDqlXQbReJbWufqTUdDqlXQ">> = iolist_to_binary(re:replace("c::b","(?:b)|(?::+)","\\1&ReJbWufqTUdDqlXQ",[global])),
-?line <<"az-uaz-obYOlaz-DVbrqaz-y">> = iolist_to_binary(re:replace("az-","[-az]+","&u&obYOl&DVbrq&y",[])),
-?line <<"az-uaz-obYOlaz-DVbrqaz-y">> = iolist_to_binary(re:replace("az-","[-az]+","&u&obYOl&DVbrq&y",[global])),
-?line <<"*** FAlNlPvDnUXilers">> = iolist_to_binary(re:replace("*** Failers","[-az]+","AlNlPvDn\\1UX",[])),
-?line <<"*** FAlNlPvDnUXilers">> = iolist_to_binary(re:replace("*** Failers","[-az]+","AlNlPvDn\\1UX",[global])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[-az]+","&xa\\1Q\\1BSaQG",[])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[-az]+","&xa\\1Q\\1BSaQG",[global])),
-?line <<"rJXv">> = iolist_to_binary(re:replace("za-","[az-]+","\\1rJXv",[])),
-?line <<"rJXv">> = iolist_to_binary(re:replace("za-","[az-]+","\\1rJXv",[global])),
-?line <<"*** FIQWDsCilers">> = iolist_to_binary(re:replace("*** Failers","[az-]+","IQWD\\1\\1sC",[])),
-?line <<"*** FIQWDsCilers">> = iolist_to_binary(re:replace("*** Failers","[az-]+","IQWD\\1\\1sC",[global])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[az-]+","G\\1TcEO\\1EAeKKLc&eOBg",[])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[az-]+","G\\1TcEO\\1EAeKKLc&eOBg",[global])),
-?line <<"DsdWoREvsWCDpa-z">> = iolist_to_binary(re:replace("a-z","[a\\-z]+","Dsd\\1WoREvsWCD\\1p&",[])),
-?line <<"DsdWoREvsWCDpa-z">> = iolist_to_binary(re:replace("a-z","[a\\-z]+","Dsd\\1WoREvsWCD\\1p&",[global])),
-?line <<"*** FaUqEUvbeKTpilers">> = iolist_to_binary(re:replace("*** Failers","[a\\-z]+","&U\\1qEUvbeKTp",[])),
-?line <<"*** FaUqEUvbeKTpilers">> = iolist_to_binary(re:replace("*** Failers","[a\\-z]+","&U\\1qEUvbeKTp",[global])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[a\\-z]+","IdIH&",[])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[a\\-z]+","IdIH&",[global])),
-?line <<"CHIiEabcdxyzAXhIPVabcdxyz">> = iolist_to_binary(re:replace("abcdxyz","[a-z]+","CHIiE&AXhIPV&",[])),
-?line <<"CHIiEabcdxyzAXhIPVabcdxyz">> = iolist_to_binary(re:replace("abcdxyz","[a-z]+","CHIiE&AXhIPV&",[global])),
-?line <<"Tk12-34ptREc12-34dF">> = iolist_to_binary(re:replace("12-34","[\\d-]+","Tk&ptREc&dF\\1",[])),
-?line <<"Tk12-34ptREc12-34dF">> = iolist_to_binary(re:replace("12-34","[\\d-]+","Tk&ptREc&dF\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-]+","PO\\1\\1HuRnqA\\1miVVsKv",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-]+","PO\\1\\1HuRnqA\\1miVVsKv",[global])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-]+","QMUbdeC\\1fKgUg",[])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-]+","QMUbdeC\\1fKgUg",[global])),
-?line <<"YypJ">> = iolist_to_binary(re:replace("12-34z","[\\d-z]+","YypJ",[])),
-?line <<"YypJ">> = iolist_to_binary(re:replace("12-34z","[\\d-z]+","YypJ",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-z]+","d&ErDHl\\1&GDjyQy",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-z]+","d&ErDHl\\1&GDjyQy",[global])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-z]+","EVkS",[])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-z]+","EVkS",[global])),
-?line <<"cHd\\ltkGr\\BqrhP ">> = iolist_to_binary(re:replace("\\ ","\\x5c","cHd&ltkGr&Bqr\\1hP",[])),
-?line <<"cHd\\ltkGr\\BqrhP ">> = iolist_to_binary(re:replace("\\ ","\\x5c","cHd&ltkGr&Bqr\\1hP",[global])),
-?line <<"the Z Z ZciyfJLvoo">> = iolist_to_binary(re:replace("the Zoo","\\x20Z","&&&ciyf\\1JLv",[])),
-?line <<"the Z Z ZciyfJLvoo">> = iolist_to_binary(re:replace("the Zoo","\\x20Z","&&&ciyf\\1JLv",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\x20Z","ry\\1S\\1&\\1\\1MkYc",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\x20Z","ry\\1S\\1&\\1\\1MkYc",[global])),
-?line <<"Zulu">> = iolist_to_binary(re:replace("Zulu","\\x20Z","b\\1Wc&RB\\1&&pO&Dd\\1&A",[])),
-?line <<"Zulu">> = iolist_to_binary(re:replace("Zulu","\\x20Z","b\\1Wc&RB\\1&&pO&Dd\\1&A",[global])),
-?line <<"aabcabcUxryabcAPabcabcDGgL">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","a&Uxry\\1AP&DGgL",[caseless])),
-?line <<"aabcabcUxryabcAPabcabcDGgL">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","a&Uxry\\1AP&DGgL",[caseless,
- global])),
-?line <<"oStOWABCvVHVfFqojojfABC">> = iolist_to_binary(re:replace("ABCabc","(abc)\\1","oStOW\\1vVHVfFqojojf\\1",[caseless])),
-?line <<"oStOWABCvVHVfFqojojfABC">> = iolist_to_binary(re:replace("ABCabc","(abc)\\1","oStOW\\1vVHVfFqojojf\\1",[caseless,
- global])),
-?line <<"GabcABCrGLdSabcABCWnHabcabcABCP">> = iolist_to_binary(re:replace("abcABC","(abc)\\1","G&rGLdS&WnH\\1&P",[caseless])),
-?line <<"GabcABCrGLdSabcABCWnHabcabcABCP">> = iolist_to_binary(re:replace("abcABC","(abc)\\1","G&rGLdS&WnH\\1&P",[caseless,
- global])),
-?line <<"KVwWyab{3cdEWMab{3cdPr">> = iolist_to_binary(re:replace("ab{3cd","ab{3cd","KVwWy&\\1EWM&Pr",[])),
-?line <<"KVwWyab{3cdEWMab{3cdPr">> = iolist_to_binary(re:replace("ab{3cd","ab{3cd","KVwWy&\\1EWM&Pr",[global])),
-?line <<"KuJab{3,cd">> = iolist_to_binary(re:replace("ab{3,cd","ab{3,cd","KuJ&",[])),
-?line <<"KuJab{3,cd">> = iolist_to_binary(re:replace("ab{3,cd","ab{3,cd","KuJ&",[global])),
-?line <<"squJfab{3,4a}cd">> = iolist_to_binary(re:replace("ab{3,4a}cd","ab{3,4a}cd","squ\\1Jf&",[])),
-?line <<"squJfab{3,4a}cd">> = iolist_to_binary(re:replace("ab{3,4a}cd","ab{3,4a}cd","squ\\1Jf&",[global])),
-?line <<"{4,5a}bc{4,5a}bcH">> = iolist_to_binary(re:replace("{4,5a}bc","{4,5a}bc","&&H",[])),
-?line <<"{4,5a}bc{4,5a}bcH">> = iolist_to_binary(re:replace("{4,5a}bc","{4,5a}bc","&&H",[global])),
-?line <<"nb">> = iolist_to_binary(re:replace("abc","abc$","nb",[])),
-?line <<"nb">> = iolist_to_binary(re:replace("abc","abc$","nb",[global])),
-?line <<"aabcTslrEK">> = iolist_to_binary(re:replace("abc","abc$","a&TslrEK",[])),
-?line <<"aabcTslrEK">> = iolist_to_binary(re:replace("abc","abc$","a&TslrEK",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","rVkXRL&nq&w\\1NDuHM\\1dj",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","rVkXRL&nq&w\\1NDuHM\\1dj",[global])),
-?line <<"abc
+def","\\A(.)*\\Z","v",[multiline,global])),
+ <<"RmbbMhEEp::c">> = iolist_to_binary(re:replace("b::c","(?:b)|(?::+)","Rmb&MhEEp",[])),
+ <<"RmbbMhEEpRmb::MhEEpc">> = iolist_to_binary(re:replace("b::c","(?:b)|(?::+)","Rmb&MhEEp",[global])),
+ <<"cYDT::rLb">> = iolist_to_binary(re:replace("c::b","(?:b)|(?::+)","YDT\\1&rL",[])),
+ <<"cYDT::rLYDTbrL">> = iolist_to_binary(re:replace("c::b","(?:b)|(?::+)","YDT\\1&rL",[global])),
+ <<"ehR">> = iolist_to_binary(re:replace("az-","[-az]+","ehR",[])),
+ <<"ehR">> = iolist_to_binary(re:replace("az-","[-az]+","ehR",[global])),
+ <<"*** FsaiTaeaWvwilers">> = iolist_to_binary(re:replace("*** Failers","[-az]+","s&\\1iT\\1&eaWvw",[])),
+ <<"*** FsaiTaeaWvwilers">> = iolist_to_binary(re:replace("*** Failers","[-az]+","s&\\1iT\\1&eaWvw",[global])),
+ <<"b">> = iolist_to_binary(re:replace("b","[-az]+","mdHw",[])),
+ <<"b">> = iolist_to_binary(re:replace("b","[-az]+","mdHw",[global])),
+ ok.
+run5() ->
+ <<"EDUoLiFaCJDko">> = iolist_to_binary(re:replace("za-","[az-]+","EDUoL\\1i\\1FaCJ\\1Dko",[])),
+ <<"EDUoLiFaCJDko">> = iolist_to_binary(re:replace("za-","[az-]+","EDUoL\\1i\\1FaCJ\\1Dko",[global])),
+ <<"*** FapAfSayQoaaFksilers">> = iolist_to_binary(re:replace("*** Failers","[az-]+","&\\1pAfS&yQo&&Fks\\1",[])),
+ <<"*** FapAfSayQoaaFksilers">> = iolist_to_binary(re:replace("*** Failers","[az-]+","&\\1pAfS&yQo&&Fks\\1",[global])),
+ <<"b">> = iolist_to_binary(re:replace("b","[az-]+","\\1LDAG\\1JLRNo",[])),
+ <<"b">> = iolist_to_binary(re:replace("b","[az-]+","\\1LDAG\\1JLRNo",[global])),
+ <<"">> = iolist_to_binary(re:replace("a-z","[a\\-z]+","\\1",[])),
+ <<"">> = iolist_to_binary(re:replace("a-z","[a\\-z]+","\\1",[global])),
+ <<"*** FvVgilers">> = iolist_to_binary(re:replace("*** Failers","[a\\-z]+","vVg",[])),
+ <<"*** FvVgilers">> = iolist_to_binary(re:replace("*** Failers","[a\\-z]+","vVg",[global])),
+ <<"b">> = iolist_to_binary(re:replace("b","[a\\-z]+","bfgfonbXIj",[])),
+ <<"b">> = iolist_to_binary(re:replace("b","[a\\-z]+","bfgfonbXIj",[global])),
+ <<"QYKd">> = iolist_to_binary(re:replace("abcdxyz","[a-z]+","Q\\1\\1Y\\1Kd\\1",[])),
+ <<"QYKd">> = iolist_to_binary(re:replace("abcdxyz","[a-z]+","Q\\1\\1Y\\1Kd\\1",[global])),
+ <<"UYmP12-3412-34">> = iolist_to_binary(re:replace("12-34","[\\d-]+","U\\1\\1YmP&&",[])),
+ <<"UYmP12-3412-34">> = iolist_to_binary(re:replace("12-34","[\\d-]+","U\\1\\1YmP&&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-]+","JWPgf\\1Eng\\1E\\1n",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-]+","JWPgf\\1Eng\\1E\\1n",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-]+","sRhgqdg&E",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-]+","sRhgqdg&E",[global])),
+ <<"efmQUhkdSK12-34zR12-34z12-34zTb">> = iolist_to_binary(re:replace("12-34z","[\\d-z]+","ef\\1mQUh\\1kdSK&R&&Tb",[])),
+ <<"efmQUhkdSK12-34zR12-34z12-34zTb">> = iolist_to_binary(re:replace("12-34z","[\\d-z]+","ef\\1mQUh\\1kdSK&R&&Tb",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-z]+","PJaMxeM",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\d-z]+","PJaMxeM",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-z]+","My\\1Kbyr&\\1",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","[\\d-z]+","My\\1Kbyr&\\1",[global])),
+ <<"QpJFT\\cphXBPQ ">> = iolist_to_binary(re:replace("\\ ","\\x5c","QpJF\\1T&cphXBPQ\\1",[])),
+ <<"QpJFT\\cphXBPQ ">> = iolist_to_binary(re:replace("\\ ","\\x5c","QpJF\\1T&cphXBPQ\\1",[global])),
+ <<"theHwjgWjRYr ZofH ZkBtIoo">> = iolist_to_binary(re:replace("the Zoo","\\x20Z","HwjgWjRYr&\\1ofH&kBtI",[])),
+ <<"theHwjgWjRYr ZofH ZkBtIoo">> = iolist_to_binary(re:replace("the Zoo","\\x20Z","HwjgWjRYr&\\1ofH&kBtI",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\x20Z","&STbBPwwLA",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\x20Z","&STbBPwwLA",[global])),
+ <<"Zulu">> = iolist_to_binary(re:replace("Zulu","\\x20Z","buG&ki&QEXQhj\\1\\1W",[])),
+ <<"Zulu">> = iolist_to_binary(re:replace("Zulu","\\x20Z","buG&ki&QEXQhj\\1\\1W",[global])),
+ <<"bhNKmH">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","bhNKmH",[caseless])),
+ <<"bhNKmH">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","bhNKmH",[caseless,
+ global])),
+ <<"jdFUGABCabcjABCabc">> = iolist_to_binary(re:replace("ABCabc","(abc)\\1","jdFUG&j&",[caseless])),
+ <<"jdFUGABCabcjABCabc">> = iolist_to_binary(re:replace("ABCabc","(abc)\\1","jdFUG&j&",[caseless,
+ global])),
+ <<"YSEabcsfRWrD">> = iolist_to_binary(re:replace("abcABC","(abc)\\1","YSE\\1sfRWrD",[caseless])),
+ <<"YSEabcsfRWrD">> = iolist_to_binary(re:replace("abcABC","(abc)\\1","YSE\\1sfRWrD",[caseless,
+ global])),
+ <<"CbQoKIFQqeNT">> = iolist_to_binary(re:replace("ab{3cd","ab{3cd","CbQoKIFQqeNT\\1",[])),
+ <<"CbQoKIFQqeNT">> = iolist_to_binary(re:replace("ab{3cd","ab{3cd","CbQoKIFQqeNT\\1",[global])),
+ <<"rhgUEyXbklwXmp">> = iolist_to_binary(re:replace("ab{3,cd","ab{3,cd","rhgUEyXbk\\1lwXmp",[])),
+ <<"rhgUEyXbklwXmp">> = iolist_to_binary(re:replace("ab{3,cd","ab{3,cd","rhgUEyXbk\\1lwXmp",[global])),
+ <<"Xlab{3,4a}cdcbaPbaKyKQGBb">> = iolist_to_binary(re:replace("ab{3,4a}cd","ab{3,4a}cd","Xl&cbaPbaKyKQG\\1Bb",[])),
+ <<"Xlab{3,4a}cdcbaPbaKyKQGBb">> = iolist_to_binary(re:replace("ab{3,4a}cd","ab{3,4a}cd","Xl&cbaPbaKyKQG\\1Bb",[global])),
+ <<"bSQWjrSvge">> = iolist_to_binary(re:replace("{4,5a}bc","{4,5a}bc","b\\1SQWjr\\1\\1Svge",[])),
+ <<"bSQWjrSvge">> = iolist_to_binary(re:replace("{4,5a}bc","{4,5a}bc","b\\1SQWjr\\1\\1Svge",[global])),
+ <<"SLxoL">> = iolist_to_binary(re:replace("abc","abc$","SLxoL",[])),
+ <<"SLxoL">> = iolist_to_binary(re:replace("abc","abc$","SLxoL",[global])),
+ <<"RJabcnabcqnisabctgJA">> = iolist_to_binary(re:replace("abc","abc$","RJ&n&qnis&tgJA",[])),
+ <<"RJabcnabcqnisabctgJA">> = iolist_to_binary(re:replace("abc","abc$","RJ&n&qnis&tgJA",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","cEO&P&qRklP&Nlb\\1H\\1K",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","cEO&P&qRklP&Nlb\\1H\\1K",[global])),
+ <<"abc
def">> = iolist_to_binary(re:replace("abc
-def","abc$","M",[])),
-?line <<"abc
+def","abc$","h&&nb\\1&NBSkhYb",[])),
+ <<"abc
def">> = iolist_to_binary(re:replace("abc
-def","abc$","M",[global])),
-?line <<"abcWCabcSYXGPjRugTabcVGabcSX">> = iolist_to_binary(re:replace("abcS","(abc)\\123","\\1WC&YXGPjRugT\\1VG&X",[])),
-?line <<"abcWCabcSYXGPjRugTabcVGabcSX">> = iolist_to_binary(re:replace("abcS","(abc)\\123","\\1WC&YXGPjRugT\\1VG&X",[global])),
-?line <<"fabc“Uabc“UmiqabceCsabcabc“">> = iolist_to_binary(re:replace("abc“","(abc)\\223","f&U&Umiq\\1eCs\\1&",[])),
-?line <<"fabc“Uabc“UmiqabceCsabcabc“">> = iolist_to_binary(re:replace("abc“","(abc)\\223","f&U&Umiq\\1eCs\\1&",[global])),
-?line <<"JRFabcxnbabcÓVkabcÓfWigQMuaY">> = iolist_to_binary(re:replace("abcÓ","(abc)\\323","JRF\\1xnb&Vk&fWigQMuaY",[])),
-?line <<"JRFabcxnbabcÓVkabcÓfWigQMuaY">> = iolist_to_binary(re:replace("abcÓ","(abc)\\323","JRF\\1xnb&Vk&fWigQMuaY",[global])),
-?line <<"vgabc@QQ">> = iolist_to_binary(re:replace("abc@","(abc)\\100","vg&QQ",[])),
-?line <<"vgabc@QQ">> = iolist_to_binary(re:replace("abc@","(abc)\\100","vg&QQ",[global])),
-?line <<"abc@OkvNytabc@abcabc@a">> = iolist_to_binary(re:replace("abc@","(abc)\\100","&OkvNyt&\\1&a",[])),
-?line <<"abc@OkvNytabc@abcabc@a">> = iolist_to_binary(re:replace("abc@","(abc)\\100","&OkvNyt&\\1&a",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","P&kRot\\1ILA",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","P&kRot\\1ILA",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","iULjBTiVDW&K\\1p&bj",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","iULjBTiVDW&K\\1p&bj",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","cplYw\\1iuv\\1Okstb\\1p",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","cplYw\\1iuv\\1Okstb\\1p",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","LDaRV&lAu\\1i",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","LDaRV&lAu\\1i",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","K\\1",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","K\\1",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","cXHTTaJLMXvR&\\1",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","cXHTTaJLMXvR&\\1",[global])),
-?line <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","\\1kB&oGS\\1\\1lPn",[])),
-?line <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","\\1kB&oGS\\1\\1lPn",[global])),
-?line <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","\\1",[])),
-?line <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","\\1",[global])),
-?line <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","\\1GKLIQYEGVpGIxagx&&",[])),
-?line <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","\\1GKLIQYEGVpGIxagx&&",[global])),
-?line <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","og&&Tlj&jCLkmrllagN",[])),
-?line <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","og&&Tlj&jCLkmrllagN",[global])),
-?line <<"xMFEgabcdefghijkllSDGabcdefghijkllSN">> = iolist_to_binary(re:replace("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123","xMFEg&DG&N",[])),
-?line <<"xMFEgabcdefghijkllSDGabcdefghijkllSN">> = iolist_to_binary(re:replace("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123","xMFEg&DG&N",[global])),
-?line <<"WyroFQabcdefghijk
-SNfabcdefghijk
-SahyoPabcdefghijk
-Sqfbs">> = iolist_to_binary(re:replace("abcdefghijk
-S","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123","WyroFQ&Nf&ahyoP&qfbs",[])),
-?line <<"WyroFQabcdefghijk
-SNfabcdefghijk
-SahyoPabcdefghijk
-Sqfbs">> = iolist_to_binary(re:replace("abcdefghijk
-S","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123","WyroFQ&Nf&ahyoP&qfbs",[global])),
-?line <<"fCnqsFE">> = iolist_to_binary(re:replace("abidef","ab\\idef","fCnqs\\1FE",[])),
-?line <<"fCnqsFE">> = iolist_to_binary(re:replace("abidef","ab\\idef","fCnqs\\1FE",[global])),
-?line <<"QFATItqr">> = iolist_to_binary(re:replace("bc","a{0}bc","Q\\1FAT\\1Itqr",[])),
-?line <<"QFATItqr">> = iolist_to_binary(re:replace("bc","a{0}bc","Q\\1FAT\\1Itqr",[global])),
-?line <<"DnNn">> = iolist_to_binary(re:replace("xyz","(a|(bc)){0,0}?xyz","DnNn",[])),
-?line <<"DnNn">> = iolist_to_binary(re:replace("xyz","(a|(bc)){0,0}?xyz","DnNn",[global])),
-?line <<"GlvWIgK">> = iolist_to_binary(re:replace("abcde","abc[\\10]de","GlvW\\1\\1IgK",[])),
-?line <<"GlvWIgK">> = iolist_to_binary(re:replace("abcde","abc[\\10]de","GlvW\\1\\1IgK",[global])),
-?line <<"KDyabcdeXgxxbvI">> = iolist_to_binary(re:replace("abcde","abc[\\1]de","KDy&XgxxbvI",[])),
-?line <<"KDyabcdeXgxxbvI">> = iolist_to_binary(re:replace("abcde","abc[\\1]de","KDy&XgxxbvI",[global])),
-?line <<"abcSYuXabcUabckewfJS">> = iolist_to_binary(re:replace("abcde","(abc)[\\1]de","\\1SYuX\\1U\\1kewfJS",[])),
-?line <<"abcSYuXabcUabckewfJS">> = iolist_to_binary(re:replace("abcde","(abc)[\\1]de","\\1SYuX\\1U\\1kewfJS",[global])),
-?line <<"a
-b">> = iolist_to_binary(re:replace("a
-b","(?s)a.b","&",[])),
-?line <<"a
-b">> = iolist_to_binary(re:replace("a
-b","(?s)a.b","&",[global])),
-?line <<"sILYgbGPUbaNOTcccceynxed">> = iolist_to_binary(re:replace("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","sILYg\\1GPU&eynxe",[])),
-?line <<"sILYgbGPUbaNOTcccceynxed">> = iolist_to_binary(re:replace("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","sILYg\\1GPU&eynxe",[global])),
-?line <<"bURwd">> = iolist_to_binary(re:replace("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","\\1URw",[])),
-?line <<"bURwd">> = iolist_to_binary(re:replace("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","\\1URw",[global])),
-?line <<"rRcqtdVUmd">> = iolist_to_binary(re:replace("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","rRcqtdVUm",[])),
-?line <<"rRcqtdVUmd">> = iolist_to_binary(re:replace("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","rRcqtdVUm",[global])),
-?line <<"lYsStJbdoraarRd">> = iolist_to_binary(re:replace("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","lYsStJ\\1doraarR",[])),
-?line <<"lYsStJbdoraarRd">> = iolist_to_binary(re:replace("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","lYsStJ\\1doraarR",[global])),
-?line <<"*** Failersyu**c*** Failers*KH">> = iolist_to_binary(re:replace("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})","&yu\\1\\1c&\\1KH",[])),
-?line <<"*** Failersyu**c*** Failers*KH">> = iolist_to_binary(re:replace("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})","&yu\\1\\1c&\\1KH",[global])),
-?line <<"anything">> = iolist_to_binary(re:replace("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})","&xLcPYkjD\\1YuJHCYWAIc",[])),
-?line <<"anything">> = iolist_to_binary(re:replace("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})","&xLcPYkjD\\1YuJHCYWAIc",[global])),
-?line <<"bc">> = iolist_to_binary(re:replace("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})","l\\1RIA&evjlHaNPGsYSx",[])),
-?line <<"bc">> = iolist_to_binary(re:replace("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})","l\\1RIA&evjlHaNPGsYSx",[global])),
-?line <<"baccd">> = iolist_to_binary(re:replace("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","SfTsSTMDCrU",[])),
-?line <<"baccd">> = iolist_to_binary(re:replace("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","SfTsSTMDCrU",[global])),
-?line <<"KqAssSsdXronRAsbc">> = iolist_to_binary(re:replace("Abc","[^a]","Kq&s\\1sSsdXronR&s\\1",[])),
-?line <<"KqAssSsdXronRAsKqbssSsdXronRbsKqcssSsdXronRcs">> = iolist_to_binary(re:replace("Abc","[^a]","Kq&s\\1sSsdXronR&s\\1",[global])),
-?line <<"AXxbehbnMtJMOjc">> = iolist_to_binary(re:replace("Abc","[^a]","Xx&eh&nMtJMOj",[caseless])),
-?line <<"AXxbehbnMtJMOjXxcehcnMtJMOj">> = iolist_to_binary(re:replace("Abc","[^a]","Xx&eh&nMtJMOj",[caseless,
- global])),
-?line <<"owGHnKmdtjnrJgSkEfaAbc">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","owGHnKmdtjnrJgSkEf",[])),
-?line <<"owGHnKmdtjnrJgSkEfaowGHnKmdtjnrJgSkEf">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","owGHnKmdtjnrJgSkEf",[global])),
-?line <<"AAAaAkm">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","\\1km",[caseless])),
-?line <<"AAAaAkm">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","\\1km",[caseless,
- global])),
-?line <<"iBIdW">> = iolist_to_binary(re:replace("bbb
-ccc","[^a]+","iB\\1I\\1d\\1\\1W",[])),
-?line <<"iBIdW">> = iolist_to_binary(re:replace("bbb
-ccc","[^a]+","iB\\1I\\1d\\1\\1W",[global])),
-?line <<"abDIvvGgnrbcKkaSCbuiv">> = iolist_to_binary(re:replace("abc","[^k]$","DIvvGgnrb&KkaSCbuiv\\1",[])),
-?line <<"abDIvvGgnrbcKkaSCbuiv">> = iolist_to_binary(re:replace("abc","[^k]$","DIvvGgnrb&KkaSCbuiv\\1",[global])),
-?line <<"*** FailerbswvPHxEss">> = iolist_to_binary(re:replace("*** Failers","[^k]$","b&wvPH\\1xE&&",[])),
-?line <<"*** FailerbswvPHxEss">> = iolist_to_binary(re:replace("*** Failers","[^k]$","b&wvPH\\1xE&&",[global])),
-?line <<"abk">> = iolist_to_binary(re:replace("abk","[^k]$","nWvCPNUa\\1iDnbay",[])),
-?line <<"abk">> = iolist_to_binary(re:replace("abk","[^k]$","nWvCPNUa\\1iDnbay",[global])),
-?line <<"HWSo">> = iolist_to_binary(re:replace("abc","[^k]{2,3}$","HWSo\\1",[])),
-?line <<"HWSo">> = iolist_to_binary(re:replace("abc","[^k]{2,3}$","HWSo\\1",[global])),
-?line <<"kNKYkjbsvgnUOybcsuN">> = iolist_to_binary(re:replace("kbc","[^k]{2,3}$","NKYkjbsvgn\\1UO\\1y&suN",[])),
-?line <<"kNKYkjbsvgnUOybcsuN">> = iolist_to_binary(re:replace("kbc","[^k]{2,3}$","NKYkjbsvgn\\1UO\\1y&suN",[global])),
-?line <<"kDhBIRhnabc">> = iolist_to_binary(re:replace("kabc","[^k]{2,3}$","DhBIRhn&",[])),
-?line <<"kDhBIRhnabc">> = iolist_to_binary(re:replace("kabc","[^k]{2,3}$","DhBIRhn&",[global])),
-?line <<"*** FailQmVy">> = iolist_to_binary(re:replace("*** Failers","[^k]{2,3}$","QmVy",[])),
-?line <<"*** FailQmVy">> = iolist_to_binary(re:replace("*** Failers","[^k]{2,3}$","QmVy",[global])),
-?line <<"abk">> = iolist_to_binary(re:replace("abk","[^k]{2,3}$","L&e",[])),
-?line <<"abk">> = iolist_to_binary(re:replace("abk","[^k]{2,3}$","L&e",[global])),
-?line <<"akb">> = iolist_to_binary(re:replace("akb","[^k]{2,3}$","\\1aD\\1u&",[])),
-?line <<"akb">> = iolist_to_binary(re:replace("akb","[^k]{2,3}$","\\1aD\\1u&",[global])),
-?line <<"akk">> = iolist_to_binary(re:replace("akk","[^k]{2,3}$","lPwfbQvWcRAypQ&",[])),
-?line <<"akk">> = iolist_to_binary(re:replace("akk","[^k]{2,3}$","lPwfbQvWcRAypQ&",[global])),
-?line <<"12345678.b.c.d">> = iolist_to_binary(re:replace("12345678.b.c.d","^\\d{8,}\\@.+[^k]$","VKe&\\1iCfITU\\1&nqEh",[])),
-?line <<"12345678.b.c.d">> = iolist_to_binary(re:replace("12345678.b.c.d","^\\d{8,}\\@.+[^k]$","VKe&\\1iCfITU\\1&nqEh",[global])),
-?line <<"123456789.y.z">> = iolist_to_binary(re:replace("123456789.y.z","^\\d{8,}\\@.+[^k]$","aW\\1Jg&g",[])),
-?line <<"123456789.y.z">> = iolist_to_binary(re:replace("123456789.y.z","^\\d{8,}\\@.+[^k]$","aW\\1Jg&g",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8,}\\@.+[^k]$","lHO",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8,}\\@.+[^k]$","lHO",[global])),
-?line <<"12345678.y.uk">> = iolist_to_binary(re:replace("12345678.y.uk","^\\d{8,}\\@.+[^k]$","uVLRBqgT\\1c&\\1",[])),
-?line <<"12345678.y.uk">> = iolist_to_binary(re:replace("12345678.y.uk","^\\d{8,}\\@.+[^k]$","uVLRBqgT\\1c&\\1",[global])),
-?line <<"1234567.b.c.d">> = iolist_to_binary(re:replace("1234567.b.c.d","^\\d{8,}\\@.+[^k]$","VRE&uJDdtsECL",[])),
-?line <<"1234567.b.c.d">> = iolist_to_binary(re:replace("1234567.b.c.d","^\\d{8,}\\@.+[^k]$","VRE&uJDdtsECL",[global])),
-?line <<"XJnEEHYdC">> = iolist_to_binary(re:replace("aaaaaaaaa","(a)\\1{8,}","XJnEEHYdC",[])),
-?line <<"XJnEEHYdC">> = iolist_to_binary(re:replace("aaaaaaaaa","(a)\\1{8,}","XJnEEHYdC",[global])),
-?line <<"eviBaaaaaaaaaaaKMfaysHkyJyKi">> = iolist_to_binary(re:replace("aaaaaaaaaa","(a)\\1{8,}","eviB\\1&KMfaysHkyJyKi",[])),
-?line <<"eviBaaaaaaaaaaaKMfaysHkyJyKi">> = iolist_to_binary(re:replace("aaaaaaaaaa","(a)\\1{8,}","eviB\\1&KMfaysHkyJyKi",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a)\\1{8,}","DjllScfItkb&J&&Nv\\1\\1C",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a)\\1{8,}","DjllScfItkb&J&&Nv\\1\\1C",[global])),
-?line <<"aaaaaaa">> = iolist_to_binary(re:replace("aaaaaaa","(a)\\1{8,}","W&Bp\\1Bem",[])),
-?line <<"aaaaaaa">> = iolist_to_binary(re:replace("aaaaaaa","(a)\\1{8,}","W&Bp\\1Bem",[global])),
-?line <<"aaaaIEWbcd">> = iolist_to_binary(re:replace("aaaabcd","[^a]","IEW\\1&",[])),
-?line <<"aaaaIEWbIEWcIEWd">> = iolist_to_binary(re:replace("aaaabcd","[^a]","IEW\\1&",[global])),
-?line <<"aarhjHFaNDBbwVabcd">> = iolist_to_binary(re:replace("aaAabcd","[^a]","r\\1hjHFaNDBbwV",[])),
-?line <<"aarhjHFaNDBbwVarhjHFaNDBbwVrhjHFaNDBbwVrhjHFaNDBbwV">> = iolist_to_binary(re:replace("aaAabcd","[^a]","r\\1hjHFaNDBbwV",[global])),
-?line <<"aaaaUVFcd">> = iolist_to_binary(re:replace("aaaabcd","[^a]","U\\1V\\1F",[caseless])),
-?line <<"aaaaUVFUVFUVF">> = iolist_to_binary(re:replace("aaaabcd","[^a]","U\\1V\\1F",[caseless,
- global])),
-?line <<"aaAacbLmqbDepcd">> = iolist_to_binary(re:replace("aaAabcd","[^a]","c&Lmq&De\\1p",[caseless])),
-?line <<"aaAacbLmqbDepccLmqcDepcdLmqdDep">> = iolist_to_binary(re:replace("aaAabcd","[^a]","c&Lmq&De\\1p",[caseless,
- global])),
-?line <<"aaaaFtrLcd">> = iolist_to_binary(re:replace("aaaabcd","[^az]","Ftr\\1L",[])),
-?line <<"aaaaFtrLFtrLFtrL">> = iolist_to_binary(re:replace("aaaabcd","[^az]","Ftr\\1L",[global])),
-?line <<"aaxQoACFyabcd">> = iolist_to_binary(re:replace("aaAabcd","[^az]","xQo&C\\1Fy",[])),
-?line <<"aaxQoACFyaxQobCFyxQocCFyxQodCFy">> = iolist_to_binary(re:replace("aaAabcd","[^az]","xQo&C\\1Fy",[global])),
-?line <<"aaaawiJAqfcd">> = iolist_to_binary(re:replace("aaaabcd","[^az]","wiJ\\1Aq\\1f",[caseless])),
-?line <<"aaaawiJAqfwiJAqfwiJAqf">> = iolist_to_binary(re:replace("aaaabcd","[^az]","wiJ\\1Aq\\1f",[caseless,
- global])),
-?line <<"aaAabheGsmSFcd">> = iolist_to_binary(re:replace("aaAabcd","[^az]","bheGsmSF",[caseless])),
-?line <<"aaAabheGsmSFbheGsmSFbheGsmSF">> = iolist_to_binary(re:replace("aaAabcd","[^az]","bheGsmSF",[caseless,
- global])),
-?line <<"xxxxxxxxxxxINrCehGlgxfQWogKhXjxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL","INrCe\\1hGlgxfQWogKhXj",[])),
-?line <<"xxxxxxxxxxxINrCehGlgxfQWogKhXjxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL","INrCe\\1hGlgxfQWogKhXj",[global])),
-?line <<"xxxxxxxxxxxSxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL","S",[])),
-?line <<"xxxxxxxxxxxSxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL","S",[global])),
-?line <<"1yO.230003938DJNUSE">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d[1-9]?)\\d+","yO&DJNUSE",[])),
-?line <<"1yO.230003938DJNUSE">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d[1-9]?)\\d+","yO&DJNUSE",[global])),
-?line <<"1J.875RCmc.875000282SWmWrLgf">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d[1-9]?)\\d+","J\\1RCmc&SWmWrLgf",[])),
-?line <<"1J.875RCmc.875000282SWmWrLgf">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d[1-9]?)\\d+","J\\1RCmc&SWmWrLgf",[global])),
-?line <<"1QhH.23A.235j">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d[1-9]?)\\d+","QhH\\1A&j",[])),
-?line <<"1QhH.23A.235j">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d[1-9]?)\\d+","QhH\\1A&j",[global])),
-?line <<"1ASoXGLgq.23gkJkohg.23pCC0003938">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))","ASoXGLgq\\1gkJkohg\\1pCC",[])),
-?line <<"1ASoXGLgq.23gkJkohg.23pCC0003938">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))","ASoXGLgq\\1gkJkohg\\1pCC",[global])),
-?line <<"1rmMcAlqV000282">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))","rmMcAlqV",[])),
-?line <<"1rmMcAlqV000282">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))","rmMcAlqV",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))","wpfYj&AA",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))","wpfYj&AA",[global])),
-?line <<"1.235">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))","Kq&VgFL",[])),
-?line <<"1.235">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))","Kq&VgFL",[global])),
-?line <<"JabwbScGoababcabE">> = iolist_to_binary(re:replace("ab","a(?)b","J&wbSc\\1Go&\\1\\1&c&E",[])),
-?line <<"JabwbScGoababcabE">> = iolist_to_binary(re:replace("ab","a(?)b","J&wbSc\\1Go&\\1\\1&c&E",[global])),
-?line <<"Food is on the Qfoo tableygvPjujxbaDigfoo tablegCefoo table">> = iolist_to_binary(re:replace("Food is on the foo table","\\b(foo)\\s+(\\w+)","Q&ygvPjujxbaDig&gCe&",[caseless])),
-?line <<"Food is on the Qfoo tableygvPjujxbaDigfoo tablegCefoo table">> = iolist_to_binary(re:replace("Food is on the foo table","\\b(foo)\\s+(\\w+)","Q&ygvPjujxbaDig&gCe&",[caseless,
- global])),
-?line <<"The pBETCXLfood is under the bar in the barWwWn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*)bar","pBETCXL&WwW",[])),
-?line <<"The pBETCXLfood is under the bar in the barWwWn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*)bar","pBETCXL&WwW",[global])),
-?line <<"The nfood is under the barnSrtWBfood is under the barXapfood is under the barr in the barn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*?)bar","n&nSrtWB&Xap&r",[])),
-?line <<"The nfood is under the barnSrtWBfood is under the barXapfood is under the barr in the barn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*?)bar","n&nSrtWB&Xap&r",[global])),
-?line <<"GI have 2 numbers: 53147mNBu">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d*)","G&mNBu",[])),
-?line <<"GI have 2 numbers: 53147mNBuGmNBu">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d*)","G&mNBu",[global])),
-?line <<"SI have 2 numbers: 53147">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)","S&",[])),
-?line <<"SI have 2 numbers: 53147">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)","S&",[global])),
-?line <<"bGeEvMOYIVDQHJHuI have 2 numbers: 53147">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d*)","bGeEvMO\\1YIVDQ&HJHu",[])),
-?line <<"bGeEvMOYIVDQHJHubGeEvMOIYIVDQIHJHubGeEvMOYIVDQHJHubGeEvMO YIVDQ HJHubGeEvMOYIVDQHJHubGeEvMOhYIVDQhHJHubGeEvMOYIVDQHJHubGeEvMOaYIVDQaHJHubGeEvMOYIVDQHJHubGeEvMOvYIVDQvHJHubGeEvMOYIVDQHJHubGeEvMOeYIVDQeHJHubGeEvMOYIVDQHJHubGeEvMO YIVDQ 2HJHubGeEvMOYIVDQHJHubGeEvMO YIVDQ HJHubGeEvMOYIVDQHJHubGeEvMOnYIVDQnHJHubGeEvMOYIVDQHJHubGeEvMOuYIVDQuHJHubGeEvMOYIVDQHJHubGeEvMOmYIVDQmHJHubGeEvMOYIVDQHJHubGeEvMObYIVDQbHJHubGeEvMOYIVDQHJHubGeEvMOeYIVDQeHJHubGeEvMOYIVDQHJHubGeEvMOrYIVDQrHJHubGeEvMOYIVDQHJHubGeEvMOsYIVDQsHJHubGeEvMOYIVDQHJHubGeEvMO:YIVDQ:HJHubGeEvMOYIVDQHJHubGeEvMO YIVDQ 53147HJHubGeEvMOYIVDQHJHu">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d*)","bGeEvMO\\1YIVDQ&HJHu",[global])),
-?line <<"I have tsI have cgpNHsI have I have U numbers: 53147">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)","\\1ts\\1cgpNHs\\1\\1U",[])),
-?line <<"I have tsI have cgpNHsI have I have U numbers: ts numbers: cgpNHs numbers: numbers: U">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)","\\1ts\\1cgpNHs\\1\\1U",[global])),
-?line <<"mwinCVPlFdkqGucU">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)$","mwinCVPlFdkqGucU",[])),
-?line <<"mwinCVPlFdkqGucU">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)$","mwinCVPlFdkqGucU",[global])),
-?line <<"I have 2 numbers: 53147I have 2 numbers: 53147I have 2 numbers: 53147pEI have 2 numbers: 53147o">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)$","&&&pE&o",[])),
-?line <<"I have 2 numbers: 53147I have 2 numbers: 53147I have 2 numbers: 53147pEI have 2 numbers: 53147o">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)$","&&&pE&o",[global])),
-?line <<"ym">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)\\b(\\d+)$","ym",[])),
-?line <<"ym">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)\\b(\\d+)$","ym",[global])),
-?line <<"FI have 2 numbers: 53147QSb">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*\\D)(\\d+)$","F&QSb",[])),
-?line <<"FI have 2 numbers: 53147QSb">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*\\D)(\\d+)$","F&QSb",[global])),
-?line <<"ABDGFHjyNAtuJTC123">> = iolist_to_binary(re:replace("ABC123","^\\D*(?!123)","&DGFHjyNAtu\\1JT",[])),
-?line <<"ABDGFHjyNAtuJTC123">> = iolist_to_binary(re:replace("ABC123","^\\D*(?!123)","&DGFHjyNAtu\\1JT",[global])),
-?line <<"ABCUxCRnmWFAQVrawlJ445">> = iolist_to_binary(re:replace("ABC445","^(\\D*)(?=\\d)(?!123)","\\1UxCRnmWFAQVrawlJ",[])),
-?line <<"ABCUxCRnmWFAQVrawlJ445">> = iolist_to_binary(re:replace("ABC445","^(\\D*)(?=\\d)(?!123)","\\1UxCRnmWFAQVrawlJ",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","X\\1uOv\\1PUbsw&IOcqB",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","X\\1uOv\\1PUbsw&IOcqB",[global])),
-?line <<"ABC123">> = iolist_to_binary(re:replace("ABC123","^(\\D*)(?=\\d)(?!123)","&efpcH\\1vtp",[])),
-?line <<"ABC123">> = iolist_to_binary(re:replace("ABC123","^(\\D*)(?=\\d)(?!123)","&efpcH\\1vtp",[global])),
-?line <<"X789">> = iolist_to_binary(re:replace("W46]789","^[W-]46]","X",[])),
-?line <<"X789">> = iolist_to_binary(re:replace("W46]789","^[W-]46]","X",[global])),
-?line <<"-46]GqowvnKBMivOCTQ789">> = iolist_to_binary(re:replace("-46]789","^[W-]46]","&GqowvnKBMiv\\1\\1OCTQ",[])),
-?line <<"-46]GqowvnKBMivOCTQ789">> = iolist_to_binary(re:replace("-46]789","^[W-]46]","&GqowvnKBMiv\\1\\1OCTQ",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-]46]","VkkVbQHsQJe\\1Oqgp",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-]46]","VkkVbQHsQJe\\1Oqgp",[global])),
-?line <<"Wall">> = iolist_to_binary(re:replace("Wall","^[W-]46]","A\\1",[])),
-?line <<"Wall">> = iolist_to_binary(re:replace("Wall","^[W-]46]","A\\1",[global])),
-?line <<"Zebra">> = iolist_to_binary(re:replace("Zebra","^[W-]46]","D\\1Gh&rRMY",[])),
-?line <<"Zebra">> = iolist_to_binary(re:replace("Zebra","^[W-]46]","D\\1Gh&rRMY",[global])),
-?line <<"42">> = iolist_to_binary(re:replace("42","^[W-]46]","&NkVKe",[])),
-?line <<"42">> = iolist_to_binary(re:replace("42","^[W-]46]","&NkVKe",[global])),
-?line <<"[abcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-]46]","UhUNReBRM\\1AIyjJpNT",[])),
-?line <<"[abcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-]46]","UhUNReBRM\\1AIyjJpNT",[global])),
-?line <<"]abcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-]46]","&GSivk\\1PUgboDgD\\1Q&\\1",[])),
-?line <<"]abcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-]46]","&GSivk\\1PUgboDgD\\1Q&\\1",[global])),
-?line <<"CiPKWjJuYp46]789">> = iolist_to_binary(re:replace("W46]789","^[W-\\]46]","CiPK&jJuYp",[])),
-?line <<"CiPKWjJuYp46]789">> = iolist_to_binary(re:replace("W46]789","^[W-\\]46]","CiPK&jJuYp",[global])),
-?line <<"WWGQUxNBall">> = iolist_to_binary(re:replace("Wall","^[W-\\]46]","&&G\\1QUxN\\1\\1B",[])),
-?line <<"WWGQUxNBall">> = iolist_to_binary(re:replace("Wall","^[W-\\]46]","&&G\\1QUxN\\1\\1B",[global])),
-?line <<"BBmKOIEOebra">> = iolist_to_binary(re:replace("Zebra","^[W-\\]46]","BBmKOI\\1E\\1O",[])),
-?line <<"BBmKOIEOebra">> = iolist_to_binary(re:replace("Zebra","^[W-\\]46]","BBmKOI\\1E\\1O",[global])),
-?line <<"fsXBGOoQmDJroEwPIXEylophone">> = iolist_to_binary(re:replace("Xylophone","^[W-\\]46]","f\\1s&BGOoQmDJroEwPI&E",[])),
-?line <<"fsXBGOoQmDJroEwPIXEylophone">> = iolist_to_binary(re:replace("Xylophone","^[W-\\]46]","f\\1s&BGOoQmDJroEwPI&E",[global])),
-?line <<"rtkSPUv4c2">> = iolist_to_binary(re:replace("42","^[W-\\]46]","rtkSPUv&c",[])),
-?line <<"rtkSPUv4c2">> = iolist_to_binary(re:replace("42","^[W-\\]46]","rtkSPUv&c",[global])),
-?line <<"AqCR[dTqabcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-\\]46]","AqCR\\1&dTq",[])),
-?line <<"AqCR[dTqabcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-\\]46]","AqCR\\1&dTq",[global])),
-?line <<"XG]JRsPEtL]eoabcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-\\]46]","XG&JRsPEtL&e\\1o",[])),
-?line <<"XG]JRsPEtL]eoabcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-\\]46]","XG&JRsPEtL&e\\1o",[global])),
-?line <<"YrokgJhnnbackslash">> = iolist_to_binary(re:replace("\\backslash","^[W-\\]46]","YrokgJhnn\\1",[])),
-?line <<"YrokgJhnnbackslash">> = iolist_to_binary(re:replace("\\backslash","^[W-\\]46]","YrokgJhnn\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-\\]46]","\\1l",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-\\]46]","\\1l",[global])),
-?line <<"-46]789">> = iolist_to_binary(re:replace("-46]789","^[W-\\]46]","lUctT",[])),
-?line <<"-46]789">> = iolist_to_binary(re:replace("-46]789","^[W-\\]46]","lUctT",[global])),
-?line <<"well">> = iolist_to_binary(re:replace("well","^[W-\\]46]","xELX&QH\\1AsnFr&SH",[])),
-?line <<"well">> = iolist_to_binary(re:replace("well","^[W-\\]46]","xELX&QH\\1AsnFr&SH",[global])),
-?line <<"vword cat dog elephant mussel cow horse canary baboon snake shark otherwordword cat dog elephant mussel cow horse canary baboon snake shark otherwordKteyKVE">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword","v&&KteyKVE\\1",[])),
-?line <<"vword cat dog elephant mussel cow horse canary baboon snake shark otherwordword cat dog elephant mussel cow horse canary baboon snake shark otherwordKteyKVE">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword","v&&KteyKVE\\1",[global])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword","wUEYJgw",[])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword","wUEYJgw",[global])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword","ABdTK\\1Y\\1",[])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword","ABdTK\\1Y\\1",[global])),
-?line <<"CahYoKbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,0}","\\1CahYoK",[])),
-?line <<"CahYoKbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,0}","\\1CahYoK",[global])),
-?line <<"QcFabc">> = iolist_to_binary(re:replace("abc","^(a){0,0}","&QcF",[])),
-?line <<"QcFabc">> = iolist_to_binary(re:replace("abc","^(a){0,0}","&QcF",[global])),
-?line <<"BvdvcHaab">> = iolist_to_binary(re:replace("aab","^(a){0,0}","BvdvcH",[])),
-?line <<"BvdvcHaab">> = iolist_to_binary(re:replace("aab","^(a){0,0}","BvdvcH",[global])),
-?line <<"mtLIyIhdbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,1}","mtL\\1IyIhd",[])),
-?line <<"mtLIyIhdbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,1}","mtL\\1IyIhd",[global])),
-?line <<"oaDoeSPhHaNhncDqkiabc">> = iolist_to_binary(re:replace("abc","^(a){0,1}","o\\1DoeSPhH&NhncDqki\\1",[])),
-?line <<"oaDoeSPhHaNhncDqkiabc">> = iolist_to_binary(re:replace("abc","^(a){0,1}","o\\1DoeSPhH&NhncDqki\\1",[global])),
-?line <<"ahaXsxVhaFHSKPhapJQab">> = iolist_to_binary(re:replace("aab","^(a){0,1}","\\1h\\1XsxVh\\1FHSKPhapJQ",[])),
-?line <<"ahaXsxVhaFHSKPhapJQab">> = iolist_to_binary(re:replace("aab","^(a){0,1}","\\1h\\1XsxVh\\1FHSKPhapJQ",[global])),
-?line <<"iMdtvIhKruTIdObcd">> = iolist_to_binary(re:replace("bcd","^(a){0,2}","iMd\\1\\1\\1tvIhK&r\\1uTIdO",[])),
-?line <<"iMdtvIhKruTIdObcd">> = iolist_to_binary(re:replace("bcd","^(a){0,2}","iMd\\1\\1\\1tvIhK&r\\1uTIdO",[global])),
-?line <<"WYRQMjbc">> = iolist_to_binary(re:replace("abc","^(a){0,2}","WYRQMj",[])),
-?line <<"WYRQMjbc">> = iolist_to_binary(re:replace("abc","^(a){0,2}","WYRQMj",[global])),
-?line <<"XaKbiaaaEub">> = iolist_to_binary(re:replace("aab","^(a){0,2}","XaKbi\\1&Eu",[])),
-?line <<"XaKbiaaaEub">> = iolist_to_binary(re:replace("aab","^(a){0,2}","XaKbi\\1&Eu",[global])),
-?line <<"cFVbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,3}","&c&&FV&",[])),
-?line <<"cFVbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,3}","&c&&FV&",[global])),
-?line <<"gEwbc">> = iolist_to_binary(re:replace("abc","^(a){0,3}","gEw",[])),
-?line <<"gEwbc">> = iolist_to_binary(re:replace("abc","^(a){0,3}","gEw",[global])),
-?line <<"aaSuagMaaaaIaaKb">> = iolist_to_binary(re:replace("aab","^(a){0,3}","&Su\\1gM&&I&K",[])),
-?line <<"aaSuagMaaaaIaaKb">> = iolist_to_binary(re:replace("aab","^(a){0,3}","&Su\\1gM&&I&K",[global])),
-?line <<"GaaahIAJLaMaaaaaSBlaaaTU">> = iolist_to_binary(re:replace("aaa","^(a){0,3}","G&hIAJL\\1M\\1&aSBl&TU",[])),
-?line <<"GaaahIAJLaMaaaaaSBlaaaTU">> = iolist_to_binary(re:replace("aaa","^(a){0,3}","G&hIAJL\\1M\\1&aSBl&TU",[global])),
-?line <<"gcHyvqMebtbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,}","g&cHyvqMebt",[])),
-?line <<"gcHyvqMebtbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,}","g&cHyvqMebt",[global])),
-?line <<"atJaOxHRjOnDbc">> = iolist_to_binary(re:replace("abc","^(a){0,}","\\1tJaOxHRjOnD",[])),
-?line <<"atJaOxHRjOnDbc">> = iolist_to_binary(re:replace("abc","^(a){0,}","\\1tJaOxHRjOnD",[global])),
-?line <<"RlAewSMFrb">> = iolist_to_binary(re:replace("aab","^(a){0,}","RlAewSMFr",[])),
-?line <<"RlAewSMFrb">> = iolist_to_binary(re:replace("aab","^(a){0,}","RlAewSMFr",[global])),
-?line <<"FaaaBoIPaaaLaaaYfapavgA">> = iolist_to_binary(re:replace("aaa","^(a){0,}","F&BoIP&L&Yf\\1p\\1vgA",[])),
-?line <<"FaaaBoIPaaaLaaaYfapavgA">> = iolist_to_binary(re:replace("aaa","^(a){0,}","F&BoIP&L&Yf\\1p\\1vgA",[global])),
-?line <<"baaaaaaaacUvaaaaaaaaCgeDoaRaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){0,}","b&cUv&CgeDo\\1R&",[])),
-?line <<"baaaaaaaacUvaaaaaaaaCgeDoaRaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){0,}","b&cUv&CgeDo\\1R&",[global])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,1}","F&vqwCbrndilc&Wb\\1LRH",[])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,1}","F&vqwCbrndilc&Wb\\1LRH",[global])),
-?line <<"BaaYanfjPxbaabc">> = iolist_to_binary(re:replace("abc","^(a){1,1}","B\\1\\1Y\\1nfjPxb\\1&",[])),
-?line <<"BaaYanfjPxbaabc">> = iolist_to_binary(re:replace("abc","^(a){1,1}","B\\1\\1Y\\1nfjPxb\\1&",[global])),
-?line <<"Pab">> = iolist_to_binary(re:replace("aab","^(a){1,1}","P",[])),
-?line <<"Pab">> = iolist_to_binary(re:replace("aab","^(a){1,1}","P",[global])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,2}","eK\\1B&ypECvCJqtlr&",[])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,2}","eK\\1B&ypECvCJqtlr&",[global])),
-?line <<"QYbc">> = iolist_to_binary(re:replace("abc","^(a){1,2}","QY",[])),
-?line <<"QYbc">> = iolist_to_binary(re:replace("abc","^(a){1,2}","QY",[global])),
-?line <<"MbnVXaaaXhaab">> = iolist_to_binary(re:replace("aab","^(a){1,2}","MbnVX&\\1Xh&",[])),
-?line <<"MbnVXaaaXhaab">> = iolist_to_binary(re:replace("aab","^(a){1,2}","MbnVX&\\1Xh&",[global])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,3}","UKOH",[])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,3}","UKOH",[global])),
-?line <<"TJxKYHFmaaadWlbc">> = iolist_to_binary(re:replace("abc","^(a){1,3}","TJxKYHFm&&\\1dWl",[])),
-?line <<"TJxKYHFmaaadWlbc">> = iolist_to_binary(re:replace("abc","^(a){1,3}","TJxKYHFm&&\\1dWl",[global])),
-?line <<"ub">> = iolist_to_binary(re:replace("aab","^(a){1,3}","u",[])),
-?line <<"ub">> = iolist_to_binary(re:replace("aab","^(a){1,3}","u",[global])),
-?line <<"FOX">> = iolist_to_binary(re:replace("aaa","^(a){1,3}","FOX",[])),
-?line <<"FOX">> = iolist_to_binary(re:replace("aaa","^(a){1,3}","FOX",[global])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,}","W\\1Urn\\1O",[])),
-?line <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,}","W\\1Urn\\1O",[global])),
-?line <<"awalKDgaLeMbc">> = iolist_to_binary(re:replace("abc","^(a){1,}","\\1w\\1lKDg&LeM",[])),
-?line <<"awalKDgaLeMbc">> = iolist_to_binary(re:replace("abc","^(a){1,}","\\1w\\1lKDg&LeM",[global])),
-?line <<"qHVYNjismoeaasSpb">> = iolist_to_binary(re:replace("aab","^(a){1,}","qHVYNjismoe&sSp",[])),
-?line <<"qHVYNjismoeaasSpb">> = iolist_to_binary(re:replace("aab","^(a){1,}","qHVYNjismoe&sSp",[global])),
-?line <<"laa">> = iolist_to_binary(re:replace("aaa","^(a){1,}","la\\1",[])),
-?line <<"laa">> = iolist_to_binary(re:replace("aaa","^(a){1,}","la\\1",[global])),
-?line <<"UJqaaaaaaaarcaaaaaaaaQHavwaGaaaaaaaaoX">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){1,}","UJq&rc&QH\\1vw\\1G&oX",[])),
-?line <<"UJqaaaaaaaarcaaaaaaaaQHavwaGaaaaaaaaoX">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){1,}","UJq&rc&QH\\1vw\\1G&oX",[global])),
-?line <<"borfle
-bib.gifs
+def","abc$","h&&nb\\1&NBSkhYb",[global])),
+ <<"trlaTa">> = iolist_to_binary(re:replace("abcS","(abc)\\123","trlaTa",[])),
+ <<"trlaTa">> = iolist_to_binary(re:replace("abcS","(abc)\\123","trlaTa",[global])),
+ <<"Oabc“MWabcjRDvJhyeF">> = iolist_to_binary(re:replace("abc“","(abc)\\223","O&MW\\1jRDvJhyeF",[])),
+ <<"Oabc“MWabcjRDvJhyeF">> = iolist_to_binary(re:replace("abc“","(abc)\\223","O&MW\\1jRDvJhyeF",[global])),
+ <<"uLBUEpabcÓabcjn">> = iolist_to_binary(re:replace("abcÓ","(abc)\\323","uLBUEp&\\1jn",[])),
+ <<"uLBUEpabcÓabcjn">> = iolist_to_binary(re:replace("abcÓ","(abc)\\323","uLBUEp&\\1jn",[global])),
+ <<"Pi">> = iolist_to_binary(re:replace("abc@","(abc)\\100","Pi",[])),
+ <<"Pi">> = iolist_to_binary(re:replace("abc@","(abc)\\100","Pi",[global])),
+ <<"NLS">> = iolist_to_binary(re:replace("abc@","(abc)\\100","NLS",[])),
+ <<"NLS">> = iolist_to_binary(re:replace("abc@","(abc)\\100","NLS",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","gshb&NCwCI&\\1&O\\1Y&OU",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","gshb&NCwCI&\\1&O\\1Y&OU",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","wfQfG",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","wfQfG",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","nlTLMMuUL\\1dek",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","nlTLMMuUL\\1dek",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","VP\\1&nVqym",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","VP\\1&nVqym",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","YmKMMo",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","YmKMMo",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","POFFExkEtjS",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1000","POFFExkEtjS",[global])),
+ <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","FLXryNI\\1vKW\\1l",[])),
+ <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","FLXryNI\\1vKW\\1l",[global])),
+ <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","xwedFGU&&joLFV",[])),
+ <<"abc81">> = iolist_to_binary(re:replace("abc81","abc\\81","xwedFGU&&joLFV",[global])),
+ <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","QiTym",[])),
+ <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","QiTym",[global])),
+ <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","r",[])),
+ <<"abc91">> = iolist_to_binary(re:replace("abc91","abc\\91","r",[global])),
+ ok.
+run6() ->
+ <<"JavrrCGIJrabcdefghijkllSabcdefghijkllSRCgujabcdefghijkllSnS">> = iolist_to_binary(re:replace("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123","J\\1vrrCGIJr&&RCguj&nS",[])),
+ <<"JavrrCGIJrabcdefghijkllSabcdefghijkllSRCgujabcdefghijkllSnS">> = iolist_to_binary(re:replace("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123","J\\1vrrCGIJr&&RCguj&nS",[global])),
+ <<"Iabcdefghijk
+SoGoIaaBybRYC">> = iolist_to_binary(re:replace("abcdefghijk
+S","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123","I&oGoI\\1\\1BybRYC",[])),
+ <<"Iabcdefghijk
+SoGoIaaBybRYC">> = iolist_to_binary(re:replace("abcdefghijk
+S","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123","I&oGoI\\1\\1BybRYC",[global])),
+ <<"RGabidefuGO">> = iolist_to_binary(re:replace("abidef","ab\\idef","RG&u\\1G\\1O",[])),
+ <<"RGabidefuGO">> = iolist_to_binary(re:replace("abidef","ab\\idef","RG&u\\1G\\1O",[global])),
+ <<"khlnfNEs">> = iolist_to_binary(re:replace("bc","a{0}bc","khlnfNEs",[])),
+ <<"khlnfNEs">> = iolist_to_binary(re:replace("bc","a{0}bc","khlnfNEs",[global])),
+ <<"rqJj">> = iolist_to_binary(re:replace("xyz","(a|(bc)){0,0}?xyz","rqJj",[])),
+ <<"rqJj">> = iolist_to_binary(re:replace("xyz","(a|(bc)){0,0}?xyz","rqJj",[global])),
+ <<"lSP">> = iolist_to_binary(re:replace("abcde","abc[\\10]de","lSP",[])),
+ <<"lSP">> = iolist_to_binary(re:replace("abcde","abc[\\10]de","lSP",[global])),
+ <<"CKJxmayjvTnPabcdeFvA">> = iolist_to_binary(re:replace("abcde","abc[\\1]de","CKJxmayjvTnP&FvA",[])),
+ <<"CKJxmayjvTnPabcdeFvA">> = iolist_to_binary(re:replace("abcde","abc[\\1]de","CKJxmayjvTnP&FvA",[global])),
+ <<"WyBabcdeCxJkWabcdeipq">> = iolist_to_binary(re:replace("abcde","(abc)[\\1]de","WyB&CxJkW&ipq",[])),
+ <<"WyBabcdeCxJkWabcdeipq">> = iolist_to_binary(re:replace("abcde","(abc)[\\1]de","WyB&CxJkW&ipq",[global])),
+ <<"Ua
+bXVska
+bg">> = iolist_to_binary(re:replace("a
+b","(?s)a.b","U&XVsk&g",[])),
+ <<"Ua
+bXVska
+bg">> = iolist_to_binary(re:replace("a
+b","(?s)a.b","U&XVsk&g",[global])),
+ <<"WgjbaNOTcccckIbd">> = iolist_to_binary(re:replace("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","Wgj&kI\\1",[])),
+ <<"WgjbaNOTcccckIbd">> = iolist_to_binary(re:replace("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","Wgj&kI\\1",[global])),
+ <<"DoCtbaMWiqd">> = iolist_to_binary(re:replace("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","DoCt\\1aMWiq",[])),
+ <<"DoCtbaMWiqd">> = iolist_to_binary(re:replace("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","DoCt\\1aMWiq",[global])),
+ <<"thYPIiibbhwYvfLkd">> = iolist_to_binary(re:replace("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","thYPIii\\1bhwYvfLk",[])),
+ <<"thYPIiibbhwYvfLkd">> = iolist_to_binary(re:replace("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","thYPIii\\1bhwYvfLk",[global])),
+ <<"RibMcQxAKFpd">> = iolist_to_binary(re:replace("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","Ri\\1McQxAKFp",[])),
+ <<"RibMcQxAKFpd">> = iolist_to_binary(re:replace("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","Ri\\1McQxAKFp",[global])),
+ <<"vQUa">> = iolist_to_binary(re:replace("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})","vQUa",[])),
+ <<"vQUa">> = iolist_to_binary(re:replace("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})","vQUa",[global])),
+ <<"anything">> = iolist_to_binary(re:replace("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})","bR\\1Bb&yOfWxBSieYBnJ",[])),
+ <<"anything">> = iolist_to_binary(re:replace("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})","bR\\1Bb&yOfWxBSieYBnJ",[global])),
+ <<"bc">> = iolist_to_binary(re:replace("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})","W\\1i\\1DbDlQDP&rWwmD&",[])),
+ <<"bc">> = iolist_to_binary(re:replace("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})","W\\1i\\1DbDlQDP&rWwmD&",[global])),
+ <<"baccd">> = iolist_to_binary(re:replace("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","ICMQ\\1pRu",[])),
+ <<"baccd">> = iolist_to_binary(re:replace("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})","ICMQ\\1pRu",[global])),
+ <<"eUfAADRbc">> = iolist_to_binary(re:replace("Abc","[^a]","\\1\\1e\\1Uf&&\\1DR",[])),
+ <<"eUfAADReUfbbDReUfccDR">> = iolist_to_binary(re:replace("Abc","[^a]","\\1\\1e\\1Uf&&\\1DR",[global])),
+ <<"AbGc">> = iolist_to_binary(re:replace("Abc","[^a]","\\1&G\\1",[caseless])),
+ <<"AbGcG">> = iolist_to_binary(re:replace("Abc","[^a]","\\1&G\\1",[caseless,
+ global])),
+ <<"AAAGAAAIXPHIaAbc">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","&G&I\\1XPHI\\1",[])),
+ <<"AAAGAAAIXPHIaAbcGAbcIXPHI">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","&G&I\\1XPHI\\1",[global])),
+ <<"AAAaAIxSfS">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","IxSf\\1S",[caseless])),
+ <<"AAAaAIxSfS">> = iolist_to_binary(re:replace("AAAaAbc","[^a]+","IxSf\\1S",[caseless,
+ global])),
+ <<"AfTCbbb
+cccEbbb
+cccfDUfwWtHuS">> = iolist_to_binary(re:replace("bbb
+ccc","[^a]+","AfTC&E&fDUfwWtH\\1uS",[])),
+ <<"AfTCbbb
+cccEbbb
+cccfDUfwWtHuS">> = iolist_to_binary(re:replace("bbb
+ccc","[^a]+","AfTC&E&fDUfwWtH\\1uS",[global])),
+ <<"abUUudTcI">> = iolist_to_binary(re:replace("abc","[^k]$","UUud\\1TcI",[])),
+ <<"abUUudTcI">> = iolist_to_binary(re:replace("abc","[^k]$","UUud\\1TcI",[global])),
+ <<"*** FailerAiOYV">> = iolist_to_binary(re:replace("*** Failers","[^k]$","AiOYV",[])),
+ <<"*** FailerAiOYV">> = iolist_to_binary(re:replace("*** Failers","[^k]$","AiOYV",[global])),
+ <<"abk">> = iolist_to_binary(re:replace("abk","[^k]$","UV&w&TjG&\\1O\\1m",[])),
+ <<"abk">> = iolist_to_binary(re:replace("abk","[^k]$","UV&w&TjG&\\1O\\1m",[global])),
+ <<"cabcH">> = iolist_to_binary(re:replace("abc","[^k]{2,3}$","\\1c&\\1H",[])),
+ <<"cabcH">> = iolist_to_binary(re:replace("abc","[^k]{2,3}$","\\1c&\\1H",[global])),
+ <<"kUyCfbcubJVf">> = iolist_to_binary(re:replace("kbc","[^k]{2,3}$","UyCf&\\1\\1ub\\1JVf",[])),
+ <<"kUyCfbcubJVf">> = iolist_to_binary(re:replace("kbc","[^k]{2,3}$","UyCf&\\1\\1ub\\1JVf",[global])),
+ <<"kgiGjY">> = iolist_to_binary(re:replace("kabc","[^k]{2,3}$","giGj\\1\\1\\1Y",[])),
+ <<"kgiGjY">> = iolist_to_binary(re:replace("kabc","[^k]{2,3}$","giGj\\1\\1\\1Y",[global])),
+ <<"*** FailWjNDersauWgsT">> = iolist_to_binary(re:replace("*** Failers","[^k]{2,3}$","WjND&auWgsT",[])),
+ <<"*** FailWjNDersauWgsT">> = iolist_to_binary(re:replace("*** Failers","[^k]{2,3}$","WjND&auWgsT",[global])),
+ <<"abk">> = iolist_to_binary(re:replace("abk","[^k]{2,3}$","Gu\\1",[])),
+ <<"abk">> = iolist_to_binary(re:replace("abk","[^k]{2,3}$","Gu\\1",[global])),
+ <<"akb">> = iolist_to_binary(re:replace("akb","[^k]{2,3}$","a&Wrx\\1hniTRTJRP\\1",[])),
+ <<"akb">> = iolist_to_binary(re:replace("akb","[^k]{2,3}$","a&Wrx\\1hniTRTJRP\\1",[global])),
+ <<"akk">> = iolist_to_binary(re:replace("akk","[^k]{2,3}$","AkLa&fhMYWpv",[])),
+ <<"akk">> = iolist_to_binary(re:replace("akk","[^k]{2,3}$","AkLa&fhMYWpv",[global])),
+ <<"12345678.b.c.d">> = iolist_to_binary(re:replace("12345678.b.c.d","^\\d{8,}\\@.+[^k]$","HDxYDn",[])),
+ <<"12345678.b.c.d">> = iolist_to_binary(re:replace("12345678.b.c.d","^\\d{8,}\\@.+[^k]$","HDxYDn",[global])),
+ <<"123456789.y.z">> = iolist_to_binary(re:replace("123456789.y.z","^\\d{8,}\\@.+[^k]$","VU\\1D",[])),
+ <<"123456789.y.z">> = iolist_to_binary(re:replace("123456789.y.z","^\\d{8,}\\@.+[^k]$","VU\\1D",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8,}\\@.+[^k]$","GeBqm\\1Dmbs&G\\1vR",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\d{8,}\\@.+[^k]$","GeBqm\\1Dmbs&G\\1vR",[global])),
+ <<"12345678.y.uk">> = iolist_to_binary(re:replace("12345678.y.uk","^\\d{8,}\\@.+[^k]$","a&VS\\1&BvR",[])),
+ <<"12345678.y.uk">> = iolist_to_binary(re:replace("12345678.y.uk","^\\d{8,}\\@.+[^k]$","a&VS\\1&BvR",[global])),
+ <<"1234567.b.c.d">> = iolist_to_binary(re:replace("1234567.b.c.d","^\\d{8,}\\@.+[^k]$","A&Ex&\\1\\1M\\1",[])),
+ <<"1234567.b.c.d">> = iolist_to_binary(re:replace("1234567.b.c.d","^\\d{8,}\\@.+[^k]$","A&Ex&\\1\\1M\\1",[global])),
+ <<"UNaaaaaaaaaASae">> = iolist_to_binary(re:replace("aaaaaaaaa","(a)\\1{8,}","UN&AS\\1e",[])),
+ <<"UNaaaaaaaaaASae">> = iolist_to_binary(re:replace("aaaaaaaaa","(a)\\1{8,}","UN&AS\\1e",[global])),
+ <<"tceAbivVhQav">> = iolist_to_binary(re:replace("aaaaaaaaaa","(a)\\1{8,}","tceAbivVhQ\\1v",[])),
+ <<"tceAbivVhQav">> = iolist_to_binary(re:replace("aaaaaaaaaa","(a)\\1{8,}","tceAbivVhQ\\1v",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a)\\1{8,}","&\\1CR\\1G\\1lXwnVv",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a)\\1{8,}","&\\1CR\\1G\\1lXwnVv",[global])),
+ <<"aaaaaaa">> = iolist_to_binary(re:replace("aaaaaaa","(a)\\1{8,}","\\1okyxc\\1yX\\1vEJ&&",[])),
+ <<"aaaaaaa">> = iolist_to_binary(re:replace("aaaaaaa","(a)\\1{8,}","\\1okyxc\\1yX\\1vEJ&&",[global])),
+ <<"aaaaXxrcd">> = iolist_to_binary(re:replace("aaaabcd","[^a]","Xxr",[])),
+ <<"aaaaXxrXxrXxr">> = iolist_to_binary(re:replace("aaaabcd","[^a]","Xxr",[global])),
+ <<"aaarLbBCUOMivTWabcd">> = iolist_to_binary(re:replace("aaAabcd","[^a]","arLbBC\\1UOMivTW",[])),
+ <<"aaarLbBCUOMivTWaarLbBCUOMivTWarLbBCUOMivTWarLbBCUOMivTW">> = iolist_to_binary(re:replace("aaAabcd","[^a]","arLbBC\\1UOMivTW",[global])),
+ ok.
+run7() ->
+ <<"aaaapwMAbnNcRDBcd">> = iolist_to_binary(re:replace("aaaabcd","[^a]","pwMA&\\1n\\1NcRDB",[caseless])),
+ <<"aaaapwMAbnNcRDBpwMAcnNcRDBpwMAdnNcRDB">> = iolist_to_binary(re:replace("aaaabcd","[^a]","pwMA&\\1n\\1NcRDB",[caseless,
+ global])),
+ <<"aaAaUjWwoTQoHtojaVMGDcd">> = iolist_to_binary(re:replace("aaAabcd","[^a]","UjWwoTQoHtoja\\1\\1VMGD\\1",[caseless])),
+ <<"aaAaUjWwoTQoHtojaVMGDUjWwoTQoHtojaVMGDUjWwoTQoHtojaVMGD">> = iolist_to_binary(re:replace("aaAabcd","[^a]","UjWwoTQoHtoja\\1\\1VMGD\\1",[caseless,
+ global])),
+ <<"aaaapmJHbuyrGSgPWcd">> = iolist_to_binary(re:replace("aaaabcd","[^az]","pmJH&uyr\\1GSgPW",[])),
+ <<"aaaapmJHbuyrGSgPWpmJHcuyrGSgPWpmJHduyrGSgPW">> = iolist_to_binary(re:replace("aaaabcd","[^az]","pmJH&uyr\\1GSgPW",[global])),
+ <<"aaYcjbFRuBabcd">> = iolist_to_binary(re:replace("aaAabcd","[^az]","Y\\1cjbFRu\\1B",[])),
+ <<"aaYcjbFRuBaYcjbFRuBYcjbFRuBYcjbFRuB">> = iolist_to_binary(re:replace("aaAabcd","[^az]","Y\\1cjbFRu\\1B",[global])),
+ <<"aaaaBbjBVQSSpboacd">> = iolist_to_binary(re:replace("aaaabcd","[^az]","\\1B&jB\\1VQSSp&\\1\\1o\\1a",[caseless])),
+ <<"aaaaBbjBVQSSpboaBcjBVQSSpcoaBdjBVQSSpdoa">> = iolist_to_binary(re:replace("aaaabcd","[^az]","\\1B&jB\\1VQSSp&\\1\\1o\\1a",[caseless,
+ global])),
+ <<"aaAaibNcd">> = iolist_to_binary(re:replace("aaAabcd","[^az]","i&N",[caseless])),
+ <<"aaAaibNicNidN">> = iolist_to_binary(re:replace("aaAabcd","[^az]","i&N",[caseless,
+ global])),
+ <<"xxxxxxxxxxxyxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL","y",[])),
+ <<"xxxxxxxxxxxyxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL","y",[global])),
+ <<"xxxxxxxxxxxPSTAIREISLLQxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL","&Q",[])),
+ <<"xxxxxxxxxxxPSTAIREISLLQxxxxxxxxx">> = iolist_to_binary(re:replace("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL","&Q",[global])),
+ <<"1uJmu.23V.23UHIOGab">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d[1-9]?)\\d+","uJmu\\1V\\1UHIOGab",[])),
+ <<"1uJmu.23V.23UHIOGab">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d[1-9]?)\\d+","uJmu\\1V\\1UHIOGab",[global])),
+ <<"1DI.875.875000282NK.875000282.875j">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d[1-9]?)\\d+","DI\\1&NK&\\1j",[])),
+ <<"1DI.875.875000282NK.875000282.875j">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d[1-9]?)\\d+","DI\\1&NK&\\1j",[global])),
+ <<"1L.235.23HWQNY.23KfHhq.235.23ggY">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d[1-9]?)\\d+","L&\\1HWQNY\\1KfHhq&\\1ggY",[])),
+ <<"1L.235.23HWQNY.23KfHhq.235.23ggY">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d[1-9]?)\\d+","L&\\1HWQNY\\1KfHhq&\\1ggY",[global])),
+ <<"1DSE0003938">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))","DSE",[])),
+ <<"1DSE0003938">> = iolist_to_binary(re:replace("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))","DSE",[global])),
+ <<"1LaUySoWUFF.875.875.875000282">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))","LaUySoWUFF&&\\1",[])),
+ <<"1LaUySoWUFF.875.875.875000282">> = iolist_to_binary(re:replace("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))","LaUySoWUFF&&\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))","tRWNXmOIDc\\1&GGpOuk",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))","tRWNXmOIDc\\1&GGpOuk",[global])),
+ <<"1.235">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))","lYmo&PAOYv",[])),
+ <<"1.235">> = iolist_to_binary(re:replace("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))","lYmo&PAOYv",[global])),
+ <<"reSOwDabTAGPdSa">> = iolist_to_binary(re:replace("ab","a(?)b","reSOwD\\1&TAGPdSa",[])),
+ <<"reSOwDabTAGPdSa">> = iolist_to_binary(re:replace("ab","a(?)b","reSOwD\\1&TAGPdSa",[global])),
+ <<"Food is on the OvbQHtTuN">> = iolist_to_binary(re:replace("Food is on the foo table","\\b(foo)\\s+(\\w+)","OvbQHtTuN",[caseless])),
+ <<"Food is on the OvbQHtTuN">> = iolist_to_binary(re:replace("Food is on the foo table","\\b(foo)\\s+(\\w+)","OvbQHtTuN",[caseless,
+ global])),
+ <<"The jd is under the bar in the d is under the bar in the food is under the bar in the barRfood is under the bar in the barfood is under the bar in the barjESIDd is under the bar in the GWBDn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*)bar","j\\1\\1&R&&jESID\\1GWBD",[])),
+ <<"The jd is under the bar in the d is under the bar in the food is under the bar in the barRfood is under the bar in the barfood is under the bar in the barjESIDd is under the bar in the GWBDn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*)bar","j\\1\\1&R&&jESID\\1GWBD",[global])),
+ <<"The Mtfood is under the bard is under the sCjcC in the barn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*?)bar","Mt&\\1sCjcC",[])),
+ <<"The Mtfood is under the bard is under the sCjcC in the barn.">> = iolist_to_binary(re:replace("The food is under the bar in the barn.","foo(.*?)bar","Mt&\\1sCjcC",[global])),
+ <<"II have 2 numbers: 53147sQEJI have 2 numbers: 53147I have 2 numbers: 53147QI have 2 numbers: 53147I have 2 numbers: 53147Y">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d*)","I&sQEJ\\1\\1Q\\1\\1Y",[])),
+ <<"II have 2 numbers: 53147sQEJI have 2 numbers: 53147I have 2 numbers: 53147QI have 2 numbers: 53147I have 2 numbers: 53147YIsQEJQY">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d*)","I&sQEJ\\1\\1Q\\1\\1Y",[global])),
+ <<"BjeLtTBnKKfmuI have 2 numbers: 53147Q">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)","BjeLtTBnKKfmu&Q",[])),
+ <<"BjeLtTBnKKfmuI have 2 numbers: 53147Q">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)","BjeLtTBnKKfmu&Q",[global])),
+ <<"XjUoIVWVCosccRPCI have 2 numbers: 53147">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d*)","XjUoIVW\\1VCosccRPC&&",[])),
+ <<"XjUoIVWVCosccRPCXjUoIVWIVCosccRPCIIXjUoIVWVCosccRPCXjUoIVW VCosccRPC XjUoIVWVCosccRPCXjUoIVWhVCosccRPChhXjUoIVWVCosccRPCXjUoIVWaVCosccRPCaaXjUoIVWVCosccRPCXjUoIVWvVCosccRPCvvXjUoIVWVCosccRPCXjUoIVWeVCosccRPCeeXjUoIVWVCosccRPCXjUoIVW VCosccRPC 2 2XjUoIVWVCosccRPCXjUoIVW VCosccRPC XjUoIVWVCosccRPCXjUoIVWnVCosccRPCnnXjUoIVWVCosccRPCXjUoIVWuVCosccRPCuuXjUoIVWVCosccRPCXjUoIVWmVCosccRPCmmXjUoIVWVCosccRPCXjUoIVWbVCosccRPCbbXjUoIVWVCosccRPCXjUoIVWeVCosccRPCeeXjUoIVWVCosccRPCXjUoIVWrVCosccRPCrrXjUoIVWVCosccRPCXjUoIVWsVCosccRPCssXjUoIVWVCosccRPCXjUoIVW:VCosccRPC::XjUoIVWVCosccRPCXjUoIVW VCosccRPC 53147 53147XjUoIVWVCosccRPC">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d*)","XjUoIVW\\1VCosccRPC&&",[global])),
+ <<"LnetbRUI have woRN numbers: 53147">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)","LnetbRU\\1woRN",[])),
+ <<"LnetbRUI have woRNLnetbRU numbers: woRN">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)","LnetbRU\\1woRN",[global])),
+ <<"dD">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)$","dD",[])),
+ <<"dD">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)(\\d+)$","dD",[global])),
+ <<"I have 2 numbers: vpu">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)$","\\1vpu",[])),
+ <<"I have 2 numbers: vpu">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*?)(\\d+)$","\\1vpu",[global])),
+ <<"rEcQnOiThojYmI have 2 numbers: ysnN">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)\\b(\\d+)$","rEcQnOiThojYm\\1ysnN",[])),
+ <<"rEcQnOiThojYmI have 2 numbers: ysnN">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*)\\b(\\d+)$","rEcQnOiThojYm\\1ysnN",[global])),
+ <<"DI have 2 numbers: 53147WrwmlgEQLiI have 2 numbers: 53147NE">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*\\D)(\\d+)$","D&WrwmlgEQLi&NE",[])),
+ <<"DI have 2 numbers: 53147WrwmlgEQLiI have 2 numbers: 53147NE">> = iolist_to_binary(re:replace("I have 2 numbers: 53147","(.*\\D)(\\d+)$","D&WrwmlgEQLi&NE",[global])),
+ ok.
+run8() ->
+ <<"ABcsqUeQdAAByYxNC123">> = iolist_to_binary(re:replace("ABC123","^\\D*(?!123)","&csq\\1UeQdA&yYxN",[])),
+ <<"ABcsqUeQdAAByYxNC123">> = iolist_to_binary(re:replace("ABC123","^\\D*(?!123)","&csq\\1UeQdA&yYxN",[global])),
+ <<"KABCABCBP445">> = iolist_to_binary(re:replace("ABC445","^(\\D*)(?=\\d)(?!123)","K\\1&BP",[])),
+ <<"KABCABCBP445">> = iolist_to_binary(re:replace("ABC445","^(\\D*)(?=\\d)(?!123)","K\\1&BP",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","kBiY&gp\\1BUO\\1l",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\D*)(?=\\d)(?!123)","kBiY&gp\\1BUO\\1l",[global])),
+ <<"ABC123">> = iolist_to_binary(re:replace("ABC123","^(\\D*)(?=\\d)(?!123)","\\1YYe",[])),
+ <<"ABC123">> = iolist_to_binary(re:replace("ABC123","^(\\D*)(?=\\d)(?!123)","\\1YYe",[global])),
+ <<"W46]pbAIEqJRW46]W46]cNuYW46]789">> = iolist_to_binary(re:replace("W46]789","^[W-]46]","&pbAIEqJ\\1R&&cNuY&",[])),
+ <<"W46]pbAIEqJRW46]W46]cNuYW46]789">> = iolist_to_binary(re:replace("W46]789","^[W-]46]","&pbAIEqJ\\1R&&cNuY&",[global])),
+ <<"AXCFhT-46]LP-46]gILH-46]rA789">> = iolist_to_binary(re:replace("-46]789","^[W-]46]","AXCFhT&LP&gIL\\1H&rA",[])),
+ <<"AXCFhT-46]LP-46]gILH-46]rA789">> = iolist_to_binary(re:replace("-46]789","^[W-]46]","AXCFhT&LP&gIL\\1H&rA",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-]46]","ke&s",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-]46]","ke&s",[global])),
+ <<"Wall">> = iolist_to_binary(re:replace("Wall","^[W-]46]","\\1C\\1VS&grCoMvM\\1",[])),
+ <<"Wall">> = iolist_to_binary(re:replace("Wall","^[W-]46]","\\1C\\1VS&grCoMvM\\1",[global])),
+ <<"Zebra">> = iolist_to_binary(re:replace("Zebra","^[W-]46]","G\\1\\1",[])),
+ <<"Zebra">> = iolist_to_binary(re:replace("Zebra","^[W-]46]","G\\1\\1",[global])),
+ <<"42">> = iolist_to_binary(re:replace("42","^[W-]46]","k\\1p&\\1&E&OlmU",[])),
+ <<"42">> = iolist_to_binary(re:replace("42","^[W-]46]","k\\1p&\\1&E&OlmU",[global])),
+ <<"[abcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-]46]","BHuM&QWt&V&Fw&R\\1",[])),
+ <<"[abcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-]46]","BHuM&QWt&V&Fw&R\\1",[global])),
+ <<"]abcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-]46]","bm\\1kBng&&HJv",[])),
+ <<"]abcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-]46]","bm\\1kBng&&HJv",[global])),
+ <<"YiVQVvgWY46]789">> = iolist_to_binary(re:replace("W46]789","^[W-\\]46]","Yi\\1VQVv\\1g&Y",[])),
+ <<"YiVQVvgWY46]789">> = iolist_to_binary(re:replace("W46]789","^[W-\\]46]","Yi\\1VQVv\\1g&Y",[global])),
+ <<"KJall">> = iolist_to_binary(re:replace("Wall","^[W-\\]46]","K\\1J",[])),
+ <<"KJall">> = iolist_to_binary(re:replace("Wall","^[W-\\]46]","K\\1J",[global])),
+ <<"ghebra">> = iolist_to_binary(re:replace("Zebra","^[W-\\]46]","gh",[])),
+ <<"ghebra">> = iolist_to_binary(re:replace("Zebra","^[W-\\]46]","gh",[global])),
+ <<"TQpylophone">> = iolist_to_binary(re:replace("Xylophone","^[W-\\]46]","TQp\\1",[])),
+ <<"TQpylophone">> = iolist_to_binary(re:replace("Xylophone","^[W-\\]46]","TQp\\1",[global])),
+ <<"4yTdgOXvDDmWf2">> = iolist_to_binary(re:replace("42","^[W-\\]46]","&y\\1TdgOXvDDm\\1Wf",[])),
+ <<"4yTdgOXvDDmWf2">> = iolist_to_binary(re:replace("42","^[W-\\]46]","&y\\1TdgOXvDDm\\1Wf",[global])),
+ <<"[OVexyXabcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-\\]46]","&OVexyX",[])),
+ <<"[OVexyXabcd]">> = iolist_to_binary(re:replace("[abcd]","^[W-\\]46]","&OVexyX",[global])),
+ <<"HparACpuFCvG]abcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-\\]46]","HparACp\\1uFCvG&",[])),
+ <<"HparACpuFCvG]abcd[">> = iolist_to_binary(re:replace("]abcd[","^[W-\\]46]","HparACp\\1uFCvG&",[global])),
+ <<"HQnantyI\\wNbackslash">> = iolist_to_binary(re:replace("\\backslash","^[W-\\]46]","HQnantyI&wN",[])),
+ <<"HQnantyI\\wNbackslash">> = iolist_to_binary(re:replace("\\backslash","^[W-\\]46]","HQnantyI&wN",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-\\]46]","AMd&J\\1SokjY\\1\\1nK",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[W-\\]46]","AMd&J\\1SokjY\\1\\1nK",[global])),
+ <<"-46]789">> = iolist_to_binary(re:replace("-46]789","^[W-\\]46]","RyY&cCj",[])),
+ <<"-46]789">> = iolist_to_binary(re:replace("-46]789","^[W-\\]46]","RyY&cCj",[global])),
+ <<"well">> = iolist_to_binary(re:replace("well","^[W-\\]46]","XPRm\\1VTejwB",[])),
+ <<"well">> = iolist_to_binary(re:replace("well","^[W-\\]46]","XPRm\\1VTejwB",[global])),
+ <<"oroGlaQAqnbI">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword","oroGlaQAqnbI",[])),
+ <<"oroGlaQAqnbI">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword","oroGlaQAqnbI",[global])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword","&E\\1",[])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword","&E\\1",[global])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword","b\\1sLq\\1\\1P",[])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword","b\\1sLq\\1\\1P",[global])),
+ <<"fPbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,0}","fP",[])),
+ <<"fPbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,0}","fP",[global])),
+ <<"jFVHnjWvnETRabc">> = iolist_to_binary(re:replace("abc","^(a){0,0}","jFVHn&j&WvnETR",[])),
+ <<"jFVHnjWvnETRabc">> = iolist_to_binary(re:replace("abc","^(a){0,0}","jFVHn&j&WvnETR",[global])),
+ <<"NDaab">> = iolist_to_binary(re:replace("aab","^(a){0,0}","ND",[])),
+ <<"NDaab">> = iolist_to_binary(re:replace("aab","^(a){0,0}","ND",[global])),
+ <<"RNIIKIcNvfeSEvtOPRObcd">> = iolist_to_binary(re:replace("bcd","^(a){0,1}","RNIIKIcNvfeSEvtO\\1PRO",[])),
+ <<"RNIIKIcNvfeSEvtOPRObcd">> = iolist_to_binary(re:replace("bcd","^(a){0,1}","RNIIKIcNvfeSEvtO\\1PRO",[global])),
+ <<"dDaaaaCaSvbc">> = iolist_to_binary(re:replace("abc","^(a){0,1}","dD&&&&C&Sv",[])),
+ <<"dDaaaaCaSvbc">> = iolist_to_binary(re:replace("abc","^(a){0,1}","dD&&&&C&Sv",[global])),
+ <<"cBbGtgJQnrojHMab">> = iolist_to_binary(re:replace("aab","^(a){0,1}","cBbGtgJQnrojHM",[])),
+ <<"cBbGtgJQnrojHMab">> = iolist_to_binary(re:replace("aab","^(a){0,1}","cBbGtgJQnrojHM",[global])),
+ <<"Mhbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,2}","\\1&M\\1h",[])),
+ <<"Mhbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,2}","\\1&M\\1h",[global])),
+ <<"aauJmduMieraXgHfaobc">> = iolist_to_binary(re:replace("abc","^(a){0,2}","&&uJmduMier\\1XgHf&o",[])),
+ <<"aauJmduMieraXgHfaobc">> = iolist_to_binary(re:replace("abc","^(a){0,2}","&&uJmduMier\\1XgHf&o",[global])),
+ <<"aaunb">> = iolist_to_binary(re:replace("aab","^(a){0,2}","&un",[])),
+ <<"aaunb">> = iolist_to_binary(re:replace("aab","^(a){0,2}","&un",[global])),
+ <<"osculgsNbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,3}","osculg&s&N&",[])),
+ <<"osculgsNbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,3}","osculg&s&N&",[global])),
+ <<"gerhgaeJRbnhIdabc">> = iolist_to_binary(re:replace("abc","^(a){0,3}","gerhg&eJRbnhId&",[])),
+ <<"gerhgaeJRbnhIdabc">> = iolist_to_binary(re:replace("abc","^(a){0,3}","gerhg&eJRbnhId&",[global])),
+ <<"emmqaaaesYb">> = iolist_to_binary(re:replace("aab","^(a){0,3}","emmq&\\1esY",[])),
+ <<"emmqaaaesYb">> = iolist_to_binary(re:replace("aab","^(a){0,3}","emmq&\\1esY",[global])),
+ <<"Rfafau">> = iolist_to_binary(re:replace("aaa","^(a){0,3}","Rf\\1f\\1u",[])),
+ <<"Rfafau">> = iolist_to_binary(re:replace("aaa","^(a){0,3}","Rf\\1f\\1u",[global])),
+ <<"Bbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,}","B",[])),
+ <<"Bbcd">> = iolist_to_binary(re:replace("bcd","^(a){0,}","B",[global])),
+ <<"aOlCbc">> = iolist_to_binary(re:replace("abc","^(a){0,}","\\1OlC",[])),
+ <<"aOlCbc">> = iolist_to_binary(re:replace("abc","^(a){0,}","\\1OlC",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("aab","^(a){0,}","\\1",[])),
+ <<"ab">> = iolist_to_binary(re:replace("aab","^(a){0,}","\\1",[global])),
+ <<"ECTqSuTCy">> = iolist_to_binary(re:replace("aaa","^(a){0,}","ECTqSuTCy",[])),
+ <<"ECTqSuTCy">> = iolist_to_binary(re:replace("aaa","^(a){0,}","ECTqSuTCy",[global])),
+ <<"WQhDeFb">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){0,}","WQhDeFb",[])),
+ <<"WQhDeFb">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){0,}","WQhDeFb",[global])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,1}","k&&&pAWV&FHAQeCpc",[])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,1}","k&&&pAWV&FHAQeCpc",[global])),
+ <<"rorUbgMQXaSaYGambc">> = iolist_to_binary(re:replace("abc","^(a){1,1}","rorUbgMQX&S\\1YG\\1m",[])),
+ <<"rorUbgMQXaSaYGambc">> = iolist_to_binary(re:replace("abc","^(a){1,1}","rorUbgMQX&S\\1YG\\1m",[global])),
+ <<"aNaaab">> = iolist_to_binary(re:replace("aab","^(a){1,1}","aN&\\1",[])),
+ <<"aNaaab">> = iolist_to_binary(re:replace("aab","^(a){1,1}","aN&\\1",[global])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,2}","j\\1w\\1UDgbH",[])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,2}","j\\1w\\1UDgbH",[global])),
+ <<"kNacaAaaHgaaWTaWaubc">> = iolist_to_binary(re:replace("abc","^(a){1,2}","kN\\1c\\1Aa&Hg\\1&WT&W&u",[])),
+ <<"kNacaAaaHgaaWTaWaubc">> = iolist_to_binary(re:replace("abc","^(a){1,2}","kN\\1c\\1Aa&Hg\\1&WT&W&u",[global])),
+ <<"AjaaammeJIb">> = iolist_to_binary(re:replace("aab","^(a){1,2}","Aj&\\1mmeJI",[])),
+ <<"AjaaammeJIb">> = iolist_to_binary(re:replace("aab","^(a){1,2}","Aj&\\1mmeJI",[global])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,3}","&&TTjl\\1nt",[])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,3}","&&TTjl\\1nt",[global])),
+ <<"UeMuRbc">> = iolist_to_binary(re:replace("abc","^(a){1,3}","UeMuR",[])),
+ <<"UeMuRbc">> = iolist_to_binary(re:replace("abc","^(a){1,3}","UeMuR",[global])),
+ <<"vFaaaSDjb">> = iolist_to_binary(re:replace("aab","^(a){1,3}","vF\\1&SDj",[])),
+ <<"vFaaaSDjb">> = iolist_to_binary(re:replace("aab","^(a){1,3}","vF\\1&SDj",[global])),
+ <<"CNwXaaa">> = iolist_to_binary(re:replace("aaa","^(a){1,3}","CNwX&",[])),
+ <<"CNwXaaa">> = iolist_to_binary(re:replace("aaa","^(a){1,3}","CNwX&",[global])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,}","E\\1eK",[])),
+ <<"bcd">> = iolist_to_binary(re:replace("bcd","^(a){1,}","E\\1eK",[global])),
+ <<"IWaNYMwyOaJnfoPPMbc">> = iolist_to_binary(re:replace("abc","^(a){1,}","IW&NYMwyO\\1JnfoPPM",[])),
+ <<"IWaNYMwyOaJnfoPPMbc">> = iolist_to_binary(re:replace("abc","^(a){1,}","IW&NYMwyO\\1JnfoPPM",[global])),
+ <<"SaaafHrCab">> = iolist_to_binary(re:replace("aab","^(a){1,}","S&\\1fHrCa",[])),
+ <<"SaaafHrCab">> = iolist_to_binary(re:replace("aab","^(a){1,}","S&\\1fHrCa",[global])),
+ <<"MaYaaaRaAXUO">> = iolist_to_binary(re:replace("aaa","^(a){1,}","M\\1Y&R\\1AXUO",[])),
+ <<"MaYaaaRaAXUO">> = iolist_to_binary(re:replace("aaa","^(a){1,}","M\\1Y&R\\1AXUO",[global])),
+ <<"BsHaS">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){1,}","BsH\\1S",[])),
+ <<"BsHaS">> = iolist_to_binary(re:replace("aaaaaaaa","^(a){1,}","BsH\\1S",[global])),
+ <<"borfle
+nJEnJAvwAybib.gifXvq
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","&s",[])),
-?line <<"borfle
-bib.gifs
+no",".*\\.gif","nJEnJAvwAy&Xvq\\1",[])),
+ <<"borfle
+nJEnJAvwAybib.gifXvq
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","&s",[global])),
-?line <<"borfle
-BD
+no",".*\\.gif","nJEnJAvwAy&Xvq\\1",[global])),
+ <<"borfle
+Nmmq
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".{0,}\\.gif","BD",[])),
-?line <<"borfle
-BD
+no",".{0,}\\.gif","Nmmq",[])),
+ <<"borfle
+Nmmq
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".{0,}\\.gif","BD",[global])),
-?line <<"borfle
-vDNsbib.gif
+no",".{0,}\\.gif","Nmmq",[global])),
+ <<"borfle
+BVKBwIDwbib.gifjgEqWxbib.gifEW
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","vDNs&",[multiline])),
-?line <<"borfle
-vDNsbib.gif
+no",".*\\.gif","BVKBwIDw&jgEqW\\1x&EW",[multiline])),
+ <<"borfle
+BVKBwIDwbib.gifjgEqWxbib.gifEW
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","vDNs&",[multiline,global])),
-?line <<"dPgeQVbGVD
+no",".*\\.gif","BVKBwIDw&jgEqW\\1x&EW",[multiline,global])),
+ <<"borfle
+bib.giffF
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","dPge\\1QVbGVD",[dotall])),
-?line <<"dPgeQVbGVD
+no",".*\\.gif","&fF",[dotall])),
+ <<"borfle
+bib.giffF
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","dPge\\1QVbGVD",[dotall,global])),
-?line <<"SGyevborfle
-bib.gifCborfle
-bib.gifWUWborfle
-bib.gifHd
+no",".*\\.gif","&fF",[dotall,global])),
+ ok.
+run9() ->
+ <<"ARdLYmTSnXAA
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","SGyev&C\\1&\\1\\1WUW&Hd\\1",[multiline,dotall])),
-?line <<"SGyevborfle
-bib.gifCborfle
-bib.gifWUWborfle
-bib.gifHd
+no",".*\\.gif","AR\\1dLYmTSnXAA",[multiline,dotall])),
+ <<"ARdLYmTSnXAA
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*\\.gif","SGyev&C\\1&\\1\\1WUW&Hd\\1",[multiline,dotall,
- global])),
-?line <<"borfle
+no",".*\\.gif","AR\\1dLYmTSnXAA",[multiline,dotall,global])),
+ <<"borfle
bib.gif
-BKNYIMcbaV">> = iolist_to_binary(re:replace("borfle
+anoc">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","BKNYIMcbaV",[])),
-?line <<"borfle
+no",".*$","a&c",[])),
+ <<"borfle
bib.gif
-BKNYIMcbaVBKNYIMcbaV">> = iolist_to_binary(re:replace("borfle
+anocac">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","BKNYIMcbaV",[global])),
-?line <<"borflevLMilNh
+no",".*$","a&c",[global])),
+ <<"fborfleDas
bib.gif
no">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","&vLM\\1ilNh\\1",[multiline])),
-?line <<"borflevLMilNhvLMilNh
-bib.gifvLMilNhvLMilNh
-novLMilNhvLMilNh">> = iolist_to_binary(re:replace("borfle
+no",".*$","f&Das",[multiline])),
+ <<"fborfleDasfDas
+fbib.gifDasfDas
+fnoDasfDas">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","&vLM\\1ilNh\\1",[multiline,global])),
-?line <<"borfle
+no",".*$","f&Das",[multiline,global])),
+ <<"eUveborfle
bib.gif
-noMtTxgborfle
+nopjBhborfle
bib.gif
-noXborfle
+noEXborfle
bib.gif
-noqKCRborfle
+nodborfle
bib.gif
-noRFb">> = iolist_to_binary(re:replace("borfle
+noiGXw">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","&MtTxg&X&qKCR&RFb",[dotall])),
-?line <<"borfle
+no",".*$","eUve&pjBh&EX&d&iGXw",[dotall])),
+ <<"eUveborfle
bib.gif
-noMtTxgborfle
+nopjBhborfle
bib.gif
-noXborfle
+noEXborfle
bib.gif
-noqKCRborfle
+nodborfle
bib.gif
-noRFbMtTxgXqKCRRFb">> = iolist_to_binary(re:replace("borfle
+noiGXweUvepjBhEXdiGXw">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","&MtTxg&X&qKCR&RFb",[dotall,global])),
-?line <<"rb">> = iolist_to_binary(re:replace("borfle
+no",".*$","eUve&pjBh&EX&d&iGXw",[dotall,global])),
+ <<"RIMAHborfle
bib.gif
-no",".*$","rb",[multiline,dotall])),
-?line <<"rbrb">> = iolist_to_binary(re:replace("borfle
+norborfle
bib.gif
-no",".*$","rb",[multiline,dotall,global])),
-?line <<"borfle
+no">> = iolist_to_binary(re:replace("borfle
bib.gif
-dTAVnoxiWSnoiuGHA">> = iolist_to_binary(re:replace("borfle
+no",".*$","R\\1IMAH&\\1r&",[multiline,dotall])),
+ <<"RIMAHborfle
bib.gif
-no",".*$","dTAV&xiWS&iuGH\\1A\\1",[])),
-?line <<"borfle
+norborfle
bib.gif
-dTAVnoxiWSnoiuGHAdTAVxiWSiuGHA">> = iolist_to_binary(re:replace("borfle
+noRIMAHr">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","dTAV&xiWS&iuGH\\1A\\1",[global])),
-?line <<"bcnFLv
+no",".*$","R\\1IMAH&\\1r&",[multiline,dotall,global])),
+ <<"borfle
bib.gif
-no">> = iolist_to_binary(re:replace("borfle
+IXHXnoNO">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","bc\\1nFLv",[multiline])),
-?line <<"bcnFLvbcnFLv
-bcnFLvbcnFLv
-bcnFLvbcnFLv">> = iolist_to_binary(re:replace("borfle
+no",".*$","IXHX&NO",[])),
+ <<"borfle
bib.gif
-no",".*$","bc\\1nFLv",[multiline,global])),
-?line <<"LIQosdWborfle
+IXHXnoNOIXHXNO">> = iolist_to_binary(re:replace("borfle
bib.gif
-nogcg">> = iolist_to_binary(re:replace("borfle
+no",".*$","IXHX&NO",[global])),
+ <<"iGCnBCJborfleUborflenLutTYS
bib.gif
-no",".*$","L\\1IQosd\\1W&gcg",[dotall])),
-?line <<"LIQosdWborfle
+no">> = iolist_to_binary(re:replace("borfle
bib.gif
-nogcgLIQosdWgcg">> = iolist_to_binary(re:replace("borfle
+no",".*$","\\1iGCnBC\\1J&U&nL\\1utTYS",[multiline])),
+ <<"iGCnBCJborfleUborflenLutTYSiGCnBCJUnLutTYS
+iGCnBCJbib.gifUbib.gifnLutTYSiGCnBCJUnLutTYS
+iGCnBCJnoUnonLutTYSiGCnBCJUnLutTYS">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","L\\1IQosd\\1W&gcg",[dotall,global])),
-?line <<"EcPBKTVborfle
+no",".*$","\\1iGCnBC\\1J&U&nL\\1utTYS",[multiline,global])),
+ <<"dkaborfle
bib.gif
-noPrborfle
+nocxpCSRwborfle
bib.gif
-noXxQSc">> = iolist_to_binary(re:replace("borfle
+noJQHcx">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","EcPBKTV&Pr&XxQSc",[multiline,dotall])),
-?line <<"EcPBKTVborfle
+no",".*$","dka&cxpCSRw&JQ\\1Hc\\1x",[dotall])),
+ <<"dkaborfle
bib.gif
-noPrborfle
+nocxpCSRwborfle
bib.gif
-noXxQScEcPBKTVPrXxQSc">> = iolist_to_binary(re:replace("borfle
+noJQHcxdkacxpCSRwJQHcx">> = iolist_to_binary(re:replace("borfle
bib.gif
-no",".*$","EcPBKTV&Pr&XxQSc",[multiline,dotall,global])),
-?line <<"abcde
-uhjjD1234XGTHcATIgH1234X1234XfbByz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","uhjjD&GTHcATIgH\\1\\1fbB",[])),
-?line <<"abcde
-uhjjD1234XGTHcATIgH1234X1234XfbByz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","uhjjD&GTHcATIgH\\1\\1fbB",[global])),
-?line <<"dbqarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","dbq",[])),
-?line <<"dbqarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","dbq",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","tdwOa\\1DQul",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","tdwOa\\1DQul",[global])),
-?line <<"abcde
-Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","j\\1&fFKu\\1tLJjDOmjkU",[])),
-?line <<"abcde
-Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","j\\1&fFKu\\1tLJjDOmjkU",[global])),
-?line <<"abcde
-cKv1234XFUwb1234XTPoWrycn1234XO1234Xyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","cKv&FUwb&TPoWrycn&O&",[multiline])),
-?line <<"abcde
-cKv1234XFUwb1234XTPoWrycn1234XO1234Xyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","cKv&FUwb&TPoWrycn&O&",[multiline,global])),
-?line <<"FBHWgBBNiGBkIarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","F&HWgB\\1NiG\\1kI",[multiline])),
-?line <<"FBHWgBBNiGBkIarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","F&HWgB\\1NiG\\1kI",[multiline,
- global])),
-?line <<"abcde
-oArar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","oAr",[multiline])),
-?line <<"abcde
-oArar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","oAr",[multiline,global])),
-?line <<"abcde
-1234XpqJuWOcKJabcde
-1234XyXyvjQwPyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","\\1pqJuWOcKJ&yXyvjQwP",[dotall])),
-?line <<"abcde
-1234XpqJuWOcKJabcde
-1234XyXyvjQwPyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","\\1pqJuWOcKJ&yXyvjQwP",[dotall,global])),
-?line <<"BHBBBLbBBgBBoarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","BH\\1&&Lb&&g\\1&o",[dotall])),
-?line <<"BHBBBLbBBgBBoarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","BH\\1&&Lb&&g\\1&o",[dotall,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","&LH",[dotall])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","&LH",[dotall,
- global])),
-?line <<"abcde
+no",".*$","dka&cxpCSRw&JQ\\1Hc\\1x",[dotall,global])),
+ <<"tnQDxLEhTFjTiWwouU">> = iolist_to_binary(re:replace("borfle
+bib.gif
+no",".*$","tnQDxLEhTF\\1jTiWwouU",[multiline,dotall])),
+ <<"tnQDxLEhTFjTiWwouUtnQDxLEhTFjTiWwouU">> = iolist_to_binary(re:replace("borfle
+bib.gif
+no",".*$","tnQDxLEhTF\\1jTiWwouU",[multiline,dotall,global])),
+ <<"abcde
+fSiqVi1234Xw1234XWyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","fSiqVi&w\\1W",[])),
+ <<"abcde
+fSiqVi1234Xw1234XWyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","fSiqVi&w\\1W",[global])),
+ <<"apCVoPCVMeDBpBBarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","apCVoPCVMeD&p\\1&",[])),
+ <<"apCVoPCVMeDBpBBarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","apCVoPCVMeD&p\\1&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","FiTmKNSyXk",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","FiTmKNSyXk",[global])),
+ <<"abcde
Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","HvNOg&qrhICiO",[dotall])),
-?line <<"abcde
+Bar","(.*X|^B)","&",[])),
+ <<"abcde
Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","HvNOg&qrhICiO",[dotall,global])),
-?line <<"eabcde
+Bar","(.*X|^B)","&",[global])),
+ <<"abcde
+1234XY1234X1234X1234XiJfcfLjk1234Xyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","&Y\\1\\1\\1iJfcfLjk\\1",[multiline])),
+ <<"abcde
+1234XY1234X1234X1234XiJfcfLjk1234Xyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","&Y\\1\\1\\1iJfcfLjk\\1",[multiline,global])),
+ <<"BUrWBJarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","&UrW\\1J",[multiline])),
+ <<"BUrWBJarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","&UrW\\1J",[multiline,
+ global])),
+ <<"abcde
+vpiar">> = iolist_to_binary(re:replace("abcde
+Bar","(.*X|^B)","vpi",[multiline])),
+ <<"abcde
+vpiar">> = iolist_to_binary(re:replace("abcde
+Bar","(.*X|^B)","vpi",[multiline,global])),
+ <<"abcde
1234Xabcde
-1234XIRtabcde
1234Xabcde
-1234XCMGsyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","e\\1&IRt\\1\\1CMGs",[multiline,dotall])),
-?line <<"eabcde
+1234XOwvyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","\\1\\1&Owv",[dotall])),
+ <<"abcde
1234Xabcde
-1234XIRtabcde
1234Xabcde
-1234XCMGsyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(.*X|^B)","e\\1&IRt\\1\\1CMGs",[multiline,dotall,global])),
-?line <<"MBMpwYiMLarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","M\\1MpwYiML",[multiline,
- dotall])),
-?line <<"MBMpwYiMLarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","M\\1MpwYiML",[multiline,
- dotall,
- global])),
-?line <<"abcde
-SOfar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","SOf",[multiline,dotall])),
-?line <<"abcde
-SOfar">> = iolist_to_binary(re:replace("abcde
-Bar","(.*X|^B)","SOf",[multiline,dotall,global])),
-?line <<"Xabcde
-1234XIabcde
-1234XJyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(?s)(.*X|^B)","X\\1I\\1J",[])),
-?line <<"Xabcde
-1234XIabcde
-1234XJyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(?s)(.*X|^B)","X\\1I\\1J",[global])),
-?line <<"ckBBgDwBNcECcmswBGrarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s)(.*X|^B)","ck\\1&gDw\\1NcECcmsw\\1Gr",[])),
-?line <<"ckBBgDwBNcECcmswBGrarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s)(.*X|^B)","ck\\1&gDw\\1NcECcmsw\\1Gr",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s)(.*X|^B)","dC\\1SBGDJPgKye\\1iTO",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s)(.*X|^B)","dC\\1SBGDJPgKye\\1iTO",[global])),
-?line <<"abcde
+1234XOwvyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","\\1\\1&Owv",[dotall,global])),
+ <<"csBOSrLyBynarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","cs\\1OSrLy\\1yn",[dotall])),
+ <<"csBOSrLyBynarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","cs\\1OSrLy\\1yn",[dotall,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","\\1qVOKf\\1jqa",[dotall])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(.*X|^B)","\\1qVOKf\\1jqa",[dotall,
+ global])),
+ <<"abcde
Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(?s)(.*X|^B)","hL&HrGi&",[])),
-?line <<"abcde
+Bar","(.*X|^B)","p",[dotall])),
+ <<"abcde
Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(?s)(.*X|^B)","hL&HrGi&",[global])),
-?line <<"abcde
-1234Xabcde
-1234XBpOYYilckyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(?s:.*X|^B)","&&\\1BpOYYilck",[])),
-?line <<"abcde
-1234Xabcde
-1234XBpOYYilckyz">> = iolist_to_binary(re:replace("abcde
-1234Xyz","(?s:.*X|^B)","&&\\1BpOYYilck",[global])),
-?line <<"ThDpSQKkSSwHarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s:.*X|^B)","ThDpSQ\\1KkSSwH",[])),
-?line <<"ThDpSQKkSSwHarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s:.*X|^B)","ThDpSQ\\1KkSSwH",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s:.*X|^B)","H&KaW\\1iKok\\1x&gEh&",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s:.*X|^B)","H&KaW\\1iKok\\1x&gEh&",[global])),
-?line <<"abcde
+Bar","(.*X|^B)","p",[dotall,global])),
+ <<"YiHiyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","YiHi",[multiline,dotall])),
+ <<"YiHiyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(.*X|^B)","YiHi",[multiline,dotall,global])),
+ <<"DDQRgXBHBBSBcHarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","DDQRgXBH&&S\\1cH",[multiline,
+ dotall])),
+ <<"DDQRgXBHBBSBcHarFoo">> = iolist_to_binary(re:replace("BarFoo","(.*X|^B)","DDQRgXBH&&S\\1cH",[multiline,
+ dotall,
+ global])),
+ <<"abcde
+KTLNdCWtmar">> = iolist_to_binary(re:replace("abcde
+Bar","(.*X|^B)","KTLNdCWtm",[multiline,dotall])),
+ <<"abcde
+KTLNdCWtmar">> = iolist_to_binary(re:replace("abcde
+Bar","(.*X|^B)","KTLNdCWtm",[multiline,dotall,global])),
+ <<"UnqSIGfraCIjabcde
+1234Xlyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(?s)(.*X|^B)","UnqSIGfraCIj&l",[])),
+ <<"UnqSIGfraCIjabcde
+1234Xlyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(?s)(.*X|^B)","UnqSIGfraCIj&l",[global])),
+ <<"aDBarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s)(.*X|^B)","aDB",[])),
+ <<"aDBarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s)(.*X|^B)","aDB",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s)(.*X|^B)","hbfv",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s)(.*X|^B)","hbfv",[global])),
+ <<"abcde
Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(?s:.*X|^B)","DFJoEUQUCdLTM\\1ETp",[])),
-?line <<"abcde
+Bar","(?s)(.*X|^B)","&UWQV\\1&\\1\\1E",[])),
+ <<"abcde
Bar">> = iolist_to_binary(re:replace("abcde
-Bar","(?s:.*X|^B)","DFJoEUQUCdLTM\\1ETp",[global])),
-?line <<"**** Failers">> = iolist_to_binary(re:replace("**** Failers","^.*B","N&QUc\\1IX&",[])),
-?line <<"**** Failers">> = iolist_to_binary(re:replace("**** Failers","^.*B","N&QUc\\1IX&",[global])),
-?line <<"abc
-B">> = iolist_to_binary(re:replace("abc
-B","^.*B","XtHO\\1dFCGIat\\1\\1A\\1yj\\1",[])),
-?line <<"abc
-B">> = iolist_to_binary(re:replace("abc
-B","^.*B","XtHO\\1dFCGIat\\1\\1A\\1yj\\1",[global])),
-?line <<"yKkFabc
+Bar","(?s)(.*X|^B)","&UWQV\\1&\\1\\1E",[global])),
+ <<"KYpUjyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(?s:.*X|^B)","KY\\1\\1pUj\\1",[])),
+ <<"KYpUjyz">> = iolist_to_binary(re:replace("abcde
+1234Xyz","(?s:.*X|^B)","KY\\1\\1pUj\\1",[global])),
+ <<"BSkyfarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s:.*X|^B)","\\1BSk\\1y\\1\\1f",[])),
+ <<"BSkyfarFoo">> = iolist_to_binary(re:replace("BarFoo","(?s:.*X|^B)","\\1BSk\\1y\\1\\1f",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s:.*X|^B)","IG\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s:.*X|^B)","IG\\1",[global])),
+ <<"abcde
+Bar">> = iolist_to_binary(re:replace("abcde
+Bar","(?s:.*X|^B)","&OchEkLBdrDrxVm&",[])),
+ <<"abcde
+Bar">> = iolist_to_binary(re:replace("abcde
+Bar","(?s:.*X|^B)","&OchEkLBdrDrxVm&",[global])),
+ <<"**** Failers">> = iolist_to_binary(re:replace("**** Failers","^.*B","cYoDF\\1rwds&i&y&&XoFT",[])),
+ <<"**** Failers">> = iolist_to_binary(re:replace("**** Failers","^.*B","cYoDF\\1rwds&i&y&&XoFT",[global])),
+ <<"abc
B">> = iolist_to_binary(re:replace("abc
-B","(?s)^.*B","yKkF&",[])),
-?line <<"yKkFabc
+B","^.*B","gXmgvN\\1oh",[])),
+ <<"abc
B">> = iolist_to_binary(re:replace("abc
-B","(?s)^.*B","yKkF&",[global])),
-?line <<"abc
-AQ">> = iolist_to_binary(re:replace("abc
-B","(?m)^.*B","AQ",[])),
-?line <<"abc
-AQ">> = iolist_to_binary(re:replace("abc
-B","(?m)^.*B","AQ",[global])),
-?line <<"abc
-BDabc
-BNabc
-BxoUHHabc
-Bo">> = iolist_to_binary(re:replace("abc
-B","(?ms)^.*B","\\1&D&N&xoUHH&o",[])),
-?line <<"abc
-BDabc
-BNabc
-BxoUHHabc
-Bo">> = iolist_to_binary(re:replace("abc
-B","(?ms)^.*B","\\1&D&N&xoUHH&o",[global])),
-?line <<"abc
-GHgiVrjlVxqskBLR">> = iolist_to_binary(re:replace("abc
-B","(?ms)^B","GHgiVrj\\1lVxqsk&LR",[])),
-?line <<"abc
-GHgiVrjlVxqskBLR">> = iolist_to_binary(re:replace("abc
-B","(?ms)^B","GHgiVrj\\1lVxqsk&LR",[global])),
-?line <<"RBtqaBce">> = iolist_to_binary(re:replace("B","(?s)B$","R&tqaBce",[])),
-?line <<"RBtqaBce">> = iolist_to_binary(re:replace("B","(?s)B$","R&tqaBce",[global])),
-?line <<"kG">> = iolist_to_binary(re:replace("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]","kG",[])),
-?line <<"kG">> = iolist_to_binary(re:replace("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]","kG",[global])),
-?line <<"Tx">> = iolist_to_binary(re:replace("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d","Tx",[])),
-?line <<"Tx">> = iolist_to_binary(re:replace("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d","Tx",[global])),
-?line <<"xB">> = iolist_to_binary(re:replace("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]","xB",[])),
-?line <<"xB">> = iolist_to_binary(re:replace("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]","xB",[global])),
-?line <<"OpPIBabcabcabcabcDcxDvlIdSoa">> = iolist_to_binary(re:replace("abcabcabcabc","^[abc]{12}","OpPIB&DcxDvlIdSoa",[])),
-?line <<"OpPIBabcabcabcabcDcxDvlIdSoa">> = iolist_to_binary(re:replace("abcabcabcabc","^[abc]{12}","OpPIB&DcxDvlIdSoa",[global])),
-?line <<"LGEMfnjAabcabcabcabcuAotOabcabcabcabcs">> = iolist_to_binary(re:replace("abcabcabcabc","^[a-c]{12}","LGEMfnj\\1A&uAotO&s",[])),
-?line <<"LGEMfnjAabcabcabcabcuAotOabcabcabcabcs">> = iolist_to_binary(re:replace("abcabcabcabc","^[a-c]{12}","LGEMfnj\\1A&uAotO&s",[global])),
-?line <<"PNcwcmOyx">> = iolist_to_binary(re:replace("abcabcabcabc","^(a|b|c){12}","PN\\1w\\1mOyx",[])),
-?line <<"PNcwcmOyx">> = iolist_to_binary(re:replace("abcabcabcabc","^(a|b|c){12}","PN\\1w\\1mOyx",[global])),
-?line <<"hVfRbFrAh">> = iolist_to_binary(re:replace("n","^[abcdefghijklmnopqrstuvwxy0123456789]","hVfRbFrAh",[])),
-?line <<"hVfRbFrAh">> = iolist_to_binary(re:replace("n","^[abcdefghijklmnopqrstuvwxy0123456789]","hVfRbFrAh",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]","R\\1gE\\1TmOo&B&\\1EaaIWLL",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]","R\\1gE\\1TmOo&B&\\1EaaIWLL",[global])),
-?line <<"z">> = iolist_to_binary(re:replace("z","^[abcdefghijklmnopqrstuvwxy0123456789]","dPAGng",[])),
-?line <<"z">> = iolist_to_binary(re:replace("z","^[abcdefghijklmnopqrstuvwxy0123456789]","dPAGng",[global])),
-?line <<"GalPHuLJkabcdJ">> = iolist_to_binary(re:replace("abcd","abcde{0,0}","Gal\\1PHu\\1LJk&J",[])),
-?line <<"GalPHuLJkabcdJ">> = iolist_to_binary(re:replace("abcd","abcde{0,0}","Gal\\1PHu\\1LJk&J",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abcde{0,0}","nRSqklns\\1RNQ",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abcde{0,0}","nRSqklns\\1RNQ",[global])),
-?line <<"abce">> = iolist_to_binary(re:replace("abce","abcde{0,0}","aYgl\\1WJ",[])),
-?line <<"abce">> = iolist_to_binary(re:replace("abce","abcde{0,0}","aYgl\\1WJ",[global])),
-?line <<"JSDhTpxGUy">> = iolist_to_binary(re:replace("abe","ab[cd]{0,0}e","J\\1SDhT\\1pxGUy",[])),
-?line <<"JSDhTpxGUy">> = iolist_to_binary(re:replace("abe","ab[cd]{0,0}e","J\\1SDhT\\1pxGUy",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab[cd]{0,0}e","K\\1VVqQdlOY\\1IFC",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab[cd]{0,0}e","K\\1VVqQdlOY\\1IFC",[global])),
-?line <<"abcde">> = iolist_to_binary(re:replace("abcde","ab[cd]{0,0}e","CBmXc&",[])),
-?line <<"abcde">> = iolist_to_binary(re:replace("abcde","ab[cd]{0,0}e","CBmXc&",[global])),
-?line <<"YKTMKcsKabd">> = iolist_to_binary(re:replace("abd","ab(c){0,0}d","YKT\\1MKcsK&",[])),
-?line <<"YKTMKcsKabd">> = iolist_to_binary(re:replace("abd","ab(c){0,0}d","YKT\\1MKcsK&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab(c){0,0}d","&j&dtuA\\1A&vS",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab(c){0,0}d","&j&dtuA\\1A&vS",[global])),
-?line <<"abcd">> = iolist_to_binary(re:replace("abcd","ab(c){0,0}d","&ceeJC\\1HRtWmI",[])),
-?line <<"abcd">> = iolist_to_binary(re:replace("abcd","ab(c){0,0}d","&ceeJC\\1HRtWmI",[global])),
-?line <<"k">> = iolist_to_binary(re:replace("a","a(b*)","\\1k",[])),
-?line <<"k">> = iolist_to_binary(re:replace("a","a(b*)","\\1k",[global])),
-?line <<"abnwnAb">> = iolist_to_binary(re:replace("ab","a(b*)","&nwnA\\1",[])),
-?line <<"abnwnAb">> = iolist_to_binary(re:replace("ab","a(b*)","&nwnA\\1",[global])),
-?line <<"nLIbbbbd">> = iolist_to_binary(re:replace("abbbb","a(b*)","nLI\\1d",[])),
-?line <<"nLIbbbbd">> = iolist_to_binary(re:replace("abbbb","a(b*)","nLI\\1d",[global])),
-?line <<"*** FMxgxBanxQaNgAilers">> = iolist_to_binary(re:replace("*** Failers","a(b*)","Mxgx\\1\\1B&nxQ&NgA",[])),
-?line <<"*** FMxgxBanxQaNgAilers">> = iolist_to_binary(re:replace("*** Failers","a(b*)","Mxgx\\1\\1B&nxQ&NgA",[global])),
-?line <<"bbbbb">> = iolist_to_binary(re:replace("bbbbb","a(b*)","Yho\\1QKp",[])),
-?line <<"bbbbb">> = iolist_to_binary(re:replace("bbbbb","a(b*)","Yho\\1QKp",[global])),
-?line <<"c">> = iolist_to_binary(re:replace("abe","ab\\d{0}e","c",[])),
-?line <<"c">> = iolist_to_binary(re:replace("abe","ab\\d{0}e","c",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab\\d{0}e","e\\1Nu\\1BSg\\1Rxb",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab\\d{0}e","e\\1Nu\\1BSg\\1Rxb",[global])),
-?line <<"ab1e">> = iolist_to_binary(re:replace("ab1e","ab\\d{0}e","C\\1xDlVAxYcYUK\\1fMs",[])),
-?line <<"ab1e">> = iolist_to_binary(re:replace("ab1e","ab\\d{0}e","C\\1xDlVAxYcYUK\\1fMs",[global])),
-?line <<"the MipoEquickBcm brown fox">> = iolist_to_binary(re:replace("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"","MipoE\\1Bcm",[])),
-?line <<"the MipoEquickBcm brown fox">> = iolist_to_binary(re:replace("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"","MipoE\\1Bcm",[global])),
-?line <<"\"the \\\"quick\\\" brown fox\"\"the \\\"quick\\\" brown fox\"K brown fox\"the \\\"quick\\\" brown fox\"twdFEi\"the \\\"quick\\\" brown fox\"Tf">> = iolist_to_binary(re:replace("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"","&&K\\1&twdFEi&Tf",[])),
-?line <<"\"the \\\"quick\\\" brown fox\"\"the \\\"quick\\\" brown fox\"K brown fox\"the \\\"quick\\\" brown fox\"twdFEi\"the \\\"quick\\\" brown fox\"Tf">> = iolist_to_binary(re:replace("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"","&&K\\1&twdFEi&Tf",[global])),
-?line <<"uOiYpObvYvnabc">> = iolist_to_binary(re:replace("abc","","uOiYp&\\1Obv&Yvn",[])),
-?line <<"uOiYpObvYvnauOiYpObvYvnbuOiYpObvYvncuOiYpObvYvn">> = iolist_to_binary(re:replace("abc","","uOiYp&\\1Obv&Yvn",[global])),
-?line <<"cacbJUVL">> = iolist_to_binary(re:replace("acb","a[^a]b","c&JUVL",[])),
-?line <<"cacbJUVL">> = iolist_to_binary(re:replace("acb","a[^a]b","c&JUVL",[global])),
-?line <<"a
-bnnciOUFa
-bttqb">> = iolist_to_binary(re:replace("a
-b","a[^a]b","&nnciOUF&ttq\\1b",[])),
-?line <<"a
-bnnciOUFa
-bttqb">> = iolist_to_binary(re:replace("a
-b","a[^a]b","&nnciOUF&ttq\\1b",[global])),
-?line <<"acbrJrBLmacbnacb">> = iolist_to_binary(re:replace("acb","a.b","&rJrBLm&n&",[])),
-?line <<"acbrJrBLmacbnacb">> = iolist_to_binary(re:replace("acb","a.b","&rJrBLm&n&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.b","lUyaU",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.b","lUyaU",[global])),
-?line <<"a
+B","^.*B","gXmgvN\\1oh",[global])),
+ <<"EQuXabc
+Babc
+BcTMO">> = iolist_to_binary(re:replace("abc
+B","(?s)^.*B","EQuX&&\\1cTMO",[])),
+ <<"EQuXabc
+Babc
+BcTMO">> = iolist_to_binary(re:replace("abc
+B","(?s)^.*B","EQuX&&\\1cTMO",[global])),
+ <<"abc
+gtvPyITnci">> = iolist_to_binary(re:replace("abc
+B","(?m)^.*B","\\1gtvPyIT\\1\\1nci\\1",[])),
+ <<"abc
+gtvPyITnci">> = iolist_to_binary(re:replace("abc
+B","(?m)^.*B","\\1gtvPyIT\\1\\1nci\\1",[global])),
+ <<"Xiabc
+BFQs">> = iolist_to_binary(re:replace("abc
+B","(?ms)^.*B","Xi&FQs",[])),
+ <<"Xiabc
+BFQs">> = iolist_to_binary(re:replace("abc
+B","(?ms)^.*B","Xi&FQs",[global])),
+ <<"abc
+KEQlgWBJydBXBMDBU">> = iolist_to_binary(re:replace("abc
+B","(?ms)^B","KEQlgW&Jy\\1d&X&\\1\\1MD&U",[])),
+ <<"abc
+KEQlgWBJydBXBMDBU">> = iolist_to_binary(re:replace("abc
+B","(?ms)^B","KEQlgW&Jy\\1d&X&\\1\\1MD&U",[global])),
+ ok.
+run10() ->
+ <<"eucnXdJhktgj">> = iolist_to_binary(re:replace("B","(?s)B$","eucnXd\\1Jhktgj",[])),
+ <<"eucnXdJhktgj">> = iolist_to_binary(re:replace("B","(?s)B$","eucnXd\\1Jhktgj",[global])),
+ <<"huCb">> = iolist_to_binary(re:replace("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]","huCb",[])),
+ <<"huCb">> = iolist_to_binary(re:replace("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]","huCb",[global])),
+ <<"X123456654321">> = iolist_to_binary(re:replace("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d","X&",[])),
+ <<"X123456654321">> = iolist_to_binary(re:replace("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d","X&",[global])),
+ <<"TYfrdKv123456654321eOFnwwLVc">> = iolist_to_binary(re:replace("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]","TY\\1frdK\\1\\1v&eOFnwwLVc",[])),
+ <<"TYfrdKv123456654321eOFnwwLVc">> = iolist_to_binary(re:replace("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]","TY\\1frdK\\1\\1v&eOFnwwLVc",[global])),
+ <<"ARvxabcabcabcabcbhP">> = iolist_to_binary(re:replace("abcabcabcabc","^[abc]{12}","ARvx&bhP",[])),
+ <<"ARvxabcabcabcabcbhP">> = iolist_to_binary(re:replace("abcabcabcabc","^[abc]{12}","ARvx&bhP",[global])),
+ <<"VtabcabcabcabcaabcabcabcabcoPm">> = iolist_to_binary(re:replace("abcabcabcabc","^[a-c]{12}","V\\1t&a&oPm",[])),
+ <<"VtabcabcabcabcaabcabcabcabcoPm">> = iolist_to_binary(re:replace("abcabcabcabc","^[a-c]{12}","V\\1t&a&oPm",[global])),
+ <<"XSAxPcCWabcabcabcabccaabcabcabcabcC">> = iolist_to_binary(re:replace("abcabcabcabc","^(a|b|c){12}","XSAxPcCW&\\1a&C",[])),
+ <<"XSAxPcCWabcabcabcabccaabcabcabcabcC">> = iolist_to_binary(re:replace("abcabcabcabc","^(a|b|c){12}","XSAxPcCW&\\1a&C",[global])),
+ <<"KlnPsQA">> = iolist_to_binary(re:replace("n","^[abcdefghijklmnopqrstuvwxy0123456789]","Kl&\\1PsQA",[])),
+ <<"KlnPsQA">> = iolist_to_binary(re:replace("n","^[abcdefghijklmnopqrstuvwxy0123456789]","Kl&\\1PsQA",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]","\\1fJAGtEidKGXUnys",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]","\\1fJAGtEidKGXUnys",[global])),
+ <<"z">> = iolist_to_binary(re:replace("z","^[abcdefghijklmnopqrstuvwxy0123456789]","\\1rHkd&\\1jm&b&RxM\\1SHJ",[])),
+ <<"z">> = iolist_to_binary(re:replace("z","^[abcdefghijklmnopqrstuvwxy0123456789]","\\1rHkd&\\1jm&b&RxM\\1SHJ",[global])),
+ <<"imcGUm">> = iolist_to_binary(re:replace("abcd","abcde{0,0}","imcGUm",[])),
+ <<"imcGUm">> = iolist_to_binary(re:replace("abcd","abcde{0,0}","imcGUm",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abcde{0,0}","Tqn",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abcde{0,0}","Tqn",[global])),
+ <<"abce">> = iolist_to_binary(re:replace("abce","abcde{0,0}","&vfSkYqj",[])),
+ <<"abce">> = iolist_to_binary(re:replace("abce","abcde{0,0}","&vfSkYqj",[global])),
+ <<"DvcVJ">> = iolist_to_binary(re:replace("abe","ab[cd]{0,0}e","D\\1vc\\1VJ",[])),
+ <<"DvcVJ">> = iolist_to_binary(re:replace("abe","ab[cd]{0,0}e","D\\1vc\\1VJ",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab[cd]{0,0}e","fqC",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab[cd]{0,0}e","fqC",[global])),
+ <<"abcde">> = iolist_to_binary(re:replace("abcde","ab[cd]{0,0}e","EVGlB",[])),
+ <<"abcde">> = iolist_to_binary(re:replace("abcde","ab[cd]{0,0}e","EVGlB",[global])),
+ <<"ttqYHXMabdKMHbogw">> = iolist_to_binary(re:replace("abd","ab(c){0,0}d","ttqY\\1HXM&KMHbo\\1gw",[])),
+ <<"ttqYHXMabdKMHbogw">> = iolist_to_binary(re:replace("abd","ab(c){0,0}d","ttqY\\1HXM&KMHbo\\1gw",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab(c){0,0}d","UO\\1n&&dgD&x&puRS\\1PEE",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab(c){0,0}d","UO\\1n&&dgD&x&puRS\\1PEE",[global])),
+ <<"abcd">> = iolist_to_binary(re:replace("abcd","ab(c){0,0}d","AnMJgUHAxI\\1ekAaM",[])),
+ <<"abcd">> = iolist_to_binary(re:replace("abcd","ab(c){0,0}d","AnMJgUHAxI\\1ekAaM",[global])),
+ <<"OXylllC">> = iolist_to_binary(re:replace("a","a(b*)","OX\\1ylllC",[])),
+ <<"OXylllC">> = iolist_to_binary(re:replace("a","a(b*)","OX\\1ylllC",[global])),
+ <<"BDoOabpX">> = iolist_to_binary(re:replace("ab","a(b*)","BDoO&pX",[])),
+ <<"BDoOabpX">> = iolist_to_binary(re:replace("ab","a(b*)","BDoO&pX",[global])),
+ <<"WumvpDmPRlDEFbbbbbbbbw">> = iolist_to_binary(re:replace("abbbb","a(b*)","WumvpDmPRlDEF\\1\\1w",[])),
+ <<"WumvpDmPRlDEFbbbbbbbbw">> = iolist_to_binary(re:replace("abbbb","a(b*)","WumvpDmPRlDEF\\1\\1w",[global])),
+ <<"*** FXEpRailers">> = iolist_to_binary(re:replace("*** Failers","a(b*)","XEpR&",[])),
+ <<"*** FXEpRailers">> = iolist_to_binary(re:replace("*** Failers","a(b*)","XEpR&",[global])),
+ <<"bbbbb">> = iolist_to_binary(re:replace("bbbbb","a(b*)","oxX\\1mji\\1R&A",[])),
+ <<"bbbbb">> = iolist_to_binary(re:replace("bbbbb","a(b*)","oxX\\1mji\\1R&A",[global])),
+ <<"nabehjEWAKJbF">> = iolist_to_binary(re:replace("abe","ab\\d{0}e","n&hjEWA\\1\\1KJbF",[])),
+ <<"nabehjEWAKJbF">> = iolist_to_binary(re:replace("abe","ab\\d{0}e","n&hjEWA\\1\\1KJbF",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab\\d{0}e","IK\\1nN\\1xr",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab\\d{0}e","IK\\1nN\\1xr",[global])),
+ <<"ab1e">> = iolist_to_binary(re:replace("ab1e","ab\\d{0}e","S\\1HX\\1V\\1hjKR",[])),
+ <<"ab1e">> = iolist_to_binary(re:replace("ab1e","ab\\d{0}e","S\\1HX\\1V\\1hjKR",[global])),
+ <<"the quickf\"quick\"cqEH\"quick\"quickWsS brown fox">> = iolist_to_binary(re:replace("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"","\\1f&cqEH&\\1WsS",[])),
+ <<"the quickf\"quick\"cqEH\"quick\"quickWsS brown fox">> = iolist_to_binary(re:replace("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"","\\1f&cqEH&\\1WsS",[global])),
+ <<"mRaOvRxI">> = iolist_to_binary(re:replace("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"","mRaOvRxI",[])),
+ <<"mRaOvRxI">> = iolist_to_binary(re:replace("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"","mRaOvRxI",[global])),
+ <<"OVRmBCabc">> = iolist_to_binary(re:replace("abc","","OVR&m&BC",[])),
+ <<"OVRmBCaOVRmBCbOVRmBCcOVRmBC">> = iolist_to_binary(re:replace("abc","","OVR&m&BC",[global])),
+ <<"lMTacbbGqK">> = iolist_to_binary(re:replace("acb","a[^a]b","lMT&bGq\\1K",[])),
+ <<"lMTacbbGqK">> = iolist_to_binary(re:replace("acb","a[^a]b","lMT&bGq\\1K",[global])),
+ <<"a
+ba
+bLxcQMea
+bHjqB">> = iolist_to_binary(re:replace("a
+b","a[^a]b","\\1\\1&&LxcQMe&Hj\\1qB",[])),
+ <<"a
+ba
+bLxcQMea
+bHjqB">> = iolist_to_binary(re:replace("a
+b","a[^a]b","\\1\\1&&LxcQMe&Hj\\1qB",[global])),
+ <<"acbVVpcHAOaqv">> = iolist_to_binary(re:replace("acb","a.b","&VVpcHAOaqv",[])),
+ <<"acbVVpcHAOaqv">> = iolist_to_binary(re:replace("acb","a.b","&VVpcHAOaqv",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.b","rP",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.b","rP",[global])),
+ <<"a
b">> = iolist_to_binary(re:replace("a
-b","a.b","&etys",[])),
-?line <<"a
+b","a.b","rUNVcR\\1i\\1S",[])),
+ <<"a
b">> = iolist_to_binary(re:replace("a
-b","a.b","&etys",[global])),
-?line <<"BRCBYDDacbacbacbLfVw">> = iolist_to_binary(re:replace("acb","a[^a]b","BRCBY\\1D\\1D&&\\1&LfVw",[dotall])),
-?line <<"BRCBYDDacbacbacbLfVw">> = iolist_to_binary(re:replace("acb","a[^a]b","BRCBY\\1D\\1D&&\\1&LfVw",[dotall,
- global])),
-?line <<"a
-bQkfhPqa
-bka
-byK">> = iolist_to_binary(re:replace("a
-b","a[^a]b","&Qk\\1fhPq&k&yK",[dotall])),
-?line <<"a
-bQkfhPqa
-bka
-byK">> = iolist_to_binary(re:replace("a
-b","a[^a]b","&Qk\\1fhPq&k&yK",[dotall,global])),
-?line <<"nKFpFMMacbmxur">> = iolist_to_binary(re:replace("acb","a.b","\\1nKF\\1\\1pF\\1MM\\1&mxur",[dotall])),
-?line <<"nKFpFMMacbmxur">> = iolist_to_binary(re:replace("acb","a.b","\\1nKF\\1\\1pF\\1MM\\1&mxur",[dotall,
- global])),
-?line <<"RESrDVpIxqsoAT">> = iolist_to_binary(re:replace("a
-b","a.b","\\1RES\\1rDVpIxqso\\1AT",[dotall])),
-?line <<"RESrDVpIxqsoAT">> = iolist_to_binary(re:replace("a
-b","a.b","\\1RES\\1rDVpIxqso\\1AT",[dotall,global])),
-?line <<"aNchRRBHywejNvbacE">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","\\1NchRRBHywejNv&E",[])),
-?line <<"aNchRRBHywejNvbacE">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","\\1NchRRBHywejNv&E",[global])),
-?line <<"tOamCbbacgsmxbbac">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","tO\\1mC&gsmx&",[])),
-?line <<"tOamCbbacgsmxbbac">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","tO\\1mC&gsmx&",[global])),
-?line <<"xHTFdauecabbbacGpaol">> = iolist_to_binary(re:replace("bbbac","^(b+?|a){1,2}?c","xHTFd\\1uec\\1&Gp\\1ol",[])),
-?line <<"xHTFdauecabbbacGpaol">> = iolist_to_binary(re:replace("bbbac","^(b+?|a){1,2}?c","xHTFd\\1uec\\1&Gp\\1ol",[global])),
-?line <<"baapjPEIagYbbbbacvbbbbacUPkPJ">> = iolist_to_binary(re:replace("bbbbac","^(b+?|a){1,2}?c","b\\1\\1pjPEI\\1gY&v&UPkPJ",[])),
-?line <<"baapjPEIagYbbbbacvbbbbacUPkPJ">> = iolist_to_binary(re:replace("bbbbac","^(b+?|a){1,2}?c","b\\1\\1pjPEI\\1gY&v&UPkPJ",[global])),
-?line <<"atqCLSTaKnviKn">> = iolist_to_binary(re:replace("bbbbbac","^(b+?|a){1,2}?c","\\1tqCLST\\1KnviKn",[])),
-?line <<"atqCLSTaKnviKn">> = iolist_to_binary(re:replace("bbbbbac","^(b+?|a){1,2}?c","\\1tqCLST\\1KnviKn",[global])),
-?line <<"x">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}?c","x",[])),
-?line <<"x">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}?c","x",[global])),
-?line <<"ysaxGbbachYTP">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}?c","ysaxG&hYTP",[])),
-?line <<"ysaxGbbachYTP">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}?c","ysaxG&hYTP",[global])),
-?line <<"IxpOsaoUxbbbacCEcBow">> = iolist_to_binary(re:replace("bbbac","^(b+|a){1,2}?c","IxpOs\\1oUx&CEcBow",[])),
-?line <<"IxpOsaoUxbbbacCEcBow">> = iolist_to_binary(re:replace("bbbac","^(b+|a){1,2}?c","IxpOs\\1oUx&CEcBow",[global])),
-?line <<"bbbbacDeITf">> = iolist_to_binary(re:replace("bbbbac","^(b+|a){1,2}?c","&DeITf",[])),
-?line <<"bbbbacDeITf">> = iolist_to_binary(re:replace("bbbbac","^(b+|a){1,2}?c","&DeITf",[global])),
-?line <<"XlWabAqKnj">> = iolist_to_binary(re:replace("bbbbbac","^(b+|a){1,2}?c","XlW\\1bAqKnj",[])),
-?line <<"XlWabAqKnj">> = iolist_to_binary(re:replace("bbbbbac","^(b+|a){1,2}?c","XlW\\1bAqKnj",[global])),
-?line <<"x
+b","a.b","rUNVcR\\1i\\1S",[global])),
+ <<"UHo">> = iolist_to_binary(re:replace("acb","a[^a]b","UHo",[dotall])),
+ <<"UHo">> = iolist_to_binary(re:replace("acb","a[^a]b","UHo",[dotall,
+ global])),
+ <<"muQa
+bDGfm">> = iolist_to_binary(re:replace("a
+b","a[^a]b","muQ&DGfm",[dotall])),
+ <<"muQa
+bDGfm">> = iolist_to_binary(re:replace("a
+b","a[^a]b","muQ&DGfm",[dotall,global])),
+ <<"mPIfJVBacbQacbtacbVacb">> = iolist_to_binary(re:replace("acb","a.b","m\\1PIfJVB&Q&t\\1&V&",[dotall])),
+ <<"mPIfJVBacbQacbtacbVacb">> = iolist_to_binary(re:replace("acb","a.b","m\\1PIfJVB&Q&t\\1&V&",[dotall,
+ global])),
+ <<"aNa
+bBIrkip">> = iolist_to_binary(re:replace("a
+b","a.b","aN&BIrkip",[dotall])),
+ <<"aNa
+bBIrkip">> = iolist_to_binary(re:replace("a
+b","a.b","aN&BIrkip",[dotall,global])),
+ ok.
+run11() ->
+ <<"vhgx">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","vhgx",[])),
+ <<"vhgx">> = iolist_to_binary(re:replace("bac","^(b+?|a){1,2}?c","vhgx",[global])),
+ <<"ybvbbac">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","ybv&",[])),
+ <<"ybvbbac">> = iolist_to_binary(re:replace("bbac","^(b+?|a){1,2}?c","ybv&",[global])),
+ <<"KDBmQaFUbbbbacKDvahagVH">> = iolist_to_binary(re:replace("bbbac","^(b+?|a){1,2}?c","KDBmQ\\1FUb&KDv\\1h\\1gVH",[])),
+ <<"KDBmQaFUbbbbacKDvahagVH">> = iolist_to_binary(re:replace("bbbac","^(b+?|a){1,2}?c","KDBmQ\\1FUb&KDv\\1h\\1gVH",[global])),
+ <<"uPboDyBKbbbbaccsL">> = iolist_to_binary(re:replace("bbbbac","^(b+?|a){1,2}?c","uPboDyBK&csL",[])),
+ <<"uPboDyBKbbbbaccsL">> = iolist_to_binary(re:replace("bbbbac","^(b+?|a){1,2}?c","uPboDyBK&csL",[global])),
+ <<"QeDbbbbbacbbbbbacXxKbbbbbacTlGRhFObbbbbaccF">> = iolist_to_binary(re:replace("bbbbbac","^(b+?|a){1,2}?c","QeD&&XxK&TlGRhFO&cF",[])),
+ <<"QeDbbbbbacbbbbbacXxKbbbbbacTlGRhFObbbbbaccF">> = iolist_to_binary(re:replace("bbbbbac","^(b+?|a){1,2}?c","QeD&&XxK&TlGRhFO&cF",[global])),
+ <<"bacUbacihaieDLiAIBbacGLD">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}?c","&U&ih\\1ieDLiAIB&GLD",[])),
+ <<"bacUbacihaieDLiAIBbacGLD">> = iolist_to_binary(re:replace("bac","^(b+|a){1,2}?c","&U&ih\\1ieDLiAIB&GLD",[global])),
+ <<"YFsyGywxuIMvbbacmaha">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}?c","YFsyGywxuIMv&m\\1h\\1",[])),
+ <<"YFsyGywxuIMvbbacmaha">> = iolist_to_binary(re:replace("bbac","^(b+|a){1,2}?c","YFsyGywxuIMv&m\\1h\\1",[global])),
+ <<"qbbbacaLIOdWFbbbacbbbacJBItjgaqJ">> = iolist_to_binary(re:replace("bbbac","^(b+|a){1,2}?c","q&\\1LIOdWF&&JBItjg\\1qJ",[])),
+ <<"qbbbacaLIOdWFbbbacbbbacJBItjgaqJ">> = iolist_to_binary(re:replace("bbbac","^(b+|a){1,2}?c","q&\\1LIOdWF&&JBItjg\\1qJ",[global])),
+ <<"QqiEfi">> = iolist_to_binary(re:replace("bbbbac","^(b+|a){1,2}?c","QqiEfi",[])),
+ <<"QqiEfi">> = iolist_to_binary(re:replace("bbbbac","^(b+|a){1,2}?c","QqiEfi",[global])),
+ <<"YDPanLeWvajbbbbbacabnHyjk">> = iolist_to_binary(re:replace("bbbbbac","^(b+|a){1,2}?c","YDPanLeWv\\1j&\\1bnHyjk",[])),
+ <<"YDPanLeWvajbbbbbacabnHyjk">> = iolist_to_binary(re:replace("bbbbbac","^(b+|a){1,2}?c","YDPanLeWv\\1j&\\1bnHyjk",[global])),
+ <<"x
b">> = iolist_to_binary(re:replace("x
-b","(?!\\A)x","DxdEs\\1&\\1LKts&",[multiline])),
-?line <<"x
+b","(?!\\A)x","TB&e&lCSta",[multiline])),
+ <<"x
b">> = iolist_to_binary(re:replace("x
-b","(?!\\A)x","DxdEs\\1&\\1LKts&",[multiline,global])),
-?line <<"aAx">> = iolist_to_binary(re:replace("ax","(?!\\A)x","Ax",[multiline])),
-?line <<"aAx">> = iolist_to_binary(re:replace("ax","(?!\\A)x","Ax",[multiline,
- global])),
-?line <<"{ab}">> = iolist_to_binary(re:replace("{ab}","\\x0{ab}","aOVgpiCu\\1P\\1xjYe\\1",[])),
-?line <<"{ab}">> = iolist_to_binary(re:replace("{ab}","\\x0{ab}","aOVgpiCu\\1P\\1xjYe\\1",[global])),
-?line <<"PilCDnyDeI">> = iolist_to_binary(re:replace("CD","(A|B)*?CD","Pil&\\1nyDeI",[])),
-?line <<"PilCDnyDeI">> = iolist_to_binary(re:replace("CD","(A|B)*?CD","Pil&\\1nyDeI",[global])),
-?line <<"WrpDiffmnCDPINGCDSe">> = iolist_to_binary(re:replace("CD","(A|B)*CD","WrpDiffmn&PING&Se",[])),
-?line <<"WrpDiffmnCDPINGCDSe">> = iolist_to_binary(re:replace("CD","(A|B)*CD","WrpDiffmn&PING&Se",[global])),
-?line <<"mIeAB">> = iolist_to_binary(re:replace("ABABAB","(AB)*?\\1","mIe",[])),
-?line <<"mIeAB">> = iolist_to_binary(re:replace("ABABAB","(AB)*?\\1","mIe",[global])),
-?line <<"JThaowd">> = iolist_to_binary(re:replace("ABABAB","(AB)*\\1","JThaowd",[])),
-?line <<"JThaowd">> = iolist_to_binary(re:replace("ABABAB","(AB)*\\1","JThaowd",[global])),
-?line <<"mxivbdfooiW">> = iolist_to_binary(re:replace("foo","(?<!bar)foo","m\\1xi\\1\\1vbd&iW",[])),
-?line <<"mxivbdfooiW">> = iolist_to_binary(re:replace("foo","(?<!bar)foo","m\\1xi\\1\\1vbd&iW",[global])),
-?line <<"cathTPTYtGud">> = iolist_to_binary(re:replace("catfood","(?<!bar)foo","hTPTYtGu",[])),
-?line <<"cathTPTYtGud">> = iolist_to_binary(re:replace("catfood","(?<!bar)foo","hTPTYtGu",[global])),
-?line <<"arTMXuVvEElifooRfooXqctle">> = iolist_to_binary(re:replace("arfootle","(?<!bar)foo","TMXu\\1VvEEli&R&Xqc",[])),
-?line <<"arTMXuVvEElifooRfooXqctle">> = iolist_to_binary(re:replace("arfootle","(?<!bar)foo","TMXu\\1VvEEli&R&Xqc",[global])),
-?line <<"rCCfnfoopTfbpOVUOFBsh">> = iolist_to_binary(re:replace("rfoosh","(?<!bar)foo","CCfn&pT\\1fbpOVUOFB",[])),
-?line <<"rCCfnfoopTfbpOVUOFBsh">> = iolist_to_binary(re:replace("rfoosh","(?<!bar)foo","CCfn&pT\\1fbpOVUOFB",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<!bar)foo","bxdEUE&SEpWXK&",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<!bar)foo","bxdEUE&SEpWXK&",[global])),
-?line <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<!bar)foo","ghAth&\\1XCvK&&",[])),
-?line <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<!bar)foo","ghAth&\\1XCvK&&",[global])),
-?line <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","(?<!bar)foo","soY&O&QNmTi\\1xspnti&T",[])),
-?line <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","(?<!bar)foo","soY&O&QNmTi\\1xspnti&T",[global])),
-?line <<"JBHNVNd">> = iolist_to_binary(re:replace("catfood","\\w{3}(?<!bar)foo","J\\1BHN\\1VN\\1",[])),
-?line <<"JBHNVNd">> = iolist_to_binary(re:replace("catfood","\\w{3}(?<!bar)foo","J\\1BHN\\1VN\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\w{3}(?<!bar)foo","&ucJ",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\w{3}(?<!bar)foo","&ucJ",[global])),
-?line <<"foo">> = iolist_to_binary(re:replace("foo","\\w{3}(?<!bar)foo","uasVxSucjJKX",[])),
-?line <<"foo">> = iolist_to_binary(re:replace("foo","\\w{3}(?<!bar)foo","uasVxSucjJKX",[global])),
-?line <<"barfoo">> = iolist_to_binary(re:replace("barfoo","\\w{3}(?<!bar)foo","u&&Su\\1&YWVvwAftwcE&",[])),
-?line <<"barfoo">> = iolist_to_binary(re:replace("barfoo","\\w{3}(?<!bar)foo","u&&Su\\1&YWVvwAftwcE&",[global])),
-?line <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","\\w{3}(?<!bar)foo","IH",[])),
-?line <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","\\w{3}(?<!bar)foo","IH",[global])),
-?line <<"fooabarSWfoobar">> = iolist_to_binary(re:replace("fooabar","(?<=(foo)a)bar","&SW\\1&",[])),
-?line <<"fooabarSWfoobar">> = iolist_to_binary(re:replace("fooabar","(?<=(foo)a)bar","&SW\\1&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo)a)bar","&ShYlKf",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo)a)bar","&ShYlKf",[global])),
-?line <<"bar">> = iolist_to_binary(re:replace("bar","(?<=(foo)a)bar","Usk\\1PJ&",[])),
-?line <<"bar">> = iolist_to_binary(re:replace("bar","(?<=(foo)a)bar","Usk\\1PJ&",[global])),
-?line <<"foobbar">> = iolist_to_binary(re:replace("foobbar","(?<=(foo)a)bar","\\1pXSA",[])),
-?line <<"foobbar">> = iolist_to_binary(re:replace("foobbar","(?<=(foo)a)bar","\\1pXSA",[global])),
-?line <<"gWabcqJMuvLrGqnPLJK">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","gW&qJ\\1MuvLrGqnPLJK",[multiline])),
-?line <<"gWabcqJMuvLrGqnPLJK">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","gW&qJ\\1MuvLrGqnPLJK",[multiline,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\z","tcIt&YpWtGEy\\1p",[multiline])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\z","tcIt&YpWtGEy\\1p",[multiline,
- global])),
-?line <<"abcM">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","&M",[multiline])),
-?line <<"abcM">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","&M",[multiline,
- global])),
-?line <<"qqq
+b","(?!\\A)x","TB&e&lCSta",[multiline,global])),
+ <<"axHTxRqfqP">> = iolist_to_binary(re:replace("ax","(?!\\A)x","&HT&\\1Rq\\1fqP",[multiline])),
+ <<"axHTxRqfqP">> = iolist_to_binary(re:replace("ax","(?!\\A)x","&HT&\\1Rq\\1fqP",[multiline,
+ global])),
+ <<"{ab}">> = iolist_to_binary(re:replace("{ab}","\\x0{ab}","nqnNdxgun\\1T",[])),
+ <<"{ab}">> = iolist_to_binary(re:replace("{ab}","\\x0{ab}","nqnNdxgun\\1T",[global])),
+ <<"OrUCDJnCTtDo">> = iolist_to_binary(re:replace("CD","(A|B)*?CD","OrU&J\\1nCTtDo",[])),
+ <<"OrUCDJnCTtDo">> = iolist_to_binary(re:replace("CD","(A|B)*?CD","OrU&J\\1nCTtDo",[global])),
+ <<"MkLtcbirH">> = iolist_to_binary(re:replace("CD","(A|B)*CD","MkLtcbirH",[])),
+ <<"MkLtcbirH">> = iolist_to_binary(re:replace("CD","(A|B)*CD","MkLtcbirH",[global])),
+ <<"ABABrABABomDFFpAABABSfrABGABVAB">> = iolist_to_binary(re:replace("ABABAB","(AB)*?\\1","\\1\\1r&omDFFpA&Sfr\\1G\\1V",[])),
+ <<"ABABrABABomDFFpAABABSfrABGABVAB">> = iolist_to_binary(re:replace("ABABAB","(AB)*?\\1","\\1\\1r&omDFFpA&Sfr\\1G\\1V",[global])),
+ <<"NpABABABGmqeABABABABrmlyABABABdq">> = iolist_to_binary(re:replace("ABABAB","(AB)*\\1","Np&Gmqe\\1&rmly&dq",[])),
+ <<"NpABABABGmqeABABABABrmlyABABABdq">> = iolist_to_binary(re:replace("ABABAB","(AB)*\\1","Np&Gmqe\\1&rmly&dq",[global])),
+ <<"qRqrQeDLnUtUIooiI">> = iolist_to_binary(re:replace("foo","(?<!bar)foo","q\\1RqrQeDLn\\1UtUIoo\\1iI",[])),
+ <<"qRqrQeDLnUtUIooiI">> = iolist_to_binary(re:replace("foo","(?<!bar)foo","q\\1RqrQeDLn\\1UtUIoo\\1iI",[global])),
+ <<"catOdXBXoDHfooHbldUpfood">> = iolist_to_binary(re:replace("catfood","(?<!bar)foo","OdXBXoDH&HbldUp&",[])),
+ <<"catOdXBXoDHfooHbldUpfood">> = iolist_to_binary(re:replace("catfood","(?<!bar)foo","OdXBXoDH&HbldUp&",[global])),
+ <<"arDtle">> = iolist_to_binary(re:replace("arfootle","(?<!bar)foo","D",[])),
+ <<"arDtle">> = iolist_to_binary(re:replace("arfootle","(?<!bar)foo","D",[global])),
+ <<"rYPYoYugCsh">> = iolist_to_binary(re:replace("rfoosh","(?<!bar)foo","YPYoYug\\1C",[])),
+ <<"rYPYoYugCsh">> = iolist_to_binary(re:replace("rfoosh","(?<!bar)foo","YPYoYug\\1C",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<!bar)foo","i",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<!bar)foo","i",[global])),
+ <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<!bar)foo","cbUElrx&&\\1\\1YM\\1aBcUl",[])),
+ <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<!bar)foo","cbUElrx&&\\1\\1YM\\1aBcUl",[global])),
+ <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","(?<!bar)foo","saPM\\1\\1OgLT\\1h\\1KWyOtmQ",[])),
+ <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","(?<!bar)foo","saPM\\1\\1OgLT\\1h\\1KWyOtmQ",[global])),
+ <<"EPmld">> = iolist_to_binary(re:replace("catfood","\\w{3}(?<!bar)foo","EPml",[])),
+ <<"EPmld">> = iolist_to_binary(re:replace("catfood","\\w{3}(?<!bar)foo","EPml",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\w{3}(?<!bar)foo","MhJ&dGwUuIb\\1JIoqE",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\w{3}(?<!bar)foo","MhJ&dGwUuIb\\1JIoqE",[global])),
+ <<"foo">> = iolist_to_binary(re:replace("foo","\\w{3}(?<!bar)foo","&wjHKW&gb",[])),
+ <<"foo">> = iolist_to_binary(re:replace("foo","\\w{3}(?<!bar)foo","&wjHKW&gb",[global])),
+ <<"barfoo">> = iolist_to_binary(re:replace("barfoo","\\w{3}(?<!bar)foo","B",[])),
+ <<"barfoo">> = iolist_to_binary(re:replace("barfoo","\\w{3}(?<!bar)foo","B",[global])),
+ <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","\\w{3}(?<!bar)foo","Jspqw\\1R\\1ldUs",[])),
+ <<"towbarfoo">> = iolist_to_binary(re:replace("towbarfoo","\\w{3}(?<!bar)foo","Jspqw\\1R\\1ldUs",[global])),
+ <<"fooarfooVALbarfooUbfooCrGfoobarhbarlfu">> = iolist_to_binary(re:replace("fooabar","(?<=(foo)a)bar","r\\1VAL&\\1Ub\\1CrG\\1&h&lfu",[])),
+ <<"fooarfooVALbarfooUbfooCrGfoobarhbarlfu">> = iolist_to_binary(re:replace("fooabar","(?<=(foo)a)bar","r\\1VAL&\\1Ub\\1CrG\\1&h&lfu",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo)a)bar","Xup&&F\\1h\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo)a)bar","Xup&&F\\1h\\1",[global])),
+ <<"bar">> = iolist_to_binary(re:replace("bar","(?<=(foo)a)bar","IyyUVRu\\1&J&EmI&",[])),
+ <<"bar">> = iolist_to_binary(re:replace("bar","(?<=(foo)a)bar","IyyUVRu\\1&J&EmI&",[global])),
+ <<"foobbar">> = iolist_to_binary(re:replace("foobbar","(?<=(foo)a)bar","yUdI",[])),
+ <<"foobbar">> = iolist_to_binary(re:replace("foobbar","(?<=(foo)a)bar","yUdI",[global])),
+ <<"TjyabckVlQOnp">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","Tjy&kVlQOnp",[multiline])),
+ <<"TjyabckVlQOnp">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","Tjy&kVlQOnp",[multiline,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\z","jAW\\1V&Gcxh&iaRsV\\1",[multiline])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Aabc\\z","jAW\\1V&Gcxh&iaRsV\\1",[multiline,
+ global])),
+ <<"xQWabcHT">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","\\1xQW&H\\1T",[multiline])),
+ <<"xQWabcHT">> = iolist_to_binary(re:replace("abc","\\Aabc\\z","\\1xQW&H\\1T",[multiline,
+ global])),
+ <<"qqq
abc">> = iolist_to_binary(re:replace("qqq
-abc","\\Aabc\\z","B\\1B\\1fqK\\1nocSHwGCCiM",[multiline])),
-?line <<"qqq
+abc","\\Aabc\\z","Y\\1YcwSrGNHt&\\1bI&",[multiline])),
+ <<"qqq
abc">> = iolist_to_binary(re:replace("qqq
-abc","\\Aabc\\z","B\\1B\\1fqK\\1nocSHwGCCiM",[multiline,global])),
-?line <<"abc
+abc","\\Aabc\\z","Y\\1YcwSrGNHt&\\1bI&",[multiline,global])),
+ <<"abc
zzz">> = iolist_to_binary(re:replace("abc
-zzz","\\Aabc\\z","P",[multiline])),
-?line <<"abc
+zzz","\\Aabc\\z","hxWEtDjrfttJGQ",[multiline])),
+ <<"abc
zzz">> = iolist_to_binary(re:replace("abc
-zzz","\\Aabc\\z","P",[multiline,global])),
-?line <<"qqq
+zzz","\\Aabc\\z","hxWEtDjrfttJGQ",[multiline,global])),
+ <<"qqq
abc
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","\\Aabc\\z","\\1adD\\1",[multiline])),
-?line <<"qqq
+zzz","\\Aabc\\z","\\1AYG&TDth",[multiline])),
+ <<"qqq
abc
zzz">> = iolist_to_binary(re:replace("qqq
abc
-zzz","\\Aabc\\z","\\1adD\\1",[multiline,global])),
-?line <<"1U">> = iolist_to_binary(re:replace("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+","U",[])),
-?line <<"1U">> = iolist_to_binary(re:replace("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+","U",[global])),
-?line <<"1bJ.875fwFYOodDWXyr.875tm.875000282.875000282">> = iolist_to_binary(re:replace("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+","bJ\\1fwFYOodDWXyr\\1tm&&",[])),
-?line <<"1bJ.875fwFYOodDWXyr.875tm.875000282.875000282">> = iolist_to_binary(re:replace("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+","bJ\\1fwFYOodDWXyr\\1tm&&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+","e\\1JPFf&",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+","e\\1JPFf&",[global])),
-?line <<"1.235">> = iolist_to_binary(re:replace("1.235","(?>(\\.\\d\\d[1-9]?))\\d+","yOPhp&Vy&fKXLBmiJx\\1a",[])),
-?line <<"1.235">> = iolist_to_binary(re:replace("1.235","(?>(\\.\\d\\d[1-9]?))\\d+","yOPhp&Vy&fKXLBmiJx\\1a",[global])),
-?line <<"partynow is the time for all good men to come to the aid of the partycnow is the time for all good men to come to the aid of the partynow is the time for all good men to come to the aid of the partypartyyecj">> = iolist_to_binary(re:replace("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$","\\1&c&&\\1yecj",[])),
-?line <<"partynow is the time for all good men to come to the aid of the partycnow is the time for all good men to come to the aid of the partynow is the time for all good men to come to the aid of the partypartyyecj">> = iolist_to_binary(re:replace("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$","\\1&c&&\\1yecj",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^((?>\\w+)|(?>\\s+))*$","\\1u",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^((?>\\w+)|(?>\\s+))*$","\\1u",[global])),
-?line <<"this is not a line with only words and spaces!">> = iolist_to_binary(re:replace("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$","gH&CX\\1&vnufnGXYAun",[])),
-?line <<"this is not a line with only words and spaces!">> = iolist_to_binary(re:replace("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$","gH&CX\\1&vnufnGXYAun",[global])),
-?line <<"K1234512345aH12345a">> = iolist_to_binary(re:replace("12345a","(\\d+)(\\w)","K\\1&H&",[])),
-?line <<"K1234512345aH12345a">> = iolist_to_binary(re:replace("12345a","(\\d+)(\\w)","K\\1&H&",[global])),
-?line <<"IdNK+">> = iolist_to_binary(re:replace("12345+","(\\d+)(\\w)","IdNK",[])),
-?line <<"IdNK+">> = iolist_to_binary(re:replace("12345+","(\\d+)(\\w)","IdNK",[global])),
-?line <<"jvjjhmthsl">> = iolist_to_binary(re:replace("12345a","((?>\\d+))(\\w)","jvjjhmthsl",[])),
-?line <<"jvjjhmthsl">> = iolist_to_binary(re:replace("12345a","((?>\\d+))(\\w)","jvjjhmthsl",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?>\\d+))(\\w)","eK&NTn&\\1T",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?>\\d+))(\\w)","eK&NTn&\\1T",[global])),
-?line <<"12345+">> = iolist_to_binary(re:replace("12345+","((?>\\d+))(\\w)","&&TXSquRgMqkDs&K&",[])),
-?line <<"12345+">> = iolist_to_binary(re:replace("12345+","((?>\\d+))(\\w)","&&TXSquRgMqkDs&K&",[global])),
-?line <<"NeYcvQCaaabtbOkx">> = iolist_to_binary(re:replace("aaab","(?>a+)b","NeYcvQC&tbOkx\\1",[])),
-?line <<"NeYcvQCaaabtbOkx">> = iolist_to_binary(re:replace("aaab","(?>a+)b","NeYcvQC&tbOkx\\1",[global])),
-?line <<"aaabbaaabFOSaaabKKtRUNaaabLDTCH">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","&b&FOS&KKtRUN\\1LDTCH",[])),
-?line <<"aaabbaaabFOSaaabKKtRUNaaabLDTCH">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","&b&FOS&KKtRUN\\1LDTCH",[global])),
-?line <<"xaaabaaabaaaiaaabCaGaaaaaabaaaaaaaaabaaabaaaF">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","x\\1b&\\1i&CaG\\1&\\1\\1&&\\1F",[])),
-?line <<"xaaabaaabaaaiaaabCaGaaaaaabaaaaaaaaabaaabaaaF">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","x\\1b&\\1i&CaG\\1&\\1\\1&&\\1F",[global])),
-?line <<"aaaLDSAYvgtbbbotccc">> = iolist_to_binary(re:replace("aaabbbccc","(?>b)+","LDSAYvgt&ot",[])),
-?line <<"aaaLDSAYvgtbbbotccc">> = iolist_to_binary(re:replace("aaabbbccc","(?>b)+","LDSAYvgt&ot",[global])),
-?line <<"ABQFhQjYaaabbbbcAcccd">> = iolist_to_binary(re:replace("aaabbbbccccd","(?>a+|b+|c+)*c","ABQ\\1Fh\\1QjY&A",[])),
-?line <<"ABQFhQjYaaabbbbcAABQFhQjYcAABQFhQjYcAABQFhQjYcAd">> = iolist_to_binary(re:replace("aaabbbbccccd","(?>a+|b+|c+)*c","ABQ\\1Fh\\1QjY&A",[global])),
-?line <<"((xiabc(ade)ufh()()xpJf">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","\\1i&pJf",[])),
-?line <<"((xiabc(ade)ufh()()xpJf">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","\\1i&pJf",[global])),
-?line <<"NBF">> = iolist_to_binary(re:replace("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","NBF",[])),
-?line <<"NBF">> = iolist_to_binary(re:replace("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","NBF",[global])),
-?line <<"(abc(def)xyz)AFLTv">> = iolist_to_binary(re:replace("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","&AFLTv",[])),
-?line <<"(abc(def)xyz)AFLTv">> = iolist_to_binary(re:replace("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","&AFLTv",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)","P\\1OC",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)","P\\1OC",[global])),
-?line <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)","u\\1\\1H\\1TOt\\1fVI&X",[])),
-?line <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)","u\\1\\1H\\1TOt\\1fVI&X",[global])),
-?line <<"E">> = iolist_to_binary(re:replace("ab","a(?-i)b","E",[caseless])),
-?line <<"E">> = iolist_to_binary(re:replace("ab","a(?-i)b","E",[caseless,
- global])),
-?line <<"hAboOovpk">> = iolist_to_binary(re:replace("Ab","a(?-i)b","h&oOovpk",[caseless])),
-?line <<"hAboOovpk">> = iolist_to_binary(re:replace("Ab","a(?-i)b","h&oOovpk",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?-i)b","liOu",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?-i)b","liOu",[caseless,
- global])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","a(?-i)b","P",[caseless])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","a(?-i)b","P",[caseless,
- global])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","a(?-i)b","GdSF&e&",[caseless])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","a(?-i)b","GdSF&e&",[caseless,
- global])),
-?line <<"a bcd eSPWrUhOwa">> = iolist_to_binary(re:replace("a bcd e","(a (?x)b c)d e","&SPWrUhOwa",[])),
-?line <<"a bcd eSPWrUhOwa">> = iolist_to_binary(re:replace("a bcd e","(a (?x)b c)d e","&SPWrUhOwa",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a (?x)b c)d e","IgDGvOUoEIi",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a (?x)b c)d e","IgDGvOUoEIi",[global])),
-?line <<"a b cd e">> = iolist_to_binary(re:replace("a b cd e","(a (?x)b c)d e","C\\1Lora&uj\\1nePq",[])),
-?line <<"a b cd e">> = iolist_to_binary(re:replace("a b cd e","(a (?x)b c)d e","C\\1Lora&uj\\1nePq",[global])),
-?line <<"abcd e">> = iolist_to_binary(re:replace("abcd e","(a (?x)b c)d e","M",[])),
-?line <<"abcd e">> = iolist_to_binary(re:replace("abcd e","(a (?x)b c)d e","M",[global])),
-?line <<"a bcde">> = iolist_to_binary(re:replace("a bcde","(a (?x)b c)d e","mNwUc&",[])),
-?line <<"a bcde">> = iolist_to_binary(re:replace("a bcde","(a (?x)b c)d e","mNwUc&",[global])),
-?line <<"a bcde fTra bcde fnDatbuPn">> = iolist_to_binary(re:replace("a bcde f","(a b(?x)c d (?-x)e f)","&Tr\\1nDatbuPn",[])),
-?line <<"a bcde fTra bcde fnDatbuPn">> = iolist_to_binary(re:replace("a bcde f","(a b(?x)c d (?-x)e f)","&Tr\\1nDatbuPn",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a b(?x)c d (?-x)e f)","\\1AXE&qrGnJBeg",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a b(?x)c d (?-x)e f)","\\1AXE&qrGnJBeg",[global])),
-?line <<"abcdef">> = iolist_to_binary(re:replace("abcdef","(a b(?x)c d (?-x)e f)","YXaHuSXEMrxHLIUXuNu\\1",[])),
-?line <<"abcdef">> = iolist_to_binary(re:replace("abcdef","(a b(?x)c d (?-x)e f)","YXaHuSXEMrxHLIUXuNu\\1",[global])),
-?line <<"AmT">> = iolist_to_binary(re:replace("abc","(a(?i)b)c","AmT",[])),
-?line <<"AmT">> = iolist_to_binary(re:replace("abc","(a(?i)b)c","AmT",[global])),
-?line <<"CYjrwVi">> = iolist_to_binary(re:replace("aBc","(a(?i)b)c","CYjrwVi",[])),
-?line <<"CYjrwVi">> = iolist_to_binary(re:replace("aBc","(a(?i)b)c","CYjrwVi",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)b)c","STYFgfjhE&dcc",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)b)c","STYFgfjhE&dcc",[global])),
-?line <<"abC">> = iolist_to_binary(re:replace("abC","(a(?i)b)c","BAcmfc\\1fAfr&o",[])),
-?line <<"abC">> = iolist_to_binary(re:replace("abC","(a(?i)b)c","BAcmfc\\1fAfr&o",[global])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","(a(?i)b)c","NGkAgBCJxbCgR",[])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","(a(?i)b)c","NGkAgBCJxbCgR",[global])),
-?line <<"Abc">> = iolist_to_binary(re:replace("Abc","(a(?i)b)c","aS&kKYGwkOB&YhadhLX",[])),
-?line <<"Abc">> = iolist_to_binary(re:replace("Abc","(a(?i)b)c","aS&kKYGwkOB&YhadhLX",[global])),
-?line <<"ABc">> = iolist_to_binary(re:replace("ABc","(a(?i)b)c","hP\\1RiAIeDp",[])),
-?line <<"ABc">> = iolist_to_binary(re:replace("ABc","(a(?i)b)c","hP\\1RiAIeDp",[global])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","(a(?i)b)c","Jj&j\\1&I&\\1&CR\\1qDG",[])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","(a(?i)b)c","Jj&j\\1&I&\\1&CR\\1qDG",[global])),
-?line <<"AbC">> = iolist_to_binary(re:replace("AbC","(a(?i)b)c","\\1h\\1XCNuqcxa",[])),
-?line <<"AbC">> = iolist_to_binary(re:replace("AbC","(a(?i)b)c","\\1h\\1XCNuqcxa",[global])),
-?line <<"hsDxrqJjHQabc">> = iolist_to_binary(re:replace("abc","a(?i:b)c","hsDxrqJjHQ&",[])),
-?line <<"hsDxrqJjHQabc">> = iolist_to_binary(re:replace("abc","a(?i:b)c","hsDxrqJjHQ&",[global])),
-?line <<"QltXULOSWaBcFaBcS">> = iolist_to_binary(re:replace("aBc","a(?i:b)c","Qlt\\1XU\\1L\\1OSW&F&S",[])),
-?line <<"QltXULOSWaBcFaBcS">> = iolist_to_binary(re:replace("aBc","a(?i:b)c","Qlt\\1XU\\1L\\1OSW&F&S",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)c","owyoniUsut",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)c","owyoniUsut",[global])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","a(?i:b)c","unB&TlphDWAD",[])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","a(?i:b)c","unB&TlphDWAD",[global])),
-?line <<"abC">> = iolist_to_binary(re:replace("abC","a(?i:b)c","\\1XaX&kAbe&\\1V",[])),
-?line <<"abC">> = iolist_to_binary(re:replace("abC","a(?i:b)c","\\1XaX&kAbe&\\1V",[global])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)c","IY\\1aQ&tM\\1",[])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)c","IY\\1aQ&tM\\1",[global])),
-?line <<"aBcOHQouBOaBc">> = iolist_to_binary(re:replace("aBc","a(?i:b)*c","&O\\1HQo\\1uBO&",[])),
-?line <<"aBcOHQouBOaBc">> = iolist_to_binary(re:replace("aBc","a(?i:b)*c","&O\\1HQo\\1uBO&",[global])),
-?line <<"lvjhpFaBBceaBBciWQNaBBcr">> = iolist_to_binary(re:replace("aBBc","a(?i:b)*c","lvjhpF&e&i\\1WQN\\1&r",[])),
-?line <<"lvjhpFaBBceaBBciWQNaBBcr">> = iolist_to_binary(re:replace("aBBc","a(?i:b)*c","lvjhpF&e&i\\1WQN\\1&r",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)*c","\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)*c","\\1",[global])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)*c","OaR&&ytX",[])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)*c","OaR&&ytX",[global])),
-?line <<"aBBC">> = iolist_to_binary(re:replace("aBBC","a(?i:b)*c","Su",[])),
-?line <<"aBBC">> = iolist_to_binary(re:replace("aBBC","a(?i:b)*c","Su",[global])),
-?line <<"abcdabcdalFfabcdsPxC">> = iolist_to_binary(re:replace("abcd","a(?=b(?i)c)\\w\\wd","&&alFf&sPxC",[])),
-?line <<"abcdabcdalFfabcdsPxC">> = iolist_to_binary(re:replace("abcd","a(?=b(?i)c)\\w\\wd","&&alFf&sPxC",[global])),
-?line <<"hNuQEFvcSEabCdQTlwEabCd">> = iolist_to_binary(re:replace("abCd","a(?=b(?i)c)\\w\\wd","hNuQEFvcSE\\1&QTlwE&",[])),
-?line <<"hNuQEFvcSEabCdQTlwEabCd">> = iolist_to_binary(re:replace("abCd","a(?=b(?i)c)\\w\\wd","hNuQEFvcSE\\1&QTlwE&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?=b(?i)c)\\w\\wd","YLT",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?=b(?i)c)\\w\\wd","YLT",[global])),
-?line <<"aBCd">> = iolist_to_binary(re:replace("aBCd","a(?=b(?i)c)\\w\\wd","u",[])),
-?line <<"aBCd">> = iolist_to_binary(re:replace("aBCd","a(?=b(?i)c)\\w\\wd","u",[global])),
-?line <<"abcD">> = iolist_to_binary(re:replace("abcD","a(?=b(?i)c)\\w\\wd","PIaL\\1rCHujWQjtBluw",[])),
-?line <<"abcD">> = iolist_to_binary(re:replace("abcD","a(?=b(?i)c)\\w\\wd","PIaL\\1rCHujWQjtBluw",[global])),
-?line <<"JklClgvcUHdcbpmore than million">> = iolist_to_binary(re:replace("more than million","(?s-i:more.*than).*million","JklCl\\1gvc\\1UHdcbp&",[caseless])),
-?line <<"JklClgvcUHdcbpmore than million">> = iolist_to_binary(re:replace("more than million","(?s-i:more.*than).*million","JklCl\\1gvc\\1UHdcbp&",[caseless,
- global])),
-?line <<"RaiCEcYVVcTj">> = iolist_to_binary(re:replace("more than MILLION","(?s-i:more.*than).*million","R\\1\\1\\1aiCEcYVVcTj",[caseless])),
-?line <<"RaiCEcYVVcTj">> = iolist_to_binary(re:replace("more than MILLION","(?s-i:more.*than).*million","R\\1\\1\\1aiCEcYVVcTj",[caseless,
- global])),
-?line <<"AGtSe">> = iolist_to_binary(re:replace("more
- than Million","(?s-i:more.*than).*million","AGtSe",[caseless])),
-?line <<"AGtSe">> = iolist_to_binary(re:replace("more
- than Million","(?s-i:more.*than).*million","AGtSe",[caseless,global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s-i:more.*than).*million","vIAbYe&Vw\\1&VD",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s-i:more.*than).*million","vIAbYe&Vw\\1&VD",[caseless,
- global])),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?s-i:more.*than).*million","LhBYPjwD\\1kJ\\1",[caseless])),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?s-i:more.*than).*million","LhBYPjwD\\1kJ\\1",[caseless,
- global])),
-?line <<"more
+zzz","\\Aabc\\z","\\1AYG&TDth",[multiline,global])),
+ <<"1D">> = iolist_to_binary(re:replace("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+","D",[])),
+ <<"1D">> = iolist_to_binary(re:replace("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+","D",[global])),
+ <<"1.875Vkl.875egB.875000282cg">> = iolist_to_binary(re:replace("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+","\\1Vkl\\1egB&cg",[])),
+ <<"1.875Vkl.875egB.875000282cg">> = iolist_to_binary(re:replace("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+","\\1Vkl\\1egB&cg",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+","d&&VkB&QYebMC",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+","d&&VkB&QYebMC",[global])),
+ <<"1.235">> = iolist_to_binary(re:replace("1.235","(?>(\\.\\d\\d[1-9]?))\\d+","i\\1S\\1\\1&Yq&Pg&J&\\1",[])),
+ <<"1.235">> = iolist_to_binary(re:replace("1.235","(?>(\\.\\d\\d[1-9]?))\\d+","i\\1S\\1\\1&Yq&Pg&J&\\1",[global])),
+ <<"cjqYdkkpartyparty">> = iolist_to_binary(re:replace("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$","cjqYdkk\\1\\1",[])),
+ <<"cjqYdkkpartyparty">> = iolist_to_binary(re:replace("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$","cjqYdkk\\1\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^((?>\\w+)|(?>\\s+))*$","BK",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^((?>\\w+)|(?>\\s+))*$","BK",[global])),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(re:replace("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$","sakHEC\\1tyC",[])),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(re:replace("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$","sakHEC\\1tyC",[global])),
+ <<"a12345ax12345a">> = iolist_to_binary(re:replace("12345a","(\\d+)(\\w)","a&x&",[])),
+ <<"a12345ax12345a">> = iolist_to_binary(re:replace("12345a","(\\d+)(\\w)","a&x&",[global])),
+ <<"12345Mx1234LDmSq+">> = iolist_to_binary(re:replace("12345+","(\\d+)(\\w)","&Mx\\1LDmSq",[])),
+ <<"12345Mx1234LDmSq+">> = iolist_to_binary(re:replace("12345+","(\\d+)(\\w)","&Mx\\1LDmSq",[global])),
+ <<"kx12345GkJIBKkR12345aIDW12345ar">> = iolist_to_binary(re:replace("12345a","((?>\\d+))(\\w)","kx\\1GkJIBKkR&IDW&r",[])),
+ <<"kx12345GkJIBKkR12345aIDW12345ar">> = iolist_to_binary(re:replace("12345a","((?>\\d+))(\\w)","kx\\1GkJIBKkR&IDW&r",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?>\\d+))(\\w)","AFie\\1JMiAGf&BhuHi\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?>\\d+))(\\w)","AFie\\1JMiAGf&BhuHi\\1",[global])),
+ <<"12345+">> = iolist_to_binary(re:replace("12345+","((?>\\d+))(\\w)","l&&bFVdpjaGHV",[])),
+ <<"12345+">> = iolist_to_binary(re:replace("12345+","((?>\\d+))(\\w)","l&&bFVdpjaGHV",[global])),
+ <<"EqHtaaabaaabaaabSwdBiGUaaab">> = iolist_to_binary(re:replace("aaab","(?>a+)b","EqHt&&&SwdBiGU&",[])),
+ <<"EqHtaaabaaabaaabSwdBiGUaaab">> = iolist_to_binary(re:replace("aaab","(?>a+)b","EqHt&&&SwdBiGU&",[global])),
+ <<"SfjgLalqtcaaabaaablpXe">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","SfjgLalqtc\\1&lpXe",[])),
+ <<"SfjgLalqtcaaabaaablpXe">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","SfjgLalqtc\\1&lpXe",[global])),
+ ok.
+run12() ->
+ <<"uUMJaaabSIfpB">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","uUMJ&SIfpB",[])),
+ <<"uUMJaaabSIfpB">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","uUMJ&SIfpB",[global])),
+ <<"aaaYgHODtKiOcNErSSbbbccc">> = iolist_to_binary(re:replace("aaabbbccc","(?>b)+","YgHODtKiOcNErSS&\\1",[])),
+ <<"aaaYgHODtKiOcNErSSbbbccc">> = iolist_to_binary(re:replace("aaabbbccc","(?>b)+","YgHODtKiOcNErSS&\\1",[global])),
+ <<"oaaabbbbcaaabbbbcEpdElkPiPeaeLnncccd">> = iolist_to_binary(re:replace("aaabbbbccccd","(?>a+|b+|c+)*c","o\\1&&EpdEl\\1kPiPeaeLnn",[])),
+ <<"oaaabbbbcaaabbbbcEpdElkPiPeaeLnnoccEpdElkPiPeaeLnnoccEpdElkPiPeaeLnnoccEpdElkPiPeaeLnnd">> = iolist_to_binary(re:replace("aaabbbbccccd","(?>a+|b+|c+)*c","o\\1&&EpdEl\\1kPiPeaeLnn",[global])),
+ <<"((HxYTsih">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","HxYTsih",[])),
+ <<"((HxYTsih">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","HxYTsih",[global])),
+ <<"iJnuXdUjqgsabcM(abc)OUgSEW">> = iolist_to_binary(re:replace("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","iJnuXdUjqgs\\1M&OUgSEW",[])),
+ <<"iJnuXdUjqgsabcM(abc)OUgSEW">> = iolist_to_binary(re:replace("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","iJnuXdUjqgs\\1M&OUgSEW",[global])),
+ <<"oxyzdq">> = iolist_to_binary(re:replace("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","o\\1dq",[])),
+ <<"oxyzdq">> = iolist_to_binary(re:replace("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)","o\\1dq",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)","RViX",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)","RViX",[global])),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)","H",[])),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)","H",[global])),
+ <<"tbhUMBhabLFA">> = iolist_to_binary(re:replace("ab","a(?-i)b","tbhUMBh&\\1LFA",[caseless])),
+ <<"tbhUMBhabLFA">> = iolist_to_binary(re:replace("ab","a(?-i)b","tbhUMBh&\\1LFA",[caseless,
+ global])),
+ <<"QUAETVEmTTESUWK">> = iolist_to_binary(re:replace("Ab","a(?-i)b","QUAETVEmTT\\1\\1ESUWK",[caseless])),
+ <<"QUAETVEmTTESUWK">> = iolist_to_binary(re:replace("Ab","a(?-i)b","QUAETVEmTT\\1\\1ESUWK",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?-i)b","\\1UHB",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?-i)b","\\1UHB",[caseless,
+ global])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","a(?-i)b","\\1\\1tHVtVAphgcPH",[caseless])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","a(?-i)b","\\1\\1tHVtVAphgcPH",[caseless,
+ global])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","a(?-i)b","EHcIhNYa\\1KSgqWOK",[caseless])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","a(?-i)b","EHcIhNYa\\1KSgqWOK",[caseless,
+ global])),
+ <<"FILLIygQ">> = iolist_to_binary(re:replace("a bcd e","(a (?x)b c)d e","FILLIygQ",[])),
+ <<"FILLIygQ">> = iolist_to_binary(re:replace("a bcd e","(a (?x)b c)d e","FILLIygQ",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a (?x)b c)d e","wJGN&cKBOuESq\\1&Wj",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a (?x)b c)d e","wJGN&cKBOuESq\\1&Wj",[global])),
+ <<"a b cd e">> = iolist_to_binary(re:replace("a b cd e","(a (?x)b c)d e","A\\1AwoRg&BJXQG",[])),
+ <<"a b cd e">> = iolist_to_binary(re:replace("a b cd e","(a (?x)b c)d e","A\\1AwoRg&BJXQG",[global])),
+ <<"abcd e">> = iolist_to_binary(re:replace("abcd e","(a (?x)b c)d e","u",[])),
+ <<"abcd e">> = iolist_to_binary(re:replace("abcd e","(a (?x)b c)d e","u",[global])),
+ <<"a bcde">> = iolist_to_binary(re:replace("a bcde","(a (?x)b c)d e","oNi\\1yapjj\\1GmPvu\\1Y\\1qv",[])),
+ <<"a bcde">> = iolist_to_binary(re:replace("a bcde","(a (?x)b c)d e","oNi\\1yapjj\\1GmPvu\\1Y\\1qv",[global])),
+ <<"Aa bcde fa bcde faa bcde fEL">> = iolist_to_binary(re:replace("a bcde f","(a b(?x)c d (?-x)e f)","A&&a&EL",[])),
+ <<"Aa bcde fa bcde faa bcde fEL">> = iolist_to_binary(re:replace("a bcde f","(a b(?x)c d (?-x)e f)","A&&a&EL",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a b(?x)c d (?-x)e f)","tNNP\\1V&C",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a b(?x)c d (?-x)e f)","tNNP\\1V&C",[global])),
+ <<"abcdef">> = iolist_to_binary(re:replace("abcdef","(a b(?x)c d (?-x)e f)","ty&TPg&J\\1hrKvQIX\\1",[])),
+ <<"abcdef">> = iolist_to_binary(re:replace("abcdef","(a b(?x)c d (?-x)e f)","ty&TPg&J\\1hrKvQIX\\1",[global])),
+ <<"Bfe">> = iolist_to_binary(re:replace("abc","(a(?i)b)c","Bfe",[])),
+ <<"Bfe">> = iolist_to_binary(re:replace("abc","(a(?i)b)c","Bfe",[global])),
+ <<"aBaBeoqaBaBdaIDJFJSKhel">> = iolist_to_binary(re:replace("aBc","(a(?i)b)c","\\1\\1eoq\\1\\1daIDJFJSKhel",[])),
+ <<"aBaBeoqaBaBdaIDJFJSKhel">> = iolist_to_binary(re:replace("aBc","(a(?i)b)c","\\1\\1eoq\\1\\1daIDJFJSKhel",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)b)c","RRCuLD&CCSP&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)b)c","RRCuLD&CCSP&",[global])),
+ <<"abC">> = iolist_to_binary(re:replace("abC","(a(?i)b)c","&YVGhj",[])),
+ <<"abC">> = iolist_to_binary(re:replace("abC","(a(?i)b)c","&YVGhj",[global])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","(a(?i)b)c","&\\1ABy\\1Tud",[])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","(a(?i)b)c","&\\1ABy\\1Tud",[global])),
+ <<"Abc">> = iolist_to_binary(re:replace("Abc","(a(?i)b)c","vHc&EssOdEtsm",[])),
+ <<"Abc">> = iolist_to_binary(re:replace("Abc","(a(?i)b)c","vHc&EssOdEtsm",[global])),
+ <<"ABc">> = iolist_to_binary(re:replace("ABc","(a(?i)b)c","&&O",[])),
+ <<"ABc">> = iolist_to_binary(re:replace("ABc","(a(?i)b)c","&&O",[global])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","(a(?i)b)c","&&&G\\1GLMkRej\\1y\\1aOQ",[])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","(a(?i)b)c","&&&G\\1GLMkRej\\1y\\1aOQ",[global])),
+ <<"AbC">> = iolist_to_binary(re:replace("AbC","(a(?i)b)c","ajN\\1emNFkTh&UCTlp&Y",[])),
+ <<"AbC">> = iolist_to_binary(re:replace("AbC","(a(?i)b)c","ajN\\1emNFkTh&UCTlp&Y",[global])),
+ <<"fabcabcccGlcVpJl">> = iolist_to_binary(re:replace("abc","a(?i:b)c","f&&ccGlcVpJl",[])),
+ <<"fabcabcccGlcVpJl">> = iolist_to_binary(re:replace("abc","a(?i:b)c","f&&ccGlcVpJl",[global])),
+ <<"NeHDaBcCVyaBcpFA">> = iolist_to_binary(re:replace("aBc","a(?i:b)c","Ne\\1\\1\\1HD&C\\1Vy&pFA",[])),
+ <<"NeHDaBcCVyaBcpFA">> = iolist_to_binary(re:replace("aBc","a(?i:b)c","Ne\\1\\1\\1HD&C\\1Vy&pFA",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)c","Sqq",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)c","Sqq",[global])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","a(?i:b)c","&FRMp\\1nIrrC\\1IVSckPvd",[])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","a(?i:b)c","&FRMp\\1nIrrC\\1IVSckPvd",[global])),
+ <<"abC">> = iolist_to_binary(re:replace("abC","a(?i:b)c","x\\1WM&dj&&KIBo",[])),
+ <<"abC">> = iolist_to_binary(re:replace("abC","a(?i:b)c","x\\1WM&dj&&KIBo",[global])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)c","XiKEHtEtj",[])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)c","XiKEHtEtj",[global])),
+ <<"SjNSaBcGWaBcwcaBcTf">> = iolist_to_binary(re:replace("aBc","a(?i:b)*c","\\1\\1SjNS&GW&wc&Tf",[])),
+ <<"SjNSaBcGWaBcwcaBcTf">> = iolist_to_binary(re:replace("aBc","a(?i:b)*c","\\1\\1SjNS&GW&wc&Tf",[global])),
+ <<"rOaBBckjJDolGaBBcie">> = iolist_to_binary(re:replace("aBBc","a(?i:b)*c","rO&kjJDolG&\\1ie",[])),
+ <<"rOaBBckjJDolGaBBcie">> = iolist_to_binary(re:replace("aBBc","a(?i:b)*c","rO&kjJDolG&\\1ie",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)*c","rnHfd\\1uJBJn",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?i:b)*c","rnHfd\\1uJBJn",[global])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)*c","T",[])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","a(?i:b)*c","T",[global])),
+ <<"aBBC">> = iolist_to_binary(re:replace("aBBC","a(?i:b)*c","qC&IV\\1WPwD&&raPOEJG",[])),
+ <<"aBBC">> = iolist_to_binary(re:replace("aBBC","a(?i:b)*c","qC&IV\\1WPwD&&raPOEJG",[global])),
+ <<"fxbDabcdcebhuXknd">> = iolist_to_binary(re:replace("abcd","a(?=b(?i)c)\\w\\wd","fxbD&cebhuX\\1knd",[])),
+ <<"fxbDabcdcebhuXknd">> = iolist_to_binary(re:replace("abcd","a(?=b(?i)c)\\w\\wd","fxbD&cebhuX\\1knd",[global])),
+ <<"hmNjfiwabCdOns">> = iolist_to_binary(re:replace("abCd","a(?=b(?i)c)\\w\\wd","hmN\\1jfiw&On\\1s",[])),
+ <<"hmNjfiwabCdOns">> = iolist_to_binary(re:replace("abCd","a(?=b(?i)c)\\w\\wd","hmN\\1jfiw&On\\1s",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?=b(?i)c)\\w\\wd","l",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?=b(?i)c)\\w\\wd","l",[global])),
+ <<"aBCd">> = iolist_to_binary(re:replace("aBCd","a(?=b(?i)c)\\w\\wd","QVfGTQBraI&PoV&&B\\1B",[])),
+ <<"aBCd">> = iolist_to_binary(re:replace("aBCd","a(?=b(?i)c)\\w\\wd","QVfGTQBraI&PoV&&B\\1B",[global])),
+ <<"abcD">> = iolist_to_binary(re:replace("abcD","a(?=b(?i)c)\\w\\wd","WTVxdU\\1Ql&Ori\\1DCqn&",[])),
+ <<"abcD">> = iolist_to_binary(re:replace("abcD","a(?=b(?i)c)\\w\\wd","WTVxdU\\1Ql&Ori\\1DCqn&",[global])),
+ <<"yHdfkVmore than millionmore than millione">> = iolist_to_binary(re:replace("more than million","(?s-i:more.*than).*million","yHd\\1fkV&&e\\1",[caseless])),
+ <<"yHdfkVmore than millionmore than millione">> = iolist_to_binary(re:replace("more than million","(?s-i:more.*than).*million","yHd\\1fkV&&e\\1",[caseless,
+ global])),
+ <<"mQsFkPLr">> = iolist_to_binary(re:replace("more than MILLION","(?s-i:more.*than).*million","mQsFkPLr",[caseless])),
+ <<"mQsFkPLr">> = iolist_to_binary(re:replace("more than MILLION","(?s-i:more.*than).*million","mQsFkPLr",[caseless,
+ global])),
+ <<"mvDmore
+ than MillionmVTJEmore
+ than MillionTJNmore
+ than MillionLwu">> = iolist_to_binary(re:replace("more
+ than Million","(?s-i:more.*than).*million","mvD&mVTJE&TJN&Lwu",[caseless])),
+ <<"mvDmore
+ than MillionmVTJEmore
+ than MillionTJNmore
+ than MillionLwu">> = iolist_to_binary(re:replace("more
+ than Million","(?s-i:more.*than).*million","mvD&mVTJE&TJN&Lwu",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s-i:more.*than).*million","t\\1vYtKJq&frCR\\1",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?s-i:more.*than).*million","t\\1vYtKJq&frCR\\1",[caseless,
+ global])),
+ <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?s-i:more.*than).*million","\\1gn&G\\1&",[caseless])),
+ <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?s-i:more.*than).*million","\\1gn&G\\1&",[caseless,
+ global])),
+ <<"more
than
million">> = iolist_to_binary(re:replace("more
than
- million","(?s-i:more.*than).*million","SSp\\1ttOwEGO&H",[caseless])),
-?line <<"more
+ million","(?s-i:more.*than).*million","WmlNcmK\\1\\1DMpX\\1WToOHF",[caseless])),
+ <<"more
than
million">> = iolist_to_binary(re:replace("more
than
- million","(?s-i:more.*than).*million","SSp\\1ttOwEGO&H",[caseless,
- global])),
-?line <<"dmore than millionhFexWTaTmclBHK">> = iolist_to_binary(re:replace("more than million","(?:(?s-i)more.*than).*million","d&hFexWTaT\\1\\1mc\\1\\1lBHK",[caseless])),
-?line <<"dmore than millionhFexWTaTmclBHK">> = iolist_to_binary(re:replace("more than million","(?:(?s-i)more.*than).*million","d&hFexWTaT\\1\\1mc\\1\\1lBHK",[caseless,
- global])),
-?line <<"wcVAikDmore than MILLIONFsmore than MILLIONIceKiuDm">> = iolist_to_binary(re:replace("more than MILLION","(?:(?s-i)more.*than).*million","wcVAikD&Fs&Ice\\1KiuDm",[caseless])),
-?line <<"wcVAikDmore than MILLIONFsmore than MILLIONIceKiuDm">> = iolist_to_binary(re:replace("more than MILLION","(?:(?s-i)more.*than).*million","wcVAikD&Fs&Ice\\1KiuDm",[caseless,
- global])),
-?line <<"BMxnsX">> = iolist_to_binary(re:replace("more
- than Million","(?:(?s-i)more.*than).*million","BMx\\1nsX",[caseless])),
-?line <<"BMxnsX">> = iolist_to_binary(re:replace("more
- than Million","(?:(?s-i)more.*than).*million","BMx\\1nsX",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?s-i)more.*than).*million","e\\1KeC\\1LrMA",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?s-i)more.*than).*million","e\\1KeC\\1LrMA",[caseless,
- global])),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?:(?s-i)more.*than).*million","Oo&U&\\1O\\1royLyh\\1Uj\\1&e",[caseless])),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?:(?s-i)more.*than).*million","Oo&U&\\1O\\1royLyh\\1Uj\\1&e",[caseless,
- global])),
-?line <<"more
+ million","(?s-i:more.*than).*million","WmlNcmK\\1\\1DMpX\\1WToOHF",[caseless,
+ global])),
+ <<"psmore than millionTuKupIvfmRjB">> = iolist_to_binary(re:replace("more than million","(?:(?s-i)more.*than).*million","ps&T\\1uKupIvfmRjB",[caseless])),
+ <<"psmore than millionTuKupIvfmRjB">> = iolist_to_binary(re:replace("more than million","(?:(?s-i)more.*than).*million","ps&T\\1uKupIvfmRjB",[caseless,
+ global])),
+ <<"IhKcRCpQge">> = iolist_to_binary(re:replace("more than MILLION","(?:(?s-i)more.*than).*million","I\\1\\1hKcRCpQg\\1e",[caseless])),
+ <<"IhKcRCpQge">> = iolist_to_binary(re:replace("more than MILLION","(?:(?s-i)more.*than).*million","I\\1\\1hKcRCpQg\\1e",[caseless,
+ global])),
+ <<"more
+ than MillionOISUnAOTGvtRakU">> = iolist_to_binary(re:replace("more
+ than Million","(?:(?s-i)more.*than).*million","&OISU\\1nAOTGvtRakU\\1",[caseless])),
+ <<"more
+ than MillionOISUnAOTGvtRakU">> = iolist_to_binary(re:replace("more
+ than Million","(?:(?s-i)more.*than).*million","&OISU\\1nAOTGvtRakU\\1",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?s-i)more.*than).*million","TNips\\1&J\\1mqnbuyC",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?s-i)more.*than).*million","TNips\\1&J\\1mqnbuyC",[caseless,
+ global])),
+ <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?:(?s-i)more.*than).*million","\\1qCci&VKLJ&QtwPOr",[caseless])),
+ <<"MORE THAN MILLION">> = iolist_to_binary(re:replace("MORE THAN MILLION","(?:(?s-i)more.*than).*million","\\1qCci&VKLJ&QtwPOr",[caseless,
+ global])),
+ <<"more
than
million">> = iolist_to_binary(re:replace("more
than
- million","(?:(?s-i)more.*than).*million","rsd\\1UhwpU\\1&S",[caseless])),
-?line <<"more
+ million","(?:(?s-i)more.*than).*million","N",[caseless])),
+ <<"more
than
million">> = iolist_to_binary(re:replace("more
than
- million","(?:(?s-i)more.*than).*million","rsd\\1UhwpU\\1&S",[caseless,
- global])),
-?line <<"rTdtycUabcoabcVaVEt">> = iolist_to_binary(re:replace("abc","(?>a(?i)b+)+c","r\\1\\1T\\1dtycU&o&V\\1aV\\1Et",[])),
-?line <<"rTdtycUabcoabcVaVEt">> = iolist_to_binary(re:replace("abc","(?>a(?i)b+)+c","r\\1\\1T\\1dtycU&o&V\\1aV\\1Et",[global])),
-?line <<"geFTAcqhWJc">> = iolist_to_binary(re:replace("aBbc","(?>a(?i)b+)+c","geFTAc\\1qhWJ\\1c",[])),
-?line <<"geFTAcqhWJc">> = iolist_to_binary(re:replace("aBbc","(?>a(?i)b+)+c","geFTAc\\1qhWJ\\1c",[global])),
-?line <<"lHStMaBBcnaBBcjCaBBcgdfm">> = iolist_to_binary(re:replace("aBBc","(?>a(?i)b+)+c","lHStM&n&jC&g\\1df\\1m",[])),
-?line <<"lHStMaBBcnaBBcjCaBBcgdfm">> = iolist_to_binary(re:replace("aBBc","(?>a(?i)b+)+c","lHStM&n&jC&g\\1df\\1m",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>a(?i)b+)+c","U\\1pOiN&FCXl",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>a(?i)b+)+c","U\\1pOiN&FCXl",[global])),
-?line <<"Abc">> = iolist_to_binary(re:replace("Abc","(?>a(?i)b+)+c","h",[])),
-?line <<"Abc">> = iolist_to_binary(re:replace("Abc","(?>a(?i)b+)+c","h",[global])),
-?line <<"abAb">> = iolist_to_binary(re:replace("abAb","(?>a(?i)b+)+c","f\\1\\1DwX\\1Y&y\\1dgv&A\\1",[])),
-?line <<"abAb">> = iolist_to_binary(re:replace("abAb","(?>a(?i)b+)+c","f\\1\\1DwX\\1Y&y\\1dgv&A\\1",[global])),
-?line <<"abbC">> = iolist_to_binary(re:replace("abbC","(?>a(?i)b+)+c","&\\1Gd&r\\1shP",[])),
-?line <<"abbC">> = iolist_to_binary(re:replace("abbC","(?>a(?i)b+)+c","&\\1Gd&r\\1shP",[global])),
-?line <<"VIaLabcabcCabcyvwsI">> = iolist_to_binary(re:replace("abc","(?=a(?i)b)\\w\\wc","VIaL&&C&yvwsI",[])),
-?line <<"VIaLabcabcCabcyvwsI">> = iolist_to_binary(re:replace("abc","(?=a(?i)b)\\w\\wc","VIaL&&C&yvwsI",[global])),
-?line <<"gaBcaBc">> = iolist_to_binary(re:replace("aBc","(?=a(?i)b)\\w\\wc","g&&",[])),
-?line <<"gaBcaBc">> = iolist_to_binary(re:replace("aBc","(?=a(?i)b)\\w\\wc","g&&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=a(?i)b)\\w\\wc","RMcFr&",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=a(?i)b)\\w\\wc","RMcFr&",[global])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?=a(?i)b)\\w\\wc","y\\1&kD&os\\1E",[])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?=a(?i)b)\\w\\wc","y\\1&kD&os\\1E",[global])),
-?line <<"abC">> = iolist_to_binary(re:replace("abC","(?=a(?i)b)\\w\\wc","ms\\1m",[])),
-?line <<"abC">> = iolist_to_binary(re:replace("abC","(?=a(?i)b)\\w\\wc","ms\\1m",[global])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","(?=a(?i)b)\\w\\wc","lD&&vcs",[])),
-?line <<"aBC">> = iolist_to_binary(re:replace("aBC","(?=a(?i)b)\\w\\wc","lD&&vcs",[global])),
-?line <<"abxqXfVViuPuvfMxxcvcj">> = iolist_to_binary(re:replace("abxxc","(?<=a(?i)b)(\\w\\w)c","xqXfVViuPuvfM&vcj",[])),
-?line <<"abxqXfVViuPuvfMxxcvcj">> = iolist_to_binary(re:replace("abxxc","(?<=a(?i)b)(\\w\\w)c","xqXfVViuPuvfM&vcj",[global])),
-?line <<"aBXoxxcXtiuxxXqWYfixxKxxcxxUs">> = iolist_to_binary(re:replace("aBxxc","(?<=a(?i)b)(\\w\\w)c","Xo&Xtiu\\1XqWYfi\\1K&\\1Us",[])),
-?line <<"aBXoxxcXtiuxxXqWYfixxKxxcxxUs">> = iolist_to_binary(re:replace("aBxxc","(?<=a(?i)b)(\\w\\w)c","Xo&Xtiu\\1XqWYfi\\1K&\\1Us",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a(?i)b)(\\w\\w)c","cGWOK&O&A\\1Xq&&aF\\1G",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a(?i)b)(\\w\\w)c","cGWOK&O&A\\1Xq&&aF\\1G",[global])),
-?line <<"Abxxc">> = iolist_to_binary(re:replace("Abxxc","(?<=a(?i)b)(\\w\\w)c","uosfXS&Drr&Nsg",[])),
-?line <<"Abxxc">> = iolist_to_binary(re:replace("Abxxc","(?<=a(?i)b)(\\w\\w)c","uosfXS&Drr&Nsg",[global])),
-?line <<"ABxxc">> = iolist_to_binary(re:replace("ABxxc","(?<=a(?i)b)(\\w\\w)c","mKjv&im",[])),
-?line <<"ABxxc">> = iolist_to_binary(re:replace("ABxxc","(?<=a(?i)b)(\\w\\w)c","mKjv&im",[global])),
-?line <<"abxxC">> = iolist_to_binary(re:replace("abxxC","(?<=a(?i)b)(\\w\\w)c","ferUg\\1J\\1T\\1kWcDAY\\1jM",[])),
-?line <<"abxxC">> = iolist_to_binary(re:replace("abxxC","(?<=a(?i)b)(\\w\\w)c","ferUg\\1J\\1T\\1kWcDAY\\1jM",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("aA","(?:(a)|b)(?(1)A|B)","\\1",[])),
-?line <<"a">> = iolist_to_binary(re:replace("aA","(?:(a)|b)(?(1)A|B)","\\1",[global])),
-?line <<"YdvbBbBsFnnbBKbB">> = iolist_to_binary(re:replace("bB","(?:(a)|b)(?(1)A|B)","Y\\1\\1dv&&\\1sFnn&K&",[])),
-?line <<"YdvbBbBsFnnbBKbB">> = iolist_to_binary(re:replace("bB","(?:(a)|b)(?(1)A|B)","Y\\1\\1dv&&\\1sFnn&K&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(a)|b)(?(1)A|B)","\\1\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(a)|b)(?(1)A|B)","\\1\\1",[global])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?:(a)|b)(?(1)A|B)","\\1To",[])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?:(a)|b)(?(1)A|B)","\\1To",[global])),
-?line <<"bA">> = iolist_to_binary(re:replace("bA","(?:(a)|b)(?(1)A|B)","K\\1UMD",[])),
-?line <<"bA">> = iolist_to_binary(re:replace("bA","(?:(a)|b)(?(1)A|B)","K\\1UMD",[global])),
-?line <<"mLbykSwT">> = iolist_to_binary(re:replace("aa","^(a)?(?(1)a|b)+$","mLbykSwT",[])),
-?line <<"mLbykSwT">> = iolist_to_binary(re:replace("aa","^(a)?(?(1)a|b)+$","mLbykSwT",[global])),
-?line <<"br">> = iolist_to_binary(re:replace("b","^(a)?(?(1)a|b)+$","&r",[])),
-?line <<"br">> = iolist_to_binary(re:replace("b","^(a)?(?(1)a|b)+$","&r",[global])),
-?line <<"yaAboE">> = iolist_to_binary(re:replace("bb","^(a)?(?(1)a|b)+$","yaAb\\1o\\1E",[])),
-?line <<"yaAboE">> = iolist_to_binary(re:replace("bb","^(a)?(?(1)a|b)+$","yaAb\\1o\\1E",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a)?(?(1)a|b)+$","QkLpQarHEu\\1Fi",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a)?(?(1)a|b)+$","QkLpQarHEu\\1Fi",[global])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a)?(?(1)a|b)+$","U",[])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","^(a)?(?(1)a|b)+$","U",[global])),
-?line <<"MoTyD">> = iolist_to_binary(re:replace("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$","M\\1oTyD",[])),
-?line <<"MoTyD">> = iolist_to_binary(re:replace("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$","M\\1oTyD",[global])),
-?line <<"kawc12B">> = iolist_to_binary(re:replace("12","^(?(?=abc)\\w{3}:|\\d\\d)$","k\\1awc&B\\1",[])),
-?line <<"kawc12B">> = iolist_to_binary(re:replace("12","^(?(?=abc)\\w{3}:|\\d\\d)$","k\\1awc&B\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$","TAqA",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$","TAqA",[global])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^(?(?=abc)\\w{3}:|\\d\\d)$","WlKxg",[])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^(?(?=abc)\\w{3}:|\\d\\d)$","WlKxg",[global])),
-?line <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$","O",[])),
-?line <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$","O",[global])),
-?line <<"kNqQd">> = iolist_to_binary(re:replace("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$","kNq\\1Q\\1d",[])),
-?line <<"kNqQd">> = iolist_to_binary(re:replace("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$","kNq\\1Q\\1d",[global])),
-?line <<"Cr">> = iolist_to_binary(re:replace("12","^(?(?!abc)\\d\\d|\\w{3}:)$","\\1C\\1r",[])),
-?line <<"Cr">> = iolist_to_binary(re:replace("12","^(?(?!abc)\\d\\d|\\w{3}:)$","\\1C\\1r",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$","&\\1\\1RHBBR",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$","&\\1\\1RHBBR",[global])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^(?(?!abc)\\d\\d|\\w{3}:)$","P",[])),
-?line <<"123">> = iolist_to_binary(re:replace("123","^(?(?!abc)\\d\\d|\\w{3}:)$","P",[global])),
-?line <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$","&awfl",[])),
-?line <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$","&awfl",[global])),
-?line <<"fooHSXSjJapIqY">> = iolist_to_binary(re:replace("foobar","(?(?<=foo)bar|cat)","HSXSjJ\\1apIqY",[])),
-?line <<"fooHSXSjJapIqY">> = iolist_to_binary(re:replace("foobar","(?(?<=foo)bar|cat)","HSXSjJ\\1apIqY",[global])),
-?line <<"IouuQfOcatNN">> = iolist_to_binary(re:replace("cat","(?(?<=foo)bar|cat)","Iouu\\1QfO&NN\\1",[])),
-?line <<"IouuQfOcatNN">> = iolist_to_binary(re:replace("cat","(?(?<=foo)bar|cat)","Iouu\\1QfO&NN\\1",[global])),
-?line <<"fcatxAWTu">> = iolist_to_binary(re:replace("fcat","(?(?<=foo)bar|cat)","&\\1xAWTu",[])),
-?line <<"fcatxAWTu">> = iolist_to_binary(re:replace("fcat","(?(?<=foo)bar|cat)","&\\1xAWTu",[global])),
-?line <<"fodYcNREMccatAcatyvscatidk">> = iolist_to_binary(re:replace("focat","(?(?<=foo)bar|cat)","dYc\\1N\\1REMc&A&yvs&idk",[])),
-?line <<"fodYcNREMccatAcatyvscatidk">> = iolist_to_binary(re:replace("focat","(?(?<=foo)bar|cat)","dYc\\1N\\1REMc&A&yvs&idk",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<=foo)bar|cat)","FmDOEt&",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<=foo)bar|cat)","FmDOEt&",[global])),
-?line <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<=foo)bar|cat)","Jj&OFdGEDut\\1HjNDH",[])),
-?line <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<=foo)bar|cat)","Jj&OFdGEDut\\1HjNDH",[global])),
-?line <<"fooEGbarEwDYbarCNxYJbarbD">> = iolist_to_binary(re:replace("foobar","(?(?<!foo)cat|bar)","EG&Ew\\1DY&CN\\1xYJ&bD",[])),
-?line <<"fooEGbarEwDYbarCNxYJbarbD">> = iolist_to_binary(re:replace("foobar","(?(?<!foo)cat|bar)","EG&Ew\\1DY&CN\\1xYJ&bD",[global])),
-?line <<"jHKKpLcatBtkhMt">> = iolist_to_binary(re:replace("cat","(?(?<!foo)cat|bar)","jHKKpL&BtkhMt",[])),
-?line <<"jHKKpLcatBtkhMt">> = iolist_to_binary(re:replace("cat","(?(?<!foo)cat|bar)","jHKKpL&BtkhMt",[global])),
-?line <<"fiJOnynFk">> = iolist_to_binary(re:replace("fcat","(?(?<!foo)cat|bar)","iJ\\1O\\1ny\\1nFk",[])),
-?line <<"fiJOnynFk">> = iolist_to_binary(re:replace("fcat","(?(?<!foo)cat|bar)","iJ\\1O\\1ny\\1nFk",[global])),
-?line <<"foWCSvhChIBqicatcatLjMieK">> = iolist_to_binary(re:replace("focat","(?(?<!foo)cat|bar)","WCSvh\\1ChIBqi&&LjMieK",[])),
-?line <<"foWCSvhChIBqicatcatLjMieK">> = iolist_to_binary(re:replace("focat","(?(?<!foo)cat|bar)","WCSvh\\1ChIBqi&&LjMieK",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<!foo)cat|bar)","v&yn",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<!foo)cat|bar)","v&yn",[global])),
-?line <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<!foo)cat|bar)","\\1&\\1\\1&dvNYDwrfFA\\1&d",[])),
-?line <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<!foo)cat|bar)","\\1&\\1\\1&dvNYDwrfFA\\1&d",[global])),
-?line <<"TQKeRLoqn">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) |) ","T\\1\\1QK\\1e\\1RLoqn",[extended])),
-?line <<"TQKeRLoqn">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) |) ","T\\1\\1QK\\1e\\1RLoqn",[extended,
- global])),
-?line <<"Qd(ovEgf(pkOYCuPDq(R">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ","Qd\\1ovEgf\\1pkOYCuPDq\\1R",[extended])),
-?line <<"Qd(ovEgf(pkOYCuPDq(R">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ","Qd\\1ovEgf\\1pkOYCuPDq\\1R",[extended,
- global])),
-?line <<"Dmthe quick QWSbgBeLthe quick E(abcd) fox">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ","Dm\\1&QWSbgBeL&E",[extended])),
-?line <<"Dmthe quick QWSbgBeLthe quick EDm((abcd)QWSbgBeL(abcd)EDm foxQWSbgBeL foxE">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ","Dm\\1&QWSbgBeL&E",[extended,
- global])),
-?line <<"(Ld">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) |) ","Ld",[extended])),
-?line <<"(Ld">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) |) ","Ld",[extended,
- global])),
-?line <<"abcdiCLfuabcdkd">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) ) ","&iCLfu&kd",[extended])),
-?line <<"abcdiCLfuabcdkd">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) ) ","&iCLfu&kd",[extended,
- global])),
-?line <<"uXgnII((abcd)SMj">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ","uXgnII\\1&SMj",[extended])),
-?line <<"uXgnII((abcd)SMj">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ","uXgnII\\1&SMj",[extended,
- global])),
-?line <<"the quick the quick the quick xjaBhsFamkEL(abcd) fox">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ","&&&xjaBhsFa\\1mkEL\\1",[extended])),
-?line <<"the quick the quick the quick xjaBhsFamkEL(abcd)(abcd)(abcd)xjaBhsFa(mkEL( fox fox foxxjaBhsFamkEL">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ","&&&xjaBhsFa\\1mkEL\\1",[extended,
+ million","(?:(?s-i)more.*than).*million","N",[caseless,global])),
+ <<"dAgcabcrYrHG">> = iolist_to_binary(re:replace("abc","(?>a(?i)b+)+c","dAgc&rYrH\\1\\1G",[])),
+ <<"dAgcabcrYrHG">> = iolist_to_binary(re:replace("abc","(?>a(?i)b+)+c","dAgc&rYrH\\1\\1G",[global])),
+ <<"fXy">> = iolist_to_binary(re:replace("aBbc","(?>a(?i)b+)+c","fXy",[])),
+ <<"fXy">> = iolist_to_binary(re:replace("aBbc","(?>a(?i)b+)+c","fXy",[global])),
+ <<"y">> = iolist_to_binary(re:replace("aBBc","(?>a(?i)b+)+c","y",[])),
+ <<"y">> = iolist_to_binary(re:replace("aBBc","(?>a(?i)b+)+c","y",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>a(?i)b+)+c","riGTl\\1gCN&tFIx",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>a(?i)b+)+c","riGTl\\1gCN&tFIx",[global])),
+ <<"Abc">> = iolist_to_binary(re:replace("Abc","(?>a(?i)b+)+c","QnNFHC\\1\\1AJpJokFLyM",[])),
+ <<"Abc">> = iolist_to_binary(re:replace("Abc","(?>a(?i)b+)+c","QnNFHC\\1\\1AJpJokFLyM",[global])),
+ <<"abAb">> = iolist_to_binary(re:replace("abAb","(?>a(?i)b+)+c","yrdamBD",[])),
+ <<"abAb">> = iolist_to_binary(re:replace("abAb","(?>a(?i)b+)+c","yrdamBD",[global])),
+ <<"abbC">> = iolist_to_binary(re:replace("abbC","(?>a(?i)b+)+c","\\1&a&x",[])),
+ <<"abbC">> = iolist_to_binary(re:replace("abbC","(?>a(?i)b+)+c","\\1&a&x",[global])),
+ <<"WnabchdOabcXw">> = iolist_to_binary(re:replace("abc","(?=a(?i)b)\\w\\wc","Wn\\1\\1&hdO&Xw",[])),
+ <<"WnabchdOabcXw">> = iolist_to_binary(re:replace("abc","(?=a(?i)b)\\w\\wc","Wn\\1\\1&hdO&Xw",[global])),
+ <<"NUnsaGHpA">> = iolist_to_binary(re:replace("aBc","(?=a(?i)b)\\w\\wc","NUnsaGHp\\1A",[])),
+ <<"NUnsaGHpA">> = iolist_to_binary(re:replace("aBc","(?=a(?i)b)\\w\\wc","NUnsaGHp\\1A",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=a(?i)b)\\w\\wc","J",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?=a(?i)b)\\w\\wc","J",[global])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?=a(?i)b)\\w\\wc","rA\\1tmLWYJdpHtIJ\\1",[])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?=a(?i)b)\\w\\wc","rA\\1tmLWYJdpHtIJ\\1",[global])),
+ <<"abC">> = iolist_to_binary(re:replace("abC","(?=a(?i)b)\\w\\wc","O",[])),
+ <<"abC">> = iolist_to_binary(re:replace("abC","(?=a(?i)b)\\w\\wc","O",[global])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","(?=a(?i)b)\\w\\wc","xrOeHr\\1Ws\\1FvkVpoU",[])),
+ <<"aBC">> = iolist_to_binary(re:replace("aBC","(?=a(?i)b)\\w\\wc","xrOeHr\\1Ws\\1FvkVpoU",[global])),
+ <<"abcFSPxxcxxctgbJkxxNdQS">> = iolist_to_binary(re:replace("abxxc","(?<=a(?i)b)(\\w\\w)c","cFSP&&tgbJk\\1NdQS",[])),
+ <<"abcFSPxxcxxctgbJkxxNdQS">> = iolist_to_binary(re:replace("abxxc","(?<=a(?i)b)(\\w\\w)c","cFSP&&tgbJk\\1NdQS",[global])),
+ <<"aBQNAt">> = iolist_to_binary(re:replace("aBxxc","(?<=a(?i)b)(\\w\\w)c","QNAt",[])),
+ <<"aBQNAt">> = iolist_to_binary(re:replace("aBxxc","(?<=a(?i)b)(\\w\\w)c","QNAt",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a(?i)b)(\\w\\w)c","inxwegNttyrc",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a(?i)b)(\\w\\w)c","inxwegNttyrc",[global])),
+ <<"Abxxc">> = iolist_to_binary(re:replace("Abxxc","(?<=a(?i)b)(\\w\\w)c","YUsRHD&",[])),
+ <<"Abxxc">> = iolist_to_binary(re:replace("Abxxc","(?<=a(?i)b)(\\w\\w)c","YUsRHD&",[global])),
+ <<"ABxxc">> = iolist_to_binary(re:replace("ABxxc","(?<=a(?i)b)(\\w\\w)c","CXJBefD\\1kemWbn&fyJ",[])),
+ <<"ABxxc">> = iolist_to_binary(re:replace("ABxxc","(?<=a(?i)b)(\\w\\w)c","CXJBefD\\1kemWbn&fyJ",[global])),
+ <<"abxxC">> = iolist_to_binary(re:replace("abxxC","(?<=a(?i)b)(\\w\\w)c","UjT\\1hGcc&\\1K",[])),
+ <<"abxxC">> = iolist_to_binary(re:replace("abxxC","(?<=a(?i)b)(\\w\\w)c","UjT\\1hGcc&\\1K",[global])),
+ <<"e">> = iolist_to_binary(re:replace("aA","(?:(a)|b)(?(1)A|B)","e",[])),
+ <<"e">> = iolist_to_binary(re:replace("aA","(?:(a)|b)(?(1)A|B)","e",[global])),
+ <<"NMcPpQyHaNfjCbBaD">> = iolist_to_binary(re:replace("bB","(?:(a)|b)(?(1)A|B)","\\1NMcPpQyHaNfjC&aD",[])),
+ <<"NMcPpQyHaNfjCbBaD">> = iolist_to_binary(re:replace("bB","(?:(a)|b)(?(1)A|B)","\\1NMcPpQyHaNfjC&aD",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(a)|b)(?(1)A|B)","\\1Q",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(a)|b)(?(1)A|B)","\\1Q",[global])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?:(a)|b)(?(1)A|B)","&SMEo&XGCCInDGmiby",[])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?:(a)|b)(?(1)A|B)","&SMEo&XGCCInDGmiby",[global])),
+ <<"bA">> = iolist_to_binary(re:replace("bA","(?:(a)|b)(?(1)A|B)","UUW&\\1&SC\\1",[])),
+ <<"bA">> = iolist_to_binary(re:replace("bA","(?:(a)|b)(?(1)A|B)","UUW&\\1&SC\\1",[global])),
+ <<"FeSwwOaSaLaaSV">> = iolist_to_binary(re:replace("aa","^(a)?(?(1)a|b)+$","FeSwwO\\1S\\1L&SV",[])),
+ <<"FeSwwOaSaLaaSV">> = iolist_to_binary(re:replace("aa","^(a)?(?(1)a|b)+$","FeSwwO\\1S\\1L&SV",[global])),
+ <<"JTW">> = iolist_to_binary(re:replace("b","^(a)?(?(1)a|b)+$","JTW",[])),
+ <<"JTW">> = iolist_to_binary(re:replace("b","^(a)?(?(1)a|b)+$","JTW",[global])),
+ <<"rbbbbmbfbxJobbhlCHbbbbdR">> = iolist_to_binary(re:replace("bb","^(a)?(?(1)a|b)+$","r&&mbfbxJo&hlCH&&dR\\1",[])),
+ <<"rbbbbmbfbxJobbhlCHbbbbdR">> = iolist_to_binary(re:replace("bb","^(a)?(?(1)a|b)+$","r&&mbfbxJo&hlCH&&dR\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a)?(?(1)a|b)+$","RLV&s",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a)?(?(1)a|b)+$","RLV&s",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a)?(?(1)a|b)+$","QoxGv\\1Pa&\\1mowml",[])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","^(a)?(?(1)a|b)+$","QoxGv\\1Pa&\\1mowml",[global])),
+ <<"cfabc:abc:">> = iolist_to_binary(re:replace("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$","cf&&",[])),
+ <<"cfabc:abc:">> = iolist_to_binary(re:replace("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$","cf&&",[global])),
+ <<"IKeMxScgslGf">> = iolist_to_binary(re:replace("12","^(?(?=abc)\\w{3}:|\\d\\d)$","IKeMxScgsl\\1\\1Gf",[])),
+ <<"IKeMxScgslGf">> = iolist_to_binary(re:replace("12","^(?(?=abc)\\w{3}:|\\d\\d)$","IKeMxScgsl\\1\\1Gf",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$","cCGveJFFUHnS\\1S",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$","cCGveJFFUHnS\\1S",[global])),
+ <<"123">> = iolist_to_binary(re:replace("123","^(?(?=abc)\\w{3}:|\\d\\d)$","kudsG&Hdk",[])),
+ <<"123">> = iolist_to_binary(re:replace("123","^(?(?=abc)\\w{3}:|\\d\\d)$","kudsG&Hdk",[global])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$","&kyqj\\1U\\1\\1\\1",[])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$","&kyqj\\1U\\1\\1\\1",[global])),
+ ok.
+run13() ->
+ <<"yLejabc:ClvDam">> = iolist_to_binary(re:replace("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$","yLej&C\\1lvDa\\1m",[])),
+ <<"yLejabc:ClvDam">> = iolist_to_binary(re:replace("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$","yLej&C\\1lvDa\\1m",[global])),
+ <<"eH12Ase">> = iolist_to_binary(re:replace("12","^(?(?!abc)\\d\\d|\\w{3}:)$","e\\1H&A\\1s\\1\\1e",[])),
+ <<"eH12Ase">> = iolist_to_binary(re:replace("12","^(?(?!abc)\\d\\d|\\w{3}:)$","e\\1H&A\\1s\\1\\1e",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$","SMtlNLKd\\1Va",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$","SMtlNLKd\\1Va",[global])),
+ <<"123">> = iolist_to_binary(re:replace("123","^(?(?!abc)\\d\\d|\\w{3}:)$","VsMY&We",[])),
+ <<"123">> = iolist_to_binary(re:replace("123","^(?(?!abc)\\d\\d|\\w{3}:)$","VsMY&We",[global])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$","j&k\\1tUeAYRn",[])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$","j&k\\1tUeAYRn",[global])),
+ <<"fooS">> = iolist_to_binary(re:replace("foobar","(?(?<=foo)bar|cat)","S\\1",[])),
+ <<"fooS">> = iolist_to_binary(re:replace("foobar","(?(?<=foo)bar|cat)","S\\1",[global])),
+ <<"catdEUboccGWTaRjQo">> = iolist_to_binary(re:replace("cat","(?(?<=foo)bar|cat)","&dEU\\1boccGWTaRjQo\\1",[])),
+ <<"catdEUboccGWTaRjQo">> = iolist_to_binary(re:replace("cat","(?(?<=foo)bar|cat)","&dEU\\1boccGWTaRjQo\\1",[global])),
+ <<"fcatrspJwF">> = iolist_to_binary(re:replace("fcat","(?(?<=foo)bar|cat)","\\1&rs\\1pJwF",[])),
+ <<"fcatrspJwF">> = iolist_to_binary(re:replace("fcat","(?(?<=foo)bar|cat)","\\1&rs\\1pJwF",[global])),
+ <<"foncatePTv">> = iolist_to_binary(re:replace("focat","(?(?<=foo)bar|cat)","n&ePTv",[])),
+ <<"foncatePTv">> = iolist_to_binary(re:replace("focat","(?(?<=foo)bar|cat)","n&ePTv",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<=foo)bar|cat)","jI",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<=foo)bar|cat)","jI",[global])),
+ <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<=foo)bar|cat)","\\1qBlA\\1veXv",[])),
+ <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<=foo)bar|cat)","\\1qBlA\\1veXv",[global])),
+ <<"fooYHnkCeSOb">> = iolist_to_binary(re:replace("foobar","(?(?<!foo)cat|bar)","YHnkCeSOb",[])),
+ <<"fooYHnkCeSOb">> = iolist_to_binary(re:replace("foobar","(?(?<!foo)cat|bar)","YHnkCeSOb",[global])),
+ <<"catcatQAKgfdmvWBVj">> = iolist_to_binary(re:replace("cat","(?(?<!foo)cat|bar)","&&QAK\\1gfdmvWBVj",[])),
+ <<"catcatQAKgfdmvWBVj">> = iolist_to_binary(re:replace("cat","(?(?<!foo)cat|bar)","&&QAK\\1gfdmvWBVj",[global])),
+ <<"fPR">> = iolist_to_binary(re:replace("fcat","(?(?<!foo)cat|bar)","PR",[])),
+ <<"fPR">> = iolist_to_binary(re:replace("fcat","(?(?<!foo)cat|bar)","PR",[global])),
+ <<"fo">> = iolist_to_binary(re:replace("focat","(?(?<!foo)cat|bar)","\\1",[])),
+ <<"fo">> = iolist_to_binary(re:replace("focat","(?(?<!foo)cat|bar)","\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<!foo)cat|bar)","qsIpnmEbaYk\\1H",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?<!foo)cat|bar)","qsIpnmEbaYk\\1H",[global])),
+ <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<!foo)cat|bar)","B",[])),
+ <<"foocat">> = iolist_to_binary(re:replace("foocat","(?(?<!foo)cat|bar)","B",[global])),
+ <<"bclabcdfaLGxBabcdHtjFC">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) |) ","bcl&faLGxB\\1&HtjFC",[extended])),
+ <<"bclabcdfaLGxBabcdHtjFC">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) |) ","bcl&faLGxB\\1&HtjFC",[extended,
+ global])),
+ <<"JpguAHp((E(AF(">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ","JpguAHp\\1\\1E\\1AF\\1",[extended])),
+ <<"JpguAHp((E(AF(">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ","JpguAHp\\1\\1E\\1AF\\1",[extended,
+ global])),
+ <<"yBpRsrthe quick Nr(abcd) fox">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ","yBpRsr&Nr\\1",[extended])),
+ <<"yBpRsrthe quick NryBpRsr(abcd)Nr(yBpRsr foxNr">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ","yBpRsr&Nr\\1",[extended,
+ global])),
+ <<"(dfabcdMfidabcdORabcdXp">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) |) ","df&Mfid\\1\\1&OR&Xp",[extended])),
+ <<"(dfabcdMfidabcdORabcdXp">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) |) ","df&Mfid\\1\\1&OR&Xp",[extended,
+ global])),
+ <<"NEKtshVcSbEQreXJUgabcd">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) ) ","NEKtshVcSbEQre\\1XJUg&",[extended])),
+ <<"NEKtshVcSbEQreXJUgabcd">> = iolist_to_binary(re:replace("abcd","( \\( )? [^()]+ (?(1) \\) ) ","NEKtshVcSbEQre\\1XJUg&",[extended,
+ global])),
+ <<"C">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ","C",[extended])),
+ <<"C">> = iolist_to_binary(re:replace("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ","C",[extended,
+ global])),
+ <<"VsQthe quick tPGwwMthe quick WRxuthe quick (abcd) fox">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ","VsQ&tP\\1Gww\\1M&WRxu&",[extended])),
+ <<"VsQthe quick tPGwwMthe quick WRxuthe quick VsQ(abcd)tP(Gww(M(abcd)WRxu(abcd)VsQ foxtPGwwM foxWRxu fox">> = iolist_to_binary(re:replace("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ","VsQ&tP\\1Gww\\1M&WRxu&",[extended,
global])),
-?line <<"(KuH">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) ) ","K\\1uH",[extended])),
-?line <<"(KuH">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) ) ","K\\1uH",[extended,
- global])),
-?line <<"IMNCUvkRpMGDtA">> = iolist_to_binary(re:replace("12","^(?(2)a|(1)(2))+$","IMNCUvkRpMGDtA",[])),
-?line <<"IMNCUvkRpMGDtA">> = iolist_to_binary(re:replace("12","^(?(2)a|(1)(2))+$","IMNCUvkRpMGDtA",[global])),
-?line <<"YQQcCpqUaDwGin12a1he">> = iolist_to_binary(re:replace("12a","^(?(2)a|(1)(2))+$","YQQcCpqUaDwGin&\\1he",[])),
-?line <<"YQQcCpqUaDwGin12a1he">> = iolist_to_binary(re:replace("12a","^(?(2)a|(1)(2))+$","YQQcCpqUaDwGin&\\1he",[global])),
-?line <<"LiJWEQyka">> = iolist_to_binary(re:replace("12aa","^(?(2)a|(1)(2))+$","LiJWEQyka",[])),
-?line <<"LiJWEQyka">> = iolist_to_binary(re:replace("12aa","^(?(2)a|(1)(2))+$","LiJWEQyka",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(2)a|(1)(2))+$","jNpGudmNvPautj\\1\\1rc",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(2)a|(1)(2))+$","jNpGudmNvPautj\\1\\1rc",[global])),
-?line <<"1234">> = iolist_to_binary(re:replace("1234","^(?(2)a|(1)(2))+$","TKb&DSqQCtNBSjto\\1",[])),
-?line <<"1234">> = iolist_to_binary(re:replace("1234","^(?(2)a|(1)(2))+$","TKb&DSqQCtNBSjto\\1",[global])),
-?line <<"OKbblah blahmEblah blahcAEblah">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+\\1","OKb&mE&cAE\\1",[])),
-?line <<"OKbblah blahmEblah blahcAEblah">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+\\1","OKb&mE&cAE\\1",[global])),
-?line <<"sHRABLAH BLAHDBLAH BLAHofBLAHMonBF">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+\\1","sHRA&D&of\\1MonBF",[])),
-?line <<"sHRABLAH BLAHDBLAH BLAHofBLAHMonBF">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+\\1","sHRA&D&of\\1MonBF",[global])),
-?line <<"rBlah BlahowtRMgXJKNBlah Blah">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+\\1","r&owtRMgXJKN&",[])),
-?line <<"rBlah BlahowtRMgXJKNBlah Blah">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+\\1","r&owtRMgXJKN&",[global])),
-?line <<"JblaHeNvblaHaSeblaHblaH blaHg">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+\\1","J\\1eNv\\1aSe\\1&g",[])),
-?line <<"JblaHeNvblaHaSeblaHblaH blaHg">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+\\1","J\\1eNv\\1aSe\\1&g",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)blah)\\s+\\1","\\1LVUknDVfgj\\1ij\\1eDhAE",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)blah)\\s+\\1","\\1LVUknDVfgj\\1ij\\1eDhAE",[global])),
-?line <<"blah BLAH">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+\\1","auAYHQ\\1S&PKut",[])),
-?line <<"blah BLAH">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+\\1","auAYHQ\\1S&PKut",[global])),
-?line <<"Blah blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+\\1","\\1&N\\1tNui&w&CgfgFCbPk",[])),
-?line <<"Blah blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+\\1","\\1&N\\1tNui&w&CgfgFCbPk",[global])),
-?line <<"blaH blah">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+\\1","rLouaVXAOeWe",[])),
-?line <<"blaH blah">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+\\1","rLouaVXAOeWe",[global])),
-?line <<"CXblahSqUjfblah blahblah blahblah">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+(?i:\\1)","CX\\1SqUjf&&\\1",[])),
-?line <<"CXblahSqUjfblah blahblah blahblah">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+(?i:\\1)","CX\\1SqUjf&&\\1",[global])),
-?line <<"XBLAHTkBLAHXUjMhbiRBLAH BLAHgXxxti">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+(?i:\\1)","X\\1Tk\\1XUjMhbiR&gXxxti",[])),
-?line <<"XBLAHTkBLAHXUjMhbiRBLAH BLAHgXxxti">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+(?i:\\1)","X\\1Tk\\1XUjMhbiR&gXxxti",[global])),
-?line <<"SBlahlpSqiBlah BlahLvYBlahJBlahxSbx">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+(?i:\\1)","S\\1lpSqi&LvY\\1J\\1xSbx",[])),
-?line <<"SBlahlpSqiBlah BlahLvYBlahJBlahxSbx">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+(?i:\\1)","S\\1lpSqi&LvY\\1J\\1xSbx",[global])),
-?line <<"oIFblaHCV">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+(?i:\\1)","oIF\\1CV",[])),
-?line <<"oIFblaHCV">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+(?i:\\1)","oIF\\1CV",[global])),
-?line <<"blahblah BLAHnOGRLblahgvVwkgjq">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+(?i:\\1)","\\1&nOGRL\\1gvVwkgjq",[])),
-?line <<"blahblah BLAHnOGRLblahgvVwkgjq">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+(?i:\\1)","\\1&nOGRL\\1gvVwkgjq",[global])),
-?line <<"PrLBlahTtgBlah blahpNNDBlah blahBlah blahBlah blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+(?i:\\1)","PrL\\1Ttg&pNND&&&",[])),
-?line <<"PrLBlahTtgBlah blahpNNDBlah blahBlah blahBlah blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+(?i:\\1)","PrL\\1Ttg&pNND&&&",[global])),
-?line <<"blaH blahGnDblaHFhNOIOmBhblaH blahfblaH blahKt">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+(?i:\\1)","&GnD\\1FhNOIOmBh&f&Kt",[])),
-?line <<"blaH blahGnDblaHFhNOIOmBhblaH blahfblaH blahKt">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+(?i:\\1)","&GnD\\1FhNOIOmBh&f&Kt",[global])),
-?line <<"aW">> = iolist_to_binary(re:replace("a","(?>a*)*","&W",[])),
-?line <<"aWW">> = iolist_to_binary(re:replace("a","(?>a*)*","&W",[global])),
-?line <<"Seaa">> = iolist_to_binary(re:replace("aa","(?>a*)*","Se&",[])),
-?line <<"SeaaSe">> = iolist_to_binary(re:replace("aa","(?>a*)*","Se&",[global])),
-?line <<"itILgCmaaaaioxBkDkO">> = iolist_to_binary(re:replace("aaaa","(?>a*)*","itIL\\1gCm&ioxBkDkO",[])),
-?line <<"itILgCmaaaaioxBkDkOitILgCmioxBkDkO">> = iolist_to_binary(re:replace("aaaa","(?>a*)*","itIL\\1gCm&ioxBkDkO",[global])),
-?line <<"aqm">> = iolist_to_binary(re:replace("abc","(abc|)+","\\1aqm",[])),
-?line <<"aqmaqm">> = iolist_to_binary(re:replace("abc","(abc|)+","\\1aqm",[global])),
-?line <<"tSWTMOLPTnvvJTwabcabcJwE">> = iolist_to_binary(re:replace("abcabc","(abc|)+","tSWTMOLPTnvvJTw\\1&JwE",[])),
-?line <<"tSWTMOLPTnvvJTwabcabcJwEtSWTMOLPTnvvJTwJwE">> = iolist_to_binary(re:replace("abcabc","(abc|)+","tSWTMOLPTnvvJTw\\1&JwE",[global])),
-?line <<"eMhIJbMyp">> = iolist_to_binary(re:replace("abcabcabc","(abc|)+","\\1eMh\\1\\1IJb\\1Myp",[])),
-?line <<"eMhIJbMypeMhIJbMyp">> = iolist_to_binary(re:replace("abcabcabc","(abc|)+","\\1eMh\\1\\1IJb\\1Myp",[global])),
-?line <<"dBxyz">> = iolist_to_binary(re:replace("xyz","(abc|)+","dB",[])),
-?line <<"dBxdBydBzdB">> = iolist_to_binary(re:replace("xyz","(abc|)+","dB",[global])),
-?line <<"wCrHnihkSygW">> = iolist_to_binary(re:replace("a","([a]*)*","wCrHnihkSygW",[])),
-?line <<"wCrHnihkSygWwCrHnihkSygW">> = iolist_to_binary(re:replace("a","([a]*)*","wCrHnihkSygW",[global])),
-?line <<"GjjjYNVefTgBaaaaafMw">> = iolist_to_binary(re:replace("aaaaa","([a]*)*","\\1Gjj\\1jYNVefTgB&fMw",[])),
-?line <<"GjjjYNVefTgBaaaaafMwGjjjYNVefTgBfMw">> = iolist_to_binary(re:replace("aaaaa","([a]*)*","\\1Gjj\\1jYNVefTgB&fMw",[global])),
-?line <<"pXFqCJUNaNU">> = iolist_to_binary(re:replace("a","([ab]*)*","pXFqCJUN&NU",[])),
-?line <<"pXFqCJUNaNUpXFqCJUNNU">> = iolist_to_binary(re:replace("a","([ab]*)*","pXFqCJUN&NU",[global])),
-?line <<"qbGbaTAUHHibHnl">> = iolist_to_binary(re:replace("b","([ab]*)*","q&\\1GbaTAUHHi&Hn\\1l",[])),
-?line <<"qbGbaTAUHHibHnlqGbaTAUHHiHnl">> = iolist_to_binary(re:replace("b","([ab]*)*","q&\\1GbaTAUHHi&Hn\\1l",[global])),
-?line <<"l">> = iolist_to_binary(re:replace("ababab","([ab]*)*","\\1l",[])),
-?line <<"ll">> = iolist_to_binary(re:replace("ababab","([ab]*)*","\\1l",[global])),
-?line <<"scde">> = iolist_to_binary(re:replace("aaaabcde","([ab]*)*","s\\1\\1",[])),
-?line <<"sscsdses">> = iolist_to_binary(re:replace("aaaabcde","([ab]*)*","s\\1\\1",[global])),
-?line <<"cLbwWRDkdHt">> = iolist_to_binary(re:replace("bbbb","([ab]*)*","cL\\1bwWRDkdHt",[])),
-?line <<"cLbwWRDkdHtcLbwWRDkdHt">> = iolist_to_binary(re:replace("bbbb","([ab]*)*","cL\\1bwWRDkdHt",[global])),
-?line <<"nmytevammko">> = iolist_to_binary(re:replace("b","([^a]*)*","nmytevammk\\1o",[])),
-?line <<"nmytevammkonmytevammko">> = iolist_to_binary(re:replace("b","([^a]*)*","nmytevammk\\1o",[global])),
-?line <<"bbbbqIbAMyI">> = iolist_to_binary(re:replace("bbbb","([^a]*)*","&qIbAMyI",[])),
-?line <<"bbbbqIbAMyIqIbAMyI">> = iolist_to_binary(re:replace("bbbb","([^a]*)*","&qIbAMyI",[global])),
-?line <<"ItRSFsauaaa">> = iolist_to_binary(re:replace("aaa","([^a]*)*","ItRS\\1Fs&a&&u",[])),
-?line <<"ItRSFsauaItRSFsauaItRSFsauaItRSFsau">> = iolist_to_binary(re:replace("aaa","([^a]*)*","ItRS\\1Fs&a&&u",[global])),
-?line <<"PKlYUFjsxy">> = iolist_to_binary(re:replace("cccc","([^ab]*)*","PKlYUFjsxy",[])),
-?line <<"PKlYUFjsxyPKlYUFjsxy">> = iolist_to_binary(re:replace("cccc","([^ab]*)*","PKlYUFjsxy",[global])),
-?line <<"eBumQabab">> = iolist_to_binary(re:replace("abab","([^ab]*)*","e\\1BumQ",[])),
-?line <<"eBumQaeBumQbeBumQaeBumQbeBumQ">> = iolist_to_binary(re:replace("abab","([^ab]*)*","e\\1BumQ",[global])),
-?line <<"VsNPa">> = iolist_to_binary(re:replace("a","([a]*?)*","&Vs\\1N&P",[])),
-?line <<"VsNPaVsNaPVsNP">> = iolist_to_binary(re:replace("a","([a]*?)*","&Vs\\1N&P",[global])),
-?line <<"oJTmjRIMESSEdaaaa">> = iolist_to_binary(re:replace("aaaa","([a]*?)*","o&JT\\1\\1\\1&m&jR&IMESSEd",[])),
-?line <<"oJTmjRIMESSEdoaJTamajRaIMESSEdoJTmjRIMESSEdoaJTamajRaIMESSEdoJTmjRIMESSEdoaJTamajRaIMESSEdoJTmjRIMESSEdoaJTamajRaIMESSEdoJTmjRIMESSEd">> = iolist_to_binary(re:replace("aaaa","([a]*?)*","o&JT\\1\\1\\1&m&jR&IMESSEd",[global])),
-?line <<"uSOa">> = iolist_to_binary(re:replace("a","([ab]*?)*","&\\1&u&SO",[])),
-?line <<"uSOaauaSOuSO">> = iolist_to_binary(re:replace("a","([ab]*?)*","&\\1&u&SO",[global])),
-?line <<"BfDNwUAfjUb">> = iolist_to_binary(re:replace("b","([ab]*?)*","B&fDNwU\\1Af&j\\1U\\1",[])),
-?line <<"BfDNwUAfjUBbfDNwUAfbjUBfDNwUAfjU">> = iolist_to_binary(re:replace("b","([ab]*?)*","B&fDNwU\\1Af&j\\1U\\1",[global])),
-?line <<"kTOkbSeRnabab">> = iolist_to_binary(re:replace("abab","([ab]*?)*","k&TOkb\\1\\1S&eR&n&",[])),
-?line <<"kTOkbSeRnkaTOkbSaeRanakTOkbSeRnkbTOkbSbeRbnbkTOkbSeRnkaTOkbSaeRanakTOkbSeRnkbTOkbSbeRbnbkTOkbSeRn">> = iolist_to_binary(re:replace("abab","([ab]*?)*","k&TOkb\\1\\1S&eR&n&",[global])),
-?line <<"Sbaba">> = iolist_to_binary(re:replace("baba","([ab]*?)*","S",[])),
-?line <<"SSSSSSSSS">> = iolist_to_binary(re:replace("baba","([ab]*?)*","S",[global])),
-?line <<"Aotb">> = iolist_to_binary(re:replace("b","([^a]*?)*","A\\1ot",[])),
-?line <<"AotAotAot">> = iolist_to_binary(re:replace("b","([^a]*?)*","A\\1ot",[global])),
-?line <<"CbPnbbbb">> = iolist_to_binary(re:replace("bbbb","([^a]*?)*","CbPn&&",[])),
-?line <<"CbPnCbPnbbCbPnCbPnbbCbPnCbPnbbCbPnCbPnbbCbPn">> = iolist_to_binary(re:replace("bbbb","([^a]*?)*","CbPn&&",[global])),
-?line <<"DUteaaa">> = iolist_to_binary(re:replace("aaa","([^a]*?)*","D\\1\\1Ute",[])),
-?line <<"DUteaDUteaDUteaDUte">> = iolist_to_binary(re:replace("aaa","([^a]*?)*","D\\1\\1Ute",[global])),
-?line <<"ATgsBhAkPic">> = iolist_to_binary(re:replace("c","([^ab]*?)*","ATg\\1sB\\1hAkP&i",[])),
-?line <<"ATgsBhAkPiATgsBhAkPciATgsBhAkPi">> = iolist_to_binary(re:replace("c","([^ab]*?)*","ATg\\1sB\\1hAkP&i",[global])),
-?line <<"lwFoWkRIxUcccc">> = iolist_to_binary(re:replace("cccc","([^ab]*?)*","l&wFoWk\\1RIxU",[])),
-?line <<"lwFoWkRIxUlcwFoWkRIxUlwFoWkRIxUlcwFoWkRIxUlwFoWkRIxUlcwFoWkRIxUlwFoWkRIxUlcwFoWkRIxUlwFoWkRIxU">> = iolist_to_binary(re:replace("cccc","([^ab]*?)*","l&wFoWk\\1RIxU",[global])),
-?line <<"QXSXCbaba">> = iolist_to_binary(re:replace("baba","([^ab]*?)*","&QXSXC",[])),
-?line <<"QXSXCbQXSXCaQXSXCbQXSXCaQXSXC">> = iolist_to_binary(re:replace("baba","([^ab]*?)*","&QXSXC",[global])),
-?line <<"epgEBpyDja">> = iolist_to_binary(re:replace("a","(?>a*)*","e\\1\\1pgEB\\1\\1pyD\\1j&",[])),
-?line <<"epgEBpyDjaepgEBpyDj">> = iolist_to_binary(re:replace("a","(?>a*)*","e\\1\\1pgEB\\1\\1pyD\\1j&",[global])),
-?line <<"SekThCelBbcde">> = iolist_to_binary(re:replace("aaabcde","(?>a*)*","SekT\\1hC\\1\\1elB",[])),
-?line <<"SekThCelBSekThCelBbSekThCelBcSekThCelBdSekThCelBeSekThCelB">> = iolist_to_binary(re:replace("aaabcde","(?>a*)*","SekT\\1hC\\1\\1elB",[global])),
-?line <<"goPCaaaaawO">> = iolist_to_binary(re:replace("aaaaa","((?>a*))*","go\\1PC\\1&\\1wO",[])),
-?line <<"goPCaaaaawOgoPCwO">> = iolist_to_binary(re:replace("aaaaa","((?>a*))*","go\\1PC\\1&\\1wO",[global])),
-?line <<"SCaadJliaaKfxRbbbaa">> = iolist_to_binary(re:replace("aabbaa","((?>a*))*","\\1S\\1C&\\1dJ\\1\\1li&KfxR\\1b",[])),
-?line <<"SCaadJliaaKfxRbSCdJliKfxRbbSCdJliKfxRbbSCaadJliaaKfxRbSCdJliKfxRb">> = iolist_to_binary(re:replace("aabbaa","((?>a*))*","\\1S\\1C&\\1dJ\\1\\1li&KfxR\\1b",[global])),
-?line <<"ssMfBjQEIebjdsmPRaaaaa">> = iolist_to_binary(re:replace("aaaaa","((?>a*?))*","s&s&MfBjQEIebjdsmPR",[])),
-?line <<"ssMfBjQEIebjdsmPRassMfBjQEIebjdsmPRassMfBjQEIebjdsmPRassMfBjQEIebjdsmPRassMfBjQEIebjdsmPRassMfBjQEIebjdsmPR">> = iolist_to_binary(re:replace("aaaaa","((?>a*?))*","s&s&MfBjQEIebjdsmPR",[global])),
-?line <<"VQJGaabbaa">> = iolist_to_binary(re:replace("aabbaa","((?>a*?))*","VQ\\1&J\\1G",[])),
-?line <<"VQJGaVQJGaVQJGbVQJGbVQJGaVQJGaVQJG">> = iolist_to_binary(re:replace("aabbaa","((?>a*?))*","VQ\\1&J\\1G",[global])),
-?line <<"t">> = iolist_to_binary(re:replace("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","t",[extended])),
-?line <<"t">> = iolist_to_binary(re:replace("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","t",[extended,
- global])),
-?line <<"EIgEQmDKuIoMFts">> = iolist_to_binary(re:replace("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","EIgEQmDKuIoMFts",[extended])),
-?line <<"EIgEQmDKuIoMFts">> = iolist_to_binary(re:replace("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","EIgEQmDKuIoMFts",[extended,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","M\\1K\\1N",[extended])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","M\\1K\\1N",[extended,
- global])),
-?line <<"sep-12-98">> = iolist_to_binary(re:replace("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","Xby\\1g&vVVPgw\\1",[extended])),
-?line <<"sep-12-98">> = iolist_to_binary(re:replace("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","Xby\\1g&vVVPgw\\1",[extended,
- global])),
-?line <<"foonfoobJpbIfooAbKhpTIXfoofooEN">> = iolist_to_binary(re:replace("foobarfoo","(?<=(foo))bar\\1","n\\1bJpbI\\1AbKhpTIX\\1\\1EN",[])),
-?line <<"foonfoobJpbIfooAbKhpTIXfoofooEN">> = iolist_to_binary(re:replace("foobarfoo","(?<=(foo))bar\\1","n\\1bJpbI\\1AbKhpTIX\\1\\1EN",[global])),
-?line <<"foobarfoofooUWdHfoofoocfifXWQdmKgtling">> = iolist_to_binary(re:replace("foobarfootling","(?<=(foo))bar\\1","&\\1UWdH\\1\\1cfifXWQdmKg",[])),
-?line <<"foobarfoofooUWdHfoofoocfifXWQdmKgtling">> = iolist_to_binary(re:replace("foobarfootling","(?<=(foo))bar\\1","&\\1UWdH\\1\\1cfifXWQdmKg",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo))bar\\1","\\1A\\1Do\\1roQX",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo))bar\\1","\\1A\\1Do\\1roQX",[global])),
-?line <<"foobar">> = iolist_to_binary(re:replace("foobar","(?<=(foo))bar\\1","WqywQ",[])),
-?line <<"foobar">> = iolist_to_binary(re:replace("foobar","(?<=(foo))bar\\1","WqywQ",[global])),
-?line <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<=(foo))bar\\1","g&dx",[])),
-?line <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<=(foo))bar\\1","g&dx",[global])),
-?line <<"EqLnXCi">> = iolist_to_binary(re:replace("saturday","(?i:saturday|sunday)","EqLnX\\1Ci\\1",[])),
-?line <<"EqLnXCi">> = iolist_to_binary(re:replace("saturday","(?i:saturday|sunday)","EqLnX\\1Ci\\1",[global])),
-?line <<"rXiCVoMssundayWVsundayg">> = iolist_to_binary(re:replace("sunday","(?i:saturday|sunday)","rXiCVoMs&WV&\\1g",[])),
-?line <<"rXiCVoMssundayWVsundayg">> = iolist_to_binary(re:replace("sunday","(?i:saturday|sunday)","rXiCVoMs&WV&\\1g",[global])),
-?line <<"DCML">> = iolist_to_binary(re:replace("Saturday","(?i:saturday|sunday)","D\\1CML",[])),
-?line <<"DCML">> = iolist_to_binary(re:replace("Saturday","(?i:saturday|sunday)","D\\1CML",[global])),
-?line <<"caYSundaylQsqBJmDFf">> = iolist_to_binary(re:replace("Sunday","(?i:saturday|sunday)","caY&l\\1Q\\1\\1sq\\1BJmD\\1Ff",[])),
-?line <<"caYSundaylQsqBJmDFf">> = iolist_to_binary(re:replace("Sunday","(?i:saturday|sunday)","caY&l\\1Q\\1\\1sq\\1BJmD\\1Ff",[global])),
-?line <<"LSATURDAYSATURDAYb">> = iolist_to_binary(re:replace("SATURDAY","(?i:saturday|sunday)","L&&b",[])),
-?line <<"LSATURDAYSATURDAYb">> = iolist_to_binary(re:replace("SATURDAY","(?i:saturday|sunday)","L&&b",[global])),
-?line <<"J">> = iolist_to_binary(re:replace("SUNDAY","(?i:saturday|sunday)","J",[])),
-?line <<"J">> = iolist_to_binary(re:replace("SUNDAY","(?i:saturday|sunday)","J",[global])),
-?line <<"cCHUgeqmaSunDaySunDayQSunDayHUJ">> = iolist_to_binary(re:replace("SunDay","(?i:saturday|sunday)","c\\1CHUgeqma&&Q&HUJ",[])),
-?line <<"cCHUgeqmaSunDaySunDayQSunDayHUJ">> = iolist_to_binary(re:replace("SunDay","(?i:saturday|sunday)","c\\1CHUgeqma&&Q&HUJ",[global])),
-?line <<"abcEbXpYQWabcxNabcxabcxVrPLd">> = iolist_to_binary(re:replace("abcx","(a(?i)bc|BB)x","\\1EbXpYQW&N&&VrPLd",[])),
-?line <<"abcEbXpYQWabcxNabcxabcxVrPLd">> = iolist_to_binary(re:replace("abcx","(a(?i)bc|BB)x","\\1EbXpYQW&N&&VrPLd",[global])),
-?line <<"jBMIviaBCvaBCxTRLe">> = iolist_to_binary(re:replace("aBCx","(a(?i)bc|BB)x","jBMIvi\\1v&TRLe",[])),
-?line <<"jBMIviaBCvaBCxTRLe">> = iolist_to_binary(re:replace("aBCx","(a(?i)bc|BB)x","jBMIvi\\1v&TRLe",[global])),
-?line <<"wDnyUbbxDgOUSgpsDtqV">> = iolist_to_binary(re:replace("bbx","(a(?i)bc|BB)x","wDnyU&DgOUSgpsDtqV",[])),
-?line <<"wDnyUbbxDgOUSgpsDtqV">> = iolist_to_binary(re:replace("bbx","(a(?i)bc|BB)x","wDnyU&DgOUSgpsDtqV",[global])),
-?line <<"Vx">> = iolist_to_binary(re:replace("BBx","(a(?i)bc|BB)x","Vx",[])),
-?line <<"Vx">> = iolist_to_binary(re:replace("BBx","(a(?i)bc|BB)x","Vx",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)bc|BB)x","vuaWcgIs\\1SRUcqMEb",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)bc|BB)x","vuaWcgIs\\1SRUcqMEb",[global])),
-?line <<"abcX">> = iolist_to_binary(re:replace("abcX","(a(?i)bc|BB)x","V\\1",[])),
-?line <<"abcX">> = iolist_to_binary(re:replace("abcX","(a(?i)bc|BB)x","V\\1",[global])),
-?line <<"aBCX">> = iolist_to_binary(re:replace("aBCX","(a(?i)bc|BB)x","kcaH&mISces&gy\\1Mv",[])),
-?line <<"aBCX">> = iolist_to_binary(re:replace("aBCX","(a(?i)bc|BB)x","kcaH&mISces&gy\\1Mv",[global])),
-?line <<"bbX">> = iolist_to_binary(re:replace("bbX","(a(?i)bc|BB)x","hfQHW",[])),
-?line <<"bbX">> = iolist_to_binary(re:replace("bbX","(a(?i)bc|BB)x","hfQHW",[global])),
-?line <<"BBX">> = iolist_to_binary(re:replace("BBX","(a(?i)bc|BB)x","QWSdgANNG&a&hUuhv&T",[])),
-?line <<"BBX">> = iolist_to_binary(re:replace("BBX","(a(?i)bc|BB)x","QWSdgANNG&a&hUuhv&T",[global])),
-?line <<"tEacrW">> = iolist_to_binary(re:replace("ac","^([ab](?i)[cd]|[ef])","tE\\1rW",[])),
-?line <<"tEacrW">> = iolist_to_binary(re:replace("ac","^([ab](?i)[cd]|[ef])","tE\\1rW",[global])),
-?line <<"jjqwaCaCyaCpaCPWnSv">> = iolist_to_binary(re:replace("aC","^([ab](?i)[cd]|[ef])","jjqw\\1\\1y\\1p&PWnSv",[])),
-?line <<"jjqwaCaCyaCpaCPWnSv">> = iolist_to_binary(re:replace("aC","^([ab](?i)[cd]|[ef])","jjqw\\1\\1y\\1p&PWnSv",[global])),
-?line <<"pbDoK">> = iolist_to_binary(re:replace("bD","^([ab](?i)[cd]|[ef])","p&oK",[])),
-?line <<"pbDoK">> = iolist_to_binary(re:replace("bD","^([ab](?i)[cd]|[ef])","p&oK",[global])),
-?line <<"hOUSaMTfcPejGlephant">> = iolist_to_binary(re:replace("elephant","^([ab](?i)[cd]|[ef])","hOUSaMTfcP&jG",[])),
-?line <<"hOUSaMTfcPejGlephant">> = iolist_to_binary(re:replace("elephant","^([ab](?i)[cd]|[ef])","hOUSaMTfcP&jG",[global])),
-?line <<"EOnTdEESsrQXxRPurope">> = iolist_to_binary(re:replace("Europe","^([ab](?i)[cd]|[ef])","\\1OnTd&&SsrQXxRP",[])),
-?line <<"EOnTdEESsrQXxRPurope">> = iolist_to_binary(re:replace("Europe","^([ab](?i)[cd]|[ef])","\\1OnTd&&SsrQXxRP",[global])),
-?line <<"fhfBHfIDHldAwNfEfqrog">> = iolist_to_binary(re:replace("frog","^([ab](?i)[cd]|[ef])","\\1h&BH\\1IDHldAwN&E\\1q",[])),
-?line <<"fhfBHfIDHldAwNfEfqrog">> = iolist_to_binary(re:replace("frog","^([ab](?i)[cd]|[ef])","\\1h&BH\\1IDHldAwN&E\\1q",[global])),
-?line <<"FFFxSuhnFwrance">> = iolist_to_binary(re:replace("France","^([ab](?i)[cd]|[ef])","\\1&FxSuhn&w",[])),
-?line <<"FFFxSuhnFwrance">> = iolist_to_binary(re:replace("France","^([ab](?i)[cd]|[ef])","\\1&FxSuhn&w",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([ab](?i)[cd]|[ef])","&ff\\1J\\1I",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([ab](?i)[cd]|[ef])","&ff\\1J\\1I",[global])),
-?line <<"Africa">> = iolist_to_binary(re:replace("Africa","^([ab](?i)[cd]|[ef])","nEbgaPXOn\\1",[])),
-?line <<"Africa">> = iolist_to_binary(re:replace("Africa","^([ab](?i)[cd]|[ef])","nEbgaPXOn\\1",[global])),
-?line <<"abcabDXAiaSg">> = iolist_to_binary(re:replace("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&c&DXAiaSg",[])),
-?line <<"abcabDXAiaSg">> = iolist_to_binary(re:replace("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&c&DXAiaSg",[global])),
-?line <<"aBdqaBdmLoaaBdEb">> = iolist_to_binary(re:replace("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&q&mLoa&Eb",[])),
-?line <<"aBdqaBdmLoaaBdEb">> = iolist_to_binary(re:replace("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&q&mLoa&Eb",[global])),
-?line <<"xxyvFo">> = iolist_to_binary(re:replace("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","x&vFo",[])),
-?line <<"xxyvFo">> = iolist_to_binary(re:replace("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","x&vFo",[global])),
-?line <<"eWy">> = iolist_to_binary(re:replace("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","eWy",[])),
-?line <<"eWy">> = iolist_to_binary(re:replace("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","eWy",[global])),
-?line <<"bzVONndeqzaVKebra">> = iolist_to_binary(re:replace("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","b&VONndeq\\1aVK",[])),
-?line <<"bzVONndeqzaVKebra">> = iolist_to_binary(re:replace("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","b&VONndeq\\1aVK",[global])),
-?line <<"ZNZZjZVZJeZnZZCXZambesi">> = iolist_to_binary(re:replace("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&N&&j&V&Je\\1n&\\1CX&",[])),
-?line <<"ZNZZjZVZJeZnZZCXZambesi">> = iolist_to_binary(re:replace("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&N&&j&V&Je\\1n&\\1CX&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","vJ\\1\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","vJ\\1\\1",[global])),
-?line <<"aCD">> = iolist_to_binary(re:replace("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","\\1FKPhO&",[])),
-?line <<"aCD">> = iolist_to_binary(re:replace("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","\\1FKPhO&",[global])),
-?line <<"XY">> = iolist_to_binary(re:replace("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","SEE",[])),
-?line <<"XY">> = iolist_to_binary(re:replace("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","SEE",[global])),
-?line <<"foo
-rwHxBqDqeLQ">> = iolist_to_binary(re:replace("foo
-bar","(?<=foo\\n)^bar","rwHxBqDq\\1eLQ",[multiline])),
-?line <<"foo
-rwHxBqDqeLQ">> = iolist_to_binary(re:replace("foo
-bar","(?<=foo\\n)^bar","rwHxBqDq\\1eLQ",[multiline,global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=foo\\n)^bar","\\1P&&W&\\1oN",[multiline])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=foo\\n)^bar","\\1P&&W&\\1oN",[multiline,
- global])),
-?line <<"bar">> = iolist_to_binary(re:replace("bar","(?<=foo\\n)^bar","rk\\1SSPj&JPOE",[multiline])),
-?line <<"bar">> = iolist_to_binary(re:replace("bar","(?<=foo\\n)^bar","rk\\1SSPj&JPOE",[multiline,
- global])),
-?line <<"baz
+ <<"(BxtHoabcdhwabcdMSlPc">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) ) ","BxtHo&hw&MSlPc",[extended])),
+ <<"(BxtHoabcdhwabcdMSlPc">> = iolist_to_binary(re:replace("(abcd","( \\( )? [^()]+ (?(1) \\) ) ","BxtHo&hw&MSlPc",[extended,
+ global])),
+ <<"112MIb11212MLRT11">> = iolist_to_binary(re:replace("12","^(?(2)a|(1)(2))+$","\\1&MIb\\1&&MLRT\\1\\1",[])),
+ <<"112MIb11212MLRT11">> = iolist_to_binary(re:replace("12","^(?(2)a|(1)(2))+$","\\1&MIb\\1&&MLRT\\1\\1",[global])),
+ <<"NKCJyodsYQD">> = iolist_to_binary(re:replace("12a","^(?(2)a|(1)(2))+$","NKCJyodsYQD",[])),
+ <<"NKCJyodsYQD">> = iolist_to_binary(re:replace("12a","^(?(2)a|(1)(2))+$","NKCJyodsYQD",[global])),
+ <<"12aarChjGgkuN">> = iolist_to_binary(re:replace("12aa","^(?(2)a|(1)(2))+$","&rChjGgkuN",[])),
+ <<"12aarChjGgkuN">> = iolist_to_binary(re:replace("12aa","^(?(2)a|(1)(2))+$","&rChjGgkuN",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(2)a|(1)(2))+$","\\1\\1be\\1ix",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?(2)a|(1)(2))+$","\\1\\1be\\1ix",[global])),
+ <<"1234">> = iolist_to_binary(re:replace("1234","^(?(2)a|(1)(2))+$","cLDE&D",[])),
+ <<"1234">> = iolist_to_binary(re:replace("1234","^(?(2)a|(1)(2))+$","cLDE&D",[global])),
+ <<"kNHtojblahPblahcuUuarKNnoK">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+\\1","kNHtoj\\1P\\1cuUuarKNnoK",[])),
+ <<"kNHtojblahPblahcuUuarKNnoK">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+\\1","kNHtoj\\1P\\1cuUuarKNnoK",[global])),
+ <<"eNBLAHlXaMBLAH BLAH">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+\\1","eN\\1lXaM&",[])),
+ <<"eNBLAHlXaMBLAH BLAH">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+\\1","eN\\1lXaM&",[global])),
+ <<"rBlah BlahSGW">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+\\1","r&SGW",[])),
+ <<"rBlah BlahSGW">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+\\1","r&SGW",[global])),
+ <<"fUTblaH blaHblaH blaHtHeblaH blaHDlblaH blaHwQonyN">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+\\1","fUT&&tHe&Dl&wQonyN",[])),
+ <<"fUTblaH blaHblaH blaHtHeblaH blaHDlblaH blaHwQonyN">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+\\1","fUT&&tHe&Dl&wQonyN",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)blah)\\s+\\1","rjKWYO&gqg",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)blah)\\s+\\1","rjKWYO&gqg",[global])),
+ <<"blah BLAH">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+\\1","\\1PJEx&&NqPQ",[])),
+ <<"blah BLAH">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+\\1","\\1PJEx&&NqPQ",[global])),
+ <<"Blah blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+\\1","&IAtxxKcfurkyev\\1nvDJ",[])),
+ <<"Blah blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+\\1","&IAtxxKcfurkyev\\1nvDJ",[global])),
+ <<"blaH blah">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+\\1","\\1\\1H&YJdrM\\1qcj&&",[])),
+ <<"blaH blah">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+\\1","\\1\\1H&YJdrM\\1qcj&&",[global])),
+ <<"QROIQmblah blahmblahblah blahDWblahJ">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+(?i:\\1)","QROIQm&m\\1&DW\\1J",[])),
+ <<"QROIQmblah blahmblahblah blahDWblahJ">> = iolist_to_binary(re:replace("blah blah","((?i)blah)\\s+(?i:\\1)","QROIQm&m\\1&DW\\1J",[global])),
+ <<"vmvjMIXCFx">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+(?i:\\1)","vmvjMIXCFx",[])),
+ <<"vmvjMIXCFx">> = iolist_to_binary(re:replace("BLAH BLAH","((?i)blah)\\s+(?i:\\1)","vmvjMIXCFx",[global])),
+ <<"FBlahSrBlah BlahfdMtkYBlah Blah">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+(?i:\\1)","F\\1Sr&fdMtkY&",[])),
+ <<"FBlahSrBlah BlahfdMtkYBlah Blah">> = iolist_to_binary(re:replace("Blah Blah","((?i)blah)\\s+(?i:\\1)","F\\1Sr&fdMtkY&",[global])),
+ <<"cblaH blaHfGEblaHwablaH blaHDGblaH blaHblaH blaHLcblaHVyTC">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+(?i:\\1)","c&fGE\\1wa&DG&&Lc\\1VyTC",[])),
+ <<"cblaH blaHfGEblaHwablaH blaHDGblaH blaHblaH blaHLcblaHVyTC">> = iolist_to_binary(re:replace("blaH blaH","((?i)blah)\\s+(?i:\\1)","c&fGE\\1wa&DG&&Lc\\1VyTC",[global])),
+ <<"blahaefgWblah">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+(?i:\\1)","\\1aefgW\\1",[])),
+ <<"blahaefgWblah">> = iolist_to_binary(re:replace("blah BLAH","((?i)blah)\\s+(?i:\\1)","\\1aefgW\\1",[global])),
+ <<"Blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+(?i:\\1)","\\1",[])),
+ <<"Blah">> = iolist_to_binary(re:replace("Blah blah","((?i)blah)\\s+(?i:\\1)","\\1",[global])),
+ <<"RXsblaHe">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+(?i:\\1)","RXs\\1e",[])),
+ <<"RXsblaHe">> = iolist_to_binary(re:replace("blaH blah","((?i)blah)\\s+(?i:\\1)","RXs\\1e",[global])),
+ <<"lanoXtvE">> = iolist_to_binary(re:replace("a","(?>a*)*","lano\\1Xt\\1vE",[])),
+ <<"lanoXtvElanoXtvE">> = iolist_to_binary(re:replace("a","(?>a*)*","lano\\1Xt\\1vE",[global])),
+ <<"EfuiyyaaybkaaVI">> = iolist_to_binary(re:replace("aa","(?>a*)*","Ef\\1uiyy&ybk&VI",[])),
+ <<"EfuiyyaaybkaaVIEfuiyyybkVI">> = iolist_to_binary(re:replace("aa","(?>a*)*","Ef\\1uiyy&ybk&VI",[global])),
+ <<"DFPlAS">> = iolist_to_binary(re:replace("aaaa","(?>a*)*","DFPlAS",[])),
+ <<"DFPlASDFPlAS">> = iolist_to_binary(re:replace("aaaa","(?>a*)*","DFPlAS",[global])),
+ <<"swvEIpc">> = iolist_to_binary(re:replace("abc","(abc|)+","sw\\1vEIpc",[])),
+ <<"swvEIpcswvEIpc">> = iolist_to_binary(re:replace("abc","(abc|)+","sw\\1vEIpc",[global])),
+ <<"Vm">> = iolist_to_binary(re:replace("abcabc","(abc|)+","Vm",[])),
+ <<"VmVm">> = iolist_to_binary(re:replace("abcabc","(abc|)+","Vm",[global])),
+ <<"vabcabcabcIecAabcabcabcvabcabcabcabcabcabcPMS">> = iolist_to_binary(re:replace("abcabcabc","(abc|)+","v&\\1IecA&v\\1&&PMS",[])),
+ <<"vabcabcabcIecAabcabcabcvabcabcabcabcabcabcPMSvIecAvPMS">> = iolist_to_binary(re:replace("abcabcabc","(abc|)+","v&\\1IecA&v\\1&&PMS",[global])),
+ <<"YpHLvbPebgHxyz">> = iolist_to_binary(re:replace("xyz","(abc|)+","YpH&LvbPebgH\\1",[])),
+ <<"YpHLvbPebgHxYpHLvbPebgHyYpHLvbPebgHzYpHLvbPebgH">> = iolist_to_binary(re:replace("xyz","(abc|)+","YpH&LvbPebgH\\1",[global])),
+ <<"aaUe">> = iolist_to_binary(re:replace("a","([a]*)*","&&Ue",[])),
+ <<"aaUeUe">> = iolist_to_binary(re:replace("a","([a]*)*","&&Ue",[global])),
+ <<"PaaaaapgFufTSYIkBuaaaaabKYVD">> = iolist_to_binary(re:replace("aaaaa","([a]*)*","P&pgFufTSYIkBu&bKYVD",[])),
+ <<"PaaaaapgFufTSYIkBuaaaaabKYVDPpgFufTSYIkBubKYVD">> = iolist_to_binary(re:replace("aaaaa","([a]*)*","P&pgFufTSYIkBu&bKYVD",[global])),
+ <<"qFRFDX">> = iolist_to_binary(re:replace("a","([ab]*)*","qFRFDX",[])),
+ <<"qFRFDXqFRFDX">> = iolist_to_binary(re:replace("a","([ab]*)*","qFRFDX",[global])),
+ <<"rcPIcjqP">> = iolist_to_binary(re:replace("b","([ab]*)*","rcP\\1IcjqP",[])),
+ <<"rcPIcjqPrcPIcjqP">> = iolist_to_binary(re:replace("b","([ab]*)*","rcP\\1IcjqP",[global])),
+ <<"sRJuN">> = iolist_to_binary(re:replace("ababab","([ab]*)*","s\\1R\\1JuN",[])),
+ <<"sRJuNsRJuN">> = iolist_to_binary(re:replace("ababab","([ab]*)*","s\\1R\\1JuN",[global])),
+ <<"GIaaaabFaYFbcde">> = iolist_to_binary(re:replace("aaaabcde","([ab]*)*","GI&FaYFb",[])),
+ <<"GIaaaabFaYFbGIFaYFbcGIFaYFbdGIFaYFbeGIFaYFb">> = iolist_to_binary(re:replace("aaaabcde","([ab]*)*","GI&FaYFb",[global])),
+ <<"meTmwKOIyGCbbbbANbbbbbbbbH">> = iolist_to_binary(re:replace("bbbb","([ab]*)*","meTmwK\\1OIy\\1GC&AN&&H",[])),
+ <<"meTmwKOIyGCbbbbANbbbbbbbbHmeTmwKOIyGCANH">> = iolist_to_binary(re:replace("bbbb","([ab]*)*","meTmwK\\1OIy\\1GC&AN&&H",[global])),
+ <<"nbjCbhrDRrlgSUiVJ">> = iolist_to_binary(re:replace("b","([^a]*)*","nbjC&hrDRrlgSUiV\\1J",[])),
+ <<"nbjCbhrDRrlgSUiVJnbjChrDRrlgSUiVJ">> = iolist_to_binary(re:replace("b","([^a]*)*","nbjC&hrDRrlgSUiV\\1J",[global])),
+ <<"EDtjVbbbbKGDbbbbmbbbbwKLjiR">> = iolist_to_binary(re:replace("bbbb","([^a]*)*","EDtjV&KGD&m&wK\\1Lj\\1iR",[])),
+ <<"EDtjVbbbbKGDbbbbmbbbbwKLjiREDtjVKGDmwKLjiR">> = iolist_to_binary(re:replace("bbbb","([^a]*)*","EDtjV&KGD&m&wK\\1Lj\\1iR",[global])),
+ <<"HlaUYcKUiWycCnKHNaaa">> = iolist_to_binary(re:replace("aaa","([^a]*)*","HlaUYcKUiWycCnKH\\1N",[])),
+ <<"HlaUYcKUiWycCnKHNaHlaUYcKUiWycCnKHNaHlaUYcKUiWycCnKHNaHlaUYcKUiWycCnKHN">> = iolist_to_binary(re:replace("aaa","([^a]*)*","HlaUYcKUiWycCnKH\\1N",[global])),
+ <<"eaccccgCccccOYNUlccccTcccc">> = iolist_to_binary(re:replace("cccc","([^ab]*)*","ea&g\\1C&OYNUl&\\1T&",[])),
+ <<"eaccccgCccccOYNUlccccTcccceagCOYNUlT">> = iolist_to_binary(re:replace("cccc","([^ab]*)*","ea&g\\1C&OYNUl&\\1T&",[global])),
+ <<"JyKBqDRhnabab">> = iolist_to_binary(re:replace("abab","([^ab]*)*","Jy&\\1KBqDRhn",[])),
+ <<"JyKBqDRhnaJyKBqDRhnbJyKBqDRhnaJyKBqDRhnbJyKBqDRhn">> = iolist_to_binary(re:replace("abab","([^ab]*)*","Jy&\\1KBqDRhn",[global])),
+ <<"vnligHISDuDiBa">> = iolist_to_binary(re:replace("a","([a]*?)*","v\\1nli&\\1gHISDuD\\1iB",[])),
+ <<"vnligHISDuDiBvnliagHISDuDiBvnligHISDuDiB">> = iolist_to_binary(re:replace("a","([a]*?)*","v\\1nli&\\1gHISDuD\\1iB",[global])),
+ <<"CrarAftguXnYNULohKyaaaa">> = iolist_to_binary(re:replace("aaaa","([a]*?)*","CrarAftguXnYN&ULohKy",[])),
+ <<"CrarAftguXnYNULohKyCrarAftguXnYNaULohKyCrarAftguXnYNULohKyCrarAftguXnYNaULohKyCrarAftguXnYNULohKyCrarAftguXnYNaULohKyCrarAftguXnYNULohKyCrarAftguXnYNaULohKyCrarAftguXnYNULohKy">> = iolist_to_binary(re:replace("aaaa","([a]*?)*","CrarAftguXnYN&ULohKy",[global])),
+ <<"BOfINa">> = iolist_to_binary(re:replace("a","([ab]*?)*","B&OfIN&",[])),
+ <<"BOfINBaOfINaBOfIN">> = iolist_to_binary(re:replace("a","([ab]*?)*","B&OfIN&",[global])),
+ <<"HBxFab">> = iolist_to_binary(re:replace("b","([ab]*?)*","H\\1\\1BxF\\1a",[])),
+ <<"HBxFaHBxFaHBxFa">> = iolist_to_binary(re:replace("b","([ab]*?)*","H\\1\\1BxF\\1a",[global])),
+ <<"rkuWEckrabab">> = iolist_to_binary(re:replace("abab","([ab]*?)*","rkuWEc\\1kr",[])),
+ <<"rkuWEckrrkuWEckrrkuWEckrrkuWEckrrkuWEckrrkuWEckrrkuWEckrrkuWEckrrkuWEckr">> = iolist_to_binary(re:replace("abab","([ab]*?)*","rkuWEc\\1kr",[global])),
+ <<"dedrbsbaba">> = iolist_to_binary(re:replace("baba","([ab]*?)*","dedrbs",[])),
+ <<"dedrbsdedrbsdedrbsdedrbsdedrbsdedrbsdedrbsdedrbsdedrbs">> = iolist_to_binary(re:replace("baba","([ab]*?)*","dedrbs",[global])),
+ <<"b">> = iolist_to_binary(re:replace("b","([^a]*?)*","\\1",[])),
+ <<"">> = iolist_to_binary(re:replace("b","([^a]*?)*","\\1",[global])),
+ <<"rrARQqtjsbbbb">> = iolist_to_binary(re:replace("bbbb","([^a]*?)*","rr&ARQq\\1\\1tjs",[])),
+ <<"rrARQqtjsrrbARQqtjsrrARQqtjsrrbARQqtjsrrARQqtjsrrbARQqtjsrrARQqtjsrrbARQqtjsrrARQqtjs">> = iolist_to_binary(re:replace("bbbb","([^a]*?)*","rr&ARQq\\1\\1tjs",[global])),
+ <<"PGcsmlReJQeaaa">> = iolist_to_binary(re:replace("aaa","([^a]*?)*","PGcsm&&lReJQe&",[])),
+ <<"PGcsmlReJQeaPGcsmlReJQeaPGcsmlReJQeaPGcsmlReJQe">> = iolist_to_binary(re:replace("aaa","([^a]*?)*","PGcsm&&lReJQe&",[global])),
+ <<"nuspMpmvVOsyyChRc">> = iolist_to_binary(re:replace("c","([^ab]*?)*","nusp&Mp\\1mvVOsyyChR",[])),
+ <<"nuspMpmvVOsyyChRnuspcMpmvVOsyyChRnuspMpmvVOsyyChR">> = iolist_to_binary(re:replace("c","([^ab]*?)*","nusp&Mp\\1mvVOsyyChR",[global])),
+ <<"GbhjrQmJMQvcccc">> = iolist_to_binary(re:replace("cccc","([^ab]*?)*","Gbhj&rQmJMQv",[])),
+ <<"GbhjrQmJMQvGbhjcrQmJMQvGbhjrQmJMQvGbhjcrQmJMQvGbhjrQmJMQvGbhjcrQmJMQvGbhjrQmJMQvGbhjcrQmJMQvGbhjrQmJMQv">> = iolist_to_binary(re:replace("cccc","([^ab]*?)*","Gbhj&rQmJMQv",[global])),
+ <<"qlNFbaba">> = iolist_to_binary(re:replace("baba","([^ab]*?)*","qlNF",[])),
+ <<"qlNFbqlNFaqlNFbqlNFaqlNF">> = iolist_to_binary(re:replace("baba","([^ab]*?)*","qlNF",[global])),
+ <<"KQaNecIrOxNy">> = iolist_to_binary(re:replace("a","(?>a*)*","KQ\\1&NecIrOxNy",[])),
+ <<"KQaNecIrOxNyKQNecIrOxNy">> = iolist_to_binary(re:replace("a","(?>a*)*","KQ\\1&NecIrOxNy",[global])),
+ <<"VSaaaJEKwmaaaUrFoAmveCbcde">> = iolist_to_binary(re:replace("aaabcde","(?>a*)*","VS&JEKwm&UrFoAmv\\1eC",[])),
+ <<"VSaaaJEKwmaaaUrFoAmveCVSJEKwmUrFoAmveCbVSJEKwmUrFoAmveCcVSJEKwmUrFoAmveCdVSJEKwmUrFoAmveCeVSJEKwmUrFoAmveC">> = iolist_to_binary(re:replace("aaabcde","(?>a*)*","VS&JEKwm&UrFoAmv\\1eC",[global])),
+ <<"UCWWaaaaaSi">> = iolist_to_binary(re:replace("aaaaa","((?>a*))*","UCW\\1W&Si",[])),
+ <<"UCWWaaaaaSiUCWWSi">> = iolist_to_binary(re:replace("aaaaa","((?>a*))*","UCW\\1W&Si",[global])),
+ <<"Ynbbaa">> = iolist_to_binary(re:replace("aabbaa","((?>a*))*","Yn",[])),
+ <<"YnYnbYnbYnYn">> = iolist_to_binary(re:replace("aabbaa","((?>a*))*","Yn",[global])),
+ ok.
+run14() ->
+ <<"MLgsOWdfTvaaaaa">> = iolist_to_binary(re:replace("aaaaa","((?>a*?))*","MLgs&OW\\1df&T&v",[])),
+ <<"MLgsOWdfTvaMLgsOWdfTvaMLgsOWdfTvaMLgsOWdfTvaMLgsOWdfTvaMLgsOWdfTv">> = iolist_to_binary(re:replace("aaaaa","((?>a*?))*","MLgs&OW\\1df&T&v",[global])),
+ <<"aabbaa">> = iolist_to_binary(re:replace("aabbaa","((?>a*?))*","&",[])),
+ <<"aabbaa">> = iolist_to_binary(re:replace("aabbaa","((?>a*?))*","&",[global])),
+ <<"gTBVcFPFf12-sep-98nd">> = iolist_to_binary(re:replace("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","gTBVcFPFf&\\1nd",[extended])),
+ <<"gTBVcFPFf12-sep-98nd">> = iolist_to_binary(re:replace("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","gTBVcFPFf&\\1nd",[extended,
+ global])),
+ <<"12-09-98h12-09-98Vrh12-09-98">> = iolist_to_binary(re:replace("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","&h&\\1Vrh\\1&",[extended])),
+ <<"12-09-98h12-09-98Vrh12-09-98">> = iolist_to_binary(re:replace("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","&h&\\1Vrh\\1&",[extended,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","W&ve&i&",[extended])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","W&ve&i&",[extended,
+ global])),
+ <<"sep-12-98">> = iolist_to_binary(re:replace("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","UrC",[extended])),
+ <<"sep-12-98">> = iolist_to_binary(re:replace("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ","UrC",[extended,
+ global])),
+ <<"foodfooCEjVBAfoo">> = iolist_to_binary(re:replace("foobarfoo","(?<=(foo))bar\\1","d\\1CEjVBA\\1",[])),
+ <<"foodfooCEjVBAfoo">> = iolist_to_binary(re:replace("foobarfoo","(?<=(foo))bar\\1","d\\1CEjVBA\\1",[global])),
+ <<"foovctling">> = iolist_to_binary(re:replace("foobarfootling","(?<=(foo))bar\\1","vc",[])),
+ <<"foovctling">> = iolist_to_binary(re:replace("foobarfootling","(?<=(foo))bar\\1","vc",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo))bar\\1","UXvqXj\\1yXDrW\\1&UV&aD",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(foo))bar\\1","UXvqXj\\1yXDrW\\1&UV&aD",[global])),
+ <<"foobar">> = iolist_to_binary(re:replace("foobar","(?<=(foo))bar\\1","VWpBPnVuwGDg",[])),
+ <<"foobar">> = iolist_to_binary(re:replace("foobar","(?<=(foo))bar\\1","VWpBPnVuwGDg",[global])),
+ <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<=(foo))bar\\1","&jX",[])),
+ <<"barfoo">> = iolist_to_binary(re:replace("barfoo","(?<=(foo))bar\\1","&jX",[global])),
+ <<"sQWfkfUNJnPcyC">> = iolist_to_binary(re:replace("saturday","(?i:saturday|sunday)","sQ\\1Wf\\1kfUNJnPcyC",[])),
+ <<"sQWfkfUNJnPcyC">> = iolist_to_binary(re:replace("saturday","(?i:saturday|sunday)","sQ\\1Wf\\1kfUNJnPcyC",[global])),
+ <<"xWJnRsundayofsundayP">> = iolist_to_binary(re:replace("sunday","(?i:saturday|sunday)","xWJn\\1R&of\\1&P",[])),
+ <<"xWJnRsundayofsundayP">> = iolist_to_binary(re:replace("sunday","(?i:saturday|sunday)","xWJn\\1R&of\\1&P",[global])),
+ <<"SaturdayWo">> = iolist_to_binary(re:replace("Saturday","(?i:saturday|sunday)","&W\\1o",[])),
+ <<"SaturdayWo">> = iolist_to_binary(re:replace("Saturday","(?i:saturday|sunday)","&W\\1o",[global])),
+ <<"TdQtxuqoDxI">> = iolist_to_binary(re:replace("Sunday","(?i:saturday|sunday)","TdQtxuqoDxI",[])),
+ <<"TdQtxuqoDxI">> = iolist_to_binary(re:replace("Sunday","(?i:saturday|sunday)","TdQtxuqoDxI",[global])),
+ <<"tSATURDAYpA">> = iolist_to_binary(re:replace("SATURDAY","(?i:saturday|sunday)","t&\\1pA",[])),
+ <<"tSATURDAYpA">> = iolist_to_binary(re:replace("SATURDAY","(?i:saturday|sunday)","t&\\1pA",[global])),
+ <<"PSUNDAYVdHPKeqeCHsbPht">> = iolist_to_binary(re:replace("SUNDAY","(?i:saturday|sunday)","P&VdHPKeqeCH\\1sbPht",[])),
+ <<"PSUNDAYVdHPKeqeCHsbPht">> = iolist_to_binary(re:replace("SUNDAY","(?i:saturday|sunday)","P&VdHPKeqeCH\\1sbPht",[global])),
+ <<"ADh">> = iolist_to_binary(re:replace("SunDay","(?i:saturday|sunday)","A\\1D\\1h\\1",[])),
+ <<"ADh">> = iolist_to_binary(re:replace("SunDay","(?i:saturday|sunday)","A\\1D\\1h\\1",[global])),
+ <<"mGKtRabcxPabcxJ">> = iolist_to_binary(re:replace("abcx","(a(?i)bc|BB)x","mGKtR&P&J",[])),
+ <<"mGKtRabcxPabcxJ">> = iolist_to_binary(re:replace("abcx","(a(?i)bc|BB)x","mGKtR&P&J",[global])),
+ <<"oaBCxMk">> = iolist_to_binary(re:replace("aBCx","(a(?i)bc|BB)x","o&Mk",[])),
+ <<"oaBCxMk">> = iolist_to_binary(re:replace("aBCx","(a(?i)bc|BB)x","o&Mk",[global])),
+ <<"BbbxAbbbbw">> = iolist_to_binary(re:replace("bbx","(a(?i)bc|BB)x","B&A\\1\\1w",[])),
+ <<"BbbxAbbbbw">> = iolist_to_binary(re:replace("bbx","(a(?i)bc|BB)x","B&A\\1\\1w",[global])),
+ <<"mJcBBAxatfogiBBBBOBBxw">> = iolist_to_binary(re:replace("BBx","(a(?i)bc|BB)x","mJc\\1Axatfogi\\1\\1O&w",[])),
+ <<"mJcBBAxatfogiBBBBOBBxw">> = iolist_to_binary(re:replace("BBx","(a(?i)bc|BB)x","mJc\\1Axatfogi\\1\\1O&w",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)bc|BB)x","snLiVTr\\1v&GcLOx",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(a(?i)bc|BB)x","snLiVTr\\1v&GcLOx",[global])),
+ <<"abcX">> = iolist_to_binary(re:replace("abcX","(a(?i)bc|BB)x","cUgeDoMeUddk\\1X&",[])),
+ <<"abcX">> = iolist_to_binary(re:replace("abcX","(a(?i)bc|BB)x","cUgeDoMeUddk\\1X&",[global])),
+ <<"aBCX">> = iolist_to_binary(re:replace("aBCX","(a(?i)bc|BB)x","x\\1a&yaxHWdGs&udxU",[])),
+ <<"aBCX">> = iolist_to_binary(re:replace("aBCX","(a(?i)bc|BB)x","x\\1a&yaxHWdGs&udxU",[global])),
+ <<"bbX">> = iolist_to_binary(re:replace("bbX","(a(?i)bc|BB)x","AmUQ&rURn&&",[])),
+ <<"bbX">> = iolist_to_binary(re:replace("bbX","(a(?i)bc|BB)x","AmUQ&rURn&&",[global])),
+ <<"BBX">> = iolist_to_binary(re:replace("BBX","(a(?i)bc|BB)x","&\\1bNvEcoUrediWbu&Pbp",[])),
+ <<"BBX">> = iolist_to_binary(re:replace("BBX","(a(?i)bc|BB)x","&\\1bNvEcoUrediWbu&Pbp",[global])),
+ <<"UvDhoExRiacBIgOkt">> = iolist_to_binary(re:replace("ac","^([ab](?i)[cd]|[ef])","UvDhoExRi&BIgOkt",[])),
+ <<"UvDhoExRiacBIgOkt">> = iolist_to_binary(re:replace("ac","^([ab](?i)[cd]|[ef])","UvDhoExRi&BIgOkt",[global])),
+ <<"xPaCaCRDAtETUaCMGcb">> = iolist_to_binary(re:replace("aC","^([ab](?i)[cd]|[ef])","xP&\\1RDAtETU\\1MGcb",[])),
+ <<"xPaCaCRDAtETUaCMGcb">> = iolist_to_binary(re:replace("aC","^([ab](?i)[cd]|[ef])","xP&\\1RDAtETU\\1MGcb",[global])),
+ <<"YrbDPg">> = iolist_to_binary(re:replace("bD","^([ab](?i)[cd]|[ef])","Yr&Pg",[])),
+ <<"YrbDPg">> = iolist_to_binary(re:replace("bD","^([ab](?i)[cd]|[ef])","Yr&Pg",[global])),
+ <<"vxPeqqmHlephant">> = iolist_to_binary(re:replace("elephant","^([ab](?i)[cd]|[ef])","vxP&qqmH",[])),
+ <<"vxPeqqmHlephant">> = iolist_to_binary(re:replace("elephant","^([ab](?i)[cd]|[ef])","vxP&qqmH",[global])),
+ <<"CXttEDburope">> = iolist_to_binary(re:replace("Europe","^([ab](?i)[cd]|[ef])","CXtt\\1Db",[])),
+ <<"CXttEDburope">> = iolist_to_binary(re:replace("Europe","^([ab](?i)[cd]|[ef])","CXtt\\1Db",[global])),
+ <<"ckdAsOrog">> = iolist_to_binary(re:replace("frog","^([ab](?i)[cd]|[ef])","ckdAsO",[])),
+ <<"ckdAsOrog">> = iolist_to_binary(re:replace("frog","^([ab](?i)[cd]|[ef])","ckdAsO",[global])),
+ <<"FLAarance">> = iolist_to_binary(re:replace("France","^([ab](?i)[cd]|[ef])","\\1LAa",[])),
+ <<"FLAarance">> = iolist_to_binary(re:replace("France","^([ab](?i)[cd]|[ef])","\\1LAa",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([ab](?i)[cd]|[ef])","&dK",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^([ab](?i)[cd]|[ef])","&dK",[global])),
+ <<"Africa">> = iolist_to_binary(re:replace("Africa","^([ab](?i)[cd]|[ef])","he&mN&m",[])),
+ <<"Africa">> = iolist_to_binary(re:replace("Africa","^([ab](?i)[cd]|[ef])","he&mN&m",[global])),
+ <<"QwnababababWRxgc">> = iolist_to_binary(re:replace("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","Qwn&\\1\\1&WRxgc",[])),
+ <<"QwnababababWRxgc">> = iolist_to_binary(re:replace("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","Qwn&\\1\\1&WRxgc",[global])),
+ <<"alixQPHvMhCA">> = iolist_to_binary(re:replace("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","alixQPHvMhCA",[])),
+ <<"alixQPHvMhCA">> = iolist_to_binary(re:replace("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","alixQPHvMhCA",[global])),
+ <<"fRTxgJVEjxyBxyliXrOuh">> = iolist_to_binary(re:replace("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","fRTxgJVEj\\1B\\1liXrOuh",[])),
+ <<"fRTxgJVEjxyBxyliXrOuh">> = iolist_to_binary(re:replace("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","fRTxgJVEj\\1B\\1liXrOuh",[global])),
+ <<"xYRFpytKCFxYlEt">> = iolist_to_binary(re:replace("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&RFpytKCF&lEt",[])),
+ <<"xYRFpytKCFxYlEt">> = iolist_to_binary(re:replace("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&RFpytKCF&lEt",[global])),
+ <<"vgzjebra">> = iolist_to_binary(re:replace("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","vg&j",[])),
+ <<"vgzjebra">> = iolist_to_binary(re:replace("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","vg&j",[global])),
+ <<"eZFmjyambesi">> = iolist_to_binary(re:replace("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","e&Fmjy",[])),
+ <<"eZFmjyambesi">> = iolist_to_binary(re:replace("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","e&Fmjy",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","a",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","a",[global])),
+ <<"aCD">> = iolist_to_binary(re:replace("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","gEOo",[])),
+ <<"aCD">> = iolist_to_binary(re:replace("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","gEOo",[global])),
+ <<"XY">> = iolist_to_binary(re:replace("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&OrTvY&r\\1a\\1tNgO\\1",[])),
+ <<"XY">> = iolist_to_binary(re:replace("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)","&OrTvY&r\\1a\\1tNgO\\1",[global])),
+ <<"foo
+sutSyiAVbardY">> = iolist_to_binary(re:replace("foo
+bar","(?<=foo\\n)^bar","sutSyiAV&dY",[multiline])),
+ <<"foo
+sutSyiAVbardY">> = iolist_to_binary(re:replace("foo
+bar","(?<=foo\\n)^bar","sutSyiAV&dY",[multiline,global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=foo\\n)^bar","SbD\\1F&CKeqGUc\\1&",[multiline])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=foo\\n)^bar","SbD\\1F&CKeqGUc\\1&",[multiline,
+ global])),
+ <<"bar">> = iolist_to_binary(re:replace("bar","(?<=foo\\n)^bar","yi&DP",[multiline])),
+ <<"bar">> = iolist_to_binary(re:replace("bar","(?<=foo\\n)^bar","yi&DP",[multiline,
+ global])),
+ <<"baz
bar">> = iolist_to_binary(re:replace("baz
-bar","(?<=foo\\n)^bar","&JIhqO&Da",[multiline])),
-?line <<"baz
+bar","(?<=foo\\n)^bar","hGG",[multiline])),
+ <<"baz
bar">> = iolist_to_binary(re:replace("baz
-bar","(?<=foo\\n)^bar","&JIhqO&Da",[multiline,global])),
-?line <<"baruQUCmWhYKFBWj">> = iolist_to_binary(re:replace("barbaz","(?<=(?<!foo)bar)baz","uQUCmWhYKF\\1BWj\\1",[])),
-?line <<"baruQUCmWhYKFBWj">> = iolist_to_binary(re:replace("barbaz","(?<=(?<!foo)bar)baz","uQUCmWhYKF\\1BWj\\1",[global])),
-?line <<"barbarTNMlbazRYUbazYJyQER">> = iolist_to_binary(re:replace("barbarbaz","(?<=(?<!foo)bar)baz","TNMl\\1&RYU&YJyQER",[])),
-?line <<"barbarTNMlbazRYUbazYJyQER">> = iolist_to_binary(re:replace("barbarbaz","(?<=(?<!foo)bar)baz","TNMl\\1&RYU&YJyQER",[global])),
-?line <<"koobarxhTvv">> = iolist_to_binary(re:replace("koobarbaz","(?<=(?<!foo)bar)baz","xhTvv\\1",[])),
-?line <<"koobarxhTvv">> = iolist_to_binary(re:replace("koobarbaz","(?<=(?<!foo)bar)baz","xhTvv\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?<!foo)bar)baz","uHmyIQ&yV&hQ&Di&\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?<!foo)bar)baz","uHmyIQ&yV&hQ&Di&\\1",[global])),
-?line <<"baz">> = iolist_to_binary(re:replace("baz","(?<=(?<!foo)bar)baz","B",[])),
-?line <<"baz">> = iolist_to_binary(re:replace("baz","(?<=(?<!foo)bar)baz","B",[global])),
-?line <<"foobarbaz">> = iolist_to_binary(re:replace("foobarbaz","(?<=(?<!foo)bar)baz","BuNXYgf",[])),
-?line <<"foobarbaz">> = iolist_to_binary(re:replace("foobarbaz","(?<=(?<!foo)bar)baz","BuNXYgf",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?){4}$","N\\1&Psi",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?){4}$","N\\1&Psi",[global])),
-?line <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?){4}$","&",[])),
-?line <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?){4}$","&",[global])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?){4}$","\\1OPhpdjl&J&F&j",[])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?){4}$","\\1OPhpdjl&J&F&j",[global])),
-?line <<"oEaaPaaaaFyHMpKbNxCqlyG">> = iolist_to_binary(re:replace("aaaa","^(a\\1?){4}$","oE\\1\\1P&FyHMpKbNxCqlyG",[])),
-?line <<"oEaaPaaaaFyHMpKbNxCqlyG">> = iolist_to_binary(re:replace("aaaa","^(a\\1?){4}$","oE\\1\\1P&FyHMpKbNxCqlyG",[global])),
-?line <<"aaaaaawR">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?){4}$","\\1&wR",[])),
-?line <<"aaaaaawR">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?){4}$","\\1&wR",[global])),
-?line <<"SaWUrMlNUaaaaaaaaaaaaaan">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?){4}$","S\\1WUrMlNU&&n",[])),
-?line <<"SaWUrMlNUaaaaaaaaaaaaaan">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?){4}$","S\\1WUrMlNU&&n",[global])),
-?line <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?){4}$","Vk&&RgxI\\1\\1pJ&&",[])),
-?line <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?){4}$","Vk&&RgxI\\1\\1pJ&&",[global])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","x",[])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","x",[global])),
-?line <<"FEkJCFraaaaaaaaaaaaaaaaaaaaMlwosy">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","FEkJCFr&&Mlwosy",[])),
-?line <<"FEkJCFraaaaaaaaaaaaaaaaaaaaMlwosy">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","FEkJCFr&&Mlwosy",[global])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","&IO",[])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","&IO",[global])),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?){4}$","lKw",[])),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?){4}$","lKw",[global])),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?){4}$","nN&bSVJh\\1J\\1d&Ko",[])),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?){4}$","nN&bSVJh\\1J\\1d&Ko",[global])),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?){4}$","Fut\\1X\\1",[])),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?){4}$","Fut\\1X\\1",[global])),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?){4}$","v",[])),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?){4}$","v",[global])),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?){4}$","b",[])),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?){4}$","b",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","VC",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","VC",[global])),
-?line <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","&&mKsMkXfPP",[])),
-?line <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","&&mKsMkXfPP",[global])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","c\\1HhkFrF&vy&\\1bmNHPw",[])),
-?line <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","c\\1HhkFrF&vy&\\1bmNHPw",[global])),
-?line <<"SnJcTQRFQiat">> = iolist_to_binary(re:replace("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","SnJcTQRFQi\\1t",[])),
-?line <<"SnJcTQRFQiat">> = iolist_to_binary(re:replace("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","SnJcTQRFQi\\1t",[global])),
-?line <<"MaaaaakiYfFeaaaaaetD">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","M&kiYfFe&etD",[])),
-?line <<"MaaaaakiYfFeaaaaaetD">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","M&kiYfFe&etD",[global])),
-?line <<"WDaaaaaasEn">> = iolist_to_binary(re:replace("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","WD&sEn",[])),
-?line <<"WDaaaaaasEn">> = iolist_to_binary(re:replace("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","WD&sEn",[global])),
-?line <<"sauvrqyMaaaaaaaEvrD">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","s\\1uvrqyM&EvrD",[])),
-?line <<"sauvrqyMaaaaaaaEvrD">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","s\\1uvrqyM&EvrD",[global])),
-?line <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","WyhxEMLFTAGuL&Hymc",[])),
-?line <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","WyhxEMLFTAGuL&Hymc",[global])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","\\1WXGI&T&rPigX\\1IAQu",[])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","\\1WXGI&T&rPigX\\1IAQu",[global])),
-?line <<"HaaaaaaaaaajHUn">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","H&jHUn",[])),
-?line <<"HaaaaaaaaaajHUn">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","H&jHUn",[global])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","e",[])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","e",[global])),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dSM\\1GGkyX&xNUIVG&",[])),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dSM\\1GGkyX&xNUIVG&",[global])),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","p\\1T",[])),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","p\\1T",[global])),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","wOWcxD\\1e&",[])),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","wOWcxD\\1e&",[global])),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","C&CWw&kAen&",[])),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","C&CWw&kAen&",[global])),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","rkiiFEQ&WDahG&lSqR",[])),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","rkiiFEQ&WDahG&lSqR",[global])),
-?line <<"babcoabcabcESPlWKsDDog">> = iolist_to_binary(re:replace("abc","abc","b&o&&\\1ES\\1\\1PlWKsD\\1Dog",[])),
-?line <<"babcoabcabcESPlWKsDDog">> = iolist_to_binary(re:replace("abc","abc","b&o&&\\1ES\\1\\1PlWKsD\\1Dog",[global])),
-?line <<"xFfvcJy">> = iolist_to_binary(re:replace("xabcy","abc","FfvcJ",[])),
-?line <<"xFfvcJy">> = iolist_to_binary(re:replace("xabcy","abc","FfvcJ",[global])),
-?line <<"abaGvHrWEIIXoI">> = iolist_to_binary(re:replace("ababc","abc","a\\1\\1G\\1v\\1HrWEIIXoI\\1",[])),
-?line <<"abaGvHrWEIIXoI">> = iolist_to_binary(re:replace("ababc","abc","a\\1\\1G\\1v\\1HrWEIIXoI\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","DOtxCgk&UIBKmk\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","DOtxCgk&UIBKmk\\1",[global])),
-?line <<"xbc">> = iolist_to_binary(re:replace("xbc","abc","qmfvVTE\\1aHl\\1BT&U",[])),
-?line <<"xbc">> = iolist_to_binary(re:replace("xbc","abc","qmfvVTE\\1aHl\\1BT&U",[global])),
-?line <<"axc">> = iolist_to_binary(re:replace("axc","abc","uN&yFKoX\\1pBswe\\1HLf",[])),
-?line <<"axc">> = iolist_to_binary(re:replace("axc","abc","uN&yFKoX\\1pBswe\\1HLf",[global])),
-?line <<"abx">> = iolist_to_binary(re:replace("abx","abc","&v\\1\\1QwMhqY",[])),
-?line <<"abx">> = iolist_to_binary(re:replace("abx","abc","&v\\1\\1QwMhqY",[global])),
-?line <<"FIOGpcHeabcNHJ">> = iolist_to_binary(re:replace("abc","ab*c","FIOGpcHe&NHJ",[])),
-?line <<"FIOGpcHeabcNHJ">> = iolist_to_binary(re:replace("abc","ab*c","FIOGpcHe&NHJ",[global])),
-?line <<"abcbnCUabcnxKKHabcXVaO">> = iolist_to_binary(re:replace("abc","ab*bc","&bnCU&n\\1xKKH&\\1XVaO",[])),
-?line <<"abcbnCUabcnxKKHabcXVaO">> = iolist_to_binary(re:replace("abc","ab*bc","&bnCU&n\\1xKKH&\\1XVaO",[global])),
-?line <<"bFtejUbnDA">> = iolist_to_binary(re:replace("abbc","ab*bc","bFtejUbn\\1DA",[])),
-?line <<"bFtejUbnDA">> = iolist_to_binary(re:replace("abbc","ab*bc","bFtejUbn\\1DA",[global])),
-?line <<"W">> = iolist_to_binary(re:replace("abbbbc","ab*bc","W",[])),
-?line <<"W">> = iolist_to_binary(re:replace("abbbbc","ab*bc","W",[global])),
-?line <<"BlaEararHKSGaabbbbc">> = iolist_to_binary(re:replace("abbbbc",".{1}","Bl&E&r&r\\1HKSG&&\\1",[])),
-?line <<"BlaEararHKSGaaBlbEbrbrHKSGbbBlbEbrbrHKSGbbBlbEbrbrHKSGbbBlbEbrbrHKSGbbBlcEcrcrHKSGcc">> = iolist_to_binary(re:replace("abbbbc",".{1}","Bl&E&r&r\\1HKSG&&\\1",[global])),
-?line <<"pabbbcRXxcEabbbIabbbXTbc">> = iolist_to_binary(re:replace("abbbbc",".{3,4}","p&cRXxcE&I&XT",[])),
-?line <<"pabbbcRXxcEabbbIabbbXTbc">> = iolist_to_binary(re:replace("abbbbc",".{3,4}","p&cRXxcE&I&XT",[global])),
-?line <<"HkIFCqCBaabbbbcyHm">> = iolist_to_binary(re:replace("abbbbc","ab{0,}bc","Hk\\1IFCq\\1CBa&yHm",[])),
-?line <<"HkIFCqCBaabbbbcyHm">> = iolist_to_binary(re:replace("abbbbc","ab{0,}bc","Hk\\1IFCq\\1CBa&yHm",[global])),
-?line <<"HBKHabbcHxdabbciuxleGabbc">> = iolist_to_binary(re:replace("abbc","ab+bc","HBKH&\\1Hx\\1d&iuxleG&",[])),
-?line <<"HBKHabbcHxdabbciuxleGabbc">> = iolist_to_binary(re:replace("abbc","ab+bc","HBKH&\\1Hx\\1d&iuxleG&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","&Pm&sRjS",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","&Pm&sRjS",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","ab+bc","IiWLkYFrIIhMk\\1D\\1vagP",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","ab+bc","IiWLkYFrIIhMk\\1D\\1vagP",[global])),
-?line <<"abq">> = iolist_to_binary(re:replace("abq","ab+bc","&\\1\\1UiX\\1&MgPB",[])),
-?line <<"abq">> = iolist_to_binary(re:replace("abq","ab+bc","&\\1\\1UiX\\1&MgPB",[global])),
-?line <<"WLvlqVMuiA">> = iolist_to_binary(re:replace("abbbbc","ab+bc","WLvlqVMuiA",[])),
-?line <<"WLvlqVMuiA">> = iolist_to_binary(re:replace("abbbbc","ab+bc","WLvlqVMuiA",[global])),
-?line <<"qQ">> = iolist_to_binary(re:replace("abbbbc","ab{1,}bc","qQ",[])),
-?line <<"qQ">> = iolist_to_binary(re:replace("abbbbc","ab{1,}bc","qQ",[global])),
-?line <<"ALwvHVhFGH">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","A\\1LwvHVhFGH",[])),
-?line <<"ALwvHVhFGH">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","A\\1LwvHVhFGH",[global])),
-?line <<"ORLsuabbbbc">> = iolist_to_binary(re:replace("abbbbc","ab{3,4}bc","ORL\\1su&",[])),
-?line <<"ORLsuabbbbc">> = iolist_to_binary(re:replace("abbbbc","ab{3,4}bc","ORL\\1su&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}bc","APwPKjxS\\1Di&\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}bc","APwPKjxS\\1Di&\\1",[global])),
-?line <<"abq">> = iolist_to_binary(re:replace("abq","ab{4,5}bc","FVk",[])),
-?line <<"abq">> = iolist_to_binary(re:replace("abq","ab{4,5}bc","FVk",[global])),
-?line <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","ab{4,5}bc","PO&t",[])),
-?line <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","ab{4,5}bc","PO&t",[global])),
-?line <<"EHtIXyQbabbclaCBg">> = iolist_to_binary(re:replace("abbc","ab?bc","EHtIXyQb&laCBg",[])),
-?line <<"EHtIXyQbabbclaCBg">> = iolist_to_binary(re:replace("abbc","ab?bc","EHtIXyQb&laCBg",[global])),
-?line <<"SVx">> = iolist_to_binary(re:replace("abc","ab?bc","SVx",[])),
-?line <<"SVx">> = iolist_to_binary(re:replace("abc","ab?bc","SVx",[global])),
-?line <<"KJabcWtBNRX">> = iolist_to_binary(re:replace("abc","ab{0,1}bc","KJ&WtBNRX",[])),
-?line <<"KJabcWtBNRX">> = iolist_to_binary(re:replace("abc","ab{0,1}bc","KJ&WtBNRX",[global])),
-?line <<"oabcQlOwmmeXxTySSV">> = iolist_to_binary(re:replace("abc","ab?c","o&Q\\1lOwmmeXx\\1TySSV",[])),
-?line <<"oabcQlOwmmeXxTySSV">> = iolist_to_binary(re:replace("abc","ab?c","o&Q\\1lOwmmeXx\\1TySSV",[global])),
-?line <<"abcQpPYPtQcFabcCDEcWOl">> = iolist_to_binary(re:replace("abc","ab{0,1}c","&QpPY\\1PtQcF&CDEcWOl",[])),
-?line <<"abcQpPYPtQcFabcCDEcWOl">> = iolist_to_binary(re:replace("abc","ab{0,1}c","&QpPY\\1PtQcF&CDEcWOl",[global])),
-?line <<"YbB">> = iolist_to_binary(re:replace("abc","^abc$","YbB",[])),
-?line <<"YbB">> = iolist_to_binary(re:replace("abc","^abc$","YbB",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","r&t\\1OLYfC",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","r&t\\1OLYfC",[global])),
-?line <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","^abc$","P&QwAxc\\1vYfQF",[])),
-?line <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","^abc$","P&QwAxc\\1vYfQF",[global])),
-?line <<"abcc">> = iolist_to_binary(re:replace("abcc","^abc$","d\\1j&LhAN\\1JvojhyCmSwU",[])),
-?line <<"abcc">> = iolist_to_binary(re:replace("abcc","^abc$","d\\1j&LhAN\\1JvojhyCmSwU",[global])),
-?line <<"yabcxAc">> = iolist_to_binary(re:replace("abcc","^abc","y\\1&xA",[])),
-?line <<"yabcxAc">> = iolist_to_binary(re:replace("abcc","^abc","y\\1&xA",[global])),
-?line <<"awrOx">> = iolist_to_binary(re:replace("aabc","abc$","wrOx",[])),
-?line <<"awrOx">> = iolist_to_binary(re:replace("aabc","abc$","wrOx",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","XLe",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","XLe",[global])),
-?line <<"aRthCinfyGSJTg">> = iolist_to_binary(re:replace("aabc","abc$","\\1RthCi\\1nfyGSJTg",[])),
-?line <<"aRthCinfyGSJTg">> = iolist_to_binary(re:replace("aabc","abc$","\\1RthCi\\1nfyGSJTg",[global])),
-?line <<"aabcd">> = iolist_to_binary(re:replace("aabcd","abc$","UT&CPLaUA\\1nluQPA",[])),
-?line <<"aabcd">> = iolist_to_binary(re:replace("aabcd","abc$","UT&CPLaUA\\1nluQPA",[global])),
-?line <<"hYaxcodDoHwNTLtDQoabc">> = iolist_to_binary(re:replace("abc","^","hYaxc&o&dDoHwNTLtDQo",[])),
-?line <<"hYaxcodDoHwNTLtDQoabc">> = iolist_to_binary(re:replace("abc","^","hYaxc&o&dDoHwNTLtDQo",[global])),
-?line <<"abcepxRqYNdJMdQeRKr">> = iolist_to_binary(re:replace("abc","$","epxRqYNdJ&MdQeR&Kr",[])),
-?line <<"abcepxRqYNdJMdQeRKr">> = iolist_to_binary(re:replace("abc","$","epxRqYNdJ&MdQeR&Kr",[global])),
-?line <<"vnabcXvSRrFjWv">> = iolist_to_binary(re:replace("abc","a.c","\\1vn&X\\1vSRrFj\\1Wv",[])),
-?line <<"vnabcXvSRrFjWv">> = iolist_to_binary(re:replace("abc","a.c","\\1vn&X\\1vSRrFj\\1Wv",[global])),
-?line <<"YSYAvHCLl">> = iolist_to_binary(re:replace("axc","a.c","Y\\1\\1SYAvHCLl",[])),
-?line <<"YSYAvHCLl">> = iolist_to_binary(re:replace("axc","a.c","Y\\1\\1SYAvHCLl",[global])),
-?line <<"oTi">> = iolist_to_binary(re:replace("axyzc","a.*c","oTi",[])),
-?line <<"oTi">> = iolist_to_binary(re:replace("axyzc","a.*c","oTi",[global])),
-?line <<"abdd">> = iolist_to_binary(re:replace("abd","a[bc]d","&d",[])),
-?line <<"abdd">> = iolist_to_binary(re:replace("abd","a[bc]d","&d",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bc]d","m",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bc]d","m",[global])),
-?line <<"axyzd">> = iolist_to_binary(re:replace("axyzd","a[bc]d","xw\\1kClblo&A&pX",[])),
-?line <<"axyzd">> = iolist_to_binary(re:replace("axyzd","a[bc]d","xw\\1kClblo&A&pX",[global])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","a[bc]d","DXVJBfd&&nWiQKDXx&p",[])),
-?line <<"abc">> = iolist_to_binary(re:replace("abc","a[bc]d","DXVJBfd&&nWiQKDXx&p",[global])),
-?line <<"qgcyq">> = iolist_to_binary(re:replace("ace","a[b-d]e","qgcyq\\1",[])),
-?line <<"qgcyq">> = iolist_to_binary(re:replace("ace","a[b-d]e","qgcyq\\1",[global])),
-?line <<"aSo">> = iolist_to_binary(re:replace("aac","a[b-d]","S\\1o",[])),
-?line <<"aSo">> = iolist_to_binary(re:replace("aac","a[b-d]","S\\1o",[global])),
-?line <<"FalJiLh">> = iolist_to_binary(re:replace("a-","a[-b]","FalJ\\1iL\\1h",[])),
-?line <<"FalJiLh">> = iolist_to_binary(re:replace("a-","a[-b]","FalJ\\1iL\\1h",[global])),
-?line <<"aea-">> = iolist_to_binary(re:replace("a-","a[b-]","ae&",[])),
-?line <<"aea-">> = iolist_to_binary(re:replace("a-","a[b-]","ae&",[global])),
-?line <<"Uxci">> = iolist_to_binary(re:replace("a]","a]","Uxci",[])),
-?line <<"Uxci">> = iolist_to_binary(re:replace("a]","a]","Uxci",[global])),
-?line <<"fuDs">> = iolist_to_binary(re:replace("a]b","a[]]b","fu\\1Ds",[])),
-?line <<"fuDs">> = iolist_to_binary(re:replace("a]b","a[]]b","fu\\1Ds",[global])),
-?line <<"S">> = iolist_to_binary(re:replace("aed","a[^bc]d","\\1S",[])),
-?line <<"S">> = iolist_to_binary(re:replace("aed","a[^bc]d","\\1S",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^bc]d","q\\1c",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^bc]d","q\\1c",[global])),
-?line <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","CwigRG\\1",[])),
-?line <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","CwigRG\\1",[global])),
-?line <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","G&sOiYoXxtvjC\\1C",[])),
-?line <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","G&sOiYoXxtvjC\\1C",[global])),
-?line <<"WjwradcGadcGdiadcJadcadc">> = iolist_to_binary(re:replace("adc","a[^-b]c","Wjwr&G&Gdi&J&&",[])),
-?line <<"WjwradcGadcGdiadcJadcadc">> = iolist_to_binary(re:replace("adc","a[^-b]c","Wjwr&G&Gdi&J&&",[global])),
-?line <<"sXuNQuSoADXQHaadcc">> = iolist_to_binary(re:replace("adc","a[^]b]c","sXuNQuS\\1oAD\\1XQH\\1a&c",[])),
-?line <<"sXuNQuSoADXQHaadcc">> = iolist_to_binary(re:replace("adc","a[^]b]c","sXuNQuS\\1oAD\\1XQH\\1a&c",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^]b]c","\\1WTVFfqlY\\1I",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^]b]c","\\1WTVFfqlY\\1I",[global])),
-?line <<"a-c">> = iolist_to_binary(re:replace("a-c","a[^]b]c","&",[])),
-?line <<"a-c">> = iolist_to_binary(re:replace("a-c","a[^]b]c","&",[global])),
-?line <<"a]c">> = iolist_to_binary(re:replace("a]c","a[^]b]c","U\\1ASb",[])),
-?line <<"a]c">> = iolist_to_binary(re:replace("a]c","a[^]b]c","U\\1ASb",[global])),
-?line <<"FhmTxP-">> = iolist_to_binary(re:replace("a-","\\ba\\b","FhmTxP",[])),
-?line <<"FhmTxP-">> = iolist_to_binary(re:replace("a-","\\ba\\b","FhmTxP",[global])),
-?line <<"-sIgAwOVeaIs">> = iolist_to_binary(re:replace("-a","\\ba\\b","sIgAwOVe&Is",[])),
-?line <<"-sIgAwOVeaIs">> = iolist_to_binary(re:replace("-a","\\ba\\b","sIgAwOVe&Is",[global])),
-?line <<"-K-">> = iolist_to_binary(re:replace("-a-","\\ba\\b","K",[])),
-?line <<"-K-">> = iolist_to_binary(re:replace("-a-","\\ba\\b","K",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\by\\b","NFs\\1N&no&v&LBhrfD",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\by\\b","NFs\\1N&no&v&LBhrfD",[global])),
-?line <<"xy">> = iolist_to_binary(re:replace("xy","\\by\\b","\\1&WFL&q",[])),
-?line <<"xy">> = iolist_to_binary(re:replace("xy","\\by\\b","\\1&WFL&q",[global])),
-?line <<"yz">> = iolist_to_binary(re:replace("yz","\\by\\b","pjeKdgSu&&",[])),
-?line <<"yz">> = iolist_to_binary(re:replace("yz","\\by\\b","pjeKdgSu&&",[global])),
-?line <<"xyz">> = iolist_to_binary(re:replace("xyz","\\by\\b","hyG",[])),
-?line <<"xyz">> = iolist_to_binary(re:replace("xyz","\\by\\b","hyG",[global])),
-?line <<"*** FCasopdebailers">> = iolist_to_binary(re:replace("*** Failers","\\Ba\\B","C\\1&sopdeb&",[])),
-?line <<"*** FCasopdebailers">> = iolist_to_binary(re:replace("*** Failers","\\Ba\\B","C\\1&sopdeb&",[global])),
-?line <<"a-">> = iolist_to_binary(re:replace("a-","\\Ba\\B","mnLWav",[])),
-?line <<"a-">> = iolist_to_binary(re:replace("a-","\\Ba\\B","mnLWav",[global])),
-?line <<"-a">> = iolist_to_binary(re:replace("-a","\\Ba\\B","X&NpSD\\1If",[])),
-?line <<"-a">> = iolist_to_binary(re:replace("-a","\\Ba\\B","X&NpSD\\1If",[global])),
-?line <<"-a-">> = iolist_to_binary(re:replace("-a-","\\Ba\\B","loFA&cpicKF&FLSfj&",[])),
-?line <<"-a-">> = iolist_to_binary(re:replace("-a-","\\Ba\\B","loFA&cpicKF&FLSfj&",[global])),
-?line <<"xyTAT">> = iolist_to_binary(re:replace("xy","\\By\\b","&TAT",[])),
-?line <<"xyTAT">> = iolist_to_binary(re:replace("xy","\\By\\b","&TAT",[global])),
-?line <<"fxz">> = iolist_to_binary(re:replace("yz","\\by\\B","fx\\1\\1",[])),
-?line <<"fxz">> = iolist_to_binary(re:replace("yz","\\by\\B","fx\\1\\1",[global])),
-?line <<"xKryOdAEz">> = iolist_to_binary(re:replace("xyz","\\By\\B","Kr&OdAE",[])),
-?line <<"xKryOdAEz">> = iolist_to_binary(re:replace("xyz","\\By\\B","Kr&OdAE",[global])),
-?line <<"IRVtaAqLDh">> = iolist_to_binary(re:replace("a","\\w","IRVt&AqLDh\\1",[])),
-?line <<"IRVtaAqLDh">> = iolist_to_binary(re:replace("a","\\w","IRVt&AqLDh\\1",[global])),
-?line <<"EckncnNqwHO">> = iolist_to_binary(re:replace("-","\\W","EckncnNq\\1wHO\\1",[])),
-?line <<"EckncnNqwHO">> = iolist_to_binary(re:replace("-","\\W","EckncnNq\\1wHO\\1",[global])),
-?line <<"Yf*VvjLGbD*h** Failers">> = iolist_to_binary(re:replace("*** Failers","\\W","Yf&VvjLGbD&h",[])),
-?line <<"Yf*VvjLGbD*hYf*VvjLGbD*hYf*VvjLGbD*hYf VvjLGbD hFailers">> = iolist_to_binary(re:replace("*** Failers","\\W","Yf&VvjLGbD&h",[global])),
-?line <<"GBjpbjk">> = iolist_to_binary(re:replace("-","\\W","GBjpbjk",[])),
-?line <<"GBjpbjk">> = iolist_to_binary(re:replace("-","\\W","GBjpbjk",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","\\W","j",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","\\W","j",[global])),
-?line <<"VAiCYGiBXpa bumnbi">> = iolist_to_binary(re:replace("a b","a\\sb","VAiCYGiBX\\1p&umn\\1bi",[])),
-?line <<"VAiCYGiBXpa bumnbi">> = iolist_to_binary(re:replace("a b","a\\sb","VAiCYGiBX\\1p&umn\\1bi",[global])),
-?line <<"Etv">> = iolist_to_binary(re:replace("a-b","a\\Sb","Etv",[])),
-?line <<"Etv">> = iolist_to_binary(re:replace("a-b","a\\Sb","Etv",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Sb","EbhHjGSDvEtLT\\1cSURa",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Sb","EbhHjGSDvEtLT\\1cSURa",[global])),
-?line <<"uD">> = iolist_to_binary(re:replace("a-b","a\\Sb","uD",[])),
-?line <<"uD">> = iolist_to_binary(re:replace("a-b","a\\Sb","uD",[global])),
-?line <<"a b">> = iolist_to_binary(re:replace("a b","a\\Sb","fQm&D&nJmqrWl",[])),
-?line <<"a b">> = iolist_to_binary(re:replace("a b","a\\Sb","fQm&D&nJmqrWl",[global])),
-?line <<"jti">> = iolist_to_binary(re:replace("1","\\d","jti",[])),
-?line <<"jti">> = iolist_to_binary(re:replace("1","\\d","jti",[global])),
-?line <<"-m">> = iolist_to_binary(re:replace("-","\\D","&m",[])),
-?line <<"-m">> = iolist_to_binary(re:replace("-","\\D","&m",[global])),
-?line <<"Tw** Failers">> = iolist_to_binary(re:replace("*** Failers","\\D","\\1Tw",[])),
-?line <<"TwTwTwTwTwTwTwTwTwTwTw">> = iolist_to_binary(re:replace("*** Failers","\\D","\\1Tw",[global])),
-?line <<"T">> = iolist_to_binary(re:replace("-","\\D","T",[])),
-?line <<"T">> = iolist_to_binary(re:replace("-","\\D","T",[global])),
-?line <<"1">> = iolist_to_binary(re:replace("1","\\D","QkyGdjVcibs",[])),
-?line <<"1">> = iolist_to_binary(re:replace("1","\\D","QkyGdjVcibs",[global])),
-?line <<"Vsg">> = iolist_to_binary(re:replace("a","[\\w]","Vsg",[])),
-?line <<"Vsg">> = iolist_to_binary(re:replace("a","[\\w]","Vsg",[global])),
-?line <<"AeUjdVITmvExYR">> = iolist_to_binary(re:replace("-","[\\W]","AeU\\1jdVITmvExYR\\1",[])),
-?line <<"AeUjdVITmvExYR">> = iolist_to_binary(re:replace("-","[\\W]","AeU\\1jdVITmvExYR\\1",[global])),
-?line <<"WhGTRj*eDnCm** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\W]","WhGTRj&eDnCm",[])),
-?line <<"WhGTRj*eDnCmWhGTRj*eDnCmWhGTRj*eDnCmWhGTRj eDnCmFailers">> = iolist_to_binary(re:replace("*** Failers","[\\W]","WhGTRj&eDnCm",[global])),
-?line <<"c-aqg-Be">> = iolist_to_binary(re:replace("-","[\\W]","c&aqg&Be",[])),
-?line <<"c-aqg-Be">> = iolist_to_binary(re:replace("-","[\\W]","c&aqg&Be",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","[\\W]","lS",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","[\\W]","lS",[global])),
-?line <<"aTa bLH">> = iolist_to_binary(re:replace("a b","a[\\s]b","aT&LH\\1",[])),
-?line <<"aTa bLH">> = iolist_to_binary(re:replace("a b","a[\\s]b","aT&LH\\1",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a-b","a[\\S]b","a",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a-b","a[\\S]b","a",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[\\S]b","b\\1E&yC\\1kT&CwD",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[\\S]b","b\\1E&yC\\1kT&CwD",[global])),
-?line <<"a-bfLEHcwVqa-bwEar">> = iolist_to_binary(re:replace("a-b","a[\\S]b","&fLE\\1\\1Hcw\\1V\\1q&wEar",[])),
-?line <<"a-bfLEHcwVqa-bwEar">> = iolist_to_binary(re:replace("a-b","a[\\S]b","&fLE\\1\\1Hcw\\1V\\1q&wEar",[global])),
-?line <<"a b">> = iolist_to_binary(re:replace("a b","a[\\S]b","E\\1NcSC&l",[])),
-?line <<"a b">> = iolist_to_binary(re:replace("a b","a[\\S]b","E\\1NcSC&l",[global])),
-?line <<"U1LgIwNodaqkLmOQ">> = iolist_to_binary(re:replace("1","[\\d]","U\\1&LgIwNo\\1daqkL\\1mOQ",[])),
-?line <<"U1LgIwNodaqkLmOQ">> = iolist_to_binary(re:replace("1","[\\d]","U\\1&LgIwNo\\1daqkL\\1mOQ",[global])),
-?line <<"XTGOaAL-XOENvmW">> = iolist_to_binary(re:replace("-","[\\D]","XTGOa\\1AL&XOE\\1NvmW",[])),
-?line <<"XTGOaAL-XOENvmW">> = iolist_to_binary(re:replace("-","[\\D]","XTGOa\\1AL&XOE\\1NvmW",[global])),
-?line <<"*rIhW*QnqjR*** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\D]","&\\1r\\1I\\1h\\1W&Q\\1n\\1qjR&",[])),
-?line <<"*rIhW*QnqjR**rIhW*QnqjR**rIhW*QnqjR* rIhW QnqjR FrIhWFQnqjRFarIhWaQnqjRairIhWiQnqjRilrIhWlQnqjRlerIhWeQnqjRerrIhWrQnqjRrsrIhWsQnqjRs">> = iolist_to_binary(re:replace("*** Failers","[\\D]","&\\1r\\1I\\1h\\1W&Q\\1n\\1qjR&",[global])),
-?line <<"TEOmg-mrq">> = iolist_to_binary(re:replace("-","[\\D]","TE\\1Omg&\\1mrq",[])),
-?line <<"TEOmg-mrq">> = iolist_to_binary(re:replace("-","[\\D]","TE\\1Omg&\\1mrq",[global])),
-?line <<"1">> = iolist_to_binary(re:replace("1","[\\D]","YI\\1o&\\1IwvchJgD&&",[])),
-?line <<"1">> = iolist_to_binary(re:replace("1","[\\D]","YI\\1o&\\1IwvchJgD&&",[global])),
-?line <<"DKXoAolSGIabc">> = iolist_to_binary(re:replace("abc","ab|cd","DKXoAolSGI&",[])),
-?line <<"DKXoAolSGIabc">> = iolist_to_binary(re:replace("abc","ab|cd","DKXoAolSGI&",[global])),
-?line <<"tFHUIrVcd">> = iolist_to_binary(re:replace("abcd","ab|cd","tFHUIrV\\1",[])),
-?line <<"tFHUIrVtFHUIrV">> = iolist_to_binary(re:replace("abcd","ab|cd","tFHUIrV\\1",[global])),
-?line <<"doeAAefCeUJ">> = iolist_to_binary(re:replace("def","()ef","oeAA&CeUJ",[])),
-?line <<"doeAAefCeUJ">> = iolist_to_binary(re:replace("def","()ef","oeAA&CeUJ",[global])),
-?line <<"B">> = iolist_to_binary(re:replace("a(b","a\\(b","B",[])),
-?line <<"B">> = iolist_to_binary(re:replace("a(b","a\\(b","B",[global])),
-?line <<"sFcBhj">> = iolist_to_binary(re:replace("ab","a\\(*b","sFcBhj",[])),
-?line <<"sFcBhj">> = iolist_to_binary(re:replace("ab","a\\(*b","sFcBhj",[global])),
-?line <<"iTla((bUcHSjwja((ba((b">> = iolist_to_binary(re:replace("a((b","a\\(*b","iTl&UcHSjwj\\1&&",[])),
-?line <<"iTla((bUcHSjwja((ba((b">> = iolist_to_binary(re:replace("a((b","a\\(*b","iTl&UcHSjwj\\1&&",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","a\\\\b","AkoMVU&",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","a\\\\b","AkoMVU&",[global])),
-?line <<"Gbc">> = iolist_to_binary(re:replace("abc","((a))","G",[])),
-?line <<"Gbc">> = iolist_to_binary(re:replace("abc","((a))","G",[global])),
-?line <<"aaabcTualQ">> = iolist_to_binary(re:replace("abc","(a)b(c)","\\1\\1&Tu\\1lQ",[])),
-?line <<"aaabcTualQ">> = iolist_to_binary(re:replace("abc","(a)b(c)","\\1\\1&Tu\\1lQ",[global])),
-?line <<"aabbCivt">> = iolist_to_binary(re:replace("aabbabc","a+b+c","\\1Civt",[])),
-?line <<"aabbCivt">> = iolist_to_binary(re:replace("aabbabc","a+b+c","\\1Civt",[global])),
-?line <<"aabbT">> = iolist_to_binary(re:replace("aabbabc","a{1,}b{1,}c","T",[])),
-?line <<"aabbT">> = iolist_to_binary(re:replace("aabbabc","a{1,}b{1,}c","T",[global])),
-?line <<"VxJHThVabcketabcebWabc">> = iolist_to_binary(re:replace("abcabc","a.+?c","VxJHThV&ket&ebW",[])),
-?line <<"VxJHThVabcketabcebWVxJHThVabcketabcebW">> = iolist_to_binary(re:replace("abcabc","a.+?c","VxJHThV&ket&ebW",[global])),
-?line <<"LXfabNabCqMabHb">> = iolist_to_binary(re:replace("ab","(a+|b)*","LXf&N&CqM&H\\1",[])),
-?line <<"LXfabNabCqMabHbLXfNCqMH">> = iolist_to_binary(re:replace("ab","(a+|b)*","LXf&N&CqM&H\\1",[global])),
-?line <<"NNopapyUJpabVxnQ">> = iolist_to_binary(re:replace("ab","(a+|b){0,}","NNopapyUJpa\\1VxnQ",[])),
-?line <<"NNopapyUJpabVxnQNNopapyUJpaVxnQ">> = iolist_to_binary(re:replace("ab","(a+|b){0,}","NNopapyUJpa\\1VxnQ",[global])),
-?line <<"cejhccpabbAd">> = iolist_to_binary(re:replace("ab","(a+|b)+","cejhccp&\\1Ad",[])),
-?line <<"cejhccpabbAd">> = iolist_to_binary(re:replace("ab","(a+|b)+","cejhccp&\\1Ad",[global])),
-?line <<"uMqbbBaYPvPbkabNdlb">> = iolist_to_binary(re:replace("ab","(a+|b){1,}","uMqb\\1BaYPvP\\1k&Ndl\\1",[])),
-?line <<"uMqbbBaYPvPbkabNdlb">> = iolist_to_binary(re:replace("ab","(a+|b){1,}","uMqb\\1BaYPvP\\1k&Ndl\\1",[global])),
-?line <<"cyKMb">> = iolist_to_binary(re:replace("ab","(a+|b)?","cyKM",[])),
-?line <<"cyKMcyKMcyKM">> = iolist_to_binary(re:replace("ab","(a+|b)?","cyKM",[global])),
-?line <<"uaaPjgxb">> = iolist_to_binary(re:replace("ab","(a+|b){0,1}","u\\1\\1Pjgx",[])),
-?line <<"uaaPjgxubbPjgxuPjgx">> = iolist_to_binary(re:replace("ab","(a+|b){0,1}","u\\1\\1Pjgx",[global])),
-?line <<"JsG">> = iolist_to_binary(re:replace("cde","[^ab]*","\\1J\\1sG",[])),
-?line <<"JsGJsG">> = iolist_to_binary(re:replace("cde","[^ab]*","\\1J\\1sG",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","NyHCvfJjxj\\1SrM&BdF",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","NyHCvfJjxj\\1SrM&BdF",[global])),
-?line <<"b">> = iolist_to_binary(re:replace("b","abc","T&\\1Jd\\1tQxU\\1&\\1\\1bp",[])),
-?line <<"b">> = iolist_to_binary(re:replace("b","abc","T&\\1Jd\\1tQxU\\1&\\1\\1bp",[global])),
-?line <<"AHcabbbcdabbbcdabbbcdSCcNR">> = iolist_to_binary(re:replace("abbbcd","([abc])*d","AH\\1&&&SC\\1NR",[])),
-?line <<"AHcabbbcdabbbcdabbbcdSCcNR">> = iolist_to_binary(re:replace("abbbcd","([abc])*d","AH\\1&&&SC\\1NR",[global])),
-?line <<"jDJabcdqabcdgNaaNoyaGm">> = iolist_to_binary(re:replace("abcd","([abc])*bcd","jDJ&q&gN\\1\\1Noy\\1Gm",[])),
-?line <<"jDJabcdqabcdgNaaNoyaGm">> = iolist_to_binary(re:replace("abcd","([abc])*bcd","jDJ&q&gN\\1\\1Noy\\1Gm",[global])),
-?line <<"IHdxtFuTeF">> = iolist_to_binary(re:replace("e","a|b|c|d|e","IHdxtFuT&F",[])),
-?line <<"IHdxtFuTeF">> = iolist_to_binary(re:replace("e","a|b|c|d|e","IHdxtFuT&F",[global])),
-?line <<"RjceNtss">> = iolist_to_binary(re:replace("ef","(a|b|c|d|e)f","Rjc\\1Ntss",[])),
-?line <<"RjceNtss">> = iolist_to_binary(re:replace("ef","(a|b|c|d|e)f","Rjc\\1Ntss",[global])),
-?line <<"nViLDabcdefg">> = iolist_to_binary(re:replace("abcdefg","abcd*efg","nViL\\1D&\\1",[])),
-?line <<"nViLDabcdefg">> = iolist_to_binary(re:replace("abcdefg","abcd*efg","nViL\\1D&\\1",[global])),
-?line <<"xoJUabyHFyabbbz">> = iolist_to_binary(re:replace("xabyabbbz","ab*","oJ\\1U&yHF",[])),
-?line <<"xoJUabyHFyoJUabbbyHFz">> = iolist_to_binary(re:replace("xabyabbbz","ab*","oJ\\1U&yHF",[global])),
-?line <<"xbaEdBayabbbz">> = iolist_to_binary(re:replace("xayabbbz","ab*","b&EdBa",[])),
-?line <<"xbaEdBaybabbbEdBaz">> = iolist_to_binary(re:replace("xayabbbz","ab*","b&EdBa",[global])),
-?line <<"abHqcde">> = iolist_to_binary(re:replace("abcde","(ab|cd)e","Hq&",[])),
-?line <<"abHqcde">> = iolist_to_binary(re:replace("abcde","(ab|cd)e","Hq&",[global])),
-?line <<"lrrKIUARhij">> = iolist_to_binary(re:replace("hij","[abhgefdc]ij","l\\1\\1r\\1rKIUAR&",[])),
-?line <<"lrrKIUARhij">> = iolist_to_binary(re:replace("hij","[abhgefdc]ij","l\\1\\1r\\1rKIUAR&",[global])),
-?line <<"abcdWfgkefnnefNPAQ">> = iolist_to_binary(re:replace("abcdef","(abc|)ef","\\1Wfgk&nn&\\1NPAQ\\1",[])),
-?line <<"abcdWfgkefnnefNPAQ">> = iolist_to_binary(re:replace("abcdef","(abc|)ef","\\1Wfgk&nn&\\1NPAQ\\1",[global])),
-?line <<"aUbGqmbcdWXLMCpYbbcd">> = iolist_to_binary(re:replace("abcd","(a|b)c*d","U\\1Gqm&WXLMCpY\\1&",[])),
-?line <<"aUbGqmbcdWXLMCpYbbcd">> = iolist_to_binary(re:replace("abcd","(a|b)c*d","U\\1Gqm&WXLMCpY\\1&",[global])),
-?line <<"vYALaabcfgsaUfyDabcjOtcQ">> = iolist_to_binary(re:replace("abc","(ab|ab*)bc","vYAL\\1&fgs\\1UfyD&jOtcQ",[])),
-?line <<"vYALaabcfgsaUfyDabcjOtcQ">> = iolist_to_binary(re:replace("abc","(ab|ab*)bc","vYAL\\1&fgs\\1UfyD&jOtcQ",[global])),
-?line <<"uyabcabcp">> = iolist_to_binary(re:replace("abc","a([bc]*)c*","uy&&p",[])),
-?line <<"uyabcabcp">> = iolist_to_binary(re:replace("abc","a([bc]*)c*","uy&&p",[global])),
-?line <<"iAyJUbcM">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c*d)","iAyJU\\1M",[])),
-?line <<"iAyJUbcM">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c*d)","iAyJU\\1M",[global])),
-?line <<"abcdabcdabcd">> = iolist_to_binary(re:replace("abcd","a([bc]+)(c*d)","&&&",[])),
-?line <<"abcdabcdabcd">> = iolist_to_binary(re:replace("abcd","a([bc]+)(c*d)","&&&",[global])),
-?line <<"UgwJmKabcddNBBm">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c+d)","UgwJmK&dNBBm",[])),
-?line <<"UgwJmKabcddNBBm">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c+d)","UgwJmK&dNBBm",[global])),
-?line <<"glXDRFe">> = iolist_to_binary(re:replace("adcdcde","a[bcd]*dcdcde","glXDRFe\\1",[])),
-?line <<"glXDRFe">> = iolist_to_binary(re:replace("adcdcde","a[bcd]*dcdcde","glXDRFe\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bcd]+dcdcde","&\\1Tw",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bcd]+dcdcde","&\\1Tw",[global])),
-?line <<"abcde">> = iolist_to_binary(re:replace("abcde","a[bcd]+dcdcde","OaFcNB\\1AbGk\\1RcX&\\1hU",[])),
-?line <<"abcde">> = iolist_to_binary(re:replace("abcde","a[bcd]+dcdcde","OaFcNB\\1AbGk\\1RcX&\\1hU",[global])),
-?line <<"adcdcde">> = iolist_to_binary(re:replace("adcdcde","a[bcd]+dcdcde","LRCnDGeISr",[])),
-?line <<"adcdcde">> = iolist_to_binary(re:replace("adcdcde","a[bcd]+dcdcde","LRCnDGeISr",[global])),
-?line <<"ab">> = iolist_to_binary(re:replace("abc","(ab|a)b*c","\\1",[])),
-?line <<"ab">> = iolist_to_binary(re:replace("abc","(ab|a)b*c","\\1",[global])),
-?line <<"abcdYujfprabcdqmHBi">> = iolist_to_binary(re:replace("abcd","((a)(b)c)(d)","&Yujfpr&qmHBi",[])),
-?line <<"abcdYujfprabcdqmHBi">> = iolist_to_binary(re:replace("abcd","((a)(b)c)(d)","&Yujfpr&qmHBi",[global])),
-?line <<"HSalphaw">> = iolist_to_binary(re:replace("alpha","[a-zA-Z_][a-zA-Z0-9_]*","HS&w",[])),
-?line <<"HSalphaw">> = iolist_to_binary(re:replace("alpha","[a-zA-Z_][a-zA-Z0-9_]*","HS&w",[global])),
-?line <<"amKrkJTTmWxwbhbhVXebhD">> = iolist_to_binary(re:replace("abh","^a(bc+|b[eh])g|.h$","mKrkJTT\\1mWxw&&VXe&D",[])),
-?line <<"amKrkJTTmWxwbhbhVXebhD">> = iolist_to_binary(re:replace("abh","^a(bc+|b[eh])g|.h$","mKrkJTT\\1mWxw&&VXe&D",[global])),
-?line <<"gkglaeffgzeffgzwvwD">> = iolist_to_binary(re:replace("effgz","(bc+d$|ef*g.|h?i(j|k))","gkgla\\1&wvwD",[])),
-?line <<"gkglaeffgzeffgzwvwD">> = iolist_to_binary(re:replace("effgz","(bc+d$|ef*g.|h?i(j|k))","gkgla\\1&wvwD",[global])),
-?line <<"ivMGijUoGoijri">> = iolist_to_binary(re:replace("ij","(bc+d$|ef*g.|h?i(j|k))","ivMG\\1UoGo\\1ri",[])),
-?line <<"ivMGijUoGoijri">> = iolist_to_binary(re:replace("ij","(bc+d$|ef*g.|h?i(j|k))","ivMG\\1UoGo\\1ri",[global])),
-?line <<"reffgzWeffgzJeffgzeffgzFUK">> = iolist_to_binary(re:replace("reffgz","(bc+d$|ef*g.|h?i(j|k))","&W\\1J\\1&FUK",[])),
-?line <<"reffgzWeffgzJeffgzeffgzFUK">> = iolist_to_binary(re:replace("reffgz","(bc+d$|ef*g.|h?i(j|k))","&W\\1J\\1&FUK",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","qoREgh&sKvuYfqcVSQ",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","qoREgh&sKvuYfqcVSQ",[global])),
-?line <<"effg">> = iolist_to_binary(re:replace("effg","(bc+d$|ef*g.|h?i(j|k))","OSMK&kVLNnI",[])),
-?line <<"effg">> = iolist_to_binary(re:replace("effg","(bc+d$|ef*g.|h?i(j|k))","OSMK&kVLNnI",[global])),
-?line <<"bcdd">> = iolist_to_binary(re:replace("bcdd","(bc+d$|ef*g.|h?i(j|k))","l\\1SFH&\\1WG\\1N&\\1WpNv",[])),
-?line <<"bcdd">> = iolist_to_binary(re:replace("bcdd","(bc+d$|ef*g.|h?i(j|k))","l\\1SFH&\\1WG\\1N&\\1WpNv",[global])),
-?line <<"uCcLk">> = iolist_to_binary(re:replace("a","((((((((((a))))))))))","uCcLk",[])),
-?line <<"uCcLk">> = iolist_to_binary(re:replace("a","((((((((((a))))))))))","uCcLk",[global])),
-?line <<"VCUvbvxORiulavLRaFa">> = iolist_to_binary(re:replace("aa","((((((((((a))))))))))\\10","VCUvbvxORiul\\1vLR\\1F\\1",[])),
-?line <<"VCUvbvxORiulavLRaFa">> = iolist_to_binary(re:replace("aa","((((((((((a))))))))))\\10","VCUvbvxORiul\\1vLR\\1F\\1",[global])),
-?line <<"vFhEaarfaQfeLfaFGiV">> = iolist_to_binary(re:replace("a","(((((((((a)))))))))","vFhE\\1&rf&QfeLf\\1FGiV",[])),
-?line <<"vFhEaarfaQfeLfaFGiV">> = iolist_to_binary(re:replace("a","(((((((((a)))))))))","vFhE\\1&rf&QfeLf\\1FGiV",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","jlWax\\1&H",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","jlWax\\1&H",[global])),
-?line <<"aa">> = iolist_to_binary(re:replace("aa","multiple words of text","hsUw",[])),
-?line <<"aa">> = iolist_to_binary(re:replace("aa","multiple words of text","hsUw",[global])),
-?line <<"uh-uh">> = iolist_to_binary(re:replace("uh-uh","multiple words of text","ASEw\\1gOsB",[])),
-?line <<"uh-uh">> = iolist_to_binary(re:replace("uh-uh","multiple words of text","ASEw\\1gOsB",[global])),
-?line <<"dmultiple wordsxkMtmultiple words, yeah">> = iolist_to_binary(re:replace("multiple words, yeah","multiple words","d&x\\1\\1kMt&",[])),
-?line <<"dmultiple wordsxkMtmultiple words, yeah">> = iolist_to_binary(re:replace("multiple words, yeah","multiple words","d&x\\1\\1kMt&",[global])),
-?line <<"ykkVabcdefmldQabUjIJjw">> = iolist_to_binary(re:replace("abcde","(.*)c(.*)","ykkV&fmldQ\\1UjIJjw",[])),
-?line <<"ykkVabcdefmldQabUjIJjw">> = iolist_to_binary(re:replace("abcde","(.*)c(.*)","ykkV&fmldQ\\1UjIJjw",[global])),
-?line <<"efWBSCaa(a, b)Q">> = iolist_to_binary(re:replace("(a, b)","\\((.*), (.*)\\)","efWBSC\\1\\1&Q",[])),
-?line <<"efWBSCaa(a, b)Q">> = iolist_to_binary(re:replace("(a, b)","\\((.*), (.*)\\)","efWBSC\\1\\1&Q",[global])),
-?line <<"abcdBdXhwHpBabcdPC">> = iolist_to_binary(re:replace("abcd","abcd","&Bd\\1XhwHp\\1B&PC",[])),
-?line <<"abcdBdXhwHpBabcdPC">> = iolist_to_binary(re:replace("abcd","abcd","&Bd\\1XhwHp\\1B&PC",[global])),
-?line <<"SbsAruCoIPbckBgbcSyqva">> = iolist_to_binary(re:replace("abcd","a(bc)d","SbsAruCoIP\\1kBg\\1Syqva",[])),
-?line <<"SbsAruCoIPbckBgbcSyqva">> = iolist_to_binary(re:replace("abcd","a(bc)d","SbsAruCoIP\\1kBg\\1Syqva",[global])),
-?line <<"XiUVfmkDnpfY">> = iolist_to_binary(re:replace("ac","a[-]?c","XiUVfmkDnpfY",[])),
-?line <<"XiUVfmkDnpfY">> = iolist_to_binary(re:replace("ac","a[-]?c","XiUVfmkDnpfY",[global])),
-?line <<"GYmabcndabcabcabcabcCjabcabcabcabctjmn">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","GYm\\1nd&&Cj&\\1\\1tjmn",[])),
-?line <<"GYmabcndabcabcabcabcCjabcabcabcabctjmn">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","GYm\\1nd&&Cj&\\1\\1tjmn",[global])),
-?line <<"AabcFabcabcOw">> = iolist_to_binary(re:replace("abcabc","([a-c]*)\\1","A\\1F&Ow",[])),
-?line <<"AabcFabcabcOwAFOw">> = iolist_to_binary(re:replace("abcabc","([a-c]*)\\1","A\\1F&Ow",[global])),
-?line <<"savneuiFiA">> = iolist_to_binary(re:replace("a","(a)|\\1","s&vneuiFiA",[])),
-?line <<"savneuiFiA">> = iolist_to_binary(re:replace("a","(a)|\\1","s&vneuiFiA",[global])),
-?line <<"*** FatXvbwaxGeTrgahaailers">> = iolist_to_binary(re:replace("*** Failers","(a)|\\1","\\1tXvbw&xGeTrg\\1h&\\1",[])),
-?line <<"*** FatXvbwaxGeTrgahaailers">> = iolist_to_binary(re:replace("*** Failers","(a)|\\1","\\1tXvbw&xGeTrg\\1h&\\1",[global])),
-?line <<"ShaaIOaiKrRarjaTFxavb">> = iolist_to_binary(re:replace("ab","(a)|\\1","Sh\\1\\1IO&iKrR\\1rj\\1TFx&v",[])),
-?line <<"ShaaIOaiKrRarjaTFxavb">> = iolist_to_binary(re:replace("ab","(a)|\\1","Sh\\1\\1IO&iKrR\\1rj\\1TFx&v",[global])),
-?line <<"x">> = iolist_to_binary(re:replace("x","(a)|\\1","wG&OmupsBaCA&ULU&br",[])),
-?line <<"x">> = iolist_to_binary(re:replace("x","(a)|\\1","wG&OmupsBaCA&ULU&br",[global])),
-?line <<"ababbsaHOnababbDlUpRwMMqlababbCbbbcbc">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2)*","&saHOn&DlUpRwMMql&C\\1",[])),
-?line <<"ababbsaHOnababbDlUpRwMMqlababbCbbsaHOnDlUpRwMMqlCbcbcsaHOncbcDlUpRwMMqlcbcCcbcsaHOnDlUpRwMMqlC">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2)*","&saHOn&DlUpRwMMql&C\\1",[global])),
-?line <<"YdAFYmyyababbbcbcHpJCababbbcbcQa">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2){3}","YdAFYmyy&HpJC&Qa",[])),
-?line <<"YdAFYmyyababbbcbcHpJCababbbcbcQa">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2){3}","YdAFYmyy&HpJC&Qa",[global])),
-?line <<"aaaxabaxbaaxabbax">> = iolist_to_binary(re:replace("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+","a\\1",[])),
-?line <<"aaaxabaxbaaxabbax">> = iolist_to_binary(re:replace("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+","a\\1",[global])),
-?line <<"bbaababbabaaaaaoh">> = iolist_to_binary(re:replace("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}","oh",[])),
-?line <<"bbaababbabaaaaaoh">> = iolist_to_binary(re:replace("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}","oh",[global])),
-?line <<"fABCaeUgIABCDABCNFvst">> = iolist_to_binary(re:replace("ABC","abc","f&aeUgI&D&\\1NFvst",[caseless])),
-?line <<"fABCaeUgIABCDABCNFvst">> = iolist_to_binary(re:replace("ABC","abc","f&aeUgI&D&\\1NFvst",[caseless,
- global])),
-?line <<"XgOY">> = iolist_to_binary(re:replace("XABCY","abc","gO",[caseless])),
-?line <<"XgOY">> = iolist_to_binary(re:replace("XABCY","abc","gO",[caseless,
+bar","(?<=foo\\n)^bar","hGG",[multiline,global])),
+ <<"barTsM">> = iolist_to_binary(re:replace("barbaz","(?<=(?<!foo)bar)baz","TsM",[])),
+ <<"barTsM">> = iolist_to_binary(re:replace("barbaz","(?<=(?<!foo)bar)baz","TsM",[global])),
+ <<"barbarbazJYNeeiOkukbazbaze">> = iolist_to_binary(re:replace("barbarbaz","(?<=(?<!foo)bar)baz","&JYNeeiOkuk&&e",[])),
+ <<"barbarbazJYNeeiOkukbazbaze">> = iolist_to_binary(re:replace("barbarbaz","(?<=(?<!foo)bar)baz","&JYNeeiOkuk&&e",[global])),
+ <<"koobarbazJDRvnHPtlJvlqbazha">> = iolist_to_binary(re:replace("koobarbaz","(?<=(?<!foo)bar)baz","&JD\\1RvnHPtlJvlq&ha",[])),
+ <<"koobarbazJDRvnHPtlJvlqbazha">> = iolist_to_binary(re:replace("koobarbaz","(?<=(?<!foo)bar)baz","&JD\\1RvnHPtlJvlq&ha",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?<!foo)bar)baz","se&q\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?<!foo)bar)baz","se&q\\1",[global])),
+ <<"baz">> = iolist_to_binary(re:replace("baz","(?<=(?<!foo)bar)baz","\\1FnT\\1ncG\\1qiLitBVlR",[])),
+ <<"baz">> = iolist_to_binary(re:replace("baz","(?<=(?<!foo)bar)baz","\\1FnT\\1ncG\\1qiLitBVlR",[global])),
+ <<"foobarbaz">> = iolist_to_binary(re:replace("foobarbaz","(?<=(?<!foo)bar)baz","TGjyDWNaukC\\1D",[])),
+ <<"foobarbaz">> = iolist_to_binary(re:replace("foobarbaz","(?<=(?<!foo)bar)baz","TGjyDWNaukC\\1D",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?){4}$","PqtMwjvc&wXddSH",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?){4}$","PqtMwjvc&wXddSH",[global])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?){4}$","GgSSdPHMYJhXx",[])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?){4}$","GgSSdPHMYJhXx",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?){4}$","ucLn&Fx&kXfW",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?){4}$","ucLn&Fx&kXfW",[global])),
+ <<"naaaaaaQNEaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?){4}$","n&\\1QNE&&&",[])),
+ <<"naaaaaaQNEaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?){4}$","n&\\1QNE&&&",[global])),
+ <<"ielIaAaXNwripBgIaHTa">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?){4}$","ielI\\1A\\1XNwripBgI\\1HT\\1",[])),
+ <<"ielIaAaXNwripBgIaHTa">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?){4}$","ielI\\1A\\1XNwripBgI\\1HT\\1",[global])),
+ <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?){4}$","HRYVEqqIFqY&Dl",[])),
+ <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?){4}$","HRYVEqqIFqY&Dl",[global])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","&&t\\1s",[])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","&&t\\1s",[global])),
+ <<"NaaaadLeaaaaxAL">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","N\\1dLe\\1xAL",[])),
+ <<"NaaaadLeaaaaxAL">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","N\\1dLe\\1xAL",[global])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","\\1jr",[])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","\\1jr",[global])),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?){4}$","N\\1",[])),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?){4}$","N\\1",[global])),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?){4}$","sQ&xSjdecK&&rSQkA",[])),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?){4}$","sQ&xSjdecK&&rSQkA",[global])),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?){4}$","CsOa",[])),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?){4}$","CsOa",[global])),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?){4}$","&pAEvtoqYnBxGT&Uox",[])),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?){4}$","&pAEvtoqYnBxGT&Uox",[global])),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?){4}$","&icuBLN",[])),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?){4}$","&icuBLN",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","wxtPJAs&D\\1V&xlkaXy&",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","wxtPJAs&D\\1V&xlkaXy&",[global])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","GO\\1&NlEm",[])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","GO\\1&NlEm",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","trMv\\1vGRRdT&L",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","trMv\\1vGRRdT&L",[global])),
+ <<"dtEvrhKayRa">> = iolist_to_binary(re:replace("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dtEvrhK\\1yR\\1",[])),
+ <<"dtEvrhKayRa">> = iolist_to_binary(re:replace("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dtEvrhK\\1yR\\1",[global])),
+ <<"swnY">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","swnY",[])),
+ <<"swnY">> = iolist_to_binary(re:replace("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","swnY",[global])),
+ <<"aaaaaarinTIDxAHEMa">> = iolist_to_binary(re:replace("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","&rinTIDxAHEM\\1",[])),
+ <<"aaaaaarinTIDxAHEMa">> = iolist_to_binary(re:replace("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","&rinTIDxAHEM\\1",[global])),
+ <<"UBvaoaaaaaaaaDUiX">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","UBvao\\1&DUiX",[])),
+ <<"UBvaoaaaaaaaaDUiX">> = iolist_to_binary(re:replace("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","UBvao\\1&DUiX",[global])),
+ <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","H\\1aLBBEpEaB",[])),
+ <<"aaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","H\\1aLBBEpEaB",[global])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dpC",[])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dpC",[global])),
+ <<"taaaaaaaaaahaaaaaaaaaaf">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","t&h&f",[])),
+ <<"taaaaaaaaaahaaaaaaaaaaf">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","t&h&f",[global])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","rgxaXLiOHjVaKNJyPJ",[])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","rgxaXLiOHjVaKNJyPJ",[global])),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","a\\1UVnCvM\\1bOy",[])),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","a\\1UVnCvM\\1bOy",[global])),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","mnxwE",[])),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","mnxwE",[global])),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","R",[])),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","R",[global])),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","CKEn&",[])),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","CKEn&",[global])),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dr\\1B\\1G&W\\1\\1\\1",[])),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$","dr\\1B\\1G&W\\1\\1\\1",[global])),
+ <<"mTTwWHMeBAnTMAy">> = iolist_to_binary(re:replace("abc","abc","mTTwWHMe\\1B\\1AnTMAy",[])),
+ <<"mTTwWHMeBAnTMAy">> = iolist_to_binary(re:replace("abc","abc","mTTwWHMe\\1B\\1AnTMAy",[global])),
+ <<"xFRFntrFXSabcyBabcRky">> = iolist_to_binary(re:replace("xabcy","abc","FRFntrFXS&yB&\\1Rk",[])),
+ <<"xFRFntrFXSabcyBabcRky">> = iolist_to_binary(re:replace("xabcy","abc","FRFntrFXS&yB&\\1Rk",[global])),
+ <<"abmabceyJl">> = iolist_to_binary(re:replace("ababc","abc","m&eyJl",[])),
+ <<"abmabceyJl">> = iolist_to_binary(re:replace("ababc","abc","m&eyJl",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","\\1kN",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","\\1kN",[global])),
+ <<"xbc">> = iolist_to_binary(re:replace("xbc","abc","Rd",[])),
+ <<"xbc">> = iolist_to_binary(re:replace("xbc","abc","Rd",[global])),
+ <<"axc">> = iolist_to_binary(re:replace("axc","abc","qQP\\1gBdX&cfJfv&f",[])),
+ <<"axc">> = iolist_to_binary(re:replace("axc","abc","qQP\\1gBdX&cfJfv&f",[global])),
+ <<"abx">> = iolist_to_binary(re:replace("abx","abc","VMtbG",[])),
+ <<"abx">> = iolist_to_binary(re:replace("abx","abc","VMtbG",[global])),
+ <<"jNyOabclmQAUUabcabcabcM">> = iolist_to_binary(re:replace("abc","ab*c","jNyO&lmQA\\1UU&&&M",[])),
+ <<"jNyOabclmQAUUabcabcabcM">> = iolist_to_binary(re:replace("abc","ab*c","jNyO&lmQA\\1UU&&&M",[global])),
+ <<"NuNKaVVP">> = iolist_to_binary(re:replace("abc","ab*bc","NuNKaVV\\1\\1P",[])),
+ <<"NuNKaVVP">> = iolist_to_binary(re:replace("abc","ab*bc","NuNKaVV\\1\\1P",[global])),
+ <<"v">> = iolist_to_binary(re:replace("abbc","ab*bc","v",[])),
+ <<"v">> = iolist_to_binary(re:replace("abbc","ab*bc","v",[global])),
+ <<"IabbbbcLNYRgEvYHyabbbbctwq">> = iolist_to_binary(re:replace("abbbbc","ab*bc","I&LNYRgEvYHy&tw\\1q",[])),
+ <<"IabbbbcLNYRgEvYHyabbbbctwq">> = iolist_to_binary(re:replace("abbbbc","ab*bc","I&LNYRgEvYHy&tw\\1q",[global])),
+ <<"dcWrPQwrWtCeinonDembbbbc">> = iolist_to_binary(re:replace("abbbbc",".{1}","dcWrPQwrWtCeinonDem",[])),
+ <<"dcWrPQwrWtCeinonDemdcWrPQwrWtCeinonDemdcWrPQwrWtCeinonDemdcWrPQwrWtCeinonDemdcWrPQwrWtCeinonDemdcWrPQwrWtCeinonDem">> = iolist_to_binary(re:replace("abbbbc",".{1}","dcWrPQwrWtCeinonDem",[global])),
+ <<"NwOwabbbabbbCOvabbbenaNbc">> = iolist_to_binary(re:replace("abbbbc",".{3,4}","NwOw&&COv&e\\1naN",[])),
+ <<"NwOwabbbabbbCOvabbbenaNbc">> = iolist_to_binary(re:replace("abbbbc",".{3,4}","NwOw&&COv&e\\1naN",[global])),
+ <<"abbbbcCeTetSKDvAvrabbbbcpa">> = iolist_to_binary(re:replace("abbbbc","ab{0,}bc","&CeTetSKDvAvr&pa",[])),
+ <<"abbbbcCeTetSKDvAvrabbbbcpa">> = iolist_to_binary(re:replace("abbbbc","ab{0,}bc","&CeTetSKDvAvr&pa",[global])),
+ <<"TbtqfbcUrEcTU">> = iolist_to_binary(re:replace("abbc","ab+bc","Tb\\1tqfb\\1cUrEcTU",[])),
+ <<"TbtqfbcUrEcTU">> = iolist_to_binary(re:replace("abbc","ab+bc","Tb\\1tqfb\\1cUrEcTU",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","TeS\\1\\1F",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","TeS\\1\\1F",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","ab+bc","EHEtuOC&GTMRx",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","ab+bc","EHEtuOC&GTMRx",[global])),
+ <<"abq">> = iolist_to_binary(re:replace("abq","ab+bc","\\1ywtK\\1hfkEVdoXy\\1eH",[])),
+ <<"abq">> = iolist_to_binary(re:replace("abq","ab+bc","\\1ywtK\\1hfkEVdoXy\\1eH",[global])),
+ <<"GlETcsroCIlRt">> = iolist_to_binary(re:replace("abbbbc","ab+bc","GlETcsro\\1CIlRt\\1",[])),
+ <<"GlETcsroCIlRt">> = iolist_to_binary(re:replace("abbbbc","ab+bc","GlETcsro\\1CIlRt\\1",[global])),
+ ok.
+run15() ->
+ <<"GjnPRabbbbcabbbbcANabbbbcH">> = iolist_to_binary(re:replace("abbbbc","ab{1,}bc","Gj\\1nPR&&A\\1N&H",[])),
+ <<"GjnPRabbbbcabbbbcANabbbbcH">> = iolist_to_binary(re:replace("abbbbc","ab{1,}bc","Gj\\1nPR&&A\\1N&H",[global])),
+ <<"iPhrUY">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","i\\1Phr\\1UY\\1",[])),
+ <<"iPhrUY">> = iolist_to_binary(re:replace("abbbbc","ab{1,3}bc","i\\1Phr\\1UY\\1",[global])),
+ <<"oBEnPKpabbbbcAUrXVFQn">> = iolist_to_binary(re:replace("abbbbc","ab{3,4}bc","oBEnPK\\1p&AUr\\1X\\1VFQn\\1",[])),
+ <<"oBEnPKpabbbbcAUrXVFQn">> = iolist_to_binary(re:replace("abbbbc","ab{3,4}bc","oBEnPK\\1p&AUr\\1X\\1VFQn\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}bc","VJPhAjJ&qt&R",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}bc","VJPhAjJ&qt&R",[global])),
+ <<"abq">> = iolist_to_binary(re:replace("abq","ab{4,5}bc","\\1issDnwN",[])),
+ <<"abq">> = iolist_to_binary(re:replace("abq","ab{4,5}bc","\\1issDnwN",[global])),
+ <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","ab{4,5}bc","&ty&x",[])),
+ <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","ab{4,5}bc","&ty&x",[global])),
+ <<"UWGc">> = iolist_to_binary(re:replace("abbc","ab?bc","UWGc",[])),
+ <<"UWGc">> = iolist_to_binary(re:replace("abbc","ab?bc","UWGc",[global])),
+ <<"QpFXHqWog">> = iolist_to_binary(re:replace("abc","ab?bc","QpFXHqWog",[])),
+ <<"QpFXHqWog">> = iolist_to_binary(re:replace("abc","ab?bc","QpFXHqWog",[global])),
+ <<"lFwRabc">> = iolist_to_binary(re:replace("abc","ab{0,1}bc","lFwR&\\1",[])),
+ <<"lFwRabc">> = iolist_to_binary(re:replace("abc","ab{0,1}bc","lFwR&\\1",[global])),
+ <<"abcmabcJvgabcabco">> = iolist_to_binary(re:replace("abc","ab?c","&m&Jvg&&\\1\\1o",[])),
+ <<"abcmabcJvgabcabco">> = iolist_to_binary(re:replace("abc","ab?c","&m&Jvg&&\\1\\1o",[global])),
+ <<"jJ">> = iolist_to_binary(re:replace("abc","ab{0,1}c","jJ",[])),
+ <<"jJ">> = iolist_to_binary(re:replace("abc","ab{0,1}c","jJ",[global])),
+ <<"uPAtKYsKtqCBkkp">> = iolist_to_binary(re:replace("abc","^abc$","uPAtKYsKtqCBkkp\\1",[])),
+ <<"uPAtKYsKtqCBkkp">> = iolist_to_binary(re:replace("abc","^abc$","uPAtKYsKtqCBkkp\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","e\\1XAs",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","e\\1XAs",[global])),
+ <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","^abc$","\\1o&fsbP\\1pwbiIRIGb\\1UD",[])),
+ <<"abbbbc">> = iolist_to_binary(re:replace("abbbbc","^abc$","\\1o&fsbP\\1pwbiIRIGb\\1UD",[global])),
+ <<"abcc">> = iolist_to_binary(re:replace("abcc","^abc$","WJthAfXWWmv\\1IWjIe",[])),
+ <<"abcc">> = iolist_to_binary(re:replace("abcc","^abc$","WJthAfXWWmv\\1IWjIe",[global])),
+ <<"UTlfrQeHrOQCMnfc">> = iolist_to_binary(re:replace("abcc","^abc","UTlfr\\1QeH\\1rOQCMnf",[])),
+ <<"UTlfrQeHrOQCMnfc">> = iolist_to_binary(re:replace("abcc","^abc","UTlfr\\1QeH\\1rOQCMnf",[global])),
+ <<"aARabcppSYabcEIbcGwjE">> = iolist_to_binary(re:replace("aabc","abc$","\\1AR&ppSY&EIbc\\1G\\1wjE",[])),
+ <<"aARabcppSYabcEIbcGwjE">> = iolist_to_binary(re:replace("aabc","abc$","\\1AR&ppSY&EIbc\\1G\\1wjE",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","FnSwJ&tmv",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc$","FnSwJ&tmv",[global])),
+ <<"aAmIBNLxa">> = iolist_to_binary(re:replace("aabc","abc$","Am\\1IB\\1NLxa",[])),
+ <<"aAmIBNLxa">> = iolist_to_binary(re:replace("aabc","abc$","Am\\1IB\\1NLxa",[global])),
+ <<"aabcd">> = iolist_to_binary(re:replace("aabcd","abc$","&EuxC&eEGEWnwI",[])),
+ <<"aabcd">> = iolist_to_binary(re:replace("aabcd","abc$","&EuxC&eEGEWnwI",[global])),
+ <<"cOryAkFNmtoLruabc">> = iolist_to_binary(re:replace("abc","^","cO\\1r&yAkFNmto\\1Lru&",[])),
+ <<"cOryAkFNmtoLruabc">> = iolist_to_binary(re:replace("abc","^","cO\\1r&yAkFNmto\\1Lru&",[global])),
+ <<"abcKpXarNeriGOdu">> = iolist_to_binary(re:replace("abc","$","Kp\\1XarNeriGOdu&",[])),
+ <<"abcKpXarNeriGOdu">> = iolist_to_binary(re:replace("abc","$","Kp\\1XarNeriGOdu&",[global])),
+ <<"FIusabcabcceEbtWBabc">> = iolist_to_binary(re:replace("abc","a.c","FIus&&ceEb\\1tWB&",[])),
+ <<"FIusabcabcceEbtWBabc">> = iolist_to_binary(re:replace("abc","a.c","FIus&&ceEb\\1tWB&",[global])),
+ <<"KqevmaxcVysaxcPaxc">> = iolist_to_binary(re:replace("axc","a.c","Kqevm&Vys&\\1\\1P&",[])),
+ <<"KqevmaxcVysaxcPaxc">> = iolist_to_binary(re:replace("axc","a.c","Kqevm&Vys&\\1\\1P&",[global])),
+ <<"xUdGxhaJQaxyzc">> = iolist_to_binary(re:replace("axyzc","a.*c","x\\1UdGxhaJQ&",[])),
+ <<"xUdGxhaJQaxyzc">> = iolist_to_binary(re:replace("axyzc","a.*c","x\\1UdGxhaJQ&",[global])),
+ <<"abdHpbYpV">> = iolist_to_binary(re:replace("abd","a[bc]d","&Hp\\1bYpV",[])),
+ <<"abdHpbYpV">> = iolist_to_binary(re:replace("abd","a[bc]d","&Hp\\1bYpV",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bc]d","J&dGU\\1rioQPR\\1&S&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bc]d","J&dGU\\1rioQPR\\1&S&",[global])),
+ <<"axyzd">> = iolist_to_binary(re:replace("axyzd","a[bc]d","LF\\1QgQx\\1kUO&\\1",[])),
+ <<"axyzd">> = iolist_to_binary(re:replace("axyzd","a[bc]d","LF\\1QgQx\\1kUO&\\1",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","a[bc]d","tiUJYyxfVfeAM",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","a[bc]d","tiUJYyxfVfeAM",[global])),
+ <<"lSBTQLYWjuaceCjDace">> = iolist_to_binary(re:replace("ace","a[b-d]e","lSBTQLYWju&CjD&",[])),
+ <<"lSBTQLYWjuaceCjDace">> = iolist_to_binary(re:replace("ace","a[b-d]e","lSBTQLYWju&CjD&",[global])),
+ <<"aWEgjXuNyAacQTNVqSl">> = iolist_to_binary(re:replace("aac","a[b-d]","WEgjXuNyA&QTNVqSl",[])),
+ <<"aWEgjXuNyAacQTNVqSl">> = iolist_to_binary(re:replace("aac","a[b-d]","WEgjXuNyA&QTNVqSl",[global])),
+ ok.
+run16() ->
+ <<"qQmna-Ga-a-rA">> = iolist_to_binary(re:replace("a-","a[-b]","q\\1Qmn&G&&rA",[])),
+ <<"qQmna-Ga-a-rA">> = iolist_to_binary(re:replace("a-","a[-b]","q\\1Qmn&G&&rA",[global])),
+ <<"QJ">> = iolist_to_binary(re:replace("a-","a[b-]","QJ",[])),
+ <<"QJ">> = iolist_to_binary(re:replace("a-","a[b-]","QJ",[global])),
+ <<"yia]ao">> = iolist_to_binary(re:replace("a]","a]","\\1yi&ao",[])),
+ <<"yia]ao">> = iolist_to_binary(re:replace("a]","a]","\\1yi&ao",[global])),
+ <<"FfC">> = iolist_to_binary(re:replace("a]b","a[]]b","FfC",[])),
+ <<"FfC">> = iolist_to_binary(re:replace("a]b","a[]]b","FfC",[global])),
+ <<"oXfcTOWQKFAlvTaedi">> = iolist_to_binary(re:replace("aed","a[^bc]d","oXfcTOWQKFAlvT\\1\\1&i",[])),
+ <<"oXfcTOWQKFAlvTaedi">> = iolist_to_binary(re:replace("aed","a[^bc]d","oXfcTOWQKFAlvT\\1\\1&i",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^bc]d","&bDyTqTc",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^bc]d","&bDyTqTc",[global])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","FjC&R\\1",[])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","FjC&R\\1",[global])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","aENw",[])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","a[^bc]d","aENw",[global])),
+ <<"adcdOJ">> = iolist_to_binary(re:replace("adc","a[^-b]c","&dOJ",[])),
+ <<"adcdOJ">> = iolist_to_binary(re:replace("adc","a[^-b]c","&dOJ",[global])),
+ <<"ANuydyM">> = iolist_to_binary(re:replace("adc","a[^]b]c","ANuydyM",[])),
+ <<"ANuydyM">> = iolist_to_binary(re:replace("adc","a[^]b]c","ANuydyM",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^]b]c","SweRAVF\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^]b]c","SweRAVF\\1",[global])),
+ <<"UoNrja-cLOLdIhqaTGLt">> = iolist_to_binary(re:replace("a-c","a[^]b]c","UoNrj&LOLdIhqaTGLt",[])),
+ <<"UoNrja-cLOLdIhqaTGLt">> = iolist_to_binary(re:replace("a-c","a[^]b]c","UoNrj&LOLdIhqaTGLt",[global])),
+ <<"a]c">> = iolist_to_binary(re:replace("a]c","a[^]b]c","w&UlR&\\1\\1Oo&I&",[])),
+ <<"a]c">> = iolist_to_binary(re:replace("a]c","a[^]b]c","w&UlR&\\1\\1Oo&I&",[global])),
+ <<"keSyyVigJfGa-">> = iolist_to_binary(re:replace("a-","\\ba\\b","\\1keSyy\\1VigJfG&",[])),
+ <<"keSyyVigJfGa-">> = iolist_to_binary(re:replace("a-","\\ba\\b","\\1keSyy\\1VigJfG&",[global])),
+ <<"-QajTaYNwiaOblsalRbJ">> = iolist_to_binary(re:replace("-a","\\ba\\b","Q&jT&YNwiaOb\\1ls&lRbJ",[])),
+ <<"-QajTaYNwiaOblsalRbJ">> = iolist_to_binary(re:replace("-a","\\ba\\b","Q&jT&YNwiaOb\\1ls&lRbJ",[global])),
+ <<"-jrLliKmS-">> = iolist_to_binary(re:replace("-a-","\\ba\\b","jrLliKm\\1S",[])),
+ <<"-jrLliKmS-">> = iolist_to_binary(re:replace("-a-","\\ba\\b","jrLliKm\\1S",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\by\\b","tFe\\1K\\1&P&w",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\by\\b","tFe\\1K\\1&P&w",[global])),
+ <<"xy">> = iolist_to_binary(re:replace("xy","\\by\\b","&&cw&p\\1BkixXR",[])),
+ <<"xy">> = iolist_to_binary(re:replace("xy","\\by\\b","&&cw&p\\1BkixXR",[global])),
+ <<"yz">> = iolist_to_binary(re:replace("yz","\\by\\b","Mlv\\1O",[])),
+ <<"yz">> = iolist_to_binary(re:replace("yz","\\by\\b","Mlv\\1O",[global])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","\\by\\b","o&V\\1\\1&vaBPhc&YhjA\\1Hl",[])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","\\by\\b","o&V\\1\\1&vaBPhc&YhjA\\1Hl",[global])),
+ <<"*** FEnnRHgdUlleafatdRwilers">> = iolist_to_binary(re:replace("*** Failers","\\Ba\\B","EnnRHgdUlle&f&tdRw",[])),
+ <<"*** FEnnRHgdUlleafatdRwilers">> = iolist_to_binary(re:replace("*** Failers","\\Ba\\B","EnnRHgdUlle&f&tdRw",[global])),
+ <<"a-">> = iolist_to_binary(re:replace("a-","\\Ba\\B","wXKR&jlEbdM&QBJmvK",[])),
+ <<"a-">> = iolist_to_binary(re:replace("a-","\\Ba\\B","wXKR&jlEbdM&QBJmvK",[global])),
+ <<"-a">> = iolist_to_binary(re:replace("-a","\\Ba\\B","f\\1dQc",[])),
+ <<"-a">> = iolist_to_binary(re:replace("-a","\\Ba\\B","f\\1dQc",[global])),
+ <<"-a-">> = iolist_to_binary(re:replace("-a-","\\Ba\\B","WTMu\\1drSum",[])),
+ <<"-a-">> = iolist_to_binary(re:replace("-a-","\\Ba\\B","WTMu\\1drSum",[global])),
+ <<"xheOtJ">> = iolist_to_binary(re:replace("xy","\\By\\b","\\1heOtJ\\1",[])),
+ <<"xheOtJ">> = iolist_to_binary(re:replace("xy","\\By\\b","\\1heOtJ\\1",[global])),
+ <<"xYHVuz">> = iolist_to_binary(re:replace("yz","\\by\\B","xYH\\1\\1Vu",[])),
+ <<"xYHVuz">> = iolist_to_binary(re:replace("yz","\\by\\B","xYH\\1\\1Vu",[global])),
+ <<"xUyfxgltgVyjPz">> = iolist_to_binary(re:replace("xyz","\\By\\B","\\1Uyf\\1xglt\\1gV\\1\\1&jP",[])),
+ <<"xUyfxgltgVyjPz">> = iolist_to_binary(re:replace("xyz","\\By\\B","\\1Uyf\\1xglt\\1gV\\1\\1&jP",[global])),
+ <<"PqSMLiChcHwx">> = iolist_to_binary(re:replace("a","\\w","PqSMLiChcHwx",[])),
+ <<"PqSMLiChcHwx">> = iolist_to_binary(re:replace("a","\\w","PqSMLiChcHwx",[global])),
+ <<"Bl">> = iolist_to_binary(re:replace("-","\\W","Bl",[])),
+ <<"Bl">> = iolist_to_binary(re:replace("-","\\W","Bl",[global])),
+ <<"**rPBnOGDkc** Failers">> = iolist_to_binary(re:replace("*** Failers","\\W","&&\\1rPBnOGDkc",[])),
+ <<"**rPBnOGDkc**rPBnOGDkc**rPBnOGDkc rPBnOGDkcFailers">> = iolist_to_binary(re:replace("*** Failers","\\W","&&\\1rPBnOGDkc",[global])),
+ <<"rI">> = iolist_to_binary(re:replace("-","\\W","rI",[])),
+ <<"rI">> = iolist_to_binary(re:replace("-","\\W","rI",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","\\W","N&\\1h&mf\\1eJ&T",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","\\W","N&\\1h&mf\\1eJ&T",[global])),
+ <<"Ia bHMFKnjmeDa bNCX">> = iolist_to_binary(re:replace("a b","a\\sb","I&HMFKnjm\\1eD&NCX",[])),
+ <<"Ia bHMFKnjmeDa bNCX">> = iolist_to_binary(re:replace("a b","a\\sb","I&HMFKnjm\\1eD&NCX",[global])),
+ <<"a-ba-ba-bnaNLABX">> = iolist_to_binary(re:replace("a-b","a\\Sb","&&&naN\\1LABX\\1",[])),
+ <<"a-ba-ba-bnaNLABX">> = iolist_to_binary(re:replace("a-b","a\\Sb","&&&naN\\1LABX\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Sb","\\1bI&cDB\\1Bpe",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Sb","\\1bI&cDB\\1Bpe",[global])),
+ <<"ILRpJeKfXTxFTY">> = iolist_to_binary(re:replace("a-b","a\\Sb","I\\1L\\1RpJe\\1KfXTxFTY",[])),
+ <<"ILRpJeKfXTxFTY">> = iolist_to_binary(re:replace("a-b","a\\Sb","I\\1L\\1RpJe\\1KfXTxFTY",[global])),
+ <<"a b">> = iolist_to_binary(re:replace("a b","a\\Sb","\\1ngH\\1OgaFGbI",[])),
+ <<"a b">> = iolist_to_binary(re:replace("a b","a\\Sb","\\1ngH\\1OgaFGbI",[global])),
+ <<"oOycwxv1FKdF">> = iolist_to_binary(re:replace("1","\\d","oOycwxv&FK\\1dF\\1",[])),
+ <<"oOycwxv1FKdF">> = iolist_to_binary(re:replace("1","\\d","oOycwxv&FK\\1dF\\1",[global])),
+ <<"YdKRXgdlJSvnIO">> = iolist_to_binary(re:replace("-","\\D","YdKRXgdl\\1JSvnIO",[])),
+ <<"YdKRXgdlJSvnIO">> = iolist_to_binary(re:replace("-","\\D","YdKRXgdl\\1JSvnIO",[global])),
+ <<"lxE*lk*V** Failers">> = iolist_to_binary(re:replace("*** Failers","\\D","lx\\1E&lk&V",[])),
+ <<"lxE*lk*VlxE*lk*VlxE*lk*VlxE lk VlxEFlkFVlxEalkaVlxEilkiVlxEllklVlxEelkeVlxErlkrVlxEslksV">> = iolist_to_binary(re:replace("*** Failers","\\D","lx\\1E&lk&V",[global])),
+ <<"JRKLvPGXEGf-a">> = iolist_to_binary(re:replace("-","\\D","JRK\\1LvPG\\1XEGf&a",[])),
+ <<"JRKLvPGXEGf-a">> = iolist_to_binary(re:replace("-","\\D","JRK\\1LvPG\\1XEGf&a",[global])),
+ <<"1">> = iolist_to_binary(re:replace("1","\\D","aTH&MPmaOF\\1\\1r",[])),
+ <<"1">> = iolist_to_binary(re:replace("1","\\D","aTH&MPmaOF\\1\\1r",[global])),
+ <<"MGKXIbaJcyWbp">> = iolist_to_binary(re:replace("a","[\\w]","MGKXIb&Jc\\1yWbp",[])),
+ <<"MGKXIbaJcyWbp">> = iolist_to_binary(re:replace("a","[\\w]","MGKXIb&Jc\\1yWbp",[global])),
+ ok.
+run17() ->
+ <<"YqG">> = iolist_to_binary(re:replace("-","[\\W]","YqG",[])),
+ <<"YqG">> = iolist_to_binary(re:replace("-","[\\W]","YqG",[global])),
+ <<"*nxdd*geTTc** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\W]","&nx\\1dd&geTTc",[])),
+ <<"*nxdd*geTTc*nxdd*geTTc*nxdd*geTTc nxdd geTTcFailers">> = iolist_to_binary(re:replace("*** Failers","[\\W]","&nx\\1dd&geTTc",[global])),
+ <<"iqqe">> = iolist_to_binary(re:replace("-","[\\W]","iqqe",[])),
+ <<"iqqe">> = iolist_to_binary(re:replace("-","[\\W]","iqqe",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","[\\W]","wwF\\1Q",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","[\\W]","wwF\\1Q",[global])),
+ <<"a b">> = iolist_to_binary(re:replace("a b","a[\\s]b","&",[])),
+ <<"a b">> = iolist_to_binary(re:replace("a b","a[\\s]b","&",[global])),
+ <<"SPqkyVa-bP">> = iolist_to_binary(re:replace("a-b","a[\\S]b","SPqkyV&P",[])),
+ <<"SPqkyVa-bP">> = iolist_to_binary(re:replace("a-b","a[\\S]b","SPqkyV&P",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[\\S]b","\\1FDeRsoK&IAJD&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[\\S]b","\\1FDeRsoK&IAJD&",[global])),
+ <<"VDpMoFi">> = iolist_to_binary(re:replace("a-b","a[\\S]b","VDpMoFi",[])),
+ <<"VDpMoFi">> = iolist_to_binary(re:replace("a-b","a[\\S]b","VDpMoFi",[global])),
+ <<"a b">> = iolist_to_binary(re:replace("a b","a[\\S]b","r&\\1C&XvsB&",[])),
+ <<"a b">> = iolist_to_binary(re:replace("a b","a[\\S]b","r&\\1C&XvsB&",[global])),
+ <<"oHYpsb1fsM1IhN1n">> = iolist_to_binary(re:replace("1","[\\d]","oHY\\1psb&fsM&IhN\\1&n",[])),
+ <<"oHYpsb1fsM1IhN1n">> = iolist_to_binary(re:replace("1","[\\d]","oHY\\1psb&fsM&IhN\\1&n",[global])),
+ <<"-KJX">> = iolist_to_binary(re:replace("-","[\\D]","&KJX",[])),
+ <<"-KJX">> = iolist_to_binary(re:replace("-","[\\D]","&KJX",[global])),
+ <<"S*I*KU** Failers">> = iolist_to_binary(re:replace("*** Failers","[\\D]","S&\\1I&KU",[])),
+ <<"S*I*KUS*I*KUS*I*KUS I KUSFIFKUSaIaKUSiIiKUSlIlKUSeIeKUSrIrKUSsIsKU">> = iolist_to_binary(re:replace("*** Failers","[\\D]","S&\\1I&KU",[global])),
+ <<"WSKtUY">> = iolist_to_binary(re:replace("-","[\\D]","WSKtUY",[])),
+ <<"WSKtUY">> = iolist_to_binary(re:replace("-","[\\D]","WSKtUY",[global])),
+ <<"1">> = iolist_to_binary(re:replace("1","[\\D]","B\\1iB",[])),
+ <<"1">> = iolist_to_binary(re:replace("1","[\\D]","B\\1iB",[global])),
+ <<"bkabprVc">> = iolist_to_binary(re:replace("abc","ab|cd","bk&prV",[])),
+ <<"bkabprVc">> = iolist_to_binary(re:replace("abc","ab|cd","bk&prV",[global])),
+ <<"oxPHxnpgpabTabDdTmMcd">> = iolist_to_binary(re:replace("abcd","ab|cd","oxPHxnpgp&T&DdTmM",[])),
+ <<"oxPHxnpgpabTabDdTmMoxPHxnpgpcdTcdDdTmM">> = iolist_to_binary(re:replace("abcd","ab|cd","oxPHxnpgp&T&DdTmM",[global])),
+ <<"dpfHboradY">> = iolist_to_binary(re:replace("def","()ef","pfH\\1bor\\1adY",[])),
+ <<"dpfHboradY">> = iolist_to_binary(re:replace("def","()ef","pfH\\1bor\\1adY",[global])),
+ <<"Uma(b">> = iolist_to_binary(re:replace("a(b","a\\(b","Um&",[])),
+ <<"Uma(b">> = iolist_to_binary(re:replace("a(b","a\\(b","Um&",[global])),
+ <<"YyxabuKXMauxXBpkrd">> = iolist_to_binary(re:replace("ab","a\\(*b","Yyx&uKXMauxXBpkrd",[])),
+ <<"YyxabuKXMauxXBpkrd">> = iolist_to_binary(re:replace("ab","a\\(*b","Yyx&uKXMauxXBpkrd",[global])),
+ <<"pDTwGyKkiLEWnnefa((b">> = iolist_to_binary(re:replace("a((b","a\\(*b","pDTwGyKkiLEWnnef&",[])),
+ <<"pDTwGyKkiLEWnnefa((b">> = iolist_to_binary(re:replace("a((b","a\\(*b","pDTwGyKkiLEWnnef&",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","a\\\\b","G\\1H\\1qrOi&\\1&aUty",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","a\\\\b","G\\1H\\1qrOi&\\1&aUty",[global])),
+ <<"eaywaaaVSCBcjnuIfRXabc">> = iolist_to_binary(re:replace("abc","((a))","e&yw&\\1&VSCBcjnuIfRX\\1",[])),
+ <<"eaywaaaVSCBcjnuIfRXabc">> = iolist_to_binary(re:replace("abc","((a))","e&yw&\\1&VSCBcjnuIfRX\\1",[global])),
+ <<"IbabcEabc">> = iolist_to_binary(re:replace("abc","(a)b(c)","Ib&E&",[])),
+ <<"IbabcEabc">> = iolist_to_binary(re:replace("abc","(a)b(c)","Ib&E&",[global])),
+ <<"aabbgflabcrIsYKabcUvEj">> = iolist_to_binary(re:replace("aabbabc","a+b+c","gf\\1\\1l&rIsYK&UvEj",[])),
+ <<"aabbgflabcrIsYKabcUvEj">> = iolist_to_binary(re:replace("aabbabc","a+b+c","gf\\1\\1l&rIsYK&UvEj",[global])),
+ <<"aabbUMebt">> = iolist_to_binary(re:replace("aabbabc","a{1,}b{1,}c","UMeb\\1t",[])),
+ <<"aabbUMebt">> = iolist_to_binary(re:replace("aabbabc","a{1,}b{1,}c","UMeb\\1t",[global])),
+ <<"pPfLrjPUFRjvuHjcjabc">> = iolist_to_binary(re:replace("abcabc","a.+?c","pPf\\1LrjPUFRjvuH\\1jcj\\1",[])),
+ <<"pPfLrjPUFRjvuHjcjpPfLrjPUFRjvuHjcj">> = iolist_to_binary(re:replace("abcabc","a.+?c","pPf\\1LrjPUFRjvuH\\1jcj\\1",[global])),
+ <<"abocUabav">> = iolist_to_binary(re:replace("ab","(a+|b)*","&ocU&av",[])),
+ <<"abocUabavocUav">> = iolist_to_binary(re:replace("ab","(a+|b)*","&ocU&av",[global])),
+ <<"FWabLo">> = iolist_to_binary(re:replace("ab","(a+|b){0,}","FW&Lo",[])),
+ <<"FWabLoFWLo">> = iolist_to_binary(re:replace("ab","(a+|b){0,}","FW&Lo",[global])),
+ <<"EGbhiYYab">> = iolist_to_binary(re:replace("ab","(a+|b)+","EG\\1hiYY&",[])),
+ <<"EGbhiYYab">> = iolist_to_binary(re:replace("ab","(a+|b)+","EG\\1hiYY&",[global])),
+ <<"jbtiMbbNbCoAUbUC">> = iolist_to_binary(re:replace("ab","(a+|b){1,}","j\\1tiM\\1\\1N\\1CoAU\\1UC",[])),
+ <<"jbtiMbbNbCoAUbUC">> = iolist_to_binary(re:replace("ab","(a+|b){1,}","j\\1tiM\\1\\1N\\1CoAU\\1UC",[global])),
+ ok.
+run18() ->
+ <<"aLWaSkPahb">> = iolist_to_binary(re:replace("ab","(a+|b)?","\\1LW\\1SkP&h",[])),
+ <<"aLWaSkPahbLWbSkPbhLWSkPh">> = iolist_to_binary(re:replace("ab","(a+|b)?","\\1LW\\1SkP&h",[global])),
+ <<"Aab">> = iolist_to_binary(re:replace("ab","(a+|b){0,1}","A\\1",[])),
+ <<"AaAbA">> = iolist_to_binary(re:replace("ab","(a+|b){0,1}","A\\1",[global])),
+ <<"QOcdemOcded">> = iolist_to_binary(re:replace("cde","[^ab]*","QO&mO&d",[])),
+ <<"QOcdemOcdedQOmOd">> = iolist_to_binary(re:replace("cde","[^ab]*","QO&mO&d",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","iTWYAHkkEiJ&r",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","iTWYAHkkEiJ&r",[global])),
+ <<"b">> = iolist_to_binary(re:replace("b","abc","Q",[])),
+ <<"b">> = iolist_to_binary(re:replace("b","abc","Q",[global])),
+ <<"nboabbbcdffWetJfpMLDkabbbcdjOabbbcd">> = iolist_to_binary(re:replace("abbbcd","([abc])*d","nbo&ffWetJfpMLDk&jO&",[])),
+ <<"nboabbbcdffWetJfpMLDkabbbcdjOabbbcd">> = iolist_to_binary(re:replace("abbbcd","([abc])*d","nbo&ffWetJfpMLDk&jO&",[global])),
+ <<"JaabcduaabcdVPsa">> = iolist_to_binary(re:replace("abcd","([abc])*bcd","J\\1&ua&VPs\\1",[])),
+ <<"JaabcduaabcdVPsa">> = iolist_to_binary(re:replace("abcd","([abc])*bcd","J\\1&ua&VPs\\1",[global])),
+ <<"e">> = iolist_to_binary(re:replace("e","a|b|c|d|e","&",[])),
+ <<"e">> = iolist_to_binary(re:replace("e","a|b|c|d|e","&",[global])),
+ <<"kefefAeXq">> = iolist_to_binary(re:replace("ef","(a|b|c|d|e)f","k&&A\\1Xq",[])),
+ <<"kefefAeXq">> = iolist_to_binary(re:replace("ef","(a|b|c|d|e)f","k&&A\\1Xq",[global])),
+ <<"fsGDN">> = iolist_to_binary(re:replace("abcdefg","abcd*efg","fsG\\1D\\1\\1N\\1",[])),
+ <<"fsGDN">> = iolist_to_binary(re:replace("abcdefg","abcd*efg","fsG\\1D\\1\\1N\\1",[global])),
+ <<"xThMpLDjpnyabbbz">> = iolist_to_binary(re:replace("xabyabbbz","ab*","T\\1hMpLDjpn",[])),
+ <<"xThMpLDjpnyThMpLDjpnz">> = iolist_to_binary(re:replace("xabyabbbz","ab*","T\\1hMpLDjpn",[global])),
+ <<"xqjaJaVJVyabbbz">> = iolist_to_binary(re:replace("xayabbbz","ab*","qj&J&VJV",[])),
+ <<"xqjaJaVJVyqjabbbJabbbVJVz">> = iolist_to_binary(re:replace("xayabbbz","ab*","qj&J&VJV",[global])),
+ <<"abCcdeQnNecduqUkMSfcdGcdecdeh">> = iolist_to_binary(re:replace("abcde","(ab|cd)e","C&QnNe\\1uqUkMSf\\1G&&h",[])),
+ <<"abCcdeQnNecduqUkMSfcdGcdecdeh">> = iolist_to_binary(re:replace("abcde","(ab|cd)e","C&QnNe\\1uqUkMSf\\1G&&h",[global])),
+ <<"gJyOb">> = iolist_to_binary(re:replace("hij","[abhgefdc]ij","gJyOb",[])),
+ <<"gJyOb">> = iolist_to_binary(re:replace("hij","[abhgefdc]ij","gJyOb",[global])),
+ <<"abcdGbYcPqM">> = iolist_to_binary(re:replace("abcdef","(abc|)ef","GbY\\1cPqM",[])),
+ <<"abcdGbYcPqM">> = iolist_to_binary(re:replace("abcdef","(abc|)ef","GbY\\1cPqM",[global])),
+ <<"aUbcdUBbcdAUpIFAbVerWgt">> = iolist_to_binary(re:replace("abcd","(a|b)c*d","U&UB&AUpIFA\\1VerWgt",[])),
+ <<"aUbcdUBbcdAUpIFAbVerWgt">> = iolist_to_binary(re:replace("abcd","(a|b)c*d","U&UB&AUpIFA\\1VerWgt",[global])),
+ <<"abckK">> = iolist_to_binary(re:replace("abc","(ab|ab*)bc","&kK",[])),
+ <<"abckK">> = iolist_to_binary(re:replace("abc","(ab|ab*)bc","&kK",[global])),
+ <<"MFabcMbcbcabcXbcGWabcbc">> = iolist_to_binary(re:replace("abc","a([bc]*)c*","MF&M\\1\\1&X\\1GW&\\1",[])),
+ <<"MFabcMbcbcabcXbcGWabcbc">> = iolist_to_binary(re:replace("abc","a([bc]*)c*","MF&M\\1\\1&X\\1GW&\\1",[global])),
+ <<"bcEbcyv">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c*d)","\\1E\\1yv",[])),
+ <<"bcEbcyv">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c*d)","\\1E\\1yv",[global])),
+ <<"HJx">> = iolist_to_binary(re:replace("abcd","a([bc]+)(c*d)","HJx",[])),
+ <<"HJx">> = iolist_to_binary(re:replace("abcd","a([bc]+)(c*d)","HJx",[global])),
+ ok.
+run19() ->
+ <<"HdbW">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c+d)","Hd\\1W",[])),
+ <<"HdbW">> = iolist_to_binary(re:replace("abcd","a([bc]*)(c+d)","Hd\\1W",[global])),
+ <<"FqCeJOadcdcdeIvQpadcdcdeadcdcdeadcdcdeH">> = iolist_to_binary(re:replace("adcdcde","a[bcd]*dcdcde","FqCeJO&IvQp\\1\\1&&&H",[])),
+ <<"FqCeJOadcdcdeIvQpadcdcdeadcdcdeadcdcdeH">> = iolist_to_binary(re:replace("adcdcde","a[bcd]*dcdcde","FqCeJO&IvQp\\1\\1&&&H",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bcd]+dcdcde","\\1&TNEyDw",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[bcd]+dcdcde","\\1&TNEyDw",[global])),
+ <<"abcde">> = iolist_to_binary(re:replace("abcde","a[bcd]+dcdcde","PqeS\\1GQJ&vSq&YhS",[])),
+ <<"abcde">> = iolist_to_binary(re:replace("abcde","a[bcd]+dcdcde","PqeS\\1GQJ&vSq&YhS",[global])),
+ <<"adcdcde">> = iolist_to_binary(re:replace("adcdcde","a[bcd]+dcdcde","vdBav\\1Ild",[])),
+ <<"adcdcde">> = iolist_to_binary(re:replace("adcdcde","a[bcd]+dcdcde","vdBav\\1Ild",[global])),
+ <<"GIjXVoAJXroabclW">> = iolist_to_binary(re:replace("abc","(ab|a)b*c","GIjXVoAJXro&lW",[])),
+ <<"GIjXVoAJXroabclW">> = iolist_to_binary(re:replace("abc","(ab|a)b*c","GIjXVoAJXro&lW",[global])),
+ <<"pKabcabctabcdqabcdaAabcdpgPtdK">> = iolist_to_binary(re:replace("abcd","((a)(b)c)(d)","pK\\1\\1t&q&aA&pgPtdK",[])),
+ <<"pKabcabctabcdqabcdaAabcdpgPtdK">> = iolist_to_binary(re:replace("abcd","((a)(b)c)(d)","pK\\1\\1t&q&aA&pgPtdK",[global])),
+ <<"XrxalphaplnalphaMFGv">> = iolist_to_binary(re:replace("alpha","[a-zA-Z_][a-zA-Z0-9_]*","Xrx&pln&MFG\\1v",[])),
+ <<"XrxalphaplnalphaMFGv">> = iolist_to_binary(re:replace("alpha","[a-zA-Z_][a-zA-Z0-9_]*","Xrx&pln&MFG\\1v",[global])),
+ <<"ajbhHEObuuuMEIegbh">> = iolist_to_binary(re:replace("abh","^a(bc+|b[eh])g|.h$","j&HEObuu\\1uMEIeg&",[])),
+ <<"ajbhHEObuuuMEIegbh">> = iolist_to_binary(re:replace("abh","^a(bc+|b[eh])g|.h$","j&HEObuu\\1uMEIeg&",[global])),
+ <<"effgzFiGeffgzUwqI">> = iolist_to_binary(re:replace("effgz","(bc+d$|ef*g.|h?i(j|k))","&FiG\\1UwqI",[])),
+ <<"effgzFiGeffgzUwqI">> = iolist_to_binary(re:replace("effgz","(bc+d$|ef*g.|h?i(j|k))","&FiG\\1UwqI",[global])),
+ <<"ijJMstbxCWsijpVijVwQav">> = iolist_to_binary(re:replace("ij","(bc+d$|ef*g.|h?i(j|k))","&JMstbxCWs&pV\\1VwQav",[])),
+ <<"ijJMstbxCWsijpVijVwQav">> = iolist_to_binary(re:replace("ij","(bc+d$|ef*g.|h?i(j|k))","&JMstbxCWs&pV\\1VwQav",[global])),
+ <<"rqYdteffgzVIpOoenIHdd">> = iolist_to_binary(re:replace("reffgz","(bc+d$|ef*g.|h?i(j|k))","qYdt&VIpOoenIHdd",[])),
+ <<"rqYdteffgzVIpOoenIHdd">> = iolist_to_binary(re:replace("reffgz","(bc+d$|ef*g.|h?i(j|k))","qYdt&VIpOoenIHdd",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","aq",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","aq",[global])),
+ <<"effg">> = iolist_to_binary(re:replace("effg","(bc+d$|ef*g.|h?i(j|k))","yHtJLFej\\1yYR\\1sQo&np",[])),
+ <<"effg">> = iolist_to_binary(re:replace("effg","(bc+d$|ef*g.|h?i(j|k))","yHtJLFej\\1yYR\\1sQo&np",[global])),
+ <<"bcdd">> = iolist_to_binary(re:replace("bcdd","(bc+d$|ef*g.|h?i(j|k))","y\\1WeuT\\1",[])),
+ <<"bcdd">> = iolist_to_binary(re:replace("bcdd","(bc+d$|ef*g.|h?i(j|k))","y\\1WeuT\\1",[global])),
+ <<"wodvWYlegweBrV">> = iolist_to_binary(re:replace("a","((((((((((a))))))))))","wodvWYlegweBrV",[])),
+ <<"wodvWYlegweBrV">> = iolist_to_binary(re:replace("a","((((((((((a))))))))))","wodvWYlegweBrV",[global])),
+ <<"gqasCpaas">> = iolist_to_binary(re:replace("aa","((((((((((a))))))))))\\10","gq\\1sCp\\1\\1s",[])),
+ <<"gqasCpaas">> = iolist_to_binary(re:replace("aa","((((((((((a))))))))))\\10","gq\\1sCp\\1\\1s",[global])),
+ <<"GwagSDfa">> = iolist_to_binary(re:replace("a","(((((((((a)))))))))","Gw&gSDf&",[])),
+ <<"GwagSDfa">> = iolist_to_binary(re:replace("a","(((((((((a)))))))))","Gw&gSDf&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","qj&H&TFbc&WmR",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","qj&H&TFbc&WmR",[global])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","multiple words of text","FwU",[])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","multiple words of text","FwU",[global])),
+ <<"uh-uh">> = iolist_to_binary(re:replace("uh-uh","multiple words of text","Tf&&&bwM&KOaXHg\\1WRNk",[])),
+ <<"uh-uh">> = iolist_to_binary(re:replace("uh-uh","multiple words of text","Tf&&&bwM&KOaXHg\\1WRNk",[global])),
+ <<"RdXXlExbAbHAgDE, yeah">> = iolist_to_binary(re:replace("multiple words, yeah","multiple words","R\\1dXXl\\1ExbAbHAgDE",[])),
+ <<"RdXXlExbAbHAgDE, yeah">> = iolist_to_binary(re:replace("multiple words, yeah","multiple words","R\\1dXXl\\1ExbAbHAgDE",[global])),
+ <<"ababcCxabsCTYB">> = iolist_to_binary(re:replace("abcde","(.*)c(.*)","\\1\\1cCx\\1sCTYB",[])),
+ <<"ababcCxabsCTYB">> = iolist_to_binary(re:replace("abcde","(.*)c(.*)","\\1\\1cCx\\1sCTYB",[global])),
+ <<"rW">> = iolist_to_binary(re:replace("(a, b)","\\((.*), (.*)\\)","rW",[])),
+ <<"rW">> = iolist_to_binary(re:replace("(a, b)","\\((.*), (.*)\\)","rW",[global])),
+ <<"dabcd">> = iolist_to_binary(re:replace("abcd","abcd","d&",[])),
+ <<"dabcd">> = iolist_to_binary(re:replace("abcd","abcd","d&",[global])),
+ <<"bclAbcTn">> = iolist_to_binary(re:replace("abcd","a(bc)d","\\1lA\\1Tn",[])),
+ <<"bclAbcTn">> = iolist_to_binary(re:replace("abcd","a(bc)d","\\1lA\\1Tn",[global])),
+ <<"waf">> = iolist_to_binary(re:replace("ac","a[-]?c","waf",[])),
+ <<"waf">> = iolist_to_binary(re:replace("ac","a[-]?c","waf",[global])),
+ <<"HpOuFXbFnUEO">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","HpOuFXbFnUEO",[])),
+ <<"HpOuFXbFnUEO">> = iolist_to_binary(re:replace("abcabc","(abc)\\1","HpOuFXbFnUEO",[global])),
+ ok.
+run20() ->
+ <<"XvCLIKabcabcohl">> = iolist_to_binary(re:replace("abcabc","([a-c]*)\\1","XvCLIK&ohl",[])),
+ <<"XvCLIKabcabcohlXvCLIKohl">> = iolist_to_binary(re:replace("abcabc","([a-c]*)\\1","XvCLIK&ohl",[global])),
+ <<"THmLVdxHpEOamaQ">> = iolist_to_binary(re:replace("a","(a)|\\1","THmLVdxHpEOam\\1Q",[])),
+ <<"THmLVdxHpEOamaQ">> = iolist_to_binary(re:replace("a","(a)|\\1","THmLVdxHpEOam\\1Q",[global])),
+ <<"*** FjGfKKSoilers">> = iolist_to_binary(re:replace("*** Failers","(a)|\\1","jGfKKSo",[])),
+ <<"*** FjGfKKSoilers">> = iolist_to_binary(re:replace("*** Failers","(a)|\\1","jGfKKSo",[global])),
+ <<"pCab">> = iolist_to_binary(re:replace("ab","(a)|\\1","pC&",[])),
+ <<"pCab">> = iolist_to_binary(re:replace("ab","(a)|\\1","pC&",[global])),
+ <<"x">> = iolist_to_binary(re:replace("x","(a)|\\1","U",[])),
+ <<"x">> = iolist_to_binary(re:replace("x","(a)|\\1","U",[global])),
+ <<"nwvlinqmgabbLababbvbcbc">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2)*","nwvlinqmga\\1L&v",[])),
+ <<"nwvlinqmgabbLababbvnwvlinqmgaLvbnwvlinqmgacbcLcbcvnwvlinqmgaLv">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2)*","nwvlinqmga\\1L&v",[global])),
+ <<"XEababbbcbccbcnoei">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2){3}","XE&\\1noei",[])),
+ <<"XEababbbcbccbcnoei">> = iolist_to_binary(re:replace("ababbbcbc","(([a-c])b*?\\2){3}","XE&\\1noei",[global])),
+ <<"aaaxabaxbaaxbbaxQHJip">> = iolist_to_binary(re:replace("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+","&QHJip",[])),
+ <<"aaaxabaxbaaxbbaxQHJip">> = iolist_to_binary(re:replace("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+","&QHJip",[global])),
+ <<"bbaababbabaaaaaFjrtkQstbbaaaabbabbaaaabbaRobbaaaabbaQwbbaJbbaaaabbabbaaaabba">> = iolist_to_binary(re:replace("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}","FjrtkQst&&Ro&Qw\\1J&&",[])),
+ <<"bbaababbabaaaaaFjrtkQstbbaaaabbabbaaaabbaRobbaaaabbaQwbbaJbbaaaabbabbaaaabba">> = iolist_to_binary(re:replace("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}","FjrtkQst&&Ro&Qw\\1J&&",[global])),
+ <<"hryRShiLJ">> = iolist_to_binary(re:replace("ABC","abc","hryRShiL\\1J",[caseless])),
+ <<"hryRShiLJ">> = iolist_to_binary(re:replace("ABC","abc","hryRShiL\\1J",[caseless,
+ global])),
+ <<"XHUenvABCCmAOuuCY">> = iolist_to_binary(re:replace("XABCY","abc","HUenv&C\\1mAOuuC",[caseless])),
+ <<"XHUenvABCCmAOuuCY">> = iolist_to_binary(re:replace("XABCY","abc","HUenv&C\\1mAOuuC",[caseless,
+ global])),
+ <<"AB">> = iolist_to_binary(re:replace("ABABC","abc","\\1",[caseless])),
+ <<"AB">> = iolist_to_binary(re:replace("ABABC","abc","\\1",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","qc&a\\1M&&\\1qqO&&YaV",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","qc&a\\1M&&\\1qqO&&YaV",[caseless,
+ global])),
+ <<"aaxabxbaxbbx">> = iolist_to_binary(re:replace("aaxabxbaxbbx","abc","YoMmmB&v\\1N\\1voc",[caseless])),
+ <<"aaxabxbaxbbx">> = iolist_to_binary(re:replace("aaxabxbaxbbx","abc","YoMmmB&v\\1N\\1voc",[caseless,
+ global])),
+ <<"XBC">> = iolist_to_binary(re:replace("XBC","abc","\\1gwN\\1pcAL\\1le&B",[caseless])),
+ <<"XBC">> = iolist_to_binary(re:replace("XBC","abc","\\1gwN\\1pcAL\\1le&B",[caseless,
+ global])),
+ <<"AXC">> = iolist_to_binary(re:replace("AXC","abc","vQ&&a\\1Kw",[caseless])),
+ <<"AXC">> = iolist_to_binary(re:replace("AXC","abc","vQ&&a\\1Kw",[caseless,
+ global])),
+ <<"ABX">> = iolist_to_binary(re:replace("ABX","abc","pSJJqa&TbyEb",[caseless])),
+ <<"ABX">> = iolist_to_binary(re:replace("ABX","abc","pSJJqa&TbyEb",[caseless,
+ global])),
+ <<"ABCYSKriNcABCxqw">> = iolist_to_binary(re:replace("ABC","ab*c","&YSKriNc&xqw",[caseless])),
+ <<"ABCYSKriNcABCxqw">> = iolist_to_binary(re:replace("ABC","ab*c","&YSKriNc&xqw",[caseless,
+ global])),
+ <<"">> = iolist_to_binary(re:replace("ABC","ab*bc","\\1",[caseless])),
+ <<"">> = iolist_to_binary(re:replace("ABC","ab*bc","\\1",[caseless,
+ global])),
+ <<"xd">> = iolist_to_binary(re:replace("ABBC","ab*bc","xd",[caseless])),
+ <<"xd">> = iolist_to_binary(re:replace("ABBC","ab*bc","xd",[caseless,
global])),
-?line <<"ABnpaQvR">> = iolist_to_binary(re:replace("ABABC","abc","npaQvR",[caseless])),
-?line <<"ABnpaQvR">> = iolist_to_binary(re:replace("ABABC","abc","npaQvR",[caseless,
+ <<"fSNABBBBCXyDgO">> = iolist_to_binary(re:replace("ABBBBC","ab*?bc","fSN&\\1\\1XyDgO\\1",[caseless])),
+ <<"fSNABBBBCXyDgO">> = iolist_to_binary(re:replace("ABBBBC","ab*?bc","fSN&\\1\\1XyDgO\\1",[caseless,
+ global])),
+ <<"kp">> = iolist_to_binary(re:replace("ABBBBC","ab{0,}?bc","kp",[caseless])),
+ <<"kp">> = iolist_to_binary(re:replace("ABBBBC","ab{0,}?bc","kp",[caseless,
+ global])),
+ <<"TjPcYlpdNDABBCAJoFsABBC">> = iolist_to_binary(re:replace("ABBC","ab+?bc","TjPcYlpdND\\1\\1&AJoFs&",[caseless])),
+ <<"TjPcYlpdNDABBCAJoFsABBC">> = iolist_to_binary(re:replace("ABBC","ab+?bc","TjPcYlpdND\\1\\1&AJoFs&",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","WWQXKaM\\1xLF&",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","WWQXKaM\\1xLF&",[caseless,
+ global])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","ab+bc","w",[caseless])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","ab+bc","w",[caseless,
+ global])),
+ <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab+bc","SYdD",[caseless])),
+ <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab+bc","SYdD",[caseless,
+ global])),
+ <<"TABBBBC">> = iolist_to_binary(re:replace("ABBBBC","ab+bc","T&",[caseless])),
+ <<"TABBBBC">> = iolist_to_binary(re:replace("ABBBBC","ab+bc","T&",[caseless,
+ global])),
+ <<"grMABBBBCABBBBCnRD">> = iolist_to_binary(re:replace("ABBBBC","ab{1,}?bc","grM&&nRD",[caseless])),
+ <<"grMABBBBCABBBBCnRD">> = iolist_to_binary(re:replace("ABBBBC","ab{1,}?bc","grM&&nRD",[caseless,
+ global])),
+ <<"JJtIBfABBBBCaKtYmqwv">> = iolist_to_binary(re:replace("ABBBBC","ab{1,3}?bc","\\1JJtIBf&\\1aKtYmqwv",[caseless])),
+ <<"JJtIBfABBBBCaKtYmqwv">> = iolist_to_binary(re:replace("ABBBBC","ab{1,3}?bc","\\1JJtIBf&\\1aKtYmqwv",[caseless,
+ global])),
+ <<"gwAlxwDfABBBBCNQKABBBBClABBBBCLxf">> = iolist_to_binary(re:replace("ABBBBC","ab{3,4}?bc","gw\\1AlxwDf&NQK&l\\1&Lxf",[caseless])),
+ <<"gwAlxwDfABBBBCNQKABBBBClABBBBCLxf">> = iolist_to_binary(re:replace("ABBBBC","ab{3,4}?bc","gw\\1AlxwDf&NQK&l\\1&Lxf",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}?bc","qiwoP\\1bmIlc\\1&",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}?bc","qiwoP\\1bmIlc\\1&",[caseless,
+ global])),
+ <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab{4,5}?bc","aBG\\1YIvTYXxiuDt&",[caseless])),
+ <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab{4,5}?bc","aBG\\1YIvTYXxiuDt&",[caseless,
+ global])),
+ <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","ab{4,5}?bc","T\\1d&vifs\\1n\\1Jvt",[caseless])),
+ <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","ab{4,5}?bc","T\\1d&vifs\\1n\\1Jvt",[caseless,
+ global])),
+ <<"MvyHLhAABBCiABBCN">> = iolist_to_binary(re:replace("ABBC","ab??bc","M\\1vyHLhA\\1&\\1i&N",[caseless])),
+ <<"MvyHLhAABBCiABBCN">> = iolist_to_binary(re:replace("ABBC","ab??bc","M\\1vyHLhA\\1&\\1i&N",[caseless,
+ global])),
+ <<"mlLABCgtDiemoB">> = iolist_to_binary(re:replace("ABC","ab??bc","mlL&gtDiemoB",[caseless])),
+ <<"mlLABCgtDiemoB">> = iolist_to_binary(re:replace("ABC","ab??bc","mlL&gtDiemoB",[caseless,
+ global])),
+ ok.
+run21() ->
+ <<"aMKJBABCqBQrABCWvqqJABCVi">> = iolist_to_binary(re:replace("ABC","ab{0,1}?bc","aMKJB&qBQr&WvqqJ&Vi",[caseless])),
+ <<"aMKJBABCqBQrABCWvqqJABCVi">> = iolist_to_binary(re:replace("ABC","ab{0,1}?bc","aMKJB&qBQr&WvqqJ&Vi",[caseless,
+ global])),
+ <<"KABCqKjWXyABC">> = iolist_to_binary(re:replace("ABC","ab??c","K\\1&qKjWXy\\1&",[caseless])),
+ <<"KABCqKjWXyABC">> = iolist_to_binary(re:replace("ABC","ab??c","K\\1&qKjWXy\\1&",[caseless,
+ global])),
+ <<"t">> = iolist_to_binary(re:replace("ABC","ab{0,1}?c","t",[caseless])),
+ <<"t">> = iolist_to_binary(re:replace("ABC","ab{0,1}?c","t",[caseless,
+ global])),
+ <<"djnySdABCABCxQAR">> = iolist_to_binary(re:replace("ABC","^abc$","djnyS\\1d&&\\1\\1x\\1QAR",[caseless])),
+ <<"djnySdABCABCxQAR">> = iolist_to_binary(re:replace("ABC","^abc$","djnyS\\1d&&\\1\\1x\\1QAR",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","&cOwCIe",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","&cOwCIe",[caseless,
+ global])),
+ <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","^abc$","DTRA&tGT\\1WCjF\\1\\1",[caseless])),
+ <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","^abc$","DTRA&tGT\\1WCjF\\1\\1",[caseless,
+ global])),
+ <<"ABCC">> = iolist_to_binary(re:replace("ABCC","^abc$","YC\\1",[caseless])),
+ <<"ABCC">> = iolist_to_binary(re:replace("ABCC","^abc$","YC\\1",[caseless,
global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","E&beuUX&&",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","abc","E&beuUX&&",[caseless,
- global])),
-?line <<"aaxabxbaxbbx">> = iolist_to_binary(re:replace("aaxabxbaxbbx","abc","\\1hAU\\1hg&Pk",[caseless])),
-?line <<"aaxabxbaxbbx">> = iolist_to_binary(re:replace("aaxabxbaxbbx","abc","\\1hAU\\1hg&Pk",[caseless,
- global])),
-?line <<"XBC">> = iolist_to_binary(re:replace("XBC","abc","yqsG",[caseless])),
-?line <<"XBC">> = iolist_to_binary(re:replace("XBC","abc","yqsG",[caseless,
- global])),
-?line <<"AXC">> = iolist_to_binary(re:replace("AXC","abc","\\1bi&Ff\\1kGVy&V",[caseless])),
-?line <<"AXC">> = iolist_to_binary(re:replace("AXC","abc","\\1bi&Ff\\1kGVy&V",[caseless,
- global])),
-?line <<"ABX">> = iolist_to_binary(re:replace("ABX","abc","x&m\\1jtf&ptFxBd",[caseless])),
-?line <<"ABX">> = iolist_to_binary(re:replace("ABX","abc","x&m\\1jtf&ptFxBd",[caseless,
- global])),
-?line <<"VOTkukABC">> = iolist_to_binary(re:replace("ABC","ab*c","V\\1OTkuk&\\1",[caseless])),
-?line <<"VOTkukABC">> = iolist_to_binary(re:replace("ABC","ab*c","V\\1OTkuk&\\1",[caseless,
+ <<"oCxwvYlagrHYCUNjC">> = iolist_to_binary(re:replace("ABCC","^abc","oC\\1xwvYlagrHYCUN\\1j",[caseless])),
+ <<"oCxwvYlagrHYCUNjC">> = iolist_to_binary(re:replace("ABCC","^abc","oC\\1xwvYlagrHYCUN\\1j",[caseless,
+ global])),
+ <<"AABCYOABCqABCABCXABCKHJVXnu">> = iolist_to_binary(re:replace("AABC","abc$","&YO&q&&X&\\1KHJVXnu",[caseless])),
+ <<"AABCYOABCqABCABCXABCKHJVXnu">> = iolist_to_binary(re:replace("AABC","abc$","&YO&q&&X&\\1KHJVXnu",[caseless,
+ global])),
+ <<"YKSscFvdcxhKQAABC">> = iolist_to_binary(re:replace("ABC","^","YKSscFvdcx\\1hKQA\\1",[caseless])),
+ <<"YKSscFvdcxhKQAABC">> = iolist_to_binary(re:replace("ABC","^","YKSscFvdcx\\1hKQA\\1",[caseless,
+ global])),
+ <<"ABCJPmJKxRqaJn">> = iolist_to_binary(re:replace("ABC","$","JPmJ&K\\1\\1x\\1RqaJ\\1n",[caseless])),
+ <<"ABCJPmJKxRqaJn">> = iolist_to_binary(re:replace("ABC","$","JPmJ&K\\1\\1x\\1RqaJ\\1n",[caseless,
+ global])),
+ <<"KovmYABCBPABCY">> = iolist_to_binary(re:replace("ABC","a.c","KovmY&BP&Y",[caseless])),
+ <<"KovmYABCBPABCY">> = iolist_to_binary(re:replace("ABC","a.c","KovmY&BP&Y",[caseless,
+ global])),
+ <<"tnMtqk">> = iolist_to_binary(re:replace("AXC","a.c","t\\1\\1n\\1Mtqk",[caseless])),
+ <<"tnMtqk">> = iolist_to_binary(re:replace("AXC","a.c","t\\1\\1n\\1Mtqk",[caseless,
global])),
-?line <<"gkYiABCuYNOFDNc">> = iolist_to_binary(re:replace("ABC","ab*bc","g\\1kYi&uYNOFDNc",[caseless])),
-?line <<"gkYiABCuYNOFDNc">> = iolist_to_binary(re:replace("ABC","ab*bc","g\\1kYi&uYNOFDNc",[caseless,
- global])),
-?line <<"GHfaNWh">> = iolist_to_binary(re:replace("ABBC","ab*bc","G\\1HfaNWh",[caseless])),
-?line <<"GHfaNWh">> = iolist_to_binary(re:replace("ABBC","ab*bc","G\\1HfaNWh",[caseless,
- global])),
-?line <<"IJJBqWcABBBBCmU">> = iolist_to_binary(re:replace("ABBBBC","ab*?bc","I\\1JJB\\1\\1qWc&mU",[caseless])),
-?line <<"IJJBqWcABBBBCmU">> = iolist_to_binary(re:replace("ABBBBC","ab*?bc","I\\1JJB\\1\\1qWc&mU",[caseless,
- global])),
-?line <<"YOCTcABBBBCABBBBCbVDCpABBBBChP">> = iolist_to_binary(re:replace("ABBBBC","ab{0,}?bc","YOCTc&&bVDCp&hP",[caseless])),
-?line <<"YOCTcABBBBCABBBBCbVDCpABBBBChP">> = iolist_to_binary(re:replace("ABBBBC","ab{0,}?bc","YOCTc&&bVDCp&hP",[caseless,
- global])),
-?line <<"j">> = iolist_to_binary(re:replace("ABBC","ab+?bc","j",[caseless])),
-?line <<"j">> = iolist_to_binary(re:replace("ABBC","ab+?bc","j",[caseless,
+ <<"PTEd">> = iolist_to_binary(re:replace("AXYZC","a.*?c","PTEd",[caseless])),
+ <<"PTEd">> = iolist_to_binary(re:replace("AXYZC","a.*?c","PTEd",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.*c","\\1XFiq\\1uvPbLR",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.*c","\\1XFiq\\1uvPbLR",[caseless,
+ global])),
+ <<"cqlTAABCy">> = iolist_to_binary(re:replace("AABC","a.*c","cqlT&\\1y",[caseless])),
+ <<"cqlTAABCy">> = iolist_to_binary(re:replace("AABC","a.*c","cqlT&\\1y",[caseless,
+ global])),
+ <<"AXYZD">> = iolist_to_binary(re:replace("AXYZD","a.*c","nHl&b\\1Xh",[caseless])),
+ <<"AXYZD">> = iolist_to_binary(re:replace("AXYZD","a.*c","nHl&b\\1Xh",[caseless,
+ global])),
+ <<"ABDABDdC">> = iolist_to_binary(re:replace("ABD","a[bc]d","&&dC",[caseless])),
+ <<"ABDABDdC">> = iolist_to_binary(re:replace("ABD","a[bc]d","&&dC",[caseless,
+ global])),
+ <<"UqQFWlGkACEBdlidOCI">> = iolist_to_binary(re:replace("ACE","a[b-d]e","UqQF\\1WlGk&BdlidOCI\\1",[caseless])),
+ <<"UqQFWlGkACEBdlidOCI">> = iolist_to_binary(re:replace("ACE","a[b-d]e","UqQF\\1WlGk&BdlidOCI\\1",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[b-d]e","UKuM",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[b-d]e","UKuM",[caseless,
+ global])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","a[b-d]e","W",[caseless])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","a[b-d]e","W",[caseless,
+ global])),
+ <<"ABD">> = iolist_to_binary(re:replace("ABD","a[b-d]e","HF",[caseless])),
+ <<"ABD">> = iolist_to_binary(re:replace("ABD","a[b-d]e","HF",[caseless,
global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","vLfo&Q\\1&uXHE",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab+bc","vLfo&Q\\1&uXHE",[caseless,
+ <<"AFX">> = iolist_to_binary(re:replace("AAC","a[b-d]","FX",[caseless])),
+ <<"AFX">> = iolist_to_binary(re:replace("AAC","a[b-d]","FX",[caseless,
+ global])),
+ <<"aWjCeJjBuA-eA-wLdnI">> = iolist_to_binary(re:replace("A-","a[-b]","aWjCeJj\\1Bu&e&wLdnI",[caseless])),
+ <<"aWjCeJjBuA-eA-wLdnI">> = iolist_to_binary(re:replace("A-","a[-b]","aWjCeJj\\1Bu&e&wLdnI",[caseless,
+ global])),
+ <<"vEBoA-A-hhUA-oyIbqdTA">> = iolist_to_binary(re:replace("A-","a[b-]","vEBo&&hhU&oyIbq\\1d\\1TA",[caseless])),
+ <<"vEBoA-A-hhUA-oyIbqdTA">> = iolist_to_binary(re:replace("A-","a[b-]","vEBo&&hhU&oyIbq\\1d\\1TA",[caseless,
+ global])),
+ <<"lxsWAAwljA]">> = iolist_to_binary(re:replace("A]","a]","lxsW\\1AAwlj&",[caseless])),
+ <<"lxsWAAwljA]">> = iolist_to_binary(re:replace("A]","a]","lxsW\\1AAwlj&",[caseless,
+ global])),
+ <<"A]BBA]BwueRHPvA]BFaS">> = iolist_to_binary(re:replace("A]B","a[]]b","&B&\\1wueRHPv&FaS",[caseless])),
+ <<"A]BBA]BwueRHPvA]BFaS">> = iolist_to_binary(re:replace("A]B","a[]]b","&B&\\1wueRHPv&FaS",[caseless,
+ global])),
+ ok.
+run22() ->
+ <<"UTPAEDUuRpFvTKUIXNAEDH">> = iolist_to_binary(re:replace("AED","a[^bc]d","U\\1TP&UuRpFvTKUIXN&H",[caseless])),
+ <<"UTPAEDUuRpFvTKUIXNAEDH">> = iolist_to_binary(re:replace("AED","a[^bc]d","U\\1TP&UuRpFvTKUIXN&H",[caseless,
global])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","ab+bc","hPVKmARvLrX&l",[caseless])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","ab+bc","hPVKmARvLrX&l",[caseless,
- global])),
-?line <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab+bc","&\\1OP&EAg",[caseless])),
-?line <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab+bc","&\\1OP&EAg",[caseless,
+ <<"EEkBKqX">> = iolist_to_binary(re:replace("ADC","a[^-b]c","EEk\\1BKqX",[caseless])),
+ <<"EEkBKqX">> = iolist_to_binary(re:replace("ADC","a[^-b]c","EEk\\1BKqX",[caseless,
global])),
-?line <<"PElq">> = iolist_to_binary(re:replace("ABBBBC","ab+bc","PElq",[caseless])),
-?line <<"PElq">> = iolist_to_binary(re:replace("ABBBBC","ab+bc","PElq",[caseless,
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^-b]c","W&hcyn\\1LTFcrP",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^-b]c","W&hcyn\\1LTFcrP",[caseless,
+ global])),
+ <<"ABD">> = iolist_to_binary(re:replace("ABD","a[^-b]c","l&hDcBVR&&P\\1HyoS&",[caseless])),
+ <<"ABD">> = iolist_to_binary(re:replace("ABD","a[^-b]c","l&hDcBVR&&P\\1HyoS&",[caseless,
+ global])),
+ <<"A-C">> = iolist_to_binary(re:replace("A-C","a[^-b]c","r&\\1",[caseless])),
+ <<"A-C">> = iolist_to_binary(re:replace("A-C","a[^-b]c","r&\\1",[caseless,
global])),
-?line <<"aqDjyRpvS">> = iolist_to_binary(re:replace("ABBBBC","ab{1,}?bc","\\1a\\1\\1q\\1DjyRpvS\\1",[caseless])),
-?line <<"aqDjyRpvS">> = iolist_to_binary(re:replace("ABBBBC","ab{1,}?bc","\\1a\\1\\1q\\1DjyRpvS\\1",[caseless,
- global])),
-?line <<"aTWqxABBBBCInABBBBCpRFpO">> = iolist_to_binary(re:replace("ABBBBC","ab{1,3}?bc","aTW\\1qx&In&\\1pRFpO",[caseless])),
-?line <<"aTWqxABBBBCInABBBBCpRFpO">> = iolist_to_binary(re:replace("ABBBBC","ab{1,3}?bc","aTW\\1qx&In&\\1pRFpO",[caseless,
- global])),
-?line <<"ABBBBCTlrABBBBCJOlJvqwgABBBBCh">> = iolist_to_binary(re:replace("ABBBBC","ab{3,4}?bc","&T\\1lr&JOl\\1Jvqwg&h",[caseless])),
-?line <<"ABBBBCTlrABBBBCJOlJvqwgABBBBCh">> = iolist_to_binary(re:replace("ABBBBC","ab{3,4}?bc","&T\\1lr&JOl\\1Jvqwg&h",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}?bc","QBVMd\\1eBP&j\\1Y\\1\\1",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","ab{4,5}?bc","QBVMd\\1eBP&j\\1Y\\1\\1",[caseless,
- global])),
-?line <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab{4,5}?bc","pvlNJ\\1o\\1yAcNJhSec\\1",[caseless])),
-?line <<"ABQ">> = iolist_to_binary(re:replace("ABQ","ab{4,5}?bc","pvlNJ\\1o\\1yAcNJhSec\\1",[caseless,
- global])),
-?line <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","ab{4,5}?bc","dGdgiMqW\\1X",[caseless])),
-?line <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","ab{4,5}?bc","dGdgiMqW\\1X",[caseless,
- global])),
-?line <<"eqlxxIffIhfLhL">> = iolist_to_binary(re:replace("ABBC","ab??bc","eqlxxIffIhfLhL",[caseless])),
-?line <<"eqlxxIffIhfLhL">> = iolist_to_binary(re:replace("ABBC","ab??bc","eqlxxIffIhfLhL",[caseless,
- global])),
-?line <<"bQqNAjyKOqhMXyoABC">> = iolist_to_binary(re:replace("ABC","ab??bc","b\\1QqNAjyKOqhMXyo&",[caseless])),
-?line <<"bQqNAjyKOqhMXyoABC">> = iolist_to_binary(re:replace("ABC","ab??bc","b\\1QqNAjyKOqhMXyo&",[caseless,
- global])),
-?line <<"jJQGABCIRM">> = iolist_to_binary(re:replace("ABC","ab{0,1}?bc","jJQG&IR\\1M",[caseless])),
-?line <<"jJQGABCIRM">> = iolist_to_binary(re:replace("ABC","ab{0,1}?bc","jJQG&IR\\1M",[caseless,
- global])),
-?line <<"gPABCCho">> = iolist_to_binary(re:replace("ABC","ab??c","gP&Cho",[caseless])),
-?line <<"gPABCCho">> = iolist_to_binary(re:replace("ABC","ab??c","gP&Cho",[caseless,
+ <<"wsKsChmsBbyoCwJGFq">> = iolist_to_binary(re:replace("ADC","a[^]b]c","wsKsChm\\1sB\\1byoCwJGFq",[caseless])),
+ <<"wsKsChmsBbyoCwJGFq">> = iolist_to_binary(re:replace("ADC","a[^]b]c","wsKsChm\\1sB\\1byoCwJGFq",[caseless,
+ global])),
+ <<"AdCuC">> = iolist_to_binary(re:replace("ABC","ab|cd","AdCu",[caseless])),
+ <<"AdCuC">> = iolist_to_binary(re:replace("ABC","ab|cd","AdCu",[caseless,
+ global])),
+ <<"kPjHRmkRWABOFqNCD">> = iolist_to_binary(re:replace("ABCD","ab|cd","kPjHRm\\1k\\1RW&OFqN",[caseless])),
+ <<"kPjHRmkRWABOFqNkPjHRmkRWCDOFqN">> = iolist_to_binary(re:replace("ABCD","ab|cd","kPjHRm\\1k\\1RW&OFqN",[caseless,
+ global])),
+ <<"DipEFEFNEFXjXNBJMTG">> = iolist_to_binary(re:replace("DEF","()ef","ip&&N&XjXNBJMTG\\1",[caseless])),
+ <<"DipEFEFNEFXjXNBJMTG">> = iolist_to_binary(re:replace("DEF","()ef","ip&&N&XjXNBJMTG\\1",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","$b","jl",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","$b","jl",[caseless,
+ global])),
+ <<"A]C">> = iolist_to_binary(re:replace("A]C","$b","Ghx\\1\\1nMcXP&D\\1hXTKGqJ",[caseless])),
+ <<"A]C">> = iolist_to_binary(re:replace("A]C","$b","Ghx\\1\\1nMcXP&D\\1hXTKGqJ",[caseless,
+ global])),
+ <<"B">> = iolist_to_binary(re:replace("B","$b","&CU&s",[caseless])),
+ <<"B">> = iolist_to_binary(re:replace("B","$b","&CU&s",[caseless,
+ global])),
+ <<"q">> = iolist_to_binary(re:replace("A(B","a\\(b","q",[caseless])),
+ <<"q">> = iolist_to_binary(re:replace("A(B","a\\(b","q",[caseless,
+ global])),
+ <<"LbAKAddxuaGFABjds">> = iolist_to_binary(re:replace("AB","a\\(*b","LbAKAddx\\1\\1uaGF&jd\\1s",[caseless])),
+ <<"LbAKAddxuaGFABjds">> = iolist_to_binary(re:replace("AB","a\\(*b","LbAKAddx\\1\\1uaGF&jd\\1s",[caseless,
+ global])),
+ <<"WcHNHA((BeLNHyhL">> = iolist_to_binary(re:replace("A((B","a\\(*b","WcH\\1\\1\\1NH&\\1\\1eLNHy\\1hL",[caseless])),
+ <<"WcHNHA((BeLNHyhL">> = iolist_to_binary(re:replace("A((B","a\\(*b","WcH\\1\\1\\1NH&\\1\\1eLNHy\\1hL",[caseless,
+ global])),
+ <<"A">> = iolist_to_binary(re:replace("A","a\\\\b","FD\\1dW",[caseless,
+ notbol])),
+ <<"A">> = iolist_to_binary(re:replace("A","a\\\\b","FD\\1dW",[caseless,
+ notbol,
global])),
-?line <<"iNBxUabjwtTABCLABCvXhABC">> = iolist_to_binary(re:replace("ABC","ab{0,1}?c","iNBxUabjw\\1tT&L&vXh&",[caseless])),
-?line <<"iNBxUabjwtTABCLABCvXhABC">> = iolist_to_binary(re:replace("ABC","ab{0,1}?c","iNBxUabjw\\1tT&L&vXh&",[caseless,
- global])),
-?line <<"iBkpxqXNa">> = iolist_to_binary(re:replace("ABC","^abc$","iBkpxqXNa",[caseless])),
-?line <<"iBkpxqXNa">> = iolist_to_binary(re:replace("ABC","^abc$","iBkpxqXNa",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","OhTwUeW&yJtn",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^abc$","OhTwUeW&yJtn",[caseless,
+ <<"AojAgACCaWeAfuBC">> = iolist_to_binary(re:replace("ABC","((a))","\\1oj&g\\1CCaWe\\1fu",[caseless])),
+ <<"AojAgACCaWeAfuBC">> = iolist_to_binary(re:replace("ABC","((a))","\\1oj&g\\1CCaWe\\1fu",[caseless,
global])),
-?line <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","^abc$","LoawT&xKl\\1&",[caseless])),
-?line <<"ABBBBC">> = iolist_to_binary(re:replace("ABBBBC","^abc$","LoawT&xKl\\1&",[caseless,
- global])),
-?line <<"ABCC">> = iolist_to_binary(re:replace("ABCC","^abc$","iVcopu",[caseless])),
-?line <<"ABCC">> = iolist_to_binary(re:replace("ABCC","^abc$","iVcopu",[caseless,
- global])),
-?line <<"ABCtC">> = iolist_to_binary(re:replace("ABCC","^abc","&t",[caseless])),
-?line <<"ABCtC">> = iolist_to_binary(re:replace("ABCC","^abc","&t",[caseless,
- global])),
-?line <<"AABCWBABCtLipJGm">> = iolist_to_binary(re:replace("AABC","abc$","&W\\1B&tLipJGm",[caseless])),
-?line <<"AABCWBABCtLipJGm">> = iolist_to_binary(re:replace("AABC","abc$","&W\\1B&tLipJGm",[caseless,
- global])),
-?line <<"wDvJtREmkCGdgtGtgABC">> = iolist_to_binary(re:replace("ABC","^","wDvJt\\1REmk\\1CGdgtGtg",[caseless])),
-?line <<"wDvJtREmkCGdgtGtgABC">> = iolist_to_binary(re:replace("ABC","^","wDvJt\\1REmk\\1CGdgtGtg",[caseless,
- global])),
-?line <<"ABCWiqpRnpqRRBAD">> = iolist_to_binary(re:replace("ABC","$","W\\1iqpRnpq\\1RRB&\\1AD",[caseless])),
-?line <<"ABCWiqpRnpqRRBAD">> = iolist_to_binary(re:replace("ABC","$","W\\1iqpRnpq\\1RRB&\\1AD",[caseless,
+ <<"xSJDAQoInQAfBNwlABCJAO">> = iolist_to_binary(re:replace("ABC","(a)b(c)","xSJD\\1QoInQ\\1fBNwl&J\\1O",[caseless])),
+ <<"xSJDAQoInQAfBNwlABCJAO">> = iolist_to_binary(re:replace("ABC","(a)b(c)","xSJD\\1QoInQ\\1fBNwl&J\\1O",[caseless,
+ global])),
+ <<"AABBABCWpU">> = iolist_to_binary(re:replace("AABBABC","a+b+c","&W\\1pU",[caseless])),
+ <<"AABBABCWpU">> = iolist_to_binary(re:replace("AABBABC","a+b+c","&W\\1pU",[caseless,
+ global])),
+ <<"AABBvuHyJYABClhsNABCABC">> = iolist_to_binary(re:replace("AABBABC","a{1,}b{1,}c","vuHyJY&lhsN&&",[caseless])),
+ <<"AABBvuHyJYABClhsNABCABC">> = iolist_to_binary(re:replace("AABBABC","a{1,}b{1,}c","vuHyJY&lhsN&&",[caseless,
+ global])),
+ <<"PuUbOABC">> = iolist_to_binary(re:replace("ABCABC","a.+?c","Pu\\1UbO",[caseless])),
+ <<"PuUbOPuUbO">> = iolist_to_binary(re:replace("ABCABC","a.+?c","Pu\\1UbO",[caseless,
+ global])),
+ <<"FGYfABCDdRACwIXABC">> = iolist_to_binary(re:replace("ABCABC","a.*?c","FGYf&DdRA\\1C\\1\\1wIX",[caseless])),
+ <<"FGYfABCDdRACwIXFGYfABCDdRACwIX">> = iolist_to_binary(re:replace("ABCABC","a.*?c","FGYf&DdRA\\1C\\1\\1wIX",[caseless,
+ global])),
+ <<"hfyssBtPoqABC">> = iolist_to_binary(re:replace("ABCABC","a.{0,5}?c","\\1hfyssBt\\1Poq",[caseless])),
+ <<"hfyssBtPoqhfyssBtPoq">> = iolist_to_binary(re:replace("ABCABC","a.{0,5}?c","\\1hfyssBt\\1Poq",[caseless,
+ global])),
+ <<"aoHgobCXYeRwABSXtABB">> = iolist_to_binary(re:replace("AB","(a+|b)*","aoHgobCXYeRw&SXt&\\1",[caseless])),
+ <<"aoHgobCXYeRwABSXtABBaoHgobCXYeRwSXt">> = iolist_to_binary(re:replace("AB","(a+|b)*","aoHgobCXYeRw&SXt&\\1",[caseless,
global])),
-?line <<"FOABCHABCuJ">> = iolist_to_binary(re:replace("ABC","a.c","FO&H&uJ",[caseless])),
-?line <<"FOABCHABCuJ">> = iolist_to_binary(re:replace("ABC","a.c","FO&H&uJ",[caseless,
+ <<"LYWAHKusKAgrXKh">> = iolist_to_binary(re:replace("AB","(a+|b){0,}","LYWAHKusKAgrXKh",[caseless])),
+ <<"LYWAHKusKAgrXKhLYWAHKusKAgrXKh">> = iolist_to_binary(re:replace("AB","(a+|b){0,}","LYWAHKusKAgrXKh",[caseless,
+ global])),
+ <<"UVXSWR">> = iolist_to_binary(re:replace("AB","(a+|b)+","UVXSWR",[caseless])),
+ <<"UVXSWR">> = iolist_to_binary(re:replace("AB","(a+|b)+","UVXSWR",[caseless,
global])),
-?line <<"mmAXCwHQUmyij">> = iolist_to_binary(re:replace("AXC","a.c","m\\1m&\\1wHQUmyi\\1j",[caseless])),
-?line <<"mmAXCwHQUmyij">> = iolist_to_binary(re:replace("AXC","a.c","m\\1m&\\1wHQUmyi\\1j",[caseless,
- global])),
-?line <<"vKLhT">> = iolist_to_binary(re:replace("AXYZC","a.*?c","vKLhT",[caseless])),
-?line <<"vKLhT">> = iolist_to_binary(re:replace("AXYZC","a.*?c","vKLhT",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.*c","TrBPBlhlCyS&oLwXCYxT",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a.*c","TrBPBlhlCyS&oLwXCYxT",[caseless,
+ <<"lXCwBqLtjKMQjABBokVR">> = iolist_to_binary(re:replace("AB","(a+|b){1,}","lXCw\\1qLtjKMQj&\\1okVR",[caseless])),
+ <<"lXCwBqLtjKMQjABBokVR">> = iolist_to_binary(re:replace("AB","(a+|b){1,}","lXCw\\1qLtjKMQj&\\1okVR",[caseless,
global])),
-?line <<"oNBAABC">> = iolist_to_binary(re:replace("AABC","a.*c","oNB&",[caseless])),
-?line <<"oNBAABC">> = iolist_to_binary(re:replace("AABC","a.*c","oNB&",[caseless,
- global])),
-?line <<"AXYZD">> = iolist_to_binary(re:replace("AXYZD","a.*c","v\\1byeTHd&vaDRL\\1",[caseless])),
-?line <<"AXYZD">> = iolist_to_binary(re:replace("AXYZD","a.*c","v\\1byeTHd&vaDRL\\1",[caseless,
- global])),
-?line <<"puCobgfLFWkTABD">> = iolist_to_binary(re:replace("ABD","a[bc]d","puCobgf\\1LF\\1W\\1kT&",[caseless])),
-?line <<"puCobgfLFWkTABD">> = iolist_to_binary(re:replace("ABD","a[bc]d","puCobgf\\1LF\\1W\\1kT&",[caseless,
- global])),
-?line <<"ACELM">> = iolist_to_binary(re:replace("ACE","a[b-d]e","&LM",[caseless])),
-?line <<"ACELM">> = iolist_to_binary(re:replace("ACE","a[b-d]e","&LM",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[b-d]e","YsqxG&B&NxQkv\\1RY",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[b-d]e","YsqxG&B&NxQkv\\1RY",[caseless,
- global])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","a[b-d]e","o&WeiJHAt\\1vpj",[caseless])),
-?line <<"ABC">> = iolist_to_binary(re:replace("ABC","a[b-d]e","o&WeiJHAt\\1vpj",[caseless,
- global])),
-?line <<"ABD">> = iolist_to_binary(re:replace("ABD","a[b-d]e","S",[caseless])),
-?line <<"ABD">> = iolist_to_binary(re:replace("ABD","a[b-d]e","S",[caseless,
- global])),
-?line <<"AgdndBWDnHACACACVgB">> = iolist_to_binary(re:replace("AAC","a[b-d]","gdndBWDnH&&&VgB",[caseless])),
-?line <<"AgdndBWDnHACACACVgB">> = iolist_to_binary(re:replace("AAC","a[b-d]","gdndBWDnH&&&VgB",[caseless,
- global])),
-?line <<"lpIqxA-sQA-">> = iolist_to_binary(re:replace("A-","a[-b]","lpIqx&sQ&",[caseless])),
-?line <<"lpIqxA-sQA-">> = iolist_to_binary(re:replace("A-","a[-b]","lpIqx&sQ&",[caseless,
- global])),
-?line <<"NJrfcO">> = iolist_to_binary(re:replace("A-","a[b-]","NJrfc\\1O",[caseless])),
-?line <<"NJrfcO">> = iolist_to_binary(re:replace("A-","a[b-]","NJrfc\\1O",[caseless,
- global])),
-?line <<"eA]OcbkaA]qQEbtfTQD">> = iolist_to_binary(re:replace("A]","a]","e&Oc\\1bka&qQEbtfTQD",[caseless])),
-?line <<"eA]OcbkaA]qQEbtfTQD">> = iolist_to_binary(re:replace("A]","a]","e&Oc\\1bka&qQEbtfTQD",[caseless,
+ ok.
+run23() ->
+ <<"MAFkB">> = iolist_to_binary(re:replace("AB","(a+|b)?","M\\1Fk",[caseless])),
+ <<"MAFkMBFkMFk">> = iolist_to_binary(re:replace("AB","(a+|b)?","M\\1Fk",[caseless,
+ global])),
+ <<"STYCeRAuyArB">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}","STYCeR\\1uy\\1r",[caseless])),
+ <<"STYCeRAuyArSTYCeRBuyBrSTYCeRuyr">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}","STYCeR\\1uy\\1r",[caseless,
+ global])),
+ <<"WBHxgnNQAB">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}?","W&BH\\1&\\1x&gnNQ",[caseless])),
+ <<"WBHxgnNQWABHAAAxAgnNQWBHxgnNQWBBHBBBxBgnNQWBHxgnNQ">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}?","W&BH\\1&\\1x&gnNQ",[caseless,
+ global])),
+ <<"MbLbSWbCDEggiClWfEM">> = iolist_to_binary(re:replace("CDE","[^ab]*","MbLbSWb&ggiClWfEM",[caseless])),
+ <<"MbLbSWbCDEggiClWfEMMbLbSWbggiClWfEM">> = iolist_to_binary(re:replace("CDE","[^ab]*","MbLbSWb&ggiClWfEM",[caseless,
global])),
-?line <<"GqJU">> = iolist_to_binary(re:replace("A]B","a[]]b","GqJU",[caseless])),
-?line <<"GqJU">> = iolist_to_binary(re:replace("A]B","a[]]b","GqJU",[caseless,
- global])),
-?line <<"AEDdAEDiIAEDCTAEDj">> = iolist_to_binary(re:replace("AED","a[^bc]d","&d&iI&CT&j",[caseless])),
-?line <<"AEDdAEDiIAEDCTAEDj">> = iolist_to_binary(re:replace("AED","a[^bc]d","&d&iI&CT&j",[caseless,
- global])),
-?line <<"MOKnvQDsS">> = iolist_to_binary(re:replace("ADC","a[^-b]c","MOKn\\1\\1vQDsS\\1",[caseless])),
-?line <<"MOKnvQDsS">> = iolist_to_binary(re:replace("ADC","a[^-b]c","MOKn\\1\\1vQDsS\\1",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^-b]c","dr",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a[^-b]c","dr",[caseless,
- global])),
-?line <<"ABD">> = iolist_to_binary(re:replace("ABD","a[^-b]c","IMKcT&fF&WXbjs\\1\\1",[caseless])),
-?line <<"ABD">> = iolist_to_binary(re:replace("ABD","a[^-b]c","IMKcT&fF&WXbjs\\1\\1",[caseless,
- global])),
-?line <<"A-C">> = iolist_to_binary(re:replace("A-C","a[^-b]c","M&xDIfNL\\1W",[caseless])),
-?line <<"A-C">> = iolist_to_binary(re:replace("A-C","a[^-b]c","M&xDIfNL\\1W",[caseless,
- global])),
-?line <<"wR">> = iolist_to_binary(re:replace("ADC","a[^]b]c","wR",[caseless])),
-?line <<"wR">> = iolist_to_binary(re:replace("ADC","a[^]b]c","wR",[caseless,
- global])),
-?line <<"HKTAABllCQjRABEnXDqjC">> = iolist_to_binary(re:replace("ABC","ab|cd","HKTA&llCQjR&EnXDqj",[caseless])),
-?line <<"HKTAABllCQjRABEnXDqjC">> = iolist_to_binary(re:replace("ABC","ab|cd","HKTA&llCQjR&EnXDqj",[caseless,
- global])),
-?line <<"ABCD">> = iolist_to_binary(re:replace("ABCD","ab|cd","&",[caseless])),
-?line <<"ABCD">> = iolist_to_binary(re:replace("ABCD","ab|cd","&",[caseless,
- global])),
-?line <<"DmgTYsxtpkrXgnoJ">> = iolist_to_binary(re:replace("DEF","()ef","mgTYsxtpkrXgnoJ",[caseless])),
-?line <<"DmgTYsxtpkrXgnoJ">> = iolist_to_binary(re:replace("DEF","()ef","mgTYsxtpkrXgnoJ",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","$b","KN\\1&V",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","$b","KN\\1&V",[caseless,
- global])),
-?line <<"A]C">> = iolist_to_binary(re:replace("A]C","$b","jtB&",[caseless])),
-?line <<"A]C">> = iolist_to_binary(re:replace("A]C","$b","jtB&",[caseless,
- global])),
-?line <<"B">> = iolist_to_binary(re:replace("B","$b","&pRb",[caseless])),
-?line <<"B">> = iolist_to_binary(re:replace("B","$b","&pRb",[caseless,
- global])),
-?line <<"lBUQxBtA(BtBeKAEeJq">> = iolist_to_binary(re:replace("A(B","a\\(b","lBUQ\\1xBt&tBeK\\1AEeJq",[caseless])),
-?line <<"lBUQxBtA(BtBeKAEeJq">> = iolist_to_binary(re:replace("A(B","a\\(b","lBUQ\\1xBt&tBeK\\1AEeJq",[caseless,
- global])),
-?line <<"oXCRABKrhGnMTcHtq">> = iolist_to_binary(re:replace("AB","a\\(*b","oXCR&\\1KrhGnMTcHtq",[caseless])),
-?line <<"oXCRABKrhGnMTcHtq">> = iolist_to_binary(re:replace("AB","a\\(*b","oXCR&\\1KrhGnMTcHtq",[caseless,
+ <<"rjABBBCDfICJABBBCDABBBCDEjJ">> = iolist_to_binary(re:replace("ABBBCD","([abc])*d","rj&fICJ&&EjJ",[caseless])),
+ <<"rjABBBCDfICJABBBCDABBBCDEjJ">> = iolist_to_binary(re:replace("ABBBCD","([abc])*d","rj&fICJ&&EjJ",[caseless,
+ global])),
+ <<"xQ">> = iolist_to_binary(re:replace("ABCD","([abc])*bcd","xQ",[caseless])),
+ <<"xQ">> = iolist_to_binary(re:replace("ABCD","([abc])*bcd","xQ",[caseless,
+ global])),
+ <<"AllmaUiAaKG">> = iolist_to_binary(re:replace("E","a|b|c|d|e","AllmaUiAa\\1KG",[caseless])),
+ <<"AllmaUiAaKG">> = iolist_to_binary(re:replace("E","a|b|c|d|e","AllmaUiAa\\1KG",[caseless,
+ global])),
+ <<"QdfE">> = iolist_to_binary(re:replace("EF","(a|b|c|d|e)f","Qdf\\1",[caseless])),
+ <<"QdfE">> = iolist_to_binary(re:replace("EF","(a|b|c|d|e)f","Qdf\\1",[caseless,
+ global])),
+ <<"ABCDEFGTvQSeJABCDEFGWMXdIOTh">> = iolist_to_binary(re:replace("ABCDEFG","abcd*efg","\\1&TvQSeJ&\\1WMXdIO\\1Th",[caseless])),
+ <<"ABCDEFGTvQSeJABCDEFGWMXdIOTh">> = iolist_to_binary(re:replace("ABCDEFG","abcd*efg","\\1&TvQSeJ&\\1WMXdIO\\1Th",[caseless,
+ global])),
+ <<"XlSgABJHbKHRjUuNjOrYABBBZ">> = iolist_to_binary(re:replace("XABYABBBZ","ab*","lSg&JHbKHRjUuNjOr",[caseless])),
+ <<"XlSgABJHbKHRjUuNjOrYlSgABBBJHbKHRjUuNjOrZ">> = iolist_to_binary(re:replace("XABYABBBZ","ab*","lSg&JHbKHRjUuNjOr",[caseless,
global])),
-?line <<"VyDjHkfygiNMHC">> = iolist_to_binary(re:replace("A((B","a\\(*b","Vy\\1DjH\\1kfygi\\1NM\\1H\\1C",[caseless])),
-?line <<"VyDjHkfygiNMHC">> = iolist_to_binary(re:replace("A((B","a\\(*b","Vy\\1DjH\\1kfygi\\1NM\\1H\\1C",[caseless,
- global])),
-?line <<"A">> = iolist_to_binary(re:replace("A","a\\\\b","DhmiARyCBuVi",[caseless,
- notbol])),
-?line <<"A">> = iolist_to_binary(re:replace("A","a\\\\b","DhmiARyCBuVi",[caseless,
- notbol,
- global])),
-?line <<"FArKeEijRRtjoEBC">> = iolist_to_binary(re:replace("ABC","((a))","F\\1rKeEijRRtjoE",[caseless])),
-?line <<"FArKeEijRRtjoEBC">> = iolist_to_binary(re:replace("ABC","((a))","F\\1rKeEijRRtjoE",[caseless,
+ <<"XNjAAesIAgAYABBBZ">> = iolist_to_binary(re:replace("XAYABBBZ","ab*","Nj&&esI&g&",[caseless])),
+ <<"XNjAAesIAgAYNjABBBABBBesIABBBgABBBZ">> = iolist_to_binary(re:replace("XAYABBBZ","ab*","Nj&&esI&g&",[caseless,
+ global])),
+ <<"ABpvCDEayXCDEDCDSCDECDEwh">> = iolist_to_binary(re:replace("ABCDE","(ab|cd)e","pv&ayX&D\\1S&&wh",[caseless])),
+ <<"ABpvCDEayXCDEDCDSCDECDEwh">> = iolist_to_binary(re:replace("ABCDE","(ab|cd)e","pv&ayX&D\\1S&&wh",[caseless,
+ global])),
+ <<"HIJAJ">> = iolist_to_binary(re:replace("HIJ","[abhgefdc]ij","&A\\1J\\1",[caseless])),
+ <<"HIJAJ">> = iolist_to_binary(re:replace("HIJ","[abhgefdc]ij","&A\\1J\\1",[caseless,
global])),
-?line <<"shGABCXUFAQfAABCy">> = iolist_to_binary(re:replace("ABC","(a)b(c)","shG&XUF\\1Qf\\1&y",[caseless])),
-?line <<"shGABCXUFAQfAABCy">> = iolist_to_binary(re:replace("ABC","(a)b(c)","shG&XUF\\1Qf\\1&y",[caseless,
- global])),
-?line <<"AABBABCmqnIoEABCugfABCNVyK">> = iolist_to_binary(re:replace("AABBABC","a+b+c","&m\\1qnIoE&\\1ug\\1f&NVyK",[caseless])),
-?line <<"AABBABCmqnIoEABCugfABCNVyK">> = iolist_to_binary(re:replace("AABBABC","a+b+c","&m\\1qnIoE&\\1ug\\1f&NVyK",[caseless,
- global])),
-?line <<"AABByABCrABC">> = iolist_to_binary(re:replace("AABBABC","a{1,}b{1,}c","y&r\\1&",[caseless])),
-?line <<"AABByABCrABC">> = iolist_to_binary(re:replace("AABBABC","a{1,}b{1,}c","y&r\\1&",[caseless,
+ <<"ABCDE">> = iolist_to_binary(re:replace("ABCDE","^(ab|cd)e","y&gKEPudO&f\\1Vf",[caseless])),
+ <<"ABCDE">> = iolist_to_binary(re:replace("ABCDE","^(ab|cd)e","y&gKEPudO&f\\1Vf",[caseless,
+ global])),
+ <<"ABCDsEFmkoWgwo">> = iolist_to_binary(re:replace("ABCDEF","(abc|)ef","s&mkoWgwo",[caseless])),
+ <<"ABCDsEFmkoWgwo">> = iolist_to_binary(re:replace("ABCDEF","(abc|)ef","s&mkoWgwo",[caseless,
+ global])),
+ <<"AEKBBQPBA">> = iolist_to_binary(re:replace("ABCD","(a|b)c*d","EK\\1\\1QP\\1A",[caseless])),
+ <<"AEKBBQPBA">> = iolist_to_binary(re:replace("ABCD","(a|b)c*d","EK\\1\\1QP\\1A",[caseless,
global])),
-?line <<"tABC">> = iolist_to_binary(re:replace("ABCABC","a.+?c","t",[caseless])),
-?line <<"tt">> = iolist_to_binary(re:replace("ABCABC","a.+?c","t",[caseless,
- global])),
-?line <<"UABC">> = iolist_to_binary(re:replace("ABCABC","a.*?c","\\1U",[caseless])),
-?line <<"UU">> = iolist_to_binary(re:replace("ABCABC","a.*?c","\\1U",[caseless,
- global])),
-?line <<"EfjDOiBAosuABC">> = iolist_to_binary(re:replace("ABCABC","a.{0,5}?c","EfjDOiBAosu",[caseless])),
-?line <<"EfjDOiBAosuEfjDOiBAosu">> = iolist_to_binary(re:replace("ABCABC","a.{0,5}?c","EfjDOiBAosu",[caseless,
- global])),
-?line <<"CBBliVcPcv">> = iolist_to_binary(re:replace("AB","(a+|b)*","C\\1\\1liVcPcv",[caseless])),
-?line <<"CBBliVcPcvCliVcPcv">> = iolist_to_binary(re:replace("AB","(a+|b)*","C\\1\\1liVcPcv",[caseless,
- global])),
-?line <<"fSc">> = iolist_to_binary(re:replace("AB","(a+|b){0,}","fSc",[caseless])),
-?line <<"fScfSc">> = iolist_to_binary(re:replace("AB","(a+|b){0,}","fSc",[caseless,
- global])),
-?line <<"sABpDnVVBAB">> = iolist_to_binary(re:replace("AB","(a+|b)+","s&pDnVV\\1&",[caseless])),
-?line <<"sABpDnVVBAB">> = iolist_to_binary(re:replace("AB","(a+|b)+","s&pDnVV\\1&",[caseless,
- global])),
-?line <<"bnGKKf">> = iolist_to_binary(re:replace("AB","(a+|b){1,}","bnGKKf",[caseless])),
-?line <<"bnGKKf">> = iolist_to_binary(re:replace("AB","(a+|b){1,}","bnGKKf",[caseless,
- global])),
-?line <<"LpFAjhAtClIGSIAdYAB">> = iolist_to_binary(re:replace("AB","(a+|b)?","LpF&jhAtClIGSI\\1dY\\1",[caseless])),
-?line <<"LpFAjhAtClIGSIAdYALpFBjhAtClIGSIBdYBLpFjhAtClIGSIdY">> = iolist_to_binary(re:replace("AB","(a+|b)?","LpF&jhAtClIGSI\\1dY\\1",[caseless,
- global])),
-?line <<"qbB">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}","qb",[caseless])),
-?line <<"qbqbqb">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}","qb",[caseless,
- global])),
-?line <<"vLbrTRIJAB">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}?","v&L\\1brTRIJ\\1\\1",[caseless])),
-?line <<"vLbrTRIJvALAbrTRIJAAvLbrTRIJvBLBbrTRIJBBvLbrTRIJ">> = iolist_to_binary(re:replace("AB","(a+|b){0,1}?","v&L\\1brTRIJ\\1\\1",[caseless,
+ <<"NnxIEABC">> = iolist_to_binary(re:replace("ABC","(ab|ab*)bc","NnxIE&",[caseless])),
+ <<"NnxIEABC">> = iolist_to_binary(re:replace("ABC","(ab|ab*)bc","NnxIE&",[caseless,
+ global])),
+ <<"owDpyYBCHVgp">> = iolist_to_binary(re:replace("ABC","a([bc]*)c*","owDpyY\\1HVgp",[caseless])),
+ <<"owDpyYBCHVgp">> = iolist_to_binary(re:replace("ABC","a([bc]*)c*","owDpyY\\1HVgp",[caseless,
+ global])),
+ <<"ABCDABCDaSWTqABCDBCABCDKOABCD">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c*d)","&&aSWTq&\\1&KO&",[caseless])),
+ <<"ABCDABCDaSWTqABCDBCABCDKOABCD">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c*d)","&&aSWTq&\\1&KO&",[caseless,
global])),
-?line <<"HtbhHKCDEwOT">> = iolist_to_binary(re:replace("CDE","[^ab]*","Ht\\1\\1bhHK&wOT",[caseless])),
-?line <<"HtbhHKCDEwOTHtbhHKwOT">> = iolist_to_binary(re:replace("CDE","[^ab]*","Ht\\1\\1bhHK&wOT",[caseless,
+ ok.
+run24() ->
+ <<"llhYIK">> = iolist_to_binary(re:replace("ABCD","a([bc]+)(c*d)","llhYIK",[caseless])),
+ <<"llhYIK">> = iolist_to_binary(re:replace("ABCD","a([bc]+)(c*d)","llhYIK",[caseless,
+ global])),
+ <<"qBhyABCDRsUdeBABCDcnABCDJOj">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c+d)","q\\1hy&RsUde\\1&cn&JOj",[caseless])),
+ <<"qBhyABCDRsUdeBABCDcnABCDJOj">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c+d)","q\\1hy&RsUde\\1&cn&JOj",[caseless,
+ global])),
+ <<"sXpCRWnaew">> = iolist_to_binary(re:replace("ADCDCDE","a[bcd]*dcdcde","sXpCRWnae\\1w",[caseless])),
+ <<"sXpCRWnaew">> = iolist_to_binary(re:replace("ADCDCDE","a[bcd]*dcdcde","sXpCRWnae\\1w",[caseless,
+ global])),
+ <<"PKABCMuYNABCABCXtIsm">> = iolist_to_binary(re:replace("ABC","(ab|a)b*c","PK&MuYN&&XtIsm",[caseless])),
+ <<"PKABCMuYNABCABCXtIsm">> = iolist_to_binary(re:replace("ABC","(ab|a)b*c","PK&MuYN&&XtIsm",[caseless,
global])),
-?line <<"vOowROtABBBCD">> = iolist_to_binary(re:replace("ABBBCD","([abc])*d","vOowROt&",[caseless])),
-?line <<"vOowROtABBBCD">> = iolist_to_binary(re:replace("ABBBCD","([abc])*d","vOowROt&",[caseless,
- global])),
-?line <<"TBIuDTLoAqOaABCDMcvVABCDPm">> = iolist_to_binary(re:replace("ABCD","([abc])*bcd","TBIuDTLo\\1qOa&McvV&Pm",[caseless])),
-?line <<"TBIuDTLoAqOaABCDMcvVABCDPm">> = iolist_to_binary(re:replace("ABCD","([abc])*bcd","TBIuDTLo\\1qOa&McvV&Pm",[caseless,
- global])),
-?line <<"EUpqELAv">> = iolist_to_binary(re:replace("E","a|b|c|d|e","&Upq&LAv",[caseless])),
-?line <<"EUpqELAv">> = iolist_to_binary(re:replace("E","a|b|c|d|e","&Upq&LAv",[caseless,
+ <<"pMOU">> = iolist_to_binary(re:replace("ABCD","((a)(b)c)(d)","pMOU",[caseless])),
+ <<"pMOU">> = iolist_to_binary(re:replace("ABCD","((a)(b)c)(d)","pMOU",[caseless,
global])),
-?line <<"oViRJMyEkEPtcEFEM">> = iolist_to_binary(re:replace("EF","(a|b|c|d|e)f","oViRJMy\\1k\\1Ptc&\\1M",[caseless])),
-?line <<"oViRJMyEkEPtcEFEM">> = iolist_to_binary(re:replace("EF","(a|b|c|d|e)f","oViRJMy\\1k\\1Ptc&\\1M",[caseless,
- global])),
-?line <<"ABCDEFGeumABCDEFGxRcjHuSABCDEFGOABCDEFG">> = iolist_to_binary(re:replace("ABCDEFG","abcd*efg","&eum&xRcjHuS&O&",[caseless])),
-?line <<"ABCDEFGeumABCDEFGxRcjHuSABCDEFGOABCDEFG">> = iolist_to_binary(re:replace("ABCDEFG","abcd*efg","&eum&xRcjHuS&O&",[caseless,
- global])),
-?line <<"XOvpxKbYuFMwABVhYABBBZ">> = iolist_to_binary(re:replace("XABYABBBZ","ab*","OvpxKbYuFMw&Vh",[caseless])),
-?line <<"XOvpxKbYuFMwABVhYOvpxKbYuFMwABBBVhZ">> = iolist_to_binary(re:replace("XABYABBBZ","ab*","OvpxKbYuFMw&Vh",[caseless,
- global])),
-?line <<"XXbAAHhcmmXVwkYABBBZ">> = iolist_to_binary(re:replace("XAYABBBZ","ab*","Xb&&Hhcmm\\1XVwk",[caseless])),
-?line <<"XXbAAHhcmmXVwkYXbABBBABBBHhcmmXVwkZ">> = iolist_to_binary(re:replace("XAYABBBZ","ab*","Xb&&Hhcmm\\1XVwk",[caseless,
- global])),
-?line <<"ABPWMPmhUsCDEo">> = iolist_to_binary(re:replace("ABCDE","(ab|cd)e","PWMPmhUs&o",[caseless])),
-?line <<"ABPWMPmhUsCDEo">> = iolist_to_binary(re:replace("ABCDE","(ab|cd)e","PWMPmhUs&o",[caseless,
- global])),
-?line <<"jHIJ">> = iolist_to_binary(re:replace("HIJ","[abhgefdc]ij","j&",[caseless])),
-?line <<"jHIJ">> = iolist_to_binary(re:replace("HIJ","[abhgefdc]ij","j&",[caseless,
- global])),
-?line <<"ABCDE">> = iolist_to_binary(re:replace("ABCDE","^(ab|cd)e","Dc&hlOsc\\1EL\\1Vl",[caseless])),
-?line <<"ABCDE">> = iolist_to_binary(re:replace("ABCDE","^(ab|cd)e","Dc&hlOsc\\1EL\\1Vl",[caseless,
- global])),
-?line <<"ABCDBRPmLBtJGwEFEF">> = iolist_to_binary(re:replace("ABCDEF","(abc|)ef","\\1BRPmLBtJGw\\1&&",[caseless])),
-?line <<"ABCDBRPmLBtJGwEFEF">> = iolist_to_binary(re:replace("ABCDEF","(abc|)ef","\\1BRPmLBtJGw\\1&&",[caseless,
- global])),
-?line <<"ABdnvuIvc">> = iolist_to_binary(re:replace("ABCD","(a|b)c*d","\\1dnvuIvc",[caseless])),
-?line <<"ABdnvuIvc">> = iolist_to_binary(re:replace("ABCD","(a|b)c*d","\\1dnvuIvc",[caseless,
- global])),
-?line <<"ACKWkV">> = iolist_to_binary(re:replace("ABC","(ab|ab*)bc","ACKWkV",[caseless])),
-?line <<"ACKWkV">> = iolist_to_binary(re:replace("ABC","(ab|ab*)bc","ACKWkV",[caseless,
- global])),
-?line <<"LepuBCXf">> = iolist_to_binary(re:replace("ABC","a([bc]*)c*","Lepu\\1Xf",[caseless])),
-?line <<"LepuBCXf">> = iolist_to_binary(re:replace("ABC","a([bc]*)c*","Lepu\\1Xf",[caseless,
- global])),
-?line <<"NDABCDxHBMEtfBGtV">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c*d)","ND&xHBMEtfBGtV",[caseless])),
-?line <<"NDABCDxHBMEtfBGtV">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c*d)","ND&xHBMEtfBGtV",[caseless,
- global])),
-?line <<"eIDCKdi">> = iolist_to_binary(re:replace("ABCD","a([bc]+)(c*d)","eIDCKdi",[caseless])),
-?line <<"eIDCKdi">> = iolist_to_binary(re:replace("ABCD","a([bc]+)(c*d)","eIDCKdi",[caseless,
- global])),
-?line <<"fKBQepABCDABCDhHYaRKHjS">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c+d)","fK\\1Qep&&hHYaRKHjS",[caseless])),
-?line <<"fKBQepABCDABCDhHYaRKHjS">> = iolist_to_binary(re:replace("ABCD","a([bc]*)(c+d)","fK\\1Qep&&hHYaRKHjS",[caseless,
+ <<"bnFWpQALPHAjXlptg">> = iolist_to_binary(re:replace("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*","bnFW\\1pQ&jXl\\1ptg\\1",[caseless])),
+ <<"bnFWpQALPHAjXlptg">> = iolist_to_binary(re:replace("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*","bnFW\\1pQ&jXl\\1ptg\\1",[caseless,
+ global])),
+ <<"ARTSHBHAfemfBHJIBHBHBH">> = iolist_to_binary(re:replace("ABH","^a(bc+|b[eh])g|.h$","RT\\1SH&Afemf&JI&&&",[caseless])),
+ <<"ARTSHBHAfemfBHJIBHBHBH">> = iolist_to_binary(re:replace("ABH","^a(bc+|b[eh])g|.h$","RT\\1SH&Afemf&JI&&&",[caseless,
+ global])),
+ <<"lEFFGZichPjsHBEFFGZe">> = iolist_to_binary(re:replace("EFFGZ","(bc+d$|ef*g.|h?i(j|k))","l\\1ichPjsHB\\1e",[caseless])),
+ <<"lEFFGZichPjsHBEFFGZe">> = iolist_to_binary(re:replace("EFFGZ","(bc+d$|ef*g.|h?i(j|k))","l\\1ichPjsHB\\1e",[caseless,
+ global])),
+ <<"IJnqeTnhpIJ">> = iolist_to_binary(re:replace("IJ","(bc+d$|ef*g.|h?i(j|k))","&nqeTnhp\\1",[caseless])),
+ <<"IJnqeTnhpIJ">> = iolist_to_binary(re:replace("IJ","(bc+d$|ef*g.|h?i(j|k))","&nqeTnhp\\1",[caseless,
+ global])),
+ <<"RTAEFFGZEFFGZtiL">> = iolist_to_binary(re:replace("REFFGZ","(bc+d$|ef*g.|h?i(j|k))","TA\\1&tiL",[caseless])),
+ <<"RTAEFFGZEFFGZtiL">> = iolist_to_binary(re:replace("REFFGZ","(bc+d$|ef*g.|h?i(j|k))","TA\\1&tiL",[caseless,
global])),
-?line <<"yYx">> = iolist_to_binary(re:replace("ADCDCDE","a[bcd]*dcdcde","yYx",[caseless])),
-?line <<"yYx">> = iolist_to_binary(re:replace("ADCDCDE","a[bcd]*dcdcde","yYx",[caseless,
- global])),
-?line <<"gCGlfM">> = iolist_to_binary(re:replace("ABC","(ab|a)b*c","gCGlfM",[caseless])),
-?line <<"gCGlfM">> = iolist_to_binary(re:replace("ABC","(ab|a)b*c","gCGlfM",[caseless,
- global])),
-?line <<"GJGaABCEwhSGeABC">> = iolist_to_binary(re:replace("ABCD","((a)(b)c)(d)","GJGa\\1EwhSGe\\1",[caseless])),
-?line <<"GJGaABCEwhSGeABC">> = iolist_to_binary(re:replace("ABCD","((a)(b)c)(d)","GJGa\\1EwhSGe\\1",[caseless,
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","QSIQtF",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","QSIQtF",[caseless,
+ global])),
+ <<"ADCDCDE">> = iolist_to_binary(re:replace("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))","hkkg&\\1M",[caseless])),
+ <<"ADCDCDE">> = iolist_to_binary(re:replace("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))","hkkg&\\1M",[caseless,
+ global])),
+ <<"EFFG">> = iolist_to_binary(re:replace("EFFG","(bc+d$|ef*g.|h?i(j|k))","b",[caseless])),
+ <<"EFFG">> = iolist_to_binary(re:replace("EFFG","(bc+d$|ef*g.|h?i(j|k))","b",[caseless,
+ global])),
+ <<"BCDD">> = iolist_to_binary(re:replace("BCDD","(bc+d$|ef*g.|h?i(j|k))","TW&UdGE\\1S&N\\1u&LM",[caseless])),
+ <<"BCDD">> = iolist_to_binary(re:replace("BCDD","(bc+d$|ef*g.|h?i(j|k))","TW&UdGE\\1S&N\\1u&LM",[caseless,
+ global])),
+ <<"APvAegF">> = iolist_to_binary(re:replace("A","((((((((((a))))))))))","\\1Pv\\1egF",[caseless])),
+ <<"APvAegF">> = iolist_to_binary(re:replace("A","((((((((((a))))))))))","\\1Pv\\1egF",[caseless,
global])),
-?line <<"GwdBxNJCuOfALPHADSnt">> = iolist_to_binary(re:replace("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*","GwdBxNJCuOf&DSnt",[caseless])),
-?line <<"GwdBxNJCuOfALPHADSnt">> = iolist_to_binary(re:replace("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*","GwdBxNJCuOf&DSnt",[caseless,
+ <<"vCaAAVsbLoAAcsIToC">> = iolist_to_binary(re:replace("AA","((((((((((a))))))))))\\10","vCa&VsbLo&csIToC",[caseless])),
+ <<"vCaAAVsbLoAAcsIToC">> = iolist_to_binary(re:replace("AA","((((((((((a))))))))))\\10","vCa&VsbLo&csIToC",[caseless,
global])),
-?line <<"AMcmNBHqwYsXdABHJTBH">> = iolist_to_binary(re:replace("ABH","^a(bc+|b[eh])g|.h$","McmN&qwYsX\\1dA&JT&",[caseless])),
-?line <<"AMcmNBHqwYsXdABHJTBH">> = iolist_to_binary(re:replace("ABH","^a(bc+|b[eh])g|.h$","McmN&qwYsX\\1dA&JT&",[caseless,
- global])),
-?line <<"JEFFGZWDujiGKchTEFFGZd">> = iolist_to_binary(re:replace("EFFGZ","(bc+d$|ef*g.|h?i(j|k))","J&WDujiGKchT&d",[caseless])),
-?line <<"JEFFGZWDujiGKchTEFFGZd">> = iolist_to_binary(re:replace("EFFGZ","(bc+d$|ef*g.|h?i(j|k))","J&WDujiGKchT&d",[caseless,
- global])),
-?line <<"JIJIJVbIJOWIJT">> = iolist_to_binary(re:replace("IJ","(bc+d$|ef*g.|h?i(j|k))","J\\1\\1Vb\\1OW\\1T",[caseless])),
-?line <<"JIJIJVbIJOWIJT">> = iolist_to_binary(re:replace("IJ","(bc+d$|ef*g.|h?i(j|k))","J\\1\\1Vb\\1OW\\1T",[caseless,
- global])),
-?line <<"REnKX">> = iolist_to_binary(re:replace("REFFGZ","(bc+d$|ef*g.|h?i(j|k))","EnKX",[caseless])),
-?line <<"REnKX">> = iolist_to_binary(re:replace("REFFGZ","(bc+d$|ef*g.|h?i(j|k))","EnKX",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","&bQK&gYPqvKo\\1Dxq&&&",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(bc+d$|ef*g.|h?i(j|k))","&bQK&gYPqvKo\\1Dxq&&&",[caseless,
- global])),
-?line <<"ADCDCDE">> = iolist_to_binary(re:replace("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))","\\1D&uYGYYB\\1mXY",[caseless])),
-?line <<"ADCDCDE">> = iolist_to_binary(re:replace("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))","\\1D&uYGYYB\\1mXY",[caseless,
- global])),
-?line <<"EFFG">> = iolist_to_binary(re:replace("EFFG","(bc+d$|ef*g.|h?i(j|k))","bqLaCGT&\\1\\1StNeJTj",[caseless])),
-?line <<"EFFG">> = iolist_to_binary(re:replace("EFFG","(bc+d$|ef*g.|h?i(j|k))","bqLaCGT&\\1\\1StNeJTj",[caseless,
- global])),
-?line <<"BCDD">> = iolist_to_binary(re:replace("BCDD","(bc+d$|ef*g.|h?i(j|k))","M\\1v\\1T\\1H&OCM\\1",[caseless])),
-?line <<"BCDD">> = iolist_to_binary(re:replace("BCDD","(bc+d$|ef*g.|h?i(j|k))","M\\1v\\1T\\1H&OCM\\1",[caseless,
- global])),
-?line <<"teSxBAbRcV">> = iolist_to_binary(re:replace("A","((((((((((a))))))))))","teSxB\\1bRcV",[caseless])),
-?line <<"teSxBAbRcV">> = iolist_to_binary(re:replace("A","((((((((((a))))))))))","teSxB\\1bRcV",[caseless,
- global])),
-?line <<"AAAAA">> = iolist_to_binary(re:replace("AA","((((((((((a))))))))))\\10","&&\\1",[caseless])),
-?line <<"AAAAA">> = iolist_to_binary(re:replace("AA","((((((((((a))))))))))\\10","&&\\1",[caseless,
- global])),
-?line <<"AAPBpi">> = iolist_to_binary(re:replace("A","(((((((((a)))))))))","&\\1PBpi",[caseless])),
-?line <<"AAPBpi">> = iolist_to_binary(re:replace("A","(((((((((a)))))))))","&\\1PBpi",[caseless,
- global])),
-?line <<"htagTvaaMIaAkgtdgA">> = iolist_to_binary(re:replace("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))","htagTvaaMIaAkgtdg&",[caseless])),
-?line <<"htagTvaaMIaAkgtdgA">> = iolist_to_binary(re:replace("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))","htagTvaaMIaAkgtdg&",[caseless,
- global])),
-?line <<"iVCeGCCLesCClCCD">> = iolist_to_binary(re:replace("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))","iV&eG\\1CLesC&l&\\1D",[caseless])),
-?line <<"iVCeGCCLesCClCCD">> = iolist_to_binary(re:replace("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))","iV&eG\\1CLesC&l&\\1D",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","hKB&NgvvVpXbuP",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","hKB&NgvvVpXbuP",[caseless,
- global])),
-?line <<"AA">> = iolist_to_binary(re:replace("AA","multiple words of text","V&\\1e&n\\1",[caseless])),
-?line <<"AA">> = iolist_to_binary(re:replace("AA","multiple words of text","V&\\1e&n\\1",[caseless,
- global])),
-?line <<"UH-UH">> = iolist_to_binary(re:replace("UH-UH","multiple words of text","w\\1JcoWUQlAryay\\1",[caseless])),
-?line <<"UH-UH">> = iolist_to_binary(re:replace("UH-UH","multiple words of text","w\\1JcoWUQlAryay\\1",[caseless,
+ <<"ADAqIbKy">> = iolist_to_binary(re:replace("A","(((((((((a)))))))))","\\1D\\1qIbKy",[caseless])),
+ <<"ADAqIbKy">> = iolist_to_binary(re:replace("A","(((((((((a)))))))))","\\1D\\1qIbKy",[caseless,
+ global])),
+ <<"HdAAToxA">> = iolist_to_binary(re:replace("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))","Hd\\1\\1Tox&",[caseless])),
+ <<"HdAAToxA">> = iolist_to_binary(re:replace("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))","Hd\\1\\1Tox&",[caseless,
+ global])),
+ <<"FoLn">> = iolist_to_binary(re:replace("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))","FoLn",[caseless])),
+ <<"FoLn">> = iolist_to_binary(re:replace("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))","FoLn",[caseless,
global])),
-?line <<"Ee, YEAH">> = iolist_to_binary(re:replace("MULTIPLE WORDS, YEAH","multiple words","Ee",[caseless])),
-?line <<"Ee, YEAH">> = iolist_to_binary(re:replace("MULTIPLE WORDS, YEAH","multiple words","Ee",[caseless,
- global])),
-?line <<"uTrQvyABCDEABCDEACeABCDE">> = iolist_to_binary(re:replace("ABCDE","(.*)c(.*)","uTrQvy&&ACe&",[caseless])),
-?line <<"uTrQvyABCDEABCDEACeABCDE">> = iolist_to_binary(re:replace("ABCDE","(.*)c(.*)","uTrQvy&&ACe&",[caseless,
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","eKwT&ytF",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","multiple words of text","eKwT&ytF",[caseless,
+ global])),
+ <<"AA">> = iolist_to_binary(re:replace("AA","multiple words of text","&&naWXBUAJEX&uN\\1eWT&",[caseless])),
+ <<"AA">> = iolist_to_binary(re:replace("AA","multiple words of text","&&naWXBUAJEX&uN\\1eWT&",[caseless,
+ global])),
+ <<"UH-UH">> = iolist_to_binary(re:replace("UH-UH","multiple words of text","AxWlS&OyQU",[caseless])),
+ <<"UH-UH">> = iolist_to_binary(re:replace("UH-UH","multiple words of text","AxWlS&OyQU",[caseless,
+ global])),
+ <<"WkAfGvMULTIPLE WORDSvMULTIPLE WORDS, YEAH">> = iolist_to_binary(re:replace("MULTIPLE WORDS, YEAH","multiple words","WkAfGv&v&\\1",[caseless])),
+ <<"WkAfGvMULTIPLE WORDSvMULTIPLE WORDS, YEAH">> = iolist_to_binary(re:replace("MULTIPLE WORDS, YEAH","multiple words","WkAfGv&v&\\1",[caseless,
+ global])),
+ <<"KN">> = iolist_to_binary(re:replace("ABCDE","(.*)c(.*)","KN",[caseless])),
+ <<"KN">> = iolist_to_binary(re:replace("ABCDE","(.*)c(.*)","KN",[caseless,
+ global])),
+ <<"TMyXAYMUnYaLqLp">> = iolist_to_binary(re:replace("(A, B)","\\((.*), (.*)\\)","TMyX\\1YMUnYaLqLp",[caseless])),
+ <<"TMyXAYMUnYaLqLp">> = iolist_to_binary(re:replace("(A, B)","\\((.*), (.*)\\)","TMyX\\1YMUnYaLqLp",[caseless,
+ global])),
+ <<"trKKABCDSCXABCDotxTyYR">> = iolist_to_binary(re:replace("ABCD","abcd","t\\1rKK&SCX&otxTyY\\1R",[caseless])),
+ <<"trKKABCDSCXABCDotxTyYR">> = iolist_to_binary(re:replace("ABCD","abcd","t\\1rKK&SCX&otxTyY\\1R",[caseless,
+ global])),
+ ok.
+run25() ->
+ <<"DMHBCoABCDlywnlEABCDj">> = iolist_to_binary(re:replace("ABCD","a(bc)d","DMH\\1o&lywnlE&j",[caseless])),
+ <<"DMHBCoABCDlywnlEABCDj">> = iolist_to_binary(re:replace("ABCD","a(bc)d","DMH\\1o&lywnlE&j",[caseless,
+ global])),
+ <<"T">> = iolist_to_binary(re:replace("AC","a[-]?c","T",[caseless])),
+ <<"T">> = iolist_to_binary(re:replace("AC","a[-]?c","T",[caseless,
+ global])),
+ <<"ABCsVoEdFABCABCABCABCpABCyABCABCWmPtsF">> = iolist_to_binary(re:replace("ABCABC","(abc)\\1","\\1sVoEdF&&p\\1y&WmPtsF",[caseless])),
+ <<"ABCsVoEdFABCABCABCABCpABCyABCABCWmPtsF">> = iolist_to_binary(re:replace("ABCABC","(abc)\\1","\\1sVoEdF&&p\\1y&WmPtsF",[caseless,
+ global])),
+ <<"KfsABCABCeufABC">> = iolist_to_binary(re:replace("ABCABC","([a-c]*)\\1","Kfs&euf\\1",[caseless])),
+ <<"KfsABCABCeufABCKfseuf">> = iolist_to_binary(re:replace("ABCABC","([a-c]*)\\1","Kfs&euf\\1",[caseless,
global])),
-?line <<"ba(A, B)owqjAHEJ(A, B)qP">> = iolist_to_binary(re:replace("(A, B)","\\((.*), (.*)\\)","ba&owqj\\1HEJ&qP",[caseless])),
-?line <<"ba(A, B)owqjAHEJ(A, B)qP">> = iolist_to_binary(re:replace("(A, B)","\\((.*), (.*)\\)","ba&owqj\\1HEJ&qP",[caseless,
+ <<"abfexgBadad">> = iolist_to_binary(re:replace("abad","a(?!b).","fexg\\1B&&",[])),
+ <<"abfexgBadad">> = iolist_to_binary(re:replace("abad","a(?!b).","fexg\\1B&&",[global])),
+ <<"abArfxtCIjx">> = iolist_to_binary(re:replace("abad","a(?=d).","ArfxtCIjx",[])),
+ <<"abArfxtCIjx">> = iolist_to_binary(re:replace("abad","a(?=d).","ArfxtCIjx",[global])),
+ <<"abQluadxad">> = iolist_to_binary(re:replace("abad","a(?=c|d).","Qlu&x&",[])),
+ <<"abQluadxad">> = iolist_to_binary(re:replace("abad","a(?=c|d).","Qlu&x&",[global])),
+ <<"YMKqcsWCacepOaceeY">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)(.)","YMKqcsWC&pO&\\1Y",[])),
+ <<"YMKqcsWCacepOaceeY">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)(.)","YMKqcsWC&pO&\\1Y",[global])),
+ <<"HHmlgyeRvN">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)*(.)","HHmlgyeRvN",[])),
+ <<"HHmlgyeRvN">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)*(.)","HHmlgyeRvN",[global])),
+ <<"xdTgRuweeyuwdlSacepeacee">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)+?(.)","xdTgRuw\\1\\1yuwdlS&p\\1&\\1",[])),
+ <<"xdTgRuweeyuwdlSacepeacee">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)+?(.)","xdTgRuw\\1\\1yuwdlS&p\\1&\\1",[global])),
+ <<"TYYAdCdfMbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+?(.)","TYYA\\1CdfM",[])),
+ <<"TYYAdCdfMbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+?(.)","TYYA\\1CdfM",[global])),
+ <<"rHwRaCuUc">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+(.)","rHwRaCuUc",[])),
+ <<"rHwRaCuUc">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+(.)","rHwRaCuUc",[global])),
+ <<"acdbWhFfMbSbtdcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){2}(.)","&WhFfM\\1S\\1td",[])),
+ <<"acdbWhFfMbSbtdcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){2}(.)","&WhFfM\\1S\\1td",[global])),
+ <<"bXacdbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}(.)","\\1X&",[])),
+ <<"bXacdbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}(.)","\\1X&",[global])),
+ <<"bCacdbcdobe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}?(.)","bC&o",[])),
+ <<"bCacdbcdobe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}?(.)","bC&o",[global])),
+ <<"barYfoobarsbxTHafoobarIbm">> = iolist_to_binary(re:replace("foobar","((foo)|(bar))*","\\1Y&sbxTHa&Ibm",[])),
+ <<"barYfoobarsbxTHafoobarIbmYsbxTHaIbm">> = iolist_to_binary(re:replace("foobar","((foo)|(bar))*","\\1Y&sbxTHa&Ibm",[global])),
+ <<"eeBieacdbcdbeeIHacdbcdbeNPRhLo">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}(.)","\\1\\1Bi\\1&\\1IH&NPRhLo",[])),
+ <<"eeBieacdbcdbeeIHacdbcdbeNPRhLo">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}(.)","\\1\\1Bi\\1&\\1IH&NPRhLo",[global])),
+ <<"acdbcdbeiacdbcdbevacdbcdbeorW">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}?(.)","&i&v&orW",[])),
+ <<"acdbcdbeiacdbcdbevacdbcdbeorW">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}?(.)","&i&v&orW",[global])),
+ <<"LeePacdbcdbeacdbcdbeCth">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}(.)","L\\1\\1P&&Cth",[])),
+ <<"LeePacdbcdbeacdbcdbeCth">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}(.)","L\\1\\1P&&Cth",[global])),
+ <<"uVacdbcdbWhMacdbcdbNbEue">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}?(.)","uV&WhM&N\\1Eu",[])),
+ <<"uVacdbcdbWhMacdbcdbNbEue">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}?(.)","uV&WhM&N\\1Eu",[global])),
+ <<"acdbcdbeuqWHNeI">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}(.)","&uqWHNeI",[])),
+ <<"acdbcdbeuqWHNeI">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}(.)","&uqWHNeI",[global])),
+ ok.
+run26() ->
+ <<"GacdbcdbbbPbGFTve">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}?(.)","G&\\1\\1P\\1GFTv",[])),
+ <<"GacdbcdbbbPbGFTve">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}?(.)","G&\\1\\1P\\1GFTv",[global])),
+ <<"taceacecgacefBmaHeYaceuace">> = iolist_to_binary(re:replace("ace","a(?:b|(c|e){1,2}?|d)+?(.)","t&&\\1g&fBmaHeY&u&",[])),
+ <<"taceacecgacefBmaHeYaceuace">> = iolist_to_binary(re:replace("ace","a(?:b|(c|e){1,2}?|d)+?(.)","t&&\\1g&fBmaHeY&u&",[global])),
+ <<"FcNioABABQKKAbfVA">> = iolist_to_binary(re:replace("AB","^(.+)?B","FcNio&&QKK\\1bfV\\1",[])),
+ <<"FcNioABABQKKAbfVA">> = iolist_to_binary(re:replace("AB","^(.+)?B","FcNio&&QKK\\1bfV\\1",[global])),
+ <<"QpJsSlDdk">> = iolist_to_binary(re:replace(".","^([^a-z])|(\\^)$","QpJsSlDdk",[])),
+ <<"QpJsSlDdk">> = iolist_to_binary(re:replace(".","^([^a-z])|(\\^)$","QpJsSlDdk",[global])),
+ <<"YtMLJWT<&GSA<&jOUT">> = iolist_to_binary(re:replace("<&OUT","^[<>]&","Y\\1tMLJWT&GSA&j",[])),
+ <<"YtMLJWT<&GSA<&jOUT">> = iolist_to_binary(re:replace("<&OUT","^[<>]&","Y\\1tMLJWT&GSA&j",[global])),
+ <<"RBbN">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","RBbN",[])),
+ <<"RBbN">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","RBbN",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a\\1?){4}$","FHwc\\1\\1biSR",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a\\1?){4}$","FHwc\\1\\1biSR",[global])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","^(a\\1?){4}$","rqMyo&\\1IoOAjaJ\\1vY",[])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","^(a\\1?){4}$","rqMyo&\\1IoOAjaJ\\1vY",[global])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","ebuyIYAaCuRmxbiVR",[])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","ebuyIYAaCuRmxbiVR",[global])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","U&\\1R&jmiM\\1\\1W",[])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","U&\\1R&jmiM\\1\\1W",[global])),
+ <<"SyepNqAqGr">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a(?(1)\\1)){4}$","SyepNqAqGr",[])),
+ <<"SyepNqAqGr">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a(?(1)\\1)){4}$","SyepNqAqGr",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a(?(1)\\1)){4}$","idrNArkV&XUmhWGrp\\1rN",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a(?(1)\\1)){4}$","idrNArkV&XUmhWGrp\\1rN",[global])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a(?(1)\\1)){4}$","dVYMTCeoR",[])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a(?(1)\\1)){4}$","dVYMTCeoR",[global])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a(?(1)\\1)){4}$","wtDhOT\\1Pu\\1xOt&P&&&",[])),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a(?(1)\\1)){4}$","wtDhOT\\1Pu\\1xOt&P&&&",[global])),
+ <<"oUbvLQMfrfVt">> = iolist_to_binary(re:replace("foobar","(?:(f)(o)(o)|(b)(a)(r))*","oUbvLQMfr\\1Vt",[])),
+ <<"oUbvLQMfrfVtoUbvLQMfrVt">> = iolist_to_binary(re:replace("foobar","(?:(f)(o)(o)|(b)(a)(r))*","oUbvLQMfr\\1Vt",[global])),
+ <<"aIbOkhquTbuWHx">> = iolist_to_binary(re:replace("ab","(?<=a)b","I&OkhquT&uWH\\1x",[])),
+ <<"aIbOkhquTbuWHx">> = iolist_to_binary(re:replace("ab","(?<=a)b","I&OkhquT&uWH\\1x",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a)b","BQobLoQagH&I&Gf",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a)b","BQobLoQagH&I&Gf",[global])),
+ <<"cb">> = iolist_to_binary(re:replace("cb","(?<=a)b","\\1qi\\1cF&xVKJl\\1&HHO&TH",[])),
+ <<"cb">> = iolist_to_binary(re:replace("cb","(?<=a)b","\\1qi\\1cF&xVKJl\\1&HHO&TH",[global])),
+ <<"b">> = iolist_to_binary(re:replace("b","(?<=a)b","aRw&xSWDbr\\1wsnnJ&G",[])),
+ <<"b">> = iolist_to_binary(re:replace("b","(?<=a)b","aRw&xSWDbr\\1wsnnJ&G",[global])),
+ <<"albBEJPbhoUqwpHlyll">> = iolist_to_binary(re:replace("ab","(?<!c)b","l&BEJPbhoUqwpHlyll",[])),
+ <<"albBEJPbhoUqwpHlyll">> = iolist_to_binary(re:replace("ab","(?<!c)b","l&BEJPbhoUqwpHlyll",[global])),
+ <<"iNbLxxT">> = iolist_to_binary(re:replace("b","(?<!c)b","iN&LxxT",[])),
+ <<"iNbLxxT">> = iolist_to_binary(re:replace("b","(?<!c)b","iN&LxxT",[global])),
+ <<"byOfPd">> = iolist_to_binary(re:replace("b","(?<!c)b","&yOfPd",[])),
+ <<"byOfPd">> = iolist_to_binary(re:replace("b","(?<!c)b","&yOfPd",[global])),
+ <<"IblabamNFubVS">> = iolist_to_binary(re:replace("aba","(?:..)*a","Ibl&mNFubVS",[])),
+ <<"IblabamNFubVS">> = iolist_to_binary(re:replace("aba","(?:..)*a","Ibl&mNFubVS",[global])),
+ <<"wvNuoyarrAWFba">> = iolist_to_binary(re:replace("aba","(?:..)*?a","wvNuo\\1y&rrAWF",[])),
+ <<"wvNuoyarrAWFbwvNuoyarrAWF">> = iolist_to_binary(re:replace("aba","(?:..)*?a","wvNuo\\1y&rrAWF",[global])),
+ <<"abVmnPSDabPXSc">> = iolist_to_binary(re:replace("abc","^(?:b|a(?=(.)))*\\1","&VmnPSD&PXS",[])),
+ <<"abVmnPSDabPXSc">> = iolist_to_binary(re:replace("abc","^(?:b|a(?=(.)))*\\1","&VmnPSD&PXS",[global])),
+ <<"MNhLuKuRgFcjoiabc">> = iolist_to_binary(re:replace("abc","^(){3,5}","MNhL\\1uK&uRgFcj\\1o&i\\1\\1",[])),
+ <<"MNhLuKuRgFcjoiabc">> = iolist_to_binary(re:replace("abc","^(){3,5}","MNhL\\1uK&uRgFcj\\1o&i\\1\\1",[global])),
+ <<"aax">> = iolist_to_binary(re:replace("aax","^(a+)*ax","&",[])),
+ <<"aax">> = iolist_to_binary(re:replace("aax","^(a+)*ax","&",[global])),
+ <<"aax">> = iolist_to_binary(re:replace("aax","^((a|b)+)*ax","&",[])),
+ <<"aax">> = iolist_to_binary(re:replace("aax","^((a|b)+)*ax","&",[global])),
+ <<"UaaxEVMyUJoaafaaxbXAGlnX">> = iolist_to_binary(re:replace("aax","^((a|bc)+)*ax","U&EVMyUJoa\\1f&bXAGlnX",[])),
+ <<"UaaxEVMyUJoaafaaxbXAGlnX">> = iolist_to_binary(re:replace("aax","^((a|bc)+)*ax","U&EVMyUJoa\\1f&bXAGlnX",[global])),
+ <<"cHRavababj">> = iolist_to_binary(re:replace("cab","(a|x)*ab","HR\\1av&&j",[])),
+ <<"cHRavababj">> = iolist_to_binary(re:replace("cab","(a|x)*ab","HR\\1av&&j",[global])),
+ <<"ceqqArfabLqGjflabab">> = iolist_to_binary(re:replace("cab","(a)*ab","eqqA\\1rf&LqGjfl&&",[])),
+ <<"ceqqArfabLqGjflabab">> = iolist_to_binary(re:replace("cab","(a)*ab","eqqA\\1rf&LqGjfl&&",[global])),
+ <<"aMdQQ">> = iolist_to_binary(re:replace("ab","(?:(?i)a)b","aMdQQ",[])),
+ <<"aMdQQ">> = iolist_to_binary(re:replace("ab","(?:(?i)a)b","aMdQQ",[global])),
+ ok.
+run27() ->
+ <<"qpLuqQJ">> = iolist_to_binary(re:replace("ab","((?i)a)b","qpLuqQJ",[])),
+ <<"qpLuqQJ">> = iolist_to_binary(re:replace("ab","((?i)a)b","qpLuqQJ",[global])),
+ <<"KU">> = iolist_to_binary(re:replace("Ab","(?:(?i)a)b","KU\\1",[])),
+ <<"KU">> = iolist_to_binary(re:replace("Ab","(?:(?i)a)b","KU\\1",[global])),
+ <<"HbAbcmtA">> = iolist_to_binary(re:replace("Ab","((?i)a)b","Hb&cmt\\1",[])),
+ <<"HbAbcmtA">> = iolist_to_binary(re:replace("Ab","((?i)a)b","Hb&cmt\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?i)a)b","\\1&d\\1h",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?i)a)b","\\1&d\\1h",[global])),
+ <<"cb">> = iolist_to_binary(re:replace("cb","(?:(?i)a)b","QGy\\1\\1s",[])),
+ <<"cb">> = iolist_to_binary(re:replace("cb","(?:(?i)a)b","QGy\\1\\1s",[global])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?:(?i)a)b","h&LcJB&\\1koG",[])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?:(?i)a)b","h&LcJB&\\1koG",[global])),
+ <<"hQoabBcSA">> = iolist_to_binary(re:replace("ab","(?i:a)b","h\\1Qo&B\\1cSA",[])),
+ <<"hQoabBcSA">> = iolist_to_binary(re:replace("ab","(?i:a)b","h\\1Qo&B\\1cSA",[global])),
+ <<"C">> = iolist_to_binary(re:replace("ab","((?i:a))b","C",[])),
+ <<"C">> = iolist_to_binary(re:replace("ab","((?i:a))b","C",[global])),
+ <<"GAMAbeosONsSFAblyS">> = iolist_to_binary(re:replace("Ab","(?i:a)b","GAM&eos\\1O\\1Ns\\1SF&lyS",[])),
+ <<"GAMAbeosONsSFAblyS">> = iolist_to_binary(re:replace("Ab","(?i:a)b","GAM&eos\\1O\\1Ns\\1SF&lyS",[global])),
+ <<"AbASQYAbA">> = iolist_to_binary(re:replace("Ab","((?i:a))b","&\\1SQY&\\1",[])),
+ <<"AbASQYAbA">> = iolist_to_binary(re:replace("Ab","((?i:a))b","&\\1SQY&\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i:a)b","EW&tEN\\1\\1&\\1\\1yd",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i:a)b","EW&tEN\\1\\1&\\1\\1yd",[global])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","bK&xdvtcfqVCo",[])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","bK&xdvtcfqVCo",[global])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","rU",[])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","rU",[global])),
+ <<"fabvvabeKvWlUCaababk">> = iolist_to_binary(re:replace("ab","(?:(?-i)a)b","f&vv&eKvWlUC\\1\\1a&\\1&k",[caseless])),
+ <<"fabvvabeKvWlUCaababk">> = iolist_to_binary(re:replace("ab","(?:(?-i)a)b","f&vv&eKvWlUC\\1\\1a&\\1&k",[caseless,
global])),
-?line <<"ABCDRIpLJwyEwDArCpanW">> = iolist_to_binary(re:replace("ABCD","abcd","&RIpLJwyEwDA\\1rCpan\\1W",[caseless])),
-?line <<"ABCDRIpLJwyEwDArCpanW">> = iolist_to_binary(re:replace("ABCD","abcd","&RIpLJwyEwDA\\1rCpan\\1W",[caseless,
- global])),
-?line <<"xykYBC">> = iolist_to_binary(re:replace("ABCD","a(bc)d","xykY\\1",[caseless])),
-?line <<"xykYBC">> = iolist_to_binary(re:replace("ABCD","a(bc)d","xykY\\1",[caseless,
- global])),
-?line <<"UMfPSTJEqdeS">> = iolist_to_binary(re:replace("AC","a[-]?c","U\\1M\\1\\1fPSTJEqdeS",[caseless])),
-?line <<"UMfPSTJEqdeS">> = iolist_to_binary(re:replace("AC","a[-]?c","U\\1M\\1\\1fPSTJEqdeS",[caseless,
- global])),
-?line <<"ITABCABCABCnxfDlABCpYAXQvxABCABCE">> = iolist_to_binary(re:replace("ABCABC","(abc)\\1","IT\\1&nxfDl\\1pYAXQvx\\1\\1E",[caseless])),
-?line <<"ITABCABCABCnxfDlABCpYAXQvxABCABCE">> = iolist_to_binary(re:replace("ABCABC","(abc)\\1","IT\\1&nxfDl\\1pYAXQvx\\1\\1E",[caseless,
- global])),
-?line <<"JXRRQqcKbpvOgISABCT">> = iolist_to_binary(re:replace("ABCABC","([a-c]*)\\1","JXRRQqcKbpvOgIS\\1T",[caseless])),
-?line <<"JXRRQqcKbpvOgISABCTJXRRQqcKbpvOgIST">> = iolist_to_binary(re:replace("ABCABC","([a-c]*)\\1","JXRRQqcKbpvOgIS\\1T",[caseless,
- global])),
-?line <<"abxuiiVt">> = iolist_to_binary(re:replace("abad","a(?!b).","xuiiVt",[])),
-?line <<"abxuiiVt">> = iolist_to_binary(re:replace("abad","a(?!b).","xuiiVt",[global])),
-?line <<"abMdtNqPOC">> = iolist_to_binary(re:replace("abad","a(?=d).","MdtNqPOC",[])),
-?line <<"abMdtNqPOC">> = iolist_to_binary(re:replace("abad","a(?=d).","MdtNqPOC",[global])),
-?line <<"abmkrHu">> = iolist_to_binary(re:replace("abad","a(?=c|d).","mkrHu",[])),
-?line <<"abmkrHu">> = iolist_to_binary(re:replace("abad","a(?=c|d).","mkrHu",[global])),
-?line <<"JfimtGueeaceUlTKvht">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)(.)","JfimtGu\\1\\1&UlTKvht",[])),
-?line <<"JfimtGueeaceUlTKvht">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)(.)","JfimtGu\\1\\1&UlTKvht",[global])),
-?line <<"IdKeqIicacekGQCace">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)*(.)","IdK\\1qIic&kGQC&",[])),
-?line <<"IdKeqIicacekGQCace">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)*(.)","IdK\\1qIic&kGQC&",[global])),
-?line <<"ovgdwiKdYGGace">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)+?(.)","ovgdwiKdYGG&",[])),
-?line <<"ovgdwiKdYGGace">> = iolist_to_binary(re:replace("ace","a(?:b|c|d)+?(.)","ovgdwiKdYGG&",[global])),
-?line <<"uJgdlOhWXUJpEBdwSbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+?(.)","uJg\\1lOhWXUJpEB\\1wS",[])),
-?line <<"uJgdlOhWXUJpEBdwSbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+?(.)","uJg\\1lOhWXUJpEB\\1wS",[global])),
-?line <<"UMpmieMJkQH">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+(.)","UMpmi\\1MJkQH",[])),
-?line <<"UMpmieMJkQH">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d)+(.)","UMpmi\\1MJkQH",[global])),
-?line <<"pCjGheRqYfSacdbhlDAvcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){2}(.)","pCjGheRqYfS&hlDAv",[])),
-?line <<"pCjGheRqYfSacdbhlDAvcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){2}(.)","pCjGheRqYfS&hlDAv",[global])),
-?line <<"yxwYmacdbcdbbAbacdbcdbbGABe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}(.)","yxwYm&\\1A\\1&bGAB",[])),
-?line <<"yxwYmacdbcdbbAbacdbcdbbGABe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}(.)","yxwYm&\\1A\\1&bGAB",[global])),
-?line <<"dkoReacdbcdhXacdbcdacdbcdcakNJbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}?(.)","\\1koRe&hX&&cakNJ",[])),
-?line <<"dkoReacdbcdhXacdbcdacdbcdcakNJbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){4,5}?(.)","\\1koRe&hX&&cakNJ",[global])),
-?line <<"nVjVDfoobarOjfoobarfoobareL">> = iolist_to_binary(re:replace("foobar","((foo)|(bar))*","nVjVD&Oj&&eL",[])),
-?line <<"nVjVDfoobarOjfoobarfoobareLnVjVDOjeL">> = iolist_to_binary(re:replace("foobar","((foo)|(bar))*","nVjVD&Oj&&eL",[global])),
-?line <<"bJacdbcdbeMVacdbcdbeFAiPYieyEAI">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}(.)","bJ&MV&FAiPYi\\1yEAI",[])),
-?line <<"bJacdbcdbeMVacdbcdbeFAiPYieyEAI">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}(.)","bJ&MV&FAiPYi\\1yEAI",[global])),
-?line <<"cW">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}?(.)","cW",[])),
-?line <<"cW">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){6,7}?(.)","cW",[global])),
-?line <<"EnymbYybacdbcdbeQeCacdbcdbeacdbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}(.)","EnymbYyb&Q\\1C&&",[])),
-?line <<"EnymbYybacdbcdbeQeCacdbcdbeacdbcdbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}(.)","EnymbYyb&Q\\1C&&",[global])),
-?line <<"XCacdbcdbVjuGQacdbcdbBqmsUJe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}?(.)","XC&VjuGQ&BqmsUJ",[])),
-?line <<"XCacdbcdbVjuGQacdbcdbBqmsUJe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,6}?(.)","XC&VjuGQ&BqmsUJ",[global])),
-?line <<"OacdbcdbeCSMacdbcdbensheuoDP">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}(.)","O&CSM&nsh\\1uoDP",[])),
-?line <<"OacdbcdbeCSMacdbcdbensheuoDP">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}(.)","O&CSM&nsh\\1uoDP",[global])),
-?line <<"YReNTbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}?(.)","YReNT\\1",[])),
-?line <<"YReNTbe">> = iolist_to_binary(re:replace("acdbcdbe","a(?:b|c|d){5,7}?(.)","YReNT\\1",[global])),
-?line <<"IJoaceaceHEIicnaaceaceacecq">> = iolist_to_binary(re:replace("ace","a(?:b|(c|e){1,2}?|d)+?(.)","IJo&&HEIi\\1na&&&\\1q",[])),
-?line <<"IJoaceaceHEIicnaaceaceacecq">> = iolist_to_binary(re:replace("ace","a(?:b|(c|e){1,2}?|d)+?(.)","IJo&&HEIi\\1na&&&\\1q",[global])),
-?line <<"PqnTibAldgKNACABm">> = iolist_to_binary(re:replace("AB","^(.+)?B","PqnTib\\1ldgKN\\1C&m",[])),
-?line <<"PqnTibAldgKNACABm">> = iolist_to_binary(re:replace("AB","^(.+)?B","PqnTib\\1ldgKN\\1C&m",[global])),
-?line <<"n.toDyHxNwuj.d.n..l">> = iolist_to_binary(re:replace(".","^([^a-z])|(\\^)$","n\\1toDyHxNwuj\\1d&n\\1\\1l",[])),
-?line <<"n.toDyHxNwuj.d.n..l">> = iolist_to_binary(re:replace(".","^([^a-z])|(\\^)$","n\\1toDyHxNwuj\\1d&n\\1\\1l",[global])),
-?line <<"GOUT">> = iolist_to_binary(re:replace("<&OUT","^[<>]&","G",[])),
-?line <<"GOUT">> = iolist_to_binary(re:replace("<&OUT","^[<>]&","G",[global])),
-?line <<"eQPwy">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","eQPwy",[])),
-?line <<"eQPwy">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a\\1?){4}$","eQPwy",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a\\1?){4}$","fpysabFs",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a\\1?){4}$","fpysabFs",[global])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","^(a\\1?){4}$","iySaXMmSpF\\1wGu&i&",[])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","^(a\\1?){4}$","iySaXMmSpF\\1wGu&i&",[global])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","&E&t",[])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a\\1?){4}$","&E&t",[global])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","rv\\1nEUYoTcup\\1",[])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a\\1?){4}$","rv\\1nEUYoTcup\\1",[global])),
-?line <<"Grouf">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a(?(1)\\1)){4}$","Grouf",[])),
-?line <<"Grouf">> = iolist_to_binary(re:replace("aaaaaaaaaa","^(a(?(1)\\1)){4}$","Grouf",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a(?(1)\\1)){4}$","xJ\\1D",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a(?(1)\\1)){4}$","xJ\\1D",[global])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a(?(1)\\1)){4}$","w&PQ&n&C",[])),
-?line <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a(?(1)\\1)){4}$","w&PQ&n&C",[global])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a(?(1)\\1)){4}$","fXiC",[])),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaa","^(a(?(1)\\1)){4}$","fXiC",[global])),
-?line <<"fEfoobarodvfoobarmohu">> = iolist_to_binary(re:replace("foobar","(?:(f)(o)(o)|(b)(a)(r))*","\\1E&odv&mohu",[])),
-?line <<"fEfoobarodvfoobarmohuEodvmohu">> = iolist_to_binary(re:replace("foobar","(?:(f)(o)(o)|(b)(a)(r))*","\\1E&odv&mohu",[global])),
-?line <<"aaHgXnnrbsEWfBvCB">> = iolist_to_binary(re:replace("ab","(?<=a)b","aHgXnnr&sEWfBv\\1CB",[])),
-?line <<"aaHgXnnrbsEWfBvCB">> = iolist_to_binary(re:replace("ab","(?<=a)b","aHgXnnr&sEWfBv\\1CB",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a)b","&\\1J\\1qs\\1\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=a)b","&\\1J\\1qs\\1\\1",[global])),
-?line <<"cb">> = iolist_to_binary(re:replace("cb","(?<=a)b","PBhSDEP\\1&fa&&FAQ",[])),
-?line <<"cb">> = iolist_to_binary(re:replace("cb","(?<=a)b","PBhSDEP\\1&fa&&FAQ",[global])),
-?line <<"b">> = iolist_to_binary(re:replace("b","(?<=a)b","VGBLJTb\\1",[])),
-?line <<"b">> = iolist_to_binary(re:replace("b","(?<=a)b","VGBLJTb\\1",[global])),
-?line <<"aAjOnQvFo">> = iolist_to_binary(re:replace("ab","(?<!c)b","Aj\\1OnQvFo",[])),
-?line <<"aAjOnQvFo">> = iolist_to_binary(re:replace("ab","(?<!c)b","Aj\\1OnQvFo",[global])),
-?line <<"EcsuQFCLbrqGgAba">> = iolist_to_binary(re:replace("b","(?<!c)b","EcsuQ\\1FCLbrqGgA&a",[])),
-?line <<"EcsuQFCLbrqGgAba">> = iolist_to_binary(re:replace("b","(?<!c)b","EcsuQ\\1FCLbrqGgA&a",[global])),
-?line <<"OLbRynrb">> = iolist_to_binary(re:replace("b","(?<!c)b","OL&R\\1\\1ynr&\\1",[])),
-?line <<"OLbRynrb">> = iolist_to_binary(re:replace("b","(?<!c)b","OL&R\\1\\1ynr&\\1",[global])),
-?line <<"YnabankVVRQtUI">> = iolist_to_binary(re:replace("aba","(?:..)*a","Yn&nkVVRQtUI",[])),
-?line <<"YnabankVVRQtUI">> = iolist_to_binary(re:replace("aba","(?:..)*a","Yn&nkVVRQtUI",[global])),
-?line <<"dtatllgba">> = iolist_to_binary(re:replace("aba","(?:..)*?a","dt&tllg",[])),
-?line <<"dtatllgbdtatllg">> = iolist_to_binary(re:replace("aba","(?:..)*?a","dt&tllg",[global])),
-?line <<"abKyOHc">> = iolist_to_binary(re:replace("abc","^(?:b|a(?=(.)))*\\1","&KyOH",[])),
-?line <<"abKyOHc">> = iolist_to_binary(re:replace("abc","^(?:b|a(?=(.)))*\\1","&KyOH",[global])),
-?line <<"olabc">> = iolist_to_binary(re:replace("abc","^(){3,5}","ol",[])),
-?line <<"olabc">> = iolist_to_binary(re:replace("abc","^(){3,5}","ol",[global])),
-?line <<"tQmIRuA">> = iolist_to_binary(re:replace("aax","^(a+)*ax","tQmIRuA",[])),
-?line <<"tQmIRuA">> = iolist_to_binary(re:replace("aax","^(a+)*ax","tQmIRuA",[global])),
-?line <<"RaaxLDgyKaII">> = iolist_to_binary(re:replace("aax","^((a|b)+)*ax","R&LDgyK\\1II",[])),
-?line <<"RaaxLDgyKaII">> = iolist_to_binary(re:replace("aax","^((a|b)+)*ax","R&LDgyK\\1II",[global])),
-?line <<"jxJdaCNaaxAUxaofKF">> = iolist_to_binary(re:replace("aax","^((a|bc)+)*ax","jxJd\\1CN&AUx\\1ofKF",[])),
-?line <<"jxJdaCNaaxAUxaofKF">> = iolist_to_binary(re:replace("aax","^((a|bc)+)*ax","jxJd\\1CN&AUx\\1ofKF",[global])),
-?line <<"cxMJiMAGvYS">> = iolist_to_binary(re:replace("cab","(a|x)*ab","xMJiMA\\1G\\1vYS",[])),
-?line <<"cxMJiMAGvYS">> = iolist_to_binary(re:replace("cab","(a|x)*ab","xMJiMA\\1G\\1vYS",[global])),
-?line <<"cwXU">> = iolist_to_binary(re:replace("cab","(a)*ab","wXU\\1",[])),
-?line <<"cwXU">> = iolist_to_binary(re:replace("cab","(a)*ab","wXU\\1",[global])),
-?line <<"y">> = iolist_to_binary(re:replace("ab","(?:(?i)a)b","y",[])),
-?line <<"y">> = iolist_to_binary(re:replace("ab","(?:(?i)a)b","y",[global])),
-?line <<"xNpTab">> = iolist_to_binary(re:replace("ab","((?i)a)b","xNpT&",[])),
-?line <<"xNpTab">> = iolist_to_binary(re:replace("ab","((?i)a)b","xNpT&",[global])),
-?line <<"UUhQk">> = iolist_to_binary(re:replace("Ab","(?:(?i)a)b","UU\\1\\1h\\1Qk",[])),
-?line <<"UUhQk">> = iolist_to_binary(re:replace("Ab","(?:(?i)a)b","UU\\1\\1h\\1Qk",[global])),
-?line <<"To">> = iolist_to_binary(re:replace("Ab","((?i)a)b","To",[])),
-?line <<"To">> = iolist_to_binary(re:replace("Ab","((?i)a)b","To",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?i)a)b","Iog\\1kPwXTNA\\1u",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?i)a)b","Iog\\1kPwXTNA\\1u",[global])),
-?line <<"cb">> = iolist_to_binary(re:replace("cb","(?:(?i)a)b","\\1eeor\\1PcpHdMT&rFUGQX",[])),
-?line <<"cb">> = iolist_to_binary(re:replace("cb","(?:(?i)a)b","\\1eeor\\1PcpHdMT&rFUGQX",[global])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?:(?i)a)b","f&&\\1Fnb&nOyDHT&Trng",[])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?:(?i)a)b","f&&\\1Fnb&nOyDHT&Trng",[global])),
-?line <<"SCyJabaabEDejJdabuabG">> = iolist_to_binary(re:replace("ab","(?i:a)b","SCyJ\\1&a&EDejJd&\\1u\\1&G",[])),
-?line <<"SCyJabaabEDejJdabuabG">> = iolist_to_binary(re:replace("ab","(?i:a)b","SCyJ\\1&a&EDejJd&\\1u\\1&G",[global])),
-?line <<"nabMYvlVqabaabvabp">> = iolist_to_binary(re:replace("ab","((?i:a))b","n&MYvlVq&\\1&v&p",[])),
-?line <<"nabMYvlVqabaabvabp">> = iolist_to_binary(re:replace("ab","((?i:a))b","n&MYvlVq&\\1&v&p",[global])),
-?line <<"hQhGlGrAbAbxEKrc">> = iolist_to_binary(re:replace("Ab","(?i:a)b","hQhGlGr&&xEKrc\\1",[])),
-?line <<"hQhGlGrAbAbxEKrc">> = iolist_to_binary(re:replace("Ab","(?i:a)b","hQhGlGr&&xEKrc\\1",[global])),
-?line <<"fSgsAnoYq">> = iolist_to_binary(re:replace("Ab","((?i:a))b","fSgs\\1noYq",[])),
-?line <<"fSgsAnoYq">> = iolist_to_binary(re:replace("Ab","((?i:a))b","fSgs\\1noYq",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i:a)b","Lsa",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i:a)b","Lsa",[global])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","&MKfO&mRWgP&yU",[])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","&MKfO&mRWgP&yU",[global])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","S",[])),
-?line <<"aB">> = iolist_to_binary(re:replace("aB","(?i:a)b","S",[global])),
-?line <<"QTabISRDlbwogmSuiJ">> = iolist_to_binary(re:replace("ab","(?:(?-i)a)b","QT&ISRDlbwogmSuiJ",[caseless])),
-?line <<"QTabISRDlbwogmSuiJ">> = iolist_to_binary(re:replace("ab","(?:(?-i)a)b","QT&ISRDlbwogmSuiJ",[caseless,
- global])),
-?line <<"VabWOeTSwSGwOkyIabf">> = iolist_to_binary(re:replace("ab","((?-i)a)b","V&WOeTSwSGwOkyI&f",[caseless])),
-?line <<"VabWOeTSwSGwOkyIabf">> = iolist_to_binary(re:replace("ab","((?-i)a)b","V&WOeTSwSGwOkyI&f",[caseless,
- global])),
-?line <<"pNtk">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","\\1pNtk",[caseless])),
-?line <<"pNtk">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","\\1pNtk",[caseless,
+ <<"a">> = iolist_to_binary(re:replace("ab","((?-i)a)b","a",[caseless])),
+ <<"a">> = iolist_to_binary(re:replace("ab","((?-i)a)b","a",[caseless,
+ global])),
+ <<"YgwHaBaBEobvWdcKm">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","YgwH&&E\\1o\\1bvWdcKm",[caseless])),
+ <<"YgwHaBaBEobvWdcKm">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","YgwH&&E\\1o\\1bvWdcKm",[caseless,
+ global])),
+ <<"gPQtaBiM">> = iolist_to_binary(re:replace("aB","((?-i)a)b","gPQt\\1BiM",[caseless])),
+ <<"gPQtaBiM">> = iolist_to_binary(re:replace("aB","((?-i)a)b","gPQt\\1BiM",[caseless,
global])),
-?line <<"MpdRBTE">> = iolist_to_binary(re:replace("aB","((?-i)a)b","MpdRBTE",[caseless])),
-?line <<"MpdRBTE">> = iolist_to_binary(re:replace("aB","((?-i)a)b","MpdRBTE",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","RiV",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","RiV",[caseless,
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","dAPB\\1lhgJnXJM\\1",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","dAPB\\1lhgJnXJM\\1",[caseless,
+ global])),
+ <<"cpmMjqeoMjqXPSCxgaB">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","cpmMjqeoMjqXPSC\\1xg&",[caseless])),
+ <<"cpmMjqeoMjqXPSCxgaB">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","cpmMjqeoMjqXPSC\\1xg&",[caseless,
+ global])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","ehCMjHfdoLOUT",[caseless])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","ehCMjHfdoLOUT",[caseless,
global])),
-?line <<"tjEITLaBaBtD">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","t\\1jEITL&&tD",[caseless])),
-?line <<"tjEITLaBaBtD">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","t\\1jEITL&&tD",[caseless,
+ <<"aBaBXheDmRWIj">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","&&XheDmRW\\1Ij",[caseless])),
+ <<"aBaBXheDmRWIj">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","&&XheDmRW\\1Ij",[caseless,
global])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","hbvOWn",[caseless])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","hbvOWn",[caseless,
- global])),
-?line <<"s">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","s",[caseless])),
-?line <<"s">> = iolist_to_binary(re:replace("aB","(?:(?-i)a)b","s",[caseless,
- global])),
-?line <<"yfQaBvLFJJQMhKGx">> = iolist_to_binary(re:replace("aB","((?-i)a)b","yfQ&vLFJJQMhKGx",[caseless])),
-?line <<"yfQaBvLFJJQMhKGx">> = iolist_to_binary(re:replace("aB","((?-i)a)b","yfQ&vLFJJQMhKGx",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","QM&L",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","QM&L",[caseless,
- global])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","aVF\\1dL&\\1",[caseless])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","aVF\\1dL&\\1",[caseless,
- global])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","(?:(?-i)a)b","GSb\\1bvleJ",[caseless])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","(?:(?-i)a)b","GSb\\1bvleJ",[caseless,
- global])),
-?line <<"wAW">> = iolist_to_binary(re:replace("ab","(?-i:a)b","wAW",[caseless])),
-?line <<"wAW">> = iolist_to_binary(re:replace("ab","(?-i:a)b","wAW",[caseless,
- global])),
-?line <<"Atl">> = iolist_to_binary(re:replace("ab","((?-i:a))b","Atl",[caseless])),
-?line <<"Atl">> = iolist_to_binary(re:replace("ab","((?-i:a))b","Atl",[caseless,
+ <<"HaBaBwaBaBarQLsPaLaBH">> = iolist_to_binary(re:replace("aB","((?-i)a)b","H&&w&&\\1rQLsP\\1L&H",[caseless])),
+ <<"HaBaBwaBaBarQLsPaLaBH">> = iolist_to_binary(re:replace("aB","((?-i)a)b","H&&w&&\\1rQLsP\\1L&H",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","rA&&\\1Ox\\1x",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?:(?-i)a)b","rA&&\\1Ox\\1x",[caseless,
+ global])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","qU\\1qgKirHcB",[caseless])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?:(?-i)a)b","qU\\1qgKirHcB",[caseless,
+ global])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","(?:(?-i)a)b","rtc&FUes&I&&V\\1Wi&o",[caseless])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","(?:(?-i)a)b","rtc&FUes&I&&V\\1Wi&o",[caseless,
+ global])),
+ ok.
+run28() ->
+ <<"gGfbP">> = iolist_to_binary(re:replace("ab","(?-i:a)b","\\1gGfbP",[caseless])),
+ <<"gGfbP">> = iolist_to_binary(re:replace("ab","(?-i:a)b","\\1gGfbP",[caseless,
+ global])),
+ <<"oibsT">> = iolist_to_binary(re:replace("ab","((?-i:a))b","oibsT",[caseless])),
+ <<"oibsT">> = iolist_to_binary(re:replace("ab","((?-i:a))b","oibsT",[caseless,
+ global])),
+ <<"erLkRe">> = iolist_to_binary(re:replace("aB","(?-i:a)b","erLkRe",[caseless])),
+ <<"erLkRe">> = iolist_to_binary(re:replace("aB","(?-i:a)b","erLkRe",[caseless,
global])),
-?line <<"gP">> = iolist_to_binary(re:replace("aB","(?-i:a)b","gP\\1",[caseless])),
-?line <<"gP">> = iolist_to_binary(re:replace("aB","(?-i:a)b","gP\\1",[caseless,
+ <<"NcuVaBaPaBqlgVJaaAMaBjt">> = iolist_to_binary(re:replace("aB","((?-i:a))b","NcuV&aP&qlgVJ\\1\\1AM&jt",[caseless])),
+ <<"NcuVaBaPaBqlgVJaaAMaBjt">> = iolist_to_binary(re:replace("aB","((?-i:a))b","NcuV&aP&qlgVJ\\1\\1AM&jt",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","xW",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","xW",[caseless,
+ global])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","rBT\\1&D&jmNXx",[caseless])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","rBT\\1&D&jmNXx",[caseless,
+ global])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","oyAx&&hEq\\1",[caseless])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","oyAx&&hEq\\1",[caseless,
+ global])),
+ <<"shG">> = iolist_to_binary(re:replace("aB","(?-i:a)b","\\1shG",[caseless])),
+ <<"shG">> = iolist_to_binary(re:replace("aB","(?-i:a)b","\\1shG",[caseless,
global])),
-?line <<"LFcaNaJixv">> = iolist_to_binary(re:replace("aB","((?-i:a))b","LFc\\1N\\1Jixv",[caseless])),
-?line <<"LFcaNaJixv">> = iolist_to_binary(re:replace("aB","((?-i:a))b","LFc\\1N\\1Jixv",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","FRPuPJIi\\1",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","FRPuPJIi\\1",[caseless,
- global])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","TYBp\\1aMFRUwXYyGS\\1&tH",[caseless])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","TYBp\\1aMFRUwXYyGS\\1&tH",[caseless,
- global])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","s",[caseless])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","s",[caseless,
- global])),
-?line <<"XBBaBVaBHwVHaBtFl">> = iolist_to_binary(re:replace("aB","(?-i:a)b","XBB\\1&V&H\\1wVH&t\\1Fl",[caseless])),
-?line <<"XBBaBVaBHwVHaBtFl">> = iolist_to_binary(re:replace("aB","(?-i:a)b","XBB\\1&V&H\\1wVH&t\\1Fl",[caseless,
- global])),
-?line <<"TfbKaBvxl">> = iolist_to_binary(re:replace("aB","((?-i:a))b","TfbK&vxl",[caseless])),
-?line <<"TfbKaBvxl">> = iolist_to_binary(re:replace("aB","((?-i:a))b","TfbK&vxl",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","\\1B\\1v&LjNSAy",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","\\1B\\1v&LjNSAy",[caseless,
- global])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","HQTW",[caseless])),
-?line <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","HQTW",[caseless,
- global])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","pG",[caseless])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","pG",[caseless,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?-i:a.))b","U",[caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?-i:a.))b","U",[caseless,
- global])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","((?-i:a.))b","\\1uBjM&tv&\\1tD\\1UO\\1gVY",[caseless])),
-?line <<"AB">> = iolist_to_binary(re:replace("AB","((?-i:a.))b","\\1uBjM&tv&\\1tD\\1UO\\1gVY",[caseless,
- global])),
-?line <<"a
+ <<"OKLO">> = iolist_to_binary(re:replace("aB","((?-i:a))b","OKLO",[caseless])),
+ <<"OKLO">> = iolist_to_binary(re:replace("aB","((?-i:a))b","OKLO",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","DV\\1NmsJ&bJn&F",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?-i:a)b","DV\\1NmsJ&bJn&F",[caseless,
+ global])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","I",[caseless])),
+ <<"Ab">> = iolist_to_binary(re:replace("Ab","(?-i:a)b","I",[caseless,
+ global])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","WVyTncmcNoIfn\\1B",[caseless])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","(?-i:a)b","WVyTncmcNoIfn\\1B",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?-i:a.))b","&UW\\1PRmJQx\\1inQ\\1o&&C",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?-i:a.))b","&UW\\1PRmJQx\\1inQ\\1o&&C",[caseless,
+ global])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","((?-i:a.))b","xFK&bFAyoLB\\1F",[caseless])),
+ <<"AB">> = iolist_to_binary(re:replace("AB","((?-i:a.))b","xFK&bFAyoLB\\1F",[caseless,
+ global])),
+ <<"a
B">> = iolist_to_binary(re:replace("a
-B","((?-i:a.))b","SAx&Io",[caseless])),
-?line <<"a
+B","((?-i:a.))b","\\1E\\1AL\\1QP",[caseless])),
+ <<"a
B">> = iolist_to_binary(re:replace("a
-B","((?-i:a.))b","SAx&Io",[caseless,global])),
-?line <<"LPyepkdfnqsa
-oa
-a
+B","((?-i:a.))b","\\1E\\1AL\\1QP",[caseless,global])),
+ <<"bja
Ba
-M">> = iolist_to_binary(re:replace("a
-B","((?s-i:a.))b","LPyepkdfnqs\\1o\\1&\\1M",[caseless])),
-?line <<"LPyepkdfnqsa
-oa
-a
+wRNOa
+LMvela
+w">> = iolist_to_binary(re:replace("a
+B","((?s-i:a.))b","bj&\\1wRNO\\1LMvel\\1w",[caseless])),
+ <<"bja
Ba
-M">> = iolist_to_binary(re:replace("a
-B","((?s-i:a.))b","LPyepkdfnqs\\1o\\1&\\1M",[caseless,global])),
-?line <<"RG">> = iolist_to_binary(re:replace("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))","RG",[])),
-?line <<"RG">> = iolist_to_binary(re:replace("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))","RG",[global])),
-?line <<"SiMB">> = iolist_to_binary(re:replace("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))","\\1SiMB",[])),
-?line <<"SiMB">> = iolist_to_binary(re:replace("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))","\\1SiMB",[global])),
-?line <<"HNBAb4abYAb4abecqBPfYYBF">> = iolist_to_binary(re:replace("Ab4ab","(ab)\\d\\1","HNB&Y&ecqBPfYYBF",[caseless])),
-?line <<"HNBAb4abYAb4abecqBPfYYBF">> = iolist_to_binary(re:replace("Ab4ab","(ab)\\d\\1","HNB&Y&ecqBPfYYBF",[caseless,
- global])),
-?line <<"eqbVWgJEcab4Ababe">> = iolist_to_binary(re:replace("ab4Ab","(ab)\\d\\1","eqbVWgJEc&\\1e",[caseless])),
-?line <<"eqbVWgJEcab4Ababe">> = iolist_to_binary(re:replace("ab4Ab","(ab)\\d\\1","eqbVWgJEc&\\1e",[caseless,
- global])),
-?line <<"HvsmPfoobar1234bazCYfoobar1234bazqih">> = iolist_to_binary(re:replace("foobar1234baz","foo\\w*\\d{4}baz","HvsmP&CY&qih",[])),
-?line <<"HvsmPfoobar1234bazCYfoobar1234bazqih">> = iolist_to_binary(re:replace("foobar1234baz","foo\\w*\\d{4}baz","HvsmP&CY&qih",[global])),
-?line <<"x~~lsTkD~~qWUPtx~~wj~~R">> = iolist_to_binary(re:replace("x~~","x(~~)*(?:(?:F)?)?","&lsTkD\\1qWUPt&wj\\1R",[])),
-?line <<"x~~lsTkD~~qWUPtx~~wj~~R">> = iolist_to_binary(re:replace("x~~","x(~~)*(?:(?:F)?)?","&lsTkD\\1qWUPt&wj\\1R",[global])),
-?line <<"aaacPnBOLPeN">> = iolist_to_binary(re:replace("aaac","^a(?#xxx){3}c","&P\\1n\\1BOLPeN",[])),
-?line <<"aaacPnBOLPeN">> = iolist_to_binary(re:replace("aaac","^a(?#xxx){3}c","&P\\1n\\1BOLPeN",[global])),
-?line <<"Uh">> = iolist_to_binary(re:replace("aaac","^a (?#xxx) (?#yyy) {3}c","Uh",[extended])),
-?line <<"Uh">> = iolist_to_binary(re:replace("aaac","^a (?#xxx) (?#yyy) {3}c","Uh",[extended,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<![cd])b","\\1CWOLaTxilNg\\1W",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<![cd])b","\\1CWOLaTxilNg\\1W",[global])),
-?line <<"B
+wRNOa
+LMvela
+w">> = iolist_to_binary(re:replace("a
+B","((?s-i:a.))b","bj&\\1wRNO\\1LMvel\\1w",[caseless,global])),
+ <<"oi">> = iolist_to_binary(re:replace("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))","oi",[])),
+ <<"oi">> = iolist_to_binary(re:replace("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))","oi",[global])),
+ <<"LPIaGAjcBB">> = iolist_to_binary(re:replace("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))","LPIaGAjc\\1B\\1B",[])),
+ <<"LPIaGAjcBB">> = iolist_to_binary(re:replace("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))","LPIaGAjc\\1B\\1B",[global])),
+ <<"Ab4abmaeqLAb4abK">> = iolist_to_binary(re:replace("Ab4ab","(ab)\\d\\1","&maeqL&K",[caseless])),
+ <<"Ab4abmaeqLAb4abK">> = iolist_to_binary(re:replace("Ab4ab","(ab)\\d\\1","&maeqL&K",[caseless,
+ global])),
+ <<"AUMabjlQ">> = iolist_to_binary(re:replace("ab4Ab","(ab)\\d\\1","AUM\\1jlQ",[caseless])),
+ <<"AUMabjlQ">> = iolist_to_binary(re:replace("ab4Ab","(ab)\\d\\1","AUM\\1jlQ",[caseless,
+ global])),
+ <<"XmYfoobar1234bazkhCJfoobar1234bazrE">> = iolist_to_binary(re:replace("foobar1234baz","foo\\w*\\d{4}baz","\\1\\1XmY&khCJ&rE",[])),
+ <<"XmYfoobar1234bazkhCJfoobar1234bazrE">> = iolist_to_binary(re:replace("foobar1234baz","foo\\w*\\d{4}baz","\\1\\1XmY&khCJ&rE",[global])),
+ <<"j">> = iolist_to_binary(re:replace("x~~","x(~~)*(?:(?:F)?)?","j",[])),
+ <<"j">> = iolist_to_binary(re:replace("x~~","x(~~)*(?:(?:F)?)?","j",[global])),
+ <<"dvmR">> = iolist_to_binary(re:replace("aaac","^a(?#xxx){3}c","dvmR",[])),
+ <<"dvmR">> = iolist_to_binary(re:replace("aaac","^a(?#xxx){3}c","dvmR",[global])),
+ <<"TcvCihggCC">> = iolist_to_binary(re:replace("aaac","^a (?#xxx) (?#yyy) {3}c","TcvCihggCC\\1",[extended])),
+ <<"TcvCihggCC">> = iolist_to_binary(re:replace("aaac","^a (?#xxx) (?#yyy) {3}c","TcvCihggCC\\1",[extended,
+ global])),
+ ok.
+run29() ->
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<![cd])b","aDLvRLT\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<![cd])b","aDLvRLT\\1",[global])),
+ <<"B
B">> = iolist_to_binary(re:replace("B
-B","(?<![cd])b","ruaT\\1JrTa&\\1sLB&iVNCc",[])),
-?line <<"B
+B","(?<![cd])b","&rX",[])),
+ <<"B
B">> = iolist_to_binary(re:replace("B
-B","(?<![cd])b","ruaT\\1JrTa&\\1sLB&iVNCc",[global])),
-?line <<"dbcb">> = iolist_to_binary(re:replace("dbcb","(?<![cd])b","\\1l\\1yKVtpLoPXXvCkO",[])),
-?line <<"dbcb">> = iolist_to_binary(re:replace("dbcb","(?<![cd])b","\\1l\\1yKVtpLoPXXvCkO",[global])),
-?line <<"dbuWHWJTppUTaMYMjwHAacb">> = iolist_to_binary(re:replace("dbaacb","(?<![cd])[ab]","uWHWJTppUT&\\1MYM\\1jwHA",[])),
-?line <<"dbuWHWJTppUTaMYMjwHAuWHWJTppUTaMYMjwHAcb">> = iolist_to_binary(re:replace("dbaacb","(?<![cd])[ab]","uWHWJTppUT&\\1MYM\\1jwHA",[global])),
-?line <<"dbeacb">> = iolist_to_binary(re:replace("dbaacb","(?<!(c|d))[ab]","e",[])),
-?line <<"dbeecb">> = iolist_to_binary(re:replace("dbaacb","(?<!(c|d))[ab]","e",[global])),
-?line <<"cdaccbtNFbjDlrMmYMBg">> = iolist_to_binary(re:replace("cdaccb","(?<!cd)[ab]","\\1\\1btNF&jDlrM\\1mYMBg",[])),
-?line <<"cdaccbtNFbjDlrMmYMBg">> = iolist_to_binary(re:replace("cdaccb","(?<!cd)[ab]","\\1\\1btNF&jDlrM\\1mYMBg",[global])),
-?line <<"s">> = iolist_to_binary(re:replace("","^(?:a?b?)*$","s",[])),
-?line <<"s">> = iolist_to_binary(re:replace("","^(?:a?b?)*$","s",[global])),
-?line <<"odRhXAvKP">> = iolist_to_binary(re:replace("a","^(?:a?b?)*$","odRhXAvKP",[])),
-?line <<"odRhXAvKP">> = iolist_to_binary(re:replace("a","^(?:a?b?)*$","odRhXAvKP",[global])),
-?line <<"o">> = iolist_to_binary(re:replace("ab","^(?:a?b?)*$","\\1o",[])),
-?line <<"o">> = iolist_to_binary(re:replace("ab","^(?:a?b?)*$","\\1o",[global])),
-?line <<"d">> = iolist_to_binary(re:replace("aaa","^(?:a?b?)*$","d",[])),
-?line <<"d">> = iolist_to_binary(re:replace("aaa","^(?:a?b?)*$","d",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?:a?b?)*$","fX&M\\1FCCOYOMH\\1lR&ISP",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?:a?b?)*$","fX&M\\1FCCOYOMH\\1lR&ISP",[global])),
-?line <<"dbcb">> = iolist_to_binary(re:replace("dbcb","^(?:a?b?)*$","d\\1aeAWVouRdylpC",[])),
-?line <<"dbcb">> = iolist_to_binary(re:replace("dbcb","^(?:a?b?)*$","d\\1aeAWVouRdylpC",[global])),
-?line <<"a--">> = iolist_to_binary(re:replace("a--","^(?:a?b?)*$","uM",[])),
-?line <<"a--">> = iolist_to_binary(re:replace("a--","^(?:a?b?)*$","uM",[global])),
-?line <<"aa--">> = iolist_to_binary(re:replace("aa--","^(?:a?b?)*$","EhSvb&jryIv\\1O&oeR",[])),
-?line <<"aa--">> = iolist_to_binary(re:replace("aa--","^(?:a?b?)*$","EhSvb&jryIv\\1O&oeR",[global])),
-?line <<"yobOa
-ba
-ca
-bcItPS
+B","(?<![cd])b","&rX",[global])),
+ <<"dbcb">> = iolist_to_binary(re:replace("dbcb","(?<![cd])b","RAdHe",[])),
+ <<"dbcb">> = iolist_to_binary(re:replace("dbcb","(?<![cd])b","RAdHe",[global])),
+ <<"dbLDvFpkRnyKFiqpapacb">> = iolist_to_binary(re:replace("dbaacb","(?<![cd])[ab]","LDvFpkRnyKFiqpap",[])),
+ <<"dbLDvFpkRnyKFiqpapLDvFpkRnyKFiqpapcb">> = iolist_to_binary(re:replace("dbaacb","(?<![cd])[ab]","LDvFpkRnyKFiqpap",[global])),
+ <<"dbpCgFRSanfBwdBHacb">> = iolist_to_binary(re:replace("dbaacb","(?<!(c|d))[ab]","pCgFRS&\\1nfBwdBH",[])),
+ <<"dbpCgFRSanfBwdBHpCgFRSanfBwdBHcb">> = iolist_to_binary(re:replace("dbaacb","(?<!(c|d))[ab]","pCgFRS&\\1nfBwdBH",[global])),
+ <<"cdaccJYb">> = iolist_to_binary(re:replace("cdaccb","(?<!cd)[ab]","J\\1Yb",[])),
+ <<"cdaccJYb">> = iolist_to_binary(re:replace("cdaccb","(?<!cd)[ab]","J\\1Yb",[global])),
+ <<"QQBKENcxCtDv">> = iolist_to_binary(re:replace("","^(?:a?b?)*$","\\1&QQ\\1BKENcxCtD&v",[])),
+ <<"QQBKENcxCtDv">> = iolist_to_binary(re:replace("","^(?:a?b?)*$","\\1&QQ\\1BKENcxCtD&v",[global])),
+ <<"EUVqGakpKtkaa">> = iolist_to_binary(re:replace("a","^(?:a?b?)*$","EUVqG&kp\\1\\1Ktk&&",[])),
+ <<"EUVqGakpKtkaa">> = iolist_to_binary(re:replace("a","^(?:a?b?)*$","EUVqG&kp\\1\\1Ktk&&",[global])),
+ <<"PJebYabVrwtUnyyi">> = iolist_to_binary(re:replace("ab","^(?:a?b?)*$","PJebY&Vrw\\1tUnyyi",[])),
+ <<"PJebYabVrwtUnyyi">> = iolist_to_binary(re:replace("ab","^(?:a?b?)*$","PJebY&Vrw\\1tUnyyi",[global])),
+ <<"TaaaaJgnBHpNaaaqW">> = iolist_to_binary(re:replace("aaa","^(?:a?b?)*$","Ta&JgnBHpN&qW",[])),
+ <<"TaaaaJgnBHpNaaaqW">> = iolist_to_binary(re:replace("aaa","^(?:a?b?)*$","Ta&JgnBHpN&qW",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?:a?b?)*$","s",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?:a?b?)*$","s",[global])),
+ <<"dbcb">> = iolist_to_binary(re:replace("dbcb","^(?:a?b?)*$","D",[])),
+ <<"dbcb">> = iolist_to_binary(re:replace("dbcb","^(?:a?b?)*$","D",[global])),
+ <<"a--">> = iolist_to_binary(re:replace("a--","^(?:a?b?)*$","xqeccmA\\1PK&\\1j\\1QcQv&",[])),
+ <<"a--">> = iolist_to_binary(re:replace("a--","^(?:a?b?)*$","xqeccmA\\1PK&\\1j\\1QcQv&",[global])),
+ <<"aa--">> = iolist_to_binary(re:replace("aa--","^(?:a?b?)*$","&y&JYUp&omM",[])),
+ <<"aa--">> = iolist_to_binary(re:replace("aa--","^(?:a?b?)*$","&y&JYUp&omM",[global])),
+ <<"suK
c">> = iolist_to_binary(re:replace("a
b
-c","((?s)^a(.))((?m)^b$)","yobO&\\1c&cItPS",[])),
-?line <<"yobOa
-ba
-ca
-bcItPS
+c","((?s)^a(.))((?m)^b$)","suK",[])),
+ <<"suK
c">> = iolist_to_binary(re:replace("a
b
-c","((?s)^a(.))((?m)^b$)","yobO&\\1c&cItPS",[global])),
-?line <<"a
-EBbPgb
+c","((?s)^a(.))((?m)^b$)","suK",[global])),
+ <<"a
+bsbrmbHobdxBbb
c">> = iolist_to_binary(re:replace("a
b
-c","((?m)^b$)","EB\\1Pg\\1",[])),
-?line <<"a
-EBbPgb
+c","((?m)^b$)","\\1s&rm\\1Ho&dxB&\\1",[])),
+ <<"a
+bsbrmbHobdxBbb
c">> = iolist_to_binary(re:replace("a
b
-c","((?m)^b$)","EB\\1Pg\\1",[global])),
-?line <<"a
-AybVFSWPOkP">> = iolist_to_binary(re:replace("a
-b","(?m)^b","Ay\\1&VF\\1SWPOkP\\1",[])),
-?line <<"a
-AybVFSWPOkP">> = iolist_to_binary(re:replace("a
-b","(?m)^b","Ay\\1&VF\\1SWPOkP\\1",[global])),
-?line <<"a
-bbTbKbl">> = iolist_to_binary(re:replace("a
-b","(?m)^(b)","b\\1T&K\\1l",[])),
-?line <<"a
-bbTbKbl">> = iolist_to_binary(re:replace("a
-b","(?m)^(b)","b\\1T&K\\1l",[global])),
-?line <<"a
-bsyUb">> = iolist_to_binary(re:replace("a
-b","((?m)^b)","&syU\\1",[])),
-?line <<"a
-bsyUb">> = iolist_to_binary(re:replace("a
-b","((?m)^b)","&syU\\1",[global])),
-?line <<"abh">> = iolist_to_binary(re:replace("a
-b","\\n((?m)^b)","\\1h",[])),
-?line <<"abh">> = iolist_to_binary(re:replace("a
-b","\\n((?m)^b)","\\1h",[global])),
-?line <<"a
-bEu">> = iolist_to_binary(re:replace("a
+c","((?m)^b$)","\\1s&rm\\1Ho&dxB&\\1",[global])),
+ <<"a
+DbLxnGxIyQMiaCJKYa">> = iolist_to_binary(re:replace("a
+b","(?m)^b","D&LxnGxIyQMiaCJKYa\\1",[])),
+ <<"a
+DbLxnGxIyQMiaCJKYa">> = iolist_to_binary(re:replace("a
+b","(?m)^b","D&LxnGxIyQMiaCJKYa\\1",[global])),
+ <<"a
+TbTgrAWgAV">> = iolist_to_binary(re:replace("a
+b","(?m)^(b)","T\\1TgrAWgAV",[])),
+ <<"a
+TbTgrAWgAV">> = iolist_to_binary(re:replace("a
+b","(?m)^(b)","T\\1TgrAWgAV",[global])),
+ <<"a
+KvbbbEUIbCFmvpdpI">> = iolist_to_binary(re:replace("a
+b","((?m)^b)","Kv\\1&&EUI&CFmvpdpI",[])),
+ <<"a
+KvbbbEUIbCFmvpdpI">> = iolist_to_binary(re:replace("a
+b","((?m)^b)","Kv\\1&&EUI&CFmvpdpI",[global])),
+ <<"amFIqrSY
+bYBDTRTmIb">> = iolist_to_binary(re:replace("a
+b","\\n((?m)^b)","mFIqrSY&YBDTRTmI\\1",[])),
+ <<"amFIqrSY
+bYBDTRTmIb">> = iolist_to_binary(re:replace("a
+b","\\n((?m)^b)","mFIqrSY&YBDTRTmI\\1",[global])),
+ <<"a
+bGyvT
+WAEIfT
+">> = iolist_to_binary(re:replace("a
b
-c","((?s).)c(?!.)","Eu",[])),
-?line <<"a
-bEu">> = iolist_to_binary(re:replace("a
+c","((?s).)c(?!.)","GyvT\\1WAEIfT\\1",[])),
+ <<"a
+bGyvT
+WAEIfT
+">> = iolist_to_binary(re:replace("a
b
-c","((?s).)c(?!.)","Eu",[global])),
-?line <<"a
-bvKqN
-cF
-r
-n">> = iolist_to_binary(re:replace("a
+c","((?s).)c(?!.)","GyvT\\1WAEIfT\\1",[global])),
+ <<"a
+bu
+
+ciY
+ONSatC
+q
+cgqg">> = iolist_to_binary(re:replace("a
b
-c","((?s).)c(?!.)","vKqN&F\\1r\\1n",[])),
-?line <<"a
-bvKqN
-cF
-r
-n">> = iolist_to_binary(re:replace("a
+c","((?s).)c(?!.)","u\\1&iY\\1ONSatC\\1q&gqg",[])),
+ <<"a
+bu
+
+ciY
+ONSatC
+q
+cgqg">> = iolist_to_binary(re:replace("a
b
-c","((?s).)c(?!.)","vKqN&F\\1r\\1n",[global])),
-?line <<"a
-ctWb
-Kb
-cinb
-FvJ">> = iolist_to_binary(re:replace("a
+c","((?s).)c(?!.)","u\\1&iY\\1ONSatC\\1q&gqg",[global])),
+ <<"a
+EaHhNb
+cc">> = iolist_to_binary(re:replace("a
b
-c","((?s)b.)c(?!.)","ctW\\1K&in\\1FvJ",[])),
-?line <<"a
-ctWb
-Kb
-cinb
-FvJ">> = iolist_to_binary(re:replace("a
+c","((?s)b.)c(?!.)","EaHhN&c",[])),
+ <<"a
+EaHhNb
+cc">> = iolist_to_binary(re:replace("a
b
-c","((?s)b.)c(?!.)","ctW\\1K&in\\1FvJ",[global])),
-?line <<"a
-Tb
-cnVEJvb
-Bb
-yG">> = iolist_to_binary(re:replace("a
+c","((?s)b.)c(?!.)","EaHhN&c",[global])),
+ <<"a
+Qyf">> = iolist_to_binary(re:replace("a
b
-c","((?s)b.)c(?!.)","T&nVEJv\\1B\\1yG",[])),
-?line <<"a
-Tb
-cnVEJvb
-Bb
-yG">> = iolist_to_binary(re:replace("a
+c","((?s)b.)c(?!.)","Qyf",[])),
+ <<"a
+Qyf">> = iolist_to_binary(re:replace("a
b
-c","((?s)b.)c(?!.)","T&nVEJv\\1B\\1yG",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","()^b","&\\1",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","()^b","&\\1",[global])),
-?line <<"a
+c","((?s)b.)c(?!.)","Qyf",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","()^b","uPupHDfyOM",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","()^b","uPupHDfyOM",[global])),
+ <<"a
b
c">> = iolist_to_binary(re:replace("a
b
-c","()^b","ikT\\1",[])),
-?line <<"a
+c","()^b","ie",[])),
+ <<"a
b
c">> = iolist_to_binary(re:replace("a
b
-c","()^b","ikT\\1",[global])),
-?line <<"a
+c","()^b","ie",[global])),
+ <<"a
b
c">> = iolist_to_binary(re:replace("a
b
-c","()^b","&i&frU",[])),
-?line <<"a
+c","()^b","XOjtYTE&",[])),
+ <<"a
b
c">> = iolist_to_binary(re:replace("a
b
-c","()^b","&i&frU",[global])),
-?line <<"a
-bDbfDWKbixbSbxsSN
+c","()^b","XOjtYTE&",[global])),
+ <<"a
+up
c">> = iolist_to_binary(re:replace("a
b
-c","((?m)^b)","bD\\1fDWK\\1ix\\1S\\1xsSN",[])),
-?line <<"a
-bDbfDWKbixbSbxsSN
+c","((?m)^b)","up",[])),
+ <<"a
+up
c">> = iolist_to_binary(re:replace("a
b
-c","((?m)^b)","bD\\1fDWK\\1ix\\1S\\1xsSN",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(x)?(?(1)a|b)","s&Rt",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(x)?(?(1)a|b)","s&Rt",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","S\\1EQcXTxxFE",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","S\\1EQcXTxxFE",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","JRHc\\1hvpt&&",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","JRHc\\1hvpt&&",[global])),
-?line <<"bQs">> = iolist_to_binary(re:replace("a","(x)?(?(1)b|a)","bQs",[])),
-?line <<"bQs">> = iolist_to_binary(re:replace("a","(x)?(?(1)b|a)","bQs",[global])),
-?line <<"PQeYprqargqfYkWQsJ">> = iolist_to_binary(re:replace("a","()?(?(1)b|a)","PQeY\\1prq&rgqfYk\\1WQsJ",[])),
-?line <<"PQeYprqargqfYkWQsJ">> = iolist_to_binary(re:replace("a","()?(?(1)b|a)","PQeY\\1prq&rgqfYk\\1WQsJ",[global])),
-?line <<"HafNdwOXAFq">> = iolist_to_binary(re:replace("a","()?(?(1)a|b)","H&\\1f\\1NdwOXA\\1Fq",[])),
-?line <<"HafNdwOXAFq">> = iolist_to_binary(re:replace("a","()?(?(1)a|b)","H&\\1f\\1NdwOXA\\1Fq",[global])),
-?line <<"m">> = iolist_to_binary(re:replace("(blah)","^(\\()?blah(?(1)(\\)))$","m",[])),
-?line <<"m">> = iolist_to_binary(re:replace("(blah)","^(\\()?blah(?(1)(\\)))$","m",[global])),
-?line <<"elEwHf">> = iolist_to_binary(re:replace("blah","^(\\()?blah(?(1)(\\)))$","elEwHf",[])),
-?line <<"elEwHf">> = iolist_to_binary(re:replace("blah","^(\\()?blah(?(1)(\\)))$","elEwHf",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\()?blah(?(1)(\\)))$","IGewW&v&qpGlghCJe\\1Y",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\()?blah(?(1)(\\)))$","IGewW&v&qpGlghCJe\\1Y",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","^(\\()?blah(?(1)(\\)))$","mxf",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","^(\\()?blah(?(1)(\\)))$","mxf",[global])),
-?line <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\()?blah(?(1)(\\)))$","LxtdV",[])),
-?line <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\()?blah(?(1)(\\)))$","LxtdV",[global])),
-?line <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\()?blah(?(1)(\\)))$","Ni\\1CkEtaxcXXYB\\1",[])),
-?line <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\()?blah(?(1)(\\)))$","Ni\\1CkEtaxcXXYB\\1",[global])),
-?line <<"UaAfN(ELb">> = iolist_to_binary(re:replace("(blah)","^(\\(+)?blah(?(1)(\\)))$","UaAfN\\1ELb",[])),
-?line <<"UaAfN(ELb">> = iolist_to_binary(re:replace("(blah)","^(\\(+)?blah(?(1)(\\)))$","UaAfN\\1ELb",[global])),
-?line <<"XrxQosMn">> = iolist_to_binary(re:replace("blah","^(\\(+)?blah(?(1)(\\)))$","Xrx\\1QosMn\\1",[])),
-?line <<"XrxQosMn">> = iolist_to_binary(re:replace("blah","^(\\(+)?blah(?(1)(\\)))$","Xrx\\1QosMn\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\(+)?blah(?(1)(\\)))$","QGGpmf",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\(+)?blah(?(1)(\\)))$","QGGpmf",[global])),
-?line <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\(+)?blah(?(1)(\\)))$","HDFROCUS",[])),
-?line <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\(+)?blah(?(1)(\\)))$","HDFROCUS",[global])),
-?line <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\(+)?blah(?(1)(\\)))$","AVrY",[])),
-?line <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\(+)?blah(?(1)(\\)))$","AVrY",[global])),
-?line <<"HlgBXckVbhp">> = iolist_to_binary(re:replace("a","(?(?!a)b|a)","HlgBXckV\\1bhp",[])),
-?line <<"HlgBXckVbhp">> = iolist_to_binary(re:replace("a","(?(?!a)b|a)","HlgBXckV\\1bhp",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=a)b|a)","&&PIwfc\\1cckXSEYaB",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=a)b|a)","&&PIwfc\\1cckXSEYaB",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","vKjGNVI&ySCYE",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","vKjGNVI&ySCYE",[global])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","lAvpym&eEJad\\1RMs\\1CLu",[])),
-?line <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","lAvpym&eEJad\\1RMs\\1CLu",[global])),
-?line <<"kHAy">> = iolist_to_binary(re:replace("a","(?(?=a)a|b)","kHAy",[])),
-?line <<"kHAy">> = iolist_to_binary(re:replace("a","(?(?=a)a|b)","kHAy",[global])),
-?line <<"amAyaheaaTPJaVdTAyU">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","mAyahe\\1\\1TPJ\\1VdTAyU",[])),
-?line <<"amAyaheaaTPJaVdTAyU">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","mAyahe\\1\\1TPJ\\1VdTAyU",[global])),
-?line <<"pEvYFTwEOhhryoVdG">> = iolist_to_binary(re:replace("one:","(\\w+:)+","pEvYFTwEOhhryoVdG",[])),
-?line <<"pEvYFTwEOhhryoVdG">> = iolist_to_binary(re:replace("one:","(\\w+:)+","pEvYFTwEOhhryoVdG",[global])),
-?line <<"aHho">> = iolist_to_binary(re:replace("a","$(?<=^(a))","Hho",[])),
-?line <<"aHho">> = iolist_to_binary(re:replace("a","$(?<=^(a))","Hho",[global])),
-?line <<"ajuOkagipUraRpaQiaabv">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","juOk\\1gipUr\\1Rp\\1Qi&v",[])),
-?line <<"ajuOkagipUraRpaQiaabv">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","juOk\\1gipUr\\1Rp\\1Qi&v",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?=(a+?))\\1ab","g\\1\\1\\1v",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?=(a+?))\\1ab","g\\1\\1\\1v",[global])),
-?line <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","dj\\1E&",[])),
-?line <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","dj\\1E&",[global])),
-?line <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","\\1UllJHtwTvaUdSmur",[])),
-?line <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","\\1UllJHtwTvaUdSmur",[global])),
-?line <<"juabcdvJAqaNxcabcdrDs">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","ju&vJAqaNxc&rDs\\1",[])),
-?line <<"juabcdvJAqaNxcabcdrDs">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","ju&vJAqaNxc&rDs\\1",[global])),
-?line <<"unOWEMklEbRjSO">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","unOWEMklEbRjSO",[])),
-?line <<"unOWEMklEbRjSO">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","unOWEMklEbRjSO",[global])),
-?line <<"nGqSeaexycfAmCxmxEaexycd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","nGqSe&fAmCxmxE&",[])),
-?line <<"nGqSeaexycfAmCxmxEaexycd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","nGqSe&fAmCxmxE&",[global])),
-?line <<"cwK">> = iolist_to_binary(re:replace("caab","(a*)b+","wK",[])),
-?line <<"cwK">> = iolist_to_binary(re:replace("caab","(a*)b+","wK",[global])),
-?line <<"VKunDTpabcd">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","VKunD\\1Tp&",[])),
-?line <<"VKunDTpabcd">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","VKunD\\1Tp&",[global])),
-?line <<"xy:z:::SXxy:z:::cMHreuKxy:z:::">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","\\1SX\\1cMHreuK\\1",[])),
-?line <<"xy:z:::SXxy:z:::cMHreuKxy:z:::">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","\\1SX\\1cMHreuK\\1",[global])),
-?line <<"*** FhLAjVJbYFailersvFailersQgrO">> = iolist_to_binary(re:replace("*** Failers","([\\w:]+::)?(\\w+)$","FhLAjVJbY&v&QgrO\\1\\1",[])),
-?line <<"*** FhLAjVJbYFailersvFailersQgrO">> = iolist_to_binary(re:replace("*** Failers","([\\w:]+::)?(\\w+)$","FhLAjVJbY&v&QgrO\\1\\1",[global])),
-?line <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","cwV&UpGIKN",[])),
-?line <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","cwV&UpGIKN",[global])),
-?line <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","S",[])),
-?line <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","S",[global])),
-?line <<"Fd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","F",[])),
-?line <<"Fd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","F",[global])),
-?line <<"jBpBHQR">> = iolist_to_binary(re:replace("aaab","(?>a+)b","jBpBHQR",[])),
-?line <<"jBpBHQR">> = iolist_to_binary(re:replace("aaab","(?>a+)b","jBpBHQR",[global])),
-?line <<"a:[J:[:[UyJMIwrPUq:[b]:">> = iolist_to_binary(re:replace("a:[b]:","([[:]+)","\\1J&\\1UyJMIwrPUq\\1",[])),
-?line <<"a:[J:[:[UyJMIwrPUq:[b]:J::UyJMIwrPUq:">> = iolist_to_binary(re:replace("a:[b]:","([[:]+)","\\1J&\\1UyJMIwrPUq\\1",[global])),
-?line <<"asI=[vo=[d=[Y=[nMpb]=">> = iolist_to_binary(re:replace("a=[b]=","([[=]+)","sI\\1vo\\1d\\1Y&nMp",[])),
-?line <<"asI=[vo=[d=[Y=[nMpb]sI=vo=d=Y=nMp">> = iolist_to_binary(re:replace("a=[b]=","([[=]+)","sI\\1vo\\1d\\1Y&nMp",[global])),
-?line <<"aChCrrVW.[ed.[eo.[h.[SYkIb].">> = iolist_to_binary(re:replace("a.[b].","([[.]+)","ChCrrVW\\1ed&eo\\1h\\1SYkI",[])),
-?line <<"aChCrrVW.[ed.[eo.[h.[SYkIb]ChCrrVW.ed.eo.h.SYkI">> = iolist_to_binary(re:replace("a.[b].","([[.]+)","ChCrrVW\\1ed&eo\\1h\\1SYkI",[global])),
-?line <<"BaaabaaabGBaaabJDn">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","B&\\1GB&JDn",[])),
-?line <<"BaaabaaabGBaaabJDn">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","B&\\1GB&JDn",[global])),
-?line <<"kaaabsaaXdPWUBV">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","k&saaXdPWUBV",[])),
-?line <<"kaaabsaaXdPWUBV">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","k&saaXdPWUBV",[global])),
-?line <<"((xpOHCg">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","\\1pOHCg",[])),
-?line <<"((xpOHCg">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","\\1pOHCg",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Z","swCtIfMPh&\\1Yr",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Z","swCtIfMPh&\\1Yr",[global])),
-?line <<"aaab">> = iolist_to_binary(re:replace("aaab","a\\Z","ysA\\1",[])),
-?line <<"aaab">> = iolist_to_binary(re:replace("aaab","a\\Z","ysA\\1",[global])),
-?line <<"a
+c","((?m)^b)","up",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(x)?(?(1)a|b)","Q&VpBvd&HCANVl",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(x)?(?(1)a|b)","Q&VpBvd&HCANVl",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","PJENMvR\\1&\\1nkq\\1j&P&",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","PJENMvR\\1&\\1nkq\\1j&P&",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","hStdV\\1o",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","(x)?(?(1)a|b)","hStdV\\1o",[global])),
+ <<"bpiiYpjmbL">> = iolist_to_binary(re:replace("a","(x)?(?(1)b|a)","bpiiYpjmbL",[])),
+ <<"bpiiYpjmbL">> = iolist_to_binary(re:replace("a","(x)?(?(1)b|a)","bpiiYpjmbL",[global])),
+ <<"ldpcm">> = iolist_to_binary(re:replace("a","()?(?(1)b|a)","ldpc\\1m",[])),
+ <<"ldpcm">> = iolist_to_binary(re:replace("a","()?(?(1)b|a)","ldpc\\1m",[global])),
+ ok.
+run30() ->
+ <<"XVaoQoPYY">> = iolist_to_binary(re:replace("a","()?(?(1)a|b)","\\1X\\1V&oQoPYY",[])),
+ <<"XVaoQoPYY">> = iolist_to_binary(re:replace("a","()?(?(1)a|b)","\\1X\\1V&oQoPYY",[global])),
+ <<"NIfcW(blah)G">> = iolist_to_binary(re:replace("(blah)","^(\\()?blah(?(1)(\\)))$","NIfcW&G",[])),
+ <<"NIfcW(blah)G">> = iolist_to_binary(re:replace("(blah)","^(\\()?blah(?(1)(\\)))$","NIfcW&G",[global])),
+ <<"pnblahSJOoELoLblah">> = iolist_to_binary(re:replace("blah","^(\\()?blah(?(1)(\\)))$","pn&SJOoELoL&",[])),
+ <<"pnblahSJOoELoLblah">> = iolist_to_binary(re:replace("blah","^(\\()?blah(?(1)(\\)))$","pn&SJOoELoL&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\()?blah(?(1)(\\)))$","&qo&jitI",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\()?blah(?(1)(\\)))$","&qo&jitI",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(\\()?blah(?(1)(\\)))$","nvEsX\\1dtIq",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(\\()?blah(?(1)(\\)))$","nvEsX\\1dtIq",[global])),
+ <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\()?blah(?(1)(\\)))$","QkLbrxtPSiEFXY",[])),
+ <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\()?blah(?(1)(\\)))$","QkLbrxtPSiEFXY",[global])),
+ <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\()?blah(?(1)(\\)))$","lAP",[])),
+ <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\()?blah(?(1)(\\)))$","lAP",[global])),
+ <<"(LsJwkbg(bfkt(NulbXR">> = iolist_to_binary(re:replace("(blah)","^(\\(+)?blah(?(1)(\\)))$","\\1LsJwkbg\\1bfkt\\1NulbXR",[])),
+ <<"(LsJwkbg(bfkt(NulbXR">> = iolist_to_binary(re:replace("(blah)","^(\\(+)?blah(?(1)(\\)))$","\\1LsJwkbg\\1bfkt\\1NulbXR",[global])),
+ <<"d">> = iolist_to_binary(re:replace("blah","^(\\(+)?blah(?(1)(\\)))$","\\1d",[])),
+ <<"d">> = iolist_to_binary(re:replace("blah","^(\\(+)?blah(?(1)(\\)))$","\\1d",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\(+)?blah(?(1)(\\)))$","EMgTAXywJ\\1sx",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\(+)?blah(?(1)(\\)))$","EMgTAXywJ\\1sx",[global])),
+ <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\(+)?blah(?(1)(\\)))$","LdpE",[])),
+ <<"blah)">> = iolist_to_binary(re:replace("blah)","^(\\(+)?blah(?(1)(\\)))$","LdpE",[global])),
+ <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\(+)?blah(?(1)(\\)))$","x",[])),
+ <<"(blah">> = iolist_to_binary(re:replace("(blah","^(\\(+)?blah(?(1)(\\)))$","x",[global])),
+ <<"DTG">> = iolist_to_binary(re:replace("a","(?(?!a)b|a)","DT\\1G\\1",[])),
+ <<"DTG">> = iolist_to_binary(re:replace("a","(?(?!a)b|a)","DT\\1G\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=a)b|a)","d\\1lnf&YLYNM",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?(?=a)b|a)","d\\1lnf&YLYNM",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","\\1SGC\\1&hP&OBDNrG",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","\\1SGC\\1&hP&OBDNrG",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","\\1O",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","(?(?=a)b|a)","\\1O",[global])),
+ <<"ToKaPapJTYo">> = iolist_to_binary(re:replace("a","(?(?=a)a|b)","\\1ToKaP&pJTYo",[])),
+ <<"ToKaPapJTYo">> = iolist_to_binary(re:replace("a","(?(?=a)a|b)","\\1ToKaP&pJTYo",[global])),
+ <<"aaYfA">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","\\1YfA",[])),
+ <<"aaYfA">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","\\1YfA",[global])),
+ <<"Oone:LVumwJGPxKone:">> = iolist_to_binary(re:replace("one:","(\\w+:)+","O&LVumwJGPxK\\1",[])),
+ <<"Oone:LVumwJGPxKone:">> = iolist_to_binary(re:replace("one:","(\\w+:)+","O&LVumwJGPxK\\1",[global])),
+ <<"axOGBQtmfLikDGlXSft">> = iolist_to_binary(re:replace("a","$(?<=^(a))","xOGBQtmfLikDGlXSft",[])),
+ <<"axOGBQtmfLikDGlXSft">> = iolist_to_binary(re:replace("a","$(?<=^(a))","xOGBQtmfLikDGlXSft",[global])),
+ <<"auQKtSaabLmmqtekWvRQaWJ">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","uQKtS&LmmqtekWvRQ\\1WJ",[])),
+ <<"auQKtSaabLmmqtekWvRQaWJ">> = iolist_to_binary(re:replace("aaab","(?=(a+?))(\\1ab)","uQKtS&LmmqtekWvRQ\\1WJ",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?=(a+?))\\1ab","&&USoct\\1R",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?=(a+?))\\1ab","&&USoct\\1R",[global])),
+ <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","nNyoTw&TuS\\1oXos",[])),
+ <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","nNyoTw&TuS\\1oXos",[global])),
+ <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","MAutXFUx",[])),
+ <<"aaab">> = iolist_to_binary(re:replace("aaab","^(?=(a+?))\\1ab","MAutXFUx",[global])),
+ <<"cXabcdPLyeVVq">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","c\\1X&\\1PLyeV\\1Vq",[])),
+ <<"cXabcdPLyeVVq">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","c\\1X&\\1PLyeV\\1Vq",[global])),
+ <<"jxy:z:::abcdYDxy:z:::Ixy:z:::abcdA">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","j&YD\\1I&A",[])),
+ <<"jxy:z:::abcdYDxy:z:::Ixy:z:::abcdA">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","j&YD\\1I&A",[global])),
+ <<"IbkqaaexycIVtbd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","Ibkqa&IVtb",[])),
+ <<"IbkqaaexycIVtbd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","Ibkqa&IVtb",[global])),
+ <<"cSLuXFBaavfbUaahyxuWowk">> = iolist_to_binary(re:replace("caab","(a*)b+","SLuXFB\\1vfbU\\1hyxuWowk",[])),
+ <<"cSLuXFBaavfbUaahyxuWowk">> = iolist_to_binary(re:replace("caab","(a*)b+","SLuXFB\\1vfbU\\1hyxuWowk",[global])),
+ <<"n">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","n",[])),
+ <<"n">> = iolist_to_binary(re:replace("abcd","([\\w:]+::)?(\\w+)$","n",[global])),
+ <<"xy:z:::abcdSfCyKxy:z:::abcdxy:z:::rOIxy:z:::qaXJV">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","&SfCyK&\\1rOI\\1qaXJV",[])),
+ <<"xy:z:::abcdSfCyKxy:z:::abcdxy:z:::rOIxy:z:::qaXJV">> = iolist_to_binary(re:replace("xy:z:::abcd","([\\w:]+::)?(\\w+)$","&SfCyK&\\1rOI\\1qaXJV",[global])),
+ <<"*** FDIubo">> = iolist_to_binary(re:replace("*** Failers","([\\w:]+::)?(\\w+)$","FDIubo",[])),
+ <<"*** FDIubo">> = iolist_to_binary(re:replace("*** Failers","([\\w:]+::)?(\\w+)$","FDIubo",[global])),
+ <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","\\1\\1FqKhObWFBLnW",[])),
+ <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","\\1\\1FqKhObWFBLnW",[global])),
+ <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","\\1\\1\\1JSX&vwHeWnyicJH",[])),
+ <<"abcd:">> = iolist_to_binary(re:replace("abcd:","([\\w:]+::)?(\\w+)$","\\1\\1\\1JSX&vwHeWnyicJH",[global])),
+ <<"bsuraexycHejcJAclcd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","bsur&HejcJA\\1l\\1",[])),
+ <<"bsuraexycHejcJAclcd">> = iolist_to_binary(re:replace("aexycd","^[^bcd]*(c+)","bsur&HejcJA\\1l\\1",[global])),
+ ok.
+run31() ->
+ <<"C">> = iolist_to_binary(re:replace("aaab","(?>a+)b","\\1C",[])),
+ <<"C">> = iolist_to_binary(re:replace("aaab","(?>a+)b","\\1C",[global])),
+ <<"aNO:[pGn:[:[Hb]:">> = iolist_to_binary(re:replace("a:[b]:","([[:]+)","NO\\1pGn&\\1H",[])),
+ <<"aNO:[pGn:[:[Hb]NO:pGn::H">> = iolist_to_binary(re:replace("a:[b]:","([[:]+)","NO\\1pGn&\\1H",[global])),
+ <<"aUSAUCBri=[uNyXKFxsgAib]=">> = iolist_to_binary(re:replace("a=[b]=","([[=]+)","USAUCBri&uNyXKFxsgAi",[])),
+ <<"aUSAUCBri=[uNyXKFxsgAib]USAUCBri=uNyXKFxsgAi">> = iolist_to_binary(re:replace("a=[b]=","([[=]+)","USAUCBri&uNyXKFxsgAi",[global])),
+ <<"alNmxCu.[.[iUB.[.[b].">> = iolist_to_binary(re:replace("a.[b].","([[.]+)","lNmxCu&&iUB&\\1",[])),
+ <<"alNmxCu.[.[iUB.[.[b]lNmxCu..iUB..">> = iolist_to_binary(re:replace("a.[b].","([[.]+)","lNmxCu&&iUB&\\1",[global])),
+ <<"gGaaab">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","gG&",[])),
+ <<"gGaaab">> = iolist_to_binary(re:replace("aaab","((?>a+)b)","gG&",[global])),
+ <<"XaaaSaaaFUaaabJnaaabMCaaabedCQAgh">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","X\\1S\\1FU&Jn&MC&edCQAgh",[])),
+ <<"XaaaSaaaFUaaabJnaaabMCaaabedCQAgh">> = iolist_to_binary(re:replace("aaab","(?>(a+))b","X\\1S\\1FU&Jn&MC&edCQAgh",[global])),
+ <<"((nxgvJb">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","n\\1gvJb",[])),
+ <<"((nxgvJb">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+","n\\1gvJb",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Z","dnHcIc\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a\\Z","dnHcIc\\1",[global])),
+ <<"aaab">> = iolist_to_binary(re:replace("aaab","a\\Z","TMH",[])),
+ <<"aaab">> = iolist_to_binary(re:replace("aaab","a\\Z","TMH",[global])),
+ <<"a
b">> = iolist_to_binary(re:replace("a
-b","a\\Z","&ajAlqYVsnk",[])),
-?line <<"a
+b","a\\Z","Dt\\1LIek",[])),
+ <<"a
b">> = iolist_to_binary(re:replace("a
-b","a\\Z","&ajAlqYVsnk",[global])),
-?line <<"a
-lKbbBrmbgrOVeW">> = iolist_to_binary(re:replace("a
-b","b\\Z","l\\1Kb&Brm&gr\\1OVeW",[])),
-?line <<"a
-lKbbBrmbgrOVeW">> = iolist_to_binary(re:replace("a
-b","b\\Z","l\\1Kb&Brm&gr\\1OVeW",[global])),
-?line <<"a
-gnI">> = iolist_to_binary(re:replace("a
-b","b\\Z","g\\1nI",[])),
-?line <<"a
-gnI">> = iolist_to_binary(re:replace("a
-b","b\\Z","g\\1nI",[global])),
-?line <<"a
-bcbdqlbVGu">> = iolist_to_binary(re:replace("a
-b","b\\z","bc&dql&VGu\\1",[])),
-?line <<"a
-bcbdqlbVGu">> = iolist_to_binary(re:replace("a
-b","b\\z","bc&dql&VGu\\1",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","b\\z","e\\1yg",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","b\\z","e\\1yg",[global])),
-?line <<"ad">> = iolist_to_binary(re:replace("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","&d",[])),
-?line <<"ad">> = iolist_to_binary(re:replace("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","&d",[global])),
-?line <<"Aq">> = iolist_to_binary(re:replace("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","Aq",[])),
-?line <<"Aq">> = iolist_to_binary(re:replace("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","Aq",[global])),
-?line <<"ca-ba-bhLfWdPLa-boe">> = iolist_to_binary(re:replace("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","c&&hLfWdPL&oe",[])),
-?line <<"ca-ba-bhLfWdPLa-boe">> = iolist_to_binary(re:replace("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","c&&hLfWdPL&oe",[global])),
-?line <<"0-90-9YeqrpXMpBjK">> = iolist_to_binary(re:replace("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","&\\1&YeqrpXMpBjK",[])),
-?line <<"0-90-9YeqrpXMpBjK">> = iolist_to_binary(re:replace("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","&\\1&YeqrpXMpBjK",[global])),
-?line <<"fa.bPwKXcUgqjJm">> = iolist_to_binary(re:replace("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1f&PwKX\\1cUgqjJm",[])),
-?line <<"fa.bPwKXcUgqjJm">> = iolist_to_binary(re:replace("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1f&PwKX\\1cUgqjJm",[global])),
-?line <<"um5.6.7cFpS">> = iolist_to_binary(re:replace("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","um&cFpS\\1",[])),
-?line <<"um5.6.7cFpS">> = iolist_to_binary(re:replace("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","um&cFpS\\1",[global])),
-?line <<"xqtEI">> = iolist_to_binary(re:replace("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","xqtEI",[])),
-?line <<"xqtEI">> = iolist_to_binary(re:replace("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","xqtEI",[global])),
-?line <<"sga100.b200.300cdqqwa100.b200.300cqSJINVa100.b200.300cOyeI">> = iolist_to_binary(re:replace("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","sg&dqqw&qSJINV&OyeI",[])),
-?line <<"sga100.b200.300cdqqwa100.b200.300cqSJINVa100.b200.300cOyeI">> = iolist_to_binary(re:replace("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","sg&dqqw&qSJINV&OyeI",[global])),
-?line <<"rabe12-ab.1245NInvoPCLW12-ab.1245">> = iolist_to_binary(re:replace("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","rabe&NI\\1nvo\\1PCLW&",[])),
-?line <<"rabe12-ab.1245NInvoPCLW12-ab.1245">> = iolist_to_binary(re:replace("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","rabe&NI\\1nvo\\1PCLW&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","jhvaoUW\\1Wye\\1Qkrj",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","jhvaoUW\\1Wye\\1Qkrj",[global])),
-?line <<"">> = iolist_to_binary(re:replace("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","Q&L\\1qk&QWuvQ\\1o",[])),
-?line <<"">> = iolist_to_binary(re:replace("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","Q&L\\1qk&QWuvQ\\1o",[global])),
-?line <<".a">> = iolist_to_binary(re:replace(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","j&I&\\1&myXAKjyO&Mw",[])),
-?line <<".a">> = iolist_to_binary(re:replace(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","j&I&\\1&myXAKjyO&Mw",[global])),
-?line <<"-a">> = iolist_to_binary(re:replace("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","yyHkNcANJB",[])),
-?line <<"-a">> = iolist_to_binary(re:replace("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","yyHkNcANJB",[global])),
-?line <<"a-">> = iolist_to_binary(re:replace("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","&\\1tGDVOXc&&\\1aF\\1",[])),
-?line <<"a-">> = iolist_to_binary(re:replace("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","&\\1tGDVOXc&&\\1aF\\1",[global])),
-?line <<"a.">> = iolist_to_binary(re:replace("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1\\1PTJg\\1\\1x",[])),
-?line <<"a.">> = iolist_to_binary(re:replace("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1\\1PTJg\\1\\1x",[global])),
-?line <<"a_b">> = iolist_to_binary(re:replace("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","w&",[])),
-?line <<"a_b">> = iolist_to_binary(re:replace("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","w&",[global])),
-?line <<"a.-">> = iolist_to_binary(re:replace("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","EYTDvAw&\\1hAJjtxh",[])),
-?line <<"a.-">> = iolist_to_binary(re:replace("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","EYTDvAw&\\1hAJjtxh",[global])),
-?line <<"a..">> = iolist_to_binary(re:replace("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","v&",[])),
-?line <<"a..">> = iolist_to_binary(re:replace("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","v&",[global])),
-?line <<"ab..bc">> = iolist_to_binary(re:replace("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","xi\\1TmyKwF&sc",[])),
-?line <<"ab..bc">> = iolist_to_binary(re:replace("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","xi\\1TmyKwF&sc",[global])),
-?line <<"the.quick.brown.fox-">> = iolist_to_binary(re:replace("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","qbJylT\\1",[])),
-?line <<"the.quick.brown.fox-">> = iolist_to_binary(re:replace("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","qbJylT\\1",[global])),
-?line <<"the.quick.brown.fox.">> = iolist_to_binary(re:replace("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","P&\\1dGVbFGwNJ",[])),
-?line <<"the.quick.brown.fox.">> = iolist_to_binary(re:replace("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","P&\\1dGVbFGwNJ",[global])),
-?line <<"the.quick.brown.fox_">> = iolist_to_binary(re:replace("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","V&e",[])),
-?line <<"the.quick.brown.fox_">> = iolist_to_binary(re:replace("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","V&e",[global])),
-?line <<"the.quick.brown.fox+">> = iolist_to_binary(re:replace("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1",[])),
-?line <<"the.quick.brown.fox+">> = iolist_to_binary(re:replace("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1",[global])),
-?line <<"alphabetabcdlJabcdabcdabcdWqGabcd">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*)(?<=(abcd|wxyz))","&lJ\\1\\1\\1WqG\\1",[])),
-?line <<"alphabetabcdlJabcdabcdabcdWqGabcdlJabcdabcdabcdWqGabcd">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*)(?<=(abcd|wxyz))","&lJ\\1\\1\\1WqG\\1",[global])),
-?line <<"Q">> = iolist_to_binary(re:replace("endingwxyz","(?>.*)(?<=(abcd|wxyz))","Q",[])),
-?line <<"QQ">> = iolist_to_binary(re:replace("endingwxyz","(?>.*)(?<=(abcd|wxyz))","Q",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>.*)(?<=(abcd|wxyz))","qTAxLBxW",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>.*)(?<=(abcd|wxyz))","qTAxLBxW",[global])),
-?line <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(re:replace("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))","HY\\1",[])),
-?line <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(re:replace("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))","HY\\1",[global])),
-?line <<"KxMJnKmSMrA">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","\\1KxMJnKmSMrA",[])),
-?line <<"KxMJnKmSMrA">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","\\1KxMJnKmSMrA",[global])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","TgCuE\\1Jnjdu",[])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","TgCuE\\1Jnjdu",[global])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword","HJa&S&CWDAtFOINp\\1a",[])),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword","HJa&S&CWDAtFOINp\\1a",[global])),
-?line <<"999GSL">> = iolist_to_binary(re:replace("999foo","(?<=\\d{3}(?!999))foo","GSL",[])),
-?line <<"999GSL">> = iolist_to_binary(re:replace("999foo","(?<=\\d{3}(?!999))foo","GSL",[global])),
-?line <<"123999Lxthrb">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999))foo","Lxthrb",[])),
-?line <<"123999Lxthrb">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999))foo","Lxthrb",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999))foo","K&j&h&\\1&&&nJDCN",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999))foo","K&j&h&\\1&&&nJDCN",[global])),
-?line <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999))foo","Y&X\\1Oe",[])),
-?line <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999))foo","Y&X\\1Oe",[global])),
-?line <<"999lwxfoov">> = iolist_to_binary(re:replace("999foo","(?<=(?!...999)\\d{3})foo","lwx&v",[])),
-?line <<"999lwxfoov">> = iolist_to_binary(re:replace("999foo","(?<=(?!...999)\\d{3})foo","lwx&v",[global])),
-?line <<"123999MgNvfoofooIVfoo">> = iolist_to_binary(re:replace("123999foo","(?<=(?!...999)\\d{3})foo","MgNv\\1&&IV&",[])),
-?line <<"123999MgNvfoofooIVfoo">> = iolist_to_binary(re:replace("123999foo","(?<=(?!...999)\\d{3})foo","MgNv\\1&&IV&",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?!...999)\\d{3})foo","Iv&\\1uOjnSDBEaj",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?!...999)\\d{3})foo","Iv&\\1uOjnSDBEaj",[global])),
-?line <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=(?!...999)\\d{3})foo","sanP",[])),
-?line <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=(?!...999)\\d{3})foo","sanP",[global])),
-?line <<"123abclcAPWfoouwtMfoofDv">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999)...)foo","lcAPW&uwtM&fDv",[])),
-?line <<"123abclcAPWfoouwtMfoofDv">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999)...)foo","lcAPW&uwtM&fDv",[global])),
-?line <<"123456nRFsuNto">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}(?!999)...)foo","nR\\1FsuNto",[])),
-?line <<"123456nRFsuNto">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}(?!999)...)foo","nR\\1FsuNto",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999)...)foo","P&",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999)...)foo","P&",[global])),
-?line <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999)...)foo","BdprjW\\1hk\\1K\\1",[])),
-?line <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999)...)foo","BdprjW\\1hk\\1K\\1",[global])),
-?line <<"123abcCB">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}...)(?<!999)foo","CB",[])),
-?line <<"123abcCB">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}...)(?<!999)foo","CB",[global])),
-?line <<"123456g">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}...)(?<!999)foo","g",[])),
-?line <<"123456g">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}...)(?<!999)foo","g",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}...)(?<!999)foo","\\1R&",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}...)(?<!999)foo","\\1R&",[global])),
-?line <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}...)(?<!999)foo","bh&&&M",[])),
-?line <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}...)(?<!999)foo","bh&&&M",[global])),
-?line <<"E<a href=abcd<a href=abcdTofh xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+b","a\\Z","Dt\\1LIek",[global])),
+ <<"a
+ihO">> = iolist_to_binary(re:replace("a
+b","b\\Z","ihO",[])),
+ <<"a
+ihO">> = iolist_to_binary(re:replace("a
+b","b\\Z","ihO",[global])),
+ <<"a
+xaybR">> = iolist_to_binary(re:replace("a
+b","b\\Z","xaybR",[])),
+ <<"a
+xaybR">> = iolist_to_binary(re:replace("a
+b","b\\Z","xaybR",[global])),
+ <<"a
+b">> = iolist_to_binary(re:replace("a
+b","b\\z","&",[])),
+ <<"a
+b">> = iolist_to_binary(re:replace("a
+b","b\\z","&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","b\\z","L\\1\\1ffT&Q\\1\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","b\\z","L\\1\\1ffT&Q\\1\\1",[global])),
+ <<"lKtonNambJv">> = iolist_to_binary(re:replace("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","lKt\\1onN&mbJ\\1v",[])),
+ <<"lKtonNambJv">> = iolist_to_binary(re:replace("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","lKt\\1onN&mbJ\\1v",[global])),
+ <<"pabcYFSdblfLabcy">> = iolist_to_binary(re:replace("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","p&\\1YFSdbl\\1fL&y",[])),
+ <<"pabcYFSdblfLabcy">> = iolist_to_binary(re:replace("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","p&\\1YFSdbl\\1fL&y",[global])),
+ <<"Ta-bKyCljTYNdT">> = iolist_to_binary(re:replace("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","T&KyCljTYN\\1dT",[])),
+ <<"Ta-bKyCljTYNdT">> = iolist_to_binary(re:replace("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","T&KyCljTYN\\1dT",[global])),
+ <<"RHSJc">> = iolist_to_binary(re:replace("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","RHSJc",[])),
+ <<"RHSJc">> = iolist_to_binary(re:replace("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","RHSJc",[global])),
+ <<"dMwhrVYNNa.ba.bGa.br">> = iolist_to_binary(re:replace("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1dMwhrVYNN&&G&r",[])),
+ <<"dMwhrVYNNa.ba.bGa.br">> = iolist_to_binary(re:replace("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","\\1dMwhrVYNN&&G&r",[global])),
+ <<"kPaiiQUiPl">> = iolist_to_binary(re:replace("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","kPaiiQUiPl\\1",[])),
+ <<"kPaiiQUiPl">> = iolist_to_binary(re:replace("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","kPaiiQUiPl\\1",[global])),
+ <<"wvQrLEJUiDlAr">> = iolist_to_binary(re:replace("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","wvQ\\1rLEJUi\\1DlAr",[])),
+ <<"wvQrLEJUiDlAr">> = iolist_to_binary(re:replace("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","wvQ\\1rLEJUi\\1DlAr",[global])),
+ <<"iHa100.b200.300cGyVda100.b200.300cekCw">> = iolist_to_binary(re:replace("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","iH&GyVd&\\1ekCw",[])),
+ <<"iHa100.b200.300cGyVda100.b200.300cekCw">> = iolist_to_binary(re:replace("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","iH&GyVd&\\1ekCw",[global])),
+ <<"O">> = iolist_to_binary(re:replace("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","O",[])),
+ <<"O">> = iolist_to_binary(re:replace("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","O",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","HUtU\\1hwSyIT&Oh\\1&&y",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","HUtU\\1hwSyIT&Oh\\1&&y",[global])),
+ <<"">> = iolist_to_binary(re:replace("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","hNvuQF&Qs&",[])),
+ <<"">> = iolist_to_binary(re:replace("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","hNvuQF&Qs&",[global])),
+ <<".a">> = iolist_to_binary(re:replace(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","QqXr&DuJWM",[])),
+ <<".a">> = iolist_to_binary(re:replace(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","QqXr&DuJWM",[global])),
+ <<"-a">> = iolist_to_binary(re:replace("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","sk\\1IEt",[])),
+ <<"-a">> = iolist_to_binary(re:replace("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","sk\\1IEt",[global])),
+ <<"a-">> = iolist_to_binary(re:replace("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","q&NPicpE",[])),
+ <<"a-">> = iolist_to_binary(re:replace("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","q&NPicpE",[global])),
+ <<"a.">> = iolist_to_binary(re:replace("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","CQXy",[])),
+ <<"a.">> = iolist_to_binary(re:replace("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","CQXy",[global])),
+ <<"a_b">> = iolist_to_binary(re:replace("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","LYXq",[])),
+ <<"a_b">> = iolist_to_binary(re:replace("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","LYXq",[global])),
+ <<"a.-">> = iolist_to_binary(re:replace("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","MD\\1",[])),
+ <<"a.-">> = iolist_to_binary(re:replace("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","MD\\1",[global])),
+ <<"a..">> = iolist_to_binary(re:replace("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","L",[])),
+ <<"a..">> = iolist_to_binary(re:replace("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","L",[global])),
+ <<"ab..bc">> = iolist_to_binary(re:replace("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","BCKwcl\\1kueBcjj",[])),
+ <<"ab..bc">> = iolist_to_binary(re:replace("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","BCKwcl\\1kueBcjj",[global])),
+ <<"the.quick.brown.fox-">> = iolist_to_binary(re:replace("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","JT&&v&ADCCjyxv",[])),
+ <<"the.quick.brown.fox-">> = iolist_to_binary(re:replace("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","JT&&v&ADCCjyxv",[global])),
+ <<"the.quick.brown.fox.">> = iolist_to_binary(re:replace("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","ss",[])),
+ <<"the.quick.brown.fox.">> = iolist_to_binary(re:replace("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","ss",[global])),
+ <<"the.quick.brown.fox_">> = iolist_to_binary(re:replace("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","oN\\1QUG",[])),
+ <<"the.quick.brown.fox_">> = iolist_to_binary(re:replace("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","oN\\1QUG",[global])),
+ <<"the.quick.brown.fox+">> = iolist_to_binary(re:replace("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","dOn\\1&jl\\1b&",[])),
+ <<"the.quick.brown.fox+">> = iolist_to_binary(re:replace("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$","dOn\\1&jl\\1b&",[global])),
+ <<"fkIx">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*)(?<=(abcd|wxyz))","fkIx",[])),
+ <<"fkIxfkIx">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*)(?<=(abcd|wxyz))","fkIx",[global])),
+ <<"endingwxyzendingwxyzuyEXDtendingwxyzFCFendingwxyzgoLpALi">> = iolist_to_binary(re:replace("endingwxyz","(?>.*)(?<=(abcd|wxyz))","&&uyEXDt&FCF&goLpALi",[])),
+ <<"endingwxyzendingwxyzuyEXDtendingwxyzFCFendingwxyzgoLpALiuyEXDtFCFgoLpALi">> = iolist_to_binary(re:replace("endingwxyz","(?>.*)(?<=(abcd|wxyz))","&&uyEXDt&FCF&goLpALi",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>.*)(?<=(abcd|wxyz))","ElH",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?>.*)(?<=(abcd|wxyz))","ElH",[global])),
+ <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(re:replace("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))","&GVy",[])),
+ <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(re:replace("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))","&GVy",[global])),
+ <<"IpFbERword cat dog elephant mussel cow horse canary baboon snake shark otherwordvjword cat dog elephant mussel cow horse canary baboon snake shark otherwordaul">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","IpFbER&vj&aul",[])),
+ <<"IpFbERword cat dog elephant mussel cow horse canary baboon snake shark otherwordvjword cat dog elephant mussel cow horse canary baboon snake shark otherwordaul">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","IpFbER&vj&aul",[global])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","JMrCXcb\\1Q&T\\1ypBy",[])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword","JMrCXcb\\1Q&T\\1ypBy",[global])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword","TD&O",[])),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(re:replace("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword","TD&O",[global])),
+ <<"999fooKfooJ">> = iolist_to_binary(re:replace("999foo","(?<=\\d{3}(?!999))foo","&K&J",[])),
+ <<"999fooKfooJ">> = iolist_to_binary(re:replace("999foo","(?<=\\d{3}(?!999))foo","&K&J",[global])),
+ <<"123999ncsryomxOKBBikcY">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999))foo","\\1ncsry\\1omxOKBBikcY",[])),
+ <<"123999ncsryomxOKBBikcY">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999))foo","\\1ncsry\\1omxOKBBikcY",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999))foo","NMXv",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999))foo","NMXv",[global])),
+ <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999))foo","B\\1\\1",[])),
+ <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999))foo","B\\1\\1",[global])),
+ <<"999faWvYAfooyphbfooC">> = iolist_to_binary(re:replace("999foo","(?<=(?!...999)\\d{3})foo","f\\1aW\\1vYA\\1&yphb&C",[])),
+ <<"999faWvYAfooyphbfooC">> = iolist_to_binary(re:replace("999foo","(?<=(?!...999)\\d{3})foo","f\\1aW\\1vYA\\1&yphb&C",[global])),
+ <<"123999D">> = iolist_to_binary(re:replace("123999foo","(?<=(?!...999)\\d{3})foo","D",[])),
+ <<"123999D">> = iolist_to_binary(re:replace("123999foo","(?<=(?!...999)\\d{3})foo","D",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?!...999)\\d{3})foo","xk\\1&NP",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=(?!...999)\\d{3})foo","xk\\1&NP",[global])),
+ <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=(?!...999)\\d{3})foo","Cpoo",[])),
+ <<"123abcfoo">> = iolist_to_binary(re:replace("123abcfoo","(?<=(?!...999)\\d{3})foo","Cpoo",[global])),
+ <<"123abcKgjBJrwxNA">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999)...)foo","KgjBJrwxNA",[])),
+ <<"123abcKgjBJrwxNA">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}(?!999)...)foo","KgjBJrwxNA",[global])),
+ <<"123456foomfooUfooUg">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}(?!999)...)foo","&m&U&Ug\\1",[])),
+ <<"123456foomfooUfooUg">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}(?!999)...)foo","&m&U&Ug\\1",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999)...)foo","Ccj\\1&vjH&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}(?!999)...)foo","Ccj\\1&vjH&",[global])),
+ <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999)...)foo","&MeuE&",[])),
+ <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}(?!999)...)foo","&MeuE&",[global])),
+ <<"123abcMdRfooqtYhLSo">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}...)(?<!999)foo","Md\\1R&qtYhLSo",[])),
+ <<"123abcMdRfooqtYhLSo">> = iolist_to_binary(re:replace("123abcfoo","(?<=\\d{3}...)(?<!999)foo","Md\\1R&qtYhLSo",[global])),
+ <<"123456IfooHfooFgGWfoobS">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}...)(?<!999)foo","I&H\\1\\1&\\1FgGW&bS",[])),
+ <<"123456IfooHfooFgGWfoobS">> = iolist_to_binary(re:replace("123456foo","(?<=\\d{3}...)(?<!999)foo","I&H\\1\\1&\\1FgGW&bS",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}...)(?<!999)foo","x&KVkVB\\1mIkDO\\1",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?<=\\d{3}...)(?<!999)foo","x&KVkVB\\1mIkDO\\1",[global])),
+ <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}...)(?<!999)foo","imQyT&\\1",[])),
+ <<"123999foo">> = iolist_to_binary(re:replace("123999foo","(?<=\\d{3}...)(?<!999)foo","imQyT&\\1",[global])),
+ ok.
+run32() ->
+ <<"YXkVs xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","E&&Tofh",[caseless,
- dotall,
- extended])),
-?line <<"E<a href=abcd<a href=abcdTofh xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ # quote, otherwise match up to next space","YX\\1kVs",[caseless,
+ dotall,
+ extended])),
+ <<"YXkVs xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","E&&Tofh",[caseless,
- dotall,
- extended,
- global])),
-?line <<"<a href=\"abcd xyz pqr\"Y\"ylaR<a href=\"abcd xyz pqr\"bd cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ # quote, otherwise match up to next space","YX\\1kVs",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"j\"rurrrUhbILCWDO<a href=\"abcd xyz pqr\" cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","&Y\\1ylaR&bd",[caseless,
+ # quote, otherwise match up to next space","j\\1rurrrUhbILCWDO&",[caseless,
+ dotall,
+ extended])),
+ <<"j\"rurrrUhbILCWDO<a href=\"abcd xyz pqr\" cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ ([\\\"\\'])? # find single or double quote
+ (?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
+ # quote, otherwise match up to next space","j\\1rurrrUhbILCWDO&",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"KHDcRniMHRJEBi cats">> = iolist_to_binary(re:replace("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ ([\\\"\\'])? # find single or double quote
+ (?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
+ # quote, otherwise match up to next space","KHDcRniMHRJEBi",[caseless,
dotall,
extended])),
-?line <<"<a href=\"abcd xyz pqr\"Y\"ylaR<a href=\"abcd xyz pqr\"bd cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<"KHDcRniMHRJEBi cats">> = iolist_to_binary(re:replace("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","&Y\\1ylaR&bd",[caseless,
+ # quote, otherwise match up to next space","KHDcRniMHRJEBi",[caseless,
dotall,
extended,
global])),
-?line <<"CdADwL<a href='abcd xyz pqr'b'a'' cats">> = iolist_to_binary(re:replace("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
- ([\\\"\\'])? # find single or double quote
- (?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","CdADwL&b\\1a\\1\\1",[caseless,
- dotall,
- extended])),
-?line <<"CdADwL<a href='abcd xyz pqr'b'a'' cats">> = iolist_to_binary(re:replace("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
- ([\\\"\\'])? # find single or double quote
- (?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","CdADwL&b\\1a\\1\\1",[caseless,
- dotall,
- extended,
- global])),
-?line <<"IAfhYumoIpB xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
+ <<"DRkc<a href=abcd xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","\\1\\1IAfhYumoIpB\\1",[caseless,
- dotall,
- extended])),
-?line <<"IAfhYumoIpB xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
+ # quote, otherwise match up to next space","DRkc&\\1",[caseless,
+ dotall,
+ extended])),
+ <<"DRkc<a href=abcd xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","\\1\\1IAfhYumoIpB\\1",[caseless,
- dotall,
- extended,
- global])),
-?line <<"xrs<a href=\"abcd xyz pqr\"\"tWWeQ\"K<a href=\"abcd xyz pqr\"LjVA\"<a href=\"abcd xyz pqr\" cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
+ # quote, otherwise match up to next space","DRkc&\\1",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"M\"b\"cG cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","xrs&\\1tWWeQ\\1K&LjVA\\1&",[caseless,
- dotall,
- extended])),
-?line <<"xrs<a href=\"abcd xyz pqr\"\"tWWeQ\"K<a href=\"abcd xyz pqr\"LjVA\"<a href=\"abcd xyz pqr\" cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
+ # quote, otherwise match up to next space","M\\1b\\1cG",[caseless,
+ dotall,
+ extended])),
+ <<"M\"b\"cG cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","xrs&\\1tWWeQ\\1K&LjVA\\1&",[caseless,
- dotall,
- extended,
- global])),
-?line <<"QmbmFDyYfP cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
+ # quote, otherwise match up to next space","M\\1b\\1cG",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"<a href = 'abcd xyz pqr'K'RAApBAC'TjXhwL cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","QmbmFDyYfP",[caseless,
- dotall,
- extended])),
-?line <<"QmbmFDyYfP cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
+ # quote, otherwise match up to next space","&K\\1RAApBAC\\1TjXhwL",[caseless,
+ dotall,
+ extended])),
+ <<"<a href = 'abcd xyz pqr'K'RAApBAC'TjXhwL cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","QmbmFDyYfP",[caseless,
- dotall,
- extended,
- global])),
-?line <<"EokGsdLETK xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ # quote, otherwise match up to next space","&K\\1RAApBAC\\1TjXhwL",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"udPf<a href=abcd<a href=abcdVmHT xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","E\\1okGsdLETK",[caseless,
- dotall,
- extended])),
-?line <<"EokGsdLETK xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ # quote, otherwise match up to next space","\\1udPf&&VmHT\\1",[caseless,
+ dotall,
+ extended])),
+ <<"udPf<a href=abcd<a href=abcdVmHT xyz">> = iolist_to_binary(re:replace("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","E\\1okGsdLETK",[caseless,
- dotall,
- extended,
- global])),
-?line <<"gy cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ # quote, otherwise match up to next space","\\1udPf&&VmHT\\1",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"lO<a href=\"abcd xyz pqr\"C<a href=\"abcd xyz pqr\"dAuVMQlg cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","gy",[caseless,
- dotall,
- extended])),
-?line <<"gy cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ # quote, otherwise match up to next space","lO&C&dAuVMQlg",[caseless,
+ dotall,
+ extended])),
+ <<"lO<a href=\"abcd xyz pqr\"C<a href=\"abcd xyz pqr\"dAuVMQlg cats">> = iolist_to_binary(re:replace("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","gy",[caseless,
- dotall,
- extended,
- global])),
-?line <<"i cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ # quote, otherwise match up to next space","lO&C&dAuVMQlg",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"kNUDBNNpwgKs'j cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","i",[caseless,
- dotall,
- extended])),
-?line <<"i cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ # quote, otherwise match up to next space","kNUDBNNpwgKs\\1j",[caseless,
+ dotall,
+ extended])),
+ <<"kNUDBNNpwgKs'j cats">> = iolist_to_binary(re:replace("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space","i",[caseless,
- dotall,
- extended,
- global])),
-?line <<"EZADCywAYhLBCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","((Z)+|A)*","E&DCywAYhL",[])),
-?line <<"EZADCywAYhLEDCywAYhLBEDCywAYhLCEDCywAYhLDEDCywAYhLEEDCywAYhLFEDCywAYhLGEDCywAYhL">> = iolist_to_binary(re:replace("ZABCDEFG","((Z)+|A)*","E&DCywAYhL",[global])),
-?line <<"nyATkLcbFTgYpAunmMXBCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","(Z()|A)*","ny\\1TkLcbFTgYp\\1unmMX",[])),
-?line <<"nyATkLcbFTgYpAunmMXnyTkLcbFTgYpunmMXBnyTkLcbFTgYpunmMXCnyTkLcbFTgYpunmMXDnyTkLcbFTgYpunmMXEnyTkLcbFTgYpunmMXFnyTkLcbFTgYpunmMXGnyTkLcbFTgYpunmMX">> = iolist_to_binary(re:replace("ZABCDEFG","(Z()|A)*","ny\\1TkLcbFTgYp\\1unmMX",[global])),
-?line <<"YiJonwVPQAqACHABCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","(Z(())|A)*","YiJonwVPQ\\1q\\1CH\\1",[])),
-?line <<"YiJonwVPQAqACHAYiJonwVPQqCHBYiJonwVPQqCHCYiJonwVPQqCHDYiJonwVPQqCHEYiJonwVPQqCHFYiJonwVPQqCHGYiJonwVPQqCH">> = iolist_to_binary(re:replace("ZABCDEFG","(Z(())|A)*","YiJonwVPQ\\1q\\1CH\\1",[global])),
-?line <<"bZAEAXcNeNwfBCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","((?>Z)+|A)*","b&E\\1XcNeNwf",[])),
-?line <<"bZAEAXcNeNwfbEXcNeNwfBbEXcNeNwfCbEXcNeNwfDbEXcNeNwfEbEXcNeNwfFbEXcNeNwfGbEXcNeNwf">> = iolist_to_binary(re:replace("ZABCDEFG","((?>Z)+|A)*","b&E\\1XcNeNwf",[global])),
-?line <<"UeIRbNvamSaniIQYPZABCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","((?>)+|A)*","UeIRbNv&amSaniIQYP",[])),
-?line <<"UeIRbNvamSaniIQYPZUeIRbNvamSaniIQYPUeIRbNvAamSaniIQYPUeIRbNvamSaniIQYPBUeIRbNvamSaniIQYPCUeIRbNvamSaniIQYPDUeIRbNvamSaniIQYPEUeIRbNvamSaniIQYPFUeIRbNvamSaniIQYPGUeIRbNvamSaniIQYP">> = iolist_to_binary(re:replace("ZABCDEFG","((?>)+|A)*","UeIRbNv&amSaniIQYP",[global])),
-?line <<"AnyTcLbbab">> = iolist_to_binary(re:replace("abbab","a*","AnyTcL",[])),
-?line <<"AnyTcLAnyTcLbAnyTcLbAnyTcLAnyTcLbAnyTcL">> = iolist_to_binary(re:replace("abbab","a*","AnyTcL",[global])),
-?line <<"EfoRdQVibcde">> = iolist_to_binary(re:replace("abcde","^[a-\\d]","EfoRdQVi",[])),
-?line <<"EfoRdQVibcde">> = iolist_to_binary(re:replace("abcde","^[a-\\d]","EfoRdQVi",[global])),
-?line <<"cCcyoUi-GT--drpjthings">> = iolist_to_binary(re:replace("-things","^[a-\\d]","cCcy\\1o\\1Ui&GT&&drpj",[])),
-?line <<"cCcyoUi-GT--drpjthings">> = iolist_to_binary(re:replace("-things","^[a-\\d]","cCcy\\1o\\1Ui&GT&&drpj",[global])),
-?line <<"eddigit">> = iolist_to_binary(re:replace("0digit","^[a-\\d]","ed",[])),
-?line <<"eddigit">> = iolist_to_binary(re:replace("0digit","^[a-\\d]","ed",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-\\d]","\\1wCjwyJQB&COO&&Vyp\\1M",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-\\d]","\\1wCjwyJQB&COO&&Vyp\\1M",[global])),
-?line <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[a-\\d]","EofOaus",[])),
-?line <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[a-\\d]","EofOaus",[global])),
-?line <<"kpGVaTiadJVwJbcde">> = iolist_to_binary(re:replace("abcde","^[\\d-a]","kpG\\1V&Ti&dJVwJ",[])),
-?line <<"kpGVaTiadJVwJbcde">> = iolist_to_binary(re:replace("abcde","^[\\d-a]","kpG\\1V&Ti&dJVwJ",[global])),
-?line <<"Chuymdqthings">> = iolist_to_binary(re:replace("-things","^[\\d-a]","Chu\\1ymdq",[])),
-?line <<"Chuymdqthings">> = iolist_to_binary(re:replace("-things","^[\\d-a]","Chu\\1ymdq",[global])),
-?line <<"TpWPVwVtHJWAdigit">> = iolist_to_binary(re:replace("0digit","^[\\d-a]","TpWPVwV\\1tHJWA",[])),
-?line <<"TpWPVwVtHJWAdigit">> = iolist_to_binary(re:replace("0digit","^[\\d-a]","TpWPVwV\\1tHJWA",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[\\d-a]","WYnxbwypPj",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[\\d-a]","WYnxbwypPj",[global])),
-?line <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[\\d-a]","bnUSwwhPJ",[])),
-?line <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[\\d-a]","bnUSwwhPJ",[global])),
-?line <<">mnfN
- FbS
- ghxwsq<">> = iolist_to_binary(re:replace(">
- <","[[:space:]]+","mnfN&FbS\\1&ghxwsq",[])),
-?line <<">mnfN
- FbS
- ghxwsq<">> = iolist_to_binary(re:replace(">
- <","[[:space:]]+","mnfN&FbS\\1&ghxwsq",[global])),
-?line <<">R
- <">> = iolist_to_binary(re:replace(">
- <","[[:blank:]]+","R",[])),
-?line <<">R
- <">> = iolist_to_binary(re:replace(">
- <","[[:blank:]]+","R",[global])),
-?line <<">PjX
- <">> = iolist_to_binary(re:replace(">
- <","[\\s]+","PjX&",[])),
-?line <<">PjX
+ # quote, otherwise match up to next space","kNUDBNNpwgKs\\1j",[caseless,
+ dotall,
+ extended,
+ global])),
+ <<"SBBCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","((Z)+|A)*","SB",[])),
+ <<"SBSBBSBCSBDSBESBFSBGSB">> = iolist_to_binary(re:replace("ZABCDEFG","((Z)+|A)*","SB",[global])),
+ <<"TGWhfNtEZAQBCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","(Z()|A)*","TGWhfNtE&Q",[])),
+ <<"TGWhfNtEZAQTGWhfNtEQBTGWhfNtEQCTGWhfNtEQDTGWhfNtEQETGWhfNtEQFTGWhfNtEQGTGWhfNtEQ">> = iolist_to_binary(re:replace("ZABCDEFG","(Z()|A)*","TGWhfNtE&Q",[global])),
+ <<"QATmcAAZABCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","(Z(())|A)*","Q\\1Tmc\\1\\1&",[])),
+ <<"QATmcAAZAQTmcBQTmcCQTmcDQTmcEQTmcFQTmcGQTmc">> = iolist_to_binary(re:replace("ZABCDEFG","(Z(())|A)*","Q\\1Tmc\\1\\1&",[global])),
+ <<"LUBCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","((?>Z)+|A)*","LU",[])),
+ <<"LULUBLUCLUDLUELUFLUGLU">> = iolist_to_binary(re:replace("ZABCDEFG","((?>Z)+|A)*","LU",[global])),
+ <<"YLMbVmHKJJdvuAVZABCDEFG">> = iolist_to_binary(re:replace("ZABCDEFG","((?>)+|A)*","YL&MbVmHKJJdv\\1&uAV",[])),
+ <<"YLMbVmHKJJdvuAVZYLMbVmHKJJdvuAVYLAMbVmHKJJdvAuAVYLMbVmHKJJdvuAVBYLMbVmHKJJdvuAVCYLMbVmHKJJdvuAVDYLMbVmHKJJdvuAVEYLMbVmHKJJdvuAVFYLMbVmHKJJdvuAVGYLMbVmHKJJdvuAV">> = iolist_to_binary(re:replace("ZABCDEFG","((?>)+|A)*","YL&MbVmHKJJdv\\1&uAV",[global])),
+ <<"qewqabbab">> = iolist_to_binary(re:replace("abbab","a*","qewq&",[])),
+ <<"qewqaqewqbqewqbqewqaqewqbqewq">> = iolist_to_binary(re:replace("abbab","a*","qewq&",[global])),
+ <<"Nabcde">> = iolist_to_binary(re:replace("abcde","^[a-\\d]","N&",[])),
+ <<"Nabcde">> = iolist_to_binary(re:replace("abcde","^[a-\\d]","N&",[global])),
+ <<"sg-aOs-tithings">> = iolist_to_binary(re:replace("-things","^[a-\\d]","sg&a\\1Os&ti",[])),
+ <<"sg-aOs-tithings">> = iolist_to_binary(re:replace("-things","^[a-\\d]","sg&a\\1Os&ti",[global])),
+ <<"DtMdigit">> = iolist_to_binary(re:replace("0digit","^[a-\\d]","DtM",[])),
+ <<"DtMdigit">> = iolist_to_binary(re:replace("0digit","^[a-\\d]","DtM",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-\\d]","dJiX",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[a-\\d]","dJiX",[global])),
+ <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[a-\\d]","AGDlhSs&Gk&u\\1L",[])),
+ <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[a-\\d]","AGDlhSs&Gk&u\\1L",[global])),
+ <<"crLvRhrTbcde">> = iolist_to_binary(re:replace("abcde","^[\\d-a]","crLvRhrT",[])),
+ <<"crLvRhrTbcde">> = iolist_to_binary(re:replace("abcde","^[\\d-a]","crLvRhrT",[global])),
+ <<"XaUtelthings">> = iolist_to_binary(re:replace("-things","^[\\d-a]","XaUtel",[])),
+ <<"XaUtelthings">> = iolist_to_binary(re:replace("-things","^[\\d-a]","XaUtel",[global])),
+ <<"0digit">> = iolist_to_binary(re:replace("0digit","^[\\d-a]","&",[])),
+ <<"0digit">> = iolist_to_binary(re:replace("0digit","^[\\d-a]","&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[\\d-a]","E&gL&oOMM&E",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^[\\d-a]","E&gL&oOMM&E",[global])),
+ <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[\\d-a]","\\1kIKJw&Id",[])),
+ <<"bcdef">> = iolist_to_binary(re:replace("bcdef","^[\\d-a]","\\1kIKJw&Id",[global])),
+ <<">Qi<">> = iolist_to_binary(re:replace(">
+ <","[[:space:]]+","\\1Qi",[])),
+ <<">Qi<">> = iolist_to_binary(re:replace(">
+ <","[[:space:]]+","\\1Qi",[global])),
+ <<">VYrL AlFvYN
<">> = iolist_to_binary(re:replace(">
- <","[\\s]+","PjX&",[global])),
-?line <<">EO
-
- g
-
- DMTFYSd
+ <","[[:blank:]]+","VYrL&AlFvYN",[])),
+ <<">VYrL AlFvYN
<">> = iolist_to_binary(re:replace(">
- <","\\s+","EO&&g&&DMT\\1FY\\1Sd&",[])),
-?line <<">EO
-
- g
-
- DMTFYSd
- <">> = iolist_to_binary(re:replace(">
- <","\\s+","EO&&g&&DMT\\1FY\\1Sd&",[global])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","a b","qihC&Vy",[extended])),
-?line <<"ab">> = iolist_to_binary(re:replace("ab","a b","qihC&Vy",[extended,
- global])),
-?line <<"a
-dxmjb">> = iolist_to_binary(re:replace("a
-xb","(?!\\A)x","dxmj",[multiline])),
-?line <<"a
-dxmjb">> = iolist_to_binary(re:replace("a
-xb","(?!\\A)x","dxmj",[multiline,global])),
-?line <<"a
+ <","[[:blank:]]+","VYrL&AlFvYN",[global])),
+ <<">HJRfpOlI <">> = iolist_to_binary(re:replace(">
+ <","[\\s]+","HJRfpOlI",[])),
+ <<">HJRfpOlI <">> = iolist_to_binary(re:replace(">
+ <","[\\s]+","HJRfpOlI",[global])),
+ <<">
+ t
+ FtuuC <">> = iolist_to_binary(re:replace(">
+ <","\\s+","&\\1t&FtuuC",[])),
+ <<">
+ t
+ FtuuC <">> = iolist_to_binary(re:replace(">
+ <","\\s+","&\\1t&FtuuC",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","a b","&lH\\1E&J\\1&L&&Rx",[extended])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","a b","&lH\\1E&J\\1&L&&Rx",[extended,
+ global])),
+ <<"a
+xWxKmxNIb">> = iolist_to_binary(re:replace("a
+xb","(?!\\A)x","&W&Km&NI",[multiline])),
+ <<"a
+xWxKmxNIb">> = iolist_to_binary(re:replace("a
+xb","(?!\\A)x","&W&Km&NI",[multiline,global])),
+ <<"a
xb">> = iolist_to_binary(re:replace("a
-xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline])),
-?line <<"a
+xb","(?!^)x","jRLFoYEov&K",[multiline])),
+ <<"a
xb">> = iolist_to_binary(re:replace("a
-xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
- global])),
-?line <<"MYdx">> = iolist_to_binary(re:replace("abcabcabc","abc\\Qabc\\Eabc","MYdx",[])),
-?line <<"MYdx">> = iolist_to_binary(re:replace("abcabcabc","abc\\Qabc\\Eabc","MYdx",[global])),
-?line <<"abc(*+|abc">> = iolist_to_binary(re:replace("abc(*+|abc","abc\\Q(*+|\\Eabc","&",[])),
-?line <<"abc(*+|abc">> = iolist_to_binary(re:replace("abc(*+|abc","abc\\Q(*+|\\Eabc","&",[global])),
-?line <<"abc abcabcbMSm">> = iolist_to_binary(re:replace("abc abcabc"," abc\\Q abc\\Eabc","&bM\\1Sm",[extended])),
-?line <<"abc abcabcbMSm">> = iolist_to_binary(re:replace("abc abcabc"," abc\\Q abc\\Eabc","&bM\\1Sm",[extended,
- global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," abc\\Q abc\\Eabc","X\\1\\1&",[extended])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," abc\\Q abc\\Eabc","X\\1\\1&",[extended,
- global])),
-?line <<"abcabcabc">> = iolist_to_binary(re:replace("abcabcabc"," abc\\Q abc\\Eabc","qbvwJpk",[extended])),
-?line <<"abcabcabc">> = iolist_to_binary(re:replace("abcabcabc"," abc\\Q abc\\Eabc","qbvwJpk",[extended,
- global])),
-?line <<"UwGaabc#not comment
- literal">> = iolist_to_binary(re:replace("abc#not comment
+xb","(?!^)x","jRLFoYEov&K",[multiline,global])),
+ <<"JVoGaFQQ">> = iolist_to_binary(re:replace("abcabcabc","abc\\Qabc\\Eabc","JVoGaFQQ",[])),
+ <<"JVoGaFQQ">> = iolist_to_binary(re:replace("abcabcabc","abc\\Qabc\\Eabc","JVoGaFQQ",[global])),
+ <<"DSeVu">> = iolist_to_binary(re:replace("abc(*+|abc","abc\\Q(*+|\\Eabc","DSeVu",[])),
+ <<"DSeVu">> = iolist_to_binary(re:replace("abc(*+|abc","abc\\Q(*+|\\Eabc","DSeVu",[global])),
+ ok.
+run33() ->
+ <<"Li">> = iolist_to_binary(re:replace("abc abcabc"," abc\\Q abc\\Eabc","Li",[extended])),
+ <<"Li">> = iolist_to_binary(re:replace("abc abcabc"," abc\\Q abc\\Eabc","Li",[extended,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," abc\\Q abc\\Eabc","njPc\\1Go\\1Mf&&HbU\\1&",[extended])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers"," abc\\Q abc\\Eabc","njPc\\1Go\\1Mf&&HbU\\1&",[extended,
+ global])),
+ <<"abcabcabc">> = iolist_to_binary(re:replace("abcabcabc"," abc\\Q abc\\Eabc","&xP&fFtGb&mNes\\1GI\\1",[extended])),
+ <<"abcabcabc">> = iolist_to_binary(re:replace("abcabcabc"," abc\\Q abc\\Eabc","&xP&fFtGb&mNes\\1GI\\1",[extended,
+ global])),
+ <<"gKHkeQRUc">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
- literal\\E","UwGa&",[extended])),
-?line <<"UwGaabc#not comment
- literal">> = iolist_to_binary(re:replace("abc#not comment
+ literal\\E","gKHkeQRUc",[extended])),
+ <<"gKHkeQRUc">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
- literal\\E","UwGa&",[extended,global])),
-?line <<"abc#not comment
- literalSCWsV">> = iolist_to_binary(re:replace("abc#not comment
+ literal\\E","gKHkeQRUc",[extended,global])),
+ <<"gmgWrrxBneXj">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
- literal","&\\1SCWsV",[extended])),
-?line <<"abc#not comment
- literalSCWsV">> = iolist_to_binary(re:replace("abc#not comment
+ literal","gmgWrrxBneXj",[extended])),
+ <<"gmgWrrxBneXj">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
- literal","&\\1SCWsV",[extended,global])),
-?line <<"T">> = iolist_to_binary(re:replace("abc#not comment
+ literal","gmgWrrxBneXj",[extended,global])),
+ <<"JetiXL">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment
- ","T",[extended])),
-?line <<"T">> = iolist_to_binary(re:replace("abc#not comment
+ ","J\\1etiX\\1L",[extended])),
+ <<"JetiXL">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment
- ","T",[extended,global])),
-?line <<"abc#not comment
- literalDFMabc#not comment
- literaliRRuHyq">> = iolist_to_binary(re:replace("abc#not comment
+ ","J\\1etiX\\1L",[extended,global])),
+ <<"nxvXs">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
- literal\\E #more comment","&DFM&\\1\\1iR\\1RuHy\\1q",[extended])),
-?line <<"abc#not comment
- literalDFMabc#not comment
- literaliRRuHyq">> = iolist_to_binary(re:replace("abc#not comment
+ literal\\E #more comment","\\1nxvXs",[extended])),
+ <<"nxvXs">> = iolist_to_binary(re:replace("abc#not comment
literal","abc#comment
\\Q#not comment
- literal\\E #more comment","&DFM&\\1\\1iR\\1RuHy\\1q",[extended,
- global])),
-?line <<"DkSX">> = iolist_to_binary(re:replace("abc\\$xyz","\\Qabc\\$xyz\\E","DkSX",[])),
-?line <<"DkSX">> = iolist_to_binary(re:replace("abc\\$xyz","\\Qabc\\$xyz\\E","DkSX",[global])),
-?line <<"EOaWuCabc$xyzeabc$xyzDrvLP">> = iolist_to_binary(re:replace("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E","EOaWuC&e&DrvLP",[])),
-?line <<"EOaWuCabc$xyzeabc$xyzDrvLP">> = iolist_to_binary(re:replace("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E","EOaWuC&e&DrvLP",[global])),
-?line <<"PUGabcRXWXakpQfboabcw">> = iolist_to_binary(re:replace("abc","\\Gabc","P\\1UG&R\\1XWXakpQfbo&w",[])),
-?line <<"PUGabcRXWXakpQfboabcw">> = iolist_to_binary(re:replace("abc","\\Gabc","P\\1UG&R\\1XWXakpQfbo&w",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Gabc","sssS\\1AVaXM&Is&c",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Gabc","sssS\\1AVaXM&Is&c",[global])),
-?line <<"xyzabc">> = iolist_to_binary(re:replace("xyzabc","\\Gabc","r",[])),
-?line <<"xyzabc">> = iolist_to_binary(re:replace("xyzabc","\\Gabc","r",[global])),
-?line <<"tScabc2xyzabc3">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","\\Gabc.","tSc",[])),
-?line <<"tSctScxyzabc3">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","\\Gabc.","tSc",[global])),
-?line <<"HcJuuopHFgbabc2xyzabc3">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","abc.","HcJuuopHFgb",[])),
-?line <<"HcJuuopHFgbHcJuuopHFgbxyzHcJuuopHFgb">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","abc.","HcJuuopHFgb",[global])),
-?line <<"XMSabcdaDVucwrGDirY">> = iolist_to_binary(re:replace("XabcdY","a(?x: b c )d","MS&aDVucwrGDir",[])),
-?line <<"XMSabcdaDVucwrGDirY">> = iolist_to_binary(re:replace("XabcdY","a(?x: b c )d","MS&aDVucwrGDir",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?x: b c )d","paXT\\1iPxaNPv",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?x: b c )d","paXT\\1iPxaNPv",[global])),
-?line <<"Xa b c d Y">> = iolist_to_binary(re:replace("Xa b c d Y","a(?x: b c )d","FRHntJTvUtt&w\\1Mhj",[])),
-?line <<"Xa b c d Y">> = iolist_to_binary(re:replace("Xa b c d Y","a(?x: b c )d","FRHntJTvUtt&w\\1Mhj",[global])),
-?line <<"XabcY">> = iolist_to_binary(re:replace("XabcY","((?x)x y z | a b c)","\\1",[])),
-?line <<"XabcY">> = iolist_to_binary(re:replace("XabcY","((?x)x y z | a b c)","\\1",[global])),
-?line <<"AxyznocmxyzxyzxyzfWlBxyzPEB">> = iolist_to_binary(re:replace("AxyzB","((?x)x y z | a b c)","&nocm\\1&&fWlB&PE",[])),
-?line <<"AxyznocmxyzxyzxyzfWlBxyzPEB">> = iolist_to_binary(re:replace("AxyzB","((?x)x y z | a b c)","&nocm\\1&&fWlB&PE",[global])),
-?line <<"XqabCRwY">> = iolist_to_binary(re:replace("XabCY","(?i)AB(?-i)C","q&Rw",[])),
-?line <<"XqabCRwY">> = iolist_to_binary(re:replace("XabCY","(?i)AB(?-i)C","q&Rw",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i)AB(?-i)C","b&Qx",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i)AB(?-i)C","b&Qx",[global])),
-?line <<"XabcY">> = iolist_to_binary(re:replace("XabcY","(?i)AB(?-i)C","VjuCQPxKgGiffeGDHugc",[])),
-?line <<"XabcY">> = iolist_to_binary(re:replace("XabcY","(?i)AB(?-i)C","VjuCQPxKgGiffeGDHugc",[global])),
-?line <<"abCEApGxObicabCaHXabCib">> = iolist_to_binary(re:replace("abCE","((?i)AB(?-i)C|D)E","&ApGxObic\\1aHX\\1ib",[])),
-?line <<"abCEApGxObicabCaHXabCib">> = iolist_to_binary(re:replace("abCE","((?i)AB(?-i)C|D)E","&ApGxObic\\1aHX\\1ib",[global])),
-?line <<"uLoeOQwJDEyFGS">> = iolist_to_binary(re:replace("DE","((?i)AB(?-i)C|D)E","uLoeOQwJ&yFGS",[])),
-?line <<"uLoeOQwJDEyFGS">> = iolist_to_binary(re:replace("DE","((?i)AB(?-i)C|D)E","uLoeOQwJ&yFGS",[global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)AB(?-i)C|D)E","LUuqtYqP\\1RCe",[])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)AB(?-i)C|D)E","LUuqtYqP\\1RCe",[global])),
-?line <<"abcE">> = iolist_to_binary(re:replace("abcE","((?i)AB(?-i)C|D)E","\\1sXBxu\\1",[])),
-?line <<"abcE">> = iolist_to_binary(re:replace("abcE","((?i)AB(?-i)C|D)E","\\1sXBxu\\1",[global])),
-?line <<"abCe">> = iolist_to_binary(re:replace("abCe","((?i)AB(?-i)C|D)E","Y\\1Rgo\\1Ican\\1",[])),
-?line <<"abCe">> = iolist_to_binary(re:replace("abCe","((?i)AB(?-i)C|D)E","Y\\1Rgo\\1Ican\\1",[global])),
-?line <<"dE">> = iolist_to_binary(re:replace("dE","((?i)AB(?-i)C|D)E","XvslPbYV&&PG",[])),
-?line <<"dE">> = iolist_to_binary(re:replace("dE","((?i)AB(?-i)C|D)E","XvslPbYV&&PG",[global])),
-?line <<"De">> = iolist_to_binary(re:replace("De","((?i)AB(?-i)C|D)E","Ry\\1rxj\\1\\1dTXtld&\\1D&&",[])),
-?line <<"De">> = iolist_to_binary(re:replace("De","((?i)AB(?-i)C|D)E","Ry\\1rxj\\1\\1dTXtld&\\1D&&",[global])),
-?line <<"vyabc">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","vy\\1",[])),
-?line <<"vyabc">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","vy\\1",[global])),
-?line <<"aLB">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","LB",[])),
-?line <<"aLB">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","LB",[global])),
-?line <<"HXjXabc123abcabc123abcabc123abcfUay">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","HXjX&&&fUay",[dotall])),
-?line <<"HXjXabc123abcabc123abcabc123abcfUay">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","HXjX&&&fUay",[dotall,
- global])),
-?line <<"aCRabcRSbc123bcbcokUUyuMbc123bcm">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","CRa\\1RS&\\1okUUyuM&m",[dotall])),
-?line <<"aCRabcRSbc123bcbcokUUyuMbc123bcm">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","CRa\\1RS&\\1okUUyuM&m",[dotall,
- global])),
-?line <<"RvRabcJIYH">> = iolist_to_binary(re:replace("abc123abc","((.*))\\d+\\1","RvR\\1JIYH",[])),
-?line <<"RvRabcJIYH">> = iolist_to_binary(re:replace("abc123abc","((.*))\\d+\\1","RvR\\1JIYH",[global])),
-?line <<"aRbc123bcmb">> = iolist_to_binary(re:replace("abc123bc","((.*))\\d+\\1","R&mb",[])),
-?line <<"aRbc123bcmb">> = iolist_to_binary(re:replace("abc123bc","((.*))\\d+\\1","R&mb",[global])),
-?line <<"ET">> = iolist_to_binary(re:replace("a123::a123","^(?!:) # colon disallowed at start
+ literal\\E #more comment","\\1nxvXs",[extended,global])),
+ <<"NHOqEFFabc\\$xyzj">> = iolist_to_binary(re:replace("abc\\$xyz","\\Qabc\\$xyz\\E","NHOqEFF&j",[])),
+ <<"NHOqEFFabc\\$xyzj">> = iolist_to_binary(re:replace("abc\\$xyz","\\Qabc\\$xyz\\E","NHOqEFF&j",[global])),
+ <<"DjW">> = iolist_to_binary(re:replace("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E","DjW",[])),
+ <<"DjW">> = iolist_to_binary(re:replace("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E","DjW",[global])),
+ <<"WAnMpAVfX">> = iolist_to_binary(re:replace("abc","\\Gabc","W\\1AnMpAV\\1f\\1X",[])),
+ <<"WAnMpAVfX">> = iolist_to_binary(re:replace("abc","\\Gabc","W\\1AnMpAV\\1f\\1X",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Gabc","rW&&AVMSknoPI&&w",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\Gabc","rW&&AVMSknoPI&&w",[global])),
+ <<"xyzabc">> = iolist_to_binary(re:replace("xyzabc","\\Gabc","DFp\\1NhU&",[])),
+ <<"xyzabc">> = iolist_to_binary(re:replace("xyzabc","\\Gabc","DFp\\1NhU&",[global])),
+ <<"abc1ifEabc1hgAabc2xyzabc3">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","\\Gabc.","\\1&ifE&hgA",[])),
+ <<"abc1ifEabc1hgAabc2ifEabc2hgAxyzabc3">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","\\Gabc.","\\1&ifE&hgA",[global])),
+ <<"QCUPbyyjrEabc2xyzabc3">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","abc.","QC\\1\\1UPbyyj\\1rE",[])),
+ <<"QCUPbyyjrEQCUPbyyjrExyzQCUPbyyjrE">> = iolist_to_binary(re:replace("abc1abc2xyzabc3","abc.","QC\\1\\1UPbyyj\\1rE",[global])),
+ <<"XJIJfY">> = iolist_to_binary(re:replace("XabcdY","a(?x: b c )d","JIJf",[])),
+ <<"XJIJfY">> = iolist_to_binary(re:replace("XabcdY","a(?x: b c )d","JIJf",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?x: b c )d","i&J&NwHJGVUFHoXlLB",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","a(?x: b c )d","i&J&NwHJGVUFHoXlLB",[global])),
+ <<"Xa b c d Y">> = iolist_to_binary(re:replace("Xa b c d Y","a(?x: b c )d","y&kXPnw&sN&&BHba",[])),
+ <<"Xa b c d Y">> = iolist_to_binary(re:replace("Xa b c d Y","a(?x: b c )d","y&kXPnw&sN&&BHba",[global])),
+ <<"XUQRabcabcUrY">> = iolist_to_binary(re:replace("XabcY","((?x)x y z | a b c)","UQR&\\1Ur",[])),
+ <<"XUQRabcabcUrY">> = iolist_to_binary(re:replace("XabcY","((?x)x y z | a b c)","UQR&\\1Ur",[global])),
+ <<"AgqfObHxyztxyzMXSCB">> = iolist_to_binary(re:replace("AxyzB","((?x)x y z | a b c)","gqfObH\\1t&MXSC",[])),
+ <<"AgqfObHxyztxyzMXSCB">> = iolist_to_binary(re:replace("AxyzB","((?x)x y z | a b c)","gqfObH\\1t&MXSC",[global])),
+ <<"XAAvVabCAjGTsabCPBY">> = iolist_to_binary(re:replace("XabCY","(?i)AB(?-i)C","AAvV&AjGTs&\\1PB",[])),
+ <<"XAAvVabCAjGTsabCPBY">> = iolist_to_binary(re:replace("XabCY","(?i)AB(?-i)C","AAvV&AjGTs&\\1PB",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i)AB(?-i)C","UmCr&Vrv",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(?i)AB(?-i)C","UmCr&Vrv",[global])),
+ <<"XabcY">> = iolist_to_binary(re:replace("XabcY","(?i)AB(?-i)C","qxteX",[])),
+ <<"XabcY">> = iolist_to_binary(re:replace("XabcY","(?i)AB(?-i)C","qxteX",[global])),
+ <<"ai">> = iolist_to_binary(re:replace("abCE","((?i)AB(?-i)C|D)E","ai",[])),
+ <<"ai">> = iolist_to_binary(re:replace("abCE","((?i)AB(?-i)C|D)E","ai",[global])),
+ <<"qRLDKtDtqTDE">> = iolist_to_binary(re:replace("DE","((?i)AB(?-i)C|D)E","qRL\\1Kt\\1tqT&",[])),
+ <<"qRLDKtDtqTDE">> = iolist_to_binary(re:replace("DE","((?i)AB(?-i)C|D)E","qRL\\1Kt\\1tqT&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)AB(?-i)C|D)E","tJGWHuAQJuV\\1ohL",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((?i)AB(?-i)C|D)E","tJGWHuAQJuV\\1ohL",[global])),
+ <<"abcE">> = iolist_to_binary(re:replace("abcE","((?i)AB(?-i)C|D)E","SL",[])),
+ <<"abcE">> = iolist_to_binary(re:replace("abcE","((?i)AB(?-i)C|D)E","SL",[global])),
+ <<"abCe">> = iolist_to_binary(re:replace("abCe","((?i)AB(?-i)C|D)E","INyHgcjBTk",[])),
+ <<"abCe">> = iolist_to_binary(re:replace("abCe","((?i)AB(?-i)C|D)E","INyHgcjBTk",[global])),
+ <<"dE">> = iolist_to_binary(re:replace("dE","((?i)AB(?-i)C|D)E","x\\1",[])),
+ <<"dE">> = iolist_to_binary(re:replace("dE","((?i)AB(?-i)C|D)E","x\\1",[global])),
+ <<"De">> = iolist_to_binary(re:replace("De","((?i)AB(?-i)C|D)E","pgmpT&v&DORqu&",[])),
+ <<"De">> = iolist_to_binary(re:replace("De","((?i)AB(?-i)C|D)E","pgmpT&v&DORqu&",[global])),
+ <<"abcpy">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","\\1py",[])),
+ <<"abcpy">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","\\1py",[global])),
+ <<"aeCYXPUlXbcjXWbcK">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","eCYXPUlX\\1jXW\\1K",[])),
+ <<"aeCYXPUlXbcjXWbcK">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","eCYXPUlX\\1jXW\\1K",[global])),
+ <<"hxyLlgCxwsHwpLlIYe">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","hxyLlgCxwsHwpLlIYe",[dotall])),
+ <<"hxyLlgCxwsHwpLlIYe">> = iolist_to_binary(re:replace("abc123abc","(.*)\\d+\\1","hxyLlgCxwsHwpLlIYe",[dotall,
+ global])),
+ <<"aubcbcBbcJobcFXYl">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","u\\1\\1B\\1Jo\\1FXYl",[dotall])),
+ <<"aubcbcBbcJobcFXYl">> = iolist_to_binary(re:replace("abc123bc","(.*)\\d+\\1","u\\1\\1B\\1Jo\\1FXYl",[dotall,
+ global])),
+ <<"BSBMIqq">> = iolist_to_binary(re:replace("abc123abc","((.*))\\d+\\1","BSBMIqq",[])),
+ <<"BSBMIqq">> = iolist_to_binary(re:replace("abc123abc","((.*))\\d+\\1","BSBMIqq",[global])),
+ <<"aWbc123bcnWkNJItYcGAvsDNYbW">> = iolist_to_binary(re:replace("abc123bc","((.*))\\d+\\1","W&nWkNJItYcGAvsDNYbW",[])),
+ <<"aWbc123bcnWkNJItYcGAvsDNYbW">> = iolist_to_binary(re:replace("abc123bc","((.*))\\d+\\1","W&nWkNJItYcGAvsDNYbW",[global])),
+ <<"kDSa123::a123Tp">> = iolist_to_binary(re:replace("a123::a123","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18059,8 +18141,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","ET",[extended,caseless])),
-?line <<"ET">> = iolist_to_binary(re:replace("a123::a123","^(?!:) # colon disallowed at start
+ ","kDS&T\\1p",[extended,caseless])),
+ <<"kDSa123::a123Tp">> = iolist_to_binary(re:replace("a123::a123","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18068,8 +18150,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","ET",[extended,caseless,global])),
-?line <<"nYalhKtcGgINbn">> = iolist_to_binary(re:replace("a123:b342::abcd","^(?!:) # colon disallowed at start
+ ","kDS&T\\1p",[extended,caseless,global])),
+ <<"r">> = iolist_to_binary(re:replace("a123:b342::abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18077,8 +18159,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","nY\\1a\\1lhKtcGgINbn",[extended,caseless])),
-?line <<"nYalhKtcGgINbn">> = iolist_to_binary(re:replace("a123:b342::abcd","^(?!:) # colon disallowed at start
+ ","r",[extended,caseless])),
+ <<"r">> = iolist_to_binary(re:replace("a123:b342::abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18086,8 +18168,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","nY\\1a\\1lhKtcGgINbn",[extended,caseless,global])),
-?line <<"xeKa123:b342::324e:abcdRvTn">> = iolist_to_binary(re:replace("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
+ ","r",[extended,caseless,global])),
+ <<"ia123:b342::324e:abcd">> = iolist_to_binary(re:replace("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18095,8 +18177,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","xeK&RvTn",[extended,caseless])),
-?line <<"xeKa123:b342::324e:abcdRvTn">> = iolist_to_binary(re:replace("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
+ ","i&",[extended,caseless])),
+ <<"ia123:b342::324e:abcd">> = iolist_to_binary(re:replace("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18104,8 +18186,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","xeK&RvTn",[extended,caseless,global])),
-?line <<"JHrQJuCtAvAt">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
+ ","i&",[extended,caseless,global])),
+ <<"eYuTiBYPtHa123:ddde:b342::324e:abcdJHIw">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18113,8 +18195,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","JHrQJuCtAvAt",[extended,caseless])),
-?line <<"JHrQJuCtAvAt">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
+ ","eYuTiBYPtH&J\\1HIw",[extended,caseless])),
+ <<"eYuTiBYPtHa123:ddde:b342::324e:abcdJHIw">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18122,8 +18204,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","JHrQJuCtAvAt",[extended,caseless,global])),
-?line <<"IphCja">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","eYuTiBYPtH&J\\1HIw",[extended,caseless,global])),
+ <<"">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18131,8 +18213,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","Ip\\1hCj\\1a",[extended,caseless])),
-?line <<"IphCja">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","\\1",[extended,caseless])),
+ <<"">> = iolist_to_binary(re:replace("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18140,8 +18222,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","Ip\\1hCj\\1a",[extended,caseless,global])),
-?line <<"xAGmJctxEa123:ddde:9999:b342::324e:dcba:abcdjhClw">> = iolist_to_binary(re:replace("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","\\1",[extended,caseless,global])),
+ <<"a123:ddde:9999:b342::324e:dcba:abcdoLIelBa123:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18149,8 +18231,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","xAGmJctxE&jhClw",[extended,caseless])),
-?line <<"xAGmJctxEa123:ddde:9999:b342::324e:dcba:abcdjhClw">> = iolist_to_binary(re:replace("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","&oLIelB&",[extended,caseless])),
+ <<"a123:ddde:9999:b342::324e:dcba:abcdoLIelBa123:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18158,8 +18240,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","xAGmJctxE&jhClw",[extended,caseless,global])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?!:) # colon disallowed at start
+ ","&oLIelB&",[extended,caseless,global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18167,8 +18249,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","&jc&",[extended,caseless])),
-?line <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?!:) # colon disallowed at start
+ ","&f\\1I",[extended,caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18176,8 +18258,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","&jc&",[extended,caseless,global])),
-?line <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ ","&f\\1I",[extended,caseless,global])),
+ <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18185,8 +18267,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","xjuUU",[extended,caseless])),
-?line <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ ","yUIYbm&\\1qdJb",[extended,caseless])),
+ <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18194,8 +18276,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","xjuUU",[extended,caseless,global])),
-?line <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","yUIYbm&\\1qdJb",[extended,caseless,global])),
+ <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18203,8 +18285,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","&\\1gJElxfvxu\\1ly",[extended,caseless])),
-?line <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","Xhy\\1&M",[extended,caseless])),
+ <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18212,8 +18294,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","&\\1gJElxfvxu\\1ly",[extended,caseless,global])),
-?line <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","Xhy\\1&M",[extended,caseless,global])),
+ <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18221,8 +18303,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","r",[extended,caseless])),
-?line <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ ","sw",[extended,caseless])),
+ <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(re:replace("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18230,8 +18312,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","r",[extended,caseless,global])),
-?line <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ ","sw",[extended,caseless,global])),
+ <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18239,8 +18321,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","\\1",[extended,caseless])),
-?line <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ ","pCUAeIjhQXp\\1K",[extended,caseless])),
+ <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(re:replace("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18248,8 +18330,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","\\1",[extended,caseless,global])),
-?line <<"::1">> = iolist_to_binary(re:replace("::1","^(?!:) # colon disallowed at start
+ ","pCUAeIjhQXp\\1K",[extended,caseless,global])),
+ <<"::1">> = iolist_to_binary(re:replace("::1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18257,8 +18339,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","ymau\\1\\1NVl\\1WdO\\1",[extended,caseless])),
-?line <<"::1">> = iolist_to_binary(re:replace("::1","^(?!:) # colon disallowed at start
+ ","rN\\1Dti&",[extended,caseless])),
+ <<"::1">> = iolist_to_binary(re:replace("::1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18266,8 +18348,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","ymau\\1\\1NVl\\1WdO\\1",[extended,caseless,global])),
-?line <<"abcd:fee0:123::">> = iolist_to_binary(re:replace("abcd:fee0:123::","^(?!:) # colon disallowed at start
+ ","rN\\1Dti&",[extended,caseless,global])),
+ <<"abcd:fee0:123::">> = iolist_to_binary(re:replace("abcd:fee0:123::","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18275,8 +18357,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","KUuIBK&Px&",[extended,caseless])),
-?line <<"abcd:fee0:123::">> = iolist_to_binary(re:replace("abcd:fee0:123::","^(?!:) # colon disallowed at start
+ ","eRNkqHK\\1RXNGFgu",[extended,caseless])),
+ <<"abcd:fee0:123::">> = iolist_to_binary(re:replace("abcd:fee0:123::","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18284,8 +18366,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","KUuIBK&Px&",[extended,caseless,global])),
-?line <<":1">> = iolist_to_binary(re:replace(":1","^(?!:) # colon disallowed at start
+ ","eRNkqHK\\1RXNGFgu",[extended,caseless,global])),
+ <<":1">> = iolist_to_binary(re:replace(":1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18293,8 +18375,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","&BwNOmaJ\\1M&\\1TUCr",[extended,caseless])),
-?line <<":1">> = iolist_to_binary(re:replace(":1","^(?!:) # colon disallowed at start
+ ","mbx",[extended,caseless])),
+ <<":1">> = iolist_to_binary(re:replace(":1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18302,8 +18384,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","&BwNOmaJ\\1M&\\1TUCr",[extended,caseless,global])),
-?line <<"1:">> = iolist_to_binary(re:replace("1:","^(?!:) # colon disallowed at start
+ ","mbx",[extended,caseless,global])),
+ <<"1:">> = iolist_to_binary(re:replace("1:","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18311,8 +18393,8 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","J\\1e\\1",[extended,caseless])),
-?line <<"1:">> = iolist_to_binary(re:replace("1:","^(?!:) # colon disallowed at start
+ ","WJB",[extended,caseless])),
+ <<"1:">> = iolist_to_binary(re:replace("1:","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -18320,278 +18402,1557 @@ xb","(?!^)x","\\1tysI\\1v\\1BVwx\\1FOWG\\1&C",[multiline,
){1,7} # end item; 1-7 of them required
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
- ","J\\1e\\1",[extended,caseless,global])),
-?line <<"XpmPL">> = iolist_to_binary(re:replace("z","[z\\Qa-d]\\E]","\\1X\\1pmPL",[])),
-?line <<"XpmPL">> = iolist_to_binary(re:replace("z","[z\\Qa-d]\\E]","\\1X\\1pmPL",[global])),
-?line <<"WrMTefTPBbaVhaDwab">> = iolist_to_binary(re:replace("a","[z\\Qa-d]\\E]","WrMTefTPBb&V\\1\\1h&Dwab",[])),
-?line <<"WrMTefTPBbaVhaDwab">> = iolist_to_binary(re:replace("a","[z\\Qa-d]\\E]","WrMTefTPBb&V\\1\\1h&Dwab",[global])),
-?line <<"uFU-rQ-">> = iolist_to_binary(re:replace("-","[z\\Qa-d]\\E]","uFU\\1\\1&rQ&",[])),
-?line <<"uFU-rQ-">> = iolist_to_binary(re:replace("-","[z\\Qa-d]\\E]","uFU\\1\\1&rQ&",[global])),
-?line <<"QliOKMpfH">> = iolist_to_binary(re:replace("d","[z\\Qa-d]\\E]","QliOKMpfH",[])),
-?line <<"QliOKMpfH">> = iolist_to_binary(re:replace("d","[z\\Qa-d]\\E]","QliOKMpfH",[global])),
-?line <<"t]KdBE">> = iolist_to_binary(re:replace("]","[z\\Qa-d]\\E]","t\\1&KdBE",[])),
-?line <<"t]KdBE">> = iolist_to_binary(re:replace("]","[z\\Qa-d]\\E]","t\\1&KdBE",[global])),
-?line <<"*** FNavaiaOJGqPkBilers">> = iolist_to_binary(re:replace("*** Failers","[z\\Qa-d]\\E]","N&v&i\\1&OJGqPkB",[])),
-?line <<"*** FNavaiaOJGqPkBilers">> = iolist_to_binary(re:replace("*** Failers","[z\\Qa-d]\\E]","N&v&i\\1&OJGqPkB",[global])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[z\\Qa-d]\\E]","R&ba",[])),
-?line <<"b">> = iolist_to_binary(re:replace("b","[z\\Qa-d]\\E]","R&ba",[global])),
-?line <<"sjzSKziFAAJiTVWC">> = iolist_to_binary(re:replace("z","[\\z\\C]","sj&SK&iFAAJiTVWC",[])),
-?line <<"sjzSKziFAAJiTVWC">> = iolist_to_binary(re:replace("z","[\\z\\C]","sj&SK&iFAAJiTVWC",[global])),
-?line <<"DDSbIgCmsBKCTmEuitn">> = iolist_to_binary(re:replace("C","[\\z\\C]","D\\1DSbIg&msBK&TmEuitn",[])),
-?line <<"DDSbIgCmsBKCTmEuitn">> = iolist_to_binary(re:replace("C","[\\z\\C]","D\\1DSbIg&msBK&TmEuitn",[global])),
-?line <<"cY">> = iolist_to_binary(re:replace("M","\\M","cY\\1",[])),
-?line <<"cY">> = iolist_to_binary(re:replace("M","\\M","cY\\1",[global])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b","yWOTIFhIX\\1H",[])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b","yWOTIFhIX\\1H",[global])),
-?line <<"NREGularsRREGularWEYrVRr">> = iolist_to_binary(re:replace("REGular","(?i)reg(?:ul(?:[aä]|ae)r|ex)","N&\\1sR&WEYrVRr",[])),
-?line <<"NREGularsRREGularWEYrVRr">> = iolist_to_binary(re:replace("REGular","(?i)reg(?:ul(?:[aä]|ae)r|ex)","N&\\1sR&WEYrVRr",[global])),
-?line <<"G">> = iolist_to_binary(re:replace("regulaer","(?i)reg(?:ul(?:[aä]|ae)r|ex)","G",[])),
-?line <<"G">> = iolist_to_binary(re:replace("regulaer","(?i)reg(?:ul(?:[aä]|ae)r|ex)","G",[global])),
-?line <<"PSsXtwlmy">> = iolist_to_binary(re:replace("Regex","(?i)reg(?:ul(?:[aä]|ae)r|ex)","PSsXtwlmy",[])),
-?line <<"PSsXtwlmy">> = iolist_to_binary(re:replace("Regex","(?i)reg(?:ul(?:[aä]|ae)r|ex)","PSsXtwlmy",[global])),
-?line <<"regulärmiYTi">> = iolist_to_binary(re:replace("regulär","(?i)reg(?:ul(?:[aä]|ae)r|ex)","&miYTi\\1\\1",[])),
-?line <<"regulärmiYTi">> = iolist_to_binary(re:replace("regulär","(?i)reg(?:ul(?:[aä]|ae)r|ex)","&miYTi\\1\\1",[global])),
-?line <<"WÅæåäàrxhÅæåäàyUoaLOIegmSA">> = iolist_to_binary(re:replace("Åæåäà","Åæåä[à-ÿÀ-ß]+","W&rxh&yUoaL\\1OIegmS\\1A",[])),
-?line <<"WÅæåäàrxhÅæåäàyUoaLOIegmSA">> = iolist_to_binary(re:replace("Åæåäà","Åæåä[à-ÿÀ-ß]+","W&rxh&yUoaL\\1OIegmS\\1A",[global])),
-?line <<"FÅæåäÿgnWPyHehÅæåäÿtXTQ">> = iolist_to_binary(re:replace("Åæåäÿ","Åæåä[à-ÿÀ-ß]+","F&gnWPyHe\\1h&tXTQ",[])),
-?line <<"FÅæåäÿgnWPyHehÅæåäÿtXTQ">> = iolist_to_binary(re:replace("Åæåäÿ","Åæåä[à-ÿÀ-ß]+","F&gnWPyHe\\1h&tXTQ",[global])),
-?line <<"sHerHnAhAdx">> = iolist_to_binary(re:replace("ÅæåäÀ","Åæåä[à-ÿÀ-ß]+","sHer\\1HnA\\1h\\1Adx",[])),
-?line <<"sHerHnAhAdx">> = iolist_to_binary(re:replace("ÅæåäÀ","Åæåä[à-ÿÀ-ß]+","sHer\\1HnA\\1h\\1Adx",[global])),
-?line <<"trobAQoUÅæåäßn">> = iolist_to_binary(re:replace("Åæåäß","Åæåä[à-ÿÀ-ß]+","tr\\1obAQoU&n",[])),
-?line <<"trobAQoUÅæåäßn">> = iolist_to_binary(re:replace("Åæåäß","Åæåä[à-ÿÀ-ß]+","tr\\1obAQoU&n",[global])),
-?line <<"„XAZSd">> = iolist_to_binary(re:replace("„XAZXB","(?<=Z)X.","Sd",[])),
-?line <<"„XAZSd">> = iolist_to_binary(re:replace("„XAZXB","(?<=Z)X.","Sd",[global])),
-?line <<"A">> = iolist_to_binary(re:replace("ab cd defg","ab cd (?x) de fg","\\1A\\1",[])),
-?line <<"A">> = iolist_to_binary(re:replace("ab cd defg","ab cd (?x) de fg","\\1A\\1",[global])),
-?line <<"fab cddefgLdtKCtPab cddefgxvVUHDah">> = iolist_to_binary(re:replace("ab cddefg","ab cd(?x) de fg","f&LdtKC\\1\\1tP&xvVUHDah",[])),
-?line <<"fab cddefgLdtKCtPab cddefgxvVUHDah">> = iolist_to_binary(re:replace("ab cddefg","ab cd(?x) de fg","f&LdtKC\\1\\1tP&xvVUHDah",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","ab cd(?x) de fg","BkO\\1dl&WNuvnGhG&Qkl",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","ab cd(?x) de fg","BkO\\1dl&WNuvnGhG&Qkl",[global])),
-?line <<"abcddefg">> = iolist_to_binary(re:replace("abcddefg","ab cd(?x) de fg","SCJx&",[])),
-?line <<"abcddefg">> = iolist_to_binary(re:replace("abcddefg","ab cd(?x) de fg","SCJx&",[global])),
-?line <<"foobarLvX">> = iolist_to_binary(re:replace("foobarX","(?<![^f]oo)(bar)","&Lv",[])),
-?line <<"foobarLvX">> = iolist_to_binary(re:replace("foobarX","(?<![^f]oo)(bar)","&Lv",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f]oo)(bar)","dRgI\\1vl\\1\\1eC\\1RFQ",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f]oo)(bar)","dRgI\\1vl\\1\\1eC\\1RFQ",[global])),
-?line <<"boobarX">> = iolist_to_binary(re:replace("boobarX","(?<![^f]oo)(bar)","p\\1CU&Q",[])),
-?line <<"boobarX">> = iolist_to_binary(re:replace("boobarX","(?<![^f]oo)(bar)","p\\1CU&Q",[global])),
-?line <<"offmnXHaaIXuXOo">> = iolist_to_binary(re:replace("offX","(?<![^f])X","m\\1n&HaaI\\1&u&Oo",[])),
-?line <<"offmnXHaaIXuXOo">> = iolist_to_binary(re:replace("offX","(?<![^f])X","m\\1n&HaaI\\1&u&Oo",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f])X","jhEwy&w\\1mfw\\1H&VBqnX\\1",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f])X","jhEwy&w\\1mfw\\1H&VBqnX\\1",[global])),
-?line <<"onyX">> = iolist_to_binary(re:replace("onyX","(?<![^f])X","HyLQEU",[])),
-?line <<"onyX">> = iolist_to_binary(re:replace("onyX","(?<![^f])X","HyLQEU",[global])),
-?line <<"onyNXN">> = iolist_to_binary(re:replace("onyX","(?<=[^f])X","\\1N&N",[])),
-?line <<"onyNXN">> = iolist_to_binary(re:replace("onyX","(?<=[^f])X","\\1N&N",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^f])X","kt&SCnnaVhTlQMnFltwd",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^f])X","kt&SCnnaVhTlQMnFltwd",[global])),
-?line <<"offX">> = iolist_to_binary(re:replace("offX","(?<=[^f])X","UsgnsEG\\1LX&DB",[])),
-?line <<"offX">> = iolist_to_binary(re:replace("offX","(?<=[^f])X","UsgnsEG\\1LX&DB",[global])),
-?line <<"FOjOAeQxFFXja
+ ","WJB",[extended,caseless,global])),
+ <<"NdcuJzCbxTd">> = iolist_to_binary(re:replace("z","[z\\Qa-d]\\E]","NdcuJ\\1&CbxTd",[])),
+ <<"NdcuJzCbxTd">> = iolist_to_binary(re:replace("z","[z\\Qa-d]\\E]","NdcuJ\\1&CbxTd",[global])),
+ <<"VLxNqfjwruLh">> = iolist_to_binary(re:replace("a","[z\\Qa-d]\\E]","VL\\1xNqfj\\1wruLh",[])),
+ <<"VLxNqfjwruLh">> = iolist_to_binary(re:replace("a","[z\\Qa-d]\\E]","VL\\1xNqfj\\1wruLh",[global])),
+ <<"jX">> = iolist_to_binary(re:replace("-","[z\\Qa-d]\\E]","jX",[])),
+ <<"jX">> = iolist_to_binary(re:replace("-","[z\\Qa-d]\\E]","jX",[global])),
+ <<"XRHLEUuwPyRxGJEv">> = iolist_to_binary(re:replace("d","[z\\Qa-d]\\E]","X\\1RHLEUuwP\\1yRxGJEv",[])),
+ <<"XRHLEUuwPyRxGJEv">> = iolist_to_binary(re:replace("d","[z\\Qa-d]\\E]","X\\1RHLEUuwP\\1yRxGJEv",[global])),
+ <<"Gtcd">> = iolist_to_binary(re:replace("]","[z\\Qa-d]\\E]","Gt\\1cd",[])),
+ <<"Gtcd">> = iolist_to_binary(re:replace("]","[z\\Qa-d]\\E]","Gt\\1cd",[global])),
+ <<"*** FCaQDFtaYgknvailers">> = iolist_to_binary(re:replace("*** Failers","[z\\Qa-d]\\E]","C&Q\\1\\1\\1DF\\1t&Ygknv&\\1",[])),
+ <<"*** FCaQDFtaYgknvailers">> = iolist_to_binary(re:replace("*** Failers","[z\\Qa-d]\\E]","C&Q\\1\\1\\1DF\\1t&Ygknv&\\1",[global])),
+ <<"b">> = iolist_to_binary(re:replace("b","[z\\Qa-d]\\E]","rUhPPBvokQvYvRC",[])),
+ <<"b">> = iolist_to_binary(re:replace("b","[z\\Qa-d]\\E]","rUhPPBvokQvYvRC",[global])),
+ ok.
+run34() ->
+ <<"jOKAO">> = iolist_to_binary(re:replace("z","[\\z\\C]","jOKAO",[])),
+ <<"jOKAO">> = iolist_to_binary(re:replace("z","[\\z\\C]","jOKAO",[global])),
+ <<"UIfGQohtPCcNiR">> = iolist_to_binary(re:replace("C","[\\z\\C]","\\1UIfGQohtP&c\\1\\1NiR",[])),
+ <<"UIfGQohtPCcNiR">> = iolist_to_binary(re:replace("C","[\\z\\C]","\\1UIfGQohtP&c\\1\\1NiR",[global])),
+ <<"xjHNUJliwGsC">> = iolist_to_binary(re:replace("M","\\M","xjHNUJ\\1liwGsC",[])),
+ <<"xjHNUJliwGsC">> = iolist_to_binary(re:replace("M","\\M","xjHNUJ\\1liwGsC",[global])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b","ss\\1vxH\\1fmwG",[])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b","ss\\1vxH\\1fmwG",[global])),
+ <<"„XAZXS">> = iolist_to_binary(re:replace("„XAZXB","(?<=Z)X.","XS",[])),
+ <<"„XAZXS">> = iolist_to_binary(re:replace("„XAZXB","(?<=Z)X.","XS",[global])),
+ <<"fU">> = iolist_to_binary(re:replace("ab cd defg","ab cd (?x) de fg","fU",[])),
+ <<"fU">> = iolist_to_binary(re:replace("ab cd defg","ab cd (?x) de fg","fU",[global])),
+ <<"ditab cddefg">> = iolist_to_binary(re:replace("ab cddefg","ab cd(?x) de fg","\\1dit&",[])),
+ <<"ditab cddefg">> = iolist_to_binary(re:replace("ab cddefg","ab cd(?x) de fg","\\1dit&",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","ab cd(?x) de fg","&Kr&\\1EgsvGfRsKlm",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","ab cd(?x) de fg","&Kr&\\1EgsvGfRsKlm",[global])),
+ <<"abcddefg">> = iolist_to_binary(re:replace("abcddefg","ab cd(?x) de fg","\\1",[])),
+ <<"abcddefg">> = iolist_to_binary(re:replace("abcddefg","ab cd(?x) de fg","\\1",[global])),
+ <<"fooXSbarrbNX">> = iolist_to_binary(re:replace("foobarX","(?<![^f]oo)(bar)","XS\\1rbN",[])),
+ <<"fooXSbarrbNX">> = iolist_to_binary(re:replace("foobarX","(?<![^f]oo)(bar)","XS\\1rbN",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f]oo)(bar)","P\\1\\1\\1&C\\1N\\1DLnhU&T",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f]oo)(bar)","P\\1\\1\\1&C\\1N\\1DLnhU&T",[global])),
+ <<"boobarX">> = iolist_to_binary(re:replace("boobarX","(?<![^f]oo)(bar)","S&HuDj&pl&\\1K",[])),
+ <<"boobarX">> = iolist_to_binary(re:replace("boobarX","(?<![^f]oo)(bar)","S&HuDj&pl&\\1K",[global])),
+ <<"offAWvYjHsJodXLI">> = iolist_to_binary(re:replace("offX","(?<![^f])X","AWvYjHs\\1J\\1od&LI",[])),
+ <<"offAWvYjHsJodXLI">> = iolist_to_binary(re:replace("offX","(?<![^f])X","AWvYjHs\\1J\\1od&LI",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f])X","\\1on",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<![^f])X","\\1on",[global])),
+ <<"onyX">> = iolist_to_binary(re:replace("onyX","(?<![^f])X","&f&D",[])),
+ <<"onyX">> = iolist_to_binary(re:replace("onyX","(?<![^f])X","&f&D",[global])),
+ <<"onyE">> = iolist_to_binary(re:replace("onyX","(?<=[^f])X","E",[])),
+ <<"onyE">> = iolist_to_binary(re:replace("onyX","(?<=[^f])X","E",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^f])X","lEuucWp\\1&m",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^f])X","lEuucWp\\1&m",[global])),
+ <<"offX">> = iolist_to_binary(re:replace("offX","(?<=[^f])X","QNevBRs\\1&OKqB&\\1\\1H",[])),
+ <<"offX">> = iolist_to_binary(re:replace("offX","(?<=[^f])X","QNevBRs\\1&OKqB&\\1\\1H",[global])),
+ <<"lHqgba
b
c">> = iolist_to_binary(re:replace("a
b
-c","^","FOjO&AeQx&FFXj",[multiline])),
-?line <<"FOjOAeQxFFXja
-FOjOAeQxFFXjb
-FOjOAeQxFFXjc">> = iolist_to_binary(re:replace("a
+c","^","lHqg&b&",[multiline])),
+ <<"lHqgba
+lHqgbb
+lHqgbc">> = iolist_to_binary(re:replace("a
b
-c","^","FOjO&AeQx&FFXj",[multiline,global])),
-?line <<"jwIVfrtVCpnVwNgju">> = iolist_to_binary(re:replace("","^","jwIVfrtVCpnVwNgju",[multiline])),
-?line <<"jwIVfrtVCpnVwNgju">> = iolist_to_binary(re:replace("","^","jwIVfrtVCpnVwNgju",[multiline,
- global])),
-?line <<"A
+c","^","lHqg&b&",[multiline,global])),
+ <<"VDMcObuOyb">> = iolist_to_binary(re:replace("","^","VDM&cObuOy\\1b",[multiline])),
+ <<"VDMcObuOyb">> = iolist_to_binary(re:replace("","^","VDM&cObuOy\\1b",[multiline,
+ global])),
+ <<"A
C
-sugWOwdKBC">> = iolist_to_binary(re:replace("A
+luYGJMVrKYIkybC">> = iolist_to_binary(re:replace("A
C
-C","(?<=C\\n)^","sugW&&\\1OwdKB",[multiline])),
-?line <<"A
+C","(?<=C\\n)^","lu\\1Y&GJM\\1VrKY&Ikyb\\1",[multiline])),
+ <<"A
C
-sugWOwdKBC">> = iolist_to_binary(re:replace("A
+luYGJMVrKYIkybC">> = iolist_to_binary(re:replace("A
C
-C","(?<=C\\n)^","sugW&&\\1OwdKB",[multiline,global])),
-?line <<"dIXQXEThebXaXXcLjA">> = iolist_to_binary(re:replace("bXaX","(?:(?(1)a|b)(X))+","dI\\1Q\\1EThe&\\1cLjA",[])),
-?line <<"dIXQXEThebXaXXcLjA">> = iolist_to_binary(re:replace("bXaX","(?:(?(1)a|b)(X))+","dI\\1Q\\1EThe&\\1cLjA",[global])),
-?line <<"AvB">> = iolist_to_binary(re:replace("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+","AvB",[])),
-?line <<"AvB">> = iolist_to_binary(re:replace("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+","AvB",[global])),
-?line <<"EHtFjtbXESMPhXXYaXXaX">> = iolist_to_binary(re:replace("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+","EHtFjt&ESMPh\\1\\1",[])),
-?line <<"EHtFjtbXESMPhXXYaXXaX">> = iolist_to_binary(re:replace("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+","EHtFjt&ESMPh\\1\\1",[global])),
-?line <<"bXnIbjbXebXpecwXaYYaY">> = iolist_to_binary(re:replace("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+","&nIbj&\\1e&p\\1ecw",[])),
-?line <<"bXnIbjbXebXpecwXaYYaY">> = iolist_to_binary(re:replace("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+","&nIbj&\\1e&p\\1ecw",[global])),
-?line <<"Fv">> = iolist_to_binary(re:replace("abc]","[[,abc,]+]","Fv",[])),
-?line <<"Fv">> = iolist_to_binary(re:replace("abc]","[[,abc,]+]","Fv",[global])),
-?line <<"enGFFPGa,b]Vq">> = iolist_to_binary(re:replace("a,b]","[[,abc,]+]","enGFFPG&V\\1q",[])),
-?line <<"enGFFPGa,b]Vq">> = iolist_to_binary(re:replace("a,b]","[[,abc,]+]","enGFFPG&V\\1q",[global])),
-?line <<"SLU[a,b,c]KDFqnru[a,b,c]">> = iolist_to_binary(re:replace("[a,b,c]","[[,abc,]+]","SLU&KDFqnru&",[])),
-?line <<"SLU[a,b,c]KDFqnru[a,b,c]">> = iolist_to_binary(re:replace("[a,b,c]","[[,abc,]+]","SLU&KDFqnru&",[global])),
-?line <<"AFHpB">> = iolist_to_binary(re:replace("A B","(?-x: )","FHp",[extended])),
-?line <<"AFHpB">> = iolist_to_binary(re:replace("A B","(?-x: )","FHp",[extended,
- global])),
-?line <<"ALptWSVme # # # B">> = iolist_to_binary(re:replace("A # B","(?x)(?-x: \\s*#\\s*)","LptWSVme&\\1&&",[])),
-?line <<"ALptWSVme # # # B">> = iolist_to_binary(re:replace("A # B","(?x)(?-x: \\s*#\\s*)","LptWSVme&\\1&&",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x)(?-x: \\s*#\\s*)","enBY&\\1vE&\\1I\\1IhttjD\\1",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x)(?-x: \\s*#\\s*)","enBY&\\1vE&\\1I\\1IhttjD\\1",[global])),
-?line <<"#">> = iolist_to_binary(re:replace("#","(?x)(?-x: \\s*#\\s*)","c\\1cwAsih",[])),
-?line <<"#">> = iolist_to_binary(re:replace("#","(?x)(?-x: \\s*#\\s*)","c\\1cwAsih",[global])),
-?line <<"ARtjg #includeDy #includeg">> = iolist_to_binary(re:replace("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","Rtjg&Dy\\1&g",[])),
-?line <<"ARtjg #includeDy #includeg">> = iolist_to_binary(re:replace("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","Rtjg&Dy\\1&g",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include","tYbpFaHd\\1GjcqHIWx\\1a",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include","tYbpFaHd\\1GjcqHIWx\\1a",[global])),
-?line <<"A#include">> = iolist_to_binary(re:replace("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","nv\\1tgvlSHVHyKOMPNXVF",[])),
-?line <<"A#include">> = iolist_to_binary(re:replace("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","nv\\1tgvlSHVHyKOMPNXVF",[global])),
-?line <<"A #Include">> = iolist_to_binary(re:replace("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","kQdv",[])),
-?line <<"A #Include">> = iolist_to_binary(re:replace("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","kQdv",[global])),
-?line <<"k">> = iolist_to_binary(re:replace("aaabbbb","a*b*\\w","k",[])),
-?line <<"k">> = iolist_to_binary(re:replace("aaabbbb","a*b*\\w","k",[global])),
-?line <<"xaaaa">> = iolist_to_binary(re:replace("aaaa","a*b*\\w","x&",[])),
-?line <<"xaaaa">> = iolist_to_binary(re:replace("aaaa","a*b*\\w","x&",[global])),
-?line <<"pOagbKtJauauHwjM">> = iolist_to_binary(re:replace("a","a*b*\\w","pOagbKtJ&uauHwjM",[])),
-?line <<"pOagbKtJauauHwjM">> = iolist_to_binary(re:replace("a","a*b*\\w","pOagbKtJ&uauHwjM",[global])),
-?line <<"tuaaabbPhWfMuDrCJEUabb">> = iolist_to_binary(re:replace("aaabbbb","a*b?\\w","tu&P\\1h\\1WfMu\\1Dr\\1CJEUa",[])),
-?line <<"tuaaabbPhWfMuDrCJEUatubbPhWfMuDrCJEUa">> = iolist_to_binary(re:replace("aaabbbb","a*b?\\w","tu&P\\1h\\1WfMu\\1Dr\\1CJEUa",[global])),
-?line <<"heEGaaaabPJaaaaaaaakUYNXaaaasNCaaaa">> = iolist_to_binary(re:replace("aaaa","a*b?\\w","heEG&bPJ&&kUYNX&sNC&",[])),
-?line <<"heEGaaaabPJaaaaaaaakUYNXaaaasNCaaaa">> = iolist_to_binary(re:replace("aaaa","a*b?\\w","heEG&bPJ&&kUYNX&sNC&",[global])),
-?line <<"cjDPFiqs">> = iolist_to_binary(re:replace("a","a*b?\\w","cjDPFiq\\1s",[])),
-?line <<"cjDPFiqs">> = iolist_to_binary(re:replace("a","a*b?\\w","cjDPFiq\\1s",[global])),
-?line <<"aaabbbbU">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,4}\\w","&U",[])),
-?line <<"aaabbbbU">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,4}\\w","&U",[global])),
-?line <<"kaaaavgaaaaFaaaa">> = iolist_to_binary(re:replace("aaaa","a*b{0,4}\\w","k&vg&F&",[])),
-?line <<"kaaaavgaaaaFaaaa">> = iolist_to_binary(re:replace("aaaa","a*b{0,4}\\w","k&vg&F&",[global])),
-?line <<"ahHM">> = iolist_to_binary(re:replace("a","a*b{0,4}\\w","&hHM",[])),
-?line <<"ahHM">> = iolist_to_binary(re:replace("a","a*b{0,4}\\w","&hHM",[global])),
-?line <<"aaabbbbkVyXSBUXNHaaabbbbSC">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,}\\w","\\1&kVyXSBUXNH&SC\\1",[])),
-?line <<"aaabbbbkVyXSBUXNHaaabbbbSC">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,}\\w","\\1&kVyXSBUXNH&SC\\1",[global])),
-?line <<"JsaaaaARjP">> = iolist_to_binary(re:replace("aaaa","a*b{0,}\\w","Js&ARjP",[])),
-?line <<"JsaaaaARjP">> = iolist_to_binary(re:replace("aaaa","a*b{0,}\\w","Js&ARjP",[global])),
-?line <<"safA">> = iolist_to_binary(re:replace("a","a*b{0,}\\w","s\\1&fA",[])),
-?line <<"safA">> = iolist_to_binary(re:replace("a","a*b{0,}\\w","s\\1&fA",[global])),
-?line <<"0aGcgVV0aXhLIJ">> = iolist_to_binary(re:replace("0a","a*\\d*\\w","&GcgVV&XhLIJ",[])),
-?line <<"0aGcgVV0aXhLIJ">> = iolist_to_binary(re:replace("0a","a*\\d*\\w","&GcgVV&XhLIJ",[global])),
-?line <<"OWJamuSoHvWtdO">> = iolist_to_binary(re:replace("a","a*\\d*\\w","OWJ&muSoHvWtdO",[])),
-?line <<"OWJamuSoHvWtdO">> = iolist_to_binary(re:replace("a","a*\\d*\\w","OWJ&muSoHvWtdO",[global])),
-?line <<"jLLQBsEdhgm">> = iolist_to_binary(re:replace("a","a*b *\\w","jLLQ\\1BsE\\1dhgm",[extended])),
-?line <<"jLLQBsEdhgm">> = iolist_to_binary(re:replace("a","a*b *\\w","jLLQ\\1BsE\\1dhgm",[extended,
- global])),
-?line <<"JFKdkakQmYFCpg">> = iolist_to_binary(re:replace("a","a*b#comment
- *\\w","JFKdk&kQmYFCpg",[extended])),
-?line <<"JFKdkakQmYFCpg">> = iolist_to_binary(re:replace("a","a*b#comment
- *\\w","JFKdk&kQmYFCpg",[extended,global])),
-?line <<"UeHUaDNFkPaoa">> = iolist_to_binary(re:replace("a","a* b *\\w","UeHU&DNFkP&o&\\1",[extended])),
-?line <<"UeHUaDNFkPaoa">> = iolist_to_binary(re:replace("a","a* b *\\w","UeHU&DNFkP&o&\\1",[extended,
- global])),
-?line <<"Qomltkg
+C","(?<=C\\n)^","lu\\1Y&GJM\\1VrKY&Ikyb\\1",[multiline,global])),
+ <<"siXpqbXaXURhpboidbXaXRg">> = iolist_to_binary(re:replace("bXaX","(?:(?(1)a|b)(X))+","si\\1pq&URhpboid&Rg",[])),
+ <<"siXpqbXaXURhpboidbXaXRg">> = iolist_to_binary(re:replace("bXaX","(?:(?(1)a|b)(X))+","si\\1pq&URhpboid&Rg",[global])),
+ <<"AmhmmmbXXaYYaYAOkoG">> = iolist_to_binary(re:replace("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+","Amhmmm&AOkoG",[])),
+ <<"AmhmmmbXXaYYaYAOkoG">> = iolist_to_binary(re:replace("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+","Amhmmm&AOkoG",[global])),
+ <<"PtXQXEwjfhYaXXaX">> = iolist_to_binary(re:replace("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+","PtXQ\\1Ewjfh",[])),
+ <<"PtXQXEwjfhYaXXaX">> = iolist_to_binary(re:replace("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+","PtXQ\\1Ewjfh",[global])),
+ <<"qpflyycYXuQXaYYaY">> = iolist_to_binary(re:replace("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+","q\\1pflyycY\\1XuQ",[])),
+ <<"qpflyycYXuQXaYYaY">> = iolist_to_binary(re:replace("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+","q\\1pflyycY\\1XuQ",[global])),
+ <<"abc]GgJESKfdixjabc]">> = iolist_to_binary(re:replace("abc]","[[,abc,]+]","&GgJESKf\\1di\\1xj&",[])),
+ <<"abc]GgJESKfdixjabc]">> = iolist_to_binary(re:replace("abc]","[[,abc,]+]","&GgJESKf\\1di\\1xj&",[global])),
+ <<"wa,b]a,b]hta,b]NQ">> = iolist_to_binary(re:replace("a,b]","[[,abc,]+]","w&&ht&N\\1Q",[])),
+ <<"wa,b]a,b]hta,b]NQ">> = iolist_to_binary(re:replace("a,b]","[[,abc,]+]","w&&ht&N\\1Q",[global])),
+ <<"aDIlRnUPE[a,b,c]VAaV[a,b,c]V">> = iolist_to_binary(re:replace("[a,b,c]","[[,abc,]+]","aDIlRnU\\1PE&VAaV&V",[])),
+ <<"aDIlRnUPE[a,b,c]VAaV[a,b,c]V">> = iolist_to_binary(re:replace("[a,b,c]","[[,abc,]+]","aDIlRnU\\1PE&VAaV&V",[global])),
+ <<"AVNFmY XbCfJ B">> = iolist_to_binary(re:replace("A B","(?-x: )","V\\1NFmY\\1&X\\1bC\\1fJ&",[extended])),
+ <<"AVNFmY XbCfJ B">> = iolist_to_binary(re:replace("A B","(?-x: )","V\\1NFmY\\1&X\\1bC\\1fJ&",[extended,
+ global])),
+ <<"ABB">> = iolist_to_binary(re:replace("A # B","(?x)(?-x: \\s*#\\s*)","B",[])),
+ <<"ABB">> = iolist_to_binary(re:replace("A # B","(?x)(?-x: \\s*#\\s*)","B",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x)(?-x: \\s*#\\s*)","&CgSC",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x)(?-x: \\s*#\\s*)","&CgSC",[global])),
+ <<"#">> = iolist_to_binary(re:replace("#","(?x)(?-x: \\s*#\\s*)","&&VXAaYSEf",[])),
+ <<"#">> = iolist_to_binary(re:replace("#","(?x)(?-x: \\s*#\\s*)","&&VXAaYSEf",[global])),
+ <<"A #includeu">> = iolist_to_binary(re:replace("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","&u",[])),
+ <<"A #includeu">> = iolist_to_binary(re:replace("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","&u",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include","KyMhf",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include","KyMhf",[global])),
+ <<"A#include">> = iolist_to_binary(re:replace("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","PFlBaBuo\\1\\1\\1&Uu",[])),
+ <<"A#include">> = iolist_to_binary(re:replace("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","PFlBaBuo\\1\\1\\1&Uu",[global])),
+ <<"A #Include">> = iolist_to_binary(re:replace("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","D\\1SrsbvVOeg\\1OC&Wy",[])),
+ <<"A #Include">> = iolist_to_binary(re:replace("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include","D\\1SrsbvVOeg\\1OC&Wy",[global])),
+ ok.
+run35() ->
+ <<"AYafQSUNhFRibaaabbbbT">> = iolist_to_binary(re:replace("aaabbbb","a*b*\\w","AYafQSUNhFRib&T",[])),
+ <<"AYafQSUNhFRibaaabbbbT">> = iolist_to_binary(re:replace("aaabbbb","a*b*\\w","AYafQSUNhFRib&T",[global])),
+ <<"vKBXMQS">> = iolist_to_binary(re:replace("aaaa","a*b*\\w","vKBXMQS\\1",[])),
+ <<"vKBXMQS">> = iolist_to_binary(re:replace("aaaa","a*b*\\w","vKBXMQS\\1",[global])),
+ <<"atbBVaRw">> = iolist_to_binary(re:replace("a","a*b*\\w","&tbBV&Rw",[])),
+ <<"atbBVaRw">> = iolist_to_binary(re:replace("a","a*b*\\w","&tbBV&Rw",[global])),
+ <<"QDXPfbb">> = iolist_to_binary(re:replace("aaabbbb","a*b?\\w","QDXPf\\1",[])),
+ <<"QDXPfQDXPf">> = iolist_to_binary(re:replace("aaabbbb","a*b?\\w","QDXPf\\1",[global])),
+ <<"qIIJaaaafyqkXQdN">> = iolist_to_binary(re:replace("aaaa","a*b?\\w","qIIJ&fyqkXQ\\1dN",[])),
+ <<"qIIJaaaafyqkXQdN">> = iolist_to_binary(re:replace("aaaa","a*b?\\w","qIIJ&fyqkXQ\\1dN",[global])),
+ <<"aqAJFQ">> = iolist_to_binary(re:replace("a","a*b?\\w","&qAJFQ",[])),
+ <<"aqAJFQ">> = iolist_to_binary(re:replace("a","a*b?\\w","&qAJFQ",[global])),
+ <<"qVNjOTqaaabbbbQfis">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,4}\\w","qV\\1NjOTq\\1&Qf\\1is\\1",[])),
+ <<"qVNjOTqaaabbbbQfis">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,4}\\w","qV\\1NjOTq\\1&Qf\\1is\\1",[global])),
+ <<"caaaaIqaaaa">> = iolist_to_binary(re:replace("aaaa","a*b{0,4}\\w","c&I\\1q&",[])),
+ <<"caaaaIqaaaa">> = iolist_to_binary(re:replace("aaaa","a*b{0,4}\\w","c&I\\1q&",[global])),
+ <<"MJLlapba">> = iolist_to_binary(re:replace("a","a*b{0,4}\\w","MJLl&\\1pb&",[])),
+ <<"MJLlapba">> = iolist_to_binary(re:replace("a","a*b{0,4}\\w","MJLl&\\1pb&",[global])),
+ <<"Uxbbm">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,}\\w","Uxbbm\\1",[])),
+ <<"Uxbbm">> = iolist_to_binary(re:replace("aaabbbb","a*b{0,}\\w","Uxbbm\\1",[global])),
+ <<"fHXfIxomDIMBKtdig">> = iolist_to_binary(re:replace("aaaa","a*b{0,}\\w","f\\1HXfIxomD\\1\\1IMBKtdig",[])),
+ <<"fHXfIxomDIMBKtdig">> = iolist_to_binary(re:replace("aaaa","a*b{0,}\\w","f\\1HXfIxomD\\1\\1IMBKtdig",[global])),
+ <<"hdaYrYD">> = iolist_to_binary(re:replace("a","a*b{0,}\\w","\\1hd&YrYD\\1",[])),
+ <<"hdaYrYD">> = iolist_to_binary(re:replace("a","a*b{0,}\\w","\\1hd&YrYD\\1",[global])),
+ <<"xIjjbHXKSKRKUhwCer">> = iolist_to_binary(re:replace("0a","a*\\d*\\w","xIjjbHXKSKRKUhwCer",[])),
+ <<"xIjjbHXKSKRKUhwCer">> = iolist_to_binary(re:replace("0a","a*\\d*\\w","xIjjbHXKSKRKUhwCer",[global])),
+ <<"aklRHKO">> = iolist_to_binary(re:replace("a","a*\\d*\\w","&klRHK\\1O",[])),
+ <<"aklRHKO">> = iolist_to_binary(re:replace("a","a*\\d*\\w","&klRHK\\1O",[global])),
+ <<"aaaTxVbkRpu">> = iolist_to_binary(re:replace("a","a*b *\\w","&&&TxVbk\\1Rpu",[extended])),
+ <<"aaaTxVbkRpu">> = iolist_to_binary(re:replace("a","a*b *\\w","&&&TxVbk\\1Rpu",[extended,
+ global])),
+ <<"ekWkPj">> = iolist_to_binary(re:replace("a","a*b#comment
+ *\\w","ekWkPj",[extended])),
+ <<"ekWkPj">> = iolist_to_binary(re:replace("a","a*b#comment
+ *\\w","ekWkPj",[extended,global])),
+ <<"XxA">> = iolist_to_binary(re:replace("a","a* b *\\w","XxA",[extended])),
+ <<"XxA">> = iolist_to_binary(re:replace("a","a* b *\\w","XxA",[extended,
+ global])),
+ <<"FL
pqr">> = iolist_to_binary(re:replace("abc=xyz\\
-pqr","^\\w+=.*(\\\\\\n.*)*","\\1Qomltkg",[])),
-?line <<"Qomltkg
+pqr","^\\w+=.*(\\\\\\n.*)*","FL",[])),
+ <<"FL
pqr">> = iolist_to_binary(re:replace("abc=xyz\\
-pqr","^\\w+=.*(\\\\\\n.*)*","\\1Qomltkg",[global])),
-?line <<"abcdVXTDna">> = iolist_to_binary(re:replace("abcd:","(?=(\\w+))\\1:","\\1VXTDna",[])),
-?line <<"abcdVXTDna">> = iolist_to_binary(re:replace("abcd:","(?=(\\w+))\\1:","\\1VXTDna",[global])),
-?line <<"dxHUL">> = iolist_to_binary(re:replace("abcd:","^(?=(\\w+))\\1:","dxHUL",[])),
-?line <<"dxHUL">> = iolist_to_binary(re:replace("abcd:","^(?=(\\w+))\\1:","dxHUL",[global])),
-?line <<"HsivTabcLabcC">> = iolist_to_binary(re:replace("abc","^\\Eabc","H\\1\\1sivT&L&C\\1",[])),
-?line <<"HsivTabcLabcC">> = iolist_to_binary(re:replace("abc","^\\Eabc","H\\1\\1sivT&L&C\\1",[global])),
-?line <<"HaCuWiasgghyJxOoaVMR">> = iolist_to_binary(re:replace("a","^[\\Eabc]","HaCuWi&sgghyJxOo&VMR",[])),
-?line <<"HaCuWiasgghyJxOoaVMR">> = iolist_to_binary(re:replace("a","^[\\Eabc]","HaCuWi&sgghyJxOo&VMR",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\Eabc]","Lc&Jjl&YLfuY",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\Eabc]","Lc&Jjl&YLfuY",[global])),
-?line <<"E">> = iolist_to_binary(re:replace("E","^[\\Eabc]","MS\\1e",[])),
-?line <<"E">> = iolist_to_binary(re:replace("E","^[\\Eabc]","MS\\1e",[global])),
-?line <<"rtpBWkcLbtGo">> = iolist_to_binary(re:replace("b","^[a-\\Ec]","rtpBWkcL&\\1tGo",[])),
-?line <<"rtpBWkcLbtGo">> = iolist_to_binary(re:replace("b","^[a-\\Ec]","rtpBWkcL&\\1tGo",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a-\\Ec]","IC&T\\1r",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a-\\Ec]","IC&T\\1r",[global])),
-?line <<"-">> = iolist_to_binary(re:replace("-","^[a-\\Ec]","CoL\\1S\\1d",[])),
-?line <<"-">> = iolist_to_binary(re:replace("-","^[a-\\Ec]","CoL\\1S\\1d",[global])),
-?line <<"E">> = iolist_to_binary(re:replace("E","^[a-\\Ec]","\\1T",[])),
-?line <<"E">> = iolist_to_binary(re:replace("E","^[a-\\Ec]","\\1T",[global])),
-?line <<"nbUnfwIYbbDEgCj">> = iolist_to_binary(re:replace("b","^[a\\E\\E-\\Ec]","n&Un\\1fwIY\\1&&DEgCj",[])),
-?line <<"nbUnfwIYbbDEgCj">> = iolist_to_binary(re:replace("b","^[a\\E\\E-\\Ec]","n&Un\\1fwIY\\1&&DEgCj",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a\\E\\E-\\Ec]","P\\1VvOTyOaT",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a\\E\\E-\\Ec]","P\\1VvOTyOaT",[global])),
-?line <<"-">> = iolist_to_binary(re:replace("-","^[a\\E\\E-\\Ec]","XYUeR",[])),
-?line <<"-">> = iolist_to_binary(re:replace("-","^[a\\E\\E-\\Ec]","XYUeR",[global])),
-?line <<"E">> = iolist_to_binary(re:replace("E","^[a\\E\\E-\\Ec]","PeFBbxifgd",[])),
-?line <<"E">> = iolist_to_binary(re:replace("E","^[a\\E\\E-\\Ec]","PeFBbxifgd",[global])),
-?line <<"pdeFkRdPoflblrWho">> = iolist_to_binary(re:replace("b","^[\\E\\Qa\\E-\\Qz\\E]+","pdeFkRdPofl&lrWho\\1",[])),
-?line <<"pdeFkRdPoflblrWho">> = iolist_to_binary(re:replace("b","^[\\E\\Qa\\E-\\Qz\\E]+","pdeFkRdPofl&lrWho\\1",[global])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+","mXYgE\\1\\1",[])),
-?line <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+","mXYgE\\1\\1",[global])),
-?line <<"-">> = iolist_to_binary(re:replace("-","^[\\E\\Qa\\E-\\Qz\\E]+","KLdkiRi",[])),
-?line <<"-">> = iolist_to_binary(re:replace("-","^[\\E\\Qa\\E-\\Qz\\E]+","KLdkiRi",[global])),
-?line <<"CAXhbVsbB">> = iolist_to_binary(re:replace("a","^[a\\Q]bc\\E]","CAXh\\1bVsbB",[])),
-?line <<"CAXhbVsbB">> = iolist_to_binary(re:replace("a","^[a\\Q]bc\\E]","CAXh\\1bVsbB",[global])),
-?line <<"YFgJL]GhQVUD]Pbp">> = iolist_to_binary(re:replace("]","^[a\\Q]bc\\E]","YFgJL&GhQVU\\1D&Pbp",[])),
-?line <<"YFgJL]GhQVUD]Pbp">> = iolist_to_binary(re:replace("]","^[a\\Q]bc\\E]","YFgJL&GhQVU\\1D&Pbp",[global])),
-?line <<"waUcGiVGxIcKiccYmjc">> = iolist_to_binary(re:replace("c","^[a\\Q]bc\\E]","waU&GiVGxI&Ki&cYmj&",[])),
-?line <<"waUcGiVGxIcKiccYmjc">> = iolist_to_binary(re:replace("c","^[a\\Q]bc\\E]","waU&GiVGxI&Ki&cYmj&",[global])),
-?line <<"yfaacSB">> = iolist_to_binary(re:replace("a","^[a-\\Q\\E]","yf&\\1acSB",[])),
-?line <<"yfaacSB">> = iolist_to_binary(re:replace("a","^[a-\\Q\\E]","yf&\\1acSB",[global])),
-?line <<"f">> = iolist_to_binary(re:replace("-","^[a-\\Q\\E]","f",[])),
-?line <<"f">> = iolist_to_binary(re:replace("-","^[a-\\Q\\E]","f",[global])),
-?line <<"S">> = iolist_to_binary(re:replace("aaaa","^(a()*)*","S",[])),
-?line <<"S">> = iolist_to_binary(re:replace("aaaa","^(a()*)*","S",[global])),
-?line <<"BPPbuaaaaufIV">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))*)*","BPPbu&ufIV",[])),
-?line <<"BPPbuaaaaufIV">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))*)*","BPPbu&ufIV",[global])),
-?line <<"HBMaaaafDaRVOv">> = iolist_to_binary(re:replace("aaaa","^(a()+)+","HBM&fD\\1RVOv",[])),
-?line <<"HBMaaaafDaRVOv">> = iolist_to_binary(re:replace("aaaa","^(a()+)+","HBM&fD\\1RVOv",[global])),
-?line <<"JvvaaaaaaaaXGaaaawkPaaaaNqM">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))+)+","J\\1vv\\1\\1&&XG&w\\1kP&N\\1qM",[])),
-?line <<"JvvaaaaaaaaXGaaaawkPaaaaNqM">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))+)+","J\\1vv\\1\\1&&XG&w\\1kP&N\\1qM",[global])),
-?line <<"GlQPoT">> = iolist_to_binary(re:replace("abbD","(a){0,3}(?(1)b|(c|))*D","GlQPoT",[])),
-?line <<"GlQPoT">> = iolist_to_binary(re:replace("abbD","(a){0,3}(?(1)b|(c|))*D","GlQPoT",[global])),
-?line <<"ApBccccD">> = iolist_to_binary(re:replace("ccccD","(a){0,3}(?(1)b|(c|))*D","\\1\\1ApB&",[])),
-?line <<"ApBccccD">> = iolist_to_binary(re:replace("ccccD","(a){0,3}(?(1)b|(c|))*D","\\1\\1ApB&",[global])),
-?line <<"BC">> = iolist_to_binary(re:replace("D","(a){0,3}(?(1)b|(c|))*D","BC",[])),
-?line <<"BC">> = iolist_to_binary(re:replace("D","(a){0,3}(?(1)b|(c|))*D","BC",[global])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d","gsB\\1",[])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d","gsB\\1",[global])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4FVLiMHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4hlau">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d","&F\\1VLiMH&hlau",[])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4FVLiMHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4hlau">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d","&F\\1VLiMH&hlau",[global])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d","PkrWG&pe\\1uUD&sBHqm",[])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d","PkrWG&pe\\1uUD&sBHqm",[global])),
-?line <<"KmL">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d","KmL",[])),
-?line <<"KmL">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d","KmL",[global])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d","&HUPIn&&&uUmDmrCoAY",[])),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d","&HUPIn&&&uUmDmrCoAY",[global])),
-?line <<"Q">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d","Q",[])),
-?line <<"Q">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d","Q",[global])),
-?line <<"abcR">> = iolist_to_binary(re:replace("abc","\\Z","R",[])),
-?line <<"abcR">> = iolist_to_binary(re:replace("abc","\\Z","R",[global])),
-?line <<"GwfabcD">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","Gwf&D",[])),
-?line <<"GwfabcD">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","Gwf&D",[global])),
-?line <<"EWJHblKuypyqFbP">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","EWJHblKuypyqFbP",[])),
-?line <<"EWJHblKuypyqFbP">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","EWJHblKuypyqFbP",[global])),
-?line <<"fabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","f",[])),
-?line <<"fabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","f",[global])),
-?line <<"cKyLyGabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","cKyL\\1yG",[])),
-?line <<"cKyLyGabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","cKyL\\1yG",[global])),
-?line <<"abcKoYH">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","\\1\\1Ko\\1&Y&H",[])),
-?line <<"abcKoYH">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","\\1\\1Ko\\1&Y&H",[global])),
-?line <<"abcqWjyPjUTIdbm">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","qWjy\\1PjUTIdbm&",[])),
-?line <<"abcqWjyPjUTIdbm">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","qWjy\\1PjUTIdbm&",[global])),
-?line <<"labcdJabcdNUhUnH">> = iolist_to_binary(re:replace("abcd","(.*(.)?)*","l&J\\1&NUhUnH",[])),
-?line <<"labcdJabcdNUhUnHlJNUhUnH">> = iolist_to_binary(re:replace("abcd","(.*(.)?)*","l&J\\1&NUhUnH",[global])),
-?line <<"onfTbTLJLVnabcd">> = iolist_to_binary(re:replace("abcd","( (A | (?(1)0|) )* )","onfTbTLJLVn",[extended])),
-?line <<"onfTbTLJLVnaonfTbTLJLVnbonfTbTLJLVnconfTbTLJLVndonfTbTLJLVn">> = iolist_to_binary(re:replace("abcd","( (A | (?(1)0|) )* )","onfTbTLJLVn",[extended,
- global])),
-?line <<"rilgPabcd">> = iolist_to_binary(re:replace("abcd","( ( (?(1)0|) )* )","ri\\1&lgP",[extended])),
-?line <<"rilgParilgPbrilgPcrilgPdrilgP">> = iolist_to_binary(re:replace("abcd","( ( (?(1)0|) )* )","ri\\1&lgP",[extended,
+pqr","^\\w+=.*(\\\\\\n.*)*","FL",[global])),
+ <<"KDabcd:abcdSabcd:">> = iolist_to_binary(re:replace("abcd:","(?=(\\w+))\\1:","KD&\\1S&",[])),
+ <<"KDabcd:abcdSabcd:">> = iolist_to_binary(re:replace("abcd:","(?=(\\w+))\\1:","KD&\\1S&",[global])),
+ <<"CFNabcd:xwKNSfsabcd">> = iolist_to_binary(re:replace("abcd:","^(?=(\\w+))\\1:","CFN&xwKNSfs\\1",[])),
+ <<"CFNabcd:xwKNSfsabcd">> = iolist_to_binary(re:replace("abcd:","^(?=(\\w+))\\1:","CFN&xwKNSfs\\1",[global])),
+ <<"UabcWq">> = iolist_to_binary(re:replace("abc","^\\Eabc","U&Wq",[])),
+ <<"UabcWq">> = iolist_to_binary(re:replace("abc","^\\Eabc","U&Wq",[global])),
+ <<"yamyDjNjvdapUq">> = iolist_to_binary(re:replace("a","^[\\Eabc]","y&myDjNjvd&pUq\\1",[])),
+ <<"yamyDjNjvdapUq">> = iolist_to_binary(re:replace("a","^[\\Eabc]","y&myDjNjvd&pUq\\1",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\Eabc]","YWGNdA&XaWp\\1",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\Eabc]","YWGNdA&XaWp\\1",[global])),
+ <<"E">> = iolist_to_binary(re:replace("E","^[\\Eabc]","qtud&GONs\\1W\\1I",[])),
+ <<"E">> = iolist_to_binary(re:replace("E","^[\\Eabc]","qtud&GONs\\1W\\1I",[global])),
+ <<"kj">> = iolist_to_binary(re:replace("b","^[a-\\Ec]","kj",[])),
+ <<"kj">> = iolist_to_binary(re:replace("b","^[a-\\Ec]","kj",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a-\\Ec]","U\\1",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a-\\Ec]","U\\1",[global])),
+ <<"-">> = iolist_to_binary(re:replace("-","^[a-\\Ec]","dluKDBOTsxDtQKaGXQn",[])),
+ <<"-">> = iolist_to_binary(re:replace("-","^[a-\\Ec]","dluKDBOTsxDtQKaGXQn",[global])),
+ <<"E">> = iolist_to_binary(re:replace("E","^[a-\\Ec]","j\\1KKHVDRF&\\1hBX\\1nerh",[])),
+ <<"E">> = iolist_to_binary(re:replace("E","^[a-\\Ec]","j\\1KKHVDRF&\\1hBX\\1nerh",[global])),
+ <<"eU">> = iolist_to_binary(re:replace("b","^[a\\E\\E-\\Ec]","\\1eU",[])),
+ <<"eU">> = iolist_to_binary(re:replace("b","^[a\\E\\E-\\Ec]","\\1eU",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a\\E\\E-\\Ec]","Gp\\1hoe\\1ft",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[a\\E\\E-\\Ec]","Gp\\1hoe\\1ft",[global])),
+ <<"-">> = iolist_to_binary(re:replace("-","^[a\\E\\E-\\Ec]","&\\1&\\1dsAR\\1R&kfYLY&Nx",[])),
+ <<"-">> = iolist_to_binary(re:replace("-","^[a\\E\\E-\\Ec]","&\\1&\\1dsAR\\1R&kfYLY&Nx",[global])),
+ <<"E">> = iolist_to_binary(re:replace("E","^[a\\E\\E-\\Ec]","OmwiowAjJ&dB",[])),
+ <<"E">> = iolist_to_binary(re:replace("E","^[a\\E\\E-\\Ec]","OmwiowAjJ&dB",[global])),
+ <<"bLBVEBlTbNy">> = iolist_to_binary(re:replace("b","^[\\E\\Qa\\E-\\Qz\\E]+","&LBVEBlT&Ny",[])),
+ <<"bLBVEBlTbNy">> = iolist_to_binary(re:replace("b","^[\\E\\Qa\\E-\\Qz\\E]+","&LBVEBlT&Ny",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+","&DGXW&\\1G",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+","&DGXW&\\1G",[global])),
+ <<"-">> = iolist_to_binary(re:replace("-","^[\\E\\Qa\\E-\\Qz\\E]+","uh&tV&",[])),
+ <<"-">> = iolist_to_binary(re:replace("-","^[\\E\\Qa\\E-\\Qz\\E]+","uh&tV&",[global])),
+ <<"IgYyaXYfkYHvCal">> = iolist_to_binary(re:replace("a","^[a\\Q]bc\\E]","IgYy&XYf\\1kYH\\1vC&\\1l",[])),
+ <<"IgYyaXYfkYHvCal">> = iolist_to_binary(re:replace("a","^[a\\Q]bc\\E]","IgYy&XYf\\1kYH\\1vC&\\1l",[global])),
+ <<"DGTyeUFsoeifQI">> = iolist_to_binary(re:replace("]","^[a\\Q]bc\\E]","DGTyeUFsoeifQI",[])),
+ <<"DGTyeUFsoeifQI">> = iolist_to_binary(re:replace("]","^[a\\Q]bc\\E]","DGTyeUFsoeifQI",[global])),
+ <<"cdPJxbdO">> = iolist_to_binary(re:replace("c","^[a\\Q]bc\\E]","&dPJxb\\1dO",[])),
+ <<"cdPJxbdO">> = iolist_to_binary(re:replace("c","^[a\\Q]bc\\E]","&dPJxb\\1dO",[global])),
+ <<"achHbHOkynhnR">> = iolist_to_binary(re:replace("a","^[a-\\Q\\E]","&chHbHOkynhnR",[])),
+ <<"achHbHOkynhnR">> = iolist_to_binary(re:replace("a","^[a-\\Q\\E]","&chHbHOkynhnR",[global])),
+ <<"uu-MgaUIMliYd--">> = iolist_to_binary(re:replace("-","^[a-\\Q\\E]","uu\\1&MgaU\\1IMliYd&&",[])),
+ <<"uu-MgaUIMliYd--">> = iolist_to_binary(re:replace("-","^[a-\\Q\\E]","uu\\1&MgaU\\1IMliYd&&",[global])),
+ <<"CP">> = iolist_to_binary(re:replace("aaaa","^(a()*)*","CP",[])),
+ <<"CP">> = iolist_to_binary(re:replace("aaaa","^(a()*)*","CP",[global])),
+ <<"wQTHtaaaakYek">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))*)*","w\\1QTH\\1\\1t&kYe\\1k",[])),
+ <<"wQTHtaaaakYek">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))*)*","w\\1QTH\\1\\1t&kYe\\1k",[global])),
+ ok.
+run36() ->
+ <<"RGaXfvItI">> = iolist_to_binary(re:replace("aaaa","^(a()+)+","RG\\1XfvItI",[])),
+ <<"RGaXfvItI">> = iolist_to_binary(re:replace("aaaa","^(a()+)+","RG\\1XfvItI",[global])),
+ <<"dMSiHuvxupxlcaaaax">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))+)+","dMSiHuvxupxl\\1c&x",[])),
+ <<"dMSiHuvxupxlcaaaax">> = iolist_to_binary(re:replace("aaaa","^(?:a(?:(?:))+)+","dMSiHuvxupxl\\1c&x",[global])),
+ <<"iP">> = iolist_to_binary(re:replace("abbD","(a){0,3}(?(1)b|(c|))*D","iP",[])),
+ <<"iP">> = iolist_to_binary(re:replace("abbD","(a){0,3}(?(1)b|(c|))*D","iP",[global])),
+ <<"ccccDXbTvQpvdoaW">> = iolist_to_binary(re:replace("ccccD","(a){0,3}(?(1)b|(c|))*D","&XbTvQ\\1p\\1vd\\1o\\1\\1\\1aW",[])),
+ <<"ccccDXbTvQpvdoaW">> = iolist_to_binary(re:replace("ccccD","(a){0,3}(?(1)b|(c|))*D","&XbTvQ\\1p\\1vd\\1o\\1\\1\\1aW",[global])),
+ <<"RVoDDTkMDjhW">> = iolist_to_binary(re:replace("D","(a){0,3}(?(1)b|(c|))*D","RVo&&TkM&jhW",[])),
+ <<"RVoDDTkMDjhW">> = iolist_to_binary(re:replace("D","(a){0,3}(?(1)b|(c|))*D","RVo&&TkM&jhW",[global])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d","&\\1DGFkfxXGJ\\1yJ",[])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d","&\\1DGFkfxXGJ\\1yJ",[global])),
+ <<"Kaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4GiaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4jWNATt">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d","K&GiaQ&jWNATt",[])),
+ <<"Kaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4GiaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4jWNATt">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d","K&GiaQ&jWNATt",[global])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d","qHVMyR\\1g\\1",[])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d","qHVMyR\\1g\\1",[global])),
+ <<"kGFBeTsPIf">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d","kGFBeTsPI\\1f",[])),
+ <<"kGFBeTsPIf">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d","kGFBeTsPI\\1f",[global])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d","Yx",[])),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d","Yx",[global])),
+ <<"wkl">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d","wkl",[])),
+ <<"wkl">> = iolist_to_binary(re:replace("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d","wkl",[global])),
+ <<"abcqXmkEhjC">> = iolist_to_binary(re:replace("abc","\\Z","qXmkEhjC",[])),
+ <<"abcqXmkEhjC">> = iolist_to_binary(re:replace("abc","\\Z","qXmkEhjC",[global])),
+ <<"RdSYAact">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","RdSYAact",[])),
+ <<"RdSYAact">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","RdSYAact",[global])),
+ <<"JvTabcqFTcnkmyFJ">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","\\1JvT&qFTcnk\\1my\\1FJ",[])),
+ <<"JvTabcqFTcnkmyFJ">> = iolist_to_binary(re:replace("abc","^(?s)(?>.*)(?<!\\n)","\\1JvT&qFTcnk\\1my\\1FJ",[global])),
+ <<"cqXXOeFFGVUWkMabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","cqXXOeFF\\1GVUW\\1kM",[])),
+ <<"cqXXOeFFGVUWkMabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","cqXXOeFF\\1GVUW\\1kM",[global])),
+ <<"JbxrWfegLobSfGKabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","\\1Jbx&rWfe&gLobSfGK",[])),
+ <<"JbxrWfegLobSfGKabc">> = iolist_to_binary(re:replace("abc","^(?![^\\n]*\\n\\z)","\\1Jbx&rWfe&gLobSfGK",[global])),
+ <<"abceDUDjJoFtrgMYDo">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","eDUDjJoFtrgMYD&o",[])),
+ <<"abceDUDjJoFtrgMYDo">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","eDUDjJoFtrgMYD&o",[global])),
+ <<"abcL">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","L",[])),
+ <<"abcL">> = iolist_to_binary(re:replace("abc","\\z(?<!\\n)","L",[global])),
+ <<"abcdddXku">> = iolist_to_binary(re:replace("abcd","(.*(.)?)*","&dd\\1\\1Xku",[])),
+ <<"abcdddXkuddXku">> = iolist_to_binary(re:replace("abcd","(.*(.)?)*","&dd\\1\\1Xku",[global])),
+ <<"pkdLVDscUDDEBUBabcd">> = iolist_to_binary(re:replace("abcd","( (A | (?(1)0|) )* )","pkd&L&VD&scUDDEBUB",[extended])),
+ <<"pkdLVDscUDDEBUBapkdLVDscUDDEBUBbpkdLVDscUDDEBUBcpkdLVDscUDDEBUBdpkdLVDscUDDEBUB">> = iolist_to_binary(re:replace("abcd","( (A | (?(1)0|) )* )","pkd&L&VD&scUDDEBUB",[extended,
+ global])),
+ <<"AuDgWsdmnqYhabcd">> = iolist_to_binary(re:replace("abcd","( ( (?(1)0|) )* )","AuDgW&s&dm&nqYh",[extended])),
+ <<"AuDgWsdmnqYhaAuDgWsdmnqYhbAuDgWsdmnqYhcAuDgWsdmnqYhdAuDgWsdmnqYh">> = iolist_to_binary(re:replace("abcd","( ( (?(1)0|) )* )","AuDgW&s&dm&nqYh",[extended,
+ global])),
+ <<"efinTcnmBlVFabcd">> = iolist_to_binary(re:replace("abcd","( (?(1)0|)* )","efinTc&nmB&\\1lV\\1F",[extended])),
+ <<"efinTcnmBlVFaefinTcnmBlVFbefinTcnmBlVFcefinTcnmBlVFdefinTcnmBlVF">> = iolist_to_binary(re:replace("abcd","( (?(1)0|)* )","efinTc&nmB&\\1lV\\1F",[extended,
+ global])),
+ <<"EDiUXiAlYBAmCeNc">> = iolist_to_binary(re:replace("a]","[[:abcd:xyz]]","EDiUXiAlYBA\\1mCeNc",[])),
+ <<"EDiUXiAlYBAmCeNc">> = iolist_to_binary(re:replace("a]","[[:abcd:xyz]]","EDiUXiAlYBA\\1mCeNc",[global])),
+ <<"k:]h">> = iolist_to_binary(re:replace(":]","[[:abcd:xyz]]","k&h",[])),
+ <<"k:]h">> = iolist_to_binary(re:replace(":]","[[:abcd:xyz]]","k&h",[global])),
+ <<"hwNfUgfOoCtFayhAXX">> = iolist_to_binary(re:replace("a","[abc[:x\\]pqr]","hwNfUgfOo\\1CtF&yhA\\1XX",[])),
+ <<"hwNfUgfOoCtFayhAXX">> = iolist_to_binary(re:replace("a","[abc[:x\\]pqr]","hwNfUgfOo\\1CtF&yhA\\1XX",[global])),
+ <<"">> = iolist_to_binary(re:replace("[","[abc[:x\\]pqr]","\\1\\1",[])),
+ <<"">> = iolist_to_binary(re:replace("[","[abc[:x\\]pqr]","\\1\\1",[global])),
+ <<"fWMiJLaBnsaYQ">> = iolist_to_binary(re:replace(":","[abc[:x\\]pqr]","fWMiJLaBns\\1aYQ",[])),
+ <<"fWMiJLaBnsaYQ">> = iolist_to_binary(re:replace(":","[abc[:x\\]pqr]","fWMiJLaBns\\1aYQ",[global])),
+ <<"IlPjDF">> = iolist_to_binary(re:replace("]","[abc[:x\\]pqr]","IlPjDF\\1",[])),
+ <<"IlPjDF">> = iolist_to_binary(re:replace("]","[abc[:x\\]pqr]","IlPjDF\\1",[global])),
+ <<"jXFpSOncoxfPi">> = iolist_to_binary(re:replace("p","[abc[:x\\]pqr]","\\1jX\\1F&SOncoxf\\1Pi",[])),
+ <<"jXFpSOncoxfPi">> = iolist_to_binary(re:replace("p","[abc[:x\\]pqr]","\\1jX\\1F&SOncoxf\\1Pi",[global])),
+ <<"fooabcfoo">> = iolist_to_binary(re:replace("fooabcfoo",".*[op][xyz]","rU&wHuSyHLW\\1WUJxg\\1",[])),
+ <<"fooabcfoo">> = iolist_to_binary(re:replace("fooabcfoo",".*[op][xyz]","rU&wHuSyHLW\\1WUJxg\\1",[global])),
+ <<"Yadc">> = iolist_to_binary(re:replace("adc","(?(?=.*b)b|^)","\\1\\1Y",[])),
+ <<"Yadc">> = iolist_to_binary(re:replace("adc","(?(?=.*b)b|^)","\\1\\1Y",[global])),
+ <<"asQWunbuTsJvhIUbTxKxbc">> = iolist_to_binary(re:replace("abc","(?(?=.*b)b|^)","sQWun&uTsJvhIU&TxKx&",[])),
+ <<"asQWunbuTsJvhIUbTxKxbc">> = iolist_to_binary(re:replace("abc","(?(?=.*b)b|^)","sQWun&uTsJvhIU&TxKx&",[global])),
+ <<"WsShpCMbadc">> = iolist_to_binary(re:replace("adc","(?(?=^.*b)b|^)","WsShp\\1\\1C\\1Mb",[])),
+ <<"WsShpCMbadc">> = iolist_to_binary(re:replace("adc","(?(?=^.*b)b|^)","WsShp\\1\\1C\\1Mb",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(?(?=^.*b)b|^)","PkFnM\\1TJjij\\1s",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(?(?=^.*b)b|^)","PkFnM\\1TJjij\\1s",[global])),
+ <<"QgracuqfskDadc">> = iolist_to_binary(re:replace("adc","(?(?=.*b)b|^)*","Qg\\1r\\1\\1acuqfskD\\1&",[])),
+ <<"QgracuqfskDaQgracuqfskDdQgracuqfskDcQgracuqfskD">> = iolist_to_binary(re:replace("adc","(?(?=.*b)b|^)*","Qg\\1r\\1\\1acuqfskD\\1&",[global])),
+ <<"NOaxcgWJQdJabc">> = iolist_to_binary(re:replace("abc","(?(?=.*b)b|^)*","NOaxc\\1\\1gWJQdJ&",[])),
+ <<"NOaxcgWJQdJaNOaxcgWJQdJbNOaxcgWJQdJcNOaxcgWJQdJ">> = iolist_to_binary(re:replace("abc","(?(?=.*b)b|^)*","NOaxc\\1\\1gWJQdJ&",[global])),
+ ok.
+run37() ->
+ <<"egMccJuvVmsJadc">> = iolist_to_binary(re:replace("adc","(?(?=.*b)b|^)+","egMccJu&\\1vVmsJ",[])),
+ <<"egMccJuvVmsJadc">> = iolist_to_binary(re:replace("adc","(?(?=.*b)b|^)+","egMccJu&\\1vVmsJ",[global])),
+ <<"awbKLc">> = iolist_to_binary(re:replace("abc","(?(?=.*b)b|^)+","wbKL",[])),
+ <<"awbKLc">> = iolist_to_binary(re:replace("abc","(?(?=.*b)b|^)+","wbKL",[global])),
+ <<"aaOKbMsgbwbYMvqpaKc">> = iolist_to_binary(re:replace("abc","(?(?=b).*b|^d)","aOK\\1&Msg&w&YMvqpaK",[])),
+ <<"aaOKbMsgbwbYMvqpaKc">> = iolist_to_binary(re:replace("abc","(?(?=b).*b|^d)","aOK\\1&Msg&w&YMvqpaK",[global])),
+ <<"deMQjInIpkdMc">> = iolist_to_binary(re:replace("abc","(?(?=.*b).*b|^d)","deMQjInI\\1\\1pk\\1dM",[])),
+ <<"deMQjInIpkdMc">> = iolist_to_binary(re:replace("abc","(?(?=.*b).*b|^d)","deMQjInI\\1\\1pk\\1dM",[global])),
+ <<"xONBt%ab%fkt">> = iolist_to_binary(re:replace("%ab%","^%((?(?=[a])[^%])|b)*%$","xONBt\\1&fkt",[])),
+ <<"xONBt%ab%fkt">> = iolist_to_binary(re:replace("%ab%","^%((?(?=[a])[^%])|b)*%$","xONBt\\1&fkt",[global])),
+ <<"XtGNvTytylTOX">> = iolist_to_binary(re:replace("XabX","(?i)a(?-i)b|c","tGN\\1\\1vT\\1yty\\1lTO",[])),
+ <<"XtGNvTytylTOX">> = iolist_to_binary(re:replace("XabX","(?i)a(?-i)b|c","tGN\\1\\1vT\\1yty\\1lTO",[global])),
+ <<"XAbMBAbVAbatgNrMNMDX">> = iolist_to_binary(re:replace("XAbX","(?i)a(?-i)b|c","&MB\\1&V&\\1atgNrMNMD",[])),
+ <<"XAbMBAbVAbatgNrMNMDX">> = iolist_to_binary(re:replace("XAbX","(?i)a(?-i)b|c","&MB\\1&V&\\1atgNrMNMD",[global])),
+ <<"CIeFFRMtpcC">> = iolist_to_binary(re:replace("CcC","(?i)a(?-i)b|c","IeFFRMtp&",[])),
+ <<"CIeFFRMtpcC">> = iolist_to_binary(re:replace("CcC","(?i)a(?-i)b|c","IeFFRMtp&",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?i)a(?-i)b|c","sJoTR\\1agT&QVpj&oo",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?i)a(?-i)b|c","sJoTR\\1agT&QVpj&oo",[global])),
+ <<"XABX">> = iolist_to_binary(re:replace("XABX","(?i)a(?-i)b|c","Bx\\1L&vYQ&o",[])),
+ <<"XABX">> = iolist_to_binary(re:replace("XABX","(?i)a(?-i)b|c","Bx\\1L&vYQ&o",[global])),
+ <<"bPwO">> = iolist_to_binary(re:replace("
+ ","[\\x00-\\xff\\s]+","bPwO",[])),
+ <<"bPwO">> = iolist_to_binary(re:replace("
+ ","[\\x00-\\xff\\s]+","bPwO",[global])),
+ <<"tNnUXVoKd">> = iolist_to_binary(re:replace("?","^\\c","tNnUXVoKd\\1",[])),
+ <<"tNnUXVoKd">> = iolist_to_binary(re:replace("?","^\\c","tNnUXVoKd\\1",[global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1","Xcx",[caseless])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1","Xcx",[caseless,
+ global])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1","yV\\1&bIy&bf",[])),
+ <<"abc">> = iolist_to_binary(re:replace("abc","(abc)\\1","yV\\1&bIy&bf",[global])),
+ <<"12llNQ12abc">> = iolist_to_binary(re:replace("12abc","[^a]*","&llNQ\\1&\\1",[caseless])),
+ <<"12llNQ12llNQabcllNQbcllNQ">> = iolist_to_binary(re:replace("12abc","[^a]*","&llNQ\\1&\\1",[caseless,
+ global])),
+ <<"gDpABC">> = iolist_to_binary(re:replace("12ABC","[^a]*","gDp",[caseless])),
+ <<"gDpgDpAgDpgDp">> = iolist_to_binary(re:replace("12ABC","[^a]*","gDp",[caseless,
+ global])),
+ <<"DTxabc">> = iolist_to_binary(re:replace("12abc","[^a]*+","D\\1T\\1x",[caseless])),
+ <<"DTxDTxaDTxDTx">> = iolist_to_binary(re:replace("12abc","[^a]*+","D\\1T\\1x",[caseless,
+ global])),
+ <<"KJ12jqgNXmTv12lyEP12SABC">> = iolist_to_binary(re:replace("12ABC","[^a]*+","KJ&jqgNXm\\1Tv&lyE\\1P&S",[caseless])),
+ <<"KJ12jqgNXmTv12lyEP12SKJjqgNXmTvlyEPSAKJBCjqgNXmTvBClyEPBCSKJjqgNXmTvlyEPS">> = iolist_to_binary(re:replace("12ABC","[^a]*+","KJ&jqgNXm\\1Tv&lyE\\1P&S",[caseless,
+ global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","[^a]*?X","Px&vXsBEFCysfMhDqV\\1P",[caseless])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","[^a]*?X","Px&vXsBEFCysfMhDqV\\1P",[caseless,
+ global])),
+ <<"12abc">> = iolist_to_binary(re:replace("12abc","[^a]*?X","q\\1a\\1jtOoCrLWAYsie",[caseless])),
+ <<"12abc">> = iolist_to_binary(re:replace("12abc","[^a]*?X","q\\1a\\1jtOoCrLWAYsie",[caseless,
global])),
-?line <<"LjAUxSNabcd">> = iolist_to_binary(re:replace("abcd","( (?(1)0|)* )","L\\1jAUxSN\\1",[extended])),
-?line <<"LjAUxSNaLjAUxSNbLjAUxSNcLjAUxSNdLjAUxSN">> = iolist_to_binary(re:replace("abcd","( (?(1)0|)* )","L\\1jAUxSN\\1",[extended,
+ <<"12ABC">> = iolist_to_binary(re:replace("12ABC","[^a]*?X","LCDXsQB\\1&fP&vNDlCH\\1",[caseless])),
+ <<"12ABC">> = iolist_to_binary(re:replace("12ABC","[^a]*?X","LCDXsQB\\1&fP&vNDlCH\\1",[caseless,
+ global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","[^a]+?X","g&\\1\\1wRCp",[caseless])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","[^a]+?X","g&\\1\\1wRCp",[caseless,
+ global])),
+ <<"12abc">> = iolist_to_binary(re:replace("12abc","[^a]+?X","PO&\\1NINrfwP&\\1AcHiEa",[caseless])),
+ <<"12abc">> = iolist_to_binary(re:replace("12abc","[^a]+?X","PO&\\1NINrfwP&\\1AcHiEa",[caseless,
+ global])),
+ <<"12ABC">> = iolist_to_binary(re:replace("12ABC","[^a]+?X","LesucI&TIspq&O\\1AkOp",[caseless])),
+ <<"12ABC">> = iolist_to_binary(re:replace("12ABC","[^a]+?X","LesucI&TIspq&O\\1AkOp",[caseless,
+ global])),
+ <<"12arSestlSfXbcX">> = iolist_to_binary(re:replace("12aXbcX","[^a]?X","\\1rSestlSf\\1&",[caseless])),
+ <<"12arSestlSfXbrSestlSfcX">> = iolist_to_binary(re:replace("12aXbcX","[^a]?X","\\1rSestlSf\\1&",[caseless,
+ global])),
+ <<"12AVBtPBCX">> = iolist_to_binary(re:replace("12AXBCX","[^a]?X","VBtP",[caseless])),
+ <<"12AVBtPBVBtP">> = iolist_to_binary(re:replace("12AXBCX","[^a]?X","VBtP",[caseless,
+ global])),
+ <<"BCXcYCXS">> = iolist_to_binary(re:replace("BCX","[^a]?X","&cY&S\\1",[caseless])),
+ <<"BCXcYCXS">> = iolist_to_binary(re:replace("BCX","[^a]?X","&cY&S\\1",[caseless,
+ global])),
+ <<"12aMPavbiGCbcX">> = iolist_to_binary(re:replace("12aXbcX","[^a]??X","MPavbi\\1GC",[caseless])),
+ <<"12aMPavbiGCbMPavbiGC">> = iolist_to_binary(re:replace("12aXbcX","[^a]??X","MPavbi\\1GC",[caseless,
+ global])),
+ <<"12AOTaIyfCCPBCX">> = iolist_to_binary(re:replace("12AXBCX","[^a]??X","OTaIy\\1fC\\1CP",[caseless])),
+ <<"12AOTaIyfCCPBOTaIyfCCP">> = iolist_to_binary(re:replace("12AXBCX","[^a]??X","OTaIy\\1fC\\1CP",[caseless,
+ global])),
+ <<"BCXlQqcJ">> = iolist_to_binary(re:replace("BCX","[^a]??X","&\\1l\\1QqcJ",[caseless])),
+ <<"BCXlQqcJ">> = iolist_to_binary(re:replace("BCX","[^a]??X","&\\1l\\1QqcJ",[caseless,
+ global])),
+ <<"12aXbEPWWBEweltvRcX">> = iolist_to_binary(re:replace("12aXbcX","[^a]?+X","EPWWBEweltvR&",[caseless])),
+ <<"12aXbEPWWBEweltvRcX">> = iolist_to_binary(re:replace("12aXbcX","[^a]?+X","EPWWBEweltvR&",[caseless,
+ global])),
+ <<"12AXBLDKxRfr">> = iolist_to_binary(re:replace("12AXBCX","[^a]?+X","LD\\1KxRfr",[caseless])),
+ <<"12AXBLDKxRfr">> = iolist_to_binary(re:replace("12AXBCX","[^a]?+X","LD\\1KxRfr",[caseless,
+ global])),
+ <<"BaWkje">> = iolist_to_binary(re:replace("BCX","[^a]?+X","aWkje",[caseless])),
+ <<"BaWkje">> = iolist_to_binary(re:replace("BCX","[^a]?+X","aWkje",[caseless,
+ global])),
+ <<"alsDrlAVvgef">> = iolist_to_binary(re:replace("abcdef","[^a]{2,3}","lsDrlAVvg",[caseless])),
+ <<"alsDrlAVvglsDrlAVvg">> = iolist_to_binary(re:replace("abcdef","[^a]{2,3}","lsDrlAVvg",[caseless,
+ global])),
+ <<"AWnBBhxrEF">> = iolist_to_binary(re:replace("ABCDEF","[^a]{2,3}","WnBBhxr\\1",[caseless])),
+ <<"AWnBBhxrWnBBhxr">> = iolist_to_binary(re:replace("ABCDEF","[^a]{2,3}","WnBBhxr\\1",[caseless,
+ global])),
+ <<"aQlBRWDWodef">> = iolist_to_binary(re:replace("abcdef","[^a]{2,3}?","QlBRWDWo",[caseless])),
+ <<"aQlBRWDWoQlBRWDWof">> = iolist_to_binary(re:replace("abcdef","[^a]{2,3}?","QlBRWDWo",[caseless,
+ global])),
+ <<"ADysgJSywfPBCKKUUWYDEF">> = iolist_to_binary(re:replace("ABCDEF","[^a]{2,3}?","DysgJSywfP\\1&KKUUWY",[caseless])),
+ <<"ADysgJSywfPBCKKUUWYDysgJSywfPDEKKUUWYF">> = iolist_to_binary(re:replace("ABCDEF","[^a]{2,3}?","DysgJSywfP\\1&KKUUWY",[caseless,
+ global])),
+ <<"aWjgnJGWef">> = iolist_to_binary(re:replace("abcdef","[^a]{2,3}+","WjgnJ\\1GW",[caseless])),
+ <<"aWjgnJGWWjgnJGW">> = iolist_to_binary(re:replace("abcdef","[^a]{2,3}+","WjgnJ\\1GW",[caseless,
+ global])),
+ <<"ArlhBCDwHgMHHwjEiAEF">> = iolist_to_binary(re:replace("ABCDEF","[^a]{2,3}+","rlh&wHgMHHwjEiA",[caseless])),
+ <<"ArlhBCDwHgMHHwjEiArlhEFwHgMHHwjEiA">> = iolist_to_binary(re:replace("ABCDEF","[^a]{2,3}+","rlh&wHgMHHwjEiA",[caseless,
+ global])),
+ <<"JdTSxtdMYhvAoaO">> = iolist_to_binary(re:replace("Z","((a|)+)+Z","JdTSxtdMYhv\\1AoaO",[])),
+ <<"JdTSxtdMYhvAoaO">> = iolist_to_binary(re:replace("Z","((a|)+)+Z","JdTSxtdMYhv\\1AoaO",[global])),
+ ok.
+run38() ->
+ <<"dAWFejmOJacpU">> = iolist_to_binary(re:replace("ac","(a)b|(a)c","dA\\1\\1WFejmOJ&pU",[])),
+ <<"dAWFejmOJacpU">> = iolist_to_binary(re:replace("ac","(a)b|(a)c","dA\\1\\1WFejmOJ&pU",[global])),
+ <<"XacWp">> = iolist_to_binary(re:replace("ac","(?>(a))b|(a)c","X&Wp",[])),
+ <<"XacWp">> = iolist_to_binary(re:replace("ac","(?>(a))b|(a)c","X&Wp",[global])),
+ <<"VypacbfdlXdCGJofacdRt">> = iolist_to_binary(re:replace("ac","(?=(a))ab|(a)c","Vyp&bfdlXdCGJo\\1f&dRt",[])),
+ <<"VypacbfdlXdCGJofacdRt">> = iolist_to_binary(re:replace("ac","(?=(a))ab|(a)c","Vyp&bfdlXdCGJo\\1f&dRt",[global])),
+ <<"soXacAL">> = iolist_to_binary(re:replace("ac","((?>(a))b|(a)c)","soX&AL",[])),
+ <<"soXacAL">> = iolist_to_binary(re:replace("ac","((?>(a))b|(a)c)","soX&AL",[global])),
+ <<"ackacTacsYVlYVjKacCEL">> = iolist_to_binary(re:replace("ac","((?>(a))b|(a)c)++","&k\\1T&sYVlYVjK&CEL",[])),
+ <<"ackacTacsYVlYVjKacCEL">> = iolist_to_binary(re:replace("ac","((?>(a))b|(a)c)++","&k\\1T&sYVlYVjK&CEL",[global])),
+ <<"qiUiactJ">> = iolist_to_binary(re:replace("ac","(?:(?>(a))b|(a)c)++","qiUi&tJ\\1",[])),
+ <<"qiUiactJ">> = iolist_to_binary(re:replace("ac","(?:(?>(a))b|(a)c)++","qiUi&tJ\\1",[global])),
+ <<"KkacqeX">> = iolist_to_binary(re:replace("ac","(?=(?>(a))b|(a)c)(..)","Kk&qeX",[])),
+ <<"KkacqeX">> = iolist_to_binary(re:replace("ac","(?=(?>(a))b|(a)c)(..)","Kk&qeX",[global])),
+ <<"dtNNac">> = iolist_to_binary(re:replace("ac","(?>(?>(a))b|(a)c)","dtNN&",[])),
+ <<"dtNNac">> = iolist_to_binary(re:replace("ac","(?>(?>(a))b|(a)c)","dtNN&",[global])),
+ <<"maaaabaaabaababGEUEgWaaaabaaabaababRaaaabaaabaababYtLSDKaaaabaaabaababA">> = iolist_to_binary(re:replace("aaaabaaabaabab","((?>(a+)b)+(aabab))","m&GEUEgW\\1R&YtLSDK\\1A",[])),
+ <<"maaaabaaabaababGEUEgWaaaabaaabaababRaaaabaaabaababYtLSDKaaaabaaabaababA">> = iolist_to_binary(re:replace("aaaabaaabaabab","((?>(a+)b)+(aabab))","m&GEUEgW\\1R&YtLSDK\\1A",[global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","(?>a+|ab)+?c","hd\\1shPpIuFmAa\\1aJk&q",[])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","(?>a+|ab)+?c","hd\\1shPpIuFmAa\\1aJk&q",[global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","(?>a+|ab)+c","ekKjsw&",[])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","(?>a+|ab)+c","ekKjsw&",[global])),
+ <<"KRQcpPbvHhi">> = iolist_to_binary(re:replace("aabc","(?:a+|ab)+c","KRQcpPbvHhi",[])),
+ <<"KRQcpPbvHhi">> = iolist_to_binary(re:replace("aabc","(?:a+|ab)+c","KRQcpPbvHhi",[global])),
+ <<"iamaarURhafOTI">> = iolist_to_binary(re:replace("a","(?(?=(a))a)","i&m&&rURh\\1fOTI",[])),
+ <<"iamaarURhafOTIimrURhfOTI">> = iolist_to_binary(re:replace("a","(?(?=(a))a)","i&m&&rURh\\1fOTI",[global])),
+ <<"aba">> = iolist_to_binary(re:replace("ab","(?(?=(a))a)(b)","&a",[])),
+ <<"aba">> = iolist_to_binary(re:replace("ab","(?(?=(a))a)(b)","&a",[global])),
+ <<"aaaabc">> = iolist_to_binary(re:replace("aaaabc","^(?:a|ab)++c","Siik\\1BdqOkNdp\\1",[])),
+ <<"aaaabc">> = iolist_to_binary(re:replace("aaaabc","^(?:a|ab)++c","Siik\\1BdqOkNdp\\1",[global])),
+ <<"aaaabc">> = iolist_to_binary(re:replace("aaaabc","^(?>a|ab)++c","LpFM&EcaXt\\1b\\1",[])),
+ <<"aaaabc">> = iolist_to_binary(re:replace("aaaabc","^(?>a|ab)++c","LpFM&EcaXt\\1b\\1",[global])),
+ <<"FNLSSaaaabcr">> = iolist_to_binary(re:replace("aaaabc","^(?:a|ab)+c","FNLSS&r",[])),
+ <<"FNLSSaaaabcr">> = iolist_to_binary(re:replace("aaaabc","^(?:a|ab)+c","FNLSS&r",[global])),
+ <<"TxGxyzQbpeqVTpoEkrYqxyz">> = iolist_to_binary(re:replace("xyz","(?=abc){0}xyz","TxG\\1&QbpeqVTpoEkrYq&",[])),
+ <<"TxGxyzQbpeqVTpoEkrYqxyz">> = iolist_to_binary(re:replace("xyz","(?=abc){0}xyz","TxG\\1&QbpeqVTpoEkrYq&",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?=abc){1}xyz","cR\\1y\\1Q\\1&okEra\\1h",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?=abc){1}xyz","cR\\1y\\1Q\\1&okEra\\1h",[global])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","(?=abc){1}xyz","reg\\1lU\\1RfQVPuOHJA\\1Cq",[])),
+ <<"xyz">> = iolist_to_binary(re:replace("xyz","(?=abc){1}xyz","reg\\1lU\\1RfQVPuOHJA\\1Cq",[global])),
+ <<"xcPaaLxpkaXVHb">> = iolist_to_binary(re:replace("ab","(?=(a))?.","xcP\\1aLxpkaXVH",[])),
+ <<"xcPaaLxpkaXVHxcPaLxpkaXVH">> = iolist_to_binary(re:replace("ab","(?=(a))?.","xcP\\1aLxpkaXVH",[global])),
+ <<"sOiVGLUSbixjsOGc">> = iolist_to_binary(re:replace("bc","(?=(a))?.","s\\1OiVGLUS&ixjsOG",[])),
+ <<"sOiVGLUSbixjsOGsOiVGLUScixjsOG">> = iolist_to_binary(re:replace("bc","(?=(a))?.","s\\1OiVGLUS&ixjsOG",[global])),
+ ok.
+run39() ->
+ <<"VDuEPkfWcTxyeUaBWb">> = iolist_to_binary(re:replace("ab","(?=(a))??.","VDuEPkfWcTxyeU&BW",[])),
+ <<"VDuEPkfWcTxyeUaBWVDuEPkfWcTxyeUbBW">> = iolist_to_binary(re:replace("ab","(?=(a))??.","VDuEPkfWcTxyeU&BW",[global])),
+ <<"mbbCUVsGVbqKPXic">> = iolist_to_binary(re:replace("bc","(?=(a))??.","m&bCUVsGVbqKPXi",[])),
+ <<"mbbCUVsGVbqKPXimcbCUVsGVbqKPXi">> = iolist_to_binary(re:replace("bc","(?=(a))??.","m&bCUVsGVbqKPXi",[global])),
+ <<"vckgammon">> = iolist_to_binary(re:replace("backgammon","^(?=(a)){0}b(?1)","v",[])),
+ <<"vckgammon">> = iolist_to_binary(re:replace("backgammon","^(?=(a)){0}b(?1)","v",[global])),
+ <<"jwhBBBtpN">> = iolist_to_binary(re:replace("abd","^(?=(?1))?[az]([abc])d","jwhBBBtpN",[])),
+ <<"jwhBBBtpN">> = iolist_to_binary(re:replace("abd","^(?=(?1))?[az]([abc])d","jwhBBBtpN",[global])),
+ <<"zcdBcKYPcEyoXnxVFxx">> = iolist_to_binary(re:replace("zcdxx","^(?=(?1))?[az]([abc])d","&B\\1KYPcEyoXnxVF",[])),
+ <<"zcdBcKYPcEyoXnxVFxx">> = iolist_to_binary(re:replace("zcdxx","^(?=(?1))?[az]([abc])d","&B\\1KYPcEyoXnxVF",[global])),
+ <<"eaaaaacuRrwVlw">> = iolist_to_binary(re:replace("aaaaa","^(?!a){0}\\w+","e&cuR\\1rwVlw",[])),
+ <<"eaaaaacuRrwVlw">> = iolist_to_binary(re:replace("aaaaa","^(?!a){0}\\w+","e&cuR\\1rwVlw",[global])),
+ <<"abcrjCWbwUOujlotBJKabcTxyz">> = iolist_to_binary(re:replace("abcxyz","(?<=(abc))?xyz","rjCWbwUOujlotBJK\\1T&",[])),
+ <<"abcrjCWbwUOujlotBJKabcTxyz">> = iolist_to_binary(re:replace("abcxyz","(?<=(abc))?xyz","rjCWbwUOujlotBJK\\1T&",[global])),
+ <<"pqrMKeGrgiv">> = iolist_to_binary(re:replace("pqrxyz","(?<=(abc))?xyz","MKeGrgi\\1v",[])),
+ <<"pqrMKeGrgiv">> = iolist_to_binary(re:replace("pqrxyz","(?<=(abc))?xyz","MKeGrgi\\1v",[global])),
+ <<"RxQ">> = iolist_to_binary(re:replace("ggg<<<aaa>>>","^[\\g<a>]+","\\1RxQ",[])),
+ <<"RxQ">> = iolist_to_binary(re:replace("ggg<<<aaa>>>","^[\\g<a>]+","\\1RxQ",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\g<a>]+","dH",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^[\\g<a>]+","dH",[global])),
+ <<"\\ga">> = iolist_to_binary(re:replace("\\ga","^[\\g<a>]+","Uga",[])),
+ <<"\\ga">> = iolist_to_binary(re:replace("\\ga","^[\\g<a>]+","Uga",[global])),
+ <<"kGIjWAmWxlixyz">> = iolist_to_binary(re:replace("gggagagaxyz","^[\\ga]+","kGIjWAmWxli",[])),
+ <<"kGIjWAmWxlixyz">> = iolist_to_binary(re:replace("gggagagaxyz","^[\\ga]+","kGIjWAmWxli",[global])),
+ <<"aaaa444:::osjAfaaaa444:::myeRjZ">> = iolist_to_binary(re:replace("aaaa444:::Z","^[:a[:digit:]]+","&\\1osjAf&my\\1e\\1Rj",[])),
+ <<"aaaa444:::osjAfaaaa444:::myeRjZ">> = iolist_to_binary(re:replace("aaaa444:::Z","^[:a[:digit:]]+","&\\1osjAf&my\\1e\\1Rj",[global])),
+ <<"qSUaaaa444:::bbbthaaaa444:::bbboRHpyZ">> = iolist_to_binary(re:replace("aaaa444:::bbbZ","^[:a[:digit:]:b]+","qSU&th&oR\\1Hpy",[])),
+ <<"qSUaaaa444:::bbbthaaaa444:::bbboRHpyZ">> = iolist_to_binary(re:replace("aaaa444:::bbbZ","^[:a[:digit:]:b]+","qSU&th&oR\\1Hpy",[global])),
+ <<"mxfweUe">> = iolist_to_binary(re:replace(":xxx:","[:a]xxx[b:]","mxf\\1weUe",[])),
+ <<"mxfweUe">> = iolist_to_binary(re:replace(":xxx:","[:a]xxx[b:]","mxf\\1weUe",[global])),
+ <<"xaaVrvSafReLAbLfQXc">> = iolist_to_binary(re:replace("xaabc","(?<=a{2})b","Vr\\1vSafReLA&\\1LfQX",[caseless])),
+ <<"xaaVrvSafReLAbLfQXc">> = iolist_to_binary(re:replace("xaabc","(?<=a{2})b","Vr\\1vSafReLA&\\1LfQX",[caseless,
+ global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=a{2})b","fcR",[caseless])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=a{2})b","fcR",[caseless,
+ global])),
+ <<"xabc">> = iolist_to_binary(re:replace("xabc","(?<=a{2})b","BoRyoqeTXWscX",[caseless])),
+ <<"xabc">> = iolist_to_binary(re:replace("xabc","(?<=a{2})b","BoRyoqeTXWscX",[caseless,
+ global])),
+ <<"xabc">> = iolist_to_binary(re:replace("xabc","(?<!a{2})b","&",[caseless])),
+ <<"xabc">> = iolist_to_binary(re:replace("xabc","(?<!a{2})b","&",[caseless,
+ global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<!a{2})b","\\1o\\1eK\\1cENK\\1&djd",[caseless])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<!a{2})b","\\1o\\1eK\\1cENK\\1&djd",[caseless,
+ global])),
+ <<"xaabc">> = iolist_to_binary(re:replace("xaabc","(?<!a{2})b","&&o&KwHJm",[caseless])),
+ <<"xaabc">> = iolist_to_binary(re:replace("xaabc","(?<!a{2})b","&&o&KwHJm",[caseless,
+ global])),
+ <<"xa ccEEJTcFn">> = iolist_to_binary(re:replace("xa c","(?<=a\\h)c","&&EEJ\\1T&F\\1n",[])),
+ <<"xa ccEEJTcFn">> = iolist_to_binary(re:replace("xa c","(?<=a\\h)c","&&EEJ\\1T&F\\1n",[global])),
+ <<"axxYHmPRLyCdYeBCTMFc">> = iolist_to_binary(re:replace("axxbc","(?<=[^a]{2})b","YHmPRLyCdYeBCTMF",[])),
+ <<"axxYHmPRLyCdYeBCTMFc">> = iolist_to_binary(re:replace("axxbc","(?<=[^a]{2})b","YHmPRLyCdYeBCTMF",[global])),
+ <<"aAAIbac">> = iolist_to_binary(re:replace("aAAbc","(?<=[^a]{2})b","I&a",[])),
+ <<"aAAIbac">> = iolist_to_binary(re:replace("aAAbc","(?<=[^a]{2})b","I&a",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^a]{2})b","Qosgls",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^a]{2})b","Qosgls",[global])),
+ <<"xaabc">> = iolist_to_binary(re:replace("xaabc","(?<=[^a]{2})b","Iry\\1",[])),
+ <<"xaabc">> = iolist_to_binary(re:replace("xaabc","(?<=[^a]{2})b","Iry\\1",[global])),
+ <<"axxbbc">> = iolist_to_binary(re:replace("axxbc","(?<=[^a]{2})b","&&",[caseless])),
+ <<"axxbbc">> = iolist_to_binary(re:replace("axxbc","(?<=[^a]{2})b","&&",[caseless,
+ global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^a]{2})b","oNddUdB\\1XA",[caseless])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=[^a]{2})b","oNddUdB\\1XA",[caseless,
+ global])),
+ <<"aAAbc">> = iolist_to_binary(re:replace("aAAbc","(?<=[^a]{2})b","boNOPUMfK&\\1",[caseless])),
+ <<"aAAbc">> = iolist_to_binary(re:replace("aAAbc","(?<=[^a]{2})b","boNOPUMfK&\\1",[caseless,
+ global])),
+ <<"xaabc">> = iolist_to_binary(re:replace("xaabc","(?<=[^a]{2})b","W&iffNoQ\\1",[caseless])),
+ <<"xaabc">> = iolist_to_binary(re:replace("xaabc","(?<=[^a]{2})b","W&iffNoQ\\1",[caseless,
+ global])),
+ <<"abKnqCjyP">> = iolist_to_binary(re:replace("abc","(?<=a\\H)c","KnqCjyP",[])),
+ <<"abKnqCjyP">> = iolist_to_binary(re:replace("abc","(?<=a\\H)c","KnqCjyP",[global])),
+ <<"abTxeCfVaOhSYo">> = iolist_to_binary(re:replace("abc","(?<=a\\V)c","TxeCfV\\1aOhSYo",[])),
+ <<"abTxeCfVaOhSYo">> = iolist_to_binary(re:replace("abc","(?<=a\\V)c","TxeCfV\\1aOhSYo",[global])),
+ <<"a
+gxsYrXgNx">> = iolist_to_binary(re:replace("a
+c","(?<=a\\v)c","g\\1\\1xs\\1Yr\\1XgN\\1x",[])),
+ <<"a
+gxsYrXgNx">> = iolist_to_binary(re:replace("a
+c","(?<=a\\v)c","g\\1\\1xs\\1Yr\\1XgN\\1x",[global])),
+ <<"XcccddYLX">> = iolist_to_binary(re:replace("XcccddYX","(?(?=c)c|d)++Y","&L",[])),
+ <<"XcccddYLX">> = iolist_to_binary(re:replace("XcccddYX","(?(?=c)c|d)++Y","&L",[global])),
+ <<"XjcccddYxcccddYymX">> = iolist_to_binary(re:replace("XcccddYX","(?(?=c)c|d)*+Y","j&x\\1&\\1\\1ym",[])),
+ <<"XjcccddYxcccddYymX">> = iolist_to_binary(re:replace("XcccddYX","(?(?=c)c|d)*+Y","j&x\\1&\\1\\1ym",[global])),
+ ok.
+run40() ->
+ <<"P">> = iolist_to_binary(re:replace("aaaaaaa","^(a{2,3}){2,}+a","P",[])),
+ <<"P">> = iolist_to_binary(re:replace("aaaaaaa","^(a{2,3}){2,}+a","P",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a{2,3}){2,}+a","&AJ",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a{2,3}){2,}+a","&AJ",[global])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(a{2,3}){2,}+a","bT&aphetNw&xcisR",[])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(a{2,3}){2,}+a","bT&aphetNw&xcisR",[global])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a{2,3}){2,}+a","g",[])),
+ <<"aaaaaaaaa">> = iolist_to_binary(re:replace("aaaaaaaaa","^(a{2,3}){2,}+a","g",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a{2,3})++a","U",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a{2,3})++a","U",[global])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(a{2,3})++a","CjQf&BIE\\1m&vHKyV",[])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(a{2,3})++a","CjQf&BIE\\1m&vHKyV",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a{2,3})*+a","jEe&kL&\\1Wd",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a{2,3})*+a","jEe&kL&\\1Wd",[global])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(a{2,3})*+a","&VFXL\\1JOa\\1dHl&Yw",[])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(a{2,3})*+a","&VFXL\\1JOa\\1dHl&Yw",[global])),
+ <<"fByANGarQU">> = iolist_to_binary(re:replace("abXde","ab\\Cde","\\1fByANGarQ\\1U",[])),
+ <<"fByANGarQU">> = iolist_to_binary(re:replace("abXde","ab\\Cde","\\1fByANGarQ\\1U",[global])),
+ <<"abZdeXdDJIltBeDyobKXo">> = iolist_to_binary(re:replace("abZdeX","(?<=ab\\Cde)X","&dDJIltBeDyobK&o",[])),
+ <<"abZdeXdDJIltBeDyobKXo">> = iolist_to_binary(re:replace("abZdeX","(?<=ab\\Cde)X","&dDJIltBeDyobK&o",[global])),
+ <<"hv">> = iolist_to_binary(re:replace("aCb","a[\\CD]b","h\\1v",[])),
+ <<"hv">> = iolist_to_binary(re:replace("aCb","a[\\CD]b","h\\1v",[global])),
+ <<"waDbEkr">> = iolist_to_binary(re:replace("aDb","a[\\CD]b","w&Ekr",[])),
+ <<"waDbEkr">> = iolist_to_binary(re:replace("aDb","a[\\CD]b","w&Ekr",[global])),
+ <<"RCcE">> = iolist_to_binary(re:replace("aJb","a[\\C-X]b","R\\1CcE",[])),
+ <<"RCcE">> = iolist_to_binary(re:replace("aJb","a[\\C-X]b","R\\1CcE",[global])),
+ <<"X X">> = iolist_to_binary(re:replace("X X","\\H\\h\\V\\v","B&pquMp\\1NBcoPfQTdr\\1o",[])),
+ <<"X X">> = iolist_to_binary(re:replace("X X","\\H\\h\\V\\v","B&pquMp\\1NBcoPfQTdr\\1o",[global])),
+ <<"bjVX X X X OAvV">> = iolist_to_binary(re:replace("X X ","\\H\\h\\V\\v","bjV&&OAv\\1V",[])),
+ <<"bjVX X X X OAvV">> = iolist_to_binary(re:replace("X X ","\\H\\h\\V\\v","bjV&&OAv\\1V",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\H\\h\\V\\v","Y",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\H\\h\\V\\v","Y",[global])),
+ <<"  X">> = iolist_to_binary(re:replace("  X","\\H\\h\\V\\v","VrvLpiABSBWYG",[])),
+ <<"  X">> = iolist_to_binary(re:replace("  X","\\H\\h\\V\\v","VrvLpiABSBWYG",[global])),
+ <<"UibLPUMxnHgluPEcwP">> = iolist_to_binary(re:replace("  X
+ ","\\H*\\h+\\V?\\v{3,4}","Ui\\1bLPUMxnHgluPEcwP",[])),
+ <<"UibLPUMxnHgluPEcwP">> = iolist_to_binary(re:replace("  X
+ ","\\H*\\h+\\V?\\v{3,4}","Ui\\1bLPUMxnHgluPEcwP",[global])),
+ <<"  
+  
+ YOgvhC">> = iolist_to_binary(re:replace("  
+ ","\\H*\\h+\\V?\\v{3,4}","&&YOgvhC\\1\\1",[])),
+ <<"  
+  
+ YOgvhC">> = iolist_to_binary(re:replace("  
+ ","\\H*\\h+\\V?\\v{3,4}","&&YOgvhC\\1\\1",[global])),
+ <<"o  
+ aixbY  
+ BtbY">> = iolist_to_binary(re:replace("  
+ ","\\H*\\h+\\V?\\v{3,4}","o&aixbY&BtbY\\1",[])),
+ <<"o  
+ aixbY  
+ BtbY">> = iolist_to_binary(re:replace("  
+ ","\\H*\\h+\\V?\\v{3,4}","o&aixbY&BtbY\\1",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\H*\\h+\\V?\\v{3,4}","orCME\\1H",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\H*\\h+\\V?\\v{3,4}","orCME\\1H",[global])),
+ <<"  
+ ">> = iolist_to_binary(re:replace("  
+ ","\\H*\\h+\\V?\\v{3,4}","h&L\\1\\1wk\\1",[])),
+ <<"  
+ ">> = iolist_to_binary(re:replace("  
+ ","\\H*\\h+\\V?\\v{3,4}","h&L\\1\\1wk\\1",[global])),
+ <<"XY aeVjRE">> = iolist_to_binary(re:replace("XY ABCDE","\\H{3,4}","aeVjR",[])),
+ <<"XY aeVjRE">> = iolist_to_binary(re:replace("XY ABCDE","\\H{3,4}","aeVjR",[global])),
+ <<"XY inwBHwGPQRKvfoDb ST">> = iolist_to_binary(re:replace("XY PQR ST","\\H{3,4}","in\\1wBHw\\1G&KvfoDb\\1",[])),
+ <<"XY inwBHwGPQRKvfoDb ST">> = iolist_to_binary(re:replace("XY PQR ST","\\H{3,4}","in\\1wBHw\\1G&KvfoDb\\1",[global])),
+ <<"XY AcCVYFB PYkLB PHB PFIQRB PBeQRS">> = iolist_to_binary(re:replace("XY AB PQRS",".\\h{3,4}.","\\1cCVYF&YkL&H&FIQR&Be",[])),
+ <<"XY AcCVYFB PYkLB PHB PFIQRB PBeQRS">> = iolist_to_binary(re:replace("XY AB PQRS",".\\h{3,4}.","\\1cCVYF&YkL&H&FIQR&Be",[global])),
+ <<">XNNNYZEbXNNNYZXNNNYZQsKnuk">> = iolist_to_binary(re:replace(">XNNNYZ","\\h*X\\h?\\H+Y\\H?Z","&E\\1b&&QsKnuk",[])),
+ <<">XNNNYZEbXNNNYZXNNNYZQsKnuk">> = iolist_to_binary(re:replace(">XNNNYZ","\\h*X\\h?\\H+Y\\H?Z","&E\\1b&&QsKnuk",[global])),
+ <<">m">> = iolist_to_binary(re:replace("> X NYQZ","\\h*X\\h?\\H+Y\\H?Z","m",[])),
+ <<">m">> = iolist_to_binary(re:replace("> X NYQZ","\\h*X\\h?\\H+Y\\H?Z","m",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\h*X\\h?\\H+Y\\H?Z","W\\1BBQbt&HF\\1KkXwm\\1Vdn",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\h*X\\h?\\H+Y\\H?Z","W\\1BBQbt&HF\\1KkXwm\\1Vdn",[global])),
+ <<">XYZ">> = iolist_to_binary(re:replace(">XYZ","\\h*X\\h?\\H+Y\\H?Z","&GW",[])),
+ <<">XYZ">> = iolist_to_binary(re:replace(">XYZ","\\h*X\\h?\\H+Y\\H?Z","&GW",[global])),
+ <<"> X NY Z">> = iolist_to_binary(re:replace("> X NY Z","\\h*X\\h?\\H+Y\\H?Z","JIYAqmdtuCSO",[])),
+ <<"> X NY Z">> = iolist_to_binary(re:replace("> X NY Z","\\h*X\\h?\\H+Y\\H?Z","JIYAqmdtuCSO",[global])),
+ <<">vctAlOgcGXY
+Z
+A NN h">> = iolist_to_binary(re:replace(">XY
+Z
+A NN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c","vc\\1tAl\\1O\\1gcG&h\\1",[])),
+ <<">vctAlOgcGXY
+Z
+A NN h">> = iolist_to_binary(re:replace(">XY
+Z
+A NN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c","vc\\1tAl\\1O\\1gcG&h\\1",[global])),
+ <<">bm
+ X
+Y
+ ZZZ
+AAA NNN uAMN">> = iolist_to_binary(re:replace(">
+ X
+Y
+ ZZZ
+AAA NNN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c","bm&\\1uAMN",[])),
+ <<">bm
+ X
+Y
+ ZZZ
+AAA NNN uAMN">> = iolist_to_binary(re:replace(">
+ X
+Y
+ ZZZ
+AAA NNN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c","bm&\\1uAMN",[global])),
+ <<"foojypfoojma">> = iolist_to_binary(re:replace("foobar","(foo)\\Kbar","jyp\\1jma",[])),
+ <<"foojypfoojma">> = iolist_to_binary(re:replace("foobar","(foo)\\Kbar","jyp\\1jma",[global])),
+ <<"fooUcOiqwyxvfoobar">> = iolist_to_binary(re:replace("foobar","(foo)(\\Kbar|baz)","UcOiqwyxv\\1&",[])),
+ <<"fooUcOiqwyxvfoobar">> = iolist_to_binary(re:replace("foobar","(foo)(\\Kbar|baz)","UcOiqwyxv\\1&",[global])),
+ <<"xXfoobazTfoobazneSQcxWfooBA">> = iolist_to_binary(re:replace("foobaz","(foo)(\\Kbar|baz)","xX&T&neSQcxW\\1BA",[])),
+ <<"xXfoobazTfoobazneSQcxWfooBA">> = iolist_to_binary(re:replace("foobaz","(foo)(\\Kbar|baz)","xX&T&neSQcxW\\1BA",[global])),
+ <<"foovYnKbarbazVqfoobarheyiy">> = iolist_to_binary(re:replace("foobarbaz","(foo\\Kbar)baz","vYnK&Vq\\1heyiy",[])),
+ <<"foovYnKbarbazVqfoobarheyiy">> = iolist_to_binary(re:replace("foobarbaz","(foo\\Kbar)baz","vYnK&Vq\\1heyiy",[global])),
+ <<"wYDabPababababbbabZygQUbMBoQiXXXX">> = iolist_to_binary(re:replace("ababababbbabZXXXX","^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z","wYD\\1P&ygQUbMBoQi",[])),
+ <<"wYDabPababababbbabZygQUbMBoQiXXXX">> = iolist_to_binary(re:replace("ababababbbabZXXXX","^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z","wYD\\1P&ygQUbMBoQi",[global])),
+ <<"QJyUVPxY">> = iolist_to_binary(re:replace("tom-tom","(?<A>tom|bon)-\\g{A}","QJyUVPxY",[])),
+ <<"QJyUVPxY">> = iolist_to_binary(re:replace("tom-tom","(?<A>tom|bon)-\\g{A}","QJyUVPxY",[global])),
+ <<"bonvRbon-bonECJDijVbonbon-bonnbonYtaYv">> = iolist_to_binary(re:replace("bon-bon","(?<A>tom|bon)-\\g{A}","\\1vR&ECJDijV\\1&n\\1YtaYv",[])),
+ <<"bonvRbon-bonECJDijVbonbon-bonnbonYtaYv">> = iolist_to_binary(re:replace("bon-bon","(?<A>tom|bon)-\\g{A}","\\1vR&ECJDijV\\1&n\\1YtaYv",[global])),
+ <<"bacxxx">> = iolist_to_binary(re:replace("bacxxx","(^(a|b\\g{-1}))","B",[])),
+ <<"bacxxx">> = iolist_to_binary(re:replace("bacxxx","(^(a|b\\g{-1}))","B",[global])),
+ <<"abcHN">> = iolist_to_binary(re:replace("abcabc","(?|(abc)|(xyz))\\1","\\1HN",[])),
+ <<"abcHN">> = iolist_to_binary(re:replace("abcabc","(?|(abc)|(xyz))\\1","\\1HN",[global])),
+ <<"i">> = iolist_to_binary(re:replace("xyzxyz","(?|(abc)|(xyz))\\1","i",[])),
+ <<"i">> = iolist_to_binary(re:replace("xyzxyz","(?|(abc)|(xyz))\\1","i",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?|(abc)|(xyz))\\1","&RDdXS\\1",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?|(abc)|(xyz))\\1","&RDdXS\\1",[global])),
+ <<"abcxyz">> = iolist_to_binary(re:replace("abcxyz","(?|(abc)|(xyz))\\1","xvrTYMBEX",[])),
+ <<"abcxyz">> = iolist_to_binary(re:replace("abcxyz","(?|(abc)|(xyz))\\1","xvrTYMBEX",[global])),
+ <<"xyzabc">> = iolist_to_binary(re:replace("xyzabc","(?|(abc)|(xyz))\\1","gkljK\\1CR\\1BykWHcqqC&G",[])),
+ <<"xyzabc">> = iolist_to_binary(re:replace("xyzabc","(?|(abc)|(xyz))\\1","gkljK\\1CR\\1BykWHcqqC&G",[global])),
+ ok.
+run41() ->
+ <<"EaIdWBoabck">> = iolist_to_binary(re:replace("abcabc","(?|(abc)|(xyz))(?1)","EaIdWBo\\1k",[])),
+ <<"EaIdWBoabck">> = iolist_to_binary(re:replace("abcabc","(?|(abc)|(xyz))(?1)","EaIdWBo\\1k",[global])),
+ <<"xyzabcxyzxyzMvxyzjgRaou">> = iolist_to_binary(re:replace("xyzabc","(?|(abc)|(xyz))(?1)","&\\1\\1Mv\\1jgRaou",[])),
+ <<"xyzabcxyzxyzMvxyzjgRaou">> = iolist_to_binary(re:replace("xyzabc","(?|(abc)|(xyz))(?1)","&\\1\\1Mv\\1jgRaou",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?|(abc)|(xyz))(?1)","&vqt\\1Hv",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?|(abc)|(xyz))(?1)","&vqt\\1Hv",[global])),
+ <<"xyzxyz">> = iolist_to_binary(re:replace("xyzxyz","(?|(abc)|(xyz))(?1)","LyN",[])),
+ <<"xyzxyz">> = iolist_to_binary(re:replace("xyzxyz","(?|(abc)|(xyz))(?1)","LyN",[global])),
+ <<"XYabcdYvXYabcdYXYabcdYXYabcdYjw">> = iolist_to_binary(re:replace("XYabcdY","^X(?5)(a)(?|(b)|(q))(c)(d)(Y)","&v&&&jw",[])),
+ <<"XYabcdYvXYabcdYXYabcdYXYabcdYjw">> = iolist_to_binary(re:replace("XYabcdY","^X(?5)(a)(?|(b)|(q))(c)(d)(Y)","&v&&&jw",[global])),
+ <<"uqndDBXYabcdYGahfmNcwsERUk">> = iolist_to_binary(re:replace("XYabcdY","^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)","uqndDB&G\\1hfmNcwsERUk",[])),
+ <<"uqndDBXYabcdYGahfmNcwsERUk">> = iolist_to_binary(re:replace("XYabcdY","^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)","uqndDB&G\\1hfmNcwsERUk",[global])),
+ <<"XYabcdYtahaNIsaeGvkDDLOQ">> = iolist_to_binary(re:replace("XYabcdY","^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)","&tah\\1NIs\\1eGvkDDLOQ",[])),
+ <<"XYabcdYtahaNIsaeGvkDDLOQ">> = iolist_to_binary(re:replace("XYabcdY","^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)","&tah\\1NIs\\1eGvkDDLOQ",[global])),
+ <<"boxyz">> = iolist_to_binary(re:replace("a:aaxyz","(?'abc'\\w+):\\k<abc>{2}","bo",[])),
+ <<"boxyz">> = iolist_to_binary(re:replace("a:aaxyz","(?'abc'\\w+):\\k<abc>{2}","bo",[global])),
+ <<"sqNrwMWMcRUxyz">> = iolist_to_binary(re:replace("ab:ababxyz","(?'abc'\\w+):\\k<abc>{2}","sqNrwMWMcRU",[])),
+ <<"sqNrwMWMcRUxyz">> = iolist_to_binary(re:replace("ab:ababxyz","(?'abc'\\w+):\\k<abc>{2}","sqNrwMWMcRU",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?'abc'\\w+):\\k<abc>{2}","Ahbk",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?'abc'\\w+):\\k<abc>{2}","Ahbk",[global])),
+ <<"a:axyz">> = iolist_to_binary(re:replace("a:axyz","(?'abc'\\w+):\\k<abc>{2}","yr&SM&HjpyRb",[])),
+ <<"a:axyz">> = iolist_to_binary(re:replace("a:axyz","(?'abc'\\w+):\\k<abc>{2}","yr&SM&HjpyRb",[global])),
+ <<"ab:abxyz">> = iolist_to_binary(re:replace("ab:abxyz","(?'abc'\\w+):\\k<abc>{2}","BQwV",[])),
+ <<"ab:abxyz">> = iolist_to_binary(re:replace("ab:abxyz","(?'abc'\\w+):\\k<abc>{2}","BQwV",[global])),
+ <<"a:aaxnnUMItwyNa:aamCRBaixyz">> = iolist_to_binary(re:replace("a:aaxyz","(?'abc'\\w+):\\g{abc}{2}","&xnnUMItwyN&mCRB\\1i",[])),
+ <<"a:aaxnnUMItwyNa:aamCRBaixyz">> = iolist_to_binary(re:replace("a:aaxyz","(?'abc'\\w+):\\g{abc}{2}","&xnnUMItwyN&mCRB\\1i",[global])),
+ <<"Labjab:ababqxyz">> = iolist_to_binary(re:replace("ab:ababxyz","(?'abc'\\w+):\\g{abc}{2}","L\\1j&q",[])),
+ <<"Labjab:ababqxyz">> = iolist_to_binary(re:replace("ab:ababxyz","(?'abc'\\w+):\\g{abc}{2}","L\\1j&q",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?'abc'\\w+):\\g{abc}{2}","dLG\\1",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?'abc'\\w+):\\g{abc}{2}","dLG\\1",[global])),
+ <<"a:axyz">> = iolist_to_binary(re:replace("a:axyz","(?'abc'\\w+):\\g{abc}{2}","MKB",[])),
+ <<"a:axyz">> = iolist_to_binary(re:replace("a:axyz","(?'abc'\\w+):\\g{abc}{2}","MKB",[global])),
+ <<"ab:abxyz">> = iolist_to_binary(re:replace("ab:abxyz","(?'abc'\\w+):\\g{abc}{2}","BwHek&EFhbw",[])),
+ <<"ab:abxyz">> = iolist_to_binary(re:replace("ab:abxyz","(?'abc'\\w+):\\g{abc}{2}","BwHek&EFhbw",[global])),
+ <<"abdqUabdFaabdtmIkaf">> = iolist_to_binary(re:replace("abd","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)","&qU&Fa&tmIk\\1f",[extended])),
+ <<"abdqUabdFaabdtmIkaf">> = iolist_to_binary(re:replace("abd","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)","&qU&Fa&tmIk\\1f",[extended,
+ global])),
+ <<"haacettwdUtIv">> = iolist_to_binary(re:replace("ce","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)","haa&ttwdU\\1tIv",[extended])),
+ <<"haacettwdUtIv">> = iolist_to_binary(re:replace("ce","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)","haa&ttwdU\\1tIv",[extended,
+ global])),
+ <<"uaXaXZYWULYgJXaXaXaXZg">> = iolist_to_binary(re:replace("aXaXZ","^(a.)\\g-1Z","u&YWULYgJX\\1&g",[])),
+ <<"uaXaXZYWULYgJXaXaXaXZg">> = iolist_to_binary(re:replace("aXaXZ","^(a.)\\g-1Z","u&YWULYgJX\\1&g",[global])),
+ <<"TpaXaXZmaXaXZQhnJ">> = iolist_to_binary(re:replace("aXaXZ","^(a.)\\g{-1}Z","Tp&m&QhnJ",[])),
+ <<"TpaXaXZmaXaXZQhnJ">> = iolist_to_binary(re:replace("aXaXZ","^(a.)\\g{-1}Z","Tp&m&QhnJ",[global])),
+ <<"cNcd">> = iolist_to_binary(re:replace("abcd","^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) ","cN",[extended])),
+ <<"cNcd">> = iolist_to_binary(re:replace("abcd","^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) ","cN",[extended,
+ global])),
+ <<"S">> = iolist_to_binary(re:replace("metcalfe 33","(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\\d+)
+ )","S",[extended])),
+ <<"S">> = iolist_to_binary(re:replace("metcalfe 33","(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\\d+)
+ )","S",[extended,global])),
+ <<"m1.2.3.4CNSbdi">> = iolist_to_binary(re:replace("1.2.3.4","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","m&CNSbd\\1i",[])),
+ <<"m1.2.3.4CNSbdi">> = iolist_to_binary(re:replace("1.2.3.4","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","m&CNSbd\\1i",[global])),
+ <<"131.111.10.206131.111.10.206DPiNTNK131.111.10.206grPeyEu">> = iolist_to_binary(re:replace("131.111.10.206","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","&&DPiNTN\\1\\1K&grPey\\1Eu",[])),
+ <<"131.111.10.206131.111.10.206DPiNTNK131.111.10.206grPeyEu">> = iolist_to_binary(re:replace("131.111.10.206","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","&&DPiNTN\\1\\1K&grPey\\1Eu",[global])),
+ <<"uBfPy10.0.0.010.0.0.0svWuRdbVVmys">> = iolist_to_binary(re:replace("10.0.0.0","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","u\\1BfPy&&svWuRdbVVmys",[])),
+ <<"uBfPy10.0.0.010.0.0.0svWuRdbVVmys">> = iolist_to_binary(re:replace("10.0.0.0","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","u\\1BfPy&&svWuRdbVVmys",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","jVYSCLvb\\1Rm\\1Vn&",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","jVYSCLvb\\1Rm\\1Vn&",[global])),
+ <<"10.6">> = iolist_to_binary(re:replace("10.6","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","dECob\\1\\1yakWA",[])),
+ <<"10.6">> = iolist_to_binary(re:replace("10.6","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","dECob\\1\\1yakWA",[global])),
+ <<"455.3.4.5">> = iolist_to_binary(re:replace("455.3.4.5","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","r",[])),
+ <<"455.3.4.5">> = iolist_to_binary(re:replace("455.3.4.5","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}","r",[global])),
+ <<"VjWQp">> = iolist_to_binary(re:replace("1.2.3.4","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","VjWQp",[])),
+ <<"VjWQp">> = iolist_to_binary(re:replace("1.2.3.4","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","VjWQp",[global])),
+ <<"VQs131.111.10.206131.111.10.206r.206.206">> = iolist_to_binary(re:replace("131.111.10.206","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","VQs&&r\\1\\1",[])),
+ <<"VQs131.111.10.206131.111.10.206r.206.206">> = iolist_to_binary(re:replace("131.111.10.206","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","VQs&&r\\1\\1",[global])),
+ <<"mebNTtCd10.0.0.010.0.0.010.0.0.010.0.0.0S.0">> = iolist_to_binary(re:replace("10.0.0.0","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","mebNTtCd&&&&S\\1",[])),
+ <<"mebNTtCd10.0.0.010.0.0.010.0.0.010.0.0.0S.0">> = iolist_to_binary(re:replace("10.0.0.0","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","mebNTtCd&&&&S\\1",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","uvmK&GcQ&\\1u\\1",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","uvmK&GcQ&\\1u\\1",[global])),
+ <<"10.6">> = iolist_to_binary(re:replace("10.6","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","TH\\1bkRaOVXKAGH&Wq\\1",[])),
+ <<"10.6">> = iolist_to_binary(re:replace("10.6","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","TH\\1bkRaOVXKAGH&Wq\\1",[global])),
+ <<"455.3.4.5">> = iolist_to_binary(re:replace("455.3.4.5","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","flY&",[])),
+ <<"455.3.4.5">> = iolist_to_binary(re:replace("455.3.4.5","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))","flY&",[global])),
+ <<"XIXOpartynow is the time for all good men to come to the aid of the partyenW">> = iolist_to_binary(re:replace("now is the time for all good men to come to the aid of the party","^(\\w++|\\s++)*$","XIXO\\1&enW",[])),
+ <<"XIXOpartynow is the time for all good men to come to the aid of the partyenW">> = iolist_to_binary(re:replace("now is the time for all good men to come to the aid of the party","^(\\w++|\\s++)*$","XIXO\\1&enW",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\w++|\\s++)*$","bwiYg",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\w++|\\s++)*$","bwiYg",[global])),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(re:replace("this is not a line with only words and spaces!","^(\\w++|\\s++)*$","d\\1",[])),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(re:replace("this is not a line with only words and spaces!","^(\\w++|\\s++)*$","d\\1",[global])),
+ <<"m12345sdTXRM1234512345a">> = iolist_to_binary(re:replace("12345a","(\\d++)(\\w)","m\\1sdTXRM\\1&",[])),
+ <<"m12345sdTXRM1234512345a">> = iolist_to_binary(re:replace("12345a","(\\d++)(\\w)","m\\1sdTXRM\\1&",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(\\d++)(\\w)","eFU&\\1cQE\\1\\1grkNJ&Ad\\1f",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","(\\d++)(\\w)","eFU&\\1cQE\\1\\1grkNJ&Ad\\1f",[global])),
+ <<"12345+">> = iolist_to_binary(re:replace("12345+","(\\d++)(\\w)","i&hvp\\1XhCAs&VRh",[])),
+ <<"12345+">> = iolist_to_binary(re:replace("12345+","(\\d++)(\\w)","i&hvp\\1XhCAs&VRh",[global])),
+ <<"NaaabIg">> = iolist_to_binary(re:replace("aaab","a++b","\\1N&Ig",[])),
+ <<"NaaabIg">> = iolist_to_binary(re:replace("aaab","a++b","\\1N&Ig",[global])),
+ <<"maaabaaabgBJFEHXaaabaaabaaabkAaaab">> = iolist_to_binary(re:replace("aaab","(a++b)","m&\\1gBJFEHX&&\\1kA&",[])),
+ <<"maaabaaabgBJFEHXaaabaaabaaabkAaaab">> = iolist_to_binary(re:replace("aaab","(a++b)","m&\\1gBJFEHX&&\\1kA&",[global])),
+ <<"TaaabRaaaaaaeBTpaaaTi">> = iolist_to_binary(re:replace("aaab","(a++)b","T&R\\1\\1eBTp\\1Ti",[])),
+ <<"TaaabRaaaaaaeBTpaaaTi">> = iolist_to_binary(re:replace("aaab","(a++)b","T&R\\1\\1eBTp\\1Ti",[global])),
+ <<"((PwxkrBxNdabc(ade)ufh()()xYBkxEabc(ade)ufh()()xFkxx">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","([^()]++|\\([^()]*\\))+","Pw\\1krB\\1Nd&YBk\\1E&Fk\\1\\1",[])),
+ <<"((PwxkrBxNdabc(ade)ufh()()xYBkxEabc(ade)ufh()()xFkxx">> = iolist_to_binary(re:replace("((abc(ade)ufh()()x","([^()]++|\\([^()]*\\))+","Pw\\1krB\\1Nd&YBk\\1E&Fk\\1\\1",[global])),
+ <<"F(abc)sMN">> = iolist_to_binary(re:replace("(abc)","\\(([^()]++|\\([^()]+\\))+\\)","F&sMN",[])),
+ <<"F(abc)sMN">> = iolist_to_binary(re:replace("(abc)","\\(([^()]++|\\([^()]+\\))+\\)","F&sMN",[global])),
+ <<"SMUJyftxyzxyz(abc(def)xyz)RpnMnA">> = iolist_to_binary(re:replace("(abc(def)xyz)","\\(([^()]++|\\([^()]+\\))+\\)","SMUJyft\\1\\1&RpnMnA",[])),
+ <<"SMUJyftxyzxyz(abc(def)xyz)RpnMnA">> = iolist_to_binary(re:replace("(abc(def)xyz)","\\(([^()]++|\\([^()]+\\))+\\)","SMUJyft\\1\\1&RpnMnA",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\(([^()]++|\\([^()]+\\))+\\)","p",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","\\(([^()]++|\\([^()]+\\))+\\)","p",[global])),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(([^()]++|\\([^()]+\\))+\\)","gVbYV&vnkHNjeK",[])),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(re:replace("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(([^()]++|\\([^()]+\\))+\\)","gVbYV&vnkHNjeK",[global])),
+ ok.
+run42() ->
+ <<"YHcxHwcJHhabcabcyqOabcio">> = iolist_to_binary(re:replace("abc","^([^()]|\\((?1)*\\))*$","YH\\1xHw\\1JHh&&yqO&io",[])),
+ <<"YHcxHwcJHhabcabcyqOabcio">> = iolist_to_binary(re:replace("abc","^([^()]|\\((?1)*\\))*$","YH\\1xHw\\1JHh&&yqO&io",[global])),
+ <<"Xua(b)ccOqkxg">> = iolist_to_binary(re:replace("a(b)c","^([^()]|\\((?1)*\\))*$","Xu&\\1Oqkxg",[])),
+ <<"Xua(b)ccOqkxg">> = iolist_to_binary(re:replace("a(b)c","^([^()]|\\((?1)*\\))*$","Xu&\\1Oqkxg",[global])),
+ <<"pHOdcaLUi">> = iolist_to_binary(re:replace("a(b(c))d","^([^()]|\\((?1)*\\))*$","pHO\\1caLUi",[])),
+ <<"pHOdcaLUi">> = iolist_to_binary(re:replace("a(b(c))d","^([^()]|\\((?1)*\\))*$","pHO\\1caLUi",[global])),
+ <<"*** Failers)">> = iolist_to_binary(re:replace("*** Failers)","^([^()]|\\((?1)*\\))*$","&YxG",[])),
+ <<"*** Failers)">> = iolist_to_binary(re:replace("*** Failers)","^([^()]|\\((?1)*\\))*$","&YxG",[global])),
+ <<"a(b(c)d">> = iolist_to_binary(re:replace("a(b(c)d","^([^()]|\\((?1)*\\))*$","s\\1BLqc",[])),
+ <<"a(b(c)d">> = iolist_to_binary(re:replace("a(b(c)d","^([^()]|\\((?1)*\\))*$","s\\1BLqc",[global])),
+ <<"puAth">> = iolist_to_binary(re:replace(">abc>123<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$","puAth",[])),
+ <<"puAth">> = iolist_to_binary(re:replace(">abc>123<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$","puAth",[global])),
+ <<"QVYB>abc>1(2)3<xyz<cFhyH">> = iolist_to_binary(re:replace(">abc>1(2)3<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$","QVYB&cFhyH",[])),
+ <<"QVYB>abc>1(2)3<xyz<cFhyH">> = iolist_to_binary(re:replace(">abc>1(2)3<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$","QVYB&cFhyH",[global])),
+ <<"(1(2)3)">> = iolist_to_binary(re:replace(">abc>(1(2)3)<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$","\\1",[])),
+ <<"(1(2)3)">> = iolist_to_binary(re:replace(">abc>(1(2)3)<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$","\\1",[global])),
+ <<"fb1221w122112211221Q1221yL1221d">> = iolist_to_binary(re:replace("1221","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","fb\\1w\\1&&Q&yL&d",[caseless])),
+ <<"fb1221w122112211221Q1221yL1221d">> = iolist_to_binary(re:replace("1221","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","fb\\1w\\1&&Q&yL&d",[caseless,
+ global])),
+ <<"yadakp">> = iolist_to_binary(re:replace("Satanoscillatemymetallicsonatas","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","ya\\1dakp\\1",[caseless])),
+ <<"yadakp">> = iolist_to_binary(re:replace("Satanoscillatemymetallicsonatas","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","ya\\1dakp\\1",[caseless,
+ global])),
+ <<"aAmanaplanacanalPanamalDAmanaplanacanalPanamaiqyAmanaplanacanalPanamaOSvaJYbQ">> = iolist_to_binary(re:replace("AmanaplanacanalPanama","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","a&lD&i\\1qy&OSv\\1aJYbQ",[caseless])),
+ <<"aAmanaplanacanalPanamalDAmanaplanacanalPanamaiqyAmanaplanacanalPanamaOSvaJYbQ">> = iolist_to_binary(re:replace("AmanaplanacanalPanama","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","a&lD&i\\1qy&OSv\\1aJYbQ",[caseless,
+ global])),
+ <<"UcSlDNWgAva">> = iolist_to_binary(re:replace("AblewasIereIsawElba","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","UcSlD\\1NWgAva\\1",[caseless])),
+ <<"UcSlDNWgAva">> = iolist_to_binary(re:replace("AblewasIereIsawElba","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","UcSlD\\1NWgAva\\1",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","n",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","n",[caseless,
+ global])),
+ <<"Thequickbrownfox">> = iolist_to_binary(re:replace("Thequickbrownfox","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","MuY&Y&DfSiG&KPnRRGOO",[caseless])),
+ <<"Thequickbrownfox">> = iolist_to_binary(re:replace("Thequickbrownfox","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$","MuY&Y&DfSiG&KPnRRGOO",[caseless,
+ global])),
+ <<"Dlcq12uvNpwj">> = iolist_to_binary(re:replace("12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","Dlcq\\1uvNpwj",[])),
+ <<"Dlcq12uvNpwj">> = iolist_to_binary(re:replace("12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","Dlcq\\1uvNpwj",[global])),
+ <<"(((2+2)*-3)-7)Hq(((2+2)*-3)-7)nwjc(((2+2)*-3)-7)OCxTARr">> = iolist_to_binary(re:replace("(((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","&Hq&nwjc\\1OCxTARr",[])),
+ <<"(((2+2)*-3)-7)Hq(((2+2)*-3)-7)nwjc(((2+2)*-3)-7)OCxTARr">> = iolist_to_binary(re:replace("(((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","&Hq&nwjc\\1OCxTARr",[global])),
+ <<"EjPI-12tsA-12ux-12-12-12MfkO">> = iolist_to_binary(re:replace("-12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","EjPI&tsA&ux&\\1\\1MfkO",[])),
+ <<"EjPI-12tsA-12ux-12-12-12MfkO">> = iolist_to_binary(re:replace("-12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","EjPI&tsA&ux&\\1\\1MfkO",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","sxA&v\\1L\\1Q\\1FFDAm\\1hOOv",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","sxA&v\\1L\\1Q\\1FFDAm\\1hOOv",[global])),
+ <<"((2+2)*-3)-7)">> = iolist_to_binary(re:replace("((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","el\\1La",[])),
+ <<"((2+2)*-3)-7)">> = iolist_to_binary(re:replace("((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$","el\\1La",[global])),
+ <<"vRxyzxyzrJYxyzxyzjNtdExyzSxeWm">> = iolist_to_binary(re:replace("xyz","^(x(y|(?1){2})z)","vR\\1\\1rJY&\\1jNtdE&SxeWm",[])),
+ <<"vRxyzxyzrJYxyzxyzjNtdExyzSxeWm">> = iolist_to_binary(re:replace("xyz","^(x(y|(?1){2})z)","vR\\1\\1rJY&\\1jNtdE&SxeWm",[global])),
+ <<"CRxxyzxyzzkQsxxyzxyzzHmiGvxxyzxyzzy">> = iolist_to_binary(re:replace("xxyzxyzz","^(x(y|(?1){2})z)","CR\\1kQs\\1HmiGv\\1y",[])),
+ <<"CRxxyzxyzzkQsxxyzxyzzHmiGvxxyzxyzzy">> = iolist_to_binary(re:replace("xxyzxyzz","^(x(y|(?1){2})z)","CR\\1kQs\\1HmiGv\\1y",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(x(y|(?1){2})z)","qTfvW\\1q\\1&UXxp\\1b",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(x(y|(?1){2})z)","qTfvW\\1q\\1&UXxp\\1b",[global])),
+ <<"xxyzz">> = iolist_to_binary(re:replace("xxyzz","^(x(y|(?1){2})z)","WRW&Ky",[])),
+ <<"xxyzz">> = iolist_to_binary(re:replace("xxyzz","^(x(y|(?1){2})z)","WRW&Ky",[global])),
+ <<"xxyzxyzxyzz">> = iolist_to_binary(re:replace("xxyzxyzxyzz","^(x(y|(?1){2})z)","SgB&TOTaVTG\\1\\1Sy",[])),
+ <<"xxyzxyzxyzz">> = iolist_to_binary(re:replace("xxyzxyzxyzz","^(x(y|(?1){2})z)","SgB&TOTaVTG\\1\\1Sy",[global])),
+ <<"p">> = iolist_to_binary(re:replace("<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","p",[extended])),
+ <<"p">> = iolist_to_binary(re:replace("<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","p",[extended,
+ global])),
+ <<"<abcd>oQy<abcd><abcd>UhI<abcd>g">> = iolist_to_binary(re:replace("<abcd>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","\\1oQy\\1&UhI&g",[extended])),
+ <<"<abcd>oQy<abcd><abcd>UhI<abcd>g">> = iolist_to_binary(re:replace("<abcd>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","\\1oQy\\1&UhI&g",[extended,
+ global])),
+ <<"NymkAa">> = iolist_to_binary(re:replace("<abc <123> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","NymkAa",[extended])),
+ <<"NymkAa">> = iolist_to_binary(re:replace("<abc <123> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","NymkAa",[extended,
+ global])),
+ <<"<abc i<def>g<def>fMHHlJ<def><def> hij>">> = iolist_to_binary(re:replace("<abc <def> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","i&g\\1fMHHlJ\\1\\1",[extended])),
+ <<"<abc i<def>g<def>fMHHlJ<def><def> hij>">> = iolist_to_binary(re:replace("<abc <def> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","i&g\\1fMHHlJ\\1\\1",[extended,
+ global])),
+ <<"yJJ<abc<>def>yo<abc<>def>X">> = iolist_to_binary(re:replace("<abc<>def>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","yJJ&yo\\1X",[extended])),
+ <<"yJJ<abc<>def>yo<abc<>def>X">> = iolist_to_binary(re:replace("<abc<>def>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","yJJ&yo\\1X",[extended,
+ global])),
+ <<"<abcn<>LhiK<>ufT<>q<><>SodEfM">> = iolist_to_binary(re:replace("<abc<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","n\\1LhiK&ufT&q&&SodEfM",[extended])),
+ <<"<abcn<>LhiK<>ufT<>q<><>SodEfM">> = iolist_to_binary(re:replace("<abc<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","n\\1LhiK&ufT&q&&SodEfM",[extended,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","R&",[extended])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","R&",[extended,
+ global])),
+ <<"<abc">> = iolist_to_binary(re:replace("<abc","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","l",[extended])),
+ <<"<abc">> = iolist_to_binary(re:replace("<abc","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))","l",[extended,
+ global])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^a+(*FAIL)","oWDClek&Nwt&&aMO\\1",[])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^a+(*FAIL)","oWDClek&Nwt&&aMO\\1",[global])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?c+(*FAIL)","L\\1&&fllctiK\\1WqBCUQ",[])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?c+(*FAIL)","L\\1&&fllctiK\\1WqBCUQ",[global])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?(*PRUNE)c+(*FAIL)","Jpy\\1FAL",[])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?(*PRUNE)c+(*FAIL)","Jpy\\1FAL",[global])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?(*COMMIT)c+(*FAIL)","I",[])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?(*COMMIT)c+(*FAIL)","I",[global])),
+ <<"aaabcccaaabccc">> = iolist_to_binary(re:replace("aaabcccaaabccc","a+b?(*SKIP)c+(*FAIL)","cRBQ\\1mL",[])),
+ <<"aaabcccaaabccc">> = iolist_to_binary(re:replace("aaabcccaaabccc","a+b?(*SKIP)c+(*FAIL)","cRBQ\\1mL",[global])),
+ <<"JRWgePSUsExfJfHo">> = iolist_to_binary(re:replace("aaaxxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","\\1JRWgePSUsExfJf\\1Ho",[])),
+ <<"JRWgePSUsExfJfHo">> = iolist_to_binary(re:replace("aaaxxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","\\1JRWgePSUsExfJf\\1Ho",[global])),
+ <<"AlHMdrRl++++++">> = iolist_to_binary(re:replace("aaa++++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","AlHMdrRl",[])),
+ <<"AlHMdrRl++++++">> = iolist_to_binary(re:replace("aaa++++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","AlHMdrRl",[global])),
+ <<"bKH">> = iolist_to_binary(re:replace("bbbxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","bKH",[])),
+ <<"bKH">> = iolist_to_binary(re:replace("bbbxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","bKH",[global])),
+ <<"AyqLHpWSaFmaN+++++">> = iolist_to_binary(re:replace("bbb+++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","AyqLHpWSaFma\\1N",[])),
+ <<"AyqLHpWSaFmaN+++++">> = iolist_to_binary(re:replace("bbb+++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","AyqLHpWSaFma\\1N",[global])),
+ <<"bvYRps">> = iolist_to_binary(re:replace("cccxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","bvYR\\1ps",[])),
+ <<"bvYRps">> = iolist_to_binary(re:replace("cccxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","bvYR\\1ps",[global])),
+ <<"KPYMvODtuotXNIo++++">> = iolist_to_binary(re:replace("ccc++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","KPYMv\\1\\1ODtuotXNIo",[])),
+ <<"KPYMvODtuotXNIo++++">> = iolist_to_binary(re:replace("ccc++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","KPYMv\\1\\1ODtuotXNIo",[global])),
+ <<"kddddd">> = iolist_to_binary(re:replace("dddddddd","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","k",[])),
+ <<"kddddd">> = iolist_to_binary(re:replace("dddddddd","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","k",[global])),
+ <<"kaaaxxxxxxrQaRFqL">> = iolist_to_binary(re:replace("aaaxxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","k\\1rQaRFqL",[])),
+ <<"kaaaxxxxxxrQaRFqL">> = iolist_to_binary(re:replace("aaaxxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","k\\1rQaRFqL",[global])),
+ <<"aaaw++++++">> = iolist_to_binary(re:replace("aaa++++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","\\1w",[])),
+ <<"aaaw++++++">> = iolist_to_binary(re:replace("aaa++++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","\\1w",[global])),
+ <<"JyQqJIbbbxxxxxBAVHEvuuRsYpC">> = iolist_to_binary(re:replace("bbbxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","JyQqJI&BAVHEvuuRsYpC",[])),
+ <<"JyQqJIbbbxxxxxBAVHEvuuRsYpC">> = iolist_to_binary(re:replace("bbbxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","JyQqJI&BAVHEvuuRsYpC",[global])),
+ <<"dBwHTombbbccbbbR+++++">> = iolist_to_binary(re:replace("bbb+++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","dBwHTom&cc&R",[])),
+ <<"dBwHTombbbccbbbR+++++">> = iolist_to_binary(re:replace("bbb+++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","dBwHTom&cc&R",[global])),
+ <<"OcccxxxxeA">> = iolist_to_binary(re:replace("cccxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","O&eA",[])),
+ <<"OcccxxxxeA">> = iolist_to_binary(re:replace("cccxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","O&eA",[global])),
+ <<"DyFCQsccclWCcccy++++">> = iolist_to_binary(re:replace("ccc++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","DyFCQs&lWC&y",[])),
+ <<"DyFCQsccclWCcccy++++">> = iolist_to_binary(re:replace("ccc++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","DyFCQs&lWC&y",[global])),
+ <<"cdddvddddd">> = iolist_to_binary(re:replace("dddddddd","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","c&v",[])),
+ <<"cdddvddddd">> = iolist_to_binary(re:replace("dddddddd","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})","c&v",[global])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?(*THEN)c+(*FAIL)","PV&\\1x\\1vsUDLpYB\\1\\1t",[])),
+ <<"aaabccc">> = iolist_to_binary(re:replace("aaabccc","a+b?(*THEN)c+(*FAIL)","PV&\\1x\\1vsUDLpYB\\1\\1t",[global])),
+ <<"FhiABxmOfR">> = iolist_to_binary(re:replace("AB","(A (A|B(*ACCEPT)|C) D)(E)","Fhi\\1xmOfR",[extended])),
+ <<"FhiABxmOfR">> = iolist_to_binary(re:replace("AB","(A (A|B(*ACCEPT)|C) D)(E)","Fhi\\1xmOfR",[extended,
+ global])),
+ <<"BHulABQjABrLtABEnSX">> = iolist_to_binary(re:replace("ABX","(A (A|B(*ACCEPT)|C) D)(E)","BHul&Qj&rLt\\1EnS",[extended])),
+ <<"BHulABQjABrLtABEnSX">> = iolist_to_binary(re:replace("ABX","(A (A|B(*ACCEPT)|C) D)(E)","BHul&Qj&rLt\\1EnS",[extended,
+ global])),
+ <<"fwi">> = iolist_to_binary(re:replace("AADE","(A (A|B(*ACCEPT)|C) D)(E)","fwi",[extended])),
+ <<"fwi">> = iolist_to_binary(re:replace("AADE","(A (A|B(*ACCEPT)|C) D)(E)","fwi",[extended,
+ global])),
+ <<"vpACDe">> = iolist_to_binary(re:replace("ACDE","(A (A|B(*ACCEPT)|C) D)(E)","vp\\1e",[extended])),
+ <<"vpACDe">> = iolist_to_binary(re:replace("ACDE","(A (A|B(*ACCEPT)|C) D)(E)","vp\\1e",[extended,
+ global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(A (A|B(*ACCEPT)|C) D)(E)","YJgvKXOIgucMHsvWUdgN",[extended])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(A (A|B(*ACCEPT)|C) D)(E)","YJgvKXOIgucMHsvWUdgN",[extended,
+ global])),
+ <<"AD">> = iolist_to_binary(re:replace("AD","(A (A|B(*ACCEPT)|C) D)(E)","ssJb&\\1nwuF&t",[extended])),
+ <<"AD">> = iolist_to_binary(re:replace("AD","(A (A|B(*ACCEPT)|C) D)(E)","ssJb&\\1nwuF&t",[extended,
+ global])),
+ <<"AjVOUn">> = iolist_to_binary(re:replace("1221","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","AjVOUn",[caseless])),
+ <<"AjVOUn">> = iolist_to_binary(re:replace("1221","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","AjVOUn",[caseless,
+ global])),
+ <<"BDdMi">> = iolist_to_binary(re:replace("Satan, oscillate my metallic sonatas!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","B\\1DdMi",[caseless])),
+ <<"BDdMi">> = iolist_to_binary(re:replace("Satan, oscillate my metallic sonatas!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","B\\1DdMi",[caseless,
+ global])),
+ <<"YfFtA man, a plan, a canal: Panama!pwRSbpA man, a plan, a canal: Panama!">> = iolist_to_binary(re:replace("A man, a plan, a canal: Panama!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","YfFt\\1&\\1pwRSb\\1p&",[caseless])),
+ <<"YfFtA man, a plan, a canal: Panama!pwRSbpA man, a plan, a canal: Panama!">> = iolist_to_binary(re:replace("A man, a plan, a canal: Panama!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","YfFt\\1&\\1pwRSb\\1p&",[caseless,
+ global])),
+ <<"xvAble was I ere I saw Elba.HqjQAble was I ere I saw Elba.vR">> = iolist_to_binary(re:replace("Able was I ere I saw Elba.","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","x\\1v&HqjQ&vR",[caseless])),
+ <<"xvAble was I ere I saw Elba.HqjQAble was I ere I saw Elba.vR">> = iolist_to_binary(re:replace("Able was I ere I saw Elba.","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","x\\1v&HqjQ&vR",[caseless,
+ global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","\\1JH",[caseless])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","\\1JH",[caseless,
+ global])),
+ <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","GCnEOe&\\1HfW&",[caseless])),
+ <<"The quick brown fox">> = iolist_to_binary(re:replace("The quick brown fox","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$","GCnEOe&\\1HfW&",[caseless,
+ global])),
+ <<"EEBtpaXa">> = iolist_to_binary(re:replace("a","^((.)(?1)\\2|.)$","EEBtpaX\\1",[])),
+ <<"EEBtpaXa">> = iolist_to_binary(re:replace("a","^((.)(?1)\\2|.)$","EEBtpaX\\1",[global])),
+ <<"qXEWopOY">> = iolist_to_binary(re:replace("aba","^((.)(?1)\\2|.)$","qXEWopOY",[])),
+ <<"qXEWopOY">> = iolist_to_binary(re:replace("aba","^((.)(?1)\\2|.)$","qXEWopOY",[global])),
+ <<"fQRaabaaaabaaaabaavgdtLaabaaijxUaabaaV">> = iolist_to_binary(re:replace("aabaa","^((.)(?1)\\2|.)$","fQR\\1\\1&vgdtL\\1ijxU\\1V",[])),
+ <<"fQRaabaaaabaaaabaavgdtLaabaaijxUaabaaV">> = iolist_to_binary(re:replace("aabaa","^((.)(?1)\\2|.)$","fQR\\1\\1&vgdtL\\1ijxU\\1V",[global])),
+ <<"rfIabcdcbaQmGUaQxwnGtIhc">> = iolist_to_binary(re:replace("abcdcba","^((.)(?1)\\2|.)$","rfI&QmGUaQxwnGtIhc",[])),
+ <<"rfIabcdcbaQmGUaQxwnGtIhc">> = iolist_to_binary(re:replace("abcdcba","^((.)(?1)\\2|.)$","rfI&QmGUaQxwnGtIhc",[global])),
+ <<"QEpqaabaaqpcpqaabaaqpmxcBpqaabaaqpfErt">> = iolist_to_binary(re:replace("pqaabaaqp","^((.)(?1)\\2|.)$","QE\\1c\\1mxcB&fErt",[])),
+ <<"QEpqaabaaqpcpqaabaaqpmxcBpqaabaaqpfErt">> = iolist_to_binary(re:replace("pqaabaaqp","^((.)(?1)\\2|.)$","QE\\1c\\1mxcB&fErt",[global])),
+ <<"KLFablewasiereisawelbaablewasiereisawelbaIablewasiereisawelbarjablewasiereisawelbasD">> = iolist_to_binary(re:replace("ablewasiereisawelba","^((.)(?1)\\2|.)$","KLF\\1&I&rj&sD",[])),
+ <<"KLFablewasiereisawelbaablewasiereisawelbaIablewasiereisawelbarjablewasiereisawelbasD">> = iolist_to_binary(re:replace("ablewasiereisawelba","^((.)(?1)\\2|.)$","KLF\\1&I&rj&sD",[global])),
+ <<"rhubarb">> = iolist_to_binary(re:replace("rhubarb","^((.)(?1)\\2|.)$","g\\1WKOnON\\1\\1YO\\1\\1Uj\\1F",[])),
+ <<"rhubarb">> = iolist_to_binary(re:replace("rhubarb","^((.)(?1)\\2|.)$","g\\1WKOnON\\1\\1YO\\1\\1Uj\\1F",[global])),
+ <<"the quick brown fox">> = iolist_to_binary(re:replace("the quick brown fox","^((.)(?1)\\2|.)$","JgofHErdXPIu\\1&",[])),
+ <<"the quick brown fox">> = iolist_to_binary(re:replace("the quick brown fox","^((.)(?1)\\2|.)$","JgofHErdXPIu\\1&",[global])),
+ <<"bKFgOfuwLfpxaHaJaz">> = iolist_to_binary(re:replace("baz","(a)(?<=b(?1))","KFgOfuwLfpx&H\\1J\\1",[])),
+ <<"bKFgOfuwLfpxaHaJaz">> = iolist_to_binary(re:replace("baz","(a)(?<=b(?1))","KFgOfuwLfpx&H\\1J\\1",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(a)(?<=b(?1))","i\\1&j&",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(a)(?<=b(?1))","i\\1&j&",[global])),
+ <<"caz">> = iolist_to_binary(re:replace("caz","(a)(?<=b(?1))","l&U&&H&t&",[])),
+ <<"caz">> = iolist_to_binary(re:replace("caz","(a)(?<=b(?1))","l&U&&H&t&",[global])),
+ <<"zbaakOqTqMsiTyaSGadz">> = iolist_to_binary(re:replace("zbaaz","(?<=b(?1))(a)","\\1kOqTqMsiTy\\1SG&d",[])),
+ <<"zbaakOqTqMsiTyaSGadz">> = iolist_to_binary(re:replace("zbaaz","(?<=b(?1))(a)","\\1kOqTqMsiTy\\1SG&d",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=b(?1))(a)","\\1osY\\1treCMjxk&Af",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=b(?1))(a)","\\1osY\\1treCMjxk&Af",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","(?<=b(?1))(a)","ykA&qS&nno",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","(?<=b(?1))(a)","ykA&qS&nno",[global])),
+ <<"baOKaGPxYz">> = iolist_to_binary(re:replace("baz","(?<X>a)(?<=b(?&X))","\\1OK&GPxY",[])),
+ <<"baOKaGPxYz">> = iolist_to_binary(re:replace("baz","(?<X>a)(?<=b(?&X))","\\1OK&GPxY",[global])),
+ ok.
+run43() ->
+ <<"abckIo">> = iolist_to_binary(re:replace("abcabc","^(?|(abc)|(def))\\1","\\1kIo",[])),
+ <<"abckIo">> = iolist_to_binary(re:replace("abcabc","^(?|(abc)|(def))\\1","\\1kIo",[global])),
+ <<"sdefdefUbl">> = iolist_to_binary(re:replace("defdef","^(?|(abc)|(def))\\1","s&Ubl",[])),
+ <<"sdefdefUbl">> = iolist_to_binary(re:replace("defdef","^(?|(abc)|(def))\\1","s&Ubl",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?|(abc)|(def))\\1","&m&bWQpRl",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?|(abc)|(def))\\1","&m&bWQpRl",[global])),
+ <<"abcdef">> = iolist_to_binary(re:replace("abcdef","^(?|(abc)|(def))\\1","qwUmfoHo&tN",[])),
+ <<"abcdef">> = iolist_to_binary(re:replace("abcdef","^(?|(abc)|(def))\\1","qwUmfoHo&tN",[global])),
+ <<"defabc">> = iolist_to_binary(re:replace("defabc","^(?|(abc)|(def))\\1","KGoYhhlYddcruQ&k",[])),
+ <<"defabc">> = iolist_to_binary(re:replace("defabc","^(?|(abc)|(def))\\1","KGoYhhlYddcruQ&k",[global])),
+ <<"PdYfAnnabcPxabcabcHvAQabcabcabcabcabcls">> = iolist_to_binary(re:replace("abcabc","^(?|(abc)|(def))(?1)","PdYfAnn\\1Px&HvAQ&&\\1ls",[])),
+ <<"PdYfAnnabcPxabcabcHvAQabcabcabcabcabcls">> = iolist_to_binary(re:replace("abcabc","^(?|(abc)|(def))(?1)","PdYfAnn\\1Px&HvAQ&&\\1ls",[global])),
+ <<"PAdefabc">> = iolist_to_binary(re:replace("defabc","^(?|(abc)|(def))(?1)","PA&",[])),
+ <<"PAdefabc">> = iolist_to_binary(re:replace("defabc","^(?|(abc)|(def))(?1)","PA&",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?|(abc)|(def))(?1)","Fqig",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?|(abc)|(def))(?1)","Fqig",[global])),
+ <<"defdef">> = iolist_to_binary(re:replace("defdef","^(?|(abc)|(def))(?1)","e&yLb\\1&\\1D\\1q\\1UcBtn&",[])),
+ <<"defdef">> = iolist_to_binary(re:replace("defdef","^(?|(abc)|(def))(?1)","e&yLb\\1&\\1D\\1q\\1UcBtn&",[global])),
+ <<"abcdef">> = iolist_to_binary(re:replace("abcdef","^(?|(abc)|(def))(?1)","&\\1\\1\\1atTuOfcyl\\1RO&y",[])),
+ <<"abcdef">> = iolist_to_binary(re:replace("abcdef","^(?|(abc)|(def))(?1)","&\\1\\1\\1atTuOfcyl\\1RO&y",[global])),
+ <<"ACBCSBCTCMoOD">> = iolist_to_binary(re:replace("ABCD","(?:(?1)|B)(A(*F)|C)","C&S&T\\1MoO",[])),
+ <<"ACBCSBCTCMoOD">> = iolist_to_binary(re:replace("ABCD","(?:(?1)|B)(A(*F)|C)","C&S&T\\1MoO",[global])),
+ <<"bD">> = iolist_to_binary(re:replace("CCD","(?:(?1)|B)(A(*F)|C)","b",[])),
+ <<"bD">> = iolist_to_binary(re:replace("CCD","(?:(?1)|B)(A(*F)|C)","b",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?:(?1)|B)(A(*F)|C)","u&dbYn\\1jVvV&V\\1XC",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?:(?1)|B)(A(*F)|C)","u&dbYn\\1jVvV&V\\1XC",[global])),
+ <<"CAD">> = iolist_to_binary(re:replace("CAD","(?:(?1)|B)(A(*F)|C)","UbDT\\1DjcdPh",[])),
+ <<"CAD">> = iolist_to_binary(re:replace("CAD","(?:(?1)|B)(A(*F)|C)","UbDT\\1DjcdPh",[global])),
+ <<"CCahPD">> = iolist_to_binary(re:replace("CCD","^(?:(?1)|B)(A(*F)|C)","&ahP",[])),
+ <<"CCahPD">> = iolist_to_binary(re:replace("CCD","^(?:(?1)|B)(A(*F)|C)","&ahP",[global])),
+ <<"IYJaGD">> = iolist_to_binary(re:replace("BCD","^(?:(?1)|B)(A(*F)|C)","IYJaG",[])),
+ <<"IYJaGD">> = iolist_to_binary(re:replace("BCD","^(?:(?1)|B)(A(*F)|C)","IYJaG",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:(?1)|B)(A(*F)|C)","uckGWWHQG&ocJD\\1l\\1T",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:(?1)|B)(A(*F)|C)","uckGWWHQG&ocJD\\1l\\1T",[global])),
+ <<"ABCD">> = iolist_to_binary(re:replace("ABCD","^(?:(?1)|B)(A(*F)|C)","qbEQn",[])),
+ <<"ABCD">> = iolist_to_binary(re:replace("ABCD","^(?:(?1)|B)(A(*F)|C)","qbEQn",[global])),
+ <<"CAD">> = iolist_to_binary(re:replace("CAD","^(?:(?1)|B)(A(*F)|C)","kVqFM&D",[])),
+ <<"CAD">> = iolist_to_binary(re:replace("CAD","^(?:(?1)|B)(A(*F)|C)","kVqFM&D",[global])),
+ <<"BAD">> = iolist_to_binary(re:replace("BAD","^(?:(?1)|B)(A(*F)|C)","nKcCWd\\1",[])),
+ <<"BAD">> = iolist_to_binary(re:replace("BAD","^(?:(?1)|B)(A(*F)|C)","nKcCWd\\1",[global])),
+ <<"mCJFixrmAAAPiiNWHD">> = iolist_to_binary(re:replace("AAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","mCJFixrm&APiiNWH",[])),
+ <<"mCJFixrmAAAPiiNWHD">> = iolist_to_binary(re:replace("AAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","mCJFixrm&APiiNWH",[global])),
+ <<"fjOtIXCc">> = iolist_to_binary(re:replace("ACD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","fjOtIXCc",[])),
+ <<"fjOtIXCc">> = iolist_to_binary(re:replace("ACD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","fjOtIXCc",[global])),
+ <<"KSgQhFSAnBABD">> = iolist_to_binary(re:replace("BAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","KSgQhFS\\1n&B",[])),
+ <<"KSgQhFSAnBABD">> = iolist_to_binary(re:replace("BAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","KSgQhFS\\1n&B",[global])),
+ <<"KdBHaAwVPBCDCGCsRCBCD">> = iolist_to_binary(re:replace("BCD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","KdBHaAwVP&\\1G\\1sRC&",[])),
+ <<"KdBHaAwVPBCDCGCsRCBCD">> = iolist_to_binary(re:replace("BCD","(?:(?1)|B)(A(*ACCEPT)XX|C)D","KdBHaAwVP&\\1G\\1sRC&",[global])),
+ <<"iaomqEcFWGhoDBAAnBAiCX">> = iolist_to_binary(re:replace("BAX","(?:(?1)|B)(A(*ACCEPT)XX|C)D","iaomqEcFWGhoD&\\1n&iC",[])),
+ <<"iaomqEcFWGhoDBAAnBAiCX">> = iolist_to_binary(re:replace("BAX","(?:(?1)|B)(A(*ACCEPT)XX|C)D","iaomqEcFWGhoD&\\1n&iC",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?:(?1)|B)(A(*ACCEPT)XX|C)D","S\\1&OO",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?:(?1)|B)(A(*ACCEPT)XX|C)D","S\\1&OO",[global])),
+ <<"ACX">> = iolist_to_binary(re:replace("ACX","(?:(?1)|B)(A(*ACCEPT)XX|C)D","F\\1&dqt",[])),
+ <<"ACX">> = iolist_to_binary(re:replace("ACX","(?:(?1)|B)(A(*ACCEPT)XX|C)D","F\\1&dqt",[global])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","(?:(?1)|B)(A(*ACCEPT)XX|C)D","bL\\1I",[])),
+ <<"ABC">> = iolist_to_binary(re:replace("ABC","(?:(?1)|B)(A(*ACCEPT)XX|C)D","bL\\1I",[global])),
+ <<"h">> = iolist_to_binary(re:replace("BAC","(?(DEFINE)(A))B(?1)C","\\1h",[])),
+ <<"h">> = iolist_to_binary(re:replace("BAC","(?(DEFINE)(A))B(?1)C","\\1h",[global])),
+ <<"EiDCVEGlgEGIr">> = iolist_to_binary(re:replace("BAAC","(?(DEFINE)((A)\\2))B(?1)C","E\\1iD\\1C\\1V\\1EG\\1lgEGIr",[])),
+ <<"EiDCVEGlgEGIr">> = iolist_to_binary(re:replace("BAAC","(?(DEFINE)((A)\\2))B(?1)C","E\\1iD\\1C\\1V\\1EG\\1lgEGIr",[global])),
+ <<"u(ab(cd)ef)(ab(cd)ef)v(ab(cd)ef)M">> = iolist_to_binary(re:replace("(ab(cd)ef)","(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )","u&\\1v&M",[extended])),
+ <<"u(ab(cd)ef)(ab(cd)ef)v(ab(cd)ef)M">> = iolist_to_binary(re:replace("(ab(cd)ef)","(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )","u&\\1v&M",[extended,
+ global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?=a(*SKIP)b|ac)","EhJBenWdk&&",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?=a(*SKIP)b|ac)","EhJBenWdk&&",[global])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","^(?=a(*SKIP)b|ac)","DVmcudRK&vBXmqcVY",[])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","^(?=a(*SKIP)b|ac)","DVmcudRK&vBXmqcVY",[global])),
+ <<"qxyHbdqjab">> = iolist_to_binary(re:replace("ab","^(?=a(*PRUNE)b)","qxyH&bdqj",[])),
+ <<"qxyHbdqjab">> = iolist_to_binary(re:replace("ab","^(?=a(*PRUNE)b)","qxyH&bdqj",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?=a(*PRUNE)b)","qDd\\1UHvpsMvHI\\1gEx&d",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?=a(*PRUNE)b)","qDd\\1UHvpsMvHI\\1gEx&d",[global])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","^(?=a(*PRUNE)b)","mB\\1\\1R&\\1Ax",[])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","^(?=a(*PRUNE)b)","mB\\1\\1R&\\1Ax",[global])),
+ <<"FpGwac">> = iolist_to_binary(re:replace("ac","^(?=a(*ACCEPT)b)","Fp\\1Gw",[])),
+ <<"FpGwac">> = iolist_to_binary(re:replace("ac","^(?=a(*ACCEPT)b)","Fp\\1Gw",[global])),
+ <<"abCqbtkqunCIvDxbdMM">> = iolist_to_binary(re:replace("ab","(?>a\\Kb)","&Cq&t\\1kqunCIvDx&dMM",[])),
+ <<"abCqbtkqunCIvDxbdMM">> = iolist_to_binary(re:replace("ab","(?>a\\Kb)","&Cq&t\\1kqunCIvDx&dMM",[global])),
+ <<"aAk">> = iolist_to_binary(re:replace("ab","((?>a\\Kb))","Ak",[])),
+ <<"aAk">> = iolist_to_binary(re:replace("ab","((?>a\\Kb))","Ak",[global])),
+ <<"anKUUUFwaxNFjPabNJd">> = iolist_to_binary(re:replace("ab","(a\\Kb)","nKUUUFwaxNFjP\\1NJd",[])),
+ <<"anKUUUFwaxNFjPabNJd">> = iolist_to_binary(re:replace("ab","(a\\Kb)","nKUUUFwaxNFjP\\1NJd",[global])),
+ <<"acuYfxPcxoRKaceSXk">> = iolist_to_binary(re:replace("ac","^a\\Kcz|ac","&uYfxPcxoRK\\1\\1&eSXk",[])),
+ <<"acuYfxPcxoRKaceSXk">> = iolist_to_binary(re:replace("ac","^a\\Kcz|ac","&uYfxPcxoRK\\1\\1&eSXk",[global])),
+ <<"abCSFabuababvPlR">> = iolist_to_binary(re:replace("ab","(?>a\\Kbz|ab)","\\1&CSF&u&&vPlR",[])),
+ <<"abCSFabuababvPlR">> = iolist_to_binary(re:replace("ab","(?>a\\Kbz|ab)","\\1&CSF&u&&vPlR",[global])),
+ <<"aomXuCuVpjjUFcrWQIR">> = iolist_to_binary(re:replace("ab","^(?&t)(?(DEFINE)(?<t>a\\Kb))$","omXuCuVpjjUFcrW\\1QIR",[])),
+ <<"aomXuCuVpjjUFcrWQIR">> = iolist_to_binary(re:replace("ab","^(?&t)(?(DEFINE)(?<t>a\\Kb))$","omXuCuVpjjUFcrW\\1QIR",[global])),
+ <<"a(b)clxcg">> = iolist_to_binary(re:replace("a(b)c","^([^()]|\\((?1)*\\))*$","&lx\\1g",[])),
+ <<"a(b)clxcg">> = iolist_to_binary(re:replace("a(b)c","^([^()]|\\((?1)*\\))*$","&lx\\1g",[global])),
+ <<"dUeBGa(b(c)d)emKya(b(c)d)e">> = iolist_to_binary(re:replace("a(b(c)d)e","^([^()]|\\((?1)*\\))*$","dU\\1BG&mKy&",[])),
+ <<"dUeBGa(b(c)d)emKya(b(c)d)e">> = iolist_to_binary(re:replace("a(b(c)d)e","^([^()]|\\((?1)*\\))*$","dU\\1BG&mKy&",[global])),
+ <<"cP00f0uN">> = iolist_to_binary(re:replace("0","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))","cP&\\1f&uN",[])),
+ <<"cP00f0uN">> = iolist_to_binary(re:replace("0","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))","cP&\\1f&uN",[global])),
+ <<"pV00MD00p00haFc00MG00qG">> = iolist_to_binary(re:replace("00","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))","pV\\1MD\\1p\\1haFc&MG&qG",[])),
+ <<"pV00MD00p00haFc00MG00qG">> = iolist_to_binary(re:replace("00","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))","pV\\1MD\\1p\\1haFc&MG&qG",[global])),
+ <<"GdBC0000INu00000000Y0000">> = iolist_to_binary(re:replace("0000","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))","GdBC&INu&&Y&",[])),
+ <<"GdBC0000INu00000000Y0000">> = iolist_to_binary(re:replace("0000","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))","GdBC&INu&&Y&",[global])),
+ ok.
+run44() ->
+ <<"00RwFP">> = iolist_to_binary(re:replace("0","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))","&&RwFP",[])),
+ <<"00RwFP">> = iolist_to_binary(re:replace("0","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))","&&RwFP",[global])),
+ <<"TIRVuPlNk0">> = iolist_to_binary(re:replace("00","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))","TIRVuPlNk",[])),
+ <<"TIRVuPlNkTIRVuPlNk">> = iolist_to_binary(re:replace("00","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))","TIRVuPlNk",[global])),
+ <<"0IxIBm0KbqqiO000">> = iolist_to_binary(re:replace("0000","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))","&IxIBm&KbqqiO",[])),
+ <<"0IxIBm0KbqqiO0IxIBm0KbqqiO0IxIBm0KbqqiO0IxIBm0KbqqiO">> = iolist_to_binary(re:replace("0000","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))","&IxIBm&KbqqiO",[global])),
+ <<"ACABX">> = iolist_to_binary(re:replace("ACABX","A(*COMMIT)(B|D)","\\1&&\\1KWXWa",[])),
+ <<"ACABX">> = iolist_to_binary(re:replace("ACABX","A(*COMMIT)(B|D)","\\1&&\\1KWXWa",[global])),
+ <<"ABCgPYRRqRBOrABCABCAHBQDEFG">> = iolist_to_binary(re:replace("ABCDEFG","(*COMMIT)(A|P)(B|P)(C|P)","&gPYRRqRBOr&&\\1HBQ",[])),
+ <<"ABCgPYRRqRBOrABCABCAHBQDEFG">> = iolist_to_binary(re:replace("ABCDEFG","(*COMMIT)(A|P)(B|P)(C|P)","&gPYRRqRBOr&&\\1HBQ",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(*COMMIT)(A|P)(B|P)(C|P)","awq\\1dexeIK&rKgbPrqk",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(*COMMIT)(A|P)(B|P)(C|P)","awq\\1dexeIK&rKgbPrqk",[global])),
+ <<"DEFGABC">> = iolist_to_binary(re:replace("DEFGABC","(*COMMIT)(A|P)(B|P)(C|P)","NRfdYIv\\1HtrT",[])),
+ <<"DEFGABC">> = iolist_to_binary(re:replace("DEFGABC","(*COMMIT)(A|P)(B|P)(C|P)","NRfdYIv\\1HtrT",[global])),
+ <<"jYabbbAGmvaabbbXabbbTAaixGp">> = iolist_to_binary(re:replace("abbb","(\\w+)(?>b(*COMMIT))\\w{2}","jY&AGmv\\1&X&TA\\1ixGp",[])),
+ <<"jYabbbAGmvaabbbXabbbTAaixGp">> = iolist_to_binary(re:replace("abbb","(\\w+)(?>b(*COMMIT))\\w{2}","jY&AGmv\\1&X&TA\\1ixGp",[global])),
+ <<"abbb">> = iolist_to_binary(re:replace("abbb","(\\w+)b(*COMMIT)\\w{2}","\\1mM",[])),
+ <<"abbb">> = iolist_to_binary(re:replace("abbb","(\\w+)b(*COMMIT)\\w{2}","\\1mM",[global])),
+ <<"bofPRc">> = iolist_to_binary(re:replace("bac","(?&t)(?#()(?(DEFINE)(?<t>a))","ofPR",[])),
+ <<"bofPRc">> = iolist_to_binary(re:replace("bac","(?&t)(?#()(?(DEFINE)(?<t>a))","ofPR",[global])),
+ <<"yes">> = iolist_to_binary(re:replace("yes","(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?","&ItXS\\1Uh&ueLGo\\1AKJxK",[])),
+ <<"yes">> = iolist_to_binary(re:replace("yes","(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?","&ItXS\\1Uh&ueLGo\\1AKJxK",[global])),
+ <<"yes">> = iolist_to_binary(re:replace("yes","(?>(*COMMIT)(yes|no)(*THEN)(*F))?","VnOG&\\1W",[])),
+ <<"yes">> = iolist_to_binary(re:replace("yes","(?>(*COMMIT)(yes|no)(*THEN)(*F))?","VnOG&\\1W",[global])),
+ ok.
+run45() ->
+ <<"LVLUbcejbciMOvVvY">> = iolist_to_binary(re:replace("bc","b?(*SKIP)c","LV\\1LU&ej&iMOvVvY",[])),
+ <<"LVLUbcejbciMOvVvY">> = iolist_to_binary(re:replace("bc","b?(*SKIP)c","LV\\1LU&ej&iMOvVvY",[global])),
+ <<"aHUUUhKBfPpjU">> = iolist_to_binary(re:replace("abc","b?(*SKIP)c","\\1HUUUhKBf\\1P\\1pjU",[])),
+ <<"aHUUUhKBfPpjU">> = iolist_to_binary(re:replace("abc","b?(*SKIP)c","\\1HUUUhKBf\\1P\\1pjU",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","(*SKIP)bc","\\1F&mJF",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","(*SKIP)bc","\\1F&mJF",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","(*SKIP)b","P\\1EF",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","(*SKIP)b","P\\1EF",[global])),
+ <<"EiQojDQBehRidDoNAxxx">> = iolist_to_binary(re:replace("xxx","(?P<abn>(?P=abn)xxx|)+","EiQojDQBehRidDoNA",[])),
+ <<"EiQojDQBehRidDoNAxEiQojDQBehRidDoNAxEiQojDQBehRidDoNAxEiQojDQBehRidDoNA">> = iolist_to_binary(re:replace("xxx","(?P<abn>(?P=abn)xxx|)+","EiQojDQBehRidDoNA",[global])),
+ <<"akmvYT">> = iolist_to_binary(re:replace("aa","(?i:([^b]))(?1)","akmvYT",[])),
+ <<"akmvYT">> = iolist_to_binary(re:replace("aa","(?i:([^b]))(?1)","akmvYT",[global])),
+ <<"alaAraWMaaaAKIgQdaAOaF">> = iolist_to_binary(re:replace("aA","(?i:([^b]))(?1)","\\1l&r\\1WM\\1\\1&KIgQd&O\\1F",[])),
+ <<"alaAraWMaaaAKIgQdaAOaF">> = iolist_to_binary(re:replace("aA","(?i:([^b]))(?1)","\\1l&r\\1WM\\1\\1&KIgQd&O\\1F",[global])),
+ <<"*XAfh**hlh Failers">> = iolist_to_binary(re:replace("** Failers","(?i:([^b]))(?1)","\\1XAfh&hlh",[])),
+ <<"*XAfh**hlh XAfh FhlhaXAfhaihlhlXAfhlehlhrXAfhrshlh">> = iolist_to_binary(re:replace("** Failers","(?i:([^b]))(?1)","\\1XAfh&hlh",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","(?i:([^b]))(?1)","e\\1eCmoSn",[])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","(?i:([^b]))(?1)","e\\1eCmoSn",[global])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?i:([^b]))(?1)","hiocPQeyl&&Nx\\1",[])),
+ <<"aB">> = iolist_to_binary(re:replace("aB","(?i:([^b]))(?1)","hiocPQeyl&&Nx\\1",[global])),
+ <<"Ba">> = iolist_to_binary(re:replace("Ba","(?i:([^b]))(?1)","Q\\1ImC\\1ihLTYkO",[])),
+ <<"Ba">> = iolist_to_binary(re:replace("Ba","(?i:([^b]))(?1)","Q\\1ImC\\1ihLTYkO",[global])),
+ <<"ba">> = iolist_to_binary(re:replace("ba","(?i:([^b]))(?1)","R\\1bTV\\1\\1",[])),
+ <<"ba">> = iolist_to_binary(re:replace("ba","(?i:([^b]))(?1)","R\\1bTV\\1\\1",[global])),
+ <<"mwO">> = iolist_to_binary(re:replace("aaaaaaX","^(?&t)*+(?(DEFINE)(?<t>a))\\w$","mwO",[])),
+ <<"mwO">> = iolist_to_binary(re:replace("aaaaaaX","^(?&t)*+(?(DEFINE)(?<t>a))\\w$","mwO",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?&t)*+(?(DEFINE)(?<t>a))\\w$","EQl\\1AR",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?&t)*+(?(DEFINE)(?<t>a))\\w$","EQl\\1AR",[global])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(?&t)*+(?(DEFINE)(?<t>a))\\w$","&yy\\1GJaXojFYo",[])),
+ <<"aaaaaa">> = iolist_to_binary(re:replace("aaaaaa","^(?&t)*+(?(DEFINE)(?<t>a))\\w$","&yy\\1GJaXojFYo",[global])),
+ <<"WMarOaaaaaaXebFIbQKdmm">> = iolist_to_binary(re:replace("aaaaaaX","^(?&t)*(?(DEFINE)(?<t>a))\\w$","\\1W\\1MarO&ebFIbQKdm\\1\\1m",[])),
+ <<"WMarOaaaaaaXebFIbQKdmm">> = iolist_to_binary(re:replace("aaaaaaX","^(?&t)*(?(DEFINE)(?<t>a))\\w$","\\1W\\1MarO&ebFIbQKdm\\1\\1m",[global])),
+ <<"lWw">> = iolist_to_binary(re:replace("aaaaaa","^(?&t)*(?(DEFINE)(?<t>a))\\w$","lWw\\1",[])),
+ <<"lWw">> = iolist_to_binary(re:replace("aaaaaa","^(?&t)*(?(DEFINE)(?<t>a))\\w$","lWw\\1",[global])),
+ <<"IpraaaaXkaKXqwTNFSEgDP">> = iolist_to_binary(re:replace("aaaaX","^(a)*+(\\w)","Ipr&k\\1KXqwTNFSEgDP",[])),
+ <<"IpraaaaXkaKXqwTNFSEgDP">> = iolist_to_binary(re:replace("aaaaX","^(a)*+(\\w)","Ipr&k\\1KXqwTNFSEgDP",[global])),
+ <<"jnYLYhYZ">> = iolist_to_binary(re:replace("YZ","^(a)*+(\\w)","jn&L&\\1\\1hY",[])),
+ <<"jnYLYhYZ">> = iolist_to_binary(re:replace("YZ","^(a)*+(\\w)","jn&L&\\1\\1hY",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a)*+(\\w)","d\\1&ohvven\\1&P\\1\\1exSs",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a)*+(\\w)","d\\1&ohvven\\1&P\\1\\1exSs",[global])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(a)*+(\\w)","biv&rxkne",[])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(a)*+(\\w)","biv&rxkne",[global])),
+ <<"FVSRXhsNXQwYCX">> = iolist_to_binary(re:replace("aaaaX","^(?:a)*+(\\w)","FVSR\\1hsN\\1QwYC\\1",[])),
+ <<"FVSRXhsNXQwYCX">> = iolist_to_binary(re:replace("aaaaX","^(?:a)*+(\\w)","FVSR\\1hsN\\1QwYC\\1",[global])),
+ <<"MiyTnbYYLxIYkYvmDUZ">> = iolist_to_binary(re:replace("YZ","^(?:a)*+(\\w)","MiyTnb&&LxI\\1k\\1vmDU",[])),
+ <<"MiyTnbYYLxIYkYvmDUZ">> = iolist_to_binary(re:replace("YZ","^(?:a)*+(\\w)","MiyTnb&&LxI\\1k\\1vmDU",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:a)*+(\\w)","&Ugr\\1y",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:a)*+(\\w)","&Ugr\\1y",[global])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(?:a)*+(\\w)","\\1\\1&Qbd\\1SyY&u",[])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(?:a)*+(\\w)","\\1\\1&Qbd\\1SyY&u",[global])),
+ <<"uQsoweaaaaXLoVaaaaaXmpAeu">> = iolist_to_binary(re:replace("aaaaX","^(a)++(\\w)","uQsowe&LoVa&mpAeu",[])),
+ <<"uQsoweaaaaXLoVaaaaaXmpAeu">> = iolist_to_binary(re:replace("aaaaX","^(a)++(\\w)","uQsowe&LoVa&mpAeu",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a)++(\\w)","Nqxlkpdpkdkbt",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a)++(\\w)","Nqxlkpdpkdkbt",[global])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(a)++(\\w)","rKpJsjRH&q",[])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(a)++(\\w)","rKpJsjRH&q",[global])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(a)++(\\w)","\\1kUJik\\1c\\1d\\1wcEQVl",[])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(a)++(\\w)","\\1kUJik\\1c\\1d\\1wcEQVl",[global])),
+ <<"aaaaXaaaaX">> = iolist_to_binary(re:replace("aaaaX","^(?:a)++(\\w)","&&",[])),
+ <<"aaaaXaaaaX">> = iolist_to_binary(re:replace("aaaaX","^(?:a)++(\\w)","&&",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:a)++(\\w)","qJF",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:a)++(\\w)","qJF",[global])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(?:a)++(\\w)","Myqjwdc&SqVjwe\\1ab\\1x",[])),
+ <<"aaaa">> = iolist_to_binary(re:replace("aaaa","^(?:a)++(\\w)","Myqjwdc&SqVjwe\\1ab\\1x",[global])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(?:a)++(\\w)","pXmu",[])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(?:a)++(\\w)","pXmu",[global])),
+ <<"dKaaX">> = iolist_to_binary(re:replace("aaaaX","^(a)?+(\\w)","dK",[])),
+ <<"dKaaX">> = iolist_to_binary(re:replace("aaaaX","^(a)?+(\\w)","dK",[global])),
+ <<"QtZ">> = iolist_to_binary(re:replace("YZ","^(a)?+(\\w)","Qt",[])),
+ <<"QtZ">> = iolist_to_binary(re:replace("YZ","^(a)?+(\\w)","Qt",[global])),
+ <<"yaaX">> = iolist_to_binary(re:replace("aaaaX","^(?:a)?+(\\w)","y",[])),
+ <<"yaaX">> = iolist_to_binary(re:replace("aaaaX","^(?:a)?+(\\w)","y",[global])),
+ <<"knhrTYKYCYLYLHYZ">> = iolist_to_binary(re:replace("YZ","^(?:a)?+(\\w)","knhrT\\1K&C&L\\1LH\\1",[])),
+ <<"knhrTYKYCYLYLHYZ">> = iolist_to_binary(re:replace("YZ","^(?:a)?+(\\w)","knhrT\\1K&C&L\\1LH\\1",[global])),
+ <<"qaFxAasVdrHD">> = iolist_to_binary(re:replace("aaaaX","^(a){2,}+(\\w)","q\\1FxAasVdrHD",[])),
+ <<"qaFxAasVdrHD">> = iolist_to_binary(re:replace("aaaaX","^(a){2,}+(\\w)","q\\1FxAasVdrHD",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a){2,}+(\\w)","Ce",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(a){2,}+(\\w)","Ce",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a){2,}+(\\w)","Pr\\1pRjfic",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(a){2,}+(\\w)","Pr\\1pRjfic",[global])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(a){2,}+(\\w)","\\1qc&A\\1p\\1Ce",[])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(a){2,}+(\\w)","\\1qc&A\\1p\\1Ce",[global])),
+ <<"TomaaaaXfexyXrPgPChaaaaXUaaaaX">> = iolist_to_binary(re:replace("aaaaX","^(?:a){2,}+(\\w)","Tom&fexy\\1rPgPCh&U&",[])),
+ <<"TomaaaaXfexyXrPgPChaaaaXUaaaaX">> = iolist_to_binary(re:replace("aaaaX","^(?:a){2,}+(\\w)","Tom&fexy\\1rPgPCh&U&",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:a){2,}+(\\w)","QxuQNyMAkLj\\1N",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","^(?:a){2,}+(\\w)","QxuQNyMAkLj\\1N",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(?:a){2,}+(\\w)","qs&d\\1p&DFpaHv",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^(?:a){2,}+(\\w)","qs&d\\1p&DFpaHv",[global])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(?:a){2,}+(\\w)","&YUGUUNV&jklvBQ",[])),
+ <<"YZ">> = iolist_to_binary(re:replace("YZ","^(?:a){2,}+(\\w)","&YUGUUNV&jklvBQ",[global])),
+ <<"kRhvBb">> = iolist_to_binary(re:replace("b","(a|)*(?1)b","kRhvB&",[])),
+ <<"kRhvBb">> = iolist_to_binary(re:replace("b","(a|)*(?1)b","kRhvB&",[global])),
+ <<"UabqY">> = iolist_to_binary(re:replace("ab","(a|)*(?1)b","U&qY",[])),
+ <<"UabqY">> = iolist_to_binary(re:replace("ab","(a|)*(?1)b","U&qY",[global])),
+ <<"vmyFiqvLaabXSeOYAObD">> = iolist_to_binary(re:replace("aab","(a|)*(?1)b","vmyFiqvL&XSeOYAObD",[])),
+ <<"vmyFiqvLaabXSeOYAObD">> = iolist_to_binary(re:replace("aab","(a|)*(?1)b","vmyFiqvL&XSeOYAObD",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(a)++(?1)b","aYXyIdVfFghDXyBuUsnK",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(a)++(?1)b","aYXyIdVfFghDXyBuUsnK",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","(a)++(?1)b","mJgf&UxblrhCqYENY",[])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","(a)++(?1)b","mJgf&UxblrhCqYENY",[global])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","(a)++(?1)b","Nji&a",[])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","(a)++(?1)b","Nji&a",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(a)*+(?1)b","oFCeDPwP&kYedB",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(a)*+(?1)b","oFCeDPwP&kYedB",[global])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","(a)*+(?1)b","&ws\\1adQnsr\\1NinVGyRsh",[])),
+ <<"ab">> = iolist_to_binary(re:replace("ab","(a)*+(?1)b","&ws\\1adQnsr\\1NinVGyRsh",[global])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","(a)*+(?1)b","Sb&x&",[])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","(a)*+(?1)b","Sb&x&",[global])),
+ <<"bQNe">> = iolist_to_binary(re:replace("b","(?1)(?:(b)){0}","&QNe",[])),
+ <<"bQNe">> = iolist_to_binary(re:replace("b","(?1)(?:(b)){0}","&QNe",[global])),
+ <<"KRfoo(bar(baz)+baz(bop))yTvP">> = iolist_to_binary(re:replace("foo(bar(baz)+baz(bop))","(foo ( \\( ((?:(?> [^()]+ )|(?2))*) \\) ) )","KR\\1yTvP",[extended])),
+ <<"KRfoo(bar(baz)+baz(bop))yTvP">> = iolist_to_binary(re:replace("foo(bar(baz)+baz(bop))","(foo ( \\( ((?:(?> [^()]+ )|(?2))*) \\) ) )","KR\\1yTvP",[extended,
+ global])),
+ ok.
+run46() ->
+ <<"Cfqx">> = iolist_to_binary(re:replace("AB","(A (A|B(*ACCEPT)|C) D)(E)","Cfqx",[extended])),
+ <<"Cfqx">> = iolist_to_binary(re:replace("AB","(A (A|B(*ACCEPT)|C) D)(E)","Cfqx",[extended,
+ global])),
+ <<"abaaHraVohxea">> = iolist_to_binary(re:replace("ba","\\A.*?(a|bc)","a&\\1Hr\\1Vohxe\\1",[])),
+ <<"abaaHraVohxea">> = iolist_to_binary(re:replace("ba","\\A.*?(a|bc)","a&\\1Hr\\1Vohxe\\1",[global])),
+ <<"hEyjnxKIbWTujTtR">> = iolist_to_binary(re:replace("ba","\\A.*?(?:a|bc)++","hEyjnxKIbWT\\1ujT\\1tR",[])),
+ <<"hEyjnxKIbWTujTtR">> = iolist_to_binary(re:replace("ba","\\A.*?(?:a|bc)++","hEyjnxKIbWT\\1ujT\\1tR",[global])),
+ <<"oTgqSlaOSViBsWdYFa">> = iolist_to_binary(re:replace("ba","\\A.*?(a|bc)++","oTgqSl\\1OSViBsWdYF\\1",[])),
+ <<"oTgqSlaOSViBsWdYFa">> = iolist_to_binary(re:replace("ba","\\A.*?(a|bc)++","oTgqSl\\1OSViBsWdYF\\1",[global])),
+ <<"pATfIbaqPbaaOQbaSG">> = iolist_to_binary(re:replace("ba","\\A.*?(?:a|bc|d)","pATfI\\1&qP&aOQ&SG\\1",[])),
+ <<"pATfIbaqPbaaOQbaSG">> = iolist_to_binary(re:replace("ba","\\A.*?(?:a|bc|d)","pATfI\\1&qP&aOQ&SG\\1",[global])),
+ <<"bJYJaBVjnbvSceetle">> = iolist_to_binary(re:replace("beetle","(?:(b))++","bJYJaBVjn\\1vSc",[])),
+ <<"bJYJaBVjnbvSceetle">> = iolist_to_binary(re:replace("beetle","(?:(b))++","bJYJaBVjn\\1vSc",[global])),
+ <<"MEbqeMaqej">> = iolist_to_binary(re:replace("a","(?(?=(a(*ACCEPT)z))a)","MEbqeM\\1qej",[])),
+ <<"MEbqeMaqejMEbqeMqej">> = iolist_to_binary(re:replace("a","(?(?=(a(*ACCEPT)z))a)","MEbqeM\\1qej",[global])),
+ <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a)(?1)+ab","&",[])),
+ <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a)(?1)+ab","&",[global])),
+ <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a)(?1)++ab","O&\\1shXpvDpv&VVC",[])),
+ <<"aaaab">> = iolist_to_binary(re:replace("aaaab","^(a)(?1)++ab","O&\\1shXpvDpv&VVC",[global])),
+ <<"RARockgammon">> = iolist_to_binary(re:replace("backgammon","(?(DEFINE)(a))?b(?1)","RARo\\1",[])),
+ <<"RARockgammon">> = iolist_to_binary(re:replace("backgammon","(?(DEFINE)(a))?b(?1)","RARo\\1",[global])),
+ <<"wlgVxP
+def">> = iolist_to_binary(re:replace("abc
+def","^\\N+","wlgVxP",[])),
+ <<"wlgVxP
+def">> = iolist_to_binary(re:replace("abc
+def","^\\N+","wlgVxP",[global])),
+ <<"G
+def">> = iolist_to_binary(re:replace("abc
+def","^\\N{1,}","G",[])),
+ <<"G
+def">> = iolist_to_binary(re:replace("abc
+def","^\\N{1,}","G",[global])),
+ <<"Iocde">> = iolist_to_binary(re:replace("aaaabcde","(?(R)a+|(?R)b)","Io",[])),
+ <<"Iocde">> = iolist_to_binary(re:replace("aaaabcde","(?(R)a+|(?R)b)","Io",[global])),
+ <<"kXRsqrvOjaaaaanNXFFUcde">> = iolist_to_binary(re:replace("aaaabcde","(?(R)a+|((?R))b)","kXRsqrvOja\\1nNXFFU",[])),
+ <<"kXRsqrvOjaaaaanNXFFUcde">> = iolist_to_binary(re:replace("aaaabcde","(?(R)a+|((?R))b)","kXRsqrvOja\\1nNXFFU",[global])),
+ <<"QNpwCPcde">> = iolist_to_binary(re:replace("aaaabcde","((?(R)a+|(?1)b))","QNpwCP",[])),
+ <<"QNpwCPcde">> = iolist_to_binary(re:replace("aaaabcde","((?(R)a+|(?1)b))","QNpwCP",[global])),
+ <<"QcDpPOcde">> = iolist_to_binary(re:replace("aaaabcde","((?(R1)a+|(?1)b))","QcDpPO",[])),
+ <<"QcDpPOcde">> = iolist_to_binary(re:replace("aaaabcde","((?(R1)a+|(?1)b))","QcDpPO",[global])),
+ <<"hIv">> = iolist_to_binary(re:replace("a","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))","\\1hIv",[])),
+ <<"hIv">> = iolist_to_binary(re:replace("a","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))","\\1hIv",[global])),
+ <<"bHaeaxaaAF">> = iolist_to_binary(re:replace("ba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))","H&\\1eax&&AF",[])),
+ <<"bHaeaxaaAF">> = iolist_to_binary(re:replace("ba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))","H&\\1eax&&AF",[global])),
+ <<"bbyaRYN">> = iolist_to_binary(re:replace("bba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))","y&RYN",[])),
+ <<"bbyaRYN">> = iolist_to_binary(re:replace("bba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))","y&RYN",[global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b) c","y\\1YaiS",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b) c","y\\1YaiS",[extended,
+ global])),
+ ok.
+run47() ->
+ <<"LababMabJVX">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b|(*F)) c","L\\1\\1M\\1JVX",[extended])),
+ <<"LababMabJVX">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b|(*F)) c","L\\1\\1M\\1JVX",[extended,
+ global])),
+ <<"jBPevabLaabcWNWjnnaabcpgwaabc">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b) | (*F) ) c","jBPev\\1L&WNWjnn&pgw&",[extended])),
+ <<"jBPevabLaabcWNWjnnaabcpgwaabc">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b) | (*F) ) c","jBPev\\1L&WNWjnn&pgw&",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b) ) c","GOxmfDqgi",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b) ) c","GOxmfDqgi",[extended,
global])),
-?line <<"xYgnYjja]Bgw">> = iolist_to_binary(re:replace("a]","[[:abcd:xyz]]","\\1xYgnYjj&Bgw",[])),
-?line <<"xYgnYjja]Bgw">> = iolist_to_binary(re:replace("a]","[[:abcd:xyz]]","\\1xYgnYjj&Bgw",[global])),
-?line <<"K:]Y:]tTEIHHPgm">> = iolist_to_binary(re:replace(":]","[[:abcd:xyz]]","K\\1&Y&tT\\1EI\\1H\\1HP\\1gm",[])),
-?line <<"K:]Y:]tTEIHHPgm">> = iolist_to_binary(re:replace(":]","[[:abcd:xyz]]","K\\1&Y&tT\\1EI\\1H\\1HP\\1gm",[global])),
-?line <<"pcaYhpF">> = iolist_to_binary(re:replace("a","[abc[:x\\]pqr]","pc&Y\\1hpF",[])),
-?line <<"pcaYhpF">> = iolist_to_binary(re:replace("a","[abc[:x\\]pqr]","pc&Y\\1hpF",[global])),
-?line <<"I[">> = iolist_to_binary(re:replace("[","[abc[:x\\]pqr]","I\\1&",[])),
-?line <<"I[">> = iolist_to_binary(re:replace("[","[abc[:x\\]pqr]","I\\1&",[global])),
-?line <<"SYn:iPpASU">> = iolist_to_binary(re:replace(":","[abc[:x\\]pqr]","SY\\1n&iP\\1pAS\\1U",[])),
-?line <<"SYn:iPpASU">> = iolist_to_binary(re:replace(":","[abc[:x\\]pqr]","SY\\1n&iP\\1pAS\\1U",[global])),
-?line <<"VwLRsMyuKqCwx">> = iolist_to_binary(re:replace("]","[abc[:x\\]pqr]","VwLRsMyuKqCwx",[])),
-?line <<"VwLRsMyuKqCwx">> = iolist_to_binary(re:replace("]","[abc[:x\\]pqr]","VwLRsMyuKqCwx",[global])),
-?line <<"YqUufuU">> = iolist_to_binary(re:replace("p","[abc[:x\\]pqr]","YqU\\1ufuU",[])),
-?line <<"YqUufuU">> = iolist_to_binary(re:replace("p","[abc[:x\\]pqr]","YqU\\1ufuU",[global])),
-ok.
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b) c","H\\1mWytdK\\1",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b) c","H\\1mWytdK\\1",[extended,
+ global])),
+ <<"bpmBlFODKYLa">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b|(*F)) c","bpmBlFO\\1DKYLa",[extended])),
+ <<"bpmBlFODKYLa">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b|(*F)) c","bpmBlFO\\1DKYLa",[extended,
+ global])),
+ <<"JjdAaabcVAKJYnJUNmb">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b) | (*F) ) c","JjdA&VAKJYnJUN\\1mb",[extended])),
+ <<"JjdAaabcVAKJYnJUNmb">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b) | (*F) ) c","JjdA&VAKJYnJUN\\1mb",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b) ) c","th\\1Srp\\1LGEBK",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b) ) c","th\\1Srp\\1LGEBK",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?>a(*THEN)b) c","ukgQQVa\\1qLglPHKE",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?>a(*THEN)b) c","ukgQQVa\\1qLglPHKE",[extended,
+ global])),
+ <<"PVXXt">> = iolist_to_binary(re:replace("aabc","^.*? (?>a(*THEN)b|(*F)) c","PVXXt",[extended])),
+ <<"PVXXt">> = iolist_to_binary(re:replace("aabc","^.*? (?>a(*THEN)b|(*F)) c","PVXXt",[extended,
+ global])),
+ <<"XNnaabcsJeaabciijbma">> = iolist_to_binary(re:replace("aabc","^.*? (?> (?>a(*THEN)b) | (*F) ) c","XNn&sJe&iijbma",[extended])),
+ <<"XNnaabcsJeaabciijbma">> = iolist_to_binary(re:replace("aabc","^.*? (?> (?>a(*THEN)b) | (*F) ) c","XNn&sJe&iijbma",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?> (?>a(*THEN)b) ) c","CtO\\1VdQgHMA&JMp",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?> (?>a(*THEN)b) ) c","CtO\\1VdQgHMA&JMp",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b)++ c","AAl\\1s\\1MAOnKUxaX",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b)++ c","AAl\\1s\\1MAOnKUxaX",[extended,
+ global])),
+ <<"iaabcpWabNRGraabct">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b|(*F))++ c","i&pW\\1NRGr&t",[extended])),
+ <<"iaabcpWabNRGraabct">> = iolist_to_binary(re:replace("aabc","^.*? (a(*THEN)b|(*F))++ c","i&pW\\1NRGr&t",[extended,
+ global])),
+ <<"aabcqfVFpeSPlabMdablfKabP">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b)++ | (*F) )++ c","&qfVFpeSPl\\1Md\\1lfK\\1P",[extended])),
+ <<"aabcqfVFpeSPlabMdablfKabP">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b)++ | (*F) )++ c","&qfVFpeSPl\\1Md\\1lfK\\1P",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b)++ )++ c","b\\1de\\1",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? ( (a(*THEN)b)++ )++ c","b\\1de\\1",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b)++ c","&\\1&MQR\\1u\\1SGG&\\1SpJ",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b)++ c","&\\1&MQR\\1u\\1SGG&\\1SpJ",[extended,
+ global])),
+ ok.
+run48() ->
+ <<"SaabcjaKGAOmOgHE">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b|(*F))++ c","S&\\1jaKGAOmOgHE",[extended])),
+ <<"SaabcjaKGAOmOgHE">> = iolist_to_binary(re:replace("aabc","^.*? (?:a(*THEN)b|(*F))++ c","S&\\1jaKGAOmOgHE",[extended,
+ global])),
+ <<"VvLaabclAtFq">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c","VvL&lAtFq",[extended])),
+ <<"VvLaabclAtFq">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c","VvL&lAtFq",[extended,
+ global])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b)++ )++ c","Mg&",[extended])),
+ <<"aabc">> = iolist_to_binary(re:replace("aabc","^.*? (?: (?:a(*THEN)b)++ )++ c","Mg&",[extended,
+ global])),
+ <<"prdTVmJacpUmv">> = iolist_to_binary(re:replace("ac","^(?(?=a(*THEN)b)ab|ac)","prdT\\1VmJ&pUmv",[])),
+ <<"prdTVmJacpUmv">> = iolist_to_binary(re:replace("ac","^(?(?=a(*THEN)b)ab|ac)","prdT\\1VmJ&pUmv",[global])),
+ <<"ba">> = iolist_to_binary(re:replace("ba","^.*?(?(?=a)a|b(*THEN)c)","wa",[])),
+ <<"ba">> = iolist_to_binary(re:replace("ba","^.*?(?(?=a)a|b(*THEN)c)","wa",[global])),
+ <<"JLcpcbaPX">> = iolist_to_binary(re:replace("ba","^.*?(?:(?(?=a)a|b(*THEN)c)|d)","JLcpc&PX",[])),
+ <<"JLcpcbaPX">> = iolist_to_binary(re:replace("ba","^.*?(?:(?(?=a)a|b(*THEN)c)|d)","JLcpc&PX",[global])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","^.*?(?(?=a)a(*THEN)b|c)","P\\1eLsoy&h",[])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","^.*?(?(?=a)a(*THEN)b|c)","P\\1eLsoy&h",[global])),
+ <<"aaQkbjSmrabIabc">> = iolist_to_binary(re:replace("aabc","^.*(?=a(*THEN)b)","&&Q\\1kbjSmr&\\1bI",[])),
+ <<"aaQkbjSmrabIabc">> = iolist_to_binary(re:replace("aabc","^.*(?=a(*THEN)b)","&&Q\\1kbjSmr&\\1bI",[global])),
+ <<"xascDcHDAWsCEkjCgcd">> = iolist_to_binary(re:replace("xacd","(?<=a(*ACCEPT)b)c","s\\1&D&HDAWsCEkjC\\1g&",[])),
+ <<"xascDcHDAWsCEkjCgcd">> = iolist_to_binary(re:replace("xacd","(?<=a(*ACCEPT)b)c","s\\1&D&HDAWsCEkjC\\1g&",[global])),
+ <<"xaTcalxCpPaREWFWqwSqLed">> = iolist_to_binary(re:replace("xacd","(?<=(a(*ACCEPT)b))c","T&\\1lxCpP\\1REWFWqwSqLe",[])),
+ <<"xaTcalxCpPaREWFWqwSqLed">> = iolist_to_binary(re:replace("xacd","(?<=(a(*ACCEPT)b))c","T&\\1lxCpP\\1REWFWqwSqLe",[global])),
+ <<"xababKJXd">> = iolist_to_binary(re:replace("xabcd","(?<=(a(*COMMIT)b))c","\\1KJX",[])),
+ <<"xababKJXd">> = iolist_to_binary(re:replace("xabcd","(?<=(a(*COMMIT)b))c","\\1KJX",[global])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=(a(*COMMIT)b))c","caxcMW&&uQRuH",[])),
+ <<"** Failers">> = iolist_to_binary(re:replace("** Failers","(?<=(a(*COMMIT)b))c","caxcMW&&uQRuH",[global])),
+ <<"xacd">> = iolist_to_binary(re:replace("xacd","(?<=(a(*COMMIT)b))c","FOAJ",[])),
+ <<"xacd">> = iolist_to_binary(re:replace("xacd","(?<=(a(*COMMIT)b))c","FOAJ",[global])),
+ <<"xkklXcAWOSApWPhcsCd">> = iolist_to_binary(re:replace("xcd","(?<!a(*FAIL)b)c","kklX&AWOSApWPhcsC",[])),
+ <<"xkklXcAWOSApWPhcsCd">> = iolist_to_binary(re:replace("xcd","(?<!a(*FAIL)b)c","kklX&AWOSApWPhcsC",[global])),
+ <<"aEd">> = iolist_to_binary(re:replace("acd","(?<!a(*FAIL)b)c","E",[])),
+ <<"aEd">> = iolist_to_binary(re:replace("acd","(?<!a(*FAIL)b)c","E",[global])),
+ <<"xabXbpgbspePmyaYAcaQfd">> = iolist_to_binary(re:replace("xabcd","(?<=a(*PRUNE)b)c","XbpgbspePmyaYA&a\\1Qf\\1",[])),
+ <<"xabXbpgbspePmyaYAcaQfd">> = iolist_to_binary(re:replace("xabcd","(?<=a(*PRUNE)b)c","XbpgbspePmyaYA&a\\1Qf\\1",[global])),
+ <<"xabLEAOaSIPRfaaJd">> = iolist_to_binary(re:replace("xabcd","(?<=a(*SKIP)b)c","LEAO\\1a\\1SIPRfaaJ",[])),
+ <<"xabLEAOaSIPRfaaJd">> = iolist_to_binary(re:replace("xabcd","(?<=a(*SKIP)b)c","LEAO\\1a\\1SIPRfaaJ",[global])),
+ <<"xabaUocAdcnXoUlbd">> = iolist_to_binary(re:replace("xabcd","(?<=a(*THEN)b)c","aUocAdcnXoUlb",[])),
+ <<"xabaUocAdcnXoUlbd">> = iolist_to_binary(re:replace("xabcd","(?<=a(*THEN)b)c","aUocAdcnXoUlb",[global])),
+ <<"nkbGaaSijewUabcdnMG">> = iolist_to_binary(re:replace("abcd","(a)(?2){2}(.)","nkbG\\1aSijewU&nMG",[])),
+ <<"nkbGaaSijewUabcdnMG">> = iolist_to_binary(re:replace("abcd","(a)(?2){2}(.)","nkbG\\1aSijewU&nMG",[global])),
+ ok.
+run49() ->
+ <<"hello world SintestMnKXO">> = iolist_to_binary(re:replace("hello world test","(another)?(\\1?)test","Sin&MnKXO",[])),
+ <<"hello world SintestMnKXO">> = iolist_to_binary(re:replace("hello world test","(another)?(\\1?)test","Sin&MnKXO",[global])),
+ <<"hello world test">> = iolist_to_binary(re:replace("hello world test","(another)?(\\1+)test","EqY&e&Np",[])),
+ <<"hello world test">> = iolist_to_binary(re:replace("hello world test","(another)?(\\1+)test","EqY&e&Np",[global])),
+ <<"aacnRTVpYnGmPcIyAaacWH">> = iolist_to_binary(re:replace("aac","(a(*COMMIT)b){0}a(?1)|aac","\\1&n\\1RTVpYnGmPcIyA&WH",[])),
+ <<"aacnRTVpYnGmPcIyAaacWH">> = iolist_to_binary(re:replace("aac","(a(*COMMIT)b){0}a(?1)|aac","\\1&n\\1RTVpYnGmPcIyA&WH",[global])),
+ <<"saacAdlboHVPY">> = iolist_to_binary(re:replace("aac","((?:a?)*)*c","s&\\1Adlb\\1oHVPY",[])),
+ <<"saacAdlboHVPY">> = iolist_to_binary(re:replace("aac","((?:a?)*)*c","s&\\1Adlb\\1oHVPY",[global])),
+ <<"PQFQipl">> = iolist_to_binary(re:replace("aac","((?>a?)*)*c","\\1PQF\\1Qipl",[])),
+ <<"PQFQipl">> = iolist_to_binary(re:replace("aac","((?>a?)*)*c","\\1PQF\\1Qipl",[global])),
+ <<"aOSwgH">> = iolist_to_binary(re:replace("aba","(?>.*?a)(?<=ba)","OSwg\\1H",[])),
+ <<"aOSwgH">> = iolist_to_binary(re:replace("aba","(?>.*?a)(?<=ba)","OSwg\\1H",[global])),
+ <<"UL">> = iolist_to_binary(re:replace("aba","(?:.*?a)(?<=ba)","UL",[])),
+ <<"UL">> = iolist_to_binary(re:replace("aba","(?:.*?a)(?<=ba)","UL",[global])),
+ <<"akGFFqTULiWlebdQv">> = iolist_to_binary(re:replace("aab",".*?a(*PRUNE)b","kGFFqTU\\1Li\\1\\1Wl\\1ebdQv",[])),
+ <<"akGFFqTULiWlebdQv">> = iolist_to_binary(re:replace("aab",".*?a(*PRUNE)b","kGFFqTU\\1Li\\1\\1Wl\\1ebdQv",[global])),
+ <<"aXPTFWMMabnvLRLXcgs">> = iolist_to_binary(re:replace("aab",".*?a(*PRUNE)b","XP\\1T\\1FWMM&nvLRL\\1Xcgs",[dotall])),
+ <<"aXPTFWMMabnvLRLXcgs">> = iolist_to_binary(re:replace("aab",".*?a(*PRUNE)b","XP\\1T\\1FWMM&nvLRL\\1Xcgs",[dotall,
+ global])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","^a(*PRUNE)b","kTbd&d\\1IUxwe",[dotall])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","^a(*PRUNE)b","kTbd&d\\1IUxwe",[dotall,
+ global])),
+ <<"atVababo">> = iolist_to_binary(re:replace("aab",".*?a(*SKIP)b","\\1tV&&o",[])),
+ <<"atVababo">> = iolist_to_binary(re:replace("aab",".*?a(*SKIP)b","\\1tV&&o",[global])),
+ <<"aWeRyiVpKsDiabnl">> = iolist_to_binary(re:replace("aab","(?>.*?a)b","WeR\\1yiVpKsDi&nl\\1",[dotall])),
+ <<"aWeRyiVpKsDiabnl">> = iolist_to_binary(re:replace("aab","(?>.*?a)b","WeR\\1yiVpKsDi&nl\\1",[dotall,
+ global])),
+ <<"aUabbhWWOF">> = iolist_to_binary(re:replace("aab","(?>.*?a)b","U&bhWWOF\\1",[])),
+ <<"aUabbhWWOF">> = iolist_to_binary(re:replace("aab","(?>.*?a)b","U&bhWWOF\\1",[global])),
+ ok.
+run50() ->
+ <<"aab">> = iolist_to_binary(re:replace("aab","(?>^a)b","l",[dotall])),
+ <<"aab">> = iolist_to_binary(re:replace("aab","(?>^a)b","l",[dotall,
+ global])),
+ <<"alphabetabcdeY">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*?)(?<=(abcd)|(wxyz))","eY",[])),
+ <<"alphabetabcdeY">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*?)(?<=(abcd)|(wxyz))","eY",[global])),
+ <<"endingwxyzmUXcfh">> = iolist_to_binary(re:replace("endingwxyz","(?>.*?)(?<=(abcd)|(wxyz))","mUX&cf\\1\\1h",[])),
+ <<"endingwxyzmUXcfh">> = iolist_to_binary(re:replace("endingwxyz","(?>.*?)(?<=(abcd)|(wxyz))","mUX&cf\\1\\1h",[global])),
+ <<"alphabetabcddalphabetabcdHPabcdycalphabetabcdalphabetabcdabcdAsalphabetabcdnalphabetabcd">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*)(?<=(abcd)|(wxyz))","&d&HP\\1yc&&\\1As&n&",[])),
+ <<"alphabetabcddalphabetabcdHPabcdycalphabetabcdalphabetabcdabcdAsalphabetabcdnalphabetabcddHPabcdycabcdAsn">> = iolist_to_binary(re:replace("alphabetabcd","(?>.*)(?<=(abcd)|(wxyz))","&d&HP\\1yc&&\\1As&n&",[global])),
+ <<"nuJausendingwxyzRQmendingwxyzxY">> = iolist_to_binary(re:replace("endingwxyz","(?>.*)(?<=(abcd)|(wxyz))","nuJaus&RQm&xY",[])),
+ <<"nuJausendingwxyzRQmendingwxyzxYnuJausRQmxY">> = iolist_to_binary(re:replace("endingwxyz","(?>.*)(?<=(abcd)|(wxyz))","nuJaus&RQm&xY",[global])),
+ <<"abcdfooxyz">> = iolist_to_binary(re:replace("abcdfooxyz","(?>.*)foo","tW\\1",[])),
+ <<"abcdfooxyz">> = iolist_to_binary(re:replace("abcdfooxyz","(?>.*)foo","tW\\1",[global])),
+ <<"abcdfooVDUixyz">> = iolist_to_binary(re:replace("abcdfooxyz","(?>.*?)foo","&VDUi",[])),
+ <<"abcdfooVDUixyz">> = iolist_to_binary(re:replace("abcdfooxyz","(?>.*?)foo","&VDUi",[global])),
+ <<"acxmMn">> = iolist_to_binary(re:replace("ac","(?:(a(*PRUNE)b)){0}(?:(?1)|ac)","&\\1xmMn",[])),
+ <<"acxmMn">> = iolist_to_binary(re:replace("ac","(?:(a(*PRUNE)b)){0}(?:(?1)|ac)","&\\1xmMn",[global])),
+ <<"PvKHsAacacQ">> = iolist_to_binary(re:replace("ac","(?:(a(*SKIP)b)){0}(?:(?1)|ac)","P\\1vKHsA&&Q",[])),
+ <<"PvKHsAacacQ">> = iolist_to_binary(re:replace("ac","(?:(a(*SKIP)b)){0}(?:(?1)|ac)","P\\1vKHsA&&Q",[global])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","(?<=(*SKIP)ac)a","g",[])),
+ <<"aa">> = iolist_to_binary(re:replace("aa","(?<=(*SKIP)ac)a","g",[global])),
+ <<"aakcebaaaacgyaaaaceWGsoCOKKn">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*PRUNE)b|a+c","kceb&gy&eWG\\1soCOKKn",[])),
+ <<"aakcebaaaacgyaaaaceWGsoCOKKn">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*PRUNE)b|a+c","kceb&gy&eWG\\1soCOKKn",[global])),
+ <<"aaMwmkmaaaacTVDJaaaacSHIqUKYU">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP)(*PRUNE)b|a+c","Mwmk\\1m&TVDJ&SHIqUKYU",[])),
+ <<"aaMwmkmaaaacTVDJaaaacSHIqUKYU">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP)(*PRUNE)b|a+c","Mwmk\\1m&TVDJ&SHIqUKYU",[global])),
+ <<"aaaaaacWXE">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP:N)(*PRUNE)b|a+c","&WXE",[])),
+ <<"aaaaaacWXE">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP:N)(*PRUNE)b|a+c","&WXE",[global])),
+ <<"aalIbneaaaac">> = iolist_to_binary(re:replace("aaaaaac","aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c","\\1lI\\1b\\1ne&",[])),
+ <<"aalIbneaaaac">> = iolist_to_binary(re:replace("aaaaaac","aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c","\\1lI\\1b\\1ne&",[global])),
+ <<"aauaaaacUCgqIctaaaacOCUYF">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*THEN)(*PRUNE)b|a+c","u&UCg\\1qIct&O\\1CU\\1\\1YF",[])),
+ <<"aauaaaacUCgqIctaaaacOCUYF">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*THEN)(*PRUNE)b|a+c","u&UCg\\1qIct&O\\1CU\\1\\1YF",[global])),
+ ok.
+run51() ->
+ <<"aaaaaKQacStnP">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP)b|a+c","K\\1Q&St\\1nP",[])),
+ <<"aaaaaKQacStnP">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP)b|a+c","K\\1Q&St\\1nP",[global])),
+ <<"aaaaaYggUuQGacfRtKLJ">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*PRUNE)(*SKIP)b|a+c","YggUu\\1QG&\\1fRtKL\\1\\1J\\1",[])),
+ <<"aaaaaYggUuQGacfRtKLJ">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*PRUNE)(*SKIP)b|a+c","YggUu\\1QG&\\1fRtKL\\1\\1J\\1",[global])),
+ <<"aaaaa">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*THEN)(*SKIP)b|a+c","\\1",[])),
+ <<"aaaaa">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*THEN)(*SKIP)b|a+c","\\1",[global])),
+ <<"aaaaaU">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*COMMIT)(*SKIP)b|a+c","U",[])),
+ <<"aaaaaU">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*COMMIT)(*SKIP)b|a+c","U",[global])),
+ <<"aaaaaac">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*COMMIT)b|a+c","kAM",[])),
+ <<"aaaaaac">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*COMMIT)b|a+c","kAM",[global])),
+ <<"VvCwaaaaaacLKWgIbVKGB">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*THEN)b|a+c","VvCw&LKWgIbVKGB",[])),
+ <<"VvCwaaaaaacLKWgIbVKGB">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*THEN)b|a+c","VvCw&LKWgIbVKGB",[global])),
+ <<"abvTAmJ">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP)(*THEN)b|a+c","abvTA\\1mJ",[])),
+ <<"abvTAmJ">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*SKIP)(*THEN)b|a+c","abvTA\\1mJ",[global])),
+ <<"phVmoxx">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*PRUNE)(*THEN)b|a+c","phVm\\1oxx",[])),
+ <<"phVmoxx">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*PRUNE)(*THEN)b|a+c","phVm\\1oxx",[global])),
+ <<"GdHapg">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*COMMIT)(*THEN)b|a+c","Gd\\1Hapg",[])),
+ <<"GdHapg">> = iolist_to_binary(re:replace("aaaaaac","aaaaa(*COMMIT)(*THEN)b|a+c","Gd\\1Hapg",[global])),
+ ok.
+run52() ->
+ <<"aaaaa">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+","\\1",[])),
+ <<"aaaaa">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+","\\1",[global])),
+ <<"aaaaaQvaOuCaBoHYMapab">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+","\\1Qv&\\1OuC&BoHYM&pab",[])),
+ <<"aaaaaQvaOuCaBoHYMapab">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+","\\1Qv&\\1OuC&BoHYM&pab",[global])),
+ <<"aauaaaa">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+","u&",[])),
+ <<"aauaaaa">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+","u&",[global])),
+ <<"aaaaaTLn">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+","TLn\\1",[])),
+ <<"aaaaaTLn">> = iolist_to_binary(re:replace("aaaaaa","aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+","TLn\\1",[global])),
+ <<"aaaacEITBRXepyL">> = iolist_to_binary(re:replace("aaaac","a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c","&EITBRXepyL\\1",[])),
+ <<"aaaacEITBRXepyL">> = iolist_to_binary(re:replace("aaaac","a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c","&EITBRXepyL\\1",[global])),
+ <<"aaaMSacMdGgSm">> = iolist_to_binary(re:replace("aaaac","a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c","\\1MS&MdGg\\1Sm",[])),
+ <<"aaaMSacMdGgSm">> = iolist_to_binary(re:replace("aaaac","a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c","\\1MS&MdGg\\1Sm",[global])),
+ <<"aaKCBrjuDaackaactRB">> = iolist_to_binary(re:replace("aaaac","aaa(*PRUNE:A)a(*SKIP:A)b|a+c","KCBrjuD&k&t\\1RB",[])),
+ <<"aaKCBrjuDaackaactRB">> = iolist_to_binary(re:replace("aaaac","aaa(*PRUNE:A)a(*SKIP:A)b|a+c","KCBrjuD&k&t\\1RB",[global])),
+ <<"aaaKWuEddO">> = iolist_to_binary(re:replace("aaaac","aaa(*MARK:A)a(*SKIP:A)b|a+c","KWuEddO",[])),
+ <<"aaaKWuEddO">> = iolist_to_binary(re:replace("aaaac","aaa(*MARK:A)a(*SKIP:A)b|a+c","KWuEddO",[global])),
+ <<"QSDGhNmLAsnYtCIuka">> = iolist_to_binary(re:replace("ba",".?(a|b(*THEN)c)","QSDGhNmLAsnYtCIuka",[])),
+ <<"QSDGhNmLAsnYtCIuka">> = iolist_to_binary(re:replace("ba",".?(a|b(*THEN)c)","QSDGhNmLAsnYtCIuka",[global])),
+ <<"tARW">> = iolist_to_binary(re:replace("abc","(a(*COMMIT)b)c|abd","tARW",[])),
+ <<"tARW">> = iolist_to_binary(re:replace("abc","(a(*COMMIT)b)c|abd","tARW",[global])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","(a(*COMMIT)b)c|abd","THra\\1QsHhH&NqVcHjK\\1",[])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","(a(*COMMIT)b)c|abd","THra\\1QsHhH&NqVcHjK\\1",[global])),
+ <<"eJabcbgg">> = iolist_to_binary(re:replace("abc","(?=a(*COMMIT)b)abc|abd","\\1eJ&\\1bgg",[])),
+ <<"eJabcbgg">> = iolist_to_binary(re:replace("abc","(?=a(*COMMIT)b)abc|abd","\\1eJ&\\1bgg",[global])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","(?=a(*COMMIT)b)abc|abd","&",[])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","(?=a(*COMMIT)b)abc|abd","&",[global])),
+ <<"SJjtxKabcE">> = iolist_to_binary(re:replace("abc","(?>a(*COMMIT)b)c|abd","SJjt\\1xK&E",[])),
+ <<"SJjtxKabcE">> = iolist_to_binary(re:replace("abc","(?>a(*COMMIT)b)c|abd","SJjt\\1xK&E",[global])),
+ <<"nCO">> = iolist_to_binary(re:replace("abd","(?>a(*COMMIT)b)c|abd","\\1nCO",[])),
+ <<"nCO">> = iolist_to_binary(re:replace("abd","(?>a(*COMMIT)b)c|abd","\\1nCO",[global])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","a(?=b(*COMMIT)c)[^d]|abd","sicBOgC",[])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","a(?=b(*COMMIT)c)[^d]|abd","sicBOgC",[global])),
+ <<"OIc">> = iolist_to_binary(re:replace("abc","a(?=b(*COMMIT)c)[^d]|abd","OI",[])),
+ <<"OIc">> = iolist_to_binary(re:replace("abc","a(?=b(*COMMIT)c)[^d]|abd","OI",[global])),
+ <<"cBnM">> = iolist_to_binary(re:replace("abd","a(?=bc).|abd","cBnM",[])),
+ <<"cBnM">> = iolist_to_binary(re:replace("abd","a(?=bc).|abd","cBnM",[global])),
+ <<"uwVabvc">> = iolist_to_binary(re:replace("abc","a(?=bc).|abd","\\1uwV&v",[])),
+ <<"uwVabvc">> = iolist_to_binary(re:replace("abc","a(?=bc).|abd","\\1uwV&v",[global])),
+ <<"abceabd">> = iolist_to_binary(re:replace("abceabd","a(?>b(*COMMIT)c)d|abd","ON\\1oJApWbhJ&h\\1SDD",[])),
+ <<"abceabd">> = iolist_to_binary(re:replace("abceabd","a(?>b(*COMMIT)c)d|abd","ON\\1oJApWbhJ&h\\1SDD",[global])),
+ <<"abceabdFDcsKjWRPJwG">> = iolist_to_binary(re:replace("abceabd","a(?>bc)d|abd","&FDcsK\\1jWRPJwG",[])),
+ <<"abceabdFDcsKjWRPJwG">> = iolist_to_binary(re:replace("abceabd","a(?>bc)d|abd","&FDcsK\\1jWRPJwG",[global])),
+ <<"fTabdENuYeMabdK">> = iolist_to_binary(re:replace("abd","(?>a(*COMMIT)b)c|abd","fT&ENuY\\1eM&K",[])),
+ <<"fTabdENuYeMabdK">> = iolist_to_binary(re:replace("abd","(?>a(*COMMIT)b)c|abd","fT&ENuY\\1eM&K",[global])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","(?>a(*COMMIT)c)d|abd","vbE",[])),
+ <<"abd">> = iolist_to_binary(re:replace("abd","(?>a(*COMMIT)c)d|abd","vbE",[global])),
+ <<"iKqJ">> = iolist_to_binary(re:replace("ac","((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))","iKq\\1J",[])),
+ <<"iKqJ">> = iolist_to_binary(re:replace("ac","((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))","iKq\\1J",[global])),
+ ok.
+run53() ->
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a)?(?(1)a|b)+$","YQRU&",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^(a)?(?(1)a|b)+$","YQRU&",[global])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(a)?(?(1)a|b)+$","SLSciT&&F",[])),
+ <<"a">> = iolist_to_binary(re:replace("a","^(a)?(?(1)a|b)+$","SLSciT&&F",[global])),
+ <<"aIbCe">> = iolist_to_binary(re:replace("ab","(?=a\\Kb)ab","IbCe",[])),
+ <<"aIbCe">> = iolist_to_binary(re:replace("ab","(?=a\\Kb)ab","IbCe",[global])),
+ <<"KWEhxbu">> = iolist_to_binary(re:replace("ac","(?!a\\Kb)ac","KWEhxbu",[])),
+ <<"KWEhxbu">> = iolist_to_binary(re:replace("ac","(?!a\\Kb)ac","KWEhxbu",[global])),
+ <<"abObpVTjlSnifUCddjn">> = iolist_to_binary(re:replace("abcd","^abc(?<=b\\Kc)d","ObpV\\1TjlSnifUCddjn",[])),
+ <<"abObpVTjlSnifUCddjn">> = iolist_to_binary(re:replace("abcd","^abc(?<=b\\Kc)d","ObpV\\1TjlSnifUCddjn",[global])),
+ <<"lljlodkrbhYabcdXWQwLIT">> = iolist_to_binary(re:replace("abcd","^abc(?<!b\\Kq)d","llj\\1lodkrbhY&XWQwLIT",[])),
+ <<"lljlodkrbhYabcdXWQwLIT">> = iolist_to_binary(re:replace("abcd","^abc(?<!b\\Kq)d","llj\\1lodkrbhY&XWQwLIT",[global])),
+ <<"abcdabcdabcdHLqtQeabcdEabcdJHiabcdP">> = iolist_to_binary(re:replace("abcd","^((abc|abcx)(*THEN)y|abcd)","&&\\1HLqtQe&E\\1JHi\\1P",[])),
+ <<"abcdabcdabcdHLqtQeabcdEabcdJHiabcdP">> = iolist_to_binary(re:replace("abcd","^((abc|abcx)(*THEN)y|abcd)","&&\\1HLqtQe&E\\1JHi\\1P",[global])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^((abc|abcx)(*THEN)y|abcd)","NtVKEpoSj\\1\\1o\\1ESK",[])),
+ <<"*** Failers">> = iolist_to_binary(re:replace("*** Failers","^((abc|abcx)(*THEN)y|abcd)","NtVKEpoSj\\1\\1o\\1ESK",[global])),
+ <<"abcxy">> = iolist_to_binary(re:replace("abcxy","^((abc|abcx)(*THEN)y|abcd)","Jj\\1XL&TAaD",[])),
+ <<"abcxy">> = iolist_to_binary(re:replace("abcxy","^((abc|abcx)(*THEN)y|abcd)","Jj\\1XL&TAaD",[global])),
+ <<"yes">> = iolist_to_binary(re:replace("yes","^((yes|no)(*THEN)(*F))?","fA&L\\1bxmA\\1bu\\1w\\1Lh",[])),
+ <<"yes">> = iolist_to_binary(re:replace("yes","^((yes|no)(*THEN)(*F))?","fA&L\\1bxmA\\1bu\\1w\\1Lh",[global])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","(?=a(*COMMIT)b|ac)ac|ac","uuCjDlLQYP",[])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","(?=a(*COMMIT)b|ac)ac|ac","uuCjDlLQYP",[global])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","(?=a(*COMMIT)b|(ac)) ac | (a)c","\\1W&y&PeDCK\\1cDLtO",[extended])),
+ <<"ac">> = iolist_to_binary(re:replace("ac","(?=a(*COMMIT)b|(ac)) ac | (a)c","\\1W&y&PeDCK\\1cDLtO",[extended,
+ global])),
+ <<"bnWqWn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*THEN)a)bn|bnn)","&WqW",[])),
+ <<"bnWqWn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*THEN)a)bn|bnn)","&WqW",[global])),
+ <<"PGnTXLBnIbnbnbnePKbnn">> = iolist_to_binary(re:replace("bnn","(?!b(*SKIP)a)bn|bnn","PGnTXLBnI&&&e\\1PK&",[])),
+ <<"PGnTXLBnIbnbnbnePKbnn">> = iolist_to_binary(re:replace("bnn","(?!b(*SKIP)a)bn|bnn","PGnTXLBnI&&&e\\1PK&",[global])),
+ <<"iMn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*SKIP)a)bn|bnn)","\\1iM",[])),
+ <<"iMn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*SKIP)a)bn|bnn)","\\1iM",[global])),
+ <<"gcbnaxAn">> = iolist_to_binary(re:replace("bnn","(?!b(*PRUNE)a)bn|bnn","\\1gc&ax\\1\\1A",[])),
+ <<"gcbnaxAn">> = iolist_to_binary(re:replace("bnn","(?!b(*PRUNE)a)bn|bnn","\\1gc&ax\\1\\1A",[global])),
+ <<"dAtbnrKybneTLNeBcn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*PRUNE)a)bn|bnn)","dAt&rKy&eTLNeBc",[])),
+ <<"dAtbnrKybneTLNeBcn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*PRUNE)a)bn|bnn)","dAt&rKy&eTLNeBc",[global])),
+ <<"vXn">> = iolist_to_binary(re:replace("bnn","(?!b(*COMMIT)a)bn|bnn","vX",[])),
+ <<"vXn">> = iolist_to_binary(re:replace("bnn","(?!b(*COMMIT)a)bn|bnn","vX",[global])),
+ <<"EUadjhULxavkwOtGbnqrPn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*COMMIT)a)bn|bnn)","EUadjhULxavkwOtG&qrP",[])),
+ <<"EUadjhULxavkwOtGbnqrPn">> = iolist_to_binary(re:replace("bnn","(?(?!b(*COMMIT)a)bn|bnn)","EUadjhULxavkwOtG&qrP",[global])),
+ <<"bnn">> = iolist_to_binary(re:replace("bnn","(?=b(*SKIP)a)bn|bnn","Fw",[])),
+ <<"bnn">> = iolist_to_binary(re:replace("bnn","(?=b(*SKIP)a)bn|bnn","Fw",[global])),
+ <<"JgfYWGl">> = iolist_to_binary(re:replace("bnn","(?=b(*THEN)a)bn|bnn","Jgf\\1Y\\1W\\1Gl\\1",[])),
+ <<"JgfYWGl">> = iolist_to_binary(re:replace("bnn","(?=b(*THEN)a)bn|bnn","Jgf\\1Y\\1W\\1Gl\\1",[global])),
+ <<"SacJCiWoykVpvXacd">> = iolist_to_binary(re:replace("acd","(?!a(*SKIP)b)..","S&JCiWoykVpvX\\1&",[])),
+ <<"SacJCiWoykVpvXacd">> = iolist_to_binary(re:replace("acd","(?!a(*SKIP)b)..","S&JCiWoykVpvX\\1&",[global])),
+ ok.
+run54() ->
+ <<"CxbMac">> = iolist_to_binary(re:replace("ac","^(?(?!a(*SKIP)b))","&Cxb&M",[])),
+ <<"CxbMac">> = iolist_to_binary(re:replace("ac","^(?(?!a(*SKIP)b))","&Cxb&M",[global])),
+ <<"OceGNacoaFRboacPKd">> = iolist_to_binary(re:replace("acd","^(?!a(*PRUNE)b)..","OceGN&o\\1aF\\1Rb\\1o&PK",[])),
+ <<"OceGNacoaFRboacPKd">> = iolist_to_binary(re:replace("acd","^(?!a(*PRUNE)b)..","OceGN&o\\1aF\\1Rb\\1o&PK",[global])),
+ <<"ysd">> = iolist_to_binary(re:replace("acd","(?!a(*PRUNE)b)..","ys",[])),
+ <<"ysd">> = iolist_to_binary(re:replace("acd","(?!a(*PRUNE)b)..","ys",[global])),
+ <<"nba">> = iolist_to_binary(re:replace("ba","\\A.*?(?:a|bc)","n\\1\\1&",[])),
+ <<"nba">> = iolist_to_binary(re:replace("ba","\\A.*?(?:a|bc)","n\\1\\1&",[global])),
+ <<"CDEeCDYuCDCDb">> = iolist_to_binary(re:replace("CD","^(A(*THEN)B|C(*THEN)D)","&Ee\\1Yu\\1\\1b",[])),
+ <<"CDEeCDYuCDCDb">> = iolist_to_binary(re:replace("CD","^(A(*THEN)B|C(*THEN)D)","&Ee\\1Yu\\1\\1b",[global])),
+ <<"AYtnukv">> = iolist_to_binary(re:replace("1234","^\\d*\\w{4}","AYtn\\1ukv",[])),
+ <<"AYtnukv">> = iolist_to_binary(re:replace("1234","^\\d*\\w{4}","AYtn\\1ukv",[global])),
+ <<"123">> = iolist_to_binary(re:replace("123","^\\d*\\w{4}","oGBqK\\1EWY&VbHw\\1ue&",[])),
+ <<"123">> = iolist_to_binary(re:replace("123","^\\d*\\w{4}","oGBqK\\1EWY&VbHw\\1ue&",[global])),
+ <<"LhHvlYGR">> = iolist_to_binary(re:replace("aaaa","^[^b]*\\w{4}","\\1LhHvlYGR",[])),
+ <<"LhHvlYGR">> = iolist_to_binary(re:replace("aaaa","^[^b]*\\w{4}","\\1LhHvlYGR",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^[^b]*\\w{4}","S\\1wy&o\\1v&ST",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^[^b]*\\w{4}","S\\1wy&o\\1v&ST",[global])),
+ <<"aaaagQaaaalwFSxFUL">> = iolist_to_binary(re:replace("aaaa","^[^b]*\\w{4}","\\1\\1\\1&gQ&lwFSxFU\\1L",[caseless])),
+ <<"aaaagQaaaalwFSxFUL">> = iolist_to_binary(re:replace("aaaa","^[^b]*\\w{4}","\\1\\1\\1&gQ&lwFSxFU\\1L",[caseless,
+ global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^[^b]*\\w{4}","SfymhPOH",[caseless])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^[^b]*\\w{4}","SfymhPOH",[caseless,
+ global])),
+ <<"HTMLYQhAQNJHaaaaJKAva">> = iolist_to_binary(re:replace("aaaa","^a*\\w{4}","HTM\\1L\\1YQhAQNJH&JKAva",[])),
+ <<"HTMLYQhAQNJHaaaaJKAva">> = iolist_to_binary(re:replace("aaaa","^a*\\w{4}","HTM\\1L\\1YQhAQNJH&JKAva",[global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^a*\\w{4}","bfScQRcKYl&\\1&\\1&Aq&C",[])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^a*\\w{4}","bfScQRcKYl&\\1&\\1&Aq&C",[global])),
+ <<"aaaadgKVePEaaaaqdlcK">> = iolist_to_binary(re:replace("aaaa","^a*\\w{4}","&dgKVePE&qdl\\1cK",[caseless])),
+ <<"aaaadgKVePEaaaaqdlcK">> = iolist_to_binary(re:replace("aaaa","^a*\\w{4}","&dgKVePE&qdl\\1cK",[caseless,
+ global])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^a*\\w{4}","ncXKavCFttF",[caseless])),
+ <<"aaa">> = iolist_to_binary(re:replace("aaa","^a*\\w{4}","ncXKavCFttF",[caseless,
+ global])),
+ ok.
diff --git a/lib/stdlib/test/re_testoutput1_split_test.erl b/lib/stdlib/test/re_testoutput1_split_test.erl
index 0a7f54f2dc..af3c3caa48 100644
--- a/lib/stdlib/test/re_testoutput1_split_test.erl
+++ b/lib/stdlib/test/re_testoutput1_split_test.erl
@@ -19,1369 +19,1423 @@
-module(re_testoutput1_split_test).
-compile(export_all).
-compile(no_native).
--include("test_server.hrl").
%% This file is generated by running run_pcre_tests:gen_split_test("re_SUITE_data/testoutput1")
join([]) -> [];
join([A]) -> [A];
join([H|T]) -> [H,<<":">>|join(T)].
run() ->
-?line <<"">> = iolist_to_binary(join(re:split("the quick brown fox","the quick brown fox",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("the quick brown fox","the quick brown fox",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("the quick brown fox","the quick brown fox",[]))),
-?line <<"The quick brown FOX">> = iolist_to_binary(join(re:split("The quick brown FOX","the quick brown fox",[trim]))),
-?line <<"The quick brown FOX">> = iolist_to_binary(join(re:split("The quick brown FOX","the quick brown fox",[{parts,
- 2}]))),
-?line <<"The quick brown FOX">> = iolist_to_binary(join(re:split("The quick brown FOX","the quick brown fox",[]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","the quick brown fox",[trim]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","the quick brown fox",[{parts,
- 2}]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","the quick brown fox",[]))),
-?line <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","the quick brown fox",[trim]))),
-?line <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","the quick brown fox",[{parts,
- 2}]))),
-?line <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","the quick brown fox",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("the quick brown fox","The quick brown fox",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("the quick brown fox","The quick brown fox",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("the quick brown fox","The quick brown fox",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("The quick brown FOX","The quick brown fox",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("The quick brown FOX","The quick brown fox",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("The quick brown FOX","The quick brown fox",[caseless]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","The quick brown fox",[caseless,
- trim]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","The quick brown fox",[caseless,
- {parts,
- 2}]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","The quick brown fox",[caseless]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","The quick brown fox",[caseless,
- trim]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","The quick brown fox",[caseless,
- {parts,
- 2}]))),
-?line <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","The quick brown fox",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd
+ run0(),
+ run1(),
+ run2(),
+ run3(),
+ run4(),
+ run5(),
+ run6(),
+ run7(),
+ run8(),
+ run9(),
+ run10(),
+ run11(),
+ run12(),
+ run13(),
+ run14(),
+ run15(),
+ run16(),
+ run17(),
+ run18(),
+ run19(),
+ run20(),
+ run21(),
+ run22(),
+ run23(),
+ run24(),
+ run25(),
+ run26(),
+ run27(),
+ run28(),
+ run29(),
+ run30(),
+ run31(),
+ run32(),
+ run33(),
+ run34(),
+ run35(),
+ run36(),
+ run37(),
+ run38(),
+ run39(),
+ run40(),
+ run41(),
+ run42(),
+ run43(),
+ run44(),
+ run45(),
+ run46(),
+ run47(),
+ run48(),
+ run49(),
+ run50(),
+ run51(),
+ run52(),
+ run53(),
+ run54(),
+ ok.
+run0() ->
+ <<"">> = iolist_to_binary(join(re:split("the quick brown fox","the quick brown fox",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("the quick brown fox","the quick brown fox",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("the quick brown fox","the quick brown fox",[]))),
+ <<"The quick brown FOX">> = iolist_to_binary(join(re:split("The quick brown FOX","the quick brown fox",[trim]))),
+ <<"The quick brown FOX">> = iolist_to_binary(join(re:split("The quick brown FOX","the quick brown fox",[{parts,
+ 2}]))),
+ <<"The quick brown FOX">> = iolist_to_binary(join(re:split("The quick brown FOX","the quick brown fox",[]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","the quick brown fox",[trim]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","the quick brown fox",[{parts,
+ 2}]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","the quick brown fox",[]))),
+ <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","the quick brown fox",[trim]))),
+ <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","the quick brown fox",[{parts,
+ 2}]))),
+ <<"What do you know about THE QUICK BROWN FOX?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","the quick brown fox",[]))),
+ <<"">> = iolist_to_binary(join(re:split("the quick brown fox","The quick brown fox",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("the quick brown fox","The quick brown fox",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("the quick brown fox","The quick brown fox",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("The quick brown FOX","The quick brown fox",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("The quick brown FOX","The quick brown fox",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("The quick brown FOX","The quick brown fox",[caseless]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","The quick brown fox",[caseless,
+ trim]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","The quick brown fox",[caseless,
+ {parts,
+ 2}]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about the quick brown fox?","The quick brown fox",[caseless]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","The quick brown fox",[caseless,
+ trim]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","The quick brown fox",[caseless,
+ {parts,
+ 2}]))),
+ <<"What do you know about :?">> = iolist_to_binary(join(re:split("What do you know about THE QUICK BROWN FOX?","The quick brown fox",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd
9;$\\?caxyz","abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd
+ <<":">> = iolist_to_binary(join(re:split("abcd
9;$\\?caxyz","abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd
+ <<":">> = iolist_to_binary(join(re:split("abcd
9;$\\?caxyz","abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcxyzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aabcxyzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<">>>">> = iolist_to_binary(join(re:split(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<">>>:">> = iolist_to_binary(join(re:split(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypABBzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<">>>">> = iolist_to_binary(join(re:split(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<">>>:">> = iolist_to_binary(join(re:split(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<">>>:">> = iolist_to_binary(join(re:split(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<">">> = iolist_to_binary(join(re:split(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<">:">> = iolist_to_binary(join(re:split(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<">>>:">> = iolist_to_binary(join(re:split(">>>aaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<">">> = iolist_to_binary(join(re:split(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<">:">> = iolist_to_binary(join(re:split(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<">:">> = iolist_to_binary(join(re:split(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<">>>>">> = iolist_to_binary(join(re:split(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<">>>>:">> = iolist_to_binary(join(re:split(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<">:">> = iolist_to_binary(join(re:split(">aaaabxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<">>>>">> = iolist_to_binary(join(re:split(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<">>>>:">> = iolist_to_binary(join(re:split(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<">>>>:">> = iolist_to_binary(join(re:split(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
- 2}]))),
-?line <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
-?line <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ <<">>>>:">> = iolist_to_binary(join(re:split(">>>>abcxyzpqrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<"abxyzpqrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<"abxyzpqrrrrabbxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrrabbxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<"abxyzpqrrrabxyyyypqAzz">> = iolist_to_binary(join(re:split("abxyzpqrrrabxyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
2}]))),
-?line <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abczz","^(abc){1,2}zz",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abczz","^(abc){1,2}zz",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abczz","^(abc){1,2}zz",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcabczz","^(abc){1,2}zz",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabczz","^(abc){1,2}zz",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabczz","^(abc){1,2}zz",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(abc){1,2}zz",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(abc){1,2}zz",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(abc){1,2}zz",[]))),
-?line <<"zz">> = iolist_to_binary(join(re:split("zz","^(abc){1,2}zz",[trim]))),
-?line <<"zz">> = iolist_to_binary(join(re:split("zz","^(abc){1,2}zz",[{parts,
- 2}]))),
-?line <<"zz">> = iolist_to_binary(join(re:split("zz","^(abc){1,2}zz",[]))),
-?line <<"abcabcabczz">> = iolist_to_binary(join(re:split("abcabcabczz","^(abc){1,2}zz",[trim]))),
-?line <<"abcabcabczz">> = iolist_to_binary(join(re:split("abcabcabczz","^(abc){1,2}zz",[{parts,
- 2}]))),
-?line <<"abcabcabczz">> = iolist_to_binary(join(re:split("abcabcabczz","^(abc){1,2}zz",[]))),
-?line <<">>abczz">> = iolist_to_binary(join(re:split(">>abczz","^(abc){1,2}zz",[trim]))),
-?line <<">>abczz">> = iolist_to_binary(join(re:split(">>abczz","^(abc){1,2}zz",[{parts,
+ <<"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<"aaaabcxyzzzzpqrrrabbbxyyypqAzz">> = iolist_to_binary(join(re:split("aaaabcxyzzzzpqrrrabbbxyyypqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[trim]))),
+ <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[{parts,
+ 2}]))),
+ <<"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz">> = iolist_to_binary(join(re:split("aaabcxyzpqrrrabbxyyyypqqqqqqqAzz","a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abczz","^(abc){1,2}zz",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abczz","^(abc){1,2}zz",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abczz","^(abc){1,2}zz",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcabczz","^(abc){1,2}zz",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabczz","^(abc){1,2}zz",[{parts,
2}]))),
-?line <<">>abczz">> = iolist_to_binary(join(re:split(">>abczz","^(abc){1,2}zz",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("bc","^(b+?|a){1,2}?c",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+?|a){1,2}?c",[{parts,
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabczz","^(abc){1,2}zz",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(abc){1,2}zz",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(abc){1,2}zz",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(abc){1,2}zz",[]))),
+ <<"zz">> = iolist_to_binary(join(re:split("zz","^(abc){1,2}zz",[trim]))),
+ <<"zz">> = iolist_to_binary(join(re:split("zz","^(abc){1,2}zz",[{parts,
+ 2}]))),
+ <<"zz">> = iolist_to_binary(join(re:split("zz","^(abc){1,2}zz",[]))),
+ <<"abcabcabczz">> = iolist_to_binary(join(re:split("abcabcabczz","^(abc){1,2}zz",[trim]))),
+ <<"abcabcabczz">> = iolist_to_binary(join(re:split("abcabcabczz","^(abc){1,2}zz",[{parts,
+ 2}]))),
+ <<"abcabcabczz">> = iolist_to_binary(join(re:split("abcabcabczz","^(abc){1,2}zz",[]))),
+ <<">>abczz">> = iolist_to_binary(join(re:split(">>abczz","^(abc){1,2}zz",[trim]))),
+ <<">>abczz">> = iolist_to_binary(join(re:split(">>abczz","^(abc){1,2}zz",[{parts,
+ 2}]))),
+ <<">>abczz">> = iolist_to_binary(join(re:split(">>abczz","^(abc){1,2}zz",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("bc","^(b+?|a){1,2}?c",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+?|a){1,2}?c",[{parts,
+ 2}]))),
+ <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+?|a){1,2}?c",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("bbc","^(b+?|a){1,2}?c",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+?|a){1,2}?c",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("bbc","^(b+?|a){1,2}?c",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+?|a){1,2}?c",[{parts,
+ <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+?|a){1,2}?c",[]))),
+ <<":bb">> = iolist_to_binary(join(re:split("bbbc","^(b+?|a){1,2}?c",[trim]))),
+ <<":bb:">> = iolist_to_binary(join(re:split("bbbc","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+?|a){1,2}?c",[]))),
-?line <<":bb">> = iolist_to_binary(join(re:split("bbbc","^(b+?|a){1,2}?c",[trim]))),
-?line <<":bb:">> = iolist_to_binary(join(re:split("bbbc","^(b+?|a){1,2}?c",[{parts,
- 2}]))),
-?line <<":bb:">> = iolist_to_binary(join(re:split("bbbc","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[{parts,
+ <<":bb:">> = iolist_to_binary(join(re:split("bbbc","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+?|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+?|a){1,2}?c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+?|a){1,2}?c",[]))),
+ <<":bbbbbbbbbbb">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+?|a){1,2}?c",[trim]))),
+ <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+?|a){1,2}?c",[{parts,
+ 2}]))),
+ <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+?|a){1,2}?c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+?|a){1,2}?c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+?|a){1,2}?c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+?|a){1,2}?c",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+?|a){1,2}?c",[]))),
+ <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+?|a){1,2}?c",[trim]))),
+ <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+?|a){1,2}?c",[]))),
-?line <<":bbbbbbbbbbb">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+?|a){1,2}?c",[trim]))),
-?line <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+?|a){1,2}?c",[{parts,
- 2}]))),
-?line <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+?|a){1,2}?c",[{parts,
+ <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+?|a){1,2}?c",[]))),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+?|a){1,2}?c",[trim]))),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+?|a){1,2}?c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+?|a){1,2}?c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+?|a){1,2}?c",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+?|a){1,2}?c",[]))),
-?line <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+?|a){1,2}?c",[trim]))),
-?line <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+?|a){1,2}?c",[{parts,
- 2}]))),
-?line <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+?|a){1,2}?c",[]))),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+?|a){1,2}?c",[trim]))),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+?|a){1,2}?c",[{parts,
- 2}]))),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+?|a){1,2}?c",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("bc","^(b+|a){1,2}c",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+|a){1,2}c",[{parts,
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+?|a){1,2}?c",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("bc","^(b+|a){1,2}c",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+|a){1,2}c",[{parts,
+ 2}]))),
+ <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+|a){1,2}c",[]))),
+ <<":bb">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}c",[trim]))),
+ <<":bb:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}c",[{parts,
2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bc","^(b+|a){1,2}c",[]))),
-?line <<":bb">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}c",[trim]))),
-?line <<":bb:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}c",[{parts,
+ <<":bb:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}c",[]))),
+ <<":bbb">> = iolist_to_binary(join(re:split("bbbc","^(b+|a){1,2}c",[trim]))),
+ <<":bbb:">> = iolist_to_binary(join(re:split("bbbc","^(b+|a){1,2}c",[{parts,
2}]))),
-?line <<":bb:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}c",[]))),
-?line <<":bbb">> = iolist_to_binary(join(re:split("bbbc","^(b+|a){1,2}c",[trim]))),
-?line <<":bbb:">> = iolist_to_binary(join(re:split("bbbc","^(b+|a){1,2}c",[{parts,
- 2}]))),
-?line <<":bbb:">> = iolist_to_binary(join(re:split("bbbc","^(b+|a){1,2}c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}c",[{parts,
+ <<":bbb:">> = iolist_to_binary(join(re:split("bbbc","^(b+|a){1,2}c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}c",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aac","^(b+|a){1,2}c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+|a){1,2}c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aac","^(b+|a){1,2}c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+|a){1,2}c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+|a){1,2}c",[]))),
+ <<":bbbbbbbbbbb">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+|a){1,2}c",[trim]))),
+ <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+|a){1,2}c",[{parts,
+ 2}]))),
+ <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+|a){1,2}c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+|a){1,2}c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+|a){1,2}c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+|a){1,2}c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+|a){1,2}c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+|a){1,2}c",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+|a){1,2}c",[]))),
+ <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+|a){1,2}c",[trim]))),
+ <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+|a){1,2}c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aac","^(b+|a){1,2}c",[]))),
-?line <<":bbbbbbbbbbb">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+|a){1,2}c",[trim]))),
-?line <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+|a){1,2}c",[{parts,
+ <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+|a){1,2}c",[]))),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+|a){1,2}c",[trim]))),
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+|a){1,2}c",[{parts,
2}]))),
-?line <<":bbbbbbbbbbb:">> = iolist_to_binary(join(re:split("abbbbbbbbbbbc","^(b+|a){1,2}c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+|a){1,2}c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+|a){1,2}c",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbbbbbbbac","^(b+|a){1,2}c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+|a){1,2}c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+|a){1,2}c",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b+|a){1,2}c",[]))),
-?line <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+|a){1,2}c",[trim]))),
-?line <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+|a){1,2}c",[{parts,
+ <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+|a){1,2}c",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}?bc",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}?bc",[{parts,
2}]))),
-?line <<"aaac">> = iolist_to_binary(join(re:split("aaac","^(b+|a){1,2}c",[]))),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+|a){1,2}c",[trim]))),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+|a){1,2}c",[{parts,
- 2}]))),
-?line <<"abbbbbbbbbbbac">> = iolist_to_binary(join(re:split("abbbbbbbbbbbac","^(b+|a){1,2}c",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}?bc",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}?bc",[{parts,
- 2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}?bc",[]))),
-?line <<":ba">> = iolist_to_binary(join(re:split("babc","^(b*|ba){1,2}?bc",[trim]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("babc","^(b*|ba){1,2}?bc",[{parts,
+ <<":b:">> = iolist_to_binary(join(re:split("bbc","^(b+|a){1,2}?bc",[]))),
+ <<":ba">> = iolist_to_binary(join(re:split("babc","^(b*|ba){1,2}?bc",[trim]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("babc","^(b*|ba){1,2}?bc",[{parts,
+ 2}]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("babc","^(b*|ba){1,2}?bc",[]))),
+ <<":ba">> = iolist_to_binary(join(re:split("bbabc","^(b*|ba){1,2}?bc",[trim]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(b*|ba){1,2}?bc",[{parts,
2}]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("babc","^(b*|ba){1,2}?bc",[]))),
-?line <<":ba">> = iolist_to_binary(join(re:split("bbabc","^(b*|ba){1,2}?bc",[trim]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(b*|ba){1,2}?bc",[{parts,
+ <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(b*|ba){1,2}?bc",[]))),
+ <<":ba">> = iolist_to_binary(join(re:split("bababc","^(b*|ba){1,2}?bc",[trim]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(b*|ba){1,2}?bc",[{parts,
2}]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(b*|ba){1,2}?bc",[]))),
-?line <<":ba">> = iolist_to_binary(join(re:split("bababc","^(b*|ba){1,2}?bc",[trim]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(b*|ba){1,2}?bc",[{parts,
+ <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(b*|ba){1,2}?bc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b*|ba){1,2}?bc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b*|ba){1,2}?bc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b*|ba){1,2}?bc",[]))),
+ <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(b*|ba){1,2}?bc",[trim]))),
+ <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(b*|ba){1,2}?bc",[{parts,
2}]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(b*|ba){1,2}?bc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b*|ba){1,2}?bc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b*|ba){1,2}?bc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(b*|ba){1,2}?bc",[]))),
-?line <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(b*|ba){1,2}?bc",[trim]))),
-?line <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(b*|ba){1,2}?bc",[{parts,
+ <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(b*|ba){1,2}?bc",[]))),
+ <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(b*|ba){1,2}?bc",[trim]))),
+ <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(b*|ba){1,2}?bc",[{parts,
2}]))),
-?line <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(b*|ba){1,2}?bc",[]))),
-?line <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(b*|ba){1,2}?bc",[trim]))),
-?line <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(b*|ba){1,2}?bc",[{parts,
- 2}]))),
-?line <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(b*|ba){1,2}?bc",[]))),
-?line <<":ba">> = iolist_to_binary(join(re:split("babc","^(ba|b*){1,2}?bc",[trim]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("babc","^(ba|b*){1,2}?bc",[{parts,
+ <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(b*|ba){1,2}?bc",[]))),
+ <<":ba">> = iolist_to_binary(join(re:split("babc","^(ba|b*){1,2}?bc",[trim]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("babc","^(ba|b*){1,2}?bc",[{parts,
+ 2}]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("babc","^(ba|b*){1,2}?bc",[]))),
+ <<":ba">> = iolist_to_binary(join(re:split("bbabc","^(ba|b*){1,2}?bc",[trim]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(ba|b*){1,2}?bc",[{parts,
2}]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("babc","^(ba|b*){1,2}?bc",[]))),
-?line <<":ba">> = iolist_to_binary(join(re:split("bbabc","^(ba|b*){1,2}?bc",[trim]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(ba|b*){1,2}?bc",[{parts,
+ <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(ba|b*){1,2}?bc",[]))),
+ <<":ba">> = iolist_to_binary(join(re:split("bababc","^(ba|b*){1,2}?bc",[trim]))),
+ <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(ba|b*){1,2}?bc",[{parts,
2}]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bbabc","^(ba|b*){1,2}?bc",[]))),
-?line <<":ba">> = iolist_to_binary(join(re:split("bababc","^(ba|b*){1,2}?bc",[trim]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(ba|b*){1,2}?bc",[{parts,
+ <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(ba|b*){1,2}?bc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ba|b*){1,2}?bc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ba|b*){1,2}?bc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ba|b*){1,2}?bc",[]))),
+ <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(ba|b*){1,2}?bc",[trim]))),
+ <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(ba|b*){1,2}?bc",[{parts,
2}]))),
-?line <<":ba:">> = iolist_to_binary(join(re:split("bababc","^(ba|b*){1,2}?bc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ba|b*){1,2}?bc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ba|b*){1,2}?bc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ba|b*){1,2}?bc",[]))),
-?line <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(ba|b*){1,2}?bc",[trim]))),
-?line <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(ba|b*){1,2}?bc",[{parts,
+ <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(ba|b*){1,2}?bc",[]))),
+ <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(ba|b*){1,2}?bc",[trim]))),
+ <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(ba|b*){1,2}?bc",[{parts,
2}]))),
-?line <<"bababbc">> = iolist_to_binary(join(re:split("bababbc","^(ba|b*){1,2}?bc",[]))),
-?line <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(ba|b*){1,2}?bc",[trim]))),
-?line <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(ba|b*){1,2}?bc",[{parts,
- 2}]))),
-?line <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(ba|b*){1,2}?bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split(";z","^\\ca\\cA\\c[\\c{\\c:",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split(";z","^\\ca\\cA\\c[\\c{\\c:",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split(";z","^\\ca\\cA\\c[\\c{\\c:",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("athing","^[ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("athing","^[ab\\]cde]",[{parts,
+ <<"babababc">> = iolist_to_binary(join(re:split("babababc","^(ba|b*){1,2}?bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split(";z","^\\ca\\cA\\c[\\c{\\c:",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split(";z","^\\ca\\cA\\c[\\c{\\c:",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split(";z","^\\ca\\cA\\c[\\c{\\c:",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("athing","^[ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("athing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("athing","^[ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("bthing","^[ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("bthing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("bthing","^[ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("]thing","^[ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("]thing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("]thing","^[ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("cthing","^[ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("cthing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("cthing","^[ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("dthing","^[ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("dthing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("dthing","^[ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("ething","^[ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("ething","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("ething","^[ab\\]cde]",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[ab\\]cde]",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[ab\\]cde]",[]))),
+ <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[ab\\]cde]",[trim]))),
+ <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[ab\\]cde]",[]))),
+ <<"[thing">> = iolist_to_binary(join(re:split("[thing","^[ab\\]cde]",[trim]))),
+ <<"[thing">> = iolist_to_binary(join(re:split("[thing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<"[thing">> = iolist_to_binary(join(re:split("[thing","^[ab\\]cde]",[]))),
+ <<"\\thing">> = iolist_to_binary(join(re:split("\\thing","^[ab\\]cde]",[trim]))),
+ <<"\\thing">> = iolist_to_binary(join(re:split("\\thing","^[ab\\]cde]",[{parts,
+ 2}]))),
+ <<"\\thing">> = iolist_to_binary(join(re:split("\\thing","^[ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("]thing","^[]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("]thing","^[]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("]thing","^[]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("cthing","^[]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("cthing","^[]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("cthing","^[]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("dthing","^[]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("dthing","^[]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("dthing","^[]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("ething","^[]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("ething","^[]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("ething","^[]cde]",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[]cde]",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[]cde]",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[]cde]",[]))),
+ <<"athing">> = iolist_to_binary(join(re:split("athing","^[]cde]",[trim]))),
+ <<"athing">> = iolist_to_binary(join(re:split("athing","^[]cde]",[{parts,
+ 2}]))),
+ <<"athing">> = iolist_to_binary(join(re:split("athing","^[]cde]",[]))),
+ <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[]cde]",[trim]))),
+ <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[]cde]",[{parts,
+ 2}]))),
+ <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("athing","^[ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("bthing","^[ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("bthing","^[ab\\]cde]",[{parts,
+ <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("[thing","^[^ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("[thing","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("bthing","^[ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("]thing","^[ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("]thing","^[ab\\]cde]",[{parts,
+ <<":thing">> = iolist_to_binary(join(re:split("[thing","^[^ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("\\thing","^[^ab\\]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("\\thing","^[^ab\\]cde]",[{parts,
+ 2}]))),
+ <<":thing">> = iolist_to_binary(join(re:split("\\thing","^[^ab\\]cde]",[]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^ab\\]cde]",[trim]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^ab\\]cde]",[{parts,
+ 2}]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^ab\\]cde]",[]))),
+ <<"athing">> = iolist_to_binary(join(re:split("athing","^[^ab\\]cde]",[trim]))),
+ <<"athing">> = iolist_to_binary(join(re:split("athing","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("]thing","^[ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("cthing","^[ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("cthing","^[ab\\]cde]",[{parts,
+ <<"athing">> = iolist_to_binary(join(re:split("athing","^[^ab\\]cde]",[]))),
+ <<"bthing">> = iolist_to_binary(join(re:split("bthing","^[^ab\\]cde]",[trim]))),
+ <<"bthing">> = iolist_to_binary(join(re:split("bthing","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("cthing","^[ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("dthing","^[ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("dthing","^[ab\\]cde]",[{parts,
+ <<"bthing">> = iolist_to_binary(join(re:split("bthing","^[^ab\\]cde]",[]))),
+ <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^ab\\]cde]",[trim]))),
+ <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("dthing","^[ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("ething","^[ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("ething","^[ab\\]cde]",[{parts,
+ <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^ab\\]cde]",[]))),
+ <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^ab\\]cde]",[trim]))),
+ <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("ething","^[ab\\]cde]",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[ab\\]cde]",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[ab\\]cde]",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[ab\\]cde]",[]))),
-?line <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[ab\\]cde]",[trim]))),
-?line <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[ab\\]cde]",[{parts,
+ <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^ab\\]cde]",[]))),
+ <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^ab\\]cde]",[trim]))),
+ <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[ab\\]cde]",[]))),
-?line <<"[thing">> = iolist_to_binary(join(re:split("[thing","^[ab\\]cde]",[trim]))),
-?line <<"[thing">> = iolist_to_binary(join(re:split("[thing","^[ab\\]cde]",[{parts,
+ <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^ab\\]cde]",[]))),
+ <<"ething">> = iolist_to_binary(join(re:split("ething","^[^ab\\]cde]",[trim]))),
+ <<"ething">> = iolist_to_binary(join(re:split("ething","^[^ab\\]cde]",[{parts,
2}]))),
-?line <<"[thing">> = iolist_to_binary(join(re:split("[thing","^[ab\\]cde]",[]))),
-?line <<"\\thing">> = iolist_to_binary(join(re:split("\\thing","^[ab\\]cde]",[trim]))),
-?line <<"\\thing">> = iolist_to_binary(join(re:split("\\thing","^[ab\\]cde]",[{parts,
- 2}]))),
-?line <<"\\thing">> = iolist_to_binary(join(re:split("\\thing","^[ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("]thing","^[]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("]thing","^[]cde]",[{parts,
+ <<"ething">> = iolist_to_binary(join(re:split("ething","^[^ab\\]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("athing","^[^]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("athing","^[^]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("]thing","^[]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("cthing","^[]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("cthing","^[]cde]",[{parts,
+ <<":thing">> = iolist_to_binary(join(re:split("athing","^[^]cde]",[]))),
+ <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^]cde]",[trim]))),
+ <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("cthing","^[]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("dthing","^[]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("dthing","^[]cde]",[{parts,
+ <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^]cde]",[]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^]cde]",[trim]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^]cde]",[{parts,
+ 2}]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^]cde]",[]))),
+ <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^]cde]",[trim]))),
+ <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("dthing","^[]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("ething","^[]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("ething","^[]cde]",[{parts,
+ <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^]cde]",[]))),
+ <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^]cde]",[trim]))),
+ <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^]cde]",[{parts,
2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("ething","^[]cde]",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[]cde]",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[]cde]",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[]cde]",[]))),
-?line <<"athing">> = iolist_to_binary(join(re:split("athing","^[]cde]",[trim]))),
-?line <<"athing">> = iolist_to_binary(join(re:split("athing","^[]cde]",[{parts,
+ <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^]cde]",[]))),
+ <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^]cde]",[trim]))),
+ <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^]cde]",[{parts,
2}]))),
-?line <<"athing">> = iolist_to_binary(join(re:split("athing","^[]cde]",[]))),
-?line <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[]cde]",[trim]))),
-?line <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[]cde]",[{parts,
+ <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^]cde]",[]))),
+ <<"ething">> = iolist_to_binary(join(re:split("ething","^[^]cde]",[trim]))),
+ <<"ething">> = iolist_to_binary(join(re:split("ething","^[^]cde]",[{parts,
2}]))),
-?line <<"fthing">> = iolist_to_binary(join(re:split("fthing","^[]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("[thing","^[^ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("[thing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("[thing","^[^ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("\\thing","^[^ab\\]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("\\thing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("\\thing","^[^ab\\]cde]",[]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^ab\\]cde]",[trim]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^ab\\]cde]",[]))),
-?line <<"athing">> = iolist_to_binary(join(re:split("athing","^[^ab\\]cde]",[trim]))),
-?line <<"athing">> = iolist_to_binary(join(re:split("athing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<"athing">> = iolist_to_binary(join(re:split("athing","^[^ab\\]cde]",[]))),
-?line <<"bthing">> = iolist_to_binary(join(re:split("bthing","^[^ab\\]cde]",[trim]))),
-?line <<"bthing">> = iolist_to_binary(join(re:split("bthing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<"bthing">> = iolist_to_binary(join(re:split("bthing","^[^ab\\]cde]",[]))),
-?line <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^ab\\]cde]",[trim]))),
-?line <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^ab\\]cde]",[]))),
-?line <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^ab\\]cde]",[trim]))),
-?line <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^ab\\]cde]",[]))),
-?line <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^ab\\]cde]",[trim]))),
-?line <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^ab\\]cde]",[]))),
-?line <<"ething">> = iolist_to_binary(join(re:split("ething","^[^ab\\]cde]",[trim]))),
-?line <<"ething">> = iolist_to_binary(join(re:split("ething","^[^ab\\]cde]",[{parts,
- 2}]))),
-?line <<"ething">> = iolist_to_binary(join(re:split("ething","^[^ab\\]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("athing","^[^]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("athing","^[^]cde]",[{parts,
- 2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("athing","^[^]cde]",[]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^]cde]",[trim]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^]cde]",[{parts,
- 2}]))),
-?line <<":thing">> = iolist_to_binary(join(re:split("fthing","^[^]cde]",[]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^]cde]",[trim]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^]cde]",[{parts,
- 2}]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[^]cde]",[]))),
-?line <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^]cde]",[trim]))),
-?line <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^]cde]",[{parts,
- 2}]))),
-?line <<"]thing">> = iolist_to_binary(join(re:split("]thing","^[^]cde]",[]))),
-?line <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^]cde]",[trim]))),
-?line <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^]cde]",[{parts,
- 2}]))),
-?line <<"cthing">> = iolist_to_binary(join(re:split("cthing","^[^]cde]",[]))),
-?line <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^]cde]",[trim]))),
-?line <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^]cde]",[{parts,
- 2}]))),
-?line <<"dthing">> = iolist_to_binary(join(re:split("dthing","^[^]cde]",[]))),
-?line <<"ething">> = iolist_to_binary(join(re:split("ething","^[^]cde]",[trim]))),
-?line <<"ething">> = iolist_to_binary(join(re:split("ething","^[^]cde]",[{parts,
- 2}]))),
-?line <<"ething">> = iolist_to_binary(join(re:split("ething","^[^]cde]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^\\",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("","^\\",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("","^\\",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ÿ","^ÿ",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ÿ","^ÿ",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ÿ","^ÿ",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("0","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("0","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("0","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("2","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("2","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("2","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("3","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("3","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("3","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("4","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("4","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("4","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("5","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("5","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("5","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("6","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("6","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("6","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("7","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("7","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("7","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("8","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("8","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("8","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("9","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("9","^[0-9]+$",[{parts,
+ <<"ething">> = iolist_to_binary(join(re:split("ething","^[^]cde]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("0","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("0","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("0","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("1","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("1","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("1","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("2","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("2","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("2","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("3","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("3","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("3","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("4","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("4","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("4","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("5","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("5","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("5","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("6","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("6","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("6","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("7","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("7","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("7","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("8","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("8","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("8","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("9","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("9","^[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("9","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("10","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("10","^[0-9]+$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("9","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("10","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("10","^[0-9]+$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("10","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("100","^[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("100","^[0-9]+$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("10","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("100","^[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("100","^[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("100","^[0-9]+$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[0-9]+$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[0-9]+$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[0-9]+$",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^[0-9]+$",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^[0-9]+$",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("enter","^.*nter",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("enter","^.*nter",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("enter","^.*nter",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("inter","^.*nter",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("inter","^.*nter",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("inter","^.*nter",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("uponter","^.*nter",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("uponter","^.*nter",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("uponter","^.*nter",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("xxx0","^xxx[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("xxx0","^xxx[0-9]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("xxx0","^xxx[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("xxx1234","^xxx[0-9]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("xxx1234","^xxx[0-9]+$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("100","^[0-9]+$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[0-9]+$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[0-9]+$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("xxx1234","^xxx[0-9]+$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^xxx[0-9]+$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^xxx[0-9]+$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^xxx[0-9]+$",[]))),
-?line <<"xxx">> = iolist_to_binary(join(re:split("xxx","^xxx[0-9]+$",[trim]))),
-?line <<"xxx">> = iolist_to_binary(join(re:split("xxx","^xxx[0-9]+$",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[0-9]+$",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^[0-9]+$",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^[0-9]+$",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("enter","^.*nter",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("enter","^.*nter",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("enter","^.*nter",[]))),
+ <<"">> = iolist_to_binary(join(re:split("inter","^.*nter",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("inter","^.*nter",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("inter","^.*nter",[]))),
+ <<"">> = iolist_to_binary(join(re:split("uponter","^.*nter",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("uponter","^.*nter",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("uponter","^.*nter",[]))),
+ ok.
+run1() ->
+ <<"">> = iolist_to_binary(join(re:split("xxx0","^xxx[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("xxx0","^xxx[0-9]+$",[{parts,
2}]))),
-?line <<"xxx">> = iolist_to_binary(join(re:split("xxx","^xxx[0-9]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("x123","^.+[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("x123","^.+[0-9][0-9][0-9]$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("xxx0","^xxx[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("xxx1234","^xxx[0-9]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("xxx1234","^xxx[0-9]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("xxx1234","^xxx[0-9]+$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^xxx[0-9]+$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^xxx[0-9]+$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^xxx[0-9]+$",[]))),
+ <<"xxx">> = iolist_to_binary(join(re:split("xxx","^xxx[0-9]+$",[trim]))),
+ <<"xxx">> = iolist_to_binary(join(re:split("xxx","^xxx[0-9]+$",[{parts,
+ 2}]))),
+ <<"xxx">> = iolist_to_binary(join(re:split("xxx","^xxx[0-9]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("x123","^.+[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("x123","^.+[0-9][0-9][0-9]$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("x123","^.+[0-9][0-9][0-9]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("xx123","^.+[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("xx123","^.+[0-9][0-9][0-9]$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("xx123","^.+[0-9][0-9][0-9]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("123456","^.+[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("123456","^.+[0-9][0-9][0-9]$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("123456","^.+[0-9][0-9][0-9]$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+[0-9][0-9][0-9]$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+[0-9][0-9][0-9]$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+[0-9][0-9][0-9]$",[]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^.+[0-9][0-9][0-9]$",[trim]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^.+[0-9][0-9][0-9]$",[{parts,
+ 2}]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^.+[0-9][0-9][0-9]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("x1234","^.+[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("x1234","^.+[0-9][0-9][0-9]$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("x1234","^.+[0-9][0-9][0-9]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("x123","^.+?[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("x123","^.+?[0-9][0-9][0-9]$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("x123","^.+[0-9][0-9][0-9]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("xx123","^.+[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("xx123","^.+[0-9][0-9][0-9]$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("x123","^.+?[0-9][0-9][0-9]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("xx123","^.+?[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("xx123","^.+?[0-9][0-9][0-9]$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("xx123","^.+[0-9][0-9][0-9]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("123456","^.+[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456","^.+[0-9][0-9][0-9]$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("xx123","^.+?[0-9][0-9][0-9]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("123456","^.+?[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("123456","^.+?[0-9][0-9][0-9]$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456","^.+[0-9][0-9][0-9]$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+[0-9][0-9][0-9]$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+[0-9][0-9][0-9]$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("123456","^.+?[0-9][0-9][0-9]$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+?[0-9][0-9][0-9]$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+?[0-9][0-9][0-9]$",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+[0-9][0-9][0-9]$",[]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^.+[0-9][0-9][0-9]$",[trim]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^.+[0-9][0-9][0-9]$",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+?[0-9][0-9][0-9]$",[]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^.+?[0-9][0-9][0-9]$",[trim]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^.+?[0-9][0-9][0-9]$",[{parts,
2}]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^.+[0-9][0-9][0-9]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("x1234","^.+[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("x1234","^.+[0-9][0-9][0-9]$",[{parts,
+ <<"123">> = iolist_to_binary(join(re:split("123","^.+?[0-9][0-9][0-9]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("x1234","^.+?[0-9][0-9][0-9]$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("x1234","^.+?[0-9][0-9][0-9]$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("x1234","^.+[0-9][0-9][0-9]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("x123","^.+?[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("x123","^.+?[0-9][0-9][0-9]$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("x123","^.+?[0-9][0-9][0-9]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("xx123","^.+?[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("xx123","^.+?[0-9][0-9][0-9]$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("xx123","^.+?[0-9][0-9][0-9]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("123456","^.+?[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456","^.+?[0-9][0-9][0-9]$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456","^.+?[0-9][0-9][0-9]$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+?[0-9][0-9][0-9]$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+?[0-9][0-9][0-9]$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.+?[0-9][0-9][0-9]$",[]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^.+?[0-9][0-9][0-9]$",[trim]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^.+?[0-9][0-9][0-9]$",[{parts,
- 2}]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^.+?[0-9][0-9][0-9]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("x1234","^.+?[0-9][0-9][0-9]$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("x1234","^.+?[0-9][0-9][0-9]$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("x1234","^.+?[0-9][0-9][0-9]$",[]))),
-?line <<":abc:pqr">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
-?line <<":abc:pqr:">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
- 2}]))),
-?line <<":abc:pqr:">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
-?line <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
-?line <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
- 2}]))),
-?line <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
-?line <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
-?line <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
- 2}]))),
-?line <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
-?line <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
-?line <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("x1234","^.+?[0-9][0-9][0-9]$",[]))),
+ <<":abc:pqr">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
+ <<":abc:pqr:">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
+ 2}]))),
+ <<":abc:pqr:">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
+ <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
+ <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
+ 2}]))),
+ <<"!pqr=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("!pqr=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
+ <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
+ <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
+ 2}]))),
+ <<"abc!=apquxz.ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!=apquxz.ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
+ <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
+ <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
+ 2}]))),
+ <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
+ <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
+ <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
2}]))),
-?line <<"abc!pqr=apquxz:ixr.zzz.ac.uk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz:ixr.zzz.ac.uk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
-?line <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[trim]))),
-?line <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[{parts,
- 2}]))),
-?line <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
-?line <<"Well, we need a colon: somewhere">> = iolist_to_binary(join(re:split("Well, we need a colon: somewhere",":",[trim]))),
-?line <<"Well, we need a colon: somewhere">> = iolist_to_binary(join(re:split("Well, we need a colon: somewhere",":",[{parts,
- 2}]))),
-?line <<"Well, we need a colon: somewhere">> = iolist_to_binary(join(re:split("Well, we need a colon: somewhere",":",[]))),
-?line <<"*** Fail if we don't">> = iolist_to_binary(join(re:split("*** Fail if we don't",":",[trim]))),
-?line <<"*** Fail if we don't">> = iolist_to_binary(join(re:split("*** Fail if we don't",":",[{parts,
- 2}]))),
-?line <<"*** Fail if we don't">> = iolist_to_binary(join(re:split("*** Fail if we don't",":",[]))),
-?line <<":0abc">> = iolist_to_binary(join(re:split("0abc","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<":0abc:">> = iolist_to_binary(join(re:split("0abc","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<":0abc:">> = iolist_to_binary(join(re:split("0abc","([\\da-f:]+)$",[caseless]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abc","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc","([\\da-f:]+)$",[caseless]))),
-?line <<":fed">> = iolist_to_binary(join(re:split("fed","([\\da-f:]+)$",[caseless,
+ <<"abc!pqr=apquxz.ixr.zzz.ac.ukk">> = iolist_to_binary(join(re:split("abc!pqr=apquxz.ixr.zzz.ac.ukk","^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$",[]))),
+ <<"Well, we need a colon: somewhere">> = iolist_to_binary(join(re:split("Well, we need a colon: somewhere",":",[trim]))),
+ <<"Well, we need a colon: somewhere">> = iolist_to_binary(join(re:split("Well, we need a colon: somewhere",":",[{parts,
+ 2}]))),
+ <<"Well, we need a colon: somewhere">> = iolist_to_binary(join(re:split("Well, we need a colon: somewhere",":",[]))),
+ <<"*** Fail if we don't">> = iolist_to_binary(join(re:split("*** Fail if we don't",":",[trim]))),
+ <<"*** Fail if we don't">> = iolist_to_binary(join(re:split("*** Fail if we don't",":",[{parts,
+ 2}]))),
+ <<"*** Fail if we don't">> = iolist_to_binary(join(re:split("*** Fail if we don't",":",[]))),
+ <<":0abc">> = iolist_to_binary(join(re:split("0abc","([\\da-f:]+)$",[caseless,
trim]))),
-?line <<":fed:">> = iolist_to_binary(join(re:split("fed","([\\da-f:]+)$",[caseless,
+ <<":0abc:">> = iolist_to_binary(join(re:split("0abc","([\\da-f:]+)$",[caseless,
{parts,
2}]))),
-?line <<":fed:">> = iolist_to_binary(join(re:split("fed","([\\da-f:]+)$",[caseless]))),
-?line <<":E">> = iolist_to_binary(join(re:split("E","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<":E:">> = iolist_to_binary(join(re:split("E","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<":E:">> = iolist_to_binary(join(re:split("E","([\\da-f:]+)$",[caseless]))),
-?line <<":::">> = iolist_to_binary(join(re:split("::","([\\da-f:]+)$",[caseless,
+ <<":0abc:">> = iolist_to_binary(join(re:split("0abc","([\\da-f:]+)$",[caseless]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abc","([\\da-f:]+)$",[caseless,
trim]))),
-?line <<"::::">> = iolist_to_binary(join(re:split("::","([\\da-f:]+)$",[caseless,
+ <<":abc:">> = iolist_to_binary(join(re:split("abc","([\\da-f:]+)$",[caseless,
{parts,
2}]))),
-?line <<"::::">> = iolist_to_binary(join(re:split("::","([\\da-f:]+)$",[caseless]))),
-?line <<":5f03:12C0::932e">> = iolist_to_binary(join(re:split("5f03:12C0::932e","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<":5f03:12C0::932e:">> = iolist_to_binary(join(re:split("5f03:12C0::932e","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<":5f03:12C0::932e:">> = iolist_to_binary(join(re:split("5f03:12C0::932e","([\\da-f:]+)$",[caseless]))),
-?line <<"fed :def">> = iolist_to_binary(join(re:split("fed def","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<"fed :def:">> = iolist_to_binary(join(re:split("fed def","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<"fed :def:">> = iolist_to_binary(join(re:split("fed def","([\\da-f:]+)$",[caseless]))),
-?line <<"Any old stu:ff">> = iolist_to_binary(join(re:split("Any old stuff","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<"Any old stu:ff:">> = iolist_to_binary(join(re:split("Any old stuff","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<"Any old stu:ff:">> = iolist_to_binary(join(re:split("Any old stuff","([\\da-f:]+)$",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\da-f:]+)$",[caseless]))),
-?line <<"0zzz">> = iolist_to_binary(join(re:split("0zzz","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<"0zzz">> = iolist_to_binary(join(re:split("0zzz","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<"0zzz">> = iolist_to_binary(join(re:split("0zzz","([\\da-f:]+)$",[caseless]))),
-?line <<"gzzz">> = iolist_to_binary(join(re:split("gzzz","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<"gzzz">> = iolist_to_binary(join(re:split("gzzz","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<"gzzz">> = iolist_to_binary(join(re:split("gzzz","([\\da-f:]+)$",[caseless]))),
-?line <<"fed ">> = iolist_to_binary(join(re:split("fed ","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<"fed ">> = iolist_to_binary(join(re:split("fed ","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<"fed ">> = iolist_to_binary(join(re:split("fed ","([\\da-f:]+)$",[caseless]))),
-?line <<"Any old rubbish">> = iolist_to_binary(join(re:split("Any old rubbish","([\\da-f:]+)$",[caseless,
- trim]))),
-?line <<"Any old rubbish">> = iolist_to_binary(join(re:split("Any old rubbish","([\\da-f:]+)$",[caseless,
- {parts,
- 2}]))),
-?line <<"Any old rubbish">> = iolist_to_binary(join(re:split("Any old rubbish","([\\da-f:]+)$",[caseless]))),
-?line <<":1:2:3">> = iolist_to_binary(join(re:split(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
-?line <<":1:2:3:">> = iolist_to_binary(join(re:split(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
- 2}]))),
-?line <<":1:2:3:">> = iolist_to_binary(join(re:split(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
-?line <<":12:123:0">> = iolist_to_binary(join(re:split("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
-?line <<":12:123:0:">> = iolist_to_binary(join(re:split("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
- 2}]))),
-?line <<":12:123:0:">> = iolist_to_binary(join(re:split("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
-?line <<".1.2.3333">> = iolist_to_binary(join(re:split(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
-?line <<".1.2.3333">> = iolist_to_binary(join(re:split(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
- 2}]))),
-?line <<".1.2.3333">> = iolist_to_binary(join(re:split(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
-?line <<"1.2.3">> = iolist_to_binary(join(re:split("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
-?line <<"1.2.3">> = iolist_to_binary(join(re:split("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
+ <<":abc:">> = iolist_to_binary(join(re:split("abc","([\\da-f:]+)$",[caseless]))),
+ <<":fed">> = iolist_to_binary(join(re:split("fed","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<":fed:">> = iolist_to_binary(join(re:split("fed","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<":fed:">> = iolist_to_binary(join(re:split("fed","([\\da-f:]+)$",[caseless]))),
+ <<":E">> = iolist_to_binary(join(re:split("E","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<":E:">> = iolist_to_binary(join(re:split("E","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<":E:">> = iolist_to_binary(join(re:split("E","([\\da-f:]+)$",[caseless]))),
+ <<":::">> = iolist_to_binary(join(re:split("::","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"::::">> = iolist_to_binary(join(re:split("::","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"::::">> = iolist_to_binary(join(re:split("::","([\\da-f:]+)$",[caseless]))),
+ <<":5f03:12C0::932e">> = iolist_to_binary(join(re:split("5f03:12C0::932e","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<":5f03:12C0::932e:">> = iolist_to_binary(join(re:split("5f03:12C0::932e","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<":5f03:12C0::932e:">> = iolist_to_binary(join(re:split("5f03:12C0::932e","([\\da-f:]+)$",[caseless]))),
+ <<"fed :def">> = iolist_to_binary(join(re:split("fed def","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"fed :def:">> = iolist_to_binary(join(re:split("fed def","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"fed :def:">> = iolist_to_binary(join(re:split("fed def","([\\da-f:]+)$",[caseless]))),
+ <<"Any old stu:ff">> = iolist_to_binary(join(re:split("Any old stuff","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"Any old stu:ff:">> = iolist_to_binary(join(re:split("Any old stuff","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"Any old stu:ff:">> = iolist_to_binary(join(re:split("Any old stuff","([\\da-f:]+)$",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\da-f:]+)$",[caseless]))),
+ <<"0zzz">> = iolist_to_binary(join(re:split("0zzz","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"0zzz">> = iolist_to_binary(join(re:split("0zzz","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"0zzz">> = iolist_to_binary(join(re:split("0zzz","([\\da-f:]+)$",[caseless]))),
+ <<"gzzz">> = iolist_to_binary(join(re:split("gzzz","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"gzzz">> = iolist_to_binary(join(re:split("gzzz","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"gzzz">> = iolist_to_binary(join(re:split("gzzz","([\\da-f:]+)$",[caseless]))),
+ <<"fed ">> = iolist_to_binary(join(re:split("fed ","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"fed ">> = iolist_to_binary(join(re:split("fed ","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"fed ">> = iolist_to_binary(join(re:split("fed ","([\\da-f:]+)$",[caseless]))),
+ <<"Any old rubbish">> = iolist_to_binary(join(re:split("Any old rubbish","([\\da-f:]+)$",[caseless,
+ trim]))),
+ <<"Any old rubbish">> = iolist_to_binary(join(re:split("Any old rubbish","([\\da-f:]+)$",[caseless,
+ {parts,
+ 2}]))),
+ <<"Any old rubbish">> = iolist_to_binary(join(re:split("Any old rubbish","([\\da-f:]+)$",[caseless]))),
+ <<":1:2:3">> = iolist_to_binary(join(re:split(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
+ <<":1:2:3:">> = iolist_to_binary(join(re:split(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
2}]))),
-?line <<"1.2.3">> = iolist_to_binary(join(re:split("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
-?line <<"1234.2.3">> = iolist_to_binary(join(re:split("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
-?line <<"1234.2.3">> = iolist_to_binary(join(re:split("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
+ <<":1:2:3:">> = iolist_to_binary(join(re:split(".1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
+ <<":12:123:0">> = iolist_to_binary(join(re:split("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
+ <<":12:123:0:">> = iolist_to_binary(join(re:split("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
+ 2}]))),
+ <<":12:123:0:">> = iolist_to_binary(join(re:split("A.12.123.0","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
+ <<".1.2.3333">> = iolist_to_binary(join(re:split(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
+ <<".1.2.3333">> = iolist_to_binary(join(re:split(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
2}]))),
-?line <<"1234.2.3">> = iolist_to_binary(join(re:split("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
-?line <<":1:non-sp1:non-sp2">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
-?line <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
- 2}]))),
-?line <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
-?line <<":1:non-sp1:non-sp2">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
-?line <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
- 2}]))),
-?line <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
-?line <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(join(re:split("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
-?line <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(join(re:split("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
- 2}]))),
-?line <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(join(re:split("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<":.pq-r">> = iolist_to_binary(join(re:split("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<":.pq-r:">> = iolist_to_binary(join(re:split("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
- 2}]))),
-?line <<":.pq-r:">> = iolist_to_binary(join(re:split("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<":.uk">> = iolist_to_binary(join(re:split("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<":.uk:">> = iolist_to_binary(join(re:split("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ <<".1.2.3333">> = iolist_to_binary(join(re:split(".1.2.3333","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
+ <<"1.2.3">> = iolist_to_binary(join(re:split("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
+ <<"1.2.3">> = iolist_to_binary(join(re:split("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
+ 2}]))),
+ <<"1.2.3">> = iolist_to_binary(join(re:split("1.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
+ <<"1234.2.3">> = iolist_to_binary(join(re:split("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[trim]))),
+ <<"1234.2.3">> = iolist_to_binary(join(re:split("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[{parts,
+ 2}]))),
+ <<"1234.2.3">> = iolist_to_binary(join(re:split("1234.2.3","^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",[]))),
+ <<":1:non-sp1:non-sp2">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
+ <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
2}]))),
-?line <<":.uk:">> = iolist_to_binary(join(re:split("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<":.y-">> = iolist_to_binary(join(re:split("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<":.y-:">> = iolist_to_binary(join(re:split("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
- 2}]))),
-?line <<":.y-:">> = iolist_to_binary(join(re:split("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<"-abc.peq.">> = iolist_to_binary(join(re:split("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
-?line <<"-abc.peq.">> = iolist_to_binary(join(re:split("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
+ <<":1:non-sp1:non-sp2">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
+ <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
+ 2}]))),
+ <<":1:non-sp1:non-sp2:">> = iolist_to_binary(join(re:split("1 IN SOA non-sp1 non-sp2 (","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
+ <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(join(re:split("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[trim]))),
+ <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(join(re:split("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[{parts,
+ 2}]))),
+ <<"1IN SOA non-sp1 non-sp2(">> = iolist_to_binary(join(re:split("1IN SOA non-sp1 non-sp2(","^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("Z.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("2.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<":.pq-r">> = iolist_to_binary(join(re:split("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<":.pq-r:">> = iolist_to_binary(join(re:split("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
2}]))),
-?line <<"-abc.peq.">> = iolist_to_binary(join(re:split("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<"::::">> = iolist_to_binary(join(re:split("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
- 2}]))),
-?line <<"::::">> = iolist_to_binary(join(re:split("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<":0-a">> = iolist_to_binary(join(re:split("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<":0-a:::">> = iolist_to_binary(join(re:split("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
- 2}]))),
-?line <<":0-a:::">> = iolist_to_binary(join(re:split("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<":3-b:.c">> = iolist_to_binary(join(re:split("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<":3-b:.c::">> = iolist_to_binary(join(re:split("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ <<":.pq-r:">> = iolist_to_binary(join(re:split("ab-c.pq-r.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<":.uk">> = iolist_to_binary(join(re:split("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<":.uk:">> = iolist_to_binary(join(re:split("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ 2}]))),
+ <<":.uk:">> = iolist_to_binary(join(re:split("sxk.zzz.ac.uk.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<":.y-">> = iolist_to_binary(join(re:split("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<":.y-:">> = iolist_to_binary(join(re:split("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ 2}]))),
+ <<":.y-:">> = iolist_to_binary(join(re:split("x-.y-.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<"-abc.peq.">> = iolist_to_binary(join(re:split("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[trim]))),
+ <<"-abc.peq.">> = iolist_to_binary(join(re:split("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[{parts,
+ 2}]))),
+ <<"-abc.peq.">> = iolist_to_binary(join(re:split("-abc.peq.","^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<"::::">> = iolist_to_binary(join(re:split("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ 2}]))),
+ <<"::::">> = iolist_to_binary(join(re:split("*.a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<":0-a">> = iolist_to_binary(join(re:split("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<":0-a:::">> = iolist_to_binary(join(re:split("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ 2}]))),
+ <<":0-a:::">> = iolist_to_binary(join(re:split("*.b0-a","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<":3-b:.c">> = iolist_to_binary(join(re:split("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<":3-b:.c::">> = iolist_to_binary(join(re:split("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ 2}]))),
+ <<":3-b:.c::">> = iolist_to_binary(join(re:split("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<":-a:.b-c:-c">> = iolist_to_binary(join(re:split("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<":-a:.b-c:-c:">> = iolist_to_binary(join(re:split("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
2}]))),
-?line <<":3-b:.c::">> = iolist_to_binary(join(re:split("*.c3-b.c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<":-a:.b-c:-c">> = iolist_to_binary(join(re:split("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<":-a:.b-c:-c:">> = iolist_to_binary(join(re:split("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
- 2}]))),
-?line <<":-a:.b-c:-c:">> = iolist_to_binary(join(re:split("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<"*.0">> = iolist_to_binary(join(re:split("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<"*.0">> = iolist_to_binary(join(re:split("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ <<":-a:.b-c:-c:">> = iolist_to_binary(join(re:split("*.c-a.b-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<"*.0">> = iolist_to_binary(join(re:split("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<"*.0">> = iolist_to_binary(join(re:split("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ 2}]))),
+ <<"*.0">> = iolist_to_binary(join(re:split("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<"*.a-">> = iolist_to_binary(join(re:split("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<"*.a-">> = iolist_to_binary(join(re:split("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
2}]))),
-?line <<"*.0">> = iolist_to_binary(join(re:split("*.0","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<"*.a-">> = iolist_to_binary(join(re:split("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<"*.a-">> = iolist_to_binary(join(re:split("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
- 2}]))),
-?line <<"*.a-">> = iolist_to_binary(join(re:split("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<"*.a-b.c-">> = iolist_to_binary(join(re:split("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<"*.a-b.c-">> = iolist_to_binary(join(re:split("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ <<"*.a-">> = iolist_to_binary(join(re:split("*.a-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<"*.a-b.c-">> = iolist_to_binary(join(re:split("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<"*.a-b.c-">> = iolist_to_binary(join(re:split("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
+ 2}]))),
+ <<"*.a-b.c-">> = iolist_to_binary(join(re:split("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<"*.c-a.0-c">> = iolist_to_binary(join(re:split("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
+ <<"*.c-a.0-c">> = iolist_to_binary(join(re:split("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
2}]))),
-?line <<"*.a-b.c-">> = iolist_to_binary(join(re:split("*.a-b.c-","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<"*.c-a.0-c">> = iolist_to_binary(join(re:split("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[trim]))),
-?line <<"*.c-a.0-c">> = iolist_to_binary(join(re:split("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[{parts,
- 2}]))),
-?line <<"*.c-a.0-c">> = iolist_to_binary(join(re:split("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
-?line <<":de:abd:e">> = iolist_to_binary(join(re:split("abde","^(?=ab(de))(abd)(e)",[trim]))),
-?line <<":de:abd:e:">> = iolist_to_binary(join(re:split("abde","^(?=ab(de))(abd)(e)",[{parts,
- 2}]))),
-?line <<":de:abd:e:">> = iolist_to_binary(join(re:split("abde","^(?=ab(de))(abd)(e)",[]))),
-?line <<"::abd:f">> = iolist_to_binary(join(re:split("abdf","^(?!(ab)de|x)(abd)(f)",[trim]))),
-?line <<"::abd:f:">> = iolist_to_binary(join(re:split("abdf","^(?!(ab)de|x)(abd)(f)",[{parts,
- 2}]))),
-?line <<"::abd:f:">> = iolist_to_binary(join(re:split("abdf","^(?!(ab)de|x)(abd)(f)",[]))),
-?line <<":abcd:cd:ab:cd">> = iolist_to_binary(join(re:split("abcd","^(?=(ab(cd)))(ab)",[trim]))),
-?line <<":abcd:cd:ab:cd">> = iolist_to_binary(join(re:split("abcd","^(?=(ab(cd)))(ab)",[{parts,
- 2}]))),
-?line <<":abcd:cd:ab:cd">> = iolist_to_binary(join(re:split("abcd","^(?=(ab(cd)))(ab)",[]))),
-?line <<":.d">> = iolist_to_binary(join(re:split("a.b.c.d","^[\\da-f](\\.[\\da-f])*$",[caseless,
- trim]))),
-?line <<":.d:">> = iolist_to_binary(join(re:split("a.b.c.d","^[\\da-f](\\.[\\da-f])*$",[caseless,
- {parts,
- 2}]))),
-?line <<":.d:">> = iolist_to_binary(join(re:split("a.b.c.d","^[\\da-f](\\.[\\da-f])*$",[caseless]))),
-?line <<":.D">> = iolist_to_binary(join(re:split("A.B.C.D","^[\\da-f](\\.[\\da-f])*$",[caseless,
- trim]))),
-?line <<":.D:">> = iolist_to_binary(join(re:split("A.B.C.D","^[\\da-f](\\.[\\da-f])*$",[caseless,
- {parts,
- 2}]))),
-?line <<":.D:">> = iolist_to_binary(join(re:split("A.B.C.D","^[\\da-f](\\.[\\da-f])*$",[caseless]))),
-?line <<":.C">> = iolist_to_binary(join(re:split("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$",[caseless,
- trim]))),
-?line <<":.C:">> = iolist_to_binary(join(re:split("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$",[caseless,
- {parts,
- 2}]))),
-?line <<":.C:">> = iolist_to_binary(join(re:split("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("\"1234\"","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("\"1234\"","^\\\".*\\\"\\s*(;.*)?$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("\"1234\"","^\\\".*\\\"\\s*(;.*)?$",[]))),
-?line <<":;">> = iolist_to_binary(join(re:split("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
-?line <<":;:">> = iolist_to_binary(join(re:split("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$",[{parts,
- 2}]))),
-?line <<":;:">> = iolist_to_binary(join(re:split("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$",[]))),
-?line <<":; rhubarb">> = iolist_to_binary(join(re:split("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
-?line <<":; rhubarb:">> = iolist_to_binary(join(re:split("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$",[{parts,
- 2}]))),
-?line <<":; rhubarb:">> = iolist_to_binary(join(re:split("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\\".*\\\"\\s*(;.*)?$",[{parts,
+ <<"*.c-a.0-c">> = iolist_to_binary(join(re:split("*.c-a.0-c","^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$",[]))),
+ <<":de:abd:e">> = iolist_to_binary(join(re:split("abde","^(?=ab(de))(abd)(e)",[trim]))),
+ <<":de:abd:e:">> = iolist_to_binary(join(re:split("abde","^(?=ab(de))(abd)(e)",[{parts,
+ 2}]))),
+ <<":de:abd:e:">> = iolist_to_binary(join(re:split("abde","^(?=ab(de))(abd)(e)",[]))),
+ <<"::abd:f">> = iolist_to_binary(join(re:split("abdf","^(?!(ab)de|x)(abd)(f)",[trim]))),
+ <<"::abd:f:">> = iolist_to_binary(join(re:split("abdf","^(?!(ab)de|x)(abd)(f)",[{parts,
+ 2}]))),
+ <<"::abd:f:">> = iolist_to_binary(join(re:split("abdf","^(?!(ab)de|x)(abd)(f)",[]))),
+ <<":abcd:cd:ab:cd">> = iolist_to_binary(join(re:split("abcd","^(?=(ab(cd)))(ab)",[trim]))),
+ <<":abcd:cd:ab:cd">> = iolist_to_binary(join(re:split("abcd","^(?=(ab(cd)))(ab)",[{parts,
+ 2}]))),
+ <<":abcd:cd:ab:cd">> = iolist_to_binary(join(re:split("abcd","^(?=(ab(cd)))(ab)",[]))),
+ <<":.d">> = iolist_to_binary(join(re:split("a.b.c.d","^[\\da-f](\\.[\\da-f])*$",[caseless,
+ trim]))),
+ <<":.d:">> = iolist_to_binary(join(re:split("a.b.c.d","^[\\da-f](\\.[\\da-f])*$",[caseless,
+ {parts,
+ 2}]))),
+ <<":.d:">> = iolist_to_binary(join(re:split("a.b.c.d","^[\\da-f](\\.[\\da-f])*$",[caseless]))),
+ <<":.D">> = iolist_to_binary(join(re:split("A.B.C.D","^[\\da-f](\\.[\\da-f])*$",[caseless,
+ trim]))),
+ <<":.D:">> = iolist_to_binary(join(re:split("A.B.C.D","^[\\da-f](\\.[\\da-f])*$",[caseless,
+ {parts,
+ 2}]))),
+ <<":.D:">> = iolist_to_binary(join(re:split("A.B.C.D","^[\\da-f](\\.[\\da-f])*$",[caseless]))),
+ <<":.C">> = iolist_to_binary(join(re:split("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$",[caseless,
+ trim]))),
+ <<":.C:">> = iolist_to_binary(join(re:split("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$",[caseless,
+ {parts,
+ 2}]))),
+ <<":.C:">> = iolist_to_binary(join(re:split("a.b.c.1.2.3.C","^[\\da-f](\\.[\\da-f])*$",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("\"1234\"","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("\"1234\"","^\\\".*\\\"\\s*(;.*)?$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("\"1234\"","^\\\".*\\\"\\s*(;.*)?$",[]))),
+ <<":;">> = iolist_to_binary(join(re:split("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
+ <<":;:">> = iolist_to_binary(join(re:split("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\\".*\\\"\\s*(;.*)?$",[]))),
-?line <<"\"1234\" : things">> = iolist_to_binary(join(re:split("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
-?line <<"\"1234\" : things">> = iolist_to_binary(join(re:split("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$",[{parts,
- 2}]))),
-?line <<"\"1234\" : things">> = iolist_to_binary(join(re:split("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^$",[trim]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^$",[{parts,
- 2}]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ <<":;:">> = iolist_to_binary(join(re:split("\"abcd\" ;","^\\\".*\\\"\\s*(;.*)?$",[]))),
+ <<":; rhubarb">> = iolist_to_binary(join(re:split("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
+ <<":; rhubarb:">> = iolist_to_binary(join(re:split("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$",[{parts,
+ 2}]))),
+ <<":; rhubarb:">> = iolist_to_binary(join(re:split("\"\" ; rhubarb","^\\\".*\\\"\\s*(;.*)?$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\\".*\\\"\\s*(;.*)?$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\\".*\\\"\\s*(;.*)?$",[]))),
+ <<"\"1234\" : things">> = iolist_to_binary(join(re:split("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$",[trim]))),
+ <<"\"1234\" : things">> = iolist_to_binary(join(re:split("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$",[{parts,
+ 2}]))),
+ <<"\"1234\" : things">> = iolist_to_binary(join(re:split("\"1234\" : things","^\\\".*\\\"\\s*(;.*)?$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("","^$",[trim]))),
+ <<"">> = iolist_to_binary(join(re:split("","^$",[{parts,
+ 2}]))),
+ <<"">> = iolist_to_binary(join(re:split("","^$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ <<":">> = iolist_to_binary(join(re:split("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
{parts,
2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
-?line <<"ab cde">> = iolist_to_binary(join(re:split("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
- trim]))),
-?line <<"ab cde">> = iolist_to_binary(join(re:split("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
- {parts,
- 2}]))),
-?line <<"ab cde">> = iolist_to_binary(join(re:split("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("ab c"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ {parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
+ <<"ab cde">> = iolist_to_binary(join(re:split("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ trim]))),
+ <<"ab cde">> = iolist_to_binary(join(re:split("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended,
+ {parts,
+ 2}]))),
+ <<"ab cde">> = iolist_to_binary(join(re:split("ab cde"," ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
-?line <<"ab cde">> = iolist_to_binary(join(re:split("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
-?line <<"ab cde">> = iolist_to_binary(join(re:split("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
- 2}]))),
-?line <<"ab cde">> = iolist_to_binary(join(re:split("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a bcd","^ a\\ b[c ]d $",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a bcd","^ a\\ b[c ]d $",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a bcd","^ a\\ b[c ]d $",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("a b d","^ a\\ b[c ]d $",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a b d","^ a\\ b[c ]d $",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a b d","^ a\\ b[c ]d $",[extended]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^ a\\ b[c ]d $",[extended,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^ a\\ b[c ]d $",[extended,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^ a\\ b[c ]d $",[extended]))),
-?line <<"abcd">> = iolist_to_binary(join(re:split("abcd","^ a\\ b[c ]d $",[extended,
+ <<":">> = iolist_to_binary(join(re:split("ab c","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
+ <<"ab cde">> = iolist_to_binary(join(re:split("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[trim]))),
+ <<"ab cde">> = iolist_to_binary(join(re:split("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[{parts,
+ 2}]))),
+ <<"ab cde">> = iolist_to_binary(join(re:split("ab cde","(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a bcd","^ a\\ b[c ]d $",[extended,
trim]))),
-?line <<"abcd">> = iolist_to_binary(join(re:split("abcd","^ a\\ b[c ]d $",[extended,
+ <<":">> = iolist_to_binary(join(re:split("a bcd","^ a\\ b[c ]d $",[extended,
{parts,
2}]))),
-?line <<"abcd">> = iolist_to_binary(join(re:split("abcd","^ a\\ b[c ]d $",[extended]))),
-?line <<"ab d">> = iolist_to_binary(join(re:split("ab d","^ a\\ b[c ]d $",[extended,
+ <<":">> = iolist_to_binary(join(re:split("a bcd","^ a\\ b[c ]d $",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("a b d","^ a\\ b[c ]d $",[extended,
trim]))),
-?line <<"ab d">> = iolist_to_binary(join(re:split("ab d","^ a\\ b[c ]d $",[extended,
+ <<":">> = iolist_to_binary(join(re:split("a b d","^ a\\ b[c ]d $",[extended,
{parts,
2}]))),
-?line <<"ab d">> = iolist_to_binary(join(re:split("ab d","^ a\\ b[c ]d $",[extended]))),
-?line <<":abc:bc:c:def:ef:f:hij:ij:j:klm:lm:m">> = iolist_to_binary(join(re:split("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$",[trim]))),
-?line <<":abc:bc:c:def:ef:f:hij:ij:j:klm:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$",[{parts,
- 2}]))),
-?line <<":abc:bc:c:def:ef:f:hij:ij:j:klm:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$",[]))),
-?line <<":bc:c:ef:f:ij:j:lm:m">> = iolist_to_binary(join(re:split("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$",[trim]))),
-?line <<":bc:c:ef:f:ij:j:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$",[{parts,
- 2}]))),
-?line <<":bc:c:ef:f:ij:j:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a+ Z0+
+ <<":">> = iolist_to_binary(join(re:split("a b d","^ a\\ b[c ]d $",[extended]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^ a\\ b[c ]d $",[extended,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^ a\\ b[c ]d $",[extended,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^ a\\ b[c ]d $",[extended]))),
+ <<"abcd">> = iolist_to_binary(join(re:split("abcd","^ a\\ b[c ]d $",[extended,
+ trim]))),
+ <<"abcd">> = iolist_to_binary(join(re:split("abcd","^ a\\ b[c ]d $",[extended,
+ {parts,
+ 2}]))),
+ <<"abcd">> = iolist_to_binary(join(re:split("abcd","^ a\\ b[c ]d $",[extended]))),
+ <<"ab d">> = iolist_to_binary(join(re:split("ab d","^ a\\ b[c ]d $",[extended,
+ trim]))),
+ <<"ab d">> = iolist_to_binary(join(re:split("ab d","^ a\\ b[c ]d $",[extended,
+ {parts,
+ 2}]))),
+ <<"ab d">> = iolist_to_binary(join(re:split("ab d","^ a\\ b[c ]d $",[extended]))),
+ <<":abc:bc:c:def:ef:f:hij:ij:j:klm:lm:m">> = iolist_to_binary(join(re:split("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$",[trim]))),
+ <<":abc:bc:c:def:ef:f:hij:ij:j:klm:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$",[{parts,
+ 2}]))),
+ <<":abc:bc:c:def:ef:f:hij:ij:j:klm:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$",[]))),
+ ok.
+run2() ->
+ <<":bc:c:ef:f:ij:j:lm:m">> = iolist_to_binary(join(re:split("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$",[trim]))),
+ <<":bc:c:ef:f:ij:j:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$",[{parts,
+ 2}]))),
+ <<":bc:c:ef:f:ij:j:lm:m:">> = iolist_to_binary(join(re:split("abcdefhijklm","^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a+ Z0+
","^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a+ Z0+
+ <<":">> = iolist_to_binary(join(re:split("a+ Z0+
","^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a+ Z0+
+ <<":">> = iolist_to_binary(join(re:split("a+ Z0+
","^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("z","^a*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","^a*\\w",[{parts,
+ <<"">> = iolist_to_binary(join(re:split(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split(".^$(*+)|{?,?}","^[.^$|()*+?{,}]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("z","^a*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("z","^a*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("z","^a*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("az","^a*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("az","^a*\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","^a*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("az","^a*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("az","^a*\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("az","^a*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaz","^a*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaz","^a*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaz","^a*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","^a*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^a*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^a*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aa","^a*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aa","^a*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aa","^a*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^a*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w",[]))),
+ <<":+">> = iolist_to_binary(join(re:split("a+","^a*\\w",[trim]))),
+ <<":+">> = iolist_to_binary(join(re:split("a+","^a*\\w",[{parts,
+ 2}]))),
+ <<":+">> = iolist_to_binary(join(re:split("a+","^a*\\w",[]))),
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a*\\w",[trim]))),
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a*\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("az","^a*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaz","^a*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaz","^a*\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaz","^a*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","^a*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^a*\\w",[{parts,
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("z","^a*?\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("z","^a*?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^a*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aa","^a*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","^a*\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("z","^a*?\\w",[]))),
+ <<":z">> = iolist_to_binary(join(re:split("az","^a*?\\w",[trim]))),
+ <<":z">> = iolist_to_binary(join(re:split("az","^a*?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","^a*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","^a*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w",[{parts,
+ <<":z">> = iolist_to_binary(join(re:split("az","^a*?\\w",[]))),
+ <<":aaz">> = iolist_to_binary(join(re:split("aaaz","^a*?\\w",[trim]))),
+ <<":aaz">> = iolist_to_binary(join(re:split("aaaz","^a*?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w",[]))),
-?line <<":+">> = iolist_to_binary(join(re:split("a+","^a*\\w",[trim]))),
-?line <<":+">> = iolist_to_binary(join(re:split("a+","^a*\\w",[{parts,
+ <<":aaz">> = iolist_to_binary(join(re:split("aaaz","^a*?\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","^a*?\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^a*?\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^a*?\\w",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aa","^a*?\\w",[trim]))),
+ <<":a">> = iolist_to_binary(join(re:split("aa","^a*?\\w",[{parts,
2}]))),
-?line <<":+">> = iolist_to_binary(join(re:split("a+","^a*\\w",[]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a*\\w",[trim]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a*\\w",[{parts,
- 2}]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("z","^a*?\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","^a*?\\w",[{parts,
+ <<":a">> = iolist_to_binary(join(re:split("aa","^a*?\\w",[]))),
+ <<":aaa">> = iolist_to_binary(join(re:split("aaaa","^a*?\\w",[trim]))),
+ <<":aaa">> = iolist_to_binary(join(re:split("aaaa","^a*?\\w",[{parts,
+ 2}]))),
+ <<":aaa">> = iolist_to_binary(join(re:split("aaaa","^a*?\\w",[]))),
+ <<":+">> = iolist_to_binary(join(re:split("a+","^a*?\\w",[trim]))),
+ <<":+">> = iolist_to_binary(join(re:split("a+","^a*?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","^a*?\\w",[]))),
-?line <<":z">> = iolist_to_binary(join(re:split("az","^a*?\\w",[trim]))),
-?line <<":z">> = iolist_to_binary(join(re:split("az","^a*?\\w",[{parts,
+ <<":+">> = iolist_to_binary(join(re:split("a+","^a*?\\w",[]))),
+ <<":a+">> = iolist_to_binary(join(re:split("aa+","^a*?\\w",[trim]))),
+ <<":a+">> = iolist_to_binary(join(re:split("aa+","^a*?\\w",[{parts,
2}]))),
-?line <<":z">> = iolist_to_binary(join(re:split("az","^a*?\\w",[]))),
-?line <<":aaz">> = iolist_to_binary(join(re:split("aaaz","^a*?\\w",[trim]))),
-?line <<":aaz">> = iolist_to_binary(join(re:split("aaaz","^a*?\\w",[{parts,
- 2}]))),
-?line <<":aaz">> = iolist_to_binary(join(re:split("aaaz","^a*?\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","^a*?\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^a*?\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^a*?\\w",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aa","^a*?\\w",[trim]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aa","^a*?\\w",[{parts,
+ <<":a+">> = iolist_to_binary(join(re:split("aa+","^a*?\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("az","^a+\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("az","^a+\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("az","^a+\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaz","^a+\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaz","^a+\\w",[{parts,
2}]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aa","^a*?\\w",[]))),
-?line <<":aaa">> = iolist_to_binary(join(re:split("aaaa","^a*?\\w",[trim]))),
-?line <<":aaa">> = iolist_to_binary(join(re:split("aaaa","^a*?\\w",[{parts,
- 2}]))),
-?line <<":aaa">> = iolist_to_binary(join(re:split("aaaa","^a*?\\w",[]))),
-?line <<":+">> = iolist_to_binary(join(re:split("a+","^a*?\\w",[trim]))),
-?line <<":+">> = iolist_to_binary(join(re:split("a+","^a*?\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaz","^a+\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aa","^a+\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aa","^a+\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aa","^a+\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^a+\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a+\\w",[{parts,
2}]))),
-?line <<":+">> = iolist_to_binary(join(re:split("a+","^a*?\\w",[]))),
-?line <<":a+">> = iolist_to_binary(join(re:split("aa+","^a*?\\w",[trim]))),
-?line <<":a+">> = iolist_to_binary(join(re:split("aa+","^a*?\\w",[{parts,
- 2}]))),
-?line <<":a+">> = iolist_to_binary(join(re:split("aa+","^a*?\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("az","^a+\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("az","^a+\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a+\\w",[]))),
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a+\\w",[trim]))),
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a+\\w",[{parts,
+ 2}]))),
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a+\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("az","^a+?\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("az","^a+?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("az","^a+\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaz","^a+\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaz","^a+\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("az","^a+?\\w",[]))),
+ <<":az">> = iolist_to_binary(join(re:split("aaaz","^a+?\\w",[trim]))),
+ <<":az">> = iolist_to_binary(join(re:split("aaaz","^a+?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaz","^a+\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aa","^a+\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","^a+\\w",[{parts,
+ <<":az">> = iolist_to_binary(join(re:split("aaaz","^a+?\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aa","^a+?\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aa","^a+?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","^a+\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","^a+\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^a+\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aa","^a+?\\w",[]))),
+ <<":aa">> = iolist_to_binary(join(re:split("aaaa","^a+?\\w",[trim]))),
+ <<":aa">> = iolist_to_binary(join(re:split("aaaa","^a+?\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^a+\\w",[]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a+\\w",[trim]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a+\\w",[{parts,
+ <<":aa">> = iolist_to_binary(join(re:split("aaaa","^a+?\\w",[]))),
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a+?\\w",[trim]))),
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a+?\\w",[{parts,
2}]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a+\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("az","^a+?\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("az","^a+?\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("az","^a+?\\w",[]))),
-?line <<":az">> = iolist_to_binary(join(re:split("aaaz","^a+?\\w",[trim]))),
-?line <<":az">> = iolist_to_binary(join(re:split("aaaz","^a+?\\w",[{parts,
- 2}]))),
-?line <<":az">> = iolist_to_binary(join(re:split("aaaz","^a+?\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aa","^a+?\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","^a+?\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","^a+?\\w",[]))),
-?line <<":aa">> = iolist_to_binary(join(re:split("aaaa","^a+?\\w",[trim]))),
-?line <<":aa">> = iolist_to_binary(join(re:split("aaaa","^a+?\\w",[{parts,
- 2}]))),
-?line <<":aa">> = iolist_to_binary(join(re:split("aaaa","^a+?\\w",[]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a+?\\w",[trim]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a+?\\w",[{parts,
- 2}]))),
-?line <<":+">> = iolist_to_binary(join(re:split("aa+","^a+?\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1234567890","^\\d{8}\\w{2,}",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234567890","^\\d{8}\\w{2,}",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234567890","^\\d{8}\\w{2,}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12345678ab","^\\d{8}\\w{2,}",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12345678ab","^\\d{8}\\w{2,}",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12345678ab","^\\d{8}\\w{2,}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12345678__","^\\d{8}\\w{2,}",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12345678__","^\\d{8}\\w{2,}",[{parts,
+ <<":+">> = iolist_to_binary(join(re:split("aa+","^a+?\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("1234567890","^\\d{8}\\w{2,}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("1234567890","^\\d{8}\\w{2,}",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("1234567890","^\\d{8}\\w{2,}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12345678ab","^\\d{8}\\w{2,}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12345678ab","^\\d{8}\\w{2,}",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("12345678ab","^\\d{8}\\w{2,}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12345678__","^\\d{8}\\w{2,}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12345678__","^\\d{8}\\w{2,}",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("12345678__","^\\d{8}\\w{2,}",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8}\\w{2,}",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8}\\w{2,}",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12345678__","^\\d{8}\\w{2,}",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8}\\w{2,}",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8}\\w{2,}",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8}\\w{2,}",[]))),
-?line <<"1234567">> = iolist_to_binary(join(re:split("1234567","^\\d{8}\\w{2,}",[trim]))),
-?line <<"1234567">> = iolist_to_binary(join(re:split("1234567","^\\d{8}\\w{2,}",[{parts,
- 2}]))),
-?line <<"1234567">> = iolist_to_binary(join(re:split("1234567","^\\d{8}\\w{2,}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}$",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8}\\w{2,}",[]))),
+ <<"1234567">> = iolist_to_binary(join(re:split("1234567","^\\d{8}\\w{2,}",[trim]))),
+ <<"1234567">> = iolist_to_binary(join(re:split("1234567","^\\d{8}\\w{2,}",[{parts,
+ 2}]))),
+ <<"1234567">> = iolist_to_binary(join(re:split("1234567","^\\d{8}\\w{2,}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[aeiou\\d]{4,5}$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[aeiou\\d]{4,5}$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[aeiou\\d]{4,5}$",[]))),
+ <<"123456">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}$",[trim]))),
+ <<"123456">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[aeiou\\d]{4,5}$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[aeiou\\d]{4,5}$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[aeiou\\d]{4,5}$",[]))),
-?line <<"123456">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}$",[trim]))),
-?line <<"123456">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}$",[{parts,
- 2}]))),
-?line <<"123456">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}?",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}?",[{parts,
+ <<"123456">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}?",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}?",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}?",[]))),
+ <<"">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}?",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}?",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}?",[]))),
+ <<":5">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}?",[trim]))),
+ <<":5">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}?",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("uoie","^[aeiou\\d]{4,5}?",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}?",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}?",[{parts,
+ <<":5">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}?",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}?",[trim]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}?",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^[aeiou\\d]{4,5}?",[]))),
-?line <<":5">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}?",[trim]))),
-?line <<":5">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}?",[{parts,
- 2}]))),
-?line <<":5">> = iolist_to_binary(join(re:split("12345","^[aeiou\\d]{4,5}?",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}?",[trim]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}?",[{parts,
+ <<":a">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}?",[]))),
+ <<":56">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}?",[trim]))),
+ <<":56">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}?",[{parts,
2}]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaa","^[aeiou\\d]{4,5}?",[]))),
-?line <<":56">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}?",[trim]))),
-?line <<":56">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}?",[{parts,
- 2}]))),
-?line <<":56">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}?",[]))),
-?line <<":abc:abc">> = iolist_to_binary(join(re:split("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
-?line <<":abc:abc:">> = iolist_to_binary(join(re:split("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
- 2}]))),
-?line <<":abc:abc:">> = iolist_to_binary(join(re:split("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
-?line <<":def:def">> = iolist_to_binary(join(re:split("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
-?line <<":def:def:">> = iolist_to_binary(join(re:split("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
- 2}]))),
-?line <<":def:def:">> = iolist_to_binary(join(re:split("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
-?line <<"abc=defdef">> = iolist_to_binary(join(re:split("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
-?line <<"abc=defdef">> = iolist_to_binary(join(re:split("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
+ <<":56">> = iolist_to_binary(join(re:split("123456","^[aeiou\\d]{4,5}?",[]))),
+ <<":abc:abc">> = iolist_to_binary(join(re:split("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
+ <<":abc:abc:">> = iolist_to_binary(join(re:split("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
+ 2}]))),
+ <<":abc:abc:">> = iolist_to_binary(join(re:split("abc=abcabc","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
+ <<":def:def">> = iolist_to_binary(join(re:split("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
+ <<":def:def:">> = iolist_to_binary(join(re:split("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
+ 2}]))),
+ <<":def:def:">> = iolist_to_binary(join(re:split("def=defdefdef","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
2}]))),
-?line <<"abc=defdef">> = iolist_to_binary(join(re:split("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:cd">> = iolist_to_binary(join(re:split("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[trim]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[{parts,
- 2}]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:cd">> = iolist_to_binary(join(re:split("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[trim]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[{parts,
- 2}]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[]))),
-?line <<":cataract:aract:ract::3">> = iolist_to_binary(join(re:split("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[trim]))),
-?line <<":cataract:aract:ract::3:">> = iolist_to_binary(join(re:split("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[{parts,
- 2}]))),
-?line <<":cataract:aract:ract::3:">> = iolist_to_binary(join(re:split("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[]))),
-?line <<":catatonic:atonic:tonic::3">> = iolist_to_binary(join(re:split("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[trim]))),
-?line <<":catatonic:atonic:tonic::3:">> = iolist_to_binary(join(re:split("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[{parts,
- 2}]))),
-?line <<":catatonic:atonic:tonic::3:">> = iolist_to_binary(join(re:split("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[]))),
-?line <<":caterpillar:erpillar:::3">> = iolist_to_binary(join(re:split("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[trim]))),
-?line <<":caterpillar:erpillar:::3:">> = iolist_to_binary(join(re:split("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[{parts,
- 2}]))),
-?line <<":caterpillar:erpillar:::3:">> = iolist_to_binary(join(re:split("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[]))),
-?line <<":abcd::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]",[trim]))),
-?line <<":abcd::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]",[{parts,
- 2}]))),
-?line <<":abcd::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]",[]))),
-?line <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
-?line <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
- 2}]))),
-?line <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
-?line <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
-?line <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
- 2}]))),
-?line <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
-?line <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(join(re:split("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
-?line <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(join(re:split("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
- 2}]))),
-?line <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(join(re:split("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
+ <<"abc=defdef">> = iolist_to_binary(join(re:split("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z",[trim]))),
+ <<"abc=defdef">> = iolist_to_binary(join(re:split("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z",[{parts,
+ 2}]))),
+ <<"abc=defdef">> = iolist_to_binary(join(re:split("abc=defdef","\\A(abc|def)=(\\1){2,3}\\Z",[]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:cd">> = iolist_to_binary(join(re:split("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[trim]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[{parts,
+ 2}]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:cd">> = iolist_to_binary(join(re:split("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[trim]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[{parts,
+ 2}]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:cd:">> = iolist_to_binary(join(re:split("abcdefghijkkkkcda2","^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$",[]))),
+ <<":cataract:aract:ract::3">> = iolist_to_binary(join(re:split("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[trim]))),
+ <<":cataract:aract:ract::3:">> = iolist_to_binary(join(re:split("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[{parts,
+ 2}]))),
+ <<":cataract:aract:ract::3:">> = iolist_to_binary(join(re:split("cataract cataract23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[]))),
+ <<":catatonic:atonic:tonic::3">> = iolist_to_binary(join(re:split("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[trim]))),
+ <<":catatonic:atonic:tonic::3:">> = iolist_to_binary(join(re:split("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[{parts,
+ 2}]))),
+ <<":catatonic:atonic:tonic::3:">> = iolist_to_binary(join(re:split("catatonic catatonic23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[]))),
+ <<":caterpillar:erpillar:::3">> = iolist_to_binary(join(re:split("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[trim]))),
+ <<":caterpillar:erpillar:::3:">> = iolist_to_binary(join(re:split("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[{parts,
+ 2}]))),
+ <<":caterpillar:erpillar:::3:">> = iolist_to_binary(join(re:split("caterpillar caterpillar23","(cat(a(ract|tonic)|erpillar)) \\1()2(3)",[]))),
+ <<":abcd::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]",[trim]))),
+ <<":abcd::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]",[{parts,
+ 2}]))),
+ <<":abcd::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]",[]))),
+ <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
+ <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
+ 2}]))),
+ <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
+ <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
+ <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
+ 2}]))),
+ <<":Sep ::02 1997">> = iolist_to_binary(join(re:split("From abcd Mon Sep 1 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
+ <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(join(re:split("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[trim]))),
+ <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(join(re:split("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[{parts,
+ 2}]))),
+ <<"From abcd Sep 01 12:33:02 1997">> = iolist_to_binary(join(re:split("From abcd Sep 01 12:33:02 1997","^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12
34","^12.34",[dotall,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12
+ <<":">> = iolist_to_binary(join(re:split("12
34","^12.34",[dotall,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12
+ <<":">> = iolist_to_binary(join(re:split("12
34","^12.34",[dotall]))),
-?line <<"">> = iolist_to_binary(join(re:split("12 34","^12.34",[dotall,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12 34","^12.34",[dotall,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12 34","^12.34",[dotall]))),
-?line <<"the quick : fox">> = iolist_to_binary(join(re:split("the quick brown fox","\\w+(?=\\t)",[trim]))),
-?line <<"the quick : fox">> = iolist_to_binary(join(re:split("the quick brown fox","\\w+(?=\\t)",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("12 34","^12.34",[dotall,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12 34","^12.34",[dotall,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("12 34","^12.34",[dotall]))),
+ <<"the quick : fox">> = iolist_to_binary(join(re:split("the quick brown fox","\\w+(?=\\t)",[trim]))),
+ <<"the quick : fox">> = iolist_to_binary(join(re:split("the quick brown fox","\\w+(?=\\t)",[{parts,
2}]))),
-?line <<"the quick : fox">> = iolist_to_binary(join(re:split("the quick brown fox","\\w+(?=\\t)",[]))),
-?line <<"foobar is :lish see?">> = iolist_to_binary(join(re:split("foobar is foolish see?","foo(?!bar)(.*)",[trim]))),
-?line <<"foobar is :lish see?:">> = iolist_to_binary(join(re:split("foobar is foolish see?","foo(?!bar)(.*)",[{parts,
- 2}]))),
-?line <<"foobar is :lish see?:">> = iolist_to_binary(join(re:split("foobar is foolish see?","foo(?!bar)(.*)",[]))),
-?line <<"foobar c: etc">> = iolist_to_binary(join(re:split("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
-?line <<"foobar c: etc:">> = iolist_to_binary(join(re:split("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
- 2}]))),
-?line <<"foobar c: etc:">> = iolist_to_binary(join(re:split("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
-?line <<":rel">> = iolist_to_binary(join(re:split("barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
-?line <<":rel:">> = iolist_to_binary(join(re:split("barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
+ <<"the quick : fox">> = iolist_to_binary(join(re:split("the quick brown fox","\\w+(?=\\t)",[]))),
+ <<"foobar is :lish see?">> = iolist_to_binary(join(re:split("foobar is foolish see?","foo(?!bar)(.*)",[trim]))),
+ <<"foobar is :lish see?:">> = iolist_to_binary(join(re:split("foobar is foolish see?","foo(?!bar)(.*)",[{parts,
2}]))),
-?line <<":rel:">> = iolist_to_binary(join(re:split("barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
-?line <<":rel">> = iolist_to_binary(join(re:split("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
-?line <<":rel:">> = iolist_to_binary(join(re:split("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
+ <<"foobar is :lish see?:">> = iolist_to_binary(join(re:split("foobar is foolish see?","foo(?!bar)(.*)",[]))),
+ <<"foobar c: etc">> = iolist_to_binary(join(re:split("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
+ <<"foobar c: etc:">> = iolist_to_binary(join(re:split("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
+ 2}]))),
+ <<"foobar c: etc:">> = iolist_to_binary(join(re:split("foobar crowbar etc","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
+ <<":rel">> = iolist_to_binary(join(re:split("barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
+ <<":rel:">> = iolist_to_binary(join(re:split("barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
+ 2}]))),
+ <<":rel:">> = iolist_to_binary(join(re:split("barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
+ <<":rel">> = iolist_to_binary(join(re:split("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
+ <<":rel:">> = iolist_to_binary(join(re:split("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
+ 2}]))),
+ <<":rel:">> = iolist_to_binary(join(re:split("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
+ <<":rel">> = iolist_to_binary(join(re:split("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
+ <<":rel:">> = iolist_to_binary(join(re:split("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
2}]))),
-?line <<":rel:">> = iolist_to_binary(join(re:split("2barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
-?line <<":rel">> = iolist_to_binary(join(re:split("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[trim]))),
-?line <<":rel:">> = iolist_to_binary(join(re:split("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[{parts,
- 2}]))),
-?line <<":rel:">> = iolist_to_binary(join(re:split("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
-?line <<":abc:456">> = iolist_to_binary(join(re:split("abc456","^(\\D*)(?=\\d)(?!123)",[trim]))),
-?line <<":abc:456">> = iolist_to_binary(join(re:split("abc456","^(\\D*)(?=\\d)(?!123)",[{parts,
- 2}]))),
-?line <<":abc:456">> = iolist_to_binary(join(re:split("abc456","^(\\D*)(?=\\d)(?!123)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[]))),
-?line <<"abc123">> = iolist_to_binary(join(re:split("abc123","^(\\D*)(?=\\d)(?!123)",[trim]))),
-?line <<"abc123">> = iolist_to_binary(join(re:split("abc123","^(\\D*)(?=\\d)(?!123)",[{parts,
- 2}]))),
-?line <<"abc123">> = iolist_to_binary(join(re:split("abc123","^(\\D*)(?=\\d)(?!123)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1234","^1234(?# test newlines
+ <<":rel:">> = iolist_to_binary(join(re:split("A barrel","(?:(?!foo)...|^.{0,2})bar(.*)",[]))),
+ <<":abc:456">> = iolist_to_binary(join(re:split("abc456","^(\\D*)(?=\\d)(?!123)",[trim]))),
+ <<":abc:456">> = iolist_to_binary(join(re:split("abc456","^(\\D*)(?=\\d)(?!123)",[{parts,
+ 2}]))),
+ <<":abc:456">> = iolist_to_binary(join(re:split("abc456","^(\\D*)(?=\\d)(?!123)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[]))),
+ <<"abc123">> = iolist_to_binary(join(re:split("abc123","^(\\D*)(?=\\d)(?!123)",[trim]))),
+ <<"abc123">> = iolist_to_binary(join(re:split("abc123","^(\\D*)(?=\\d)(?!123)",[{parts,
+ 2}]))),
+ <<"abc123">> = iolist_to_binary(join(re:split("abc123","^(\\D*)(?=\\d)(?!123)",[]))),
+ ok.
+run3() ->
+ <<"">> = iolist_to_binary(join(re:split("1234","^1234(?# test newlines
inside)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^1234(?# test newlines
+ <<":">> = iolist_to_binary(join(re:split("1234","^1234(?# test newlines
inside)",[{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^1234(?# test newlines
+ <<":">> = iolist_to_binary(join(re:split("1234","^1234(?# test newlines
inside)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1234","^1234 #comment in extended re
+ <<"">> = iolist_to_binary(join(re:split("1234","^1234 #comment in extended re
",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^1234 #comment in extended re
+ <<":">> = iolist_to_binary(join(re:split("1234","^1234 #comment in extended re
",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1234","^1234 #comment in extended re
+ <<":">> = iolist_to_binary(join(re:split("1234","^1234 #comment in extended re
",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","#rhubarb
+ <<"">> = iolist_to_binary(join(re:split("abcd","#rhubarb
abcd",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","#rhubarb
+ <<":">> = iolist_to_binary(join(re:split("abcd","#rhubarb
abcd",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","#rhubarb
+ <<":">> = iolist_to_binary(join(re:split("abcd","#rhubarb
abcd",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","^abcd#rhubarb",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","^abcd#rhubarb",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","^abcd#rhubarb",[extended]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aaab","^(a)\\1{2,3}(.)",[trim]))),
-?line <<":a:b:">> = iolist_to_binary(join(re:split("aaab","^(a)\\1{2,3}(.)",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("abcd","^abcd#rhubarb",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","^abcd#rhubarb",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","^abcd#rhubarb",[extended]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aaab","^(a)\\1{2,3}(.)",[trim]))),
+ <<":a:b:">> = iolist_to_binary(join(re:split("aaab","^(a)\\1{2,3}(.)",[{parts,
+ 2}]))),
+ <<":a:b:">> = iolist_to_binary(join(re:split("aaab","^(a)\\1{2,3}(.)",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aaaab","^(a)\\1{2,3}(.)",[trim]))),
+ <<":a:b:">> = iolist_to_binary(join(re:split("aaaab","^(a)\\1{2,3}(.)",[{parts,
2}]))),
-?line <<":a:b:">> = iolist_to_binary(join(re:split("aaab","^(a)\\1{2,3}(.)",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aaaab","^(a)\\1{2,3}(.)",[trim]))),
-?line <<":a:b:">> = iolist_to_binary(join(re:split("aaaab","^(a)\\1{2,3}(.)",[{parts,
+ <<":a:b:">> = iolist_to_binary(join(re:split("aaaab","^(a)\\1{2,3}(.)",[]))),
+ <<":a:a:b">> = iolist_to_binary(join(re:split("aaaaab","^(a)\\1{2,3}(.)",[trim]))),
+ <<":a:a:b">> = iolist_to_binary(join(re:split("aaaaab","^(a)\\1{2,3}(.)",[{parts,
2}]))),
-?line <<":a:b:">> = iolist_to_binary(join(re:split("aaaab","^(a)\\1{2,3}(.)",[]))),
-?line <<":a:a:b">> = iolist_to_binary(join(re:split("aaaaab","^(a)\\1{2,3}(.)",[trim]))),
-?line <<":a:a:b">> = iolist_to_binary(join(re:split("aaaaab","^(a)\\1{2,3}(.)",[{parts,
+ <<":a:a:b">> = iolist_to_binary(join(re:split("aaaaab","^(a)\\1{2,3}(.)",[]))),
+ <<":a:a:ab">> = iolist_to_binary(join(re:split("aaaaaab","^(a)\\1{2,3}(.)",[trim]))),
+ <<":a:a:ab">> = iolist_to_binary(join(re:split("aaaaaab","^(a)\\1{2,3}(.)",[{parts,
2}]))),
-?line <<":a:a:b">> = iolist_to_binary(join(re:split("aaaaab","^(a)\\1{2,3}(.)",[]))),
-?line <<":a:a:ab">> = iolist_to_binary(join(re:split("aaaaaab","^(a)\\1{2,3}(.)",[trim]))),
-?line <<":a:a:ab">> = iolist_to_binary(join(re:split("aaaaaab","^(a)\\1{2,3}(.)",[{parts,
- 2}]))),
-?line <<":a:a:ab">> = iolist_to_binary(join(re:split("aaaaaab","^(a)\\1{2,3}(.)",[]))),
-?line <<"the ">> = iolist_to_binary(join(re:split("the abc","(?!^)abc",[trim]))),
-?line <<"the :">> = iolist_to_binary(join(re:split("the abc","(?!^)abc",[{parts,
- 2}]))),
-?line <<"the :">> = iolist_to_binary(join(re:split("the abc","(?!^)abc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?!^)abc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?!^)abc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?!^)abc",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(?!^)abc",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(?!^)abc",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(?!^)abc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","(?=^)abc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","(?=^)abc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","(?=^)abc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=^)abc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=^)abc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=^)abc",[]))),
-?line <<"the abc">> = iolist_to_binary(join(re:split("the abc","(?=^)abc",[trim]))),
-?line <<"the abc">> = iolist_to_binary(join(re:split("the abc","(?=^)abc",[{parts,
- 2}]))),
-?line <<"the abc">> = iolist_to_binary(join(re:split("the abc","(?=^)abc",[]))),
-?line <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*|b)",[trim]))),
-?line <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*|b)",[{parts,
+ <<":a:a:ab">> = iolist_to_binary(join(re:split("aaaaaab","^(a)\\1{2,3}(.)",[]))),
+ <<"the ">> = iolist_to_binary(join(re:split("the abc","(?!^)abc",[trim]))),
+ <<"the :">> = iolist_to_binary(join(re:split("the abc","(?!^)abc",[{parts,
+ 2}]))),
+ <<"the :">> = iolist_to_binary(join(re:split("the abc","(?!^)abc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?!^)abc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?!^)abc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?!^)abc",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?!^)abc",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?!^)abc",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?!^)abc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","(?=^)abc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?=^)abc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?=^)abc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=^)abc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=^)abc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=^)abc",[]))),
+ <<"the abc">> = iolist_to_binary(join(re:split("the abc","(?=^)abc",[trim]))),
+ <<"the abc">> = iolist_to_binary(join(re:split("the abc","(?=^)abc",[{parts,
+ 2}]))),
+ <<"the abc">> = iolist_to_binary(join(re:split("the abc","(?=^)abc",[]))),
+ <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*|b)",[trim]))),
+ <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*|b)",[{parts,
+ 2}]))),
+ <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*|b)",[]))),
+ <<":abbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*|b)",[trim]))),
+ <<":abbbbb:">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*|b)",[{parts,
2}]))),
-?line <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*|b)",[]))),
-?line <<":abbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*|b)",[trim]))),
-?line <<":abbbbb:">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*|b)",[{parts,
- 2}]))),
-?line <<":abbbbb:">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*|b)",[]))),
-?line <<":a:bbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*?|b)",[trim]))),
-?line <<":a:bbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*?|b)",[{parts,
- 2}]))),
-?line <<":a:bbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*?|b)",[]))),
-?line <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*?|b)",[trim]))),
-?line <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*?|b)",[{parts,
+ <<":abbbbb:">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*|b)",[]))),
+ <<":a:bbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*?|b)",[trim]))),
+ <<":a:bbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*?|b)",[{parts,
2}]))),
-?line <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*?|b)",[]))),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
+ <<":a:bbbbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}?(ab*?|b)",[]))),
+ <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*?|b)",[trim]))),
+ <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*?|b)",[{parts,
+ 2}]))),
+ <<":b:bbb">> = iolist_to_binary(join(re:split("aabbbbb","^[ab]{1,3}(ab*?|b)",[]))),
+ <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1574,7 +1628,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
+ <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1768,7 +1822,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
+ <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -1961,7 +2015,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>"," (?: [\\040\\t] | \\(
+ <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2154,7 +2208,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>"," (?: [\\040\\t] | \\(
+ <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2348,7 +2402,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>"," (?: [\\040\\t] | \\(
+ <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2541,7 +2595,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"user.ain">> = iolist_to_binary(join(re:split("user.ain"," (?: [\\040\\t] | \\(
+ <<"user.ain">> = iolist_to_binary(join(re:split("user.ain"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2734,7 +2788,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"user.ain">> = iolist_to_binary(join(re:split("user.ain"," (?: [\\040\\t] | \\(
+ <<"user.ain">> = iolist_to_binary(join(re:split("user.ain"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -2928,7 +2982,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"user.ain">> = iolist_to_binary(join(re:split("user.ain"," (?: [\\040\\t] | \\(
+ <<"user.ain">> = iolist_to_binary(join(re:split("user.ain"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3121,7 +3175,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3314,7 +3368,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3508,7 +3562,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3701,7 +3755,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -3894,7 +3948,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -4088,7 +4142,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -4281,7 +4335,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -4474,7 +4528,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -4668,7 +4722,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -4861,7 +4915,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where"," (?: [\\040\\t] | \\(
+ <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -5054,7 +5108,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where"," (?: [\\040\\t] | \\(
+ <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -5248,7 +5302,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where"," (?: [\\040\\t] | \\(
+ <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -5441,7 +5495,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," (?: [\\040\\t] | \\(
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -5634,7 +5688,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," (?: [\\040\\t] | \\(
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -5828,7 +5882,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," (?: [\\040\\t] | \\(
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -6021,7 +6075,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox"," (?: [\\040\\t] | \\(
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -6214,7 +6268,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,trim]))),
-?line <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox"," (?: [\\040\\t] | \\(
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -6408,7 +6462,7 @@ run() ->
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended,
{parts,2}]))),
-?line <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox"," (?: [\\040\\t] | \\(
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox"," (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional leading comment
(?: (?:
@@ -6601,7 +6655,7 @@ run() ->
) (?: [\\040\\t] | \\(
(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*
\\) )* # optional trailing comment",[extended]))),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
+ <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -7182,7 +7236,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
+ <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -7763,7 +7817,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
+ <<"Alan Other <user.ain>">> = iolist_to_binary(join(re:split("Alan Other <user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -8344,7 +8398,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>","[\\040\\t]* # Nab whitespace.
+ <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -8925,7 +8979,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>","[\\040\\t]* # Nab whitespace.
+ <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -9506,7 +9560,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>","[\\040\\t]* # Nab whitespace.
+ <<"<user.ain>">> = iolist_to_binary(join(re:split("<user.ain>","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -10087,7 +10141,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"user.ain">> = iolist_to_binary(join(re:split("user.ain","[\\040\\t]* # Nab whitespace.
+ <<"user.ain">> = iolist_to_binary(join(re:split("user.ain","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -10668,7 +10722,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"user.ain">> = iolist_to_binary(join(re:split("user.ain","[\\040\\t]* # Nab whitespace.
+ <<"user.ain">> = iolist_to_binary(join(re:split("user.ain","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -11249,7 +11303,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"user.ain">> = iolist_to_binary(join(re:split("user.ain","[\\040\\t]* # Nab whitespace.
+ <<"user.ain">> = iolist_to_binary(join(re:split("user.ain","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -11830,7 +11884,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -12411,7 +12465,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -12992,7 +13046,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+ <<"\"A. Other\" <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("\"A. Other\" <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -13573,7 +13627,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -14154,7 +14208,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -14735,7 +14789,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
+ <<"A. Other <user.1234.ain> (a comment)">> = iolist_to_binary(join(re:split("A. Other <user.1234.ain> (a comment)","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -15316,7 +15370,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -15897,7 +15951,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -16478,7 +16532,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
+ <<"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay">> = iolist_to_binary(join(re:split("\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"-re.lay","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -17059,7 +17113,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
+ <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -17640,7 +17694,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
+ <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -18221,7 +18275,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
+ <<"A missing angle <user.where">> = iolist_to_binary(join(re:split("A missing angle <user.where","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -18802,7 +18856,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\040\\t]* # Nab whitespace.
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -19383,7 +19437,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\040\\t]* # Nab whitespace.
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -19964,7 +20018,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\040\\t]* # Nab whitespace.
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -20545,7 +20599,7 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","[\\040\\t]* # Nab whitespace.
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -21126,7 +21180,7 @@ run() ->
> # >
# name and address
)",[extended,trim]))),
-?line <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","[\\040\\t]* # Nab whitespace.
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -21707,7 +21761,7 @@ run() ->
> # >
# name and address
)",[extended,{parts,2}]))),
-?line <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","[\\040\\t]* # Nab whitespace.
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","[\\040\\t]* # Nab whitespace.
(?:
\\( # (
[^\\\\\\x80-\\xff\\n\\015()] * # normal*
@@ -22288,5709 +22342,5763 @@ run() ->
> # >
# name and address
)",[extended]))),
-?line <<"abcdefpqrxyz0AB">> = iolist_to_binary(join(re:split("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB",[trim]))),
-?line <<"abcdefpqrxyz0AB">> = iolist_to_binary(join(re:split("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB",[{parts,
- 2}]))),
-?line <<"abcdefpqrxyz0AB">> = iolist_to_binary(join(re:split("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB",[]))),
-?line <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(join(re:split("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB",[trim]))),
-?line <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(join(re:split("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB",[{parts,
- 2}]))),
-?line <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(join(re:split("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB",[]))),
-?line <<"abc efpqr0xyz00AB">> = iolist_to_binary(join(re:split("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[trim]))),
-?line <<"abc efpqr0xyz00AB">> = iolist_to_binary(join(re:split("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[{parts,
- 2}]))),
-?line <<"abc efpqr0xyz00AB">> = iolist_to_binary(join(re:split("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[]))),
-?line <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(join(re:split("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[trim]))),
-?line <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(join(re:split("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[{parts,
- 2}]))),
-?line <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(join(re:split("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[]))),
-?line <<"A">> = iolist_to_binary(join(re:split("A","^[\\000-\\037]",[trim]))),
-?line <<"A">> = iolist_to_binary(join(re:split("A","^[\\000-\\037]",[{parts,
- 2}]))),
-?line <<"A">> = iolist_to_binary(join(re:split("A","^[\\000-\\037]",[]))),
-?line <<":B">> = iolist_to_binary(join(re:split("B","^[\\000-\\037]",[trim]))),
-?line <<":B">> = iolist_to_binary(join(re:split("B","^[\\000-\\037]",[{parts,
- 2}]))),
-?line <<":B">> = iolist_to_binary(join(re:split("B","^[\\000-\\037]",[]))),
-?line <<":C">> = iolist_to_binary(join(re:split("C","^[\\000-\\037]",[trim]))),
-?line <<":C">> = iolist_to_binary(join(re:split("C","^[\\000-\\037]",[{parts,
- 2}]))),
-?line <<":C">> = iolist_to_binary(join(re:split("C","^[\\000-\\037]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("","\\0*",[trim]))),
-?line <<"">> = iolist_to_binary(join(re:split("","\\0*",[{parts,
- 2}]))),
-?line <<"">> = iolist_to_binary(join(re:split("","\\0*",[]))),
-?line <<"The AZ">> = iolist_to_binary(join(re:split("The AZ","A\\x0{2,3}Z",[trim]))),
-?line <<"The AZ">> = iolist_to_binary(join(re:split("The AZ","A\\x0{2,3}Z",[{parts,
- 2}]))),
-?line <<"The AZ">> = iolist_to_binary(join(re:split("The AZ","A\\x0{2,3}Z",[]))),
-?line <<"An AZ">> = iolist_to_binary(join(re:split("An AZ","A\\x0{2,3}Z",[trim]))),
-?line <<"An AZ">> = iolist_to_binary(join(re:split("An AZ","A\\x0{2,3}Z",[{parts,
+ <<"abcdefpqrxyz0AB">> = iolist_to_binary(join(re:split("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB",[trim]))),
+ <<"abcdefpqrxyz0AB">> = iolist_to_binary(join(re:split("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB",[{parts,
+ 2}]))),
+ <<"abcdefpqrxyz0AB">> = iolist_to_binary(join(re:split("abcdefpqrxyz0AB","abc\\0def\\00pqr\\000xyz\\0000AB",[]))),
+ <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(join(re:split("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB",[trim]))),
+ <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(join(re:split("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB",[{parts,
+ 2}]))),
+ <<"abc456 abcdefpqrxyz0ABCDE">> = iolist_to_binary(join(re:split("abc456 abcdefpqrxyz0ABCDE","abc\\0def\\00pqr\\000xyz\\0000AB",[]))),
+ <<"abc efpqr0xyz00AB">> = iolist_to_binary(join(re:split("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[trim]))),
+ <<"abc efpqr0xyz00AB">> = iolist_to_binary(join(re:split("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[{parts,
+ 2}]))),
+ <<"abc efpqr0xyz00AB">> = iolist_to_binary(join(re:split("abc efpqr0xyz00AB","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[]))),
+ <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(join(re:split("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[trim]))),
+ <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(join(re:split("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[{parts,
+ 2}]))),
+ <<"abc456 abc efpqr0xyz00ABCDE">> = iolist_to_binary(join(re:split("abc456 abc efpqr0xyz00ABCDE","abc\\x0def\\x00pqr\\x000xyz\\x0000AB",[]))),
+ <<"A">> = iolist_to_binary(join(re:split("A","^[\\000-\\037]",[trim]))),
+ <<"A">> = iolist_to_binary(join(re:split("A","^[\\000-\\037]",[{parts,
+ 2}]))),
+ <<"A">> = iolist_to_binary(join(re:split("A","^[\\000-\\037]",[]))),
+ <<":B">> = iolist_to_binary(join(re:split("B","^[\\000-\\037]",[trim]))),
+ <<":B">> = iolist_to_binary(join(re:split("B","^[\\000-\\037]",[{parts,
+ 2}]))),
+ <<":B">> = iolist_to_binary(join(re:split("B","^[\\000-\\037]",[]))),
+ <<":C">> = iolist_to_binary(join(re:split("C","^[\\000-\\037]",[trim]))),
+ <<":C">> = iolist_to_binary(join(re:split("C","^[\\000-\\037]",[{parts,
+ 2}]))),
+ <<":C">> = iolist_to_binary(join(re:split("C","^[\\000-\\037]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("","\\0*",[trim]))),
+ <<"">> = iolist_to_binary(join(re:split("","\\0*",[{parts,
+ 2}]))),
+ <<"">> = iolist_to_binary(join(re:split("","\\0*",[]))),
+ <<"The AZ">> = iolist_to_binary(join(re:split("The AZ","A\\x0{2,3}Z",[trim]))),
+ <<"The AZ">> = iolist_to_binary(join(re:split("The AZ","A\\x0{2,3}Z",[{parts,
+ 2}]))),
+ <<"The AZ">> = iolist_to_binary(join(re:split("The AZ","A\\x0{2,3}Z",[]))),
+ <<"An AZ">> = iolist_to_binary(join(re:split("An AZ","A\\x0{2,3}Z",[trim]))),
+ <<"An AZ">> = iolist_to_binary(join(re:split("An AZ","A\\x0{2,3}Z",[{parts,
+ 2}]))),
+ <<"An AZ">> = iolist_to_binary(join(re:split("An AZ","A\\x0{2,3}Z",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","A\\x0{2,3}Z",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","A\\x0{2,3}Z",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","A\\x0{2,3}Z",[]))),
+ <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[trim]))),
+ <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[{parts,
+ 2}]))),
+ <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[]))),
+ <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[trim]))),
+ <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[{parts,
+ 2}]))),
+ <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[]))),
+ <<":cow:bell">> = iolist_to_binary(join(re:split("cowcowbell","^(cow|)\\1(bell)",[trim]))),
+ <<":cow:bell:">> = iolist_to_binary(join(re:split("cowcowbell","^(cow|)\\1(bell)",[{parts,
+ 2}]))),
+ <<":cow:bell:">> = iolist_to_binary(join(re:split("cowcowbell","^(cow|)\\1(bell)",[]))),
+ <<"::bell">> = iolist_to_binary(join(re:split("bell","^(cow|)\\1(bell)",[trim]))),
+ <<"::bell:">> = iolist_to_binary(join(re:split("bell","^(cow|)\\1(bell)",[{parts,
2}]))),
-?line <<"An AZ">> = iolist_to_binary(join(re:split("An AZ","A\\x0{2,3}Z",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","A\\x0{2,3}Z",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","A\\x0{2,3}Z",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","A\\x0{2,3}Z",[]))),
-?line <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[trim]))),
-?line <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[{parts,
- 2}]))),
-?line <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[]))),
-?line <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[trim]))),
-?line <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[{parts,
- 2}]))),
-?line <<"AZ">> = iolist_to_binary(join(re:split("AZ","A\\x0{2,3}Z",[]))),
-?line <<":cow:bell">> = iolist_to_binary(join(re:split("cowcowbell","^(cow|)\\1(bell)",[trim]))),
-?line <<":cow:bell:">> = iolist_to_binary(join(re:split("cowcowbell","^(cow|)\\1(bell)",[{parts,
+ <<"::bell:">> = iolist_to_binary(join(re:split("bell","^(cow|)\\1(bell)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(cow|)\\1(bell)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(cow|)\\1(bell)",[{parts,
2}]))),
-?line <<":cow:bell:">> = iolist_to_binary(join(re:split("cowcowbell","^(cow|)\\1(bell)",[]))),
-?line <<"::bell">> = iolist_to_binary(join(re:split("bell","^(cow|)\\1(bell)",[trim]))),
-?line <<"::bell:">> = iolist_to_binary(join(re:split("bell","^(cow|)\\1(bell)",[{parts,
- 2}]))),
-?line <<"::bell:">> = iolist_to_binary(join(re:split("bell","^(cow|)\\1(bell)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(cow|)\\1(bell)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(cow|)\\1(bell)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(cow|)\\1(bell)",[]))),
-?line <<"cowbell">> = iolist_to_binary(join(re:split("cowbell","^(cow|)\\1(bell)",[trim]))),
-?line <<"cowbell">> = iolist_to_binary(join(re:split("cowbell","^(cow|)\\1(bell)",[{parts,
- 2}]))),
-?line <<"cowbell">> = iolist_to_binary(join(re:split("cowbell","^(cow|)\\1(bell)",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
- 2}]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
- 2}]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(cow|)\\1(bell)",[]))),
+ <<"cowbell">> = iolist_to_binary(join(re:split("cowbell","^(cow|)\\1(bell)",[trim]))),
+ <<"cowbell">> = iolist_to_binary(join(re:split("cowbell","^(cow|)\\1(bell)",[{parts,
+ 2}]))),
+ <<"cowbell">> = iolist_to_binary(join(re:split("cowbell","^(cow|)\\1(bell)",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
+ 2}]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
+ 2}]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("
abc","^\\s",[trim]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("
+ <<":abc">> = iolist_to_binary(join(re:split("
abc","^\\s",[{parts,2}]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("
+ <<":abc">> = iolist_to_binary(join(re:split("
abc","^\\s",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
- 2}]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
- 2}]))),
-?line <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\s",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\s",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\s",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^\\s",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^\\s",[{parts,
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^\\s",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^a b
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[{parts,
+ 2}]))),
+ <<":abc">> = iolist_to_binary(join(re:split(" abc","^\\s",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\s",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\s",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\s",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^\\s",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^\\s",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^\\s",[]))),
+ ok.
+run4() ->
+ <<"">> = iolist_to_binary(join(re:split("abc","^a b
c",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^a b
+ <<":">> = iolist_to_binary(join(re:split("abc","^a b
c",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^a b
+ <<":">> = iolist_to_binary(join(re:split("abc","^a b
c",[extended]))),
-?line <<":a">> = iolist_to_binary(join(re:split("ab","^(a|)\\1*b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1*b",[{parts,
+ <<":a">> = iolist_to_binary(join(re:split("ab","^(a|)\\1*b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1*b",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1*b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1*b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1*b",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1*b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1*b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1*b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1*b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1*b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1*b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1*b",[]))),
+ <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1*b",[trim]))),
+ <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1*b",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1*b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1*b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1*b",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1*b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1*b",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1*b",[{parts,
+ <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1*b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aab","^(a|)\\1+b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1+b",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1+b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1+b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1+b",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1+b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1+b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1+b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1+b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1+b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1+b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1+b",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1+b",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1+b",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1*b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1*b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1*b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1*b",[]))),
-?line <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1*b",[trim]))),
-?line <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1*b",[{parts,
- 2}]))),
-?line <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1*b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aab","^(a|)\\1+b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1+b",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1+b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1+b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1+b",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1+b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1+b",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1+b",[{parts,
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1+b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("ab","^(a|)\\1?b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1?b",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1+b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1+b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1+b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1+b",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1+b",[trim]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1+b",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1?b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aab","^(a|)\\1?b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1?b",[{parts,
2}]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1+b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("ab","^(a|)\\1?b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1?b",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1?b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1?b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1?b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1?b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1?b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1?b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1?b",[]))),
+ <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1?b",[trim]))),
+ <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1?b",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","^(a|)\\1?b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aab","^(a|)\\1?b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1?b",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aab","^(a|)\\1?b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1?b",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1?b",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1?b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1?b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1?b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1?b",[]))),
-?line <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1?b",[trim]))),
-?line <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1?b",[{parts,
- 2}]))),
-?line <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1?b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2}b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2}b",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2}b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2}b",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2}b",[{parts,
+ <<"acb">> = iolist_to_binary(join(re:split("acb","^(a|)\\1?b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2}b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2}b",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2}b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2}b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2}b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2}b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2}b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2}b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2}b",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2}b",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2}b",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2}b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2}b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2}b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2}b",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2}b",[trim]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2}b",[{parts,
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2}b",[]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2}b",[trim]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2}b",[{parts,
2}]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2}b",[]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2}b",[trim]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2}b",[{parts,
- 2}]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2}b",[]))),
-?line <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2}b",[trim]))),
-?line <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2}b",[{parts,
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2}b",[]))),
+ <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2}b",[trim]))),
+ <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2}b",[{parts,
+ 2}]))),
+ <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2}b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2,3}b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2,3}b",[{parts,
2}]))),
-?line <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2}b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2,3}b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2,3}b",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2,3}b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2,3}b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2,3}b",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaab","^(a|)\\1{2,3}b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2,3}b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2,3}b",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2,3}b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2,3}b",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2,3}b",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a|)\\1{2,3}b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2,3}b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2,3}b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2,3}b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2,3}b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2,3}b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2,3}b",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2,3}b",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2,3}b",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a|)\\1{2,3}b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2,3}b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2,3}b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a|)\\1{2,3}b",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2,3}b",[trim]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2,3}b",[{parts,
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2,3}b",[]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2,3}b",[trim]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2,3}b",[{parts,
2}]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a|)\\1{2,3}b",[]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2,3}b",[trim]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2,3}b",[{parts,
- 2}]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2,3}b",[]))),
-?line <<"aaaaab">> = iolist_to_binary(join(re:split("aaaaab","^(a|)\\1{2,3}b",[trim]))),
-?line <<"aaaaab">> = iolist_to_binary(join(re:split("aaaaab","^(a|)\\1{2,3}b",[{parts,
- 2}]))),
-?line <<"aaaaab">> = iolist_to_binary(join(re:split("aaaaab","^(a|)\\1{2,3}b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbc","ab{1,3}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbc","ab{1,3}bc",[{parts,
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a|)\\1{2,3}b",[]))),
+ <<"aaaaab">> = iolist_to_binary(join(re:split("aaaaab","^(a|)\\1{2,3}b",[trim]))),
+ <<"aaaaab">> = iolist_to_binary(join(re:split("aaaaab","^(a|)\\1{2,3}b",[{parts,
+ 2}]))),
+ <<"aaaaab">> = iolist_to_binary(join(re:split("aaaaab","^(a|)\\1{2,3}b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbc","ab{1,3}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbc","ab{1,3}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab{1,3}bc",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbc","ab{1,3}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbc","ab{1,3}bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab{1,3}bc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{1,3}bc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{1,3}bc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{1,3}bc",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","ab{1,3}bc",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","ab{1,3}bc",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abbbc","ab{1,3}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbc","ab{1,3}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab{1,3}bc",[{parts,
2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","ab{1,3}bc",[]))),
-?line <<"abbbbbc">> = iolist_to_binary(join(re:split("abbbbbc","ab{1,3}bc",[trim]))),
-?line <<"abbbbbc">> = iolist_to_binary(join(re:split("abbbbbc","ab{1,3}bc",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab{1,3}bc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{1,3}bc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{1,3}bc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{1,3}bc",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","ab{1,3}bc",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","ab{1,3}bc",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","ab{1,3}bc",[]))),
+ <<"abbbbbc">> = iolist_to_binary(join(re:split("abbbbbc","ab{1,3}bc",[trim]))),
+ <<"abbbbbc">> = iolist_to_binary(join(re:split("abbbbbc","ab{1,3}bc",[{parts,
+ 2}]))),
+ <<"abbbbbc">> = iolist_to_binary(join(re:split("abbbbbc","ab{1,3}bc",[]))),
+ <<":track1:title:Blah blah blah">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[trim]))),
+ <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[{parts,
+ 2}]))),
+ <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[]))),
+ <<":track1:title:Blah blah blah">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[caseless,
+ trim]))),
+ <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[caseless,
+ {parts,
+ 2}]))),
+ <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[caseless]))),
+ <<":track1:title:Blah blah blah">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)",[caseless,
+ trim]))),
+ <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)",[caseless,
+ {parts,
+ 2}]))),
+ <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-c]+$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-c]+$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-c]+$",[]))),
+ <<"wxy">> = iolist_to_binary(join(re:split("wxy","^[W-c]+$",[trim]))),
+ <<"wxy">> = iolist_to_binary(join(re:split("wxy","^[W-c]+$",[{parts,
+ 2}]))),
+ <<"wxy">> = iolist_to_binary(join(re:split("wxy","^[W-c]+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[caseless,
+ {parts,
2}]))),
-?line <<"abbbbbc">> = iolist_to_binary(join(re:split("abbbbbc","ab{1,3}bc",[]))),
-?line <<":track1:title:Blah blah blah">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[trim]))),
-?line <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[{parts,
- 2}]))),
-?line <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[]))),
-?line <<":track1:title:Blah blah blah">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[caseless,
- trim]))),
-?line <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[caseless,
- {parts,
- 2}]))),
-?line <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[T ]+(.*)",[caseless]))),
-?line <<":track1:title:Blah blah blah">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)",[caseless,
- trim]))),
-?line <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)",[caseless,
- {parts,
- 2}]))),
-?line <<":track1:title:Blah blah blah:">> = iolist_to_binary(join(re:split("track1.title:TBlah blah blah","([^.]*)\\.([^:]*):[t ]+(.*)",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-c]+$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-c]+$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-c]+$",[]))),
-?line <<"wxy">> = iolist_to_binary(join(re:split("wxy","^[W-c]+$",[trim]))),
-?line <<"wxy">> = iolist_to_binary(join(re:split("wxy","^[W-c]+$",[{parts,
- 2}]))),
-?line <<"wxy">> = iolist_to_binary(join(re:split("wxy","^[W-c]+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("wxy_^ABC","^[W-c]+$",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[W-c]+$",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[W-c]+$",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("WXY_^abc","^[\\x3f-\\x5F]+$",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[\\x3f-\\x5F]+$",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[\\x3f-\\x5F]+$",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("wxy_^ABC","^[\\x3f-\\x5F]+$",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[\\x3f-\\x5F]+$",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[\\x3f-\\x5F]+$",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^abc$",[multiline,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[multiline,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[multiline]))),
-?line <<"qqq
+ <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[W-c]+$",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("wxy_^ABC","^[W-c]+$",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[W-c]+$",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[W-c]+$",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("WXY_^abc","^[\\x3f-\\x5F]+$",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[\\x3f-\\x5F]+$",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("WXY_^abc","^[\\x3f-\\x5F]+$",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("wxy_^ABC","^[\\x3f-\\x5F]+$",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[\\x3f-\\x5F]+$",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("wxy_^ABC","^[\\x3f-\\x5F]+$",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","^abc$",[multiline,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[multiline,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[multiline]))),
+ <<"qqq
">> = iolist_to_binary(join(re:split("qqq
abc","^abc$",[multiline,trim]))),
-?line <<"qqq
+ <<"qqq
:">> = iolist_to_binary(join(re:split("qqq
abc","^abc$",[multiline,{parts,2}]))),
-?line <<"qqq
+ <<"qqq
:">> = iolist_to_binary(join(re:split("qqq
abc","^abc$",[multiline]))),
-?line <<":
+ <<":
zzz">> = iolist_to_binary(join(re:split("abc
zzz","^abc$",[multiline,trim]))),
-?line <<":
+ <<":
zzz">> = iolist_to_binary(join(re:split("abc
zzz","^abc$",[multiline,{parts,2}]))),
-?line <<":
+ <<":
zzz">> = iolist_to_binary(join(re:split("abc
zzz","^abc$",[multiline]))),
-?line <<"qqq
+ <<"qqq
:
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","^abc$",[multiline,trim]))),
-?line <<"qqq
+ <<"qqq
:
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","^abc$",[multiline,{parts,2}]))),
-?line <<"qqq
+ <<"qqq
:
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","^abc$",[multiline]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^abc$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[]))),
-?line <<"qqq
+ <<"">> = iolist_to_binary(join(re:split("abc","^abc$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[]))),
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","^abc$",[trim]))),
-?line <<"qqq
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","^abc$",[{parts,2}]))),
-?line <<"qqq
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","^abc$",[]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","^abc$",[trim]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","^abc$",[{parts,2}]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","^abc$",[]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","^abc$",[trim]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","^abc$",[{parts,2}]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","^abc$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\Z",[multiline,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\Z",[multiline,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\Z",[multiline]))),
-?line <<"qqq
+ <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\Z",[multiline]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\Z",[multiline,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\Z",[multiline,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\Z",[multiline]))),
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","\\Aabc\\Z",[multiline,trim]))),
-?line <<"qqq
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","\\Aabc\\Z",[multiline,{parts,2}]))),
-?line <<"qqq
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","\\Aabc\\Z",[multiline]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","\\Aabc\\Z",[multiline,trim]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","\\Aabc\\Z",[multiline,{parts,2}]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","\\Aabc\\Z",[multiline]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","\\Aabc\\Z",[multiline,trim]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","\\Aabc\\Z",[multiline,{parts,2}]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","\\Aabc\\Z",[multiline]))),
-?line <<":f">> = iolist_to_binary(join(re:split("abc
+ <<":f">> = iolist_to_binary(join(re:split("abc
def","\\A(.)*\\Z",[dotall,trim]))),
-?line <<":f:">> = iolist_to_binary(join(re:split("abc
+ <<":f:">> = iolist_to_binary(join(re:split("abc
def","\\A(.)*\\Z",[dotall,{parts,2}]))),
-?line <<":f:">> = iolist_to_binary(join(re:split("abc
+ <<":f:">> = iolist_to_binary(join(re:split("abc
def","\\A(.)*\\Z",[dotall]))),
-?line <<":s">> = iolist_to_binary(join(re:split("*** Failers","\\A(.)*\\Z",[multiline,
- trim]))),
-?line <<":s:">> = iolist_to_binary(join(re:split("*** Failers","\\A(.)*\\Z",[multiline,
- {parts,
- 2}]))),
-?line <<":s:">> = iolist_to_binary(join(re:split("*** Failers","\\A(.)*\\Z",[multiline]))),
-?line <<"abc
+ <<":s">> = iolist_to_binary(join(re:split("*** Failers","\\A(.)*\\Z",[multiline,
+ trim]))),
+ <<":s:">> = iolist_to_binary(join(re:split("*** Failers","\\A(.)*\\Z",[multiline,
+ {parts,
+ 2}]))),
+ <<":s:">> = iolist_to_binary(join(re:split("*** Failers","\\A(.)*\\Z",[multiline]))),
+ <<"abc
def">> = iolist_to_binary(join(re:split("abc
def","\\A(.)*\\Z",[multiline,trim]))),
-?line <<"abc
+ <<"abc
def">> = iolist_to_binary(join(re:split("abc
def","\\A(.)*\\Z",[multiline,{parts,2}]))),
-?line <<"abc
+ <<"abc
def">> = iolist_to_binary(join(re:split("abc
def","\\A(.)*\\Z",[multiline]))),
-?line <<"::c">> = iolist_to_binary(join(re:split("b::c","(?:b)|(?::+)",[trim]))),
-?line <<":::c">> = iolist_to_binary(join(re:split("b::c","(?:b)|(?::+)",[{parts,
+ <<"::c">> = iolist_to_binary(join(re:split("b::c","(?:b)|(?::+)",[trim]))),
+ <<":::c">> = iolist_to_binary(join(re:split("b::c","(?:b)|(?::+)",[{parts,
+ 2}]))),
+ <<"::c">> = iolist_to_binary(join(re:split("b::c","(?:b)|(?::+)",[]))),
+ <<"c">> = iolist_to_binary(join(re:split("c::b","(?:b)|(?::+)",[trim]))),
+ <<"c:b">> = iolist_to_binary(join(re:split("c::b","(?:b)|(?::+)",[{parts,
+ 2}]))),
+ <<"c::">> = iolist_to_binary(join(re:split("c::b","(?:b)|(?::+)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("az-","[-az]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("az-","[-az]+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("az-","[-az]+",[]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[-az]+",[trim]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[-az]+",[{parts,
2}]))),
-?line <<"::c">> = iolist_to_binary(join(re:split("b::c","(?:b)|(?::+)",[]))),
-?line <<"c">> = iolist_to_binary(join(re:split("c::b","(?:b)|(?::+)",[trim]))),
-?line <<"c:b">> = iolist_to_binary(join(re:split("c::b","(?:b)|(?::+)",[{parts,
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[-az]+",[]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[-az]+",[trim]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[-az]+",[{parts,
+ 2}]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[-az]+",[]))),
+ ok.
+run5() ->
+ <<"">> = iolist_to_binary(join(re:split("za-","[az-]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("za-","[az-]+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("za-","[az-]+",[]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[az-]+",[trim]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[az-]+",[{parts,
2}]))),
-?line <<"c::">> = iolist_to_binary(join(re:split("c::b","(?:b)|(?::+)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("az-","[-az]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("az-","[-az]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("az-","[-az]+",[]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[-az]+",[trim]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[-az]+",[{parts,
- 2}]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[-az]+",[]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[-az]+",[trim]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[-az]+",[{parts,
- 2}]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[-az]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("za-","[az-]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("za-","[az-]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("za-","[az-]+",[]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[az-]+",[trim]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[az-]+",[{parts,
- 2}]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[az-]+",[]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[az-]+",[trim]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[az-]+",[{parts,
- 2}]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[az-]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-z","[a\\-z]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-z","[a\\-z]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-z","[a\\-z]+",[]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[a\\-z]+",[trim]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[a\\-z]+",[{parts,
- 2}]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[a\\-z]+",[]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[a\\-z]+",[trim]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[a\\-z]+",[{parts,
- 2}]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[a\\-z]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcdxyz","[a-z]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcdxyz","[a-z]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcdxyz","[a-z]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12-34","[\\d-]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-34","[\\d-]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-34","[\\d-]+",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-]+",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-]+",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-]+",[]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-]+",[trim]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-]+",[{parts,
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[az-]+",[]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[az-]+",[trim]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[az-]+",[{parts,
+ 2}]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[az-]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-z","[a\\-z]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-z","[a\\-z]+",[{parts,
2}]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12-34z","[\\d-z]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-34z","[\\d-z]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-34z","[\\d-z]+",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-z]+",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-z]+",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-z]+",[]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-z]+",[trim]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-z]+",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("a-z","[a\\-z]+",[]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[a\\-z]+",[trim]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[a\\-z]+",[{parts,
+ 2}]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[a\\-z]+",[]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[a\\-z]+",[trim]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[a\\-z]+",[{parts,
+ 2}]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[a\\-z]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcdxyz","[a-z]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcdxyz","[a-z]+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcdxyz","[a-z]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12-34","[\\d-]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12-34","[\\d-]+",[{parts,
2}]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-z]+",[]))),
-?line <<": ">> = iolist_to_binary(join(re:split("\\ ","\\x5c",[trim]))),
-?line <<": ">> = iolist_to_binary(join(re:split("\\ ","\\x5c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("12-34","[\\d-]+",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-]+",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-]+",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-]+",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-]+",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-]+",[{parts,
2}]))),
-?line <<": ">> = iolist_to_binary(join(re:split("\\ ","\\x5c",[]))),
-?line <<"the:oo">> = iolist_to_binary(join(re:split("the Zoo","\\x20Z",[trim]))),
-?line <<"the:oo">> = iolist_to_binary(join(re:split("the Zoo","\\x20Z",[{parts,
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12-34z","[\\d-z]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12-34z","[\\d-z]+",[{parts,
2}]))),
-?line <<"the:oo">> = iolist_to_binary(join(re:split("the Zoo","\\x20Z",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\x20Z",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\x20Z",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\x20Z",[]))),
-?line <<"Zulu">> = iolist_to_binary(join(re:split("Zulu","\\x20Z",[trim]))),
-?line <<"Zulu">> = iolist_to_binary(join(re:split("Zulu","\\x20Z",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("12-34z","[\\d-z]+",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-z]+",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-z]+",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\d-z]+",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-z]+",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-z]+",[{parts,
2}]))),
-?line <<"Zulu">> = iolist_to_binary(join(re:split("Zulu","\\x20Z",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[caseless,
- trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[caseless,
- {parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[caseless]))),
-?line <<":ABC">> = iolist_to_binary(join(re:split("ABCabc","(abc)\\1",[caseless,
- trim]))),
-?line <<":ABC:">> = iolist_to_binary(join(re:split("ABCabc","(abc)\\1",[caseless,
- {parts,
- 2}]))),
-?line <<":ABC:">> = iolist_to_binary(join(re:split("ABCabc","(abc)\\1",[caseless]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcABC","(abc)\\1",[caseless,
- trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcABC","(abc)\\1",[caseless,
- {parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcABC","(abc)\\1",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab{3cd","ab{3cd",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab{3cd","ab{3cd",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab{3cd","ab{3cd",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab{3,cd","ab{3,cd",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab{3,cd","ab{3,cd",[{parts,
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","[\\d-z]+",[]))),
+ <<": ">> = iolist_to_binary(join(re:split("\\ ","\\x5c",[trim]))),
+ <<": ">> = iolist_to_binary(join(re:split("\\ ","\\x5c",[{parts,
+ 2}]))),
+ <<": ">> = iolist_to_binary(join(re:split("\\ ","\\x5c",[]))),
+ <<"the:oo">> = iolist_to_binary(join(re:split("the Zoo","\\x20Z",[trim]))),
+ <<"the:oo">> = iolist_to_binary(join(re:split("the Zoo","\\x20Z",[{parts,
+ 2}]))),
+ <<"the:oo">> = iolist_to_binary(join(re:split("the Zoo","\\x20Z",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\x20Z",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\x20Z",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\x20Z",[]))),
+ <<"Zulu">> = iolist_to_binary(join(re:split("Zulu","\\x20Z",[trim]))),
+ <<"Zulu">> = iolist_to_binary(join(re:split("Zulu","\\x20Z",[{parts,
+ 2}]))),
+ <<"Zulu">> = iolist_to_binary(join(re:split("Zulu","\\x20Z",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[caseless,
+ trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[caseless,
+ {parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab{3,cd","ab{3,cd",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab{3,4a}cd","ab{3,4a}cd",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab{3,4a}cd","ab{3,4a}cd",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab{3,4a}cd","ab{3,4a}cd",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("{4,5a}bc","{4,5a}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("{4,5a}bc","{4,5a}bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("{4,5a}bc","{4,5a}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","abc$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","abc$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","abc$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","abc$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","abc$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","abc$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[]))),
-?line <<"abc
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[caseless]))),
+ <<":ABC">> = iolist_to_binary(join(re:split("ABCabc","(abc)\\1",[caseless,
+ trim]))),
+ <<":ABC:">> = iolist_to_binary(join(re:split("ABCabc","(abc)\\1",[caseless,
+ {parts,
+ 2}]))),
+ <<":ABC:">> = iolist_to_binary(join(re:split("ABCabc","(abc)\\1",[caseless]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcABC","(abc)\\1",[caseless,
+ trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcABC","(abc)\\1",[caseless,
+ {parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcABC","(abc)\\1",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ab{3cd","ab{3cd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab{3cd","ab{3cd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab{3cd","ab{3cd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab{3,cd","ab{3,cd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab{3,cd","ab{3,cd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab{3,cd","ab{3,cd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab{3,4a}cd","ab{3,4a}cd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab{3,4a}cd","ab{3,4a}cd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab{3,4a}cd","ab{3,4a}cd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("{4,5a}bc","{4,5a}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("{4,5a}bc","{4,5a}bc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("{4,5a}bc","{4,5a}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","abc$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","abc$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","abc$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","abc$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","abc$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","abc$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[]))),
+ <<"abc
def">> = iolist_to_binary(join(re:split("abc
def","abc$",[trim]))),
-?line <<"abc
+ <<"abc
def">> = iolist_to_binary(join(re:split("abc
def","abc$",[{parts,2}]))),
-?line <<"abc
+ <<"abc
def">> = iolist_to_binary(join(re:split("abc
def","abc$",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcS","(abc)\\123",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcS","(abc)\\123",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcS","(abc)\\123",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abc“","(abc)\\223",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc“","(abc)\\223",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc“","(abc)\\223",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcÓ","(abc)\\323",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcÓ","(abc)\\323",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcÓ","(abc)\\323",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
-?line <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[trim]))),
-?line <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[{parts,
+ <<":abc">> = iolist_to_binary(join(re:split("abcS","(abc)\\123",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcS","(abc)\\123",[{parts,
2}]))),
-?line <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[]))),
-?line <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[trim]))),
-?line <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[{parts,
+ <<":abc:">> = iolist_to_binary(join(re:split("abcS","(abc)\\123",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abc“","(abc)\\223",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abc“","(abc)\\223",[{parts,
2}]))),
-?line <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[]))),
-?line <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[trim]))),
-?line <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[{parts,
+ <<":abc:">> = iolist_to_binary(join(re:split("abc“","(abc)\\223",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcÓ","(abc)\\323",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcÓ","(abc)\\323",[{parts,
2}]))),
-?line <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[]))),
-?line <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[trim]))),
-?line <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[{parts,
+ <<":abc:">> = iolist_to_binary(join(re:split("abcÓ","(abc)\\323",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[{parts,
2}]))),
-?line <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:l">> = iolist_to_binary(join(re:split("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123",[trim]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:l:">> = iolist_to_binary(join(re:split("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123",[{parts,
- 2}]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:l:">> = iolist_to_binary(join(re:split("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123",[]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k">> = iolist_to_binary(join(re:split("abcdefghijk
+ <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abc@","(abc)\\100",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1000",[]))),
+ <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[trim]))),
+ <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[{parts,
+ 2}]))),
+ <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[]))),
+ <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[trim]))),
+ <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[{parts,
+ 2}]))),
+ <<"abc81">> = iolist_to_binary(join(re:split("abc81","abc\\81",[]))),
+ <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[trim]))),
+ <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[{parts,
+ 2}]))),
+ <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[]))),
+ <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[trim]))),
+ <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[{parts,
+ 2}]))),
+ <<"abc91">> = iolist_to_binary(join(re:split("abc91","abc\\91",[]))),
+ ok.
+run6() ->
+ <<":a:b:c:d:e:f:g:h:i:j:k:l">> = iolist_to_binary(join(re:split("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123",[trim]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:l:">> = iolist_to_binary(join(re:split("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123",[{parts,
+ 2}]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k:l:">> = iolist_to_binary(join(re:split("abcdefghijkllS","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123",[]))),
+ <<":a:b:c:d:e:f:g:h:i:j:k">> = iolist_to_binary(join(re:split("abcdefghijk
S","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123",[trim]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:">> = iolist_to_binary(join(re:split("abcdefghijk
+ <<":a:b:c:d:e:f:g:h:i:j:k:">> = iolist_to_binary(join(re:split("abcdefghijk
S","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123",[{parts,2}]))),
-?line <<":a:b:c:d:e:f:g:h:i:j:k:">> = iolist_to_binary(join(re:split("abcdefghijk
+ <<":a:b:c:d:e:f:g:h:i:j:k:">> = iolist_to_binary(join(re:split("abcdefghijk
S","(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abidef","ab\\idef",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abidef","ab\\idef",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abidef","ab\\idef",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("bc","a{0}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("bc","a{0}bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("bc","a{0}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("xyz","(a|(bc)){0,0}?xyz",[trim]))),
-?line <<":::">> = iolist_to_binary(join(re:split("xyz","(a|(bc)){0,0}?xyz",[{parts,
- 2}]))),
-?line <<":::">> = iolist_to_binary(join(re:split("xyz","(a|(bc)){0,0}?xyz",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcde","abc[\\10]de",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\10]de",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\10]de",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcde","abc[\\1]de",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\1]de",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("abidef","ab\\idef",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abidef","ab\\idef",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abidef","ab\\idef",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bc","a{0}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("bc","a{0}bc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("bc","a{0}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("xyz","(a|(bc)){0,0}?xyz",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("xyz","(a|(bc)){0,0}?xyz",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("xyz","(a|(bc)){0,0}?xyz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcde","abc[\\10]de",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\10]de",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\1]de",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcde","(abc)[\\1]de",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcde","(abc)[\\1]de",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcde","(abc)[\\1]de",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\10]de",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcde","abc[\\1]de",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\1]de",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcde","abc[\\1]de",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcde","(abc)[\\1]de",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcde","(abc)[\\1]de",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcde","(abc)[\\1]de",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a
b","(?s)a.b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","(?s)a.b",[{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","(?s)a.b",[]))),
-?line <<":b:a:NOT:cccc:d">> = iolist_to_binary(join(re:split("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<":b:a:NOT:cccc:d">> = iolist_to_binary(join(re:split("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
- 2}]))),
-?line <<":b:a:NOT:cccc:d">> = iolist_to_binary(join(re:split("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<":b:a:NOT:ccc:d">> = iolist_to_binary(join(re:split("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<":b:a:NOT:ccc:d">> = iolist_to_binary(join(re:split("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ <<":b:a:NOT:cccc:d">> = iolist_to_binary(join(re:split("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<":b:a:NOT:cccc:d">> = iolist_to_binary(join(re:split("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
2}]))),
-?line <<":b:a:NOT:ccc:d">> = iolist_to_binary(join(re:split("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<":b:a:NO:Tcc:d">> = iolist_to_binary(join(re:split("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<":b:a:NO:Tcc:d">> = iolist_to_binary(join(re:split("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ <<":b:a:NOT:cccc:d">> = iolist_to_binary(join(re:split("baNOTccccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<":b:a:NOT:ccc:d">> = iolist_to_binary(join(re:split("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<":b:a:NOT:ccc:d">> = iolist_to_binary(join(re:split("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
2}]))),
-?line <<":b:a:NO:Tcc:d">> = iolist_to_binary(join(re:split("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<":b:a::ccc:d">> = iolist_to_binary(join(re:split("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<":b:a::ccc:d">> = iolist_to_binary(join(re:split("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
- 2}]))),
-?line <<":b:a::ccc:d">> = iolist_to_binary(join(re:split("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<":*:*:* Fail:ers">> = iolist_to_binary(join(re:split("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<":*:*:* Fail:ers:">> = iolist_to_binary(join(re:split("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
- 2}]))),
-?line <<":*:*:* Fail:ers:">> = iolist_to_binary(join(re:split("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<"anything">> = iolist_to_binary(join(re:split("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<"anything">> = iolist_to_binary(join(re:split("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
- 2}]))),
-?line <<"anything">> = iolist_to_binary(join(re:split("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<"bc">> = iolist_to_binary(join(re:split("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<"bc">> = iolist_to_binary(join(re:split("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
- 2}]))),
-?line <<"bc">> = iolist_to_binary(join(re:split("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<"baccd">> = iolist_to_binary(join(re:split("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
-?line <<"baccd">> = iolist_to_binary(join(re:split("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ <<":b:a:NOT:ccc:d">> = iolist_to_binary(join(re:split("baNOTcccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<":b:a:NO:Tcc:d">> = iolist_to_binary(join(re:split("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<":b:a:NO:Tcc:d">> = iolist_to_binary(join(re:split("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ 2}]))),
+ <<":b:a:NO:Tcc:d">> = iolist_to_binary(join(re:split("baNOTccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<":b:a::ccc:d">> = iolist_to_binary(join(re:split("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<":b:a::ccc:d">> = iolist_to_binary(join(re:split("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
2}]))),
-?line <<"baccd">> = iolist_to_binary(join(re:split("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Abc","[^a]",[trim]))),
-?line <<":bc">> = iolist_to_binary(join(re:split("Abc","[^a]",[{parts,
- 2}]))),
-?line <<":::">> = iolist_to_binary(join(re:split("Abc","[^a]",[]))),
-?line <<"A">> = iolist_to_binary(join(re:split("Abc","[^a]",[caseless,
- trim]))),
-?line <<"A:c">> = iolist_to_binary(join(re:split("Abc","[^a]",[caseless,
- {parts,
- 2}]))),
-?line <<"A::">> = iolist_to_binary(join(re:split("Abc","[^a]",[caseless]))),
-?line <<":a">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[trim]))),
-?line <<":aAbc">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[]))),
-?line <<"AAAaA">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[caseless,
- trim]))),
-?line <<"AAAaA:">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[caseless,
- {parts,
- 2}]))),
-?line <<"AAAaA:">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("bbb
+ <<":b:a::ccc:d">> = iolist_to_binary(join(re:split("bacccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<":*:*:* Fail:ers">> = iolist_to_binary(join(re:split("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<":*:*:* Fail:ers:">> = iolist_to_binary(join(re:split("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ 2}]))),
+ <<":*:*:* Fail:ers:">> = iolist_to_binary(join(re:split("*** Failers","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<"anything">> = iolist_to_binary(join(re:split("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<"anything">> = iolist_to_binary(join(re:split("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ 2}]))),
+ <<"anything">> = iolist_to_binary(join(re:split("anything","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<"bc">> = iolist_to_binary(join(re:split("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<"bc">> = iolist_to_binary(join(re:split("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ 2}]))),
+ <<"bc">> = iolist_to_binary(join(re:split("bc","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<"baccd">> = iolist_to_binary(join(re:split("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[trim]))),
+ <<"baccd">> = iolist_to_binary(join(re:split("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[{parts,
+ 2}]))),
+ <<"baccd">> = iolist_to_binary(join(re:split("baccd","^([^a])([^\\b])([^c]*)([^d]{3,4})",[]))),
+ <<"">> = iolist_to_binary(join(re:split("Abc","[^a]",[trim]))),
+ <<":bc">> = iolist_to_binary(join(re:split("Abc","[^a]",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("Abc","[^a]",[]))),
+ <<"A">> = iolist_to_binary(join(re:split("Abc","[^a]",[caseless,
+ trim]))),
+ <<"A:c">> = iolist_to_binary(join(re:split("Abc","[^a]",[caseless,
+ {parts,
+ 2}]))),
+ <<"A::">> = iolist_to_binary(join(re:split("Abc","[^a]",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[trim]))),
+ <<":aAbc">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[]))),
+ <<"AAAaA">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[caseless,
+ trim]))),
+ <<"AAAaA:">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[caseless,
+ {parts,
+ 2}]))),
+ <<"AAAaA:">> = iolist_to_binary(join(re:split("AAAaAbc","[^a]+",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("bbb
ccc","[^a]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("bbb
+ <<":">> = iolist_to_binary(join(re:split("bbb
ccc","[^a]+",[{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("bbb
+ <<":">> = iolist_to_binary(join(re:split("bbb
ccc","[^a]+",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("abc","[^k]$",[trim]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abc","[^k]$",[{parts,
- 2}]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abc","[^k]$",[]))),
-?line <<"*** Failer">> = iolist_to_binary(join(re:split("*** Failers","[^k]$",[trim]))),
-?line <<"*** Failer:">> = iolist_to_binary(join(re:split("*** Failers","[^k]$",[{parts,
- 2}]))),
-?line <<"*** Failer:">> = iolist_to_binary(join(re:split("*** Failers","[^k]$",[]))),
-?line <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]$",[trim]))),
-?line <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]$",[{parts,
- 2}]))),
-?line <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","[^k]{2,3}$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","[^k]{2,3}$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","[^k]{2,3}$",[]))),
-?line <<"k">> = iolist_to_binary(join(re:split("kbc","[^k]{2,3}$",[trim]))),
-?line <<"k:">> = iolist_to_binary(join(re:split("kbc","[^k]{2,3}$",[{parts,
- 2}]))),
-?line <<"k:">> = iolist_to_binary(join(re:split("kbc","[^k]{2,3}$",[]))),
-?line <<"k">> = iolist_to_binary(join(re:split("kabc","[^k]{2,3}$",[trim]))),
-?line <<"k:">> = iolist_to_binary(join(re:split("kabc","[^k]{2,3}$",[{parts,
- 2}]))),
-?line <<"k:">> = iolist_to_binary(join(re:split("kabc","[^k]{2,3}$",[]))),
-?line <<"*** Fail">> = iolist_to_binary(join(re:split("*** Failers","[^k]{2,3}$",[trim]))),
-?line <<"*** Fail:">> = iolist_to_binary(join(re:split("*** Failers","[^k]{2,3}$",[{parts,
- 2}]))),
-?line <<"*** Fail:">> = iolist_to_binary(join(re:split("*** Failers","[^k]{2,3}$",[]))),
-?line <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]{2,3}$",[trim]))),
-?line <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]{2,3}$",[{parts,
- 2}]))),
-?line <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]{2,3}$",[]))),
-?line <<"akb">> = iolist_to_binary(join(re:split("akb","[^k]{2,3}$",[trim]))),
-?line <<"akb">> = iolist_to_binary(join(re:split("akb","[^k]{2,3}$",[{parts,
- 2}]))),
-?line <<"akb">> = iolist_to_binary(join(re:split("akb","[^k]{2,3}$",[]))),
-?line <<"akk">> = iolist_to_binary(join(re:split("akk","[^k]{2,3}$",[trim]))),
-?line <<"akk">> = iolist_to_binary(join(re:split("akk","[^k]{2,3}$",[{parts,
+ <<"ab">> = iolist_to_binary(join(re:split("abc","[^k]$",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abc","[^k]$",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abc","[^k]$",[]))),
+ <<"*** Failer">> = iolist_to_binary(join(re:split("*** Failers","[^k]$",[trim]))),
+ <<"*** Failer:">> = iolist_to_binary(join(re:split("*** Failers","[^k]$",[{parts,
+ 2}]))),
+ <<"*** Failer:">> = iolist_to_binary(join(re:split("*** Failers","[^k]$",[]))),
+ <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]$",[trim]))),
+ <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]$",[{parts,
+ 2}]))),
+ <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","[^k]{2,3}$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","[^k]{2,3}$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","[^k]{2,3}$",[]))),
+ <<"k">> = iolist_to_binary(join(re:split("kbc","[^k]{2,3}$",[trim]))),
+ <<"k:">> = iolist_to_binary(join(re:split("kbc","[^k]{2,3}$",[{parts,
+ 2}]))),
+ <<"k:">> = iolist_to_binary(join(re:split("kbc","[^k]{2,3}$",[]))),
+ <<"k">> = iolist_to_binary(join(re:split("kabc","[^k]{2,3}$",[trim]))),
+ <<"k:">> = iolist_to_binary(join(re:split("kabc","[^k]{2,3}$",[{parts,
2}]))),
-?line <<"akk">> = iolist_to_binary(join(re:split("akk","[^k]{2,3}$",[]))),
-?line <<"12345678.b.c.d">> = iolist_to_binary(join(re:split("12345678.b.c.d","^\\d{8,}\\@.+[^k]$",[trim]))),
-?line <<"12345678.b.c.d">> = iolist_to_binary(join(re:split("12345678.b.c.d","^\\d{8,}\\@.+[^k]$",[{parts,
- 2}]))),
-?line <<"12345678.b.c.d">> = iolist_to_binary(join(re:split("12345678.b.c.d","^\\d{8,}\\@.+[^k]$",[]))),
-?line <<"123456789.y.z">> = iolist_to_binary(join(re:split("123456789.y.z","^\\d{8,}\\@.+[^k]$",[trim]))),
-?line <<"123456789.y.z">> = iolist_to_binary(join(re:split("123456789.y.z","^\\d{8,}\\@.+[^k]$",[{parts,
- 2}]))),
-?line <<"123456789.y.z">> = iolist_to_binary(join(re:split("123456789.y.z","^\\d{8,}\\@.+[^k]$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8,}\\@.+[^k]$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8,}\\@.+[^k]$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8,}\\@.+[^k]$",[]))),
-?line <<"12345678.y.uk">> = iolist_to_binary(join(re:split("12345678.y.uk","^\\d{8,}\\@.+[^k]$",[trim]))),
-?line <<"12345678.y.uk">> = iolist_to_binary(join(re:split("12345678.y.uk","^\\d{8,}\\@.+[^k]$",[{parts,
- 2}]))),
-?line <<"12345678.y.uk">> = iolist_to_binary(join(re:split("12345678.y.uk","^\\d{8,}\\@.+[^k]$",[]))),
-?line <<"1234567.b.c.d">> = iolist_to_binary(join(re:split("1234567.b.c.d","^\\d{8,}\\@.+[^k]$",[trim]))),
-?line <<"1234567.b.c.d">> = iolist_to_binary(join(re:split("1234567.b.c.d","^\\d{8,}\\@.+[^k]$",[{parts,
+ <<"k:">> = iolist_to_binary(join(re:split("kabc","[^k]{2,3}$",[]))),
+ <<"*** Fail">> = iolist_to_binary(join(re:split("*** Failers","[^k]{2,3}$",[trim]))),
+ <<"*** Fail:">> = iolist_to_binary(join(re:split("*** Failers","[^k]{2,3}$",[{parts,
+ 2}]))),
+ <<"*** Fail:">> = iolist_to_binary(join(re:split("*** Failers","[^k]{2,3}$",[]))),
+ <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]{2,3}$",[trim]))),
+ <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]{2,3}$",[{parts,
+ 2}]))),
+ <<"abk">> = iolist_to_binary(join(re:split("abk","[^k]{2,3}$",[]))),
+ <<"akb">> = iolist_to_binary(join(re:split("akb","[^k]{2,3}$",[trim]))),
+ <<"akb">> = iolist_to_binary(join(re:split("akb","[^k]{2,3}$",[{parts,
+ 2}]))),
+ <<"akb">> = iolist_to_binary(join(re:split("akb","[^k]{2,3}$",[]))),
+ <<"akk">> = iolist_to_binary(join(re:split("akk","[^k]{2,3}$",[trim]))),
+ <<"akk">> = iolist_to_binary(join(re:split("akk","[^k]{2,3}$",[{parts,
+ 2}]))),
+ <<"akk">> = iolist_to_binary(join(re:split("akk","[^k]{2,3}$",[]))),
+ <<"12345678.b.c.d">> = iolist_to_binary(join(re:split("12345678.b.c.d","^\\d{8,}\\@.+[^k]$",[trim]))),
+ <<"12345678.b.c.d">> = iolist_to_binary(join(re:split("12345678.b.c.d","^\\d{8,}\\@.+[^k]$",[{parts,
2}]))),
-?line <<"1234567.b.c.d">> = iolist_to_binary(join(re:split("1234567.b.c.d","^\\d{8,}\\@.+[^k]$",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaaaaaa","(a)\\1{8,}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaa","(a)\\1{8,}",[{parts,
+ <<"12345678.b.c.d">> = iolist_to_binary(join(re:split("12345678.b.c.d","^\\d{8,}\\@.+[^k]$",[]))),
+ <<"123456789.y.z">> = iolist_to_binary(join(re:split("123456789.y.z","^\\d{8,}\\@.+[^k]$",[trim]))),
+ <<"123456789.y.z">> = iolist_to_binary(join(re:split("123456789.y.z","^\\d{8,}\\@.+[^k]$",[{parts,
+ 2}]))),
+ <<"123456789.y.z">> = iolist_to_binary(join(re:split("123456789.y.z","^\\d{8,}\\@.+[^k]$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8,}\\@.+[^k]$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8,}\\@.+[^k]$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\d{8,}\\@.+[^k]$",[]))),
+ <<"12345678.y.uk">> = iolist_to_binary(join(re:split("12345678.y.uk","^\\d{8,}\\@.+[^k]$",[trim]))),
+ <<"12345678.y.uk">> = iolist_to_binary(join(re:split("12345678.y.uk","^\\d{8,}\\@.+[^k]$",[{parts,
+ 2}]))),
+ <<"12345678.y.uk">> = iolist_to_binary(join(re:split("12345678.y.uk","^\\d{8,}\\@.+[^k]$",[]))),
+ <<"1234567.b.c.d">> = iolist_to_binary(join(re:split("1234567.b.c.d","^\\d{8,}\\@.+[^k]$",[trim]))),
+ <<"1234567.b.c.d">> = iolist_to_binary(join(re:split("1234567.b.c.d","^\\d{8,}\\@.+[^k]$",[{parts,
+ 2}]))),
+ <<"1234567.b.c.d">> = iolist_to_binary(join(re:split("1234567.b.c.d","^\\d{8,}\\@.+[^k]$",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaaaaaa","(a)\\1{8,}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaa","(a)\\1{8,}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaa","(a)\\1{8,}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaaaaaaa","(a)\\1{8,}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","(a)\\1{8,}",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaa","(a)\\1{8,}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaaaaaaa","(a)\\1{8,}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","(a)\\1{8,}",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","(a)\\1{8,}",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a)\\1{8,}",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a)\\1{8,}",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","(a)\\1{8,}",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a)\\1{8,}",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a)\\1{8,}",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a)\\1{8,}",[]))),
-?line <<"aaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaa","(a)\\1{8,}",[trim]))),
-?line <<"aaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaa","(a)\\1{8,}",[{parts,
- 2}]))),
-?line <<"aaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaa","(a)\\1{8,}",[]))),
-?line <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[trim]))),
-?line <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a)\\1{8,}",[]))),
+ <<"aaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaa","(a)\\1{8,}",[trim]))),
+ <<"aaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaa","(a)\\1{8,}",[{parts,
+ 2}]))),
+ <<"aaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaa","(a)\\1{8,}",[]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[trim]))),
+ <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[{parts,
+ 2}]))),
+ <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[]))),
+ <<"aa:a">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[trim]))),
+ <<"aa:abcd">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[{parts,
+ 2}]))),
+ <<"aa:a:::">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[]))),
+ ok.
+run7() ->
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[caseless,
+ trim]))),
+ <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[caseless,
+ {parts,
+ 2}]))),
+ <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[caseless]))),
+ <<"aaAa">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[caseless,
+ trim]))),
+ <<"aaAa:cd">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[caseless,
+ {parts,
+ 2}]))),
+ <<"aaAa:::">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[caseless]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[trim]))),
+ <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[{parts,
2}]))),
-?line <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[]))),
-?line <<"aa:a">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[trim]))),
-?line <<"aa:abcd">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[{parts,
+ <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[]))),
+ <<"aa:a">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[trim]))),
+ <<"aa:abcd">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[{parts,
2}]))),
-?line <<"aa:a:::">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[]))),
-?line <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[caseless,
+ <<"aa:a:::">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[caseless,
trim]))),
-?line <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[caseless,
+ <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[caseless,
{parts,
2}]))),
-?line <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^a]",[caseless]))),
-?line <<"aaAa">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[caseless,
+ <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[caseless]))),
+ <<"aaAa">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[caseless,
trim]))),
-?line <<"aaAa:cd">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[caseless,
+ <<"aaAa:cd">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[caseless,
{parts,
2}]))),
-?line <<"aaAa:::">> = iolist_to_binary(join(re:split("aaAabcd","[^a]",[caseless]))),
-?line <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[trim]))),
-?line <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[{parts,
- 2}]))),
-?line <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[]))),
-?line <<"aa:a">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[trim]))),
-?line <<"aa:abcd">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[{parts,
- 2}]))),
-?line <<"aa:a:::">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[]))),
-?line <<"aaaa">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[caseless,
- trim]))),
-?line <<"aaaa:cd">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[caseless,
- {parts,
- 2}]))),
-?line <<"aaaa:::">> = iolist_to_binary(join(re:split("aaaabcd","[^az]",[caseless]))),
-?line <<"aaAa">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[caseless,
- trim]))),
-?line <<"aaAa:cd">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[caseless,
- {parts,
- 2}]))),
-?line <<"aaAa:::">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[caseless]))),
-?line <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL",[trim]))),
-?line <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL",[{parts,
- 2}]))),
-?line <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL",[]))),
-?line <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL",[trim]))),
-?line <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL",[{parts,
+ <<"aaAa:::">> = iolist_to_binary(join(re:split("aaAabcd","[^az]",[caseless]))),
+ <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL",[trim]))),
+ <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL",[{parts,
2}]))),
-?line <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL",[]))),
-?line <<"1:.23">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d[1-9]?)\\d+",[trim]))),
-?line <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d[1-9]?)\\d+",[{parts,
- 2}]))),
-?line <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d[1-9]?)\\d+",[]))),
-?line <<"1:.875">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d[1-9]?)\\d+",[trim]))),
-?line <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d[1-9]?)\\d+",[{parts,
- 2}]))),
-?line <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d[1-9]?)\\d+",[]))),
-?line <<"1:.23">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d[1-9]?)\\d+",[trim]))),
-?line <<"1:.23:">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d[1-9]?)\\d+",[{parts,
- 2}]))),
-?line <<"1:.23:">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d[1-9]?)\\d+",[]))),
-?line <<"1:.23::0003938">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
-?line <<"1:.23::0003938">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
- 2}]))),
-?line <<"1:.23::0003938">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
-?line <<"1:.875:5:000282">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
-?line <<"1:.875:5:000282">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
- 2}]))),
-?line <<"1:.875:5:000282">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
-?line <<"1.235">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
-?line <<"1.235">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
- 2}]))),
-?line <<"1.235">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","a(?)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","a(?)b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","a(?)b",[]))),
-?line <<"Food is on the :foo:table">> = iolist_to_binary(join(re:split("Food is on the foo table","\\b(foo)\\s+(\\w+)",[caseless,
- trim]))),
-?line <<"Food is on the :foo:table:">> = iolist_to_binary(join(re:split("Food is on the foo table","\\b(foo)\\s+(\\w+)",[caseless,
- {parts,
- 2}]))),
-?line <<"Food is on the :foo:table:">> = iolist_to_binary(join(re:split("Food is on the foo table","\\b(foo)\\s+(\\w+)",[caseless]))),
-?line <<"The :d is under the bar in the :n.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*)bar",[trim]))),
-?line <<"The :d is under the bar in the :n.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*)bar",[{parts,
+ <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,6}?LL",[]))),
+ <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL",[trim]))),
+ <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL",[{parts,
+ 2}]))),
+ <<"xxxxxxxxxxx:xxxxxxxxx">> = iolist_to_binary(join(re:split("xxxxxxxxxxxPSTAIREISLLxxxxxxxxx","P[^*]TAIRE[^*]{1,}?LL",[]))),
+ <<"1:.23">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d[1-9]?)\\d+",[trim]))),
+ <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d[1-9]?)\\d+",[{parts,
+ 2}]))),
+ <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d[1-9]?)\\d+",[]))),
+ <<"1:.875">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d[1-9]?)\\d+",[trim]))),
+ <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d[1-9]?)\\d+",[{parts,
+ 2}]))),
+ <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d[1-9]?)\\d+",[]))),
+ <<"1:.23">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d[1-9]?)\\d+",[trim]))),
+ <<"1:.23:">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d[1-9]?)\\d+",[{parts,
+ 2}]))),
+ <<"1:.23:">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d[1-9]?)\\d+",[]))),
+ <<"1:.23::0003938">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
+ <<"1:.23::0003938">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
+ 2}]))),
+ <<"1:.23::0003938">> = iolist_to_binary(join(re:split("1.230003938","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
+ <<"1:.875:5:000282">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
+ <<"1:.875:5:000282">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
+ 2}]))),
+ <<"1:.875:5:000282">> = iolist_to_binary(join(re:split("1.875000282","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
+ <<"1.235">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[trim]))),
+ <<"1.235">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[{parts,
+ 2}]))),
+ <<"1.235">> = iolist_to_binary(join(re:split("1.235","(\\.\\d\\d((?=0)|\\d(?=\\d)))",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","a(?)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","a(?)b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","a(?)b",[]))),
+ <<"Food is on the :foo:table">> = iolist_to_binary(join(re:split("Food is on the foo table","\\b(foo)\\s+(\\w+)",[caseless,
+ trim]))),
+ <<"Food is on the :foo:table:">> = iolist_to_binary(join(re:split("Food is on the foo table","\\b(foo)\\s+(\\w+)",[caseless,
+ {parts,
+ 2}]))),
+ <<"Food is on the :foo:table:">> = iolist_to_binary(join(re:split("Food is on the foo table","\\b(foo)\\s+(\\w+)",[caseless]))),
+ <<"The :d is under the bar in the :n.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*)bar",[trim]))),
+ <<"The :d is under the bar in the :n.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*)bar",[{parts,
+ 2}]))),
+ <<"The :d is under the bar in the :n.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*)bar",[]))),
+ <<"The :d is under the : in the barn.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*?)bar",[trim]))),
+ <<"The :d is under the : in the barn.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*?)bar",[{parts,
2}]))),
-?line <<"The :d is under the bar in the :n.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*)bar",[]))),
-?line <<"The :d is under the : in the barn.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*?)bar",[trim]))),
-?line <<"The :d is under the : in the barn.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*?)bar",[{parts,
- 2}]))),
-?line <<"The :d is under the : in the barn.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*?)bar",[]))),
-?line <<":I have 2 numbers: 53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d*)",[trim]))),
-?line <<":I have 2 numbers: 53147::">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d*)",[{parts,
+ <<"The :d is under the : in the barn.">> = iolist_to_binary(join(re:split("The food is under the bar in the barn.","foo(.*?)bar",[]))),
+ <<":I have 2 numbers: 53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d*)",[trim]))),
+ <<":I have 2 numbers: 53147::">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d*)",[{parts,
+ 2}]))),
+ <<":I have 2 numbers: 53147::">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d*)",[]))),
+ <<":I have 2 numbers: 5314:7">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)",[trim]))),
+ <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)",[{parts,
+ 2}]))),
+ <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)",[]))),
+ <<":I::: :::h:::a:::v:::e::: :2:: :::n:::u:::m:::b:::e:::r:::s::::::: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d*)",[trim]))),
+ <<":I:: have 2 numbers: 53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d*)",[{parts,
2}]))),
-?line <<":I have 2 numbers: 53147::">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d*)",[]))),
-?line <<":I have 2 numbers: 5314:7">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)",[trim]))),
-?line <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)",[{parts,
+ <<":I::: :::h:::a:::v:::e::: :2:: :::n:::u:::m:::b:::e:::r:::s::::::: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d*)",[]))),
+ <<":I have :2:: numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)",[trim]))),
+ <<":I have :2: numbers: 53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)",[{parts,
2}]))),
-?line <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)",[]))),
-?line <<":I::: :::h:::a:::v:::e::: :2:: :::n:::u:::m:::b:::e:::r:::s::::::: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d*)",[trim]))),
-?line <<":I:: have 2 numbers: 53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d*)",[{parts,
- 2}]))),
-?line <<":I::: :::h:::a:::v:::e::: :2:: :::n:::u:::m:::b:::e:::r:::s::::::: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d*)",[]))),
-?line <<":I have :2:: numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)",[trim]))),
-?line <<":I have :2: numbers: 53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)",[{parts,
- 2}]))),
-?line <<":I have :2:: numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)",[]))),
-?line <<":I have 2 numbers: 5314:7">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)$",[trim]))),
-?line <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)$",[{parts,
+ <<":I have :2:: numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)",[]))),
+ <<":I have 2 numbers: 5314:7">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)$",[trim]))),
+ <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)$",[{parts,
+ 2}]))),
+ <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)$",[]))),
+ <<":I have 2 numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)$",[trim]))),
+ <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)$",[{parts,
2}]))),
-?line <<":I have 2 numbers: 5314:7:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)(\\d+)$",[]))),
-?line <<":I have 2 numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)$",[trim]))),
-?line <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)$",[{parts,
- 2}]))),
-?line <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)$",[]))),
-?line <<":I have 2 numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)\\b(\\d+)$",[trim]))),
-?line <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)\\b(\\d+)$",[{parts,
- 2}]))),
-?line <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)\\b(\\d+)$",[]))),
-?line <<":I have 2 numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*\\D)(\\d+)$",[trim]))),
-?line <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*\\D)(\\d+)$",[{parts,
- 2}]))),
-?line <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*\\D)(\\d+)$",[]))),
-?line <<":C123">> = iolist_to_binary(join(re:split("ABC123","^\\D*(?!123)",[trim]))),
-?line <<":C123">> = iolist_to_binary(join(re:split("ABC123","^\\D*(?!123)",[{parts,
- 2}]))),
-?line <<":C123">> = iolist_to_binary(join(re:split("ABC123","^\\D*(?!123)",[]))),
-?line <<":ABC:445">> = iolist_to_binary(join(re:split("ABC445","^(\\D*)(?=\\d)(?!123)",[trim]))),
-?line <<":ABC:445">> = iolist_to_binary(join(re:split("ABC445","^(\\D*)(?=\\d)(?!123)",[{parts,
- 2}]))),
-?line <<":ABC:445">> = iolist_to_binary(join(re:split("ABC445","^(\\D*)(?=\\d)(?!123)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[]))),
-?line <<"ABC123">> = iolist_to_binary(join(re:split("ABC123","^(\\D*)(?=\\d)(?!123)",[trim]))),
-?line <<"ABC123">> = iolist_to_binary(join(re:split("ABC123","^(\\D*)(?=\\d)(?!123)",[{parts,
- 2}]))),
-?line <<"ABC123">> = iolist_to_binary(join(re:split("ABC123","^(\\D*)(?=\\d)(?!123)",[]))),
-?line <<":789">> = iolist_to_binary(join(re:split("W46]789","^[W-]46]",[trim]))),
-?line <<":789">> = iolist_to_binary(join(re:split("W46]789","^[W-]46]",[{parts,
- 2}]))),
-?line <<":789">> = iolist_to_binary(join(re:split("W46]789","^[W-]46]",[]))),
-?line <<":789">> = iolist_to_binary(join(re:split("-46]789","^[W-]46]",[trim]))),
-?line <<":789">> = iolist_to_binary(join(re:split("-46]789","^[W-]46]",[{parts,
- 2}]))),
-?line <<":789">> = iolist_to_binary(join(re:split("-46]789","^[W-]46]",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-]46]",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-]46]",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-]46]",[]))),
-?line <<"Wall">> = iolist_to_binary(join(re:split("Wall","^[W-]46]",[trim]))),
-?line <<"Wall">> = iolist_to_binary(join(re:split("Wall","^[W-]46]",[{parts,
- 2}]))),
-?line <<"Wall">> = iolist_to_binary(join(re:split("Wall","^[W-]46]",[]))),
-?line <<"Zebra">> = iolist_to_binary(join(re:split("Zebra","^[W-]46]",[trim]))),
-?line <<"Zebra">> = iolist_to_binary(join(re:split("Zebra","^[W-]46]",[{parts,
- 2}]))),
-?line <<"Zebra">> = iolist_to_binary(join(re:split("Zebra","^[W-]46]",[]))),
-?line <<"42">> = iolist_to_binary(join(re:split("42","^[W-]46]",[trim]))),
-?line <<"42">> = iolist_to_binary(join(re:split("42","^[W-]46]",[{parts,
- 2}]))),
-?line <<"42">> = iolist_to_binary(join(re:split("42","^[W-]46]",[]))),
-?line <<"[abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-]46]",[trim]))),
-?line <<"[abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-]46]",[{parts,
+ <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*?)(\\d+)$",[]))),
+ <<":I have 2 numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)\\b(\\d+)$",[trim]))),
+ <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)\\b(\\d+)$",[{parts,
+ 2}]))),
+ <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*)\\b(\\d+)$",[]))),
+ <<":I have 2 numbers: :53147">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*\\D)(\\d+)$",[trim]))),
+ <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*\\D)(\\d+)$",[{parts,
+ 2}]))),
+ <<":I have 2 numbers: :53147:">> = iolist_to_binary(join(re:split("I have 2 numbers: 53147","(.*\\D)(\\d+)$",[]))),
+ ok.
+run8() ->
+ <<":C123">> = iolist_to_binary(join(re:split("ABC123","^\\D*(?!123)",[trim]))),
+ <<":C123">> = iolist_to_binary(join(re:split("ABC123","^\\D*(?!123)",[{parts,
+ 2}]))),
+ <<":C123">> = iolist_to_binary(join(re:split("ABC123","^\\D*(?!123)",[]))),
+ <<":ABC:445">> = iolist_to_binary(join(re:split("ABC445","^(\\D*)(?=\\d)(?!123)",[trim]))),
+ <<":ABC:445">> = iolist_to_binary(join(re:split("ABC445","^(\\D*)(?=\\d)(?!123)",[{parts,
+ 2}]))),
+ <<":ABC:445">> = iolist_to_binary(join(re:split("ABC445","^(\\D*)(?=\\d)(?!123)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\D*)(?=\\d)(?!123)",[]))),
+ <<"ABC123">> = iolist_to_binary(join(re:split("ABC123","^(\\D*)(?=\\d)(?!123)",[trim]))),
+ <<"ABC123">> = iolist_to_binary(join(re:split("ABC123","^(\\D*)(?=\\d)(?!123)",[{parts,
+ 2}]))),
+ <<"ABC123">> = iolist_to_binary(join(re:split("ABC123","^(\\D*)(?=\\d)(?!123)",[]))),
+ <<":789">> = iolist_to_binary(join(re:split("W46]789","^[W-]46]",[trim]))),
+ <<":789">> = iolist_to_binary(join(re:split("W46]789","^[W-]46]",[{parts,
2}]))),
-?line <<"[abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-]46]",[]))),
-?line <<"]abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-]46]",[trim]))),
-?line <<"]abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-]46]",[{parts,
+ <<":789">> = iolist_to_binary(join(re:split("W46]789","^[W-]46]",[]))),
+ <<":789">> = iolist_to_binary(join(re:split("-46]789","^[W-]46]",[trim]))),
+ <<":789">> = iolist_to_binary(join(re:split("-46]789","^[W-]46]",[{parts,
2}]))),
-?line <<"]abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-]46]",[]))),
-?line <<":46]789">> = iolist_to_binary(join(re:split("W46]789","^[W-\\]46]",[trim]))),
-?line <<":46]789">> = iolist_to_binary(join(re:split("W46]789","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<":46]789">> = iolist_to_binary(join(re:split("W46]789","^[W-\\]46]",[]))),
-?line <<":all">> = iolist_to_binary(join(re:split("Wall","^[W-\\]46]",[trim]))),
-?line <<":all">> = iolist_to_binary(join(re:split("Wall","^[W-\\]46]",[{parts,
+ <<":789">> = iolist_to_binary(join(re:split("-46]789","^[W-]46]",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-]46]",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-]46]",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-]46]",[]))),
+ <<"Wall">> = iolist_to_binary(join(re:split("Wall","^[W-]46]",[trim]))),
+ <<"Wall">> = iolist_to_binary(join(re:split("Wall","^[W-]46]",[{parts,
+ 2}]))),
+ <<"Wall">> = iolist_to_binary(join(re:split("Wall","^[W-]46]",[]))),
+ <<"Zebra">> = iolist_to_binary(join(re:split("Zebra","^[W-]46]",[trim]))),
+ <<"Zebra">> = iolist_to_binary(join(re:split("Zebra","^[W-]46]",[{parts,
+ 2}]))),
+ <<"Zebra">> = iolist_to_binary(join(re:split("Zebra","^[W-]46]",[]))),
+ <<"42">> = iolist_to_binary(join(re:split("42","^[W-]46]",[trim]))),
+ <<"42">> = iolist_to_binary(join(re:split("42","^[W-]46]",[{parts,
+ 2}]))),
+ <<"42">> = iolist_to_binary(join(re:split("42","^[W-]46]",[]))),
+ <<"[abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-]46]",[trim]))),
+ <<"[abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-]46]",[{parts,
+ 2}]))),
+ <<"[abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-]46]",[]))),
+ <<"]abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-]46]",[trim]))),
+ <<"]abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-]46]",[{parts,
+ 2}]))),
+ <<"]abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-]46]",[]))),
+ <<":46]789">> = iolist_to_binary(join(re:split("W46]789","^[W-\\]46]",[trim]))),
+ <<":46]789">> = iolist_to_binary(join(re:split("W46]789","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<":46]789">> = iolist_to_binary(join(re:split("W46]789","^[W-\\]46]",[]))),
+ <<":all">> = iolist_to_binary(join(re:split("Wall","^[W-\\]46]",[trim]))),
+ <<":all">> = iolist_to_binary(join(re:split("Wall","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<":all">> = iolist_to_binary(join(re:split("Wall","^[W-\\]46]",[]))),
+ <<":ebra">> = iolist_to_binary(join(re:split("Zebra","^[W-\\]46]",[trim]))),
+ <<":ebra">> = iolist_to_binary(join(re:split("Zebra","^[W-\\]46]",[{parts,
2}]))),
-?line <<":all">> = iolist_to_binary(join(re:split("Wall","^[W-\\]46]",[]))),
-?line <<":ebra">> = iolist_to_binary(join(re:split("Zebra","^[W-\\]46]",[trim]))),
-?line <<":ebra">> = iolist_to_binary(join(re:split("Zebra","^[W-\\]46]",[{parts,
+ <<":ebra">> = iolist_to_binary(join(re:split("Zebra","^[W-\\]46]",[]))),
+ <<":ylophone">> = iolist_to_binary(join(re:split("Xylophone","^[W-\\]46]",[trim]))),
+ <<":ylophone">> = iolist_to_binary(join(re:split("Xylophone","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<":ylophone">> = iolist_to_binary(join(re:split("Xylophone","^[W-\\]46]",[]))),
+ <<":2">> = iolist_to_binary(join(re:split("42","^[W-\\]46]",[trim]))),
+ <<":2">> = iolist_to_binary(join(re:split("42","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<":2">> = iolist_to_binary(join(re:split("42","^[W-\\]46]",[]))),
+ <<":abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-\\]46]",[trim]))),
+ <<":abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-\\]46]",[{parts,
2}]))),
-?line <<":ebra">> = iolist_to_binary(join(re:split("Zebra","^[W-\\]46]",[]))),
-?line <<":ylophone">> = iolist_to_binary(join(re:split("Xylophone","^[W-\\]46]",[trim]))),
-?line <<":ylophone">> = iolist_to_binary(join(re:split("Xylophone","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<":ylophone">> = iolist_to_binary(join(re:split("Xylophone","^[W-\\]46]",[]))),
-?line <<":2">> = iolist_to_binary(join(re:split("42","^[W-\\]46]",[trim]))),
-?line <<":2">> = iolist_to_binary(join(re:split("42","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<":2">> = iolist_to_binary(join(re:split("42","^[W-\\]46]",[]))),
-?line <<":abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-\\]46]",[trim]))),
-?line <<":abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<":abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-\\]46]",[]))),
-?line <<":abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-\\]46]",[trim]))),
-?line <<":abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<":abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-\\]46]",[]))),
-?line <<":backslash">> = iolist_to_binary(join(re:split("\\backslash","^[W-\\]46]",[trim]))),
-?line <<":backslash">> = iolist_to_binary(join(re:split("\\backslash","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<":backslash">> = iolist_to_binary(join(re:split("\\backslash","^[W-\\]46]",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-\\]46]",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-\\]46]",[{parts,
+ <<":abcd]">> = iolist_to_binary(join(re:split("[abcd]","^[W-\\]46]",[]))),
+ <<":abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-\\]46]",[trim]))),
+ <<":abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<":abcd[">> = iolist_to_binary(join(re:split("]abcd[","^[W-\\]46]",[]))),
+ <<":backslash">> = iolist_to_binary(join(re:split("\\backslash","^[W-\\]46]",[trim]))),
+ <<":backslash">> = iolist_to_binary(join(re:split("\\backslash","^[W-\\]46]",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-\\]46]",[]))),
-?line <<"-46]789">> = iolist_to_binary(join(re:split("-46]789","^[W-\\]46]",[trim]))),
-?line <<"-46]789">> = iolist_to_binary(join(re:split("-46]789","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<"-46]789">> = iolist_to_binary(join(re:split("-46]789","^[W-\\]46]",[]))),
-?line <<"well">> = iolist_to_binary(join(re:split("well","^[W-\\]46]",[trim]))),
-?line <<"well">> = iolist_to_binary(join(re:split("well","^[W-\\]46]",[{parts,
- 2}]))),
-?line <<"well">> = iolist_to_binary(join(re:split("well","^[W-\\]46]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[trim]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[{parts,
- 2}]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword",[trim]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword",[{parts,
- 2}]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,0}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,0}",[{parts,
- 2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,0}",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(a){0,0}",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(a){0,0}",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(a){0,0}",[]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a){0,0}",[trim]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a){0,0}",[{parts,
- 2}]))),
-?line <<"aab">> = iolist_to_binary(join(re:split("aab","^(a){0,0}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,1}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,1}",[{parts,
- 2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,1}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,1}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,1}",[{parts,
- 2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,1}",[]))),
-?line <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){0,1}",[trim]))),
-?line <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){0,1}",[{parts,
- 2}]))),
-?line <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){0,1}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,2}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,2}",[{parts,
- 2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,2}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,2}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,2}",[{parts,
- 2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,2}",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,2}",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,2}",[{parts,
- 2}]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,2}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,3}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,3}",[{parts,
- 2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,3}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,3}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,3}",[{parts,
- 2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,3}",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,3}",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,3}",[{parts,
- 2}]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,3}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){0,3}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,3}",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,3}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,}",[{parts,
+ <<":backslash">> = iolist_to_binary(join(re:split("\\backslash","^[W-\\]46]",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-\\]46]",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[W-\\]46]",[]))),
+ <<"-46]789">> = iolist_to_binary(join(re:split("-46]789","^[W-\\]46]",[trim]))),
+ <<"-46]789">> = iolist_to_binary(join(re:split("-46]789","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<"-46]789">> = iolist_to_binary(join(re:split("-46]789","^[W-\\]46]",[]))),
+ <<"well">> = iolist_to_binary(join(re:split("well","^[W-\\]46]",[trim]))),
+ <<"well">> = iolist_to_binary(join(re:split("well","^[W-\\]46]",[{parts,
+ 2}]))),
+ <<"well">> = iolist_to_binary(join(re:split("well","^[W-\\]46]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[trim]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[{parts,
+ 2}]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?:[a-zA-Z0-9]+ ){0,10}otherword",[]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword",[trim]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword",[{parts,
+ 2}]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?:[a-zA-Z0-9]+ ){0,300}otherword",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,0}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,0}",[{parts,
2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,}",[{parts,
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,0}",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(a){0,0}",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(a){0,0}",[{parts,
2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,}",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,}",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,}",[{parts,
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(a){0,0}",[]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a){0,0}",[trim]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a){0,0}",[{parts,
2}]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){0,}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,}",[{parts,
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^(a){0,0}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,1}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,1}",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){0,}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){0,}",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){0,}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,1}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,1}",[{parts,
- 2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,1}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,1}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,1}",[{parts,
- 2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,1}",[]))),
-?line <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){1,1}",[trim]))),
-?line <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){1,1}",[{parts,
- 2}]))),
-?line <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){1,1}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,2}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,2}",[{parts,
- 2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,2}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,2}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,2}",[{parts,
- 2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,2}",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,2}",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,2}",[{parts,
- 2}]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,2}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,3}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,3}",[{parts,
- 2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,3}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,3}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,3}",[{parts,
- 2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,3}",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,3}",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,3}",[{parts,
- 2}]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,3}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){1,3}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,3}",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,3}",[]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,}",[trim]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,}",[{parts,
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,1}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,1}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,1}",[{parts,
2}]))),
-?line <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,}",[]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,}",[trim]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,}",[{parts,
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,1}",[]))),
+ <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){0,1}",[trim]))),
+ <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){0,1}",[{parts,
2}]))),
-?line <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,}",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,}",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,}",[{parts,
+ <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){0,1}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,2}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,2}",[{parts,
2}]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){1,}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,}",[{parts,
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,2}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,2}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,2}",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){1,}",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){1,}",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){1,}",[]))),
-?line <<"borfle
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,2}",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,2}",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,2}",[{parts,
+ 2}]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,2}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,3}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,3}",[{parts,
+ 2}]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,3}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,3}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,3}",[{parts,
+ 2}]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,3}",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,3}",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,3}",[{parts,
+ 2}]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,3}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){0,3}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,3}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,3}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,}",[{parts,
+ 2}]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){0,}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,}",[{parts,
+ 2}]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){0,}",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,}",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,}",[{parts,
+ 2}]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){0,}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){0,}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){0,}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){0,}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){0,}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){0,}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,1}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,1}",[{parts,
+ 2}]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,1}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,1}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,1}",[{parts,
+ 2}]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,1}",[]))),
+ <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){1,1}",[trim]))),
+ <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){1,1}",[{parts,
+ 2}]))),
+ <<":a:ab">> = iolist_to_binary(join(re:split("aab","^(a){1,1}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,2}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,2}",[{parts,
+ 2}]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,2}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,2}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,2}",[{parts,
+ 2}]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,2}",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,2}",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,2}",[{parts,
+ 2}]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,2}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,3}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,3}",[{parts,
+ 2}]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,3}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,3}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,3}",[{parts,
+ 2}]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,3}",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,3}",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,3}",[{parts,
+ 2}]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,3}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){1,3}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,3}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,3}",[]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,}",[trim]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,}",[{parts,
+ 2}]))),
+ <<"bcd">> = iolist_to_binary(join(re:split("bcd","^(a){1,}",[]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,}",[trim]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,}",[{parts,
+ 2}]))),
+ <<":a:bc">> = iolist_to_binary(join(re:split("abc","^(a){1,}",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,}",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,}",[{parts,
+ 2}]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("aab","^(a){1,}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaa","^(a){1,}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaa","^(a){1,}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){1,}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){1,}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a){1,}",[]))),
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[trim]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[{parts,2}]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".{0,}\\.gif",[trim]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".{0,}\\.gif",[{parts,2}]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".{0,}\\.gif",[]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[multiline,trim]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[multiline,{parts,2}]))),
-?line <<"borfle
+ <<"borfle
:
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[multiline]))),
-?line <<":
+ <<":
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[dotall,trim]))),
-?line <<":
+ <<":
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[dotall,{parts,2}]))),
-?line <<":
+ <<":
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[dotall]))),
-?line <<":
+ ok.
+run9() ->
+ <<":
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[multiline,dotall,trim]))),
-?line <<":
+ <<":
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[multiline,dotall,{parts,2}]))),
-?line <<":
+ <<":
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*\\.gif",[multiline,dotall]))),
-?line <<"borfle
+ <<"borfle
bib.gif
">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[trim]))),
-?line <<"borfle
+ <<"borfle
bib.gif
:">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[{parts,2}]))),
-?line <<"borfle
+ <<"borfle
bib.gif
:">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[]))),
-?line <<":
+ <<":
:
">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,trim]))),
-?line <<":
+ <<":
bib.gif
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,{parts,2}]))),
-?line <<":
+ <<":
:
:">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline]))),
-?line <<"">> = iolist_to_binary(join(re:split("borfle
+ <<"">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[dotall,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[dotall,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[dotall]))),
-?line <<"">> = iolist_to_binary(join(re:split("borfle
+ <<"">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,dotall,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,dotall,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,dotall]))),
-?line <<"borfle
+ <<"borfle
bib.gif
">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[trim]))),
-?line <<"borfle
+ <<"borfle
bib.gif
:">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[{parts,2}]))),
-?line <<"borfle
+ <<"borfle
bib.gif
:">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[]))),
-?line <<":
+ <<":
:
">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,trim]))),
-?line <<":
+ <<":
bib.gif
no">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,{parts,2}]))),
-?line <<":
+ <<":
:
:">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline]))),
-?line <<"">> = iolist_to_binary(join(re:split("borfle
+ <<"">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[dotall,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[dotall,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[dotall]))),
-?line <<"">> = iolist_to_binary(join(re:split("borfle
+ <<"">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,dotall,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,dotall,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("borfle
+ <<":">> = iolist_to_binary(join(re:split("borfle
bib.gif
no",".*$",[multiline,dotall]))),
-?line <<"abcde
+ <<"abcde
:1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[trim]))),
-?line <<"abcde
+ <<"abcde
:1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[{parts,2}]))),
-?line <<"abcde
+ <<"abcde
:1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[trim]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[{parts,
- 2}]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[]))),
-?line <<"abcde
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[trim]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[{parts,
+ 2}]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[]))),
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[trim]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[{parts,2}]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[]))),
-?line <<"abcde
+ <<"abcde
:1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[multiline,trim]))),
-?line <<"abcde
+ <<"abcde
:1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[multiline,{parts,2}]))),
-?line <<"abcde
+ <<"abcde
:1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[multiline]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
- trim]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
- {parts,
- 2}]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline]))),
-?line <<"abcde
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
+ trim]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
+ {parts,
+ 2}]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline]))),
+ <<"abcde
:B:ar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[multiline,trim]))),
-?line <<"abcde
+ <<"abcde
:B:ar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[multiline,{parts,2}]))),
-?line <<"abcde
+ <<"abcde
:B:ar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[multiline]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[dotall,trim]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[dotall,{parts,2}]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[dotall]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[dotall,
- trim]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[dotall,
- {parts,
- 2}]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[dotall]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[dotall,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[dotall,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[dotall]))),
-?line <<"abcde
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[dotall,
+ trim]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[dotall,
+ {parts,
+ 2}]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[dotall]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[dotall,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[dotall,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(.*X|^B)",[dotall]))),
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[dotall,trim]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[dotall,{parts,2}]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[dotall]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[multiline,dotall,trim]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[multiline,dotall,{parts,2}]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(.*X|^B)",[multiline,dotall]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
+ dotall,
+ trim]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
dotall,
- trim]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
- dotall,
- {parts,
- 2}]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
- dotall]))),
-?line <<"abcde
+ {parts,
+ 2}]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(.*X|^B)",[multiline,
+ dotall]))),
+ <<"abcde
:B:ar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[multiline,dotall,trim]))),
-?line <<"abcde
+ <<"abcde
:B:ar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[multiline,dotall,{parts,2}]))),
-?line <<"abcde
+ <<"abcde
:B:ar">> = iolist_to_binary(join(re:split("abcde
Bar","(.*X|^B)",[multiline,dotall]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(?s)(.*X|^B)",[trim]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(?s)(.*X|^B)",[{parts,2}]))),
-?line <<":abcde
+ <<":abcde
1234X:yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(?s)(.*X|^B)",[]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s)(.*X|^B)",[trim]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s)(.*X|^B)",[{parts,
- 2}]))),
-?line <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s)(.*X|^B)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s)(.*X|^B)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s)(.*X|^B)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s)(.*X|^B)",[]))),
-?line <<"abcde
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s)(.*X|^B)",[trim]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s)(.*X|^B)",[{parts,
+ 2}]))),
+ <<":B:arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s)(.*X|^B)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s)(.*X|^B)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s)(.*X|^B)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s)(.*X|^B)",[]))),
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(?s)(.*X|^B)",[trim]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(?s)(.*X|^B)",[{parts,2}]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(?s)(.*X|^B)",[]))),
-?line <<":yz">> = iolist_to_binary(join(re:split("abcde
+ <<":yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(?s:.*X|^B)",[trim]))),
-?line <<":yz">> = iolist_to_binary(join(re:split("abcde
+ <<":yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(?s:.*X|^B)",[{parts,2}]))),
-?line <<":yz">> = iolist_to_binary(join(re:split("abcde
+ <<":yz">> = iolist_to_binary(join(re:split("abcde
1234Xyz","(?s:.*X|^B)",[]))),
-?line <<":arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s:.*X|^B)",[trim]))),
-?line <<":arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s:.*X|^B)",[{parts,
- 2}]))),
-?line <<":arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s:.*X|^B)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s:.*X|^B)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s:.*X|^B)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s:.*X|^B)",[]))),
-?line <<"abcde
+ <<":arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s:.*X|^B)",[trim]))),
+ <<":arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s:.*X|^B)",[{parts,
+ 2}]))),
+ <<":arFoo">> = iolist_to_binary(join(re:split("BarFoo","(?s:.*X|^B)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s:.*X|^B)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s:.*X|^B)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s:.*X|^B)",[]))),
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(?s:.*X|^B)",[trim]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(?s:.*X|^B)",[{parts,2}]))),
-?line <<"abcde
+ <<"abcde
Bar">> = iolist_to_binary(join(re:split("abcde
Bar","(?s:.*X|^B)",[]))),
-?line <<"**** Failers">> = iolist_to_binary(join(re:split("**** Failers","^.*B",[trim]))),
-?line <<"**** Failers">> = iolist_to_binary(join(re:split("**** Failers","^.*B",[{parts,
- 2}]))),
-?line <<"**** Failers">> = iolist_to_binary(join(re:split("**** Failers","^.*B",[]))),
-?line <<"abc
+ <<"**** Failers">> = iolist_to_binary(join(re:split("**** Failers","^.*B",[trim]))),
+ <<"**** Failers">> = iolist_to_binary(join(re:split("**** Failers","^.*B",[{parts,
+ 2}]))),
+ <<"**** Failers">> = iolist_to_binary(join(re:split("**** Failers","^.*B",[]))),
+ <<"abc
B">> = iolist_to_binary(join(re:split("abc
B","^.*B",[trim]))),
-?line <<"abc
+ <<"abc
B">> = iolist_to_binary(join(re:split("abc
B","^.*B",[{parts,2}]))),
-?line <<"abc
+ <<"abc
B">> = iolist_to_binary(join(re:split("abc
B","^.*B",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc
+ <<"">> = iolist_to_binary(join(re:split("abc
B","(?s)^.*B",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc
+ <<":">> = iolist_to_binary(join(re:split("abc
B","(?s)^.*B",[{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc
+ <<":">> = iolist_to_binary(join(re:split("abc
B","(?s)^.*B",[]))),
-?line <<"abc
+ <<"abc
">> = iolist_to_binary(join(re:split("abc
B","(?m)^.*B",[trim]))),
-?line <<"abc
+ <<"abc
:">> = iolist_to_binary(join(re:split("abc
B","(?m)^.*B",[{parts,2}]))),
-?line <<"abc
+ <<"abc
:">> = iolist_to_binary(join(re:split("abc
B","(?m)^.*B",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc
+ <<"">> = iolist_to_binary(join(re:split("abc
B","(?ms)^.*B",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc
+ <<":">> = iolist_to_binary(join(re:split("abc
B","(?ms)^.*B",[{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc
+ <<":">> = iolist_to_binary(join(re:split("abc
B","(?ms)^.*B",[]))),
-?line <<"abc
+ <<"abc
">> = iolist_to_binary(join(re:split("abc
B","(?ms)^B",[trim]))),
-?line <<"abc
+ <<"abc
:">> = iolist_to_binary(join(re:split("abc
B","(?ms)^B",[{parts,2}]))),
-?line <<"abc
+ <<"abc
:">> = iolist_to_binary(join(re:split("abc
B","(?ms)^B",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("B","(?s)B$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("B","(?s)B$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("B","(?s)B$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcabcabcabc","^[abc]{12}",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[abc]{12}",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[abc]{12}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcabcabcabc","^[a-c]{12}",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[a-c]{12}",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[a-c]{12}",[]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abcabcabcabc","^(a|b|c){12}",[trim]))),
-?line <<":c:">> = iolist_to_binary(join(re:split("abcabcabcabc","^(a|b|c){12}",[{parts,
- 2}]))),
-?line <<":c:">> = iolist_to_binary(join(re:split("abcabcabcabc","^(a|b|c){12}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("n","^[abcdefghijklmnopqrstuvwxy0123456789]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("n","^[abcdefghijklmnopqrstuvwxy0123456789]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("n","^[abcdefghijklmnopqrstuvwxy0123456789]",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]",[]))),
-?line <<"z">> = iolist_to_binary(join(re:split("z","^[abcdefghijklmnopqrstuvwxy0123456789]",[trim]))),
-?line <<"z">> = iolist_to_binary(join(re:split("z","^[abcdefghijklmnopqrstuvwxy0123456789]",[{parts,
- 2}]))),
-?line <<"z">> = iolist_to_binary(join(re:split("z","^[abcdefghijklmnopqrstuvwxy0123456789]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","abcde{0,0}",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","abcde{0,0}",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","abcde{0,0}",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abcde{0,0}",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abcde{0,0}",[{parts,
+ ok.
+run10() ->
+ <<"">> = iolist_to_binary(join(re:split("B","(?s)B$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("B","(?s)B$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("B","(?s)B$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("123456654321","^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("123456654321","^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("123456654321","^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcabcabcabc","^[abc]{12}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[abc]{12}",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abcde{0,0}",[]))),
-?line <<"abce">> = iolist_to_binary(join(re:split("abce","abcde{0,0}",[trim]))),
-?line <<"abce">> = iolist_to_binary(join(re:split("abce","abcde{0,0}",[{parts,
- 2}]))),
-?line <<"abce">> = iolist_to_binary(join(re:split("abce","abcde{0,0}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abe","ab[cd]{0,0}e",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abe","ab[cd]{0,0}e",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abe","ab[cd]{0,0}e",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab[cd]{0,0}e",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab[cd]{0,0}e",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[abc]{12}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcabcabcabc","^[a-c]{12}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[a-c]{12}",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcabcabcabc","^[a-c]{12}",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("abcabcabcabc","^(a|b|c){12}",[trim]))),
+ <<":c:">> = iolist_to_binary(join(re:split("abcabcabcabc","^(a|b|c){12}",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab[cd]{0,0}e",[]))),
-?line <<"abcde">> = iolist_to_binary(join(re:split("abcde","ab[cd]{0,0}e",[trim]))),
-?line <<"abcde">> = iolist_to_binary(join(re:split("abcde","ab[cd]{0,0}e",[{parts,
- 2}]))),
-?line <<"abcde">> = iolist_to_binary(join(re:split("abcde","ab[cd]{0,0}e",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abd","ab(c){0,0}d",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abd","ab(c){0,0}d",[{parts,
+ <<":c:">> = iolist_to_binary(join(re:split("abcabcabcabc","^(a|b|c){12}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("n","^[abcdefghijklmnopqrstuvwxy0123456789]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("n","^[abcdefghijklmnopqrstuvwxy0123456789]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("n","^[abcdefghijklmnopqrstuvwxy0123456789]",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[abcdefghijklmnopqrstuvwxy0123456789]",[]))),
+ <<"z">> = iolist_to_binary(join(re:split("z","^[abcdefghijklmnopqrstuvwxy0123456789]",[trim]))),
+ <<"z">> = iolist_to_binary(join(re:split("z","^[abcdefghijklmnopqrstuvwxy0123456789]",[{parts,
+ 2}]))),
+ <<"z">> = iolist_to_binary(join(re:split("z","^[abcdefghijklmnopqrstuvwxy0123456789]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","abcde{0,0}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","abcde{0,0}",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","abcde{0,0}",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abcde{0,0}",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abcde{0,0}",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abcde{0,0}",[]))),
+ <<"abce">> = iolist_to_binary(join(re:split("abce","abcde{0,0}",[trim]))),
+ <<"abce">> = iolist_to_binary(join(re:split("abce","abcde{0,0}",[{parts,
+ 2}]))),
+ <<"abce">> = iolist_to_binary(join(re:split("abce","abcde{0,0}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abe","ab[cd]{0,0}e",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abe","ab[cd]{0,0}e",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abd","ab(c){0,0}d",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab(c){0,0}d",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab(c){0,0}d",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abe","ab[cd]{0,0}e",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab[cd]{0,0}e",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab[cd]{0,0}e",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab(c){0,0}d",[]))),
-?line <<"abcd">> = iolist_to_binary(join(re:split("abcd","ab(c){0,0}d",[trim]))),
-?line <<"abcd">> = iolist_to_binary(join(re:split("abcd","ab(c){0,0}d",[{parts,
- 2}]))),
-?line <<"abcd">> = iolist_to_binary(join(re:split("abcd","ab(c){0,0}d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a(b*)",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","a(b*)",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","a(b*)",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("ab","a(b*)",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","a(b*)",[{parts,
- 2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","a(b*)",[]))),
-?line <<":bbbb">> = iolist_to_binary(join(re:split("abbbb","a(b*)",[trim]))),
-?line <<":bbbb:">> = iolist_to_binary(join(re:split("abbbb","a(b*)",[{parts,
- 2}]))),
-?line <<":bbbb:">> = iolist_to_binary(join(re:split("abbbb","a(b*)",[]))),
-?line <<"*** F::ilers">> = iolist_to_binary(join(re:split("*** Failers","a(b*)",[trim]))),
-?line <<"*** F::ilers">> = iolist_to_binary(join(re:split("*** Failers","a(b*)",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab[cd]{0,0}e",[]))),
+ <<"abcde">> = iolist_to_binary(join(re:split("abcde","ab[cd]{0,0}e",[trim]))),
+ <<"abcde">> = iolist_to_binary(join(re:split("abcde","ab[cd]{0,0}e",[{parts,
2}]))),
-?line <<"*** F::ilers">> = iolist_to_binary(join(re:split("*** Failers","a(b*)",[]))),
-?line <<"bbbbb">> = iolist_to_binary(join(re:split("bbbbb","a(b*)",[trim]))),
-?line <<"bbbbb">> = iolist_to_binary(join(re:split("bbbbb","a(b*)",[{parts,
- 2}]))),
-?line <<"bbbbb">> = iolist_to_binary(join(re:split("bbbbb","a(b*)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abe","ab\\d{0}e",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abe","ab\\d{0}e",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abe","ab\\d{0}e",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab\\d{0}e",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab\\d{0}e",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab\\d{0}e",[]))),
-?line <<"ab1e">> = iolist_to_binary(join(re:split("ab1e","ab\\d{0}e",[trim]))),
-?line <<"ab1e">> = iolist_to_binary(join(re:split("ab1e","ab\\d{0}e",[{parts,
- 2}]))),
-?line <<"ab1e">> = iolist_to_binary(join(re:split("ab1e","ab\\d{0}e",[]))),
-?line <<"the :quick: brown fox">> = iolist_to_binary(join(re:split("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"",[trim]))),
-?line <<"the :quick: brown fox">> = iolist_to_binary(join(re:split("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"",[{parts,
- 2}]))),
-?line <<"the :quick: brown fox">> = iolist_to_binary(join(re:split("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"",[]))),
-?line <<": brown fox">> = iolist_to_binary(join(re:split("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"",[trim]))),
-?line <<": brown fox:">> = iolist_to_binary(join(re:split("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"",[{parts,
- 2}]))),
-?line <<": brown fox:">> = iolist_to_binary(join(re:split("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"",[]))),
-?line <<"a:b:c">> = iolist_to_binary(join(re:split("abc","",[trim]))),
-?line <<"a:bc">> = iolist_to_binary(join(re:split("abc","",[{parts,
- 2}]))),
-?line <<"a:b:c:">> = iolist_to_binary(join(re:split("abc","",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("acb","a[^a]b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[{parts,
+ <<"abcde">> = iolist_to_binary(join(re:split("abcde","ab[cd]{0,0}e",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abd","ab(c){0,0}d",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("abd","ab(c){0,0}d",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("abd","ab(c){0,0}d",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab(c){0,0}d",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab(c){0,0}d",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab(c){0,0}d",[]))),
+ <<"abcd">> = iolist_to_binary(join(re:split("abcd","ab(c){0,0}d",[trim]))),
+ <<"abcd">> = iolist_to_binary(join(re:split("abcd","ab(c){0,0}d",[{parts,
+ 2}]))),
+ <<"abcd">> = iolist_to_binary(join(re:split("abcd","ab(c){0,0}d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a(b*)",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","a(b*)",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","a(b*)",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("ab","a(b*)",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","a(b*)",[{parts,
+ 2}]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","a(b*)",[]))),
+ <<":bbbb">> = iolist_to_binary(join(re:split("abbbb","a(b*)",[trim]))),
+ <<":bbbb:">> = iolist_to_binary(join(re:split("abbbb","a(b*)",[{parts,
+ 2}]))),
+ <<":bbbb:">> = iolist_to_binary(join(re:split("abbbb","a(b*)",[]))),
+ <<"*** F::ilers">> = iolist_to_binary(join(re:split("*** Failers","a(b*)",[trim]))),
+ <<"*** F::ilers">> = iolist_to_binary(join(re:split("*** Failers","a(b*)",[{parts,
+ 2}]))),
+ <<"*** F::ilers">> = iolist_to_binary(join(re:split("*** Failers","a(b*)",[]))),
+ <<"bbbbb">> = iolist_to_binary(join(re:split("bbbbb","a(b*)",[trim]))),
+ <<"bbbbb">> = iolist_to_binary(join(re:split("bbbbb","a(b*)",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a
+ <<"bbbbb">> = iolist_to_binary(join(re:split("bbbbb","a(b*)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abe","ab\\d{0}e",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abe","ab\\d{0}e",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abe","ab\\d{0}e",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab\\d{0}e",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab\\d{0}e",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab\\d{0}e",[]))),
+ <<"ab1e">> = iolist_to_binary(join(re:split("ab1e","ab\\d{0}e",[trim]))),
+ <<"ab1e">> = iolist_to_binary(join(re:split("ab1e","ab\\d{0}e",[{parts,
+ 2}]))),
+ <<"ab1e">> = iolist_to_binary(join(re:split("ab1e","ab\\d{0}e",[]))),
+ <<"the :quick: brown fox">> = iolist_to_binary(join(re:split("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"",[trim]))),
+ <<"the :quick: brown fox">> = iolist_to_binary(join(re:split("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"",[{parts,
+ 2}]))),
+ <<"the :quick: brown fox">> = iolist_to_binary(join(re:split("the \"quick\" brown fox","\"([^\\\\\"]+|\\\\.)*\"",[]))),
+ <<": brown fox">> = iolist_to_binary(join(re:split("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"",[trim]))),
+ <<": brown fox:">> = iolist_to_binary(join(re:split("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"",[{parts,
+ 2}]))),
+ <<": brown fox:">> = iolist_to_binary(join(re:split("\"the \\\"quick\\\" brown fox\"","\"([^\\\\\"]+|\\\\.)*\"",[]))),
+ <<"a:b:c">> = iolist_to_binary(join(re:split("abc","",[trim]))),
+ <<"a:bc">> = iolist_to_binary(join(re:split("abc","",[{parts,
+ 2}]))),
+ <<"a:b:c:">> = iolist_to_binary(join(re:split("abc","",[]))),
+ <<"">> = iolist_to_binary(join(re:split("acb","a[^a]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a
b","a[^a]b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","a[^a]b",[{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","a[^a]b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("acb","a.b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a.b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a.b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.b",[]))),
-?line <<"a
+ <<"">> = iolist_to_binary(join(re:split("acb","a.b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a.b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a.b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.b",[]))),
+ <<"a
b">> = iolist_to_binary(join(re:split("a
b","a.b",[trim]))),
-?line <<"a
+ <<"a
b">> = iolist_to_binary(join(re:split("a
b","a.b",[{parts,2}]))),
-?line <<"a
+ <<"a
b">> = iolist_to_binary(join(re:split("a
b","a.b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("acb","a[^a]b",[dotall,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[dotall,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[dotall]))),
-?line <<"">> = iolist_to_binary(join(re:split("a
+ <<"">> = iolist_to_binary(join(re:split("acb","a[^a]b",[dotall,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[dotall,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a[^a]b",[dotall]))),
+ <<"">> = iolist_to_binary(join(re:split("a
b","a[^a]b",[dotall,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","a[^a]b",[dotall,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","a[^a]b",[dotall]))),
-?line <<"">> = iolist_to_binary(join(re:split("acb","a.b",[dotall,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a.b",[dotall,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("acb","a.b",[dotall]))),
-?line <<"">> = iolist_to_binary(join(re:split("a
+ <<"">> = iolist_to_binary(join(re:split("acb","a.b",[dotall,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a.b",[dotall,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("acb","a.b",[dotall]))),
+ <<"">> = iolist_to_binary(join(re:split("a
b","a.b",[dotall,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","a.b",[dotall,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a
+ <<":">> = iolist_to_binary(join(re:split("a
b","a.b",[dotall]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[{parts,
+ ok.
+run11() ->
+ <<":a">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+?|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbbac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbbac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+?|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbbbac","^(b+?|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+?|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbbbac","^(b+?|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+?|a){1,2}?c",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+?|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+?|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}?c",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bac","^(b+|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbac","^(b+|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbac","^(b+|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbac","^(b+|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbbac","^(b+|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbac","^(b+|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbbac","^(b+|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+|a){1,2}?c",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+|a){1,2}?c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("bbbbbac","^(b+|a){1,2}?c",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+|a){1,2}?c",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbac","^(b+|a){1,2}?c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("bbbbbac","^(b+|a){1,2}?c",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+|a){1,2}?c",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+|a){1,2}?c",[]))),
-?line <<"x
+ <<":a:">> = iolist_to_binary(join(re:split("bbbbbac","^(b+|a){1,2}?c",[]))),
+ <<"x
b">> = iolist_to_binary(join(re:split("x
b","(?!\\A)x",[multiline,trim]))),
-?line <<"x
+ <<"x
b">> = iolist_to_binary(join(re:split("x
b","(?!\\A)x",[multiline,{parts,2}]))),
-?line <<"x
+ <<"x
b">> = iolist_to_binary(join(re:split("x
b","(?!\\A)x",[multiline]))),
-?line <<"a">> = iolist_to_binary(join(re:split("ax","(?!\\A)x",[multiline,
- trim]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("ax","(?!\\A)x",[multiline,
- {parts,
- 2}]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("ax","(?!\\A)x",[multiline]))),
-?line <<"{ab}">> = iolist_to_binary(join(re:split("{ab}","\\x0{ab}",[trim]))),
-?line <<"{ab}">> = iolist_to_binary(join(re:split("{ab}","\\x0{ab}",[{parts,
- 2}]))),
-?line <<"{ab}">> = iolist_to_binary(join(re:split("{ab}","\\x0{ab}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("CD","(A|B)*?CD",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*?CD",[{parts,
+ <<"a">> = iolist_to_binary(join(re:split("ax","(?!\\A)x",[multiline,
+ trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("ax","(?!\\A)x",[multiline,
+ {parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*?CD",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("CD","(A|B)*CD",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*CD",[{parts,
+ <<"a:">> = iolist_to_binary(join(re:split("ax","(?!\\A)x",[multiline]))),
+ <<"{ab}">> = iolist_to_binary(join(re:split("{ab}","\\x0{ab}",[trim]))),
+ <<"{ab}">> = iolist_to_binary(join(re:split("{ab}","\\x0{ab}",[{parts,
+ 2}]))),
+ <<"{ab}">> = iolist_to_binary(join(re:split("{ab}","\\x0{ab}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("CD","(A|B)*?CD",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*?CD",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*CD",[]))),
-?line <<":AB:AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*?\\1",[trim]))),
-?line <<":AB:AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*?\\1",[{parts,
- 2}]))),
-?line <<":AB:AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*?\\1",[]))),
-?line <<":AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*\\1",[trim]))),
-?line <<":AB:">> = iolist_to_binary(join(re:split("ABABAB","(AB)*\\1",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*?CD",[]))),
+ <<"">> = iolist_to_binary(join(re:split("CD","(A|B)*CD",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*CD",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("CD","(A|B)*CD",[]))),
+ <<":AB:AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*?\\1",[trim]))),
+ <<":AB:AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*?\\1",[{parts,
2}]))),
-?line <<":AB:">> = iolist_to_binary(join(re:split("ABABAB","(AB)*\\1",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("foo","(?<!bar)foo",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("foo","(?<!bar)foo",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("foo","(?<!bar)foo",[]))),
-?line <<"cat:d">> = iolist_to_binary(join(re:split("catfood","(?<!bar)foo",[trim]))),
-?line <<"cat:d">> = iolist_to_binary(join(re:split("catfood","(?<!bar)foo",[{parts,
+ <<":AB:AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*?\\1",[]))),
+ <<":AB">> = iolist_to_binary(join(re:split("ABABAB","(AB)*\\1",[trim]))),
+ <<":AB:">> = iolist_to_binary(join(re:split("ABABAB","(AB)*\\1",[{parts,
+ 2}]))),
+ <<":AB:">> = iolist_to_binary(join(re:split("ABABAB","(AB)*\\1",[]))),
+ <<"">> = iolist_to_binary(join(re:split("foo","(?<!bar)foo",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("foo","(?<!bar)foo",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("foo","(?<!bar)foo",[]))),
+ <<"cat:d">> = iolist_to_binary(join(re:split("catfood","(?<!bar)foo",[trim]))),
+ <<"cat:d">> = iolist_to_binary(join(re:split("catfood","(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"cat:d">> = iolist_to_binary(join(re:split("catfood","(?<!bar)foo",[]))),
+ <<"ar:tle">> = iolist_to_binary(join(re:split("arfootle","(?<!bar)foo",[trim]))),
+ <<"ar:tle">> = iolist_to_binary(join(re:split("arfootle","(?<!bar)foo",[{parts,
2}]))),
-?line <<"cat:d">> = iolist_to_binary(join(re:split("catfood","(?<!bar)foo",[]))),
-?line <<"ar:tle">> = iolist_to_binary(join(re:split("arfootle","(?<!bar)foo",[trim]))),
-?line <<"ar:tle">> = iolist_to_binary(join(re:split("arfootle","(?<!bar)foo",[{parts,
+ <<"ar:tle">> = iolist_to_binary(join(re:split("arfootle","(?<!bar)foo",[]))),
+ <<"r:sh">> = iolist_to_binary(join(re:split("rfoosh","(?<!bar)foo",[trim]))),
+ <<"r:sh">> = iolist_to_binary(join(re:split("rfoosh","(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"r:sh">> = iolist_to_binary(join(re:split("rfoosh","(?<!bar)foo",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<!bar)foo",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<!bar)foo",[]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<!bar)foo",[trim]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<!bar)foo",[]))),
+ <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","(?<!bar)foo",[trim]))),
+ <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","(?<!bar)foo",[{parts,
2}]))),
-?line <<"ar:tle">> = iolist_to_binary(join(re:split("arfootle","(?<!bar)foo",[]))),
-?line <<"r:sh">> = iolist_to_binary(join(re:split("rfoosh","(?<!bar)foo",[trim]))),
-?line <<"r:sh">> = iolist_to_binary(join(re:split("rfoosh","(?<!bar)foo",[{parts,
- 2}]))),
-?line <<"r:sh">> = iolist_to_binary(join(re:split("rfoosh","(?<!bar)foo",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<!bar)foo",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<!bar)foo",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<!bar)foo",[]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<!bar)foo",[trim]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<!bar)foo",[{parts,
- 2}]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<!bar)foo",[]))),
-?line <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","(?<!bar)foo",[trim]))),
-?line <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","(?<!bar)foo",[{parts,
+ <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","(?<!bar)foo",[]))),
+ <<":d">> = iolist_to_binary(join(re:split("catfood","\\w{3}(?<!bar)foo",[trim]))),
+ <<":d">> = iolist_to_binary(join(re:split("catfood","\\w{3}(?<!bar)foo",[{parts,
+ 2}]))),
+ <<":d">> = iolist_to_binary(join(re:split("catfood","\\w{3}(?<!bar)foo",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\w{3}(?<!bar)foo",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\w{3}(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\w{3}(?<!bar)foo",[]))),
+ <<"foo">> = iolist_to_binary(join(re:split("foo","\\w{3}(?<!bar)foo",[trim]))),
+ <<"foo">> = iolist_to_binary(join(re:split("foo","\\w{3}(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"foo">> = iolist_to_binary(join(re:split("foo","\\w{3}(?<!bar)foo",[]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","\\w{3}(?<!bar)foo",[trim]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","\\w{3}(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","\\w{3}(?<!bar)foo",[]))),
+ <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","\\w{3}(?<!bar)foo",[trim]))),
+ <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","\\w{3}(?<!bar)foo",[{parts,
+ 2}]))),
+ <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","\\w{3}(?<!bar)foo",[]))),
+ <<"fooa:foo">> = iolist_to_binary(join(re:split("fooabar","(?<=(foo)a)bar",[trim]))),
+ <<"fooa:foo:">> = iolist_to_binary(join(re:split("fooabar","(?<=(foo)a)bar",[{parts,
2}]))),
-?line <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","(?<!bar)foo",[]))),
-?line <<":d">> = iolist_to_binary(join(re:split("catfood","\\w{3}(?<!bar)foo",[trim]))),
-?line <<":d">> = iolist_to_binary(join(re:split("catfood","\\w{3}(?<!bar)foo",[{parts,
- 2}]))),
-?line <<":d">> = iolist_to_binary(join(re:split("catfood","\\w{3}(?<!bar)foo",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\w{3}(?<!bar)foo",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\w{3}(?<!bar)foo",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\w{3}(?<!bar)foo",[]))),
-?line <<"foo">> = iolist_to_binary(join(re:split("foo","\\w{3}(?<!bar)foo",[trim]))),
-?line <<"foo">> = iolist_to_binary(join(re:split("foo","\\w{3}(?<!bar)foo",[{parts,
+ <<"fooa:foo:">> = iolist_to_binary(join(re:split("fooabar","(?<=(foo)a)bar",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo)a)bar",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo)a)bar",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo)a)bar",[]))),
+ <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=(foo)a)bar",[trim]))),
+ <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=(foo)a)bar",[{parts,
+ 2}]))),
+ <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=(foo)a)bar",[]))),
+ <<"foobbar">> = iolist_to_binary(join(re:split("foobbar","(?<=(foo)a)bar",[trim]))),
+ <<"foobbar">> = iolist_to_binary(join(re:split("foobbar","(?<=(foo)a)bar",[{parts,
+ 2}]))),
+ <<"foobbar">> = iolist_to_binary(join(re:split("foobbar","(?<=(foo)a)bar",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\z",[multiline,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\z",[multiline,
+ {parts,
2}]))),
-?line <<"foo">> = iolist_to_binary(join(re:split("foo","\\w{3}(?<!bar)foo",[]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","\\w{3}(?<!bar)foo",[trim]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","\\w{3}(?<!bar)foo",[{parts,
- 2}]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","\\w{3}(?<!bar)foo",[]))),
-?line <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","\\w{3}(?<!bar)foo",[trim]))),
-?line <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","\\w{3}(?<!bar)foo",[{parts,
- 2}]))),
-?line <<"towbarfoo">> = iolist_to_binary(join(re:split("towbarfoo","\\w{3}(?<!bar)foo",[]))),
-?line <<"fooa:foo">> = iolist_to_binary(join(re:split("fooabar","(?<=(foo)a)bar",[trim]))),
-?line <<"fooa:foo:">> = iolist_to_binary(join(re:split("fooabar","(?<=(foo)a)bar",[{parts,
- 2}]))),
-?line <<"fooa:foo:">> = iolist_to_binary(join(re:split("fooabar","(?<=(foo)a)bar",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo)a)bar",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo)a)bar",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo)a)bar",[]))),
-?line <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=(foo)a)bar",[trim]))),
-?line <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=(foo)a)bar",[{parts,
- 2}]))),
-?line <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=(foo)a)bar",[]))),
-?line <<"foobbar">> = iolist_to_binary(join(re:split("foobbar","(?<=(foo)a)bar",[trim]))),
-?line <<"foobbar">> = iolist_to_binary(join(re:split("foobbar","(?<=(foo)a)bar",[{parts,
- 2}]))),
-?line <<"foobbar">> = iolist_to_binary(join(re:split("foobbar","(?<=(foo)a)bar",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\z",[multiline,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\z",[multiline,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\z",[multiline]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline]))),
-?line <<"qqq
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc\\z",[multiline]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc\\z",[multiline]))),
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","\\Aabc\\z",[multiline,trim]))),
-?line <<"qqq
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","\\Aabc\\z",[multiline,{parts,2}]))),
-?line <<"qqq
+ <<"qqq
abc">> = iolist_to_binary(join(re:split("qqq
abc","\\Aabc\\z",[multiline]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","\\Aabc\\z",[multiline,trim]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","\\Aabc\\z",[multiline,{parts,2}]))),
-?line <<"abc
+ <<"abc
zzz">> = iolist_to_binary(join(re:split("abc
zzz","\\Aabc\\z",[multiline]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","\\Aabc\\z",[multiline,trim]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","\\Aabc\\z",[multiline,{parts,2}]))),
-?line <<"qqq
+ <<"qqq
abc
zzz">> = iolist_to_binary(join(re:split("qqq
abc
zzz","\\Aabc\\z",[multiline]))),
-?line <<"1:.23">> = iolist_to_binary(join(re:split("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
-?line <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
- 2}]))),
-?line <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
-?line <<"1:.875">> = iolist_to_binary(join(re:split("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
-?line <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
- 2}]))),
-?line <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
-?line <<"1.235">> = iolist_to_binary(join(re:split("1.235","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
-?line <<"1.235">> = iolist_to_binary(join(re:split("1.235","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
- 2}]))),
-?line <<"1.235">> = iolist_to_binary(join(re:split("1.235","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
-?line <<":party">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$",[trim]))),
-?line <<":party:">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$",[{parts,
- 2}]))),
-?line <<":party:">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((?>\\w+)|(?>\\s+))*$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((?>\\w+)|(?>\\s+))*$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((?>\\w+)|(?>\\s+))*$",[]))),
-?line <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$",[trim]))),
-?line <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$",[{parts,
- 2}]))),
-?line <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$",[]))),
-?line <<":12345:a">> = iolist_to_binary(join(re:split("12345a","(\\d+)(\\w)",[trim]))),
-?line <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","(\\d+)(\\w)",[{parts,
- 2}]))),
-?line <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","(\\d+)(\\w)",[]))),
-?line <<":1234:5:+">> = iolist_to_binary(join(re:split("12345+","(\\d+)(\\w)",[trim]))),
-?line <<":1234:5:+">> = iolist_to_binary(join(re:split("12345+","(\\d+)(\\w)",[{parts,
- 2}]))),
-?line <<":1234:5:+">> = iolist_to_binary(join(re:split("12345+","(\\d+)(\\w)",[]))),
-?line <<":12345:a">> = iolist_to_binary(join(re:split("12345a","((?>\\d+))(\\w)",[trim]))),
-?line <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","((?>\\d+))(\\w)",[{parts,
- 2}]))),
-?line <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","((?>\\d+))(\\w)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?>\\d+))(\\w)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?>\\d+))(\\w)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?>\\d+))(\\w)",[]))),
-?line <<"12345+">> = iolist_to_binary(join(re:split("12345+","((?>\\d+))(\\w)",[trim]))),
-?line <<"12345+">> = iolist_to_binary(join(re:split("12345+","((?>\\d+))(\\w)",[{parts,
- 2}]))),
-?line <<"12345+">> = iolist_to_binary(join(re:split("12345+","((?>\\d+))(\\w)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[]))),
-?line <<":aaab">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[trim]))),
-?line <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[{parts,
- 2}]))),
-?line <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[]))),
-?line <<":aaa">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[trim]))),
-?line <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[{parts,
- 2}]))),
-?line <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[]))),
-?line <<"aaa:ccc">> = iolist_to_binary(join(re:split("aaabbbccc","(?>b)+",[trim]))),
-?line <<"aaa:ccc">> = iolist_to_binary(join(re:split("aaabbbccc","(?>b)+",[{parts,
- 2}]))),
-?line <<"aaa:ccc">> = iolist_to_binary(join(re:split("aaabbbccc","(?>b)+",[]))),
-?line <<"::::d">> = iolist_to_binary(join(re:split("aaabbbbccccd","(?>a+|b+|c+)*c",[trim]))),
-?line <<":cccd">> = iolist_to_binary(join(re:split("aaabbbbccccd","(?>a+|b+|c+)*c",[{parts,
+ <<"1:.23">> = iolist_to_binary(join(re:split("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
+ <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
+ 2}]))),
+ <<"1:.23:">> = iolist_to_binary(join(re:split("1.230003938","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
+ <<"1:.875">> = iolist_to_binary(join(re:split("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
+ <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
+ 2}]))),
+ <<"1:.875:">> = iolist_to_binary(join(re:split("1.875000282","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
+ <<"1.235">> = iolist_to_binary(join(re:split("1.235","(?>(\\.\\d\\d[1-9]?))\\d+",[trim]))),
+ <<"1.235">> = iolist_to_binary(join(re:split("1.235","(?>(\\.\\d\\d[1-9]?))\\d+",[{parts,
+ 2}]))),
+ <<"1.235">> = iolist_to_binary(join(re:split("1.235","(?>(\\.\\d\\d[1-9]?))\\d+",[]))),
+ <<":party">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$",[trim]))),
+ <<":party:">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$",[{parts,
+ 2}]))),
+ <<":party:">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^((?>\\w+)|(?>\\s+))*$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((?>\\w+)|(?>\\s+))*$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((?>\\w+)|(?>\\s+))*$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((?>\\w+)|(?>\\s+))*$",[]))),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$",[trim]))),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$",[{parts,
+ 2}]))),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^((?>\\w+)|(?>\\s+))*$",[]))),
+ <<":12345:a">> = iolist_to_binary(join(re:split("12345a","(\\d+)(\\w)",[trim]))),
+ <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","(\\d+)(\\w)",[{parts,
+ 2}]))),
+ <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","(\\d+)(\\w)",[]))),
+ <<":1234:5:+">> = iolist_to_binary(join(re:split("12345+","(\\d+)(\\w)",[trim]))),
+ <<":1234:5:+">> = iolist_to_binary(join(re:split("12345+","(\\d+)(\\w)",[{parts,
+ 2}]))),
+ <<":1234:5:+">> = iolist_to_binary(join(re:split("12345+","(\\d+)(\\w)",[]))),
+ <<":12345:a">> = iolist_to_binary(join(re:split("12345a","((?>\\d+))(\\w)",[trim]))),
+ <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","((?>\\d+))(\\w)",[{parts,
+ 2}]))),
+ <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","((?>\\d+))(\\w)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?>\\d+))(\\w)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?>\\d+))(\\w)",[{parts,
2}]))),
-?line <<"::::d">> = iolist_to_binary(join(re:split("aaabbbbccccd","(?>a+|b+|c+)*c",[]))),
-?line <<"((:x">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[trim]))),
-?line <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[{parts,
- 2}]))),
-?line <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
-?line <<":xyz">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
-?line <<":xyz:">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
- 2}]))),
-?line <<":xyz:">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
-?line <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
-?line <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
- 2}]))),
-?line <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","a(?-i)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","a(?-i)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","a(?-i)b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("Ab","a(?-i)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Ab","a(?-i)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Ab","a(?-i)b",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?-i)b",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?-i)b",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?-i)b",[caseless]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","a(?-i)b",[caseless,
- trim]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","a(?-i)b",[caseless,
- {parts,
- 2}]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","a(?-i)b",[caseless]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","a(?-i)b",[caseless,
- trim]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","a(?-i)b",[caseless,
- {parts,
- 2}]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","a(?-i)b",[caseless]))),
-?line <<":a bc">> = iolist_to_binary(join(re:split("a bcd e","(a (?x)b c)d e",[trim]))),
-?line <<":a bc:">> = iolist_to_binary(join(re:split("a bcd e","(a (?x)b c)d e",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?>\\d+))(\\w)",[]))),
+ <<"12345+">> = iolist_to_binary(join(re:split("12345+","((?>\\d+))(\\w)",[trim]))),
+ <<"12345+">> = iolist_to_binary(join(re:split("12345+","((?>\\d+))(\\w)",[{parts,
2}]))),
-?line <<":a bc:">> = iolist_to_binary(join(re:split("a bcd e","(a (?x)b c)d e",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a (?x)b c)d e",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a (?x)b c)d e",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a (?x)b c)d e",[]))),
-?line <<"a b cd e">> = iolist_to_binary(join(re:split("a b cd e","(a (?x)b c)d e",[trim]))),
-?line <<"a b cd e">> = iolist_to_binary(join(re:split("a b cd e","(a (?x)b c)d e",[{parts,
- 2}]))),
-?line <<"a b cd e">> = iolist_to_binary(join(re:split("a b cd e","(a (?x)b c)d e",[]))),
-?line <<"abcd e">> = iolist_to_binary(join(re:split("abcd e","(a (?x)b c)d e",[trim]))),
-?line <<"abcd e">> = iolist_to_binary(join(re:split("abcd e","(a (?x)b c)d e",[{parts,
- 2}]))),
-?line <<"abcd e">> = iolist_to_binary(join(re:split("abcd e","(a (?x)b c)d e",[]))),
-?line <<"a bcde">> = iolist_to_binary(join(re:split("a bcde","(a (?x)b c)d e",[trim]))),
-?line <<"a bcde">> = iolist_to_binary(join(re:split("a bcde","(a (?x)b c)d e",[{parts,
- 2}]))),
-?line <<"a bcde">> = iolist_to_binary(join(re:split("a bcde","(a (?x)b c)d e",[]))),
-?line <<":a bcde f">> = iolist_to_binary(join(re:split("a bcde f","(a b(?x)c d (?-x)e f)",[trim]))),
-?line <<":a bcde f:">> = iolist_to_binary(join(re:split("a bcde f","(a b(?x)c d (?-x)e f)",[{parts,
- 2}]))),
-?line <<":a bcde f:">> = iolist_to_binary(join(re:split("a bcde f","(a b(?x)c d (?-x)e f)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a b(?x)c d (?-x)e f)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a b(?x)c d (?-x)e f)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a b(?x)c d (?-x)e f)",[]))),
-?line <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","(a b(?x)c d (?-x)e f)",[trim]))),
-?line <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","(a b(?x)c d (?-x)e f)",[{parts,
- 2}]))),
-?line <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","(a b(?x)c d (?-x)e f)",[]))),
-?line <<":ab">> = iolist_to_binary(join(re:split("abc","(a(?i)b)c",[trim]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("abc","(a(?i)b)c",[{parts,
+ <<"12345+">> = iolist_to_binary(join(re:split("12345+","((?>\\d+))(\\w)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[]))),
+ <<":aaab">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[trim]))),
+ <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[{parts,
2}]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("abc","(a(?i)b)c",[]))),
-?line <<":aB">> = iolist_to_binary(join(re:split("aBc","(a(?i)b)c",[trim]))),
-?line <<":aB:">> = iolist_to_binary(join(re:split("aBc","(a(?i)b)c",[{parts,
+ <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[]))),
+ ok.
+run12() ->
+ <<":aaa">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[trim]))),
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[{parts,
2}]))),
-?line <<":aB:">> = iolist_to_binary(join(re:split("aBc","(a(?i)b)c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)b)c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)b)c",[{parts,
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[]))),
+ <<"aaa:ccc">> = iolist_to_binary(join(re:split("aaabbbccc","(?>b)+",[trim]))),
+ <<"aaa:ccc">> = iolist_to_binary(join(re:split("aaabbbccc","(?>b)+",[{parts,
+ 2}]))),
+ <<"aaa:ccc">> = iolist_to_binary(join(re:split("aaabbbccc","(?>b)+",[]))),
+ <<"::::d">> = iolist_to_binary(join(re:split("aaabbbbccccd","(?>a+|b+|c+)*c",[trim]))),
+ <<":cccd">> = iolist_to_binary(join(re:split("aaabbbbccccd","(?>a+|b+|c+)*c",[{parts,
+ 2}]))),
+ <<"::::d">> = iolist_to_binary(join(re:split("aaabbbbccccd","(?>a+|b+|c+)*c",[]))),
+ <<"((:x">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[trim]))),
+ <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[{parts,
+ 2}]))),
+ <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("(abc)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
+ <<":xyz">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[trim]))),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(((?>[^()]+)|\\([^()]+\\))+\\)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","a(?-i)b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","a(?-i)b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","a(?-i)b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("Ab","a(?-i)b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("Ab","a(?-i)b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("Ab","a(?-i)b",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?-i)b",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?-i)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?-i)b",[caseless]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","a(?-i)b",[caseless,
+ trim]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","a(?-i)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","a(?-i)b",[caseless]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","a(?-i)b",[caseless,
+ trim]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","a(?-i)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","a(?-i)b",[caseless]))),
+ <<":a bc">> = iolist_to_binary(join(re:split("a bcd e","(a (?x)b c)d e",[trim]))),
+ <<":a bc:">> = iolist_to_binary(join(re:split("a bcd e","(a (?x)b c)d e",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)b)c",[]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","(a(?i)b)c",[trim]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","(a(?i)b)c",[{parts,
- 2}]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","(a(?i)b)c",[]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","(a(?i)b)c",[trim]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","(a(?i)b)c",[{parts,
- 2}]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","(a(?i)b)c",[]))),
-?line <<"Abc">> = iolist_to_binary(join(re:split("Abc","(a(?i)b)c",[trim]))),
-?line <<"Abc">> = iolist_to_binary(join(re:split("Abc","(a(?i)b)c",[{parts,
- 2}]))),
-?line <<"Abc">> = iolist_to_binary(join(re:split("Abc","(a(?i)b)c",[]))),
-?line <<"ABc">> = iolist_to_binary(join(re:split("ABc","(a(?i)b)c",[trim]))),
-?line <<"ABc">> = iolist_to_binary(join(re:split("ABc","(a(?i)b)c",[{parts,
- 2}]))),
-?line <<"ABc">> = iolist_to_binary(join(re:split("ABc","(a(?i)b)c",[]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","(a(?i)b)c",[trim]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","(a(?i)b)c",[{parts,
- 2}]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","(a(?i)b)c",[]))),
-?line <<"AbC">> = iolist_to_binary(join(re:split("AbC","(a(?i)b)c",[trim]))),
-?line <<"AbC">> = iolist_to_binary(join(re:split("AbC","(a(?i)b)c",[{parts,
- 2}]))),
-?line <<"AbC">> = iolist_to_binary(join(re:split("AbC","(a(?i)b)c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","a(?i:b)c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","a(?i:b)c",[{parts,
+ <<":a bc:">> = iolist_to_binary(join(re:split("a bcd e","(a (?x)b c)d e",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a (?x)b c)d e",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a (?x)b c)d e",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a (?x)b c)d e",[]))),
+ <<"a b cd e">> = iolist_to_binary(join(re:split("a b cd e","(a (?x)b c)d e",[trim]))),
+ <<"a b cd e">> = iolist_to_binary(join(re:split("a b cd e","(a (?x)b c)d e",[{parts,
+ 2}]))),
+ <<"a b cd e">> = iolist_to_binary(join(re:split("a b cd e","(a (?x)b c)d e",[]))),
+ <<"abcd e">> = iolist_to_binary(join(re:split("abcd e","(a (?x)b c)d e",[trim]))),
+ <<"abcd e">> = iolist_to_binary(join(re:split("abcd e","(a (?x)b c)d e",[{parts,
+ 2}]))),
+ <<"abcd e">> = iolist_to_binary(join(re:split("abcd e","(a (?x)b c)d e",[]))),
+ <<"a bcde">> = iolist_to_binary(join(re:split("a bcde","(a (?x)b c)d e",[trim]))),
+ <<"a bcde">> = iolist_to_binary(join(re:split("a bcde","(a (?x)b c)d e",[{parts,
+ 2}]))),
+ <<"a bcde">> = iolist_to_binary(join(re:split("a bcde","(a (?x)b c)d e",[]))),
+ <<":a bcde f">> = iolist_to_binary(join(re:split("a bcde f","(a b(?x)c d (?-x)e f)",[trim]))),
+ <<":a bcde f:">> = iolist_to_binary(join(re:split("a bcde f","(a b(?x)c d (?-x)e f)",[{parts,
+ 2}]))),
+ <<":a bcde f:">> = iolist_to_binary(join(re:split("a bcde f","(a b(?x)c d (?-x)e f)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a b(?x)c d (?-x)e f)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a b(?x)c d (?-x)e f)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a b(?x)c d (?-x)e f)",[]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","(a b(?x)c d (?-x)e f)",[trim]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","(a b(?x)c d (?-x)e f)",[{parts,
+ 2}]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","(a b(?x)c d (?-x)e f)",[]))),
+ <<":ab">> = iolist_to_binary(join(re:split("abc","(a(?i)b)c",[trim]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("abc","(a(?i)b)c",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","a(?i:b)c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aBc","a(?i:b)c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)c",[{parts,
+ <<":ab:">> = iolist_to_binary(join(re:split("abc","(a(?i)b)c",[]))),
+ <<":aB">> = iolist_to_binary(join(re:split("aBc","(a(?i)b)c",[trim]))),
+ <<":aB:">> = iolist_to_binary(join(re:split("aBc","(a(?i)b)c",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)c",[{parts,
+ <<":aB:">> = iolist_to_binary(join(re:split("aBc","(a(?i)b)c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)b)c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)b)c",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)c",[]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","a(?i:b)c",[trim]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","a(?i:b)c",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)b)c",[]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","(a(?i)b)c",[trim]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","(a(?i)b)c",[{parts,
+ 2}]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","(a(?i)b)c",[]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","(a(?i)b)c",[trim]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","(a(?i)b)c",[{parts,
+ 2}]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","(a(?i)b)c",[]))),
+ <<"Abc">> = iolist_to_binary(join(re:split("Abc","(a(?i)b)c",[trim]))),
+ <<"Abc">> = iolist_to_binary(join(re:split("Abc","(a(?i)b)c",[{parts,
2}]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","a(?i:b)c",[]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","a(?i:b)c",[trim]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","a(?i:b)c",[{parts,
+ <<"Abc">> = iolist_to_binary(join(re:split("Abc","(a(?i)b)c",[]))),
+ <<"ABc">> = iolist_to_binary(join(re:split("ABc","(a(?i)b)c",[trim]))),
+ <<"ABc">> = iolist_to_binary(join(re:split("ABc","(a(?i)b)c",[{parts,
2}]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","a(?i:b)c",[]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)c",[trim]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)c",[{parts,
+ <<"ABc">> = iolist_to_binary(join(re:split("ABc","(a(?i)b)c",[]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","(a(?i)b)c",[trim]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","(a(?i)b)c",[{parts,
+ 2}]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","(a(?i)b)c",[]))),
+ <<"AbC">> = iolist_to_binary(join(re:split("AbC","(a(?i)b)c",[trim]))),
+ <<"AbC">> = iolist_to_binary(join(re:split("AbC","(a(?i)b)c",[{parts,
+ 2}]))),
+ <<"AbC">> = iolist_to_binary(join(re:split("AbC","(a(?i)b)c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","a(?i:b)c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","a(?i:b)c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","a(?i:b)c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aBc","a(?i:b)c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)c",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)c",[]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","a(?i:b)c",[trim]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","a(?i:b)c",[{parts,
+ 2}]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","a(?i:b)c",[]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","a(?i:b)c",[trim]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","a(?i:b)c",[{parts,
+ 2}]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","a(?i:b)c",[]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)c",[trim]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)c",[{parts,
+ 2}]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aBc","a(?i:b)*c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)*c",[{parts,
2}]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aBc","a(?i:b)*c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)*c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)*c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aBBc","a(?i:b)*c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aBBc","a(?i:b)*c",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBc","a(?i:b)*c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aBBc","a(?i:b)*c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBBc","a(?i:b)*c",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBBc","a(?i:b)*c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)*c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)*c",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)*c",[]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)*c",[trim]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)*c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aBBc","a(?i:b)*c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)*c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)*c",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?i:b)*c",[]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)*c",[trim]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)*c",[{parts,
+ 2}]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)*c",[]))),
+ <<"aBBC">> = iolist_to_binary(join(re:split("aBBC","a(?i:b)*c",[trim]))),
+ <<"aBBC">> = iolist_to_binary(join(re:split("aBBC","a(?i:b)*c",[{parts,
2}]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","a(?i:b)*c",[]))),
-?line <<"aBBC">> = iolist_to_binary(join(re:split("aBBC","a(?i:b)*c",[trim]))),
-?line <<"aBBC">> = iolist_to_binary(join(re:split("aBBC","a(?i:b)*c",[{parts,
- 2}]))),
-?line <<"aBBC">> = iolist_to_binary(join(re:split("aBBC","a(?i:b)*c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","a(?=b(?i)c)\\w\\wd",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","a(?=b(?i)c)\\w\\wd",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","a(?=b(?i)c)\\w\\wd",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abCd","a(?=b(?i)c)\\w\\wd",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abCd","a(?=b(?i)c)\\w\\wd",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abCd","a(?=b(?i)c)\\w\\wd",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?=b(?i)c)\\w\\wd",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?=b(?i)c)\\w\\wd",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?=b(?i)c)\\w\\wd",[]))),
-?line <<"aBCd">> = iolist_to_binary(join(re:split("aBCd","a(?=b(?i)c)\\w\\wd",[trim]))),
-?line <<"aBCd">> = iolist_to_binary(join(re:split("aBCd","a(?=b(?i)c)\\w\\wd",[{parts,
- 2}]))),
-?line <<"aBCd">> = iolist_to_binary(join(re:split("aBCd","a(?=b(?i)c)\\w\\wd",[]))),
-?line <<"abcD">> = iolist_to_binary(join(re:split("abcD","a(?=b(?i)c)\\w\\wd",[trim]))),
-?line <<"abcD">> = iolist_to_binary(join(re:split("abcD","a(?=b(?i)c)\\w\\wd",[{parts,
- 2}]))),
-?line <<"abcD">> = iolist_to_binary(join(re:split("abcD","a(?=b(?i)c)\\w\\wd",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("more than million","(?s-i:more.*than).*million",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than million","(?s-i:more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than million","(?s-i:more.*than).*million",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("more than MILLION","(?s-i:more.*than).*million",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?s-i:more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?s-i:more.*than).*million",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("more
+ <<"aBBC">> = iolist_to_binary(join(re:split("aBBC","a(?i:b)*c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","a(?=b(?i)c)\\w\\wd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","a(?=b(?i)c)\\w\\wd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","a(?=b(?i)c)\\w\\wd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abCd","a(?=b(?i)c)\\w\\wd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abCd","a(?=b(?i)c)\\w\\wd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abCd","a(?=b(?i)c)\\w\\wd",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?=b(?i)c)\\w\\wd",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?=b(?i)c)\\w\\wd",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?=b(?i)c)\\w\\wd",[]))),
+ <<"aBCd">> = iolist_to_binary(join(re:split("aBCd","a(?=b(?i)c)\\w\\wd",[trim]))),
+ <<"aBCd">> = iolist_to_binary(join(re:split("aBCd","a(?=b(?i)c)\\w\\wd",[{parts,
+ 2}]))),
+ <<"aBCd">> = iolist_to_binary(join(re:split("aBCd","a(?=b(?i)c)\\w\\wd",[]))),
+ <<"abcD">> = iolist_to_binary(join(re:split("abcD","a(?=b(?i)c)\\w\\wd",[trim]))),
+ <<"abcD">> = iolist_to_binary(join(re:split("abcD","a(?=b(?i)c)\\w\\wd",[{parts,
+ 2}]))),
+ <<"abcD">> = iolist_to_binary(join(re:split("abcD","a(?=b(?i)c)\\w\\wd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("more than million","(?s-i:more.*than).*million",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("more than million","(?s-i:more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("more than million","(?s-i:more.*than).*million",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("more than MILLION","(?s-i:more.*than).*million",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?s-i:more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?s-i:more.*than).*million",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("more
than Million","(?s-i:more.*than).*million",[caseless,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("more
+ <<":">> = iolist_to_binary(join(re:split("more
than Million","(?s-i:more.*than).*million",[caseless,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("more
+ <<":">> = iolist_to_binary(join(re:split("more
than Million","(?s-i:more.*than).*million",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s-i:more.*than).*million",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s-i:more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s-i:more.*than).*million",[caseless]))),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?s-i:more.*than).*million",[caseless,
- trim]))),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?s-i:more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?s-i:more.*than).*million",[caseless]))),
-?line <<"more
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s-i:more.*than).*million",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s-i:more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?s-i:more.*than).*million",[caseless]))),
+ <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?s-i:more.*than).*million",[caseless,
+ trim]))),
+ <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?s-i:more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?s-i:more.*than).*million",[caseless]))),
+ <<"more
than
million">> = iolist_to_binary(join(re:split("more
than
million","(?s-i:more.*than).*million",[caseless,trim]))),
-?line <<"more
+ <<"more
than
million">> = iolist_to_binary(join(re:split("more
than
million","(?s-i:more.*than).*million",[caseless,{parts,2}]))),
-?line <<"more
+ <<"more
than
million">> = iolist_to_binary(join(re:split("more
than
million","(?s-i:more.*than).*million",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("more than million","(?:(?s-i)more.*than).*million",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than million","(?:(?s-i)more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than million","(?:(?s-i)more.*than).*million",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("more than MILLION","(?:(?s-i)more.*than).*million",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?:(?s-i)more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?:(?s-i)more.*than).*million",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("more
+ <<"">> = iolist_to_binary(join(re:split("more than million","(?:(?s-i)more.*than).*million",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("more than million","(?:(?s-i)more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("more than million","(?:(?s-i)more.*than).*million",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("more than MILLION","(?:(?s-i)more.*than).*million",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?:(?s-i)more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("more than MILLION","(?:(?s-i)more.*than).*million",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("more
than Million","(?:(?s-i)more.*than).*million",[caseless,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("more
+ <<":">> = iolist_to_binary(join(re:split("more
than Million","(?:(?s-i)more.*than).*million",[caseless,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("more
+ <<":">> = iolist_to_binary(join(re:split("more
than Million","(?:(?s-i)more.*than).*million",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?s-i)more.*than).*million",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?s-i)more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?s-i)more.*than).*million",[caseless]))),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?:(?s-i)more.*than).*million",[caseless,
- trim]))),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?:(?s-i)more.*than).*million",[caseless,
- {parts,
- 2}]))),
-?line <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?:(?s-i)more.*than).*million",[caseless]))),
-?line <<"more
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?s-i)more.*than).*million",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?s-i)more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?s-i)more.*than).*million",[caseless]))),
+ <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?:(?s-i)more.*than).*million",[caseless,
+ trim]))),
+ <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?:(?s-i)more.*than).*million",[caseless,
+ {parts,
+ 2}]))),
+ <<"MORE THAN MILLION">> = iolist_to_binary(join(re:split("MORE THAN MILLION","(?:(?s-i)more.*than).*million",[caseless]))),
+ <<"more
than
million">> = iolist_to_binary(join(re:split("more
than
million","(?:(?s-i)more.*than).*million",[caseless,trim]))),
-?line <<"more
+ <<"more
than
million">> = iolist_to_binary(join(re:split("more
than
million","(?:(?s-i)more.*than).*million",[caseless,{parts,2}]))),
-?line <<"more
+ <<"more
than
million">> = iolist_to_binary(join(re:split("more
than
million","(?:(?s-i)more.*than).*million",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","(?>a(?i)b+)+c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","(?>a(?i)b+)+c",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("abc","(?>a(?i)b+)+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?>a(?i)b+)+c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?>a(?i)b+)+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aBbc","(?>a(?i)b+)+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aBbc","(?>a(?i)b+)+c",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","(?>a(?i)b+)+c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aBbc","(?>a(?i)b+)+c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBbc","(?>a(?i)b+)+c",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBbc","(?>a(?i)b+)+c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aBBc","(?>a(?i)b+)+c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBBc","(?>a(?i)b+)+c",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBBc","(?>a(?i)b+)+c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>a(?i)b+)+c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>a(?i)b+)+c",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>a(?i)b+)+c",[]))),
-?line <<"Abc">> = iolist_to_binary(join(re:split("Abc","(?>a(?i)b+)+c",[trim]))),
-?line <<"Abc">> = iolist_to_binary(join(re:split("Abc","(?>a(?i)b+)+c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aBbc","(?>a(?i)b+)+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aBBc","(?>a(?i)b+)+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aBBc","(?>a(?i)b+)+c",[{parts,
2}]))),
-?line <<"Abc">> = iolist_to_binary(join(re:split("Abc","(?>a(?i)b+)+c",[]))),
-?line <<"abAb">> = iolist_to_binary(join(re:split("abAb","(?>a(?i)b+)+c",[trim]))),
-?line <<"abAb">> = iolist_to_binary(join(re:split("abAb","(?>a(?i)b+)+c",[{parts,
- 2}]))),
-?line <<"abAb">> = iolist_to_binary(join(re:split("abAb","(?>a(?i)b+)+c",[]))),
-?line <<"abbC">> = iolist_to_binary(join(re:split("abbC","(?>a(?i)b+)+c",[trim]))),
-?line <<"abbC">> = iolist_to_binary(join(re:split("abbC","(?>a(?i)b+)+c",[{parts,
- 2}]))),
-?line <<"abbC">> = iolist_to_binary(join(re:split("abbC","(?>a(?i)b+)+c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","(?=a(?i)b)\\w\\wc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","(?=a(?i)b)\\w\\wc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","(?=a(?i)b)\\w\\wc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aBc","(?=a(?i)b)\\w\\wc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBc","(?=a(?i)b)\\w\\wc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aBc","(?=a(?i)b)\\w\\wc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=a(?i)b)\\w\\wc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=a(?i)b)\\w\\wc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=a(?i)b)\\w\\wc",[]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?=a(?i)b)\\w\\wc",[trim]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?=a(?i)b)\\w\\wc",[{parts,
- 2}]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?=a(?i)b)\\w\\wc",[]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","(?=a(?i)b)\\w\\wc",[trim]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","(?=a(?i)b)\\w\\wc",[{parts,
- 2}]))),
-?line <<"abC">> = iolist_to_binary(join(re:split("abC","(?=a(?i)b)\\w\\wc",[]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","(?=a(?i)b)\\w\\wc",[trim]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","(?=a(?i)b)\\w\\wc",[{parts,
- 2}]))),
-?line <<"aBC">> = iolist_to_binary(join(re:split("aBC","(?=a(?i)b)\\w\\wc",[]))),
-?line <<"ab:xx">> = iolist_to_binary(join(re:split("abxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
-?line <<"ab:xx:">> = iolist_to_binary(join(re:split("abxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
- 2}]))),
-?line <<"ab:xx:">> = iolist_to_binary(join(re:split("abxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
-?line <<"aB:xx">> = iolist_to_binary(join(re:split("aBxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
-?line <<"aB:xx:">> = iolist_to_binary(join(re:split("aBxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
- 2}]))),
-?line <<"aB:xx:">> = iolist_to_binary(join(re:split("aBxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a(?i)b)(\\w\\w)c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a(?i)b)(\\w\\w)c",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a(?i)b)(\\w\\w)c",[]))),
-?line <<"Abxxc">> = iolist_to_binary(join(re:split("Abxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
-?line <<"Abxxc">> = iolist_to_binary(join(re:split("Abxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
- 2}]))),
-?line <<"Abxxc">> = iolist_to_binary(join(re:split("Abxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
-?line <<"ABxxc">> = iolist_to_binary(join(re:split("ABxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
-?line <<"ABxxc">> = iolist_to_binary(join(re:split("ABxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
- 2}]))),
-?line <<"ABxxc">> = iolist_to_binary(join(re:split("ABxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
-?line <<"abxxC">> = iolist_to_binary(join(re:split("abxxC","(?<=a(?i)b)(\\w\\w)c",[trim]))),
-?line <<"abxxC">> = iolist_to_binary(join(re:split("abxxC","(?<=a(?i)b)(\\w\\w)c",[{parts,
- 2}]))),
-?line <<"abxxC">> = iolist_to_binary(join(re:split("abxxC","(?<=a(?i)b)(\\w\\w)c",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aA","(?:(a)|b)(?(1)A|B)",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aA","(?:(a)|b)(?(1)A|B)",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aBBc","(?>a(?i)b+)+c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>a(?i)b+)+c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>a(?i)b+)+c",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>a(?i)b+)+c",[]))),
+ <<"Abc">> = iolist_to_binary(join(re:split("Abc","(?>a(?i)b+)+c",[trim]))),
+ <<"Abc">> = iolist_to_binary(join(re:split("Abc","(?>a(?i)b+)+c",[{parts,
+ 2}]))),
+ <<"Abc">> = iolist_to_binary(join(re:split("Abc","(?>a(?i)b+)+c",[]))),
+ <<"abAb">> = iolist_to_binary(join(re:split("abAb","(?>a(?i)b+)+c",[trim]))),
+ <<"abAb">> = iolist_to_binary(join(re:split("abAb","(?>a(?i)b+)+c",[{parts,
+ 2}]))),
+ <<"abAb">> = iolist_to_binary(join(re:split("abAb","(?>a(?i)b+)+c",[]))),
+ <<"abbC">> = iolist_to_binary(join(re:split("abbC","(?>a(?i)b+)+c",[trim]))),
+ <<"abbC">> = iolist_to_binary(join(re:split("abbC","(?>a(?i)b+)+c",[{parts,
+ 2}]))),
+ <<"abbC">> = iolist_to_binary(join(re:split("abbC","(?>a(?i)b+)+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","(?=a(?i)b)\\w\\wc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?=a(?i)b)\\w\\wc",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aA","(?:(a)|b)(?(1)A|B)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("bB","(?:(a)|b)(?(1)A|B)",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bB","(?:(a)|b)(?(1)A|B)",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abc","(?=a(?i)b)\\w\\wc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aBc","(?=a(?i)b)\\w\\wc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aBc","(?=a(?i)b)\\w\\wc",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bB","(?:(a)|b)(?(1)A|B)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(a)|b)(?(1)A|B)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(a)|b)(?(1)A|B)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(a)|b)(?(1)A|B)",[]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(a)|b)(?(1)A|B)",[trim]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(a)|b)(?(1)A|B)",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aBc","(?=a(?i)b)\\w\\wc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=a(?i)b)\\w\\wc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=a(?i)b)\\w\\wc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?=a(?i)b)\\w\\wc",[]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?=a(?i)b)\\w\\wc",[trim]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?=a(?i)b)\\w\\wc",[{parts,
+ 2}]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?=a(?i)b)\\w\\wc",[]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","(?=a(?i)b)\\w\\wc",[trim]))),
+ <<"abC">> = iolist_to_binary(join(re:split("abC","(?=a(?i)b)\\w\\wc",[{parts,
2}]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(a)|b)(?(1)A|B)",[]))),
-?line <<"bA">> = iolist_to_binary(join(re:split("bA","(?:(a)|b)(?(1)A|B)",[trim]))),
-?line <<"bA">> = iolist_to_binary(join(re:split("bA","(?:(a)|b)(?(1)A|B)",[{parts,
+ <<"abC">> = iolist_to_binary(join(re:split("abC","(?=a(?i)b)\\w\\wc",[]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","(?=a(?i)b)\\w\\wc",[trim]))),
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","(?=a(?i)b)\\w\\wc",[{parts,
2}]))),
-?line <<"bA">> = iolist_to_binary(join(re:split("bA","(?:(a)|b)(?(1)A|B)",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aa","^(a)?(?(1)a|b)+$",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aa","^(a)?(?(1)a|b)+$",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aa","^(a)?(?(1)a|b)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^(a)?(?(1)a|b)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a)?(?(1)a|b)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","^(a)?(?(1)a|b)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("bb","^(a)?(?(1)a|b)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bb","^(a)?(?(1)a|b)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bb","^(a)?(?(1)a|b)+$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a)?(?(1)a|b)+$",[trim]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a)?(?(1)a|b)+$",[{parts,
- 2}]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","^(a)?(?(1)a|b)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
+ <<"aBC">> = iolist_to_binary(join(re:split("aBC","(?=a(?i)b)\\w\\wc",[]))),
+ <<"ab:xx">> = iolist_to_binary(join(re:split("abxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
+ <<"ab:xx:">> = iolist_to_binary(join(re:split("abxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
+ 2}]))),
+ <<"ab:xx:">> = iolist_to_binary(join(re:split("abxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
+ <<"aB:xx">> = iolist_to_binary(join(re:split("aBxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
+ <<"aB:xx:">> = iolist_to_binary(join(re:split("aBxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
+ 2}]))),
+ <<"aB:xx:">> = iolist_to_binary(join(re:split("aBxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a(?i)b)(\\w\\w)c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a(?i)b)(\\w\\w)c",[{parts,
2}]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a(?i)b)(\\w\\w)c",[]))),
+ <<"Abxxc">> = iolist_to_binary(join(re:split("Abxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
+ <<"Abxxc">> = iolist_to_binary(join(re:split("Abxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
+ 2}]))),
+ <<"Abxxc">> = iolist_to_binary(join(re:split("Abxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
+ <<"ABxxc">> = iolist_to_binary(join(re:split("ABxxc","(?<=a(?i)b)(\\w\\w)c",[trim]))),
+ <<"ABxxc">> = iolist_to_binary(join(re:split("ABxxc","(?<=a(?i)b)(\\w\\w)c",[{parts,
+ 2}]))),
+ <<"ABxxc">> = iolist_to_binary(join(re:split("ABxxc","(?<=a(?i)b)(\\w\\w)c",[]))),
+ <<"abxxC">> = iolist_to_binary(join(re:split("abxxC","(?<=a(?i)b)(\\w\\w)c",[trim]))),
+ <<"abxxC">> = iolist_to_binary(join(re:split("abxxC","(?<=a(?i)b)(\\w\\w)c",[{parts,
+ 2}]))),
+ <<"abxxC">> = iolist_to_binary(join(re:split("abxxC","(?<=a(?i)b)(\\w\\w)c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aA","(?:(a)|b)(?(1)A|B)",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aA","(?:(a)|b)(?(1)A|B)",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aA","(?:(a)|b)(?(1)A|B)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bB","(?:(a)|b)(?(1)A|B)",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("bB","(?:(a)|b)(?(1)A|B)",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("bB","(?:(a)|b)(?(1)A|B)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(a)|b)(?(1)A|B)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(a)|b)(?(1)A|B)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(a)|b)(?(1)A|B)",[]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(a)|b)(?(1)A|B)",[trim]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(a)|b)(?(1)A|B)",[{parts,
+ 2}]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(a)|b)(?(1)A|B)",[]))),
+ <<"bA">> = iolist_to_binary(join(re:split("bA","(?:(a)|b)(?(1)A|B)",[trim]))),
+ <<"bA">> = iolist_to_binary(join(re:split("bA","(?:(a)|b)(?(1)A|B)",[{parts,
+ 2}]))),
+ <<"bA">> = iolist_to_binary(join(re:split("bA","(?:(a)|b)(?(1)A|B)",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aa","^(a)?(?(1)a|b)+$",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aa","^(a)?(?(1)a|b)+$",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aa","^(a)?(?(1)a|b)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^(a)?(?(1)a|b)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a)?(?(1)a|b)+$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","^(a)?(?(1)a|b)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bb","^(a)?(?(1)a|b)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("bb","^(a)?(?(1)a|b)+$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("bb","^(a)?(?(1)a|b)+$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a)?(?(1)a|b)+$",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a)?(?(1)a|b)+$",[{parts,
+ 2}]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(a)?(?(1)a|b)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
2}]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("12","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
- 2}]))),
-?line <<"123">> = iolist_to_binary(join(re:split("123","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
+ <<"123">> = iolist_to_binary(join(re:split("123","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$",[trim]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$",[{parts,
+ 2}]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?=abc)\\w{3}:|\\d\\d)$",[]))),
+ ok.
+run13() ->
+ <<"">> = iolist_to_binary(join(re:split("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
2}]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
-?line <<"foo">> = iolist_to_binary(join(re:split("foobar","(?(?<=foo)bar|cat)",[trim]))),
-?line <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<=foo)bar|cat)",[{parts,
- 2}]))),
-?line <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<=foo)bar|cat)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("cat","(?(?<=foo)bar|cat)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("cat","(?(?<=foo)bar|cat)",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abc:","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("12","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
+ 2}]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$",[trim]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$",[{parts,
+ 2}]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","^(?(?!abc)\\d\\d|\\w{3}:)$",[]))),
+ <<"foo">> = iolist_to_binary(join(re:split("foobar","(?(?<=foo)bar|cat)",[trim]))),
+ <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<=foo)bar|cat)",[{parts,
+ 2}]))),
+ <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<=foo)bar|cat)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("cat","(?(?<=foo)bar|cat)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("cat","(?(?<=foo)bar|cat)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("cat","(?(?<=foo)bar|cat)",[]))),
+ <<"f">> = iolist_to_binary(join(re:split("fcat","(?(?<=foo)bar|cat)",[trim]))),
+ <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<=foo)bar|cat)",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("cat","(?(?<=foo)bar|cat)",[]))),
-?line <<"f">> = iolist_to_binary(join(re:split("fcat","(?(?<=foo)bar|cat)",[trim]))),
-?line <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<=foo)bar|cat)",[{parts,
+ <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<=foo)bar|cat)",[]))),
+ <<"fo">> = iolist_to_binary(join(re:split("focat","(?(?<=foo)bar|cat)",[trim]))),
+ <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<=foo)bar|cat)",[{parts,
2}]))),
-?line <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<=foo)bar|cat)",[]))),
-?line <<"fo">> = iolist_to_binary(join(re:split("focat","(?(?<=foo)bar|cat)",[trim]))),
-?line <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<=foo)bar|cat)",[{parts,
+ <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<=foo)bar|cat)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<=foo)bar|cat)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<=foo)bar|cat)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<=foo)bar|cat)",[]))),
+ <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<=foo)bar|cat)",[trim]))),
+ <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<=foo)bar|cat)",[{parts,
2}]))),
-?line <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<=foo)bar|cat)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<=foo)bar|cat)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<=foo)bar|cat)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<=foo)bar|cat)",[]))),
-?line <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<=foo)bar|cat)",[trim]))),
-?line <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<=foo)bar|cat)",[{parts,
- 2}]))),
-?line <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<=foo)bar|cat)",[]))),
-?line <<"foo">> = iolist_to_binary(join(re:split("foobar","(?(?<!foo)cat|bar)",[trim]))),
-?line <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<!foo)cat|bar)",[{parts,
- 2}]))),
-?line <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<!foo)cat|bar)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("cat","(?(?<!foo)cat|bar)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("cat","(?(?<!foo)cat|bar)",[{parts,
+ <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<=foo)bar|cat)",[]))),
+ <<"foo">> = iolist_to_binary(join(re:split("foobar","(?(?<!foo)cat|bar)",[trim]))),
+ <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<!foo)cat|bar)",[{parts,
+ 2}]))),
+ <<"foo:">> = iolist_to_binary(join(re:split("foobar","(?(?<!foo)cat|bar)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("cat","(?(?<!foo)cat|bar)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("cat","(?(?<!foo)cat|bar)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("cat","(?(?<!foo)cat|bar)",[]))),
+ <<"f">> = iolist_to_binary(join(re:split("fcat","(?(?<!foo)cat|bar)",[trim]))),
+ <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<!foo)cat|bar)",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("cat","(?(?<!foo)cat|bar)",[]))),
-?line <<"f">> = iolist_to_binary(join(re:split("fcat","(?(?<!foo)cat|bar)",[trim]))),
-?line <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<!foo)cat|bar)",[{parts,
+ <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<!foo)cat|bar)",[]))),
+ <<"fo">> = iolist_to_binary(join(re:split("focat","(?(?<!foo)cat|bar)",[trim]))),
+ <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<!foo)cat|bar)",[{parts,
2}]))),
-?line <<"f:">> = iolist_to_binary(join(re:split("fcat","(?(?<!foo)cat|bar)",[]))),
-?line <<"fo">> = iolist_to_binary(join(re:split("focat","(?(?<!foo)cat|bar)",[trim]))),
-?line <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<!foo)cat|bar)",[{parts,
+ <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<!foo)cat|bar)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<!foo)cat|bar)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<!foo)cat|bar)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<!foo)cat|bar)",[]))),
+ <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<!foo)cat|bar)",[trim]))),
+ <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<!foo)cat|bar)",[{parts,
2}]))),
-?line <<"fo:">> = iolist_to_binary(join(re:split("focat","(?(?<!foo)cat|bar)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<!foo)cat|bar)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<!foo)cat|bar)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?<!foo)cat|bar)",[]))),
-?line <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<!foo)cat|bar)",[trim]))),
-?line <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<!foo)cat|bar)",[{parts,
- 2}]))),
-?line <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<!foo)cat|bar)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- {parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
-?line <<":(">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- trim]))),
-?line <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- {parts,
- 2}]))),
-?line <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
-?line <<":::(">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- trim]))),
-?line <<"::(abcd) fox">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- {parts,
- 2}]))),
-?line <<":::(:::">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
-?line <<"(">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- trim]))),
-?line <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
- {parts,
- 2}]))),
-?line <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<"foocat">> = iolist_to_binary(join(re:split("foocat","(?(?<!foo)cat|bar)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
-?line <<":(">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
+ <<":(">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
trim]))),
-?line <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
{parts,
2}]))),
-?line <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
-?line <<":::(">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
+ <<":::(">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
trim]))),
-?line <<"::(abcd) fox">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<"::(abcd) fox">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
{parts,
2}]))),
-?line <<":::(:::">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
-?line <<"(">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<":::(:::">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
+ <<"(">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
trim]))),
-?line <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended,
{parts,
2}]))),
-?line <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
-?line <<":1:2">> = iolist_to_binary(join(re:split("12","^(?(2)a|(1)(2))+$",[trim]))),
-?line <<":1:2:">> = iolist_to_binary(join(re:split("12","^(?(2)a|(1)(2))+$",[{parts,
+ <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) |) ",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ {parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
+ <<":(">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ trim]))),
+ <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ {parts,
+ 2}]))),
+ <<":(:">> = iolist_to_binary(join(re:split("(abcd)","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
+ <<":::(">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ trim]))),
+ <<"::(abcd) fox">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ {parts,
+ 2}]))),
+ <<":::(:::">> = iolist_to_binary(join(re:split("the quick (abcd) fox","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
+ <<"(">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ trim]))),
+ <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended,
+ {parts,
+ 2}]))),
+ <<"(::">> = iolist_to_binary(join(re:split("(abcd","( \\( )? [^()]+ (?(1) \\) ) ",[extended]))),
+ <<":1:2">> = iolist_to_binary(join(re:split("12","^(?(2)a|(1)(2))+$",[trim]))),
+ <<":1:2:">> = iolist_to_binary(join(re:split("12","^(?(2)a|(1)(2))+$",[{parts,
+ 2}]))),
+ <<":1:2:">> = iolist_to_binary(join(re:split("12","^(?(2)a|(1)(2))+$",[]))),
+ <<":1:2">> = iolist_to_binary(join(re:split("12a","^(?(2)a|(1)(2))+$",[trim]))),
+ <<":1:2:">> = iolist_to_binary(join(re:split("12a","^(?(2)a|(1)(2))+$",[{parts,
2}]))),
-?line <<":1:2:">> = iolist_to_binary(join(re:split("12","^(?(2)a|(1)(2))+$",[]))),
-?line <<":1:2">> = iolist_to_binary(join(re:split("12a","^(?(2)a|(1)(2))+$",[trim]))),
-?line <<":1:2:">> = iolist_to_binary(join(re:split("12a","^(?(2)a|(1)(2))+$",[{parts,
+ <<":1:2:">> = iolist_to_binary(join(re:split("12a","^(?(2)a|(1)(2))+$",[]))),
+ <<":1:2">> = iolist_to_binary(join(re:split("12aa","^(?(2)a|(1)(2))+$",[trim]))),
+ <<":1:2:">> = iolist_to_binary(join(re:split("12aa","^(?(2)a|(1)(2))+$",[{parts,
2}]))),
-?line <<":1:2:">> = iolist_to_binary(join(re:split("12a","^(?(2)a|(1)(2))+$",[]))),
-?line <<":1:2">> = iolist_to_binary(join(re:split("12aa","^(?(2)a|(1)(2))+$",[trim]))),
-?line <<":1:2:">> = iolist_to_binary(join(re:split("12aa","^(?(2)a|(1)(2))+$",[{parts,
- 2}]))),
-?line <<":1:2:">> = iolist_to_binary(join(re:split("12aa","^(?(2)a|(1)(2))+$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(2)a|(1)(2))+$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(2)a|(1)(2))+$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(2)a|(1)(2))+$",[]))),
-?line <<"1234">> = iolist_to_binary(join(re:split("1234","^(?(2)a|(1)(2))+$",[trim]))),
-?line <<"1234">> = iolist_to_binary(join(re:split("1234","^(?(2)a|(1)(2))+$",[{parts,
- 2}]))),
-?line <<"1234">> = iolist_to_binary(join(re:split("1234","^(?(2)a|(1)(2))+$",[]))),
-?line <<":blah">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+\\1",[trim]))),
-?line <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+\\1",[]))),
-?line <<":BLAH">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+\\1",[trim]))),
-?line <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+\\1",[]))),
-?line <<":Blah">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+\\1",[trim]))),
-?line <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+\\1",[]))),
-?line <<":blaH">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+\\1",[trim]))),
-?line <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+\\1",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)blah)\\s+\\1",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)blah)\\s+\\1",[]))),
-?line <<"blah BLAH">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+\\1",[trim]))),
-?line <<"blah BLAH">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<"blah BLAH">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+\\1",[]))),
-?line <<"Blah blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+\\1",[trim]))),
-?line <<"Blah blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<"Blah blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+\\1",[]))),
-?line <<"blaH blah">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+\\1",[trim]))),
-?line <<"blaH blah">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+\\1",[{parts,
- 2}]))),
-?line <<"blaH blah">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+\\1",[]))),
-?line <<":blah">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
-?line <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+(?i:\\1)",[{parts,
- 2}]))),
-?line <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+(?i:\\1)",[]))),
-?line <<":BLAH">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+(?i:\\1)",[trim]))),
-?line <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+(?i:\\1)",[{parts,
- 2}]))),
-?line <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+(?i:\\1)",[]))),
-?line <<":Blah">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
-?line <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+(?i:\\1)",[{parts,
- 2}]))),
-?line <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+(?i:\\1)",[]))),
-?line <<":blaH">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+(?i:\\1)",[trim]))),
-?line <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+(?i:\\1)",[{parts,
- 2}]))),
-?line <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+(?i:\\1)",[]))),
-?line <<":blah">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+(?i:\\1)",[trim]))),
-?line <<":blah:">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+(?i:\\1)",[{parts,
- 2}]))),
-?line <<":blah:">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+(?i:\\1)",[]))),
-?line <<":Blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
-?line <<":Blah:">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+(?i:\\1)",[{parts,
- 2}]))),
-?line <<":Blah:">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+(?i:\\1)",[]))),
-?line <<":blaH">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
-?line <<":blaH:">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+(?i:\\1)",[{parts,
- 2}]))),
-?line <<":blaH:">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+(?i:\\1)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","(?>a*)*",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[{parts,
+ <<":1:2:">> = iolist_to_binary(join(re:split("12aa","^(?(2)a|(1)(2))+$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(2)a|(1)(2))+$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(2)a|(1)(2))+$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?(2)a|(1)(2))+$",[]))),
+ <<"1234">> = iolist_to_binary(join(re:split("1234","^(?(2)a|(1)(2))+$",[trim]))),
+ <<"1234">> = iolist_to_binary(join(re:split("1234","^(?(2)a|(1)(2))+$",[{parts,
+ 2}]))),
+ <<"1234">> = iolist_to_binary(join(re:split("1234","^(?(2)a|(1)(2))+$",[]))),
+ <<":blah">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+\\1",[trim]))),
+ <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+\\1",[]))),
+ <<":BLAH">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+\\1",[trim]))),
+ <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+\\1",[]))),
+ <<":Blah">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+\\1",[trim]))),
+ <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+\\1",[]))),
+ <<":blaH">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+\\1",[trim]))),
+ <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+\\1",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)blah)\\s+\\1",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)blah)\\s+\\1",[]))),
+ <<"blah BLAH">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+\\1",[trim]))),
+ <<"blah BLAH">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<"blah BLAH">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+\\1",[]))),
+ <<"Blah blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+\\1",[trim]))),
+ <<"Blah blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<"Blah blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+\\1",[]))),
+ <<"blaH blah">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+\\1",[trim]))),
+ <<"blaH blah">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+\\1",[{parts,
+ 2}]))),
+ <<"blaH blah">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+\\1",[]))),
+ <<":blah">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
+ <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+(?i:\\1)",[{parts,
+ 2}]))),
+ <<":blah:">> = iolist_to_binary(join(re:split("blah blah","((?i)blah)\\s+(?i:\\1)",[]))),
+ <<":BLAH">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+(?i:\\1)",[trim]))),
+ <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+(?i:\\1)",[{parts,
+ 2}]))),
+ <<":BLAH:">> = iolist_to_binary(join(re:split("BLAH BLAH","((?i)blah)\\s+(?i:\\1)",[]))),
+ <<":Blah">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
+ <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+(?i:\\1)",[{parts,
+ 2}]))),
+ <<":Blah:">> = iolist_to_binary(join(re:split("Blah Blah","((?i)blah)\\s+(?i:\\1)",[]))),
+ <<":blaH">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+(?i:\\1)",[trim]))),
+ <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+(?i:\\1)",[{parts,
+ 2}]))),
+ <<":blaH:">> = iolist_to_binary(join(re:split("blaH blaH","((?i)blah)\\s+(?i:\\1)",[]))),
+ <<":blah">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+(?i:\\1)",[trim]))),
+ <<":blah:">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+(?i:\\1)",[{parts,
+ 2}]))),
+ <<":blah:">> = iolist_to_binary(join(re:split("blah BLAH","((?i)blah)\\s+(?i:\\1)",[]))),
+ <<":Blah">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
+ <<":Blah:">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+(?i:\\1)",[{parts,
+ 2}]))),
+ <<":Blah:">> = iolist_to_binary(join(re:split("Blah blah","((?i)blah)\\s+(?i:\\1)",[]))),
+ <<":blaH">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+(?i:\\1)",[trim]))),
+ <<":blaH:">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+(?i:\\1)",[{parts,
+ 2}]))),
+ <<":blaH:">> = iolist_to_binary(join(re:split("blaH blah","((?i)blah)\\s+(?i:\\1)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","(?>a*)*",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aa","(?>a*)*",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aa","(?>a*)*",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aa","(?>a*)*",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","(?>a*)*",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aa","(?>a*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","(?>a*)*",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","(?>a*)*",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","(?>a*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","(abc|)+",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("abc","(abc|)+",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aa","(?>a*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","(?>a*)*",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","(?>a*)*",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("abc","(abc|)+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcabc","(abc|)+",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("abcabc","(abc|)+",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("abcabc","(abc|)+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcabcabc","(abc|)+",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("abcabcabc","(abc|)+",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("abcabcabc","(abc|)+",[]))),
+ <<"x::y::z">> = iolist_to_binary(join(re:split("xyz","(abc|)+",[trim]))),
+ <<"x::yz">> = iolist_to_binary(join(re:split("xyz","(abc|)+",[{parts,
+ 2}]))),
+ <<"x::y::z::">> = iolist_to_binary(join(re:split("xyz","(abc|)+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","([a]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","([a]*)*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","([a]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaa","([a]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaa","([a]*)*",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","(?>a*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","(abc|)+",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abc","(abc|)+",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abc","(abc|)+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcabc","(abc|)+",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcabc","(abc|)+",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("aaaaa","([a]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","([ab]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","([ab]*)*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","([ab]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","([ab]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","([ab]*)*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","([ab]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ababab","([ab]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("ababab","([ab]*)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcabc","(abc|)+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcabcabc","(abc|)+",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcabcabc","(abc|)+",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcabcabc","(abc|)+",[]))),
-?line <<"x::y::z">> = iolist_to_binary(join(re:split("xyz","(abc|)+",[trim]))),
-?line <<"x::yz">> = iolist_to_binary(join(re:split("xyz","(abc|)+",[{parts,
- 2}]))),
-?line <<"x::y::z::">> = iolist_to_binary(join(re:split("xyz","(abc|)+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","([a]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([a]*)*",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("ababab","([ab]*)*",[]))),
+ <<"::c::d::e">> = iolist_to_binary(join(re:split("aaaabcde","([ab]*)*",[trim]))),
+ <<"::cde">> = iolist_to_binary(join(re:split("aaaabcde","([ab]*)*",[{parts,
+ 2}]))),
+ <<"::c::d::e::">> = iolist_to_binary(join(re:split("aaaabcde","([ab]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bbbb","([ab]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("bbbb","([ab]*)*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("bbbb","([ab]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","([^a]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","([^a]*)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([a]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaaa","([a]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("aaaaa","([a]*)*",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("b","([^a]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bbbb","([^a]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("bbbb","([^a]*)*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("bbbb","([^a]*)*",[]))),
+ <<"a::a::a">> = iolist_to_binary(join(re:split("aaa","([^a]*)*",[trim]))),
+ <<"a::aa">> = iolist_to_binary(join(re:split("aaa","([^a]*)*",[{parts,
+ 2}]))),
+ <<"a::a::a::">> = iolist_to_binary(join(re:split("aaa","([^a]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("cccc","([^ab]*)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("cccc","([^ab]*)*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("cccc","([^ab]*)*",[]))),
+ <<"a::b::a::b">> = iolist_to_binary(join(re:split("abab","([^ab]*)*",[trim]))),
+ <<"a::bab">> = iolist_to_binary(join(re:split("abab","([^ab]*)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("aaaaa","([a]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","([ab]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([ab]*)*",[{parts,
+ <<"a::b::a::b::">> = iolist_to_binary(join(re:split("abab","([^ab]*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","([a]*?)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","([a]*?)*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","([a]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","([a]*?)*",[trim]))),
+ <<"::aaa">> = iolist_to_binary(join(re:split("aaaa","([a]*?)*",[{parts,
+ 2}]))),
+ <<"::::::::">> = iolist_to_binary(join(re:split("aaaa","([a]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","([ab]*?)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","([ab]*?)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([ab]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","([ab]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([ab]*)*",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("a","([ab]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","([ab]*?)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","([ab]*?)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([ab]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ababab","([ab]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("ababab","([ab]*)*",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("ababab","([ab]*)*",[]))),
-?line <<"::c::d::e">> = iolist_to_binary(join(re:split("aaaabcde","([ab]*)*",[trim]))),
-?line <<"::cde">> = iolist_to_binary(join(re:split("aaaabcde","([ab]*)*",[{parts,
- 2}]))),
-?line <<"::c::d::e::">> = iolist_to_binary(join(re:split("aaaabcde","([ab]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("bbbb","([ab]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bbbb","([ab]*)*",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("b","([ab]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abab","([ab]*?)*",[trim]))),
+ <<"::bab">> = iolist_to_binary(join(re:split("abab","([ab]*?)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bbbb","([ab]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","([^a]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([^a]*)*",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([^a]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("bbbb","([^a]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bbbb","([^a]*)*",[{parts,
+ <<"::::::::">> = iolist_to_binary(join(re:split("abab","([ab]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("baba","([ab]*?)*",[trim]))),
+ <<"::aba">> = iolist_to_binary(join(re:split("baba","([ab]*?)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("bbbb","([^a]*)*",[]))),
-?line <<"a::a::a">> = iolist_to_binary(join(re:split("aaa","([^a]*)*",[trim]))),
-?line <<"a::aa">> = iolist_to_binary(join(re:split("aaa","([^a]*)*",[{parts,
- 2}]))),
-?line <<"a::a::a::">> = iolist_to_binary(join(re:split("aaa","([^a]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("cccc","([^ab]*)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("cccc","([^ab]*)*",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("cccc","([^ab]*)*",[]))),
-?line <<"a::b::a::b">> = iolist_to_binary(join(re:split("abab","([^ab]*)*",[trim]))),
-?line <<"a::bab">> = iolist_to_binary(join(re:split("abab","([^ab]*)*",[{parts,
- 2}]))),
-?line <<"a::b::a::b::">> = iolist_to_binary(join(re:split("abab","([^ab]*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","([a]*?)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([a]*?)*",[{parts,
+ <<"::::::::">> = iolist_to_binary(join(re:split("baba","([ab]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","([^a]*?)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","([^a]*?)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([a]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","([a]*?)*",[trim]))),
-?line <<"::aaa">> = iolist_to_binary(join(re:split("aaaa","([a]*?)*",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("b","([^a]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bbbb","([^a]*?)*",[trim]))),
+ <<"::bbb">> = iolist_to_binary(join(re:split("bbbb","([^a]*?)*",[{parts,
2}]))),
-?line <<"::::::::">> = iolist_to_binary(join(re:split("aaaa","([a]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","([ab]*?)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([ab]*?)*",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","([ab]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","([ab]*?)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([ab]*?)*",[{parts,
+ <<"::::::::">> = iolist_to_binary(join(re:split("bbbb","([^a]*?)*",[]))),
+ <<"a::a::a">> = iolist_to_binary(join(re:split("aaa","([^a]*?)*",[trim]))),
+ <<"a::aa">> = iolist_to_binary(join(re:split("aaa","([^a]*?)*",[{parts,
+ 2}]))),
+ <<"a::a::a::">> = iolist_to_binary(join(re:split("aaa","([^a]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("c","([^ab]*?)*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("c","([^ab]*?)*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([ab]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abab","([ab]*?)*",[trim]))),
-?line <<"::bab">> = iolist_to_binary(join(re:split("abab","([ab]*?)*",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("c","([^ab]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("cccc","([^ab]*?)*",[trim]))),
+ <<"::ccc">> = iolist_to_binary(join(re:split("cccc","([^ab]*?)*",[{parts,
2}]))),
-?line <<"::::::::">> = iolist_to_binary(join(re:split("abab","([ab]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("baba","([ab]*?)*",[trim]))),
-?line <<"::aba">> = iolist_to_binary(join(re:split("baba","([ab]*?)*",[{parts,
+ <<"::::::::">> = iolist_to_binary(join(re:split("cccc","([^ab]*?)*",[]))),
+ <<"b::a::b::a">> = iolist_to_binary(join(re:split("baba","([^ab]*?)*",[trim]))),
+ <<"b::aba">> = iolist_to_binary(join(re:split("baba","([^ab]*?)*",[{parts,
2}]))),
-?line <<"::::::::">> = iolist_to_binary(join(re:split("baba","([ab]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","([^a]*?)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([^a]*?)*",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("b","([^a]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("bbbb","([^a]*?)*",[trim]))),
-?line <<"::bbb">> = iolist_to_binary(join(re:split("bbbb","([^a]*?)*",[{parts,
+ <<"b::a::b::a::">> = iolist_to_binary(join(re:split("baba","([^ab]*?)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","(?>a*)*",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[]))),
+ <<":b:c:d:e">> = iolist_to_binary(join(re:split("aaabcde","(?>a*)*",[trim]))),
+ <<":bcde">> = iolist_to_binary(join(re:split("aaabcde","(?>a*)*",[{parts,
2}]))),
-?line <<"::::::::">> = iolist_to_binary(join(re:split("bbbb","([^a]*?)*",[]))),
-?line <<"a::a::a">> = iolist_to_binary(join(re:split("aaa","([^a]*?)*",[trim]))),
-?line <<"a::aa">> = iolist_to_binary(join(re:split("aaa","([^a]*?)*",[{parts,
- 2}]))),
-?line <<"a::a::a::">> = iolist_to_binary(join(re:split("aaa","([^a]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("c","([^ab]*?)*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("c","([^ab]*?)*",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("c","([^ab]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("cccc","([^ab]*?)*",[trim]))),
-?line <<"::ccc">> = iolist_to_binary(join(re:split("cccc","([^ab]*?)*",[{parts,
- 2}]))),
-?line <<"::::::::">> = iolist_to_binary(join(re:split("cccc","([^ab]*?)*",[]))),
-?line <<"b::a::b::a">> = iolist_to_binary(join(re:split("baba","([^ab]*?)*",[trim]))),
-?line <<"b::aba">> = iolist_to_binary(join(re:split("baba","([^ab]*?)*",[{parts,
- 2}]))),
-?line <<"b::a::b::a::">> = iolist_to_binary(join(re:split("baba","([^ab]*?)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","(?>a*)*",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?>a*)*",[]))),
-?line <<":b:c:d:e">> = iolist_to_binary(join(re:split("aaabcde","(?>a*)*",[trim]))),
-?line <<":bcde">> = iolist_to_binary(join(re:split("aaabcde","(?>a*)*",[{parts,
+ <<":b:c:d:e:">> = iolist_to_binary(join(re:split("aaabcde","(?>a*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaa","((?>a*))*",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaa","((?>a*))*",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaa","((?>a*))*",[]))),
+ <<"::b::b">> = iolist_to_binary(join(re:split("aabbaa","((?>a*))*",[trim]))),
+ <<"::bbaa">> = iolist_to_binary(join(re:split("aabbaa","((?>a*))*",[{parts,
2}]))),
-?line <<":b:c:d:e:">> = iolist_to_binary(join(re:split("aaabcde","(?>a*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaaa","((?>a*))*",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("aaaaa","((?>a*))*",[{parts,
+ <<"::b::b::">> = iolist_to_binary(join(re:split("aabbaa","((?>a*))*",[]))),
+ ok.
+run14() ->
+ <<"a::a::a::a::a">> = iolist_to_binary(join(re:split("aaaaa","((?>a*?))*",[trim]))),
+ <<"a::aaaa">> = iolist_to_binary(join(re:split("aaaaa","((?>a*?))*",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("aaaaa","((?>a*))*",[]))),
-?line <<"::b::b">> = iolist_to_binary(join(re:split("aabbaa","((?>a*))*",[trim]))),
-?line <<"::bbaa">> = iolist_to_binary(join(re:split("aabbaa","((?>a*))*",[{parts,
- 2}]))),
-?line <<"::b::b::">> = iolist_to_binary(join(re:split("aabbaa","((?>a*))*",[]))),
-?line <<"a::a::a::a::a">> = iolist_to_binary(join(re:split("aaaaa","((?>a*?))*",[trim]))),
-?line <<"a::aaaa">> = iolist_to_binary(join(re:split("aaaaa","((?>a*?))*",[{parts,
+ <<"a::a::a::a::a::">> = iolist_to_binary(join(re:split("aaaaa","((?>a*?))*",[]))),
+ <<"a::a::b::b::a::a">> = iolist_to_binary(join(re:split("aabbaa","((?>a*?))*",[trim]))),
+ <<"a::abbaa">> = iolist_to_binary(join(re:split("aabbaa","((?>a*?))*",[{parts,
2}]))),
-?line <<"a::a::a::a::a::">> = iolist_to_binary(join(re:split("aaaaa","((?>a*?))*",[]))),
-?line <<"a::a::b::b::a::a">> = iolist_to_binary(join(re:split("aabbaa","((?>a*?))*",[trim]))),
-?line <<"a::abbaa">> = iolist_to_binary(join(re:split("aabbaa","((?>a*?))*",[{parts,
- 2}]))),
-?line <<"a::a::b::b::a::a::">> = iolist_to_binary(join(re:split("aabbaa","((?>a*?))*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ <<"a::a::b::b::a::a::">> = iolist_to_binary(join(re:split("aabbaa","((?>a*?))*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ <<":">> = iolist_to_binary(join(re:split("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
-?line <<"sep-12-98">> = iolist_to_binary(join(re:split("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
- trim]))),
-?line <<"sep-12-98">> = iolist_to_binary(join(re:split("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
- {parts,
- 2}]))),
-?line <<"sep-12-98">> = iolist_to_binary(join(re:split("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
-?line <<"foo:foo">> = iolist_to_binary(join(re:split("foobarfoo","(?<=(foo))bar\\1",[trim]))),
-?line <<"foo:foo:">> = iolist_to_binary(join(re:split("foobarfoo","(?<=(foo))bar\\1",[{parts,
- 2}]))),
-?line <<"foo:foo:">> = iolist_to_binary(join(re:split("foobarfoo","(?<=(foo))bar\\1",[]))),
-?line <<"foo:foo:tling">> = iolist_to_binary(join(re:split("foobarfootling","(?<=(foo))bar\\1",[trim]))),
-?line <<"foo:foo:tling">> = iolist_to_binary(join(re:split("foobarfootling","(?<=(foo))bar\\1",[{parts,
- 2}]))),
-?line <<"foo:foo:tling">> = iolist_to_binary(join(re:split("foobarfootling","(?<=(foo))bar\\1",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo))bar\\1",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo))bar\\1",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo))bar\\1",[]))),
-?line <<"foobar">> = iolist_to_binary(join(re:split("foobar","(?<=(foo))bar\\1",[trim]))),
-?line <<"foobar">> = iolist_to_binary(join(re:split("foobar","(?<=(foo))bar\\1",[{parts,
- 2}]))),
-?line <<"foobar">> = iolist_to_binary(join(re:split("foobar","(?<=(foo))bar\\1",[]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<=(foo))bar\\1",[trim]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<=(foo))bar\\1",[{parts,
- 2}]))),
-?line <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<=(foo))bar\\1",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("saturday","(?i:saturday|sunday)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("saturday","(?i:saturday|sunday)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("saturday","(?i:saturday|sunday)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("sunday","(?i:saturday|sunday)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("sunday","(?i:saturday|sunday)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("sunday","(?i:saturday|sunday)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Saturday","(?i:saturday|sunday)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Saturday","(?i:saturday|sunday)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Saturday","(?i:saturday|sunday)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Sunday","(?i:saturday|sunday)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Sunday","(?i:saturday|sunday)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Sunday","(?i:saturday|sunday)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("SATURDAY","(?i:saturday|sunday)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("SATURDAY","(?i:saturday|sunday)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("SATURDAY","(?i:saturday|sunday)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("SUNDAY","(?i:saturday|sunday)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("SUNDAY","(?i:saturday|sunday)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("SUNDAY","(?i:saturday|sunday)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("SunDay","(?i:saturday|sunday)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("SunDay","(?i:saturday|sunday)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("SunDay","(?i:saturday|sunday)",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcx","(a(?i)bc|BB)x",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcx","(a(?i)bc|BB)x",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcx","(a(?i)bc|BB)x",[]))),
-?line <<":aBC">> = iolist_to_binary(join(re:split("aBCx","(a(?i)bc|BB)x",[trim]))),
-?line <<":aBC:">> = iolist_to_binary(join(re:split("aBCx","(a(?i)bc|BB)x",[{parts,
- 2}]))),
-?line <<":aBC:">> = iolist_to_binary(join(re:split("aBCx","(a(?i)bc|BB)x",[]))),
-?line <<":bb">> = iolist_to_binary(join(re:split("bbx","(a(?i)bc|BB)x",[trim]))),
-?line <<":bb:">> = iolist_to_binary(join(re:split("bbx","(a(?i)bc|BB)x",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("12-sep-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("12-09-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
+ <<"sep-12-98">> = iolist_to_binary(join(re:split("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ trim]))),
+ <<"sep-12-98">> = iolist_to_binary(join(re:split("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended,
+ {parts,
+ 2}]))),
+ <<"sep-12-98">> = iolist_to_binary(join(re:split("sep-12-98","(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ",[extended]))),
+ <<"foo:foo">> = iolist_to_binary(join(re:split("foobarfoo","(?<=(foo))bar\\1",[trim]))),
+ <<"foo:foo:">> = iolist_to_binary(join(re:split("foobarfoo","(?<=(foo))bar\\1",[{parts,
+ 2}]))),
+ <<"foo:foo:">> = iolist_to_binary(join(re:split("foobarfoo","(?<=(foo))bar\\1",[]))),
+ <<"foo:foo:tling">> = iolist_to_binary(join(re:split("foobarfootling","(?<=(foo))bar\\1",[trim]))),
+ <<"foo:foo:tling">> = iolist_to_binary(join(re:split("foobarfootling","(?<=(foo))bar\\1",[{parts,
+ 2}]))),
+ <<"foo:foo:tling">> = iolist_to_binary(join(re:split("foobarfootling","(?<=(foo))bar\\1",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo))bar\\1",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo))bar\\1",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(foo))bar\\1",[]))),
+ <<"foobar">> = iolist_to_binary(join(re:split("foobar","(?<=(foo))bar\\1",[trim]))),
+ <<"foobar">> = iolist_to_binary(join(re:split("foobar","(?<=(foo))bar\\1",[{parts,
+ 2}]))),
+ <<"foobar">> = iolist_to_binary(join(re:split("foobar","(?<=(foo))bar\\1",[]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<=(foo))bar\\1",[trim]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<=(foo))bar\\1",[{parts,
+ 2}]))),
+ <<"barfoo">> = iolist_to_binary(join(re:split("barfoo","(?<=(foo))bar\\1",[]))),
+ <<"">> = iolist_to_binary(join(re:split("saturday","(?i:saturday|sunday)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("saturday","(?i:saturday|sunday)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("saturday","(?i:saturday|sunday)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("sunday","(?i:saturday|sunday)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("sunday","(?i:saturday|sunday)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("sunday","(?i:saturday|sunday)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("Saturday","(?i:saturday|sunday)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("Saturday","(?i:saturday|sunday)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("Saturday","(?i:saturday|sunday)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("Sunday","(?i:saturday|sunday)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("Sunday","(?i:saturday|sunday)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("Sunday","(?i:saturday|sunday)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("SATURDAY","(?i:saturday|sunday)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("SATURDAY","(?i:saturday|sunday)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("SATURDAY","(?i:saturday|sunday)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("SUNDAY","(?i:saturday|sunday)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("SUNDAY","(?i:saturday|sunday)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("SUNDAY","(?i:saturday|sunday)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("SunDay","(?i:saturday|sunday)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("SunDay","(?i:saturday|sunday)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("SunDay","(?i:saturday|sunday)",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcx","(a(?i)bc|BB)x",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcx","(a(?i)bc|BB)x",[{parts,
2}]))),
-?line <<":bb:">> = iolist_to_binary(join(re:split("bbx","(a(?i)bc|BB)x",[]))),
-?line <<":BB">> = iolist_to_binary(join(re:split("BBx","(a(?i)bc|BB)x",[trim]))),
-?line <<":BB:">> = iolist_to_binary(join(re:split("BBx","(a(?i)bc|BB)x",[{parts,
+ <<":abc:">> = iolist_to_binary(join(re:split("abcx","(a(?i)bc|BB)x",[]))),
+ <<":aBC">> = iolist_to_binary(join(re:split("aBCx","(a(?i)bc|BB)x",[trim]))),
+ <<":aBC:">> = iolist_to_binary(join(re:split("aBCx","(a(?i)bc|BB)x",[{parts,
2}]))),
-?line <<":BB:">> = iolist_to_binary(join(re:split("BBx","(a(?i)bc|BB)x",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)bc|BB)x",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)bc|BB)x",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)bc|BB)x",[]))),
-?line <<"abcX">> = iolist_to_binary(join(re:split("abcX","(a(?i)bc|BB)x",[trim]))),
-?line <<"abcX">> = iolist_to_binary(join(re:split("abcX","(a(?i)bc|BB)x",[{parts,
- 2}]))),
-?line <<"abcX">> = iolist_to_binary(join(re:split("abcX","(a(?i)bc|BB)x",[]))),
-?line <<"aBCX">> = iolist_to_binary(join(re:split("aBCX","(a(?i)bc|BB)x",[trim]))),
-?line <<"aBCX">> = iolist_to_binary(join(re:split("aBCX","(a(?i)bc|BB)x",[{parts,
- 2}]))),
-?line <<"aBCX">> = iolist_to_binary(join(re:split("aBCX","(a(?i)bc|BB)x",[]))),
-?line <<"bbX">> = iolist_to_binary(join(re:split("bbX","(a(?i)bc|BB)x",[trim]))),
-?line <<"bbX">> = iolist_to_binary(join(re:split("bbX","(a(?i)bc|BB)x",[{parts,
+ <<":aBC:">> = iolist_to_binary(join(re:split("aBCx","(a(?i)bc|BB)x",[]))),
+ <<":bb">> = iolist_to_binary(join(re:split("bbx","(a(?i)bc|BB)x",[trim]))),
+ <<":bb:">> = iolist_to_binary(join(re:split("bbx","(a(?i)bc|BB)x",[{parts,
+ 2}]))),
+ <<":bb:">> = iolist_to_binary(join(re:split("bbx","(a(?i)bc|BB)x",[]))),
+ <<":BB">> = iolist_to_binary(join(re:split("BBx","(a(?i)bc|BB)x",[trim]))),
+ <<":BB:">> = iolist_to_binary(join(re:split("BBx","(a(?i)bc|BB)x",[{parts,
+ 2}]))),
+ <<":BB:">> = iolist_to_binary(join(re:split("BBx","(a(?i)bc|BB)x",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)bc|BB)x",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)bc|BB)x",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(a(?i)bc|BB)x",[]))),
+ <<"abcX">> = iolist_to_binary(join(re:split("abcX","(a(?i)bc|BB)x",[trim]))),
+ <<"abcX">> = iolist_to_binary(join(re:split("abcX","(a(?i)bc|BB)x",[{parts,
2}]))),
-?line <<"bbX">> = iolist_to_binary(join(re:split("bbX","(a(?i)bc|BB)x",[]))),
-?line <<"BBX">> = iolist_to_binary(join(re:split("BBX","(a(?i)bc|BB)x",[trim]))),
-?line <<"BBX">> = iolist_to_binary(join(re:split("BBX","(a(?i)bc|BB)x",[{parts,
+ <<"abcX">> = iolist_to_binary(join(re:split("abcX","(a(?i)bc|BB)x",[]))),
+ <<"aBCX">> = iolist_to_binary(join(re:split("aBCX","(a(?i)bc|BB)x",[trim]))),
+ <<"aBCX">> = iolist_to_binary(join(re:split("aBCX","(a(?i)bc|BB)x",[{parts,
2}]))),
-?line <<"BBX">> = iolist_to_binary(join(re:split("BBX","(a(?i)bc|BB)x",[]))),
-?line <<":ac">> = iolist_to_binary(join(re:split("ac","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<":ac:">> = iolist_to_binary(join(re:split("ac","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<":ac:">> = iolist_to_binary(join(re:split("ac","^([ab](?i)[cd]|[ef])",[]))),
-?line <<":aC">> = iolist_to_binary(join(re:split("aC","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<":aC:">> = iolist_to_binary(join(re:split("aC","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<":aC:">> = iolist_to_binary(join(re:split("aC","^([ab](?i)[cd]|[ef])",[]))),
-?line <<":bD">> = iolist_to_binary(join(re:split("bD","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<":bD:">> = iolist_to_binary(join(re:split("bD","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<":bD:">> = iolist_to_binary(join(re:split("bD","^([ab](?i)[cd]|[ef])",[]))),
-?line <<":e:lephant">> = iolist_to_binary(join(re:split("elephant","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<":e:lephant">> = iolist_to_binary(join(re:split("elephant","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<":e:lephant">> = iolist_to_binary(join(re:split("elephant","^([ab](?i)[cd]|[ef])",[]))),
-?line <<":E:urope">> = iolist_to_binary(join(re:split("Europe","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<":E:urope">> = iolist_to_binary(join(re:split("Europe","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<":E:urope">> = iolist_to_binary(join(re:split("Europe","^([ab](?i)[cd]|[ef])",[]))),
-?line <<":f:rog">> = iolist_to_binary(join(re:split("frog","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<":f:rog">> = iolist_to_binary(join(re:split("frog","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<":f:rog">> = iolist_to_binary(join(re:split("frog","^([ab](?i)[cd]|[ef])",[]))),
-?line <<":F:rance">> = iolist_to_binary(join(re:split("France","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<":F:rance">> = iolist_to_binary(join(re:split("France","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<":F:rance">> = iolist_to_binary(join(re:split("France","^([ab](?i)[cd]|[ef])",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([ab](?i)[cd]|[ef])",[]))),
-?line <<"Africa">> = iolist_to_binary(join(re:split("Africa","^([ab](?i)[cd]|[ef])",[trim]))),
-?line <<"Africa">> = iolist_to_binary(join(re:split("Africa","^([ab](?i)[cd]|[ef])",[{parts,
- 2}]))),
-?line <<"Africa">> = iolist_to_binary(join(re:split("Africa","^([ab](?i)[cd]|[ef])",[]))),
-?line <<":ab">> = iolist_to_binary(join(re:split("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
- 2}]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<":aBd">> = iolist_to_binary(join(re:split("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<":aBd:">> = iolist_to_binary(join(re:split("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
- 2}]))),
-?line <<":aBd:">> = iolist_to_binary(join(re:split("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<":xy">> = iolist_to_binary(join(re:split("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<":xy:">> = iolist_to_binary(join(re:split("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
- 2}]))),
-?line <<":xy:">> = iolist_to_binary(join(re:split("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<":xY">> = iolist_to_binary(join(re:split("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<":xY:">> = iolist_to_binary(join(re:split("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ <<"aBCX">> = iolist_to_binary(join(re:split("aBCX","(a(?i)bc|BB)x",[]))),
+ <<"bbX">> = iolist_to_binary(join(re:split("bbX","(a(?i)bc|BB)x",[trim]))),
+ <<"bbX">> = iolist_to_binary(join(re:split("bbX","(a(?i)bc|BB)x",[{parts,
+ 2}]))),
+ <<"bbX">> = iolist_to_binary(join(re:split("bbX","(a(?i)bc|BB)x",[]))),
+ <<"BBX">> = iolist_to_binary(join(re:split("BBX","(a(?i)bc|BB)x",[trim]))),
+ <<"BBX">> = iolist_to_binary(join(re:split("BBX","(a(?i)bc|BB)x",[{parts,
+ 2}]))),
+ <<"BBX">> = iolist_to_binary(join(re:split("BBX","(a(?i)bc|BB)x",[]))),
+ <<":ac">> = iolist_to_binary(join(re:split("ac","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<":ac:">> = iolist_to_binary(join(re:split("ac","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<":ac:">> = iolist_to_binary(join(re:split("ac","^([ab](?i)[cd]|[ef])",[]))),
+ <<":aC">> = iolist_to_binary(join(re:split("aC","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<":aC:">> = iolist_to_binary(join(re:split("aC","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<":aC:">> = iolist_to_binary(join(re:split("aC","^([ab](?i)[cd]|[ef])",[]))),
+ <<":bD">> = iolist_to_binary(join(re:split("bD","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<":bD:">> = iolist_to_binary(join(re:split("bD","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<":bD:">> = iolist_to_binary(join(re:split("bD","^([ab](?i)[cd]|[ef])",[]))),
+ <<":e:lephant">> = iolist_to_binary(join(re:split("elephant","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<":e:lephant">> = iolist_to_binary(join(re:split("elephant","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<":e:lephant">> = iolist_to_binary(join(re:split("elephant","^([ab](?i)[cd]|[ef])",[]))),
+ <<":E:urope">> = iolist_to_binary(join(re:split("Europe","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<":E:urope">> = iolist_to_binary(join(re:split("Europe","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<":E:urope">> = iolist_to_binary(join(re:split("Europe","^([ab](?i)[cd]|[ef])",[]))),
+ <<":f:rog">> = iolist_to_binary(join(re:split("frog","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<":f:rog">> = iolist_to_binary(join(re:split("frog","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<":f:rog">> = iolist_to_binary(join(re:split("frog","^([ab](?i)[cd]|[ef])",[]))),
+ <<":F:rance">> = iolist_to_binary(join(re:split("France","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<":F:rance">> = iolist_to_binary(join(re:split("France","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<":F:rance">> = iolist_to_binary(join(re:split("France","^([ab](?i)[cd]|[ef])",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^([ab](?i)[cd]|[ef])",[]))),
+ <<"Africa">> = iolist_to_binary(join(re:split("Africa","^([ab](?i)[cd]|[ef])",[trim]))),
+ <<"Africa">> = iolist_to_binary(join(re:split("Africa","^([ab](?i)[cd]|[ef])",[{parts,
+ 2}]))),
+ <<"Africa">> = iolist_to_binary(join(re:split("Africa","^([ab](?i)[cd]|[ef])",[]))),
+ <<":ab">> = iolist_to_binary(join(re:split("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ 2}]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("ab","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<":aBd">> = iolist_to_binary(join(re:split("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<":aBd:">> = iolist_to_binary(join(re:split("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
2}]))),
-?line <<":xY:">> = iolist_to_binary(join(re:split("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<":z:ebra">> = iolist_to_binary(join(re:split("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<":z:ebra">> = iolist_to_binary(join(re:split("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
- 2}]))),
-?line <<":z:ebra">> = iolist_to_binary(join(re:split("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<":Z:ambesi">> = iolist_to_binary(join(re:split("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<":Z:ambesi">> = iolist_to_binary(join(re:split("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
- 2}]))),
-?line <<":Z:ambesi">> = iolist_to_binary(join(re:split("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<"aCD">> = iolist_to_binary(join(re:split("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<"aCD">> = iolist_to_binary(join(re:split("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
- 2}]))),
-?line <<"aCD">> = iolist_to_binary(join(re:split("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<"XY">> = iolist_to_binary(join(re:split("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
-?line <<"XY">> = iolist_to_binary(join(re:split("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ <<":aBd:">> = iolist_to_binary(join(re:split("aBd","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<":xy">> = iolist_to_binary(join(re:split("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<":xy:">> = iolist_to_binary(join(re:split("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ 2}]))),
+ <<":xy:">> = iolist_to_binary(join(re:split("xy","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<":xY">> = iolist_to_binary(join(re:split("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<":xY:">> = iolist_to_binary(join(re:split("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ 2}]))),
+ <<":xY:">> = iolist_to_binary(join(re:split("xY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<":z:ebra">> = iolist_to_binary(join(re:split("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<":z:ebra">> = iolist_to_binary(join(re:split("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ 2}]))),
+ <<":z:ebra">> = iolist_to_binary(join(re:split("zebra","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<":Z:ambesi">> = iolist_to_binary(join(re:split("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<":Z:ambesi">> = iolist_to_binary(join(re:split("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ 2}]))),
+ <<":Z:ambesi">> = iolist_to_binary(join(re:split("Zambesi","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<"aCD">> = iolist_to_binary(join(re:split("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<"aCD">> = iolist_to_binary(join(re:split("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
2}]))),
-?line <<"XY">> = iolist_to_binary(join(re:split("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
-?line <<"foo
+ <<"aCD">> = iolist_to_binary(join(re:split("aCD","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<"XY">> = iolist_to_binary(join(re:split("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[trim]))),
+ <<"XY">> = iolist_to_binary(join(re:split("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[{parts,
+ 2}]))),
+ <<"XY">> = iolist_to_binary(join(re:split("XY","^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)",[]))),
+ <<"foo
">> = iolist_to_binary(join(re:split("foo
bar","(?<=foo\\n)^bar",[multiline,trim]))),
-?line <<"foo
+ <<"foo
:">> = iolist_to_binary(join(re:split("foo
bar","(?<=foo\\n)^bar",[multiline,{parts,2}]))),
-?line <<"foo
+ <<"foo
:">> = iolist_to_binary(join(re:split("foo
bar","(?<=foo\\n)^bar",[multiline]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=foo\\n)^bar",[multiline,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=foo\\n)^bar",[multiline,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=foo\\n)^bar",[multiline]))),
-?line <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=foo\\n)^bar",[multiline,
- trim]))),
-?line <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=foo\\n)^bar",[multiline,
- {parts,
- 2}]))),
-?line <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=foo\\n)^bar",[multiline]))),
-?line <<"baz
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=foo\\n)^bar",[multiline,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=foo\\n)^bar",[multiline,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=foo\\n)^bar",[multiline]))),
+ <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=foo\\n)^bar",[multiline,
+ trim]))),
+ <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=foo\\n)^bar",[multiline,
+ {parts,
+ 2}]))),
+ <<"bar">> = iolist_to_binary(join(re:split("bar","(?<=foo\\n)^bar",[multiline]))),
+ <<"baz
bar">> = iolist_to_binary(join(re:split("baz
bar","(?<=foo\\n)^bar",[multiline,trim]))),
-?line <<"baz
+ <<"baz
bar">> = iolist_to_binary(join(re:split("baz
bar","(?<=foo\\n)^bar",[multiline,{parts,2}]))),
-?line <<"baz
+ <<"baz
bar">> = iolist_to_binary(join(re:split("baz
bar","(?<=foo\\n)^bar",[multiline]))),
-?line <<"bar">> = iolist_to_binary(join(re:split("barbaz","(?<=(?<!foo)bar)baz",[trim]))),
-?line <<"bar:">> = iolist_to_binary(join(re:split("barbaz","(?<=(?<!foo)bar)baz",[{parts,
- 2}]))),
-?line <<"bar:">> = iolist_to_binary(join(re:split("barbaz","(?<=(?<!foo)bar)baz",[]))),
-?line <<"barbar">> = iolist_to_binary(join(re:split("barbarbaz","(?<=(?<!foo)bar)baz",[trim]))),
-?line <<"barbar:">> = iolist_to_binary(join(re:split("barbarbaz","(?<=(?<!foo)bar)baz",[{parts,
- 2}]))),
-?line <<"barbar:">> = iolist_to_binary(join(re:split("barbarbaz","(?<=(?<!foo)bar)baz",[]))),
-?line <<"koobar">> = iolist_to_binary(join(re:split("koobarbaz","(?<=(?<!foo)bar)baz",[trim]))),
-?line <<"koobar:">> = iolist_to_binary(join(re:split("koobarbaz","(?<=(?<!foo)bar)baz",[{parts,
- 2}]))),
-?line <<"koobar:">> = iolist_to_binary(join(re:split("koobarbaz","(?<=(?<!foo)bar)baz",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?<!foo)bar)baz",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?<!foo)bar)baz",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?<!foo)bar)baz",[]))),
-?line <<"baz">> = iolist_to_binary(join(re:split("baz","(?<=(?<!foo)bar)baz",[trim]))),
-?line <<"baz">> = iolist_to_binary(join(re:split("baz","(?<=(?<!foo)bar)baz",[{parts,
- 2}]))),
-?line <<"baz">> = iolist_to_binary(join(re:split("baz","(?<=(?<!foo)bar)baz",[]))),
-?line <<"foobarbaz">> = iolist_to_binary(join(re:split("foobarbaz","(?<=(?<!foo)bar)baz",[trim]))),
-?line <<"foobarbaz">> = iolist_to_binary(join(re:split("foobarbaz","(?<=(?<!foo)bar)baz",[{parts,
- 2}]))),
-?line <<"foobarbaz">> = iolist_to_binary(join(re:split("foobarbaz","(?<=(?<!foo)bar)baz",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?){4}$",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?){4}$",[{parts,
+ <<"bar">> = iolist_to_binary(join(re:split("barbaz","(?<=(?<!foo)bar)baz",[trim]))),
+ <<"bar:">> = iolist_to_binary(join(re:split("barbaz","(?<=(?<!foo)bar)baz",[{parts,
+ 2}]))),
+ <<"bar:">> = iolist_to_binary(join(re:split("barbaz","(?<=(?<!foo)bar)baz",[]))),
+ <<"barbar">> = iolist_to_binary(join(re:split("barbarbaz","(?<=(?<!foo)bar)baz",[trim]))),
+ <<"barbar:">> = iolist_to_binary(join(re:split("barbarbaz","(?<=(?<!foo)bar)baz",[{parts,
+ 2}]))),
+ <<"barbar:">> = iolist_to_binary(join(re:split("barbarbaz","(?<=(?<!foo)bar)baz",[]))),
+ <<"koobar">> = iolist_to_binary(join(re:split("koobarbaz","(?<=(?<!foo)bar)baz",[trim]))),
+ <<"koobar:">> = iolist_to_binary(join(re:split("koobarbaz","(?<=(?<!foo)bar)baz",[{parts,
+ 2}]))),
+ <<"koobar:">> = iolist_to_binary(join(re:split("koobarbaz","(?<=(?<!foo)bar)baz",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?<!foo)bar)baz",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?<!foo)bar)baz",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?<!foo)bar)baz",[]))),
+ <<"baz">> = iolist_to_binary(join(re:split("baz","(?<=(?<!foo)bar)baz",[trim]))),
+ <<"baz">> = iolist_to_binary(join(re:split("baz","(?<=(?<!foo)bar)baz",[{parts,
+ 2}]))),
+ <<"baz">> = iolist_to_binary(join(re:split("baz","(?<=(?<!foo)bar)baz",[]))),
+ <<"foobarbaz">> = iolist_to_binary(join(re:split("foobarbaz","(?<=(?<!foo)bar)baz",[trim]))),
+ <<"foobarbaz">> = iolist_to_binary(join(re:split("foobarbaz","(?<=(?<!foo)bar)baz",[{parts,
+ 2}]))),
+ <<"foobarbaz">> = iolist_to_binary(join(re:split("foobarbaz","(?<=(?<!foo)bar)baz",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?){4}$",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?){4}$",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?){4}$",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?){4}$",[trim]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?){4}$",[]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?){4}$",[trim]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?){4}$",[{parts,
+ <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?){4}$",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?){4}$",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?){4}$",[]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?){4}$",[{parts,
- 2}]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?){4}$",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?){4}$",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?){4}$",[{parts,
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?){4}$",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?){4}$",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?){4}$",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?){4}$",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?){4}$",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?){4}$",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?){4}$",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?){4}$",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?){4}$",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<":aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<":aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?){4}$",[{parts,
- 2}]))),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<":a:a:a:a">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<":a:a:a:a:">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<":a:a:a:a">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<":a:a:a:a:">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<":a:a:a:a:">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<":a:aa:a:a">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<":a:aa:a:a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<":a:a:a:a:">> = iolist_to_binary(join(re:split("aaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<":a:aa:a:a">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<":a:aa:a:a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<":a:aa:a:a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<":a:aa:a:aa">> = iolist_to_binary(join(re:split("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<":a:aa:a:aa:">> = iolist_to_binary(join(re:split("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<":a:aa:a:a:">> = iolist_to_binary(join(re:split("aaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<":a:aa:a:aa">> = iolist_to_binary(join(re:split("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<":a:aa:a:aa:">> = iolist_to_binary(join(re:split("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<":a:aa:a:aa:">> = iolist_to_binary(join(re:split("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<":a:aa:aaa:a">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<":a:aa:aaa:a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<":a:aa:a:aa:">> = iolist_to_binary(join(re:split("aaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<":a:aa:aaa:a">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<":a:aa:aaa:a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<":a:aa:aaa:a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<":a:aa:aaa:a:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<":a:aa:aaa:aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<":a:aa:aaa:aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<":a:aa:aaa:aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<":a:aa:aaa:aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<":a:aa:aaa:aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<":a:aa:aaa:aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
+ <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
2}]))),
-?line <<"aaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[trim]))),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[{parts,
- 2}]))),
-?line <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","abc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","abc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","abc",[]))),
-?line <<"x:y">> = iolist_to_binary(join(re:split("xabcy","abc",[trim]))),
-?line <<"x:y">> = iolist_to_binary(join(re:split("xabcy","abc",[{parts,
- 2}]))),
-?line <<"x:y">> = iolist_to_binary(join(re:split("xabcy","abc",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ababc","abc",[trim]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("ababc","abc",[{parts,
- 2}]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("ababc","abc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[]))),
-?line <<"xbc">> = iolist_to_binary(join(re:split("xbc","abc",[trim]))),
-?line <<"xbc">> = iolist_to_binary(join(re:split("xbc","abc",[{parts,
- 2}]))),
-?line <<"xbc">> = iolist_to_binary(join(re:split("xbc","abc",[]))),
-?line <<"axc">> = iolist_to_binary(join(re:split("axc","abc",[trim]))),
-?line <<"axc">> = iolist_to_binary(join(re:split("axc","abc",[{parts,
- 2}]))),
-?line <<"axc">> = iolist_to_binary(join(re:split("axc","abc",[]))),
-?line <<"abx">> = iolist_to_binary(join(re:split("abx","abc",[trim]))),
-?line <<"abx">> = iolist_to_binary(join(re:split("abx","abc",[{parts,
+ <<"aaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaa","^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","abc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","abc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","abc",[]))),
+ <<"x:y">> = iolist_to_binary(join(re:split("xabcy","abc",[trim]))),
+ <<"x:y">> = iolist_to_binary(join(re:split("xabcy","abc",[{parts,
+ 2}]))),
+ <<"x:y">> = iolist_to_binary(join(re:split("xabcy","abc",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ababc","abc",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("ababc","abc",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("ababc","abc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[]))),
+ <<"xbc">> = iolist_to_binary(join(re:split("xbc","abc",[trim]))),
+ <<"xbc">> = iolist_to_binary(join(re:split("xbc","abc",[{parts,
+ 2}]))),
+ <<"xbc">> = iolist_to_binary(join(re:split("xbc","abc",[]))),
+ <<"axc">> = iolist_to_binary(join(re:split("axc","abc",[trim]))),
+ <<"axc">> = iolist_to_binary(join(re:split("axc","abc",[{parts,
+ 2}]))),
+ <<"axc">> = iolist_to_binary(join(re:split("axc","abc",[]))),
+ <<"abx">> = iolist_to_binary(join(re:split("abx","abc",[trim]))),
+ <<"abx">> = iolist_to_binary(join(re:split("abx","abc",[{parts,
+ 2}]))),
+ <<"abx">> = iolist_to_binary(join(re:split("abx","abc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","ab*c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab*c",[{parts,
2}]))),
-?line <<"abx">> = iolist_to_binary(join(re:split("abx","abc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","ab*c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab*c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abc","ab*c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","ab*bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab*bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab*c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","ab*bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab*bc",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abc","ab*bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbc","ab*bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab*bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab*bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbc","ab*bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab*bc",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab*bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbbc","ab*bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab*bc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab*bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbbc",".{1}",[trim]))),
+ <<":bbbbc">> = iolist_to_binary(join(re:split("abbbbc",".{1}",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab*bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc","ab*bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab*bc",[{parts,
+ <<"::::::">> = iolist_to_binary(join(re:split("abbbbc",".{1}",[]))),
+ <<":bc">> = iolist_to_binary(join(re:split("abbbbc",".{3,4}",[trim]))),
+ <<":bc">> = iolist_to_binary(join(re:split("abbbbc",".{3,4}",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab*bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc",".{1}",[trim]))),
-?line <<":bbbbc">> = iolist_to_binary(join(re:split("abbbbc",".{1}",[{parts,
+ <<":bc">> = iolist_to_binary(join(re:split("abbbbc",".{3,4}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{0,}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{0,}bc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{0,}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbc","ab+bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab+bc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab+bc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","ab+bc",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","ab+bc",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","ab+bc",[]))),
+ <<"abq">> = iolist_to_binary(join(re:split("abq","ab+bc",[trim]))),
+ <<"abq">> = iolist_to_binary(join(re:split("abq","ab+bc",[{parts,
+ 2}]))),
+ <<"abq">> = iolist_to_binary(join(re:split("abq","ab+bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbbc","ab+bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab+bc",[{parts,
2}]))),
-?line <<"::::::">> = iolist_to_binary(join(re:split("abbbbc",".{1}",[]))),
-?line <<":bc">> = iolist_to_binary(join(re:split("abbbbc",".{3,4}",[trim]))),
-?line <<":bc">> = iolist_to_binary(join(re:split("abbbbc",".{3,4}",[{parts,
- 2}]))),
-?line <<":bc">> = iolist_to_binary(join(re:split("abbbbc",".{3,4}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{0,}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{0,}bc",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab+bc",[]))),
+ ok.
+run15() ->
+ <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{1,}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,}bc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{0,}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbc","ab+bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab+bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab+bc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","ab+bc",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","ab+bc",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","ab+bc",[]))),
-?line <<"abq">> = iolist_to_binary(join(re:split("abq","ab+bc",[trim]))),
-?line <<"abq">> = iolist_to_binary(join(re:split("abq","ab+bc",[{parts,
- 2}]))),
-?line <<"abq">> = iolist_to_binary(join(re:split("abq","ab+bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc","ab+bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab+bc",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{3,4}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{3,4}bc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{3,4}bc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}bc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}bc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}bc",[]))),
+ <<"abq">> = iolist_to_binary(join(re:split("abq","ab{4,5}bc",[trim]))),
+ <<"abq">> = iolist_to_binary(join(re:split("abq","ab{4,5}bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab+bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{1,}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,}bc",[{parts,
+ <<"abq">> = iolist_to_binary(join(re:split("abq","ab{4,5}bc",[]))),
+ <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","ab{4,5}bc",[trim]))),
+ <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","ab{4,5}bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{1,3}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbbbc","ab{3,4}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{3,4}bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbbbc","ab{3,4}bc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}bc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}bc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}bc",[]))),
-?line <<"abq">> = iolist_to_binary(join(re:split("abq","ab{4,5}bc",[trim]))),
-?line <<"abq">> = iolist_to_binary(join(re:split("abq","ab{4,5}bc",[{parts,
- 2}]))),
-?line <<"abq">> = iolist_to_binary(join(re:split("abq","ab{4,5}bc",[]))),
-?line <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","ab{4,5}bc",[trim]))),
-?line <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","ab{4,5}bc",[{parts,
- 2}]))),
-?line <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","ab{4,5}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abbc","ab?bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab?bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abbc","ab?bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","ab?bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab?bc",[{parts,
+ <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","ab{4,5}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abbc","ab?bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab?bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab?bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","ab{0,1}bc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}bc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}bc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","ab?c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab?c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abbc","ab?bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","ab?bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab?bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab?c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","ab{0,1}c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abc","ab?bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","ab{0,1}bc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}bc",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^abc$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[]))),
-?line <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","^abc$",[trim]))),
-?line <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","^abc$",[{parts,
- 2}]))),
-?line <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","^abc$",[]))),
-?line <<"abcc">> = iolist_to_binary(join(re:split("abcc","^abc$",[trim]))),
-?line <<"abcc">> = iolist_to_binary(join(re:split("abcc","^abc$",[{parts,
- 2}]))),
-?line <<"abcc">> = iolist_to_binary(join(re:split("abcc","^abc$",[]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abcc","^abc",[trim]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abcc","^abc",[{parts,
- 2}]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abcc","^abc",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("aabc","abc$",[trim]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[{parts,
- 2}]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}bc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","ab?c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab?c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab?c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","ab{0,1}c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","ab{0,1}c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","^abc$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^abc$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("aabc","abc$",[trim]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[]))),
+ <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","^abc$",[trim]))),
+ <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","^abc$",[{parts,
+ 2}]))),
+ <<"abbbbc">> = iolist_to_binary(join(re:split("abbbbc","^abc$",[]))),
+ <<"abcc">> = iolist_to_binary(join(re:split("abcc","^abc$",[trim]))),
+ <<"abcc">> = iolist_to_binary(join(re:split("abcc","^abc$",[{parts,
2}]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[]))),
-?line <<"aabcd">> = iolist_to_binary(join(re:split("aabcd","abc$",[trim]))),
-?line <<"aabcd">> = iolist_to_binary(join(re:split("aabcd","abc$",[{parts,
- 2}]))),
-?line <<"aabcd">> = iolist_to_binary(join(re:split("aabcd","abc$",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","$",[trim]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","$",[{parts,
- 2}]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","a.c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","a.c",[{parts,
+ <<"abcc">> = iolist_to_binary(join(re:split("abcc","^abc$",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("abcc","^abc",[trim]))),
+ <<":c">> = iolist_to_binary(join(re:split("abcc","^abc",[{parts,
+ 2}]))),
+ <<":c">> = iolist_to_binary(join(re:split("abcc","^abc",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("aabc","abc$",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc$",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("aabc","abc$",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aabc","abc$",[]))),
+ <<"aabcd">> = iolist_to_binary(join(re:split("aabcd","abc$",[trim]))),
+ <<"aabcd">> = iolist_to_binary(join(re:split("aabcd","abc$",[{parts,
+ 2}]))),
+ <<"aabcd">> = iolist_to_binary(join(re:split("aabcd","abc$",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","$",[trim]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","$",[{parts,
+ 2}]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","a.c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","a.c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","a.c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("axc","a.c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("axc","a.c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("axc","a.c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("axyzc","a.*c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("axyzc","a.*c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("axyzc","a.*c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abd","a[bc]d",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","a[bc]d",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","a[bc]d",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bc]d",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bc]d",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bc]d",[]))),
+ <<"axyzd">> = iolist_to_binary(join(re:split("axyzd","a[bc]d",[trim]))),
+ <<"axyzd">> = iolist_to_binary(join(re:split("axyzd","a[bc]d",[{parts,
+ 2}]))),
+ <<"axyzd">> = iolist_to_binary(join(re:split("axyzd","a[bc]d",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","a[bc]d",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","a[bc]d",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","a[bc]d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ace","a[b-d]e",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ace","a[b-d]e",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ace","a[b-d]e",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("aac","a[b-d]",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aac","a[b-d]",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aac","a[b-d]",[]))),
+ ok.
+run16() ->
+ <<"">> = iolist_to_binary(join(re:split("a-","a[-b]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-","a[-b]",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","a.c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("axc","a.c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("axc","a.c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("a-","a[-b]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-","a[b-]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-","a[b-]",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("axc","a.c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("axyzc","a.*c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("axyzc","a.*c",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("a-","a[b-]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a]","a]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a]","a]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a]","a]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a]b","a[]]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a]b","a[]]b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a]b","a[]]b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aed","a[^bc]d",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aed","a[^bc]d",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aed","a[^bc]d",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^bc]d",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^bc]d",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^bc]d",[]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[trim]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[{parts,
+ 2}]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[trim]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("axyzc","a.*c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abd","a[bc]d",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abd","a[bc]d",[{parts,
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("adc","a[^-b]c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("adc","a[^-b]c",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abd","a[bc]d",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bc]d",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bc]d",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("adc","a[^-b]c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("adc","a[^]b]c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("adc","a[^]b]c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("adc","a[^]b]c",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^]b]c",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^]b]c",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bc]d",[]))),
-?line <<"axyzd">> = iolist_to_binary(join(re:split("axyzd","a[bc]d",[trim]))),
-?line <<"axyzd">> = iolist_to_binary(join(re:split("axyzd","a[bc]d",[{parts,
- 2}]))),
-?line <<"axyzd">> = iolist_to_binary(join(re:split("axyzd","a[bc]d",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","a[bc]d",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","a[bc]d",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^]b]c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-c","a[^]b]c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-c","a[^]b]c",[{parts,
2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","a[bc]d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ace","a[b-d]e",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ace","a[b-d]e",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ace","a[b-d]e",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("aac","a[b-d]",[trim]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("aac","a[b-d]",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("a-c","a[^]b]c",[]))),
+ <<"a]c">> = iolist_to_binary(join(re:split("a]c","a[^]b]c",[trim]))),
+ <<"a]c">> = iolist_to_binary(join(re:split("a]c","a[^]b]c",[{parts,
2}]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("aac","a[b-d]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-","a[-b]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-","a[-b]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-","a[-b]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-","a[b-]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-","a[b-]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-","a[b-]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a]","a]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a]","a]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a]","a]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a]b","a[]]b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a]b","a[]]b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a]b","a[]]b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aed","a[^bc]d",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aed","a[^bc]d",[{parts,
+ <<"a]c">> = iolist_to_binary(join(re:split("a]c","a[^]b]c",[]))),
+ <<":-">> = iolist_to_binary(join(re:split("a-","\\ba\\b",[trim]))),
+ <<":-">> = iolist_to_binary(join(re:split("a-","\\ba\\b",[{parts,
+ 2}]))),
+ <<":-">> = iolist_to_binary(join(re:split("a-","\\ba\\b",[]))),
+ <<"-">> = iolist_to_binary(join(re:split("-a","\\ba\\b",[trim]))),
+ <<"-:">> = iolist_to_binary(join(re:split("-a","\\ba\\b",[{parts,
+ 2}]))),
+ <<"-:">> = iolist_to_binary(join(re:split("-a","\\ba\\b",[]))),
+ <<"-:-">> = iolist_to_binary(join(re:split("-a-","\\ba\\b",[trim]))),
+ <<"-:-">> = iolist_to_binary(join(re:split("-a-","\\ba\\b",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aed","a[^bc]d",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^bc]d",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^bc]d",[{parts,
+ <<"-:-">> = iolist_to_binary(join(re:split("-a-","\\ba\\b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\by\\b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\by\\b",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^bc]d",[]))),
-?line <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[trim]))),
-?line <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[{parts,
- 2}]))),
-?line <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[]))),
-?line <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[trim]))),
-?line <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[{parts,
- 2}]))),
-?line <<"abd">> = iolist_to_binary(join(re:split("abd","a[^bc]d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("adc","a[^-b]c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("adc","a[^-b]c",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("adc","a[^-b]c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("adc","a[^]b]c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("adc","a[^]b]c",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\by\\b",[]))),
+ <<"xy">> = iolist_to_binary(join(re:split("xy","\\by\\b",[trim]))),
+ <<"xy">> = iolist_to_binary(join(re:split("xy","\\by\\b",[{parts,
+ 2}]))),
+ <<"xy">> = iolist_to_binary(join(re:split("xy","\\by\\b",[]))),
+ <<"yz">> = iolist_to_binary(join(re:split("yz","\\by\\b",[trim]))),
+ <<"yz">> = iolist_to_binary(join(re:split("yz","\\by\\b",[{parts,
+ 2}]))),
+ <<"yz">> = iolist_to_binary(join(re:split("yz","\\by\\b",[]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","\\by\\b",[trim]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","\\by\\b",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("adc","a[^]b]c",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^]b]c",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^]b]c",[{parts,
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","\\by\\b",[]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","\\Ba\\B",[trim]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","\\Ba\\B",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^]b]c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-c","a[^]b]c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-c","a[^]b]c",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-c","a[^]b]c",[]))),
-?line <<"a]c">> = iolist_to_binary(join(re:split("a]c","a[^]b]c",[trim]))),
-?line <<"a]c">> = iolist_to_binary(join(re:split("a]c","a[^]b]c",[{parts,
- 2}]))),
-?line <<"a]c">> = iolist_to_binary(join(re:split("a]c","a[^]b]c",[]))),
-?line <<":-">> = iolist_to_binary(join(re:split("a-","\\ba\\b",[trim]))),
-?line <<":-">> = iolist_to_binary(join(re:split("a-","\\ba\\b",[{parts,
- 2}]))),
-?line <<":-">> = iolist_to_binary(join(re:split("a-","\\ba\\b",[]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-a","\\ba\\b",[trim]))),
-?line <<"-:">> = iolist_to_binary(join(re:split("-a","\\ba\\b",[{parts,
- 2}]))),
-?line <<"-:">> = iolist_to_binary(join(re:split("-a","\\ba\\b",[]))),
-?line <<"-:-">> = iolist_to_binary(join(re:split("-a-","\\ba\\b",[trim]))),
-?line <<"-:-">> = iolist_to_binary(join(re:split("-a-","\\ba\\b",[{parts,
- 2}]))),
-?line <<"-:-">> = iolist_to_binary(join(re:split("-a-","\\ba\\b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\by\\b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\by\\b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\by\\b",[]))),
-?line <<"xy">> = iolist_to_binary(join(re:split("xy","\\by\\b",[trim]))),
-?line <<"xy">> = iolist_to_binary(join(re:split("xy","\\by\\b",[{parts,
- 2}]))),
-?line <<"xy">> = iolist_to_binary(join(re:split("xy","\\by\\b",[]))),
-?line <<"yz">> = iolist_to_binary(join(re:split("yz","\\by\\b",[trim]))),
-?line <<"yz">> = iolist_to_binary(join(re:split("yz","\\by\\b",[{parts,
- 2}]))),
-?line <<"yz">> = iolist_to_binary(join(re:split("yz","\\by\\b",[]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","\\by\\b",[trim]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","\\by\\b",[{parts,
- 2}]))),
-?line <<"xyz">> = iolist_to_binary(join(re:split("xyz","\\by\\b",[]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","\\Ba\\B",[trim]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","\\Ba\\B",[{parts,
- 2}]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","\\Ba\\B",[]))),
-?line <<"a-">> = iolist_to_binary(join(re:split("a-","\\Ba\\B",[trim]))),
-?line <<"a-">> = iolist_to_binary(join(re:split("a-","\\Ba\\B",[{parts,
- 2}]))),
-?line <<"a-">> = iolist_to_binary(join(re:split("a-","\\Ba\\B",[]))),
-?line <<"-a">> = iolist_to_binary(join(re:split("-a","\\Ba\\B",[trim]))),
-?line <<"-a">> = iolist_to_binary(join(re:split("-a","\\Ba\\B",[{parts,
- 2}]))),
-?line <<"-a">> = iolist_to_binary(join(re:split("-a","\\Ba\\B",[]))),
-?line <<"-a-">> = iolist_to_binary(join(re:split("-a-","\\Ba\\B",[trim]))),
-?line <<"-a-">> = iolist_to_binary(join(re:split("-a-","\\Ba\\B",[{parts,
- 2}]))),
-?line <<"-a-">> = iolist_to_binary(join(re:split("-a-","\\Ba\\B",[]))),
-?line <<"x">> = iolist_to_binary(join(re:split("xy","\\By\\b",[trim]))),
-?line <<"x:">> = iolist_to_binary(join(re:split("xy","\\By\\b",[{parts,
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","\\Ba\\B",[]))),
+ <<"a-">> = iolist_to_binary(join(re:split("a-","\\Ba\\B",[trim]))),
+ <<"a-">> = iolist_to_binary(join(re:split("a-","\\Ba\\B",[{parts,
+ 2}]))),
+ <<"a-">> = iolist_to_binary(join(re:split("a-","\\Ba\\B",[]))),
+ <<"-a">> = iolist_to_binary(join(re:split("-a","\\Ba\\B",[trim]))),
+ <<"-a">> = iolist_to_binary(join(re:split("-a","\\Ba\\B",[{parts,
+ 2}]))),
+ <<"-a">> = iolist_to_binary(join(re:split("-a","\\Ba\\B",[]))),
+ <<"-a-">> = iolist_to_binary(join(re:split("-a-","\\Ba\\B",[trim]))),
+ <<"-a-">> = iolist_to_binary(join(re:split("-a-","\\Ba\\B",[{parts,
2}]))),
-?line <<"x:">> = iolist_to_binary(join(re:split("xy","\\By\\b",[]))),
-?line <<":z">> = iolist_to_binary(join(re:split("yz","\\by\\B",[trim]))),
-?line <<":z">> = iolist_to_binary(join(re:split("yz","\\by\\B",[{parts,
+ <<"-a-">> = iolist_to_binary(join(re:split("-a-","\\Ba\\B",[]))),
+ <<"x">> = iolist_to_binary(join(re:split("xy","\\By\\b",[trim]))),
+ <<"x:">> = iolist_to_binary(join(re:split("xy","\\By\\b",[{parts,
+ 2}]))),
+ <<"x:">> = iolist_to_binary(join(re:split("xy","\\By\\b",[]))),
+ <<":z">> = iolist_to_binary(join(re:split("yz","\\by\\B",[trim]))),
+ <<":z">> = iolist_to_binary(join(re:split("yz","\\by\\B",[{parts,
+ 2}]))),
+ <<":z">> = iolist_to_binary(join(re:split("yz","\\by\\B",[]))),
+ <<"x:z">> = iolist_to_binary(join(re:split("xyz","\\By\\B",[trim]))),
+ <<"x:z">> = iolist_to_binary(join(re:split("xyz","\\By\\B",[{parts,
2}]))),
-?line <<":z">> = iolist_to_binary(join(re:split("yz","\\by\\B",[]))),
-?line <<"x:z">> = iolist_to_binary(join(re:split("xyz","\\By\\B",[trim]))),
-?line <<"x:z">> = iolist_to_binary(join(re:split("xyz","\\By\\B",[{parts,
- 2}]))),
-?line <<"x:z">> = iolist_to_binary(join(re:split("xyz","\\By\\B",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","\\W",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\W",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\W",[]))),
-?line <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","\\W",[trim]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\W",[{parts,
- 2}]))),
-?line <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","\\W",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","\\W",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\W",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\W",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","\\W",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","\\W",[{parts,
- 2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","\\W",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a b","a\\sb",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a b","a\\sb",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a b","a\\sb",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Sb",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Sb",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Sb",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[]))),
-?line <<"a b">> = iolist_to_binary(join(re:split("a b","a\\Sb",[trim]))),
-?line <<"a b">> = iolist_to_binary(join(re:split("a b","a\\Sb",[{parts,
- 2}]))),
-?line <<"a b">> = iolist_to_binary(join(re:split("a b","a\\Sb",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1","\\d",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1","\\d",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1","\\d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","\\D",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\D",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\D",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("*** Failers","\\D",[trim]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\D",[{parts,
- 2}]))),
-?line <<":::::::::::">> = iolist_to_binary(join(re:split("*** Failers","\\D",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","\\D",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\D",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","\\D",[]))),
-?line <<"1">> = iolist_to_binary(join(re:split("1","\\D",[trim]))),
-?line <<"1">> = iolist_to_binary(join(re:split("1","\\D",[{parts,
- 2}]))),
-?line <<"1">> = iolist_to_binary(join(re:split("1","\\D",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","[\\w]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","[\\w]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","[\\w]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","[\\W]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[]))),
-?line <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\W]",[trim]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\W]",[{parts,
- 2}]))),
-?line <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\W]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","[\\W]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","[\\W]",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","[\\W]",[{parts,
- 2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","[\\W]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a b","a[\\s]b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a b","a[\\s]b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a b","a[\\s]b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[\\S]b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[\\S]b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[\\S]b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[]))),
-?line <<"a b">> = iolist_to_binary(join(re:split("a b","a[\\S]b",[trim]))),
-?line <<"a b">> = iolist_to_binary(join(re:split("a b","a[\\S]b",[{parts,
- 2}]))),
-?line <<"a b">> = iolist_to_binary(join(re:split("a b","a[\\S]b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("1","[\\d]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("1","[\\d]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("1","[\\d]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","[\\D]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("*** Failers","[\\D]",[trim]))),
-?line <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\D]",[{parts,
- 2}]))),
-?line <<":::::::::::">> = iolist_to_binary(join(re:split("*** Failers","[\\D]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","[\\D]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[]))),
-?line <<"1">> = iolist_to_binary(join(re:split("1","[\\D]",[trim]))),
-?line <<"1">> = iolist_to_binary(join(re:split("1","[\\D]",[{parts,
- 2}]))),
-?line <<"1">> = iolist_to_binary(join(re:split("1","[\\D]",[]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abc","ab|cd",[trim]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abc","ab|cd",[{parts,
+ <<"x:z">> = iolist_to_binary(join(re:split("xyz","\\By\\B",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","\\W",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\W",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\W",[]))),
+ <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","\\W",[trim]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\W",[{parts,
+ 2}]))),
+ <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","\\W",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","\\W",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\W",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\W",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","\\W",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","\\W",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","\\W",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a b","a\\sb",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a b","a\\sb",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a b","a\\sb",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Sb",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Sb",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Sb",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a\\Sb",[]))),
+ <<"a b">> = iolist_to_binary(join(re:split("a b","a\\Sb",[trim]))),
+ <<"a b">> = iolist_to_binary(join(re:split("a b","a\\Sb",[{parts,
+ 2}]))),
+ <<"a b">> = iolist_to_binary(join(re:split("a b","a\\Sb",[]))),
+ <<"">> = iolist_to_binary(join(re:split("1","\\d",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("1","\\d",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("1","\\d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","\\D",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\D",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\D",[]))),
+ <<"">> = iolist_to_binary(join(re:split("*** Failers","\\D",[trim]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\D",[{parts,
+ 2}]))),
+ <<":::::::::::">> = iolist_to_binary(join(re:split("*** Failers","\\D",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","\\D",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\D",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","\\D",[]))),
+ <<"1">> = iolist_to_binary(join(re:split("1","\\D",[trim]))),
+ <<"1">> = iolist_to_binary(join(re:split("1","\\D",[{parts,
+ 2}]))),
+ <<"1">> = iolist_to_binary(join(re:split("1","\\D",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","[\\w]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","[\\w]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","[\\w]",[]))),
+ ok.
+run17() ->
+ <<"">> = iolist_to_binary(join(re:split("-","[\\W]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[]))),
+ <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\W]",[trim]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\W]",[{parts,
+ 2}]))),
+ <<"::::Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\W]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","[\\W]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\W]",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","[\\W]",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","[\\W]",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","[\\W]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a b","a[\\s]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a b","a[\\s]b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a b","a[\\s]b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[\\S]b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[\\S]b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[\\S]b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a-b","a[\\S]b",[]))),
+ <<"a b">> = iolist_to_binary(join(re:split("a b","a[\\S]b",[trim]))),
+ <<"a b">> = iolist_to_binary(join(re:split("a b","a[\\S]b",[{parts,
+ 2}]))),
+ <<"a b">> = iolist_to_binary(join(re:split("a b","a[\\S]b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("1","[\\d]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("1","[\\d]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("1","[\\d]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","[\\D]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("*** Failers","[\\D]",[trim]))),
+ <<":** Failers">> = iolist_to_binary(join(re:split("*** Failers","[\\D]",[{parts,
+ 2}]))),
+ <<":::::::::::">> = iolist_to_binary(join(re:split("*** Failers","[\\D]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","[\\D]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[\\D]",[]))),
+ <<"1">> = iolist_to_binary(join(re:split("1","[\\D]",[trim]))),
+ <<"1">> = iolist_to_binary(join(re:split("1","[\\D]",[{parts,
+ 2}]))),
+ <<"1">> = iolist_to_binary(join(re:split("1","[\\D]",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","ab|cd",[trim]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","ab|cd",[{parts,
+ 2}]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","ab|cd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","ab|cd",[trim]))),
+ <<":cd">> = iolist_to_binary(join(re:split("abcd","ab|cd",[{parts,
2}]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abc","ab|cd",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","ab|cd",[trim]))),
-?line <<":cd">> = iolist_to_binary(join(re:split("abcd","ab|cd",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcd","ab|cd",[]))),
-?line <<"d">> = iolist_to_binary(join(re:split("def","()ef",[trim]))),
-?line <<"d::">> = iolist_to_binary(join(re:split("def","()ef",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("abcd","ab|cd",[]))),
+ <<"d">> = iolist_to_binary(join(re:split("def","()ef",[trim]))),
+ <<"d::">> = iolist_to_binary(join(re:split("def","()ef",[{parts,
+ 2}]))),
+ <<"d::">> = iolist_to_binary(join(re:split("def","()ef",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a(b","a\\(b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a(b","a\\(b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a(b","a\\(b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","a\\(*b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","a\\(*b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","a\\(*b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a((b","a\\(*b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a((b","a\\(*b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a((b","a\\(*b",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","a\\\\b",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","a\\\\b",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","a\\\\b",[]))),
+ <<":a:a:bc">> = iolist_to_binary(join(re:split("abc","((a))",[trim]))),
+ <<":a:a:bc">> = iolist_to_binary(join(re:split("abc","((a))",[{parts,
2}]))),
-?line <<"d::">> = iolist_to_binary(join(re:split("def","()ef",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a(b","a\\(b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a(b","a\\(b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a(b","a\\(b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","a\\(*b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","a\\(*b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","a\\(*b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a((b","a\\(*b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a((b","a\\(*b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a((b","a\\(*b",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","a\\\\b",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","a\\\\b",[{parts,
+ <<":a:a:bc">> = iolist_to_binary(join(re:split("abc","((a))",[]))),
+ <<":a:c">> = iolist_to_binary(join(re:split("abc","(a)b(c)",[trim]))),
+ <<":a:c:">> = iolist_to_binary(join(re:split("abc","(a)b(c)",[{parts,
2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","a\\\\b",[]))),
-?line <<":a:a:bc">> = iolist_to_binary(join(re:split("abc","((a))",[trim]))),
-?line <<":a:a:bc">> = iolist_to_binary(join(re:split("abc","((a))",[{parts,
- 2}]))),
-?line <<":a:a:bc">> = iolist_to_binary(join(re:split("abc","((a))",[]))),
-?line <<":a:c">> = iolist_to_binary(join(re:split("abc","(a)b(c)",[trim]))),
-?line <<":a:c:">> = iolist_to_binary(join(re:split("abc","(a)b(c)",[{parts,
+ <<":a:c:">> = iolist_to_binary(join(re:split("abc","(a)b(c)",[]))),
+ <<"aabb">> = iolist_to_binary(join(re:split("aabbabc","a+b+c",[trim]))),
+ <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a+b+c",[{parts,
+ 2}]))),
+ <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a+b+c",[]))),
+ <<"aabb">> = iolist_to_binary(join(re:split("aabbabc","a{1,}b{1,}c",[trim]))),
+ <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a{1,}b{1,}c",[{parts,
+ 2}]))),
+ <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a{1,}b{1,}c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcabc","a.+?c",[trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","a.+?c",[{parts,
2}]))),
-?line <<":a:c:">> = iolist_to_binary(join(re:split("abc","(a)b(c)",[]))),
-?line <<"aabb">> = iolist_to_binary(join(re:split("aabbabc","a+b+c",[trim]))),
-?line <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a+b+c",[{parts,
- 2}]))),
-?line <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a+b+c",[]))),
-?line <<"aabb">> = iolist_to_binary(join(re:split("aabbabc","a{1,}b{1,}c",[trim]))),
-?line <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a{1,}b{1,}c",[{parts,
- 2}]))),
-?line <<"aabb:">> = iolist_to_binary(join(re:split("aabbabc","a{1,}b{1,}c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcabc","a.+?c",[trim]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcabc","a.+?c",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("abcabc","a.+?c",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b)*",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)*",[{parts,
+ 2}]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)*",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b){0,}",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){0,}",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abcabc","a.+?c",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b)*",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)*",[{parts,
- 2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)*",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b){0,}",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){0,}",[{parts,
- 2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){0,}",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b)+",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)+",[{parts,
- 2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)+",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b){1,}",[trim]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){1,}",[{parts,
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){0,}",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b)+",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)+",[{parts,
+ 2}]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b)+",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("ab","(a+|b){1,}",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){1,}",[{parts,
+ 2}]))),
+ <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){1,}",[]))),
+ ok.
+run18() ->
+ <<":a::b">> = iolist_to_binary(join(re:split("ab","(a+|b)?",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("ab","(a+|b)?",[{parts,
+ 2}]))),
+ <<":a::b:">> = iolist_to_binary(join(re:split("ab","(a+|b)?",[]))),
+ <<":a::b">> = iolist_to_binary(join(re:split("ab","(a+|b){0,1}",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("ab","(a+|b){0,1}",[{parts,
2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("ab","(a+|b){1,}",[]))),
-?line <<":a::b">> = iolist_to_binary(join(re:split("ab","(a+|b)?",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("ab","(a+|b)?",[{parts,
- 2}]))),
-?line <<":a::b:">> = iolist_to_binary(join(re:split("ab","(a+|b)?",[]))),
-?line <<":a::b">> = iolist_to_binary(join(re:split("ab","(a+|b){0,1}",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("ab","(a+|b){0,1}",[{parts,
+ <<":a::b:">> = iolist_to_binary(join(re:split("ab","(a+|b){0,1}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("cde","[^ab]*",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("cde","[^ab]*",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("cde","[^ab]*",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[{parts,
2}]))),
-?line <<":a::b:">> = iolist_to_binary(join(re:split("ab","(a+|b){0,1}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("cde","[^ab]*",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("cde","[^ab]*",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("cde","[^ab]*",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","abc",[trim]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","abc",[{parts,
+ 2}]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","abc",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("abbbcd","([abc])*d",[trim]))),
+ <<":c:">> = iolist_to_binary(join(re:split("abbbcd","([abc])*d",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","abc",[trim]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","abc",[{parts,
- 2}]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","abc",[]))),
-?line <<":c">> = iolist_to_binary(join(re:split("abbbcd","([abc])*d",[trim]))),
-?line <<":c:">> = iolist_to_binary(join(re:split("abbbcd","([abc])*d",[{parts,
- 2}]))),
-?line <<":c:">> = iolist_to_binary(join(re:split("abbbcd","([abc])*d",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("abcd","([abc])*bcd",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("abcd","([abc])*bcd",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("abcd","([abc])*bcd",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("e","a|b|c|d|e",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("e","a|b|c|d|e",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("e","a|b|c|d|e",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("ef","(a|b|c|d|e)f",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ef","(a|b|c|d|e)f",[{parts,
+ <<":c:">> = iolist_to_binary(join(re:split("abbbcd","([abc])*d",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("abcd","([abc])*bcd",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("abcd","([abc])*bcd",[{parts,
2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ef","(a|b|c|d|e)f",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcdefg","abcd*efg",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcdefg","abcd*efg",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcdefg","abcd*efg",[]))),
-?line <<"x:y:z">> = iolist_to_binary(join(re:split("xabyabbbz","ab*",[trim]))),
-?line <<"x:yabbbz">> = iolist_to_binary(join(re:split("xabyabbbz","ab*",[{parts,
- 2}]))),
-?line <<"x:y:z">> = iolist_to_binary(join(re:split("xabyabbbz","ab*",[]))),
-?line <<"x:y:z">> = iolist_to_binary(join(re:split("xayabbbz","ab*",[trim]))),
-?line <<"x:yabbbz">> = iolist_to_binary(join(re:split("xayabbbz","ab*",[{parts,
- 2}]))),
-?line <<"x:y:z">> = iolist_to_binary(join(re:split("xayabbbz","ab*",[]))),
-?line <<"ab:cd">> = iolist_to_binary(join(re:split("abcde","(ab|cd)e",[trim]))),
-?line <<"ab:cd:">> = iolist_to_binary(join(re:split("abcde","(ab|cd)e",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("abcd","([abc])*bcd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("e","a|b|c|d|e",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("e","a|b|c|d|e",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("e","a|b|c|d|e",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("ef","(a|b|c|d|e)f",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("ef","(a|b|c|d|e)f",[{parts,
2}]))),
-?line <<"ab:cd:">> = iolist_to_binary(join(re:split("abcde","(ab|cd)e",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("hij","[abhgefdc]ij",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("hij","[abhgefdc]ij",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("hij","[abhgefdc]ij",[]))),
-?line <<"abcd">> = iolist_to_binary(join(re:split("abcdef","(abc|)ef",[trim]))),
-?line <<"abcd::">> = iolist_to_binary(join(re:split("abcdef","(abc|)ef",[{parts,
+ <<":e:">> = iolist_to_binary(join(re:split("ef","(a|b|c|d|e)f",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcdefg","abcd*efg",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcdefg","abcd*efg",[{parts,
2}]))),
-?line <<"abcd::">> = iolist_to_binary(join(re:split("abcdef","(abc|)ef",[]))),
-?line <<"a:b">> = iolist_to_binary(join(re:split("abcd","(a|b)c*d",[trim]))),
-?line <<"a:b:">> = iolist_to_binary(join(re:split("abcd","(a|b)c*d",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("abcdefg","abcd*efg",[]))),
+ <<"x:y:z">> = iolist_to_binary(join(re:split("xabyabbbz","ab*",[trim]))),
+ <<"x:yabbbz">> = iolist_to_binary(join(re:split("xabyabbbz","ab*",[{parts,
+ 2}]))),
+ <<"x:y:z">> = iolist_to_binary(join(re:split("xabyabbbz","ab*",[]))),
+ <<"x:y:z">> = iolist_to_binary(join(re:split("xayabbbz","ab*",[trim]))),
+ <<"x:yabbbz">> = iolist_to_binary(join(re:split("xayabbbz","ab*",[{parts,
+ 2}]))),
+ <<"x:y:z">> = iolist_to_binary(join(re:split("xayabbbz","ab*",[]))),
+ <<"ab:cd">> = iolist_to_binary(join(re:split("abcde","(ab|cd)e",[trim]))),
+ <<"ab:cd:">> = iolist_to_binary(join(re:split("abcde","(ab|cd)e",[{parts,
2}]))),
-?line <<"a:b:">> = iolist_to_binary(join(re:split("abcd","(a|b)c*d",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("abc","(ab|ab*)bc",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("abc","(ab|ab*)bc",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("abc","(ab|ab*)bc",[]))),
-?line <<":bc">> = iolist_to_binary(join(re:split("abc","a([bc]*)c*",[trim]))),
-?line <<":bc:">> = iolist_to_binary(join(re:split("abc","a([bc]*)c*",[{parts,
+ <<"ab:cd:">> = iolist_to_binary(join(re:split("abcde","(ab|cd)e",[]))),
+ <<"">> = iolist_to_binary(join(re:split("hij","[abhgefdc]ij",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("hij","[abhgefdc]ij",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("hij","[abhgefdc]ij",[]))),
+ <<"abcd">> = iolist_to_binary(join(re:split("abcdef","(abc|)ef",[trim]))),
+ <<"abcd::">> = iolist_to_binary(join(re:split("abcdef","(abc|)ef",[{parts,
2}]))),
-?line <<":bc:">> = iolist_to_binary(join(re:split("abc","a([bc]*)c*",[]))),
-?line <<":bc:d">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c*d)",[trim]))),
-?line <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c*d)",[{parts,
- 2}]))),
-?line <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c*d)",[]))),
-?line <<":bc:d">> = iolist_to_binary(join(re:split("abcd","a([bc]+)(c*d)",[trim]))),
-?line <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]+)(c*d)",[{parts,
- 2}]))),
-?line <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]+)(c*d)",[]))),
-?line <<":b:cd">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c+d)",[trim]))),
-?line <<":b:cd:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c+d)",[{parts,
- 2}]))),
-?line <<":b:cd:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c+d)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]*dcdcde",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]*dcdcde",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]*dcdcde",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bcd]+dcdcde",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bcd]+dcdcde",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bcd]+dcdcde",[]))),
-?line <<"abcde">> = iolist_to_binary(join(re:split("abcde","a[bcd]+dcdcde",[trim]))),
-?line <<"abcde">> = iolist_to_binary(join(re:split("abcde","a[bcd]+dcdcde",[{parts,
- 2}]))),
-?line <<"abcde">> = iolist_to_binary(join(re:split("abcde","a[bcd]+dcdcde",[]))),
-?line <<"adcdcde">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]+dcdcde",[trim]))),
-?line <<"adcdcde">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]+dcdcde",[{parts,
- 2}]))),
-?line <<"adcdcde">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]+dcdcde",[]))),
-?line <<":ab">> = iolist_to_binary(join(re:split("abc","(ab|a)b*c",[trim]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("abc","(ab|a)b*c",[{parts,
+ <<"abcd::">> = iolist_to_binary(join(re:split("abcdef","(abc|)ef",[]))),
+ <<"a:b">> = iolist_to_binary(join(re:split("abcd","(a|b)c*d",[trim]))),
+ <<"a:b:">> = iolist_to_binary(join(re:split("abcd","(a|b)c*d",[{parts,
+ 2}]))),
+ <<"a:b:">> = iolist_to_binary(join(re:split("abcd","(a|b)c*d",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("abc","(ab|ab*)bc",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("abc","(ab|ab*)bc",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("abc","(ab|ab*)bc",[]))),
+ <<":bc">> = iolist_to_binary(join(re:split("abc","a([bc]*)c*",[trim]))),
+ <<":bc:">> = iolist_to_binary(join(re:split("abc","a([bc]*)c*",[{parts,
2}]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("abc","(ab|a)b*c",[]))),
-?line <<":abc:a:b:d">> = iolist_to_binary(join(re:split("abcd","((a)(b)c)(d)",[trim]))),
-?line <<":abc:a:b:d:">> = iolist_to_binary(join(re:split("abcd","((a)(b)c)(d)",[{parts,
+ <<":bc:">> = iolist_to_binary(join(re:split("abc","a([bc]*)c*",[]))),
+ <<":bc:d">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c*d)",[trim]))),
+ <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c*d)",[{parts,
2}]))),
-?line <<":abc:a:b:d:">> = iolist_to_binary(join(re:split("abcd","((a)(b)c)(d)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("alpha","[a-zA-Z_][a-zA-Z0-9_]*",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("alpha","[a-zA-Z_][a-zA-Z0-9_]*",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("alpha","[a-zA-Z_][a-zA-Z0-9_]*",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("abh","^a(bc+|b[eh])g|.h$",[trim]))),
-?line <<"a::">> = iolist_to_binary(join(re:split("abh","^a(bc+|b[eh])g|.h$",[{parts,
- 2}]))),
-?line <<"a::">> = iolist_to_binary(join(re:split("abh","^a(bc+|b[eh])g|.h$",[]))),
-?line <<":effgz">> = iolist_to_binary(join(re:split("effgz","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
-?line <<":effgz::">> = iolist_to_binary(join(re:split("effgz","(bc+d$|ef*g.|h?i(j|k))",[{parts,
- 2}]))),
-?line <<":effgz::">> = iolist_to_binary(join(re:split("effgz","(bc+d$|ef*g.|h?i(j|k))",[]))),
-?line <<":ij:j">> = iolist_to_binary(join(re:split("ij","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
-?line <<":ij:j:">> = iolist_to_binary(join(re:split("ij","(bc+d$|ef*g.|h?i(j|k))",[{parts,
- 2}]))),
-?line <<":ij:j:">> = iolist_to_binary(join(re:split("ij","(bc+d$|ef*g.|h?i(j|k))",[]))),
-?line <<"r:effgz">> = iolist_to_binary(join(re:split("reffgz","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
-?line <<"r:effgz::">> = iolist_to_binary(join(re:split("reffgz","(bc+d$|ef*g.|h?i(j|k))",[{parts,
- 2}]))),
-?line <<"r:effgz::">> = iolist_to_binary(join(re:split("reffgz","(bc+d$|ef*g.|h?i(j|k))",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[]))),
-?line <<"effg">> = iolist_to_binary(join(re:split("effg","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
-?line <<"effg">> = iolist_to_binary(join(re:split("effg","(bc+d$|ef*g.|h?i(j|k))",[{parts,
- 2}]))),
-?line <<"effg">> = iolist_to_binary(join(re:split("effg","(bc+d$|ef*g.|h?i(j|k))",[]))),
-?line <<"bcdd">> = iolist_to_binary(join(re:split("bcdd","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
-?line <<"bcdd">> = iolist_to_binary(join(re:split("bcdd","(bc+d$|ef*g.|h?i(j|k))",[{parts,
+ <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c*d)",[]))),
+ <<":bc:d">> = iolist_to_binary(join(re:split("abcd","a([bc]+)(c*d)",[trim]))),
+ <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]+)(c*d)",[{parts,
+ 2}]))),
+ <<":bc:d:">> = iolist_to_binary(join(re:split("abcd","a([bc]+)(c*d)",[]))),
+ ok.
+run19() ->
+ <<":b:cd">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c+d)",[trim]))),
+ <<":b:cd:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c+d)",[{parts,
+ 2}]))),
+ <<":b:cd:">> = iolist_to_binary(join(re:split("abcd","a([bc]*)(c+d)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]*dcdcde",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]*dcdcde",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]*dcdcde",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bcd]+dcdcde",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bcd]+dcdcde",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[bcd]+dcdcde",[]))),
+ <<"abcde">> = iolist_to_binary(join(re:split("abcde","a[bcd]+dcdcde",[trim]))),
+ <<"abcde">> = iolist_to_binary(join(re:split("abcde","a[bcd]+dcdcde",[{parts,
+ 2}]))),
+ <<"abcde">> = iolist_to_binary(join(re:split("abcde","a[bcd]+dcdcde",[]))),
+ <<"adcdcde">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]+dcdcde",[trim]))),
+ <<"adcdcde">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]+dcdcde",[{parts,
+ 2}]))),
+ <<"adcdcde">> = iolist_to_binary(join(re:split("adcdcde","a[bcd]+dcdcde",[]))),
+ <<":ab">> = iolist_to_binary(join(re:split("abc","(ab|a)b*c",[trim]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("abc","(ab|a)b*c",[{parts,
+ 2}]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("abc","(ab|a)b*c",[]))),
+ <<":abc:a:b:d">> = iolist_to_binary(join(re:split("abcd","((a)(b)c)(d)",[trim]))),
+ <<":abc:a:b:d:">> = iolist_to_binary(join(re:split("abcd","((a)(b)c)(d)",[{parts,
+ 2}]))),
+ <<":abc:a:b:d:">> = iolist_to_binary(join(re:split("abcd","((a)(b)c)(d)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("alpha","[a-zA-Z_][a-zA-Z0-9_]*",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("alpha","[a-zA-Z_][a-zA-Z0-9_]*",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("alpha","[a-zA-Z_][a-zA-Z0-9_]*",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("abh","^a(bc+|b[eh])g|.h$",[trim]))),
+ <<"a::">> = iolist_to_binary(join(re:split("abh","^a(bc+|b[eh])g|.h$",[{parts,
+ 2}]))),
+ <<"a::">> = iolist_to_binary(join(re:split("abh","^a(bc+|b[eh])g|.h$",[]))),
+ <<":effgz">> = iolist_to_binary(join(re:split("effgz","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
+ <<":effgz::">> = iolist_to_binary(join(re:split("effgz","(bc+d$|ef*g.|h?i(j|k))",[{parts,
2}]))),
-?line <<"bcdd">> = iolist_to_binary(join(re:split("bcdd","(bc+d$|ef*g.|h?i(j|k))",[]))),
-?line <<":a:a:a:a:a:a:a:a:a:a">> = iolist_to_binary(join(re:split("a","((((((((((a))))))))))",[trim]))),
-?line <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","((((((((((a))))))))))",[{parts,
- 2}]))),
-?line <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","((((((((((a))))))))))",[]))),
-?line <<":a:a:a:a:a:a:a:a:a:a">> = iolist_to_binary(join(re:split("aa","((((((((((a))))))))))\\10",[trim]))),
-?line <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("aa","((((((((((a))))))))))\\10",[{parts,
+ <<":effgz::">> = iolist_to_binary(join(re:split("effgz","(bc+d$|ef*g.|h?i(j|k))",[]))),
+ <<":ij:j">> = iolist_to_binary(join(re:split("ij","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
+ <<":ij:j:">> = iolist_to_binary(join(re:split("ij","(bc+d$|ef*g.|h?i(j|k))",[{parts,
+ 2}]))),
+ <<":ij:j:">> = iolist_to_binary(join(re:split("ij","(bc+d$|ef*g.|h?i(j|k))",[]))),
+ <<"r:effgz">> = iolist_to_binary(join(re:split("reffgz","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
+ <<"r:effgz::">> = iolist_to_binary(join(re:split("reffgz","(bc+d$|ef*g.|h?i(j|k))",[{parts,
2}]))),
-?line <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("aa","((((((((((a))))))))))\\10",[]))),
-?line <<":a:a:a:a:a:a:a:a:a">> = iolist_to_binary(join(re:split("a","(((((((((a)))))))))",[trim]))),
-?line <<":a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","(((((((((a)))))))))",[{parts,
- 2}]))),
-?line <<":a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","(((((((((a)))))))))",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","multiple words of text",[trim]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","multiple words of text",[{parts,
- 2}]))),
-?line <<"aa">> = iolist_to_binary(join(re:split("aa","multiple words of text",[]))),
-?line <<"uh-uh">> = iolist_to_binary(join(re:split("uh-uh","multiple words of text",[trim]))),
-?line <<"uh-uh">> = iolist_to_binary(join(re:split("uh-uh","multiple words of text",[{parts,
- 2}]))),
-?line <<"uh-uh">> = iolist_to_binary(join(re:split("uh-uh","multiple words of text",[]))),
-?line <<":, yeah">> = iolist_to_binary(join(re:split("multiple words, yeah","multiple words",[trim]))),
-?line <<":, yeah">> = iolist_to_binary(join(re:split("multiple words, yeah","multiple words",[{parts,
- 2}]))),
-?line <<":, yeah">> = iolist_to_binary(join(re:split("multiple words, yeah","multiple words",[]))),
-?line <<":ab:de">> = iolist_to_binary(join(re:split("abcde","(.*)c(.*)",[trim]))),
-?line <<":ab:de:">> = iolist_to_binary(join(re:split("abcde","(.*)c(.*)",[{parts,
- 2}]))),
-?line <<":ab:de:">> = iolist_to_binary(join(re:split("abcde","(.*)c(.*)",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("(a, b)","\\((.*), (.*)\\)",[trim]))),
-?line <<":a:b:">> = iolist_to_binary(join(re:split("(a, b)","\\((.*), (.*)\\)",[{parts,
+ <<"r:effgz::">> = iolist_to_binary(join(re:split("reffgz","(bc+d$|ef*g.|h?i(j|k))",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[]))),
+ <<"effg">> = iolist_to_binary(join(re:split("effg","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
+ <<"effg">> = iolist_to_binary(join(re:split("effg","(bc+d$|ef*g.|h?i(j|k))",[{parts,
+ 2}]))),
+ <<"effg">> = iolist_to_binary(join(re:split("effg","(bc+d$|ef*g.|h?i(j|k))",[]))),
+ <<"bcdd">> = iolist_to_binary(join(re:split("bcdd","(bc+d$|ef*g.|h?i(j|k))",[trim]))),
+ <<"bcdd">> = iolist_to_binary(join(re:split("bcdd","(bc+d$|ef*g.|h?i(j|k))",[{parts,
+ 2}]))),
+ <<"bcdd">> = iolist_to_binary(join(re:split("bcdd","(bc+d$|ef*g.|h?i(j|k))",[]))),
+ <<":a:a:a:a:a:a:a:a:a:a">> = iolist_to_binary(join(re:split("a","((((((((((a))))))))))",[trim]))),
+ <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","((((((((((a))))))))))",[{parts,
+ 2}]))),
+ <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","((((((((((a))))))))))",[]))),
+ <<":a:a:a:a:a:a:a:a:a:a">> = iolist_to_binary(join(re:split("aa","((((((((((a))))))))))\\10",[trim]))),
+ <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("aa","((((((((((a))))))))))\\10",[{parts,
+ 2}]))),
+ <<":a:a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("aa","((((((((((a))))))))))\\10",[]))),
+ <<":a:a:a:a:a:a:a:a:a">> = iolist_to_binary(join(re:split("a","(((((((((a)))))))))",[trim]))),
+ <<":a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","(((((((((a)))))))))",[{parts,
+ 2}]))),
+ <<":a:a:a:a:a:a:a:a:a:">> = iolist_to_binary(join(re:split("a","(((((((((a)))))))))",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","multiple words of text",[trim]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","multiple words of text",[{parts,
2}]))),
-?line <<":a:b:">> = iolist_to_binary(join(re:split("(a, b)","\\((.*), (.*)\\)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","abcd",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","abcd",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcd","abcd",[]))),
-?line <<":bc">> = iolist_to_binary(join(re:split("abcd","a(bc)d",[trim]))),
-?line <<":bc:">> = iolist_to_binary(join(re:split("abcd","a(bc)d",[{parts,
- 2}]))),
-?line <<":bc:">> = iolist_to_binary(join(re:split("abcd","a(bc)d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ac","a[-]?c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ac","a[-]?c",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ac","a[-]?c",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[{parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abcabc","([a-c]*)\\1",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabc","([a-c]*)\\1",[{parts,
+ <<"aa">> = iolist_to_binary(join(re:split("aa","multiple words of text",[]))),
+ <<"uh-uh">> = iolist_to_binary(join(re:split("uh-uh","multiple words of text",[trim]))),
+ <<"uh-uh">> = iolist_to_binary(join(re:split("uh-uh","multiple words of text",[{parts,
+ 2}]))),
+ <<"uh-uh">> = iolist_to_binary(join(re:split("uh-uh","multiple words of text",[]))),
+ <<":, yeah">> = iolist_to_binary(join(re:split("multiple words, yeah","multiple words",[trim]))),
+ <<":, yeah">> = iolist_to_binary(join(re:split("multiple words, yeah","multiple words",[{parts,
+ 2}]))),
+ <<":, yeah">> = iolist_to_binary(join(re:split("multiple words, yeah","multiple words",[]))),
+ <<":ab:de">> = iolist_to_binary(join(re:split("abcde","(.*)c(.*)",[trim]))),
+ <<":ab:de:">> = iolist_to_binary(join(re:split("abcde","(.*)c(.*)",[{parts,
+ 2}]))),
+ <<":ab:de:">> = iolist_to_binary(join(re:split("abcde","(.*)c(.*)",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("(a, b)","\\((.*), (.*)\\)",[trim]))),
+ <<":a:b:">> = iolist_to_binary(join(re:split("(a, b)","\\((.*), (.*)\\)",[{parts,
+ 2}]))),
+ <<":a:b:">> = iolist_to_binary(join(re:split("(a, b)","\\((.*), (.*)\\)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","abcd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","abcd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","abcd",[]))),
+ <<":bc">> = iolist_to_binary(join(re:split("abcd","a(bc)d",[trim]))),
+ <<":bc:">> = iolist_to_binary(join(re:split("abcd","a(bc)d",[{parts,
+ 2}]))),
+ <<":bc:">> = iolist_to_binary(join(re:split("abcd","a(bc)d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ac","a[-]?c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","a[-]?c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","a[-]?c",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(abc)\\1",[]))),
+ ok.
+run20() ->
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","([a-c]*)\\1",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","([a-c]*)\\1",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","([a-c]*)\\1",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("a","(a)|\\1",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("a","(a)|\\1",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("a","(a)|\\1",[]))),
+ <<"*** F:a:ilers">> = iolist_to_binary(join(re:split("*** Failers","(a)|\\1",[trim]))),
+ <<"*** F:a:ilers">> = iolist_to_binary(join(re:split("*** Failers","(a)|\\1",[{parts,
2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abcabc","([a-c]*)\\1",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("a","(a)|\\1",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("a","(a)|\\1",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("a","(a)|\\1",[]))),
-?line <<"*** F:a:ilers">> = iolist_to_binary(join(re:split("*** Failers","(a)|\\1",[trim]))),
-?line <<"*** F:a:ilers">> = iolist_to_binary(join(re:split("*** Failers","(a)|\\1",[{parts,
- 2}]))),
-?line <<"*** F:a:ilers">> = iolist_to_binary(join(re:split("*** Failers","(a)|\\1",[]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("ab","(a)|\\1",[trim]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("ab","(a)|\\1",[{parts,
- 2}]))),
-?line <<":a:b">> = iolist_to_binary(join(re:split("ab","(a)|\\1",[]))),
-?line <<"x">> = iolist_to_binary(join(re:split("x","(a)|\\1",[trim]))),
-?line <<"x">> = iolist_to_binary(join(re:split("x","(a)|\\1",[{parts,
- 2}]))),
-?line <<"x">> = iolist_to_binary(join(re:split("x","(a)|\\1",[]))),
-?line <<":bb:b:b:cbc:c">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2)*",[trim]))),
-?line <<":bb:b:bcbc">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2)*",[{parts,
- 2}]))),
-?line <<":bb:b:b:cbc:c:">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2)*",[]))),
-?line <<":cbc:c">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2){3}",[trim]))),
-?line <<":cbc:c:">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2){3}",[{parts,
- 2}]))),
-?line <<":cbc:c:">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2){3}",[]))),
-?line <<"aaaxabaxbaax:bbax:b:a">> = iolist_to_binary(join(re:split("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+",[trim]))),
-?line <<"aaaxabaxbaax:bbax:b:a:">> = iolist_to_binary(join(re:split("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+",[{parts,
- 2}]))),
-?line <<"aaaxabaxbaax:bbax:b:a:">> = iolist_to_binary(join(re:split("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+",[]))),
-?line <<"bbaababbabaaaaa:bba:b:a">> = iolist_to_binary(join(re:split("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}",[trim]))),
-?line <<"bbaababbabaaaaa:bba:b:a:">> = iolist_to_binary(join(re:split("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}",[{parts,
- 2}]))),
-?line <<"bbaababbabaaaaa:bba:b:a:">> = iolist_to_binary(join(re:split("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","abc",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","abc",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","abc",[caseless]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XABCY","abc",[caseless,
- trim]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XABCY","abc",[caseless,
- {parts,
+ <<"*** F:a:ilers">> = iolist_to_binary(join(re:split("*** Failers","(a)|\\1",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("ab","(a)|\\1",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("ab","(a)|\\1",[{parts,
2}]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XABCY","abc",[caseless]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("ABABC","abc",[caseless,
- trim]))),
-?line <<"AB:">> = iolist_to_binary(join(re:split("ABABC","abc",[caseless,
- {parts,
- 2}]))),
-?line <<"AB:">> = iolist_to_binary(join(re:split("ABABC","abc",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[caseless,
+ <<":a:b">> = iolist_to_binary(join(re:split("ab","(a)|\\1",[]))),
+ <<"x">> = iolist_to_binary(join(re:split("x","(a)|\\1",[trim]))),
+ <<"x">> = iolist_to_binary(join(re:split("x","(a)|\\1",[{parts,
+ 2}]))),
+ <<"x">> = iolist_to_binary(join(re:split("x","(a)|\\1",[]))),
+ <<":bb:b:b:cbc:c">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2)*",[trim]))),
+ <<":bb:b:bcbc">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2)*",[{parts,
+ 2}]))),
+ <<":bb:b:b:cbc:c:">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2)*",[]))),
+ <<":cbc:c">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2){3}",[trim]))),
+ <<":cbc:c:">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2){3}",[{parts,
+ 2}]))),
+ <<":cbc:c:">> = iolist_to_binary(join(re:split("ababbbcbc","(([a-c])b*?\\2){3}",[]))),
+ <<"aaaxabaxbaax:bbax:b:a">> = iolist_to_binary(join(re:split("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+",[trim]))),
+ <<"aaaxabaxbaax:bbax:b:a:">> = iolist_to_binary(join(re:split("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+",[{parts,
+ 2}]))),
+ <<"aaaxabaxbaax:bbax:b:a:">> = iolist_to_binary(join(re:split("aaaxabaxbaaxbbax","((\\3|b)\\2(a)x)+",[]))),
+ <<"bbaababbabaaaaa:bba:b:a">> = iolist_to_binary(join(re:split("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}",[trim]))),
+ <<"bbaababbabaaaaa:bba:b:a:">> = iolist_to_binary(join(re:split("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}",[{parts,
+ 2}]))),
+ <<"bbaababbabaaaaa:bba:b:a:">> = iolist_to_binary(join(re:split("bbaababbabaaaaabbaaaabba","((\\3|b)\\2(a)){2,}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","abc",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","abc",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","abc",[caseless]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XABCY","abc",[caseless,
+ trim]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XABCY","abc",[caseless,
+ {parts,
+ 2}]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XABCY","abc",[caseless]))),
+ <<"AB">> = iolist_to_binary(join(re:split("ABABC","abc",[caseless,
+ trim]))),
+ <<"AB:">> = iolist_to_binary(join(re:split("ABABC","abc",[caseless,
+ {parts,
+ 2}]))),
+ <<"AB:">> = iolist_to_binary(join(re:split("ABABC","abc",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[caseless]))),
+ <<"aaxabxbaxbbx">> = iolist_to_binary(join(re:split("aaxabxbaxbbx","abc",[caseless,
trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[caseless,
+ <<"aaxabxbaxbbx">> = iolist_to_binary(join(re:split("aaxabxbaxbbx","abc",[caseless,
{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","abc",[caseless]))),
-?line <<"aaxabxbaxbbx">> = iolist_to_binary(join(re:split("aaxabxbaxbbx","abc",[caseless,
- trim]))),
-?line <<"aaxabxbaxbbx">> = iolist_to_binary(join(re:split("aaxabxbaxbbx","abc",[caseless,
- {parts,
- 2}]))),
-?line <<"aaxabxbaxbbx">> = iolist_to_binary(join(re:split("aaxabxbaxbbx","abc",[caseless]))),
-?line <<"XBC">> = iolist_to_binary(join(re:split("XBC","abc",[caseless,
- trim]))),
-?line <<"XBC">> = iolist_to_binary(join(re:split("XBC","abc",[caseless,
- {parts,
- 2}]))),
-?line <<"XBC">> = iolist_to_binary(join(re:split("XBC","abc",[caseless]))),
-?line <<"AXC">> = iolist_to_binary(join(re:split("AXC","abc",[caseless,
- trim]))),
-?line <<"AXC">> = iolist_to_binary(join(re:split("AXC","abc",[caseless,
- {parts,
- 2}]))),
-?line <<"AXC">> = iolist_to_binary(join(re:split("AXC","abc",[caseless]))),
-?line <<"ABX">> = iolist_to_binary(join(re:split("ABX","abc",[caseless,
+ <<"aaxabxbaxbbx">> = iolist_to_binary(join(re:split("aaxabxbaxbbx","abc",[caseless]))),
+ <<"XBC">> = iolist_to_binary(join(re:split("XBC","abc",[caseless,
+ trim]))),
+ <<"XBC">> = iolist_to_binary(join(re:split("XBC","abc",[caseless,
+ {parts,
+ 2}]))),
+ <<"XBC">> = iolist_to_binary(join(re:split("XBC","abc",[caseless]))),
+ <<"AXC">> = iolist_to_binary(join(re:split("AXC","abc",[caseless,
+ trim]))),
+ <<"AXC">> = iolist_to_binary(join(re:split("AXC","abc",[caseless,
+ {parts,
+ 2}]))),
+ <<"AXC">> = iolist_to_binary(join(re:split("AXC","abc",[caseless]))),
+ <<"ABX">> = iolist_to_binary(join(re:split("ABX","abc",[caseless,
+ trim]))),
+ <<"ABX">> = iolist_to_binary(join(re:split("ABX","abc",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABX">> = iolist_to_binary(join(re:split("ABX","abc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","ab*c",[caseless,
trim]))),
-?line <<"ABX">> = iolist_to_binary(join(re:split("ABX","abc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab*c",[caseless,
{parts,
2}]))),
-?line <<"ABX">> = iolist_to_binary(join(re:split("ABX","abc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","ab*c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab*c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","ab*bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab*c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab*bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab*c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","ab*bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab*bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBC","ab*bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab*bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBC","ab*bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab*bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBC","ab*bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBC","ab*bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab*?bc",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab*?bc",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab*?bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{0,}?bc",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{0,}?bc",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{0,}?bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBC","ab+?bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBC","ab*bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBC","ab+?bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBC","ab*bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab*?bc",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab*?bc",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab*?bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{0,}?bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBC","ab+?bc",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{0,}?bc",[caseless,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{0,}?bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBC","ab+?bc",[caseless,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[caseless]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","ab+bc",[caseless,
+ trim]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","ab+bc",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","ab+bc",[caseless]))),
+ <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab+bc",[caseless,
+ trim]))),
+ <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab+bc",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab+bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab+bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBC","ab+?bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab+bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBC","ab+?bc",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab+bc",[caseless]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","ab+bc",[caseless,
- trim]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","ab+bc",[caseless,
- {parts,
- 2}]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","ab+bc",[caseless]))),
-?line <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab+bc",[caseless,
- trim]))),
-?line <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab+bc",[caseless,
- {parts,
- 2}]))),
-?line <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab+bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab+bc",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab+bc",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab+bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,}?bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab+bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,}?bc",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,}?bc",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,}?bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,3}?bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,}?bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,3}?bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,}?bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,3}?bc",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,3}?bc",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,3}?bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{3,4}?bc",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{3,4}?bc",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{3,4}?bc",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}?bc",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}?bc",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}?bc",[caseless]))),
-?line <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab{4,5}?bc",[caseless,
- trim]))),
-?line <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab{4,5}?bc",[caseless,
- {parts,
- 2}]))),
-?line <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab{4,5}?bc",[caseless]))),
-?line <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","ab{4,5}?bc",[caseless,
- trim]))),
-?line <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","ab{4,5}?bc",[caseless,
- {parts,
- 2}]))),
-?line <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","ab{4,5}?bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABBC","ab??bc",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBC","ab??bc",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABBC","ab??bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","ab??bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{1,3}?bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBBBC","ab{3,4}?bc",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{3,4}?bc",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABBBBC","ab{3,4}?bc",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}?bc",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}?bc",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","ab{4,5}?bc",[caseless]))),
+ <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab{4,5}?bc",[caseless,
+ trim]))),
+ <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab{4,5}?bc",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABQ">> = iolist_to_binary(join(re:split("ABQ","ab{4,5}?bc",[caseless]))),
+ <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","ab{4,5}?bc",[caseless,
+ trim]))),
+ <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","ab{4,5}?bc",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","ab{4,5}?bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABBC","ab??bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab??bc",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBC","ab??bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab??bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?bc",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?bc",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?bc",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","ab??c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABBC","ab??bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","ab??bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab??c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab??bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab??c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab??bc",[caseless]))),
+ ok.
+run21() ->
+ <<"">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?bc",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?bc",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","^abc$",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?bc",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","ab??c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab??c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab??c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","ab{0,1}?c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","^abc$",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","^abc$",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","^abc$",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[caseless]))),
+ <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","^abc$",[caseless,
+ trim]))),
+ <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","^abc$",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","^abc$",[caseless]))),
+ <<"ABCC">> = iolist_to_binary(join(re:split("ABCC","^abc$",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","^abc$",[caseless,
+ <<"ABCC">> = iolist_to_binary(join(re:split("ABCC","^abc$",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","^abc$",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^abc$",[caseless]))),
-?line <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","^abc$",[caseless,
- trim]))),
-?line <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","^abc$",[caseless,
- {parts,
- 2}]))),
-?line <<"ABBBBC">> = iolist_to_binary(join(re:split("ABBBBC","^abc$",[caseless]))),
-?line <<"ABCC">> = iolist_to_binary(join(re:split("ABCC","^abc$",[caseless,
- trim]))),
-?line <<"ABCC">> = iolist_to_binary(join(re:split("ABCC","^abc$",[caseless,
- {parts,
- 2}]))),
-?line <<"ABCC">> = iolist_to_binary(join(re:split("ABCC","^abc$",[caseless]))),
-?line <<":C">> = iolist_to_binary(join(re:split("ABCC","^abc",[caseless,
+ <<"ABCC">> = iolist_to_binary(join(re:split("ABCC","^abc$",[caseless]))),
+ <<":C">> = iolist_to_binary(join(re:split("ABCC","^abc",[caseless,
+ trim]))),
+ <<":C">> = iolist_to_binary(join(re:split("ABCC","^abc",[caseless,
+ {parts,
+ 2}]))),
+ <<":C">> = iolist_to_binary(join(re:split("ABCC","^abc",[caseless]))),
+ <<"A">> = iolist_to_binary(join(re:split("AABC","abc$",[caseless,
+ trim]))),
+ <<"A:">> = iolist_to_binary(join(re:split("AABC","abc$",[caseless,
+ {parts,
+ 2}]))),
+ <<"A:">> = iolist_to_binary(join(re:split("AABC","abc$",[caseless]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","^",[caseless,
+ trim]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","^",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","^",[caseless]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","$",[caseless,
+ trim]))),
+ <<"ABC:">> = iolist_to_binary(join(re:split("ABC","$",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABC:">> = iolist_to_binary(join(re:split("ABC","$",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABC","a.c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","a.c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABC","a.c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("AXC","a.c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("AXC","a.c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("AXC","a.c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("AXYZC","a.*?c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("AXYZC","a.*?c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("AXYZC","a.*?c",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.*c",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.*c",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.*c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("AABC","a.*c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("AABC","a.*c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("AABC","a.*c",[caseless]))),
+ <<"AXYZD">> = iolist_to_binary(join(re:split("AXYZD","a.*c",[caseless,
trim]))),
-?line <<":C">> = iolist_to_binary(join(re:split("ABCC","^abc",[caseless,
+ <<"AXYZD">> = iolist_to_binary(join(re:split("AXYZD","a.*c",[caseless,
{parts,
2}]))),
-?line <<":C">> = iolist_to_binary(join(re:split("ABCC","^abc",[caseless]))),
-?line <<"A">> = iolist_to_binary(join(re:split("AABC","abc$",[caseless,
- trim]))),
-?line <<"A:">> = iolist_to_binary(join(re:split("AABC","abc$",[caseless,
- {parts,
- 2}]))),
-?line <<"A:">> = iolist_to_binary(join(re:split("AABC","abc$",[caseless]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","^",[caseless,
- trim]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","^",[caseless,
- {parts,
- 2}]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","^",[caseless]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","$",[caseless,
- trim]))),
-?line <<"ABC:">> = iolist_to_binary(join(re:split("ABC","$",[caseless,
- {parts,
- 2}]))),
-?line <<"ABC:">> = iolist_to_binary(join(re:split("ABC","$",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABC","a.c",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","a.c",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABC","a.c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("AXC","a.c",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("AXC","a.c",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("AXC","a.c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("AXYZC","a.*?c",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("AXYZC","a.*?c",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("AXYZC","a.*?c",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.*c",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.*c",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a.*c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("AABC","a.*c",[caseless,
+ <<"AXYZD">> = iolist_to_binary(join(re:split("AXYZD","a.*c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABD","a[bc]d",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("AABC","a.*c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABD","a[bc]d",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("AABC","a.*c",[caseless]))),
-?line <<"AXYZD">> = iolist_to_binary(join(re:split("AXYZD","a.*c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABD","a[bc]d",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ACE","a[b-d]e",[caseless,
trim]))),
-?line <<"AXYZD">> = iolist_to_binary(join(re:split("AXYZD","a.*c",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ACE","a[b-d]e",[caseless,
{parts,
2}]))),
-?line <<"AXYZD">> = iolist_to_binary(join(re:split("AXYZD","a.*c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABD","a[bc]d",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ACE","a[b-d]e",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[b-d]e",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[b-d]e",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[b-d]e",[caseless]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","a[b-d]e",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABD","a[bc]d",[caseless,
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","a[b-d]e",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABD","a[bc]d",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ACE","a[b-d]e",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ACE","a[b-d]e",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ACE","a[b-d]e",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[b-d]e",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[b-d]e",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[b-d]e",[caseless]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","a[b-d]e",[caseless,
- trim]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","a[b-d]e",[caseless,
- {parts,
- 2}]))),
-?line <<"ABC">> = iolist_to_binary(join(re:split("ABC","a[b-d]e",[caseless]))),
-?line <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[b-d]e",[caseless,
- trim]))),
-?line <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[b-d]e",[caseless,
- {parts,
- 2}]))),
-?line <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[b-d]e",[caseless]))),
-?line <<"A">> = iolist_to_binary(join(re:split("AAC","a[b-d]",[caseless,
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","a[b-d]e",[caseless]))),
+ <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[b-d]e",[caseless,
trim]))),
-?line <<"A:">> = iolist_to_binary(join(re:split("AAC","a[b-d]",[caseless,
+ <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[b-d]e",[caseless,
{parts,
2}]))),
-?line <<"A:">> = iolist_to_binary(join(re:split("AAC","a[b-d]",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("A-","a[-b]",[caseless,
+ <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[b-d]e",[caseless]))),
+ <<"A">> = iolist_to_binary(join(re:split("AAC","a[b-d]",[caseless,
+ trim]))),
+ <<"A:">> = iolist_to_binary(join(re:split("AAC","a[b-d]",[caseless,
+ {parts,
+ 2}]))),
+ <<"A:">> = iolist_to_binary(join(re:split("AAC","a[b-d]",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("A-","a[-b]",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("A-","a[-b]",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("A-","a[-b]",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("A-","a[b-]",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("A-","a[b-]",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("A-","a[b-]",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("A]","a]",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("A]","a]",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("A]","a]",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("A]B","a[]]b",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("A-","a[-b]",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("A]B","a[]]b",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("A-","a[-b]",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("A-","a[b-]",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("A]B","a[]]b",[caseless]))),
+ ok.
+run22() ->
+ <<"">> = iolist_to_binary(join(re:split("AED","a[^bc]d",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("AED","a[^bc]d",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("AED","a[^bc]d",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ADC","a[^-b]c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ADC","a[^-b]c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ADC","a[^-b]c",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^-b]c",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^-b]c",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^-b]c",[caseless]))),
+ <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[^-b]c",[caseless,
+ trim]))),
+ <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[^-b]c",[caseless,
+ {parts,
+ 2}]))),
+ <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[^-b]c",[caseless]))),
+ <<"A-C">> = iolist_to_binary(join(re:split("A-C","a[^-b]c",[caseless,
+ trim]))),
+ <<"A-C">> = iolist_to_binary(join(re:split("A-C","a[^-b]c",[caseless,
+ {parts,
+ 2}]))),
+ <<"A-C">> = iolist_to_binary(join(re:split("A-C","a[^-b]c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ADC","a[^]b]c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ADC","a[^]b]c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ADC","a[^]b]c",[caseless]))),
+ <<":C">> = iolist_to_binary(join(re:split("ABC","ab|cd",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("A-","a[b-]",[caseless,
+ <<":C">> = iolist_to_binary(join(re:split("ABC","ab|cd",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("A-","a[b-]",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("A]","a]",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("A]","a]",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("A]","a]",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("A]B","a[]]b",[caseless,
+ <<":C">> = iolist_to_binary(join(re:split("ABC","ab|cd",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABCD","ab|cd",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("A]B","a[]]b",[caseless,
+ <<":CD">> = iolist_to_binary(join(re:split("ABCD","ab|cd",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("A]B","a[]]b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("AED","a[^bc]d",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("AED","a[^bc]d",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("AED","a[^bc]d",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ADC","a[^-b]c",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ADC","a[^-b]c",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ADC","a[^-b]c",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^-b]c",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^-b]c",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a[^-b]c",[caseless]))),
-?line <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[^-b]c",[caseless,
- trim]))),
-?line <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[^-b]c",[caseless,
- {parts,
- 2}]))),
-?line <<"ABD">> = iolist_to_binary(join(re:split("ABD","a[^-b]c",[caseless]))),
-?line <<"A-C">> = iolist_to_binary(join(re:split("A-C","a[^-b]c",[caseless,
+ <<"::">> = iolist_to_binary(join(re:split("ABCD","ab|cd",[caseless]))),
+ <<"D">> = iolist_to_binary(join(re:split("DEF","()ef",[caseless,
+ trim]))),
+ <<"D::">> = iolist_to_binary(join(re:split("DEF","()ef",[caseless,
+ {parts,
+ 2}]))),
+ <<"D::">> = iolist_to_binary(join(re:split("DEF","()ef",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","$b",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","$b",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","$b",[caseless]))),
+ <<"A]C">> = iolist_to_binary(join(re:split("A]C","$b",[caseless,
+ trim]))),
+ <<"A]C">> = iolist_to_binary(join(re:split("A]C","$b",[caseless,
+ {parts,
+ 2}]))),
+ <<"A]C">> = iolist_to_binary(join(re:split("A]C","$b",[caseless]))),
+ <<"B">> = iolist_to_binary(join(re:split("B","$b",[caseless,
+ trim]))),
+ <<"B">> = iolist_to_binary(join(re:split("B","$b",[caseless,
+ {parts,
+ 2}]))),
+ <<"B">> = iolist_to_binary(join(re:split("B","$b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("A(B","a\\(b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("A(B","a\\(b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("A(B","a\\(b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("AB","a\\(*b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("AB","a\\(*b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("AB","a\\(*b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("A((B","a\\(*b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("A((B","a\\(*b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("A((B","a\\(*b",[caseless]))),
+ <<"A">> = iolist_to_binary(join(re:split("A","a\\\\b",[caseless,
+ notbol,
+ trim]))),
+ <<"A">> = iolist_to_binary(join(re:split("A","a\\\\b",[caseless,
+ notbol,
+ {parts,
+ 2}]))),
+ <<"A">> = iolist_to_binary(join(re:split("A","a\\\\b",[caseless,
+ notbol]))),
+ <<":A:A:BC">> = iolist_to_binary(join(re:split("ABC","((a))",[caseless,
+ trim]))),
+ <<":A:A:BC">> = iolist_to_binary(join(re:split("ABC","((a))",[caseless,
+ {parts,
+ 2}]))),
+ <<":A:A:BC">> = iolist_to_binary(join(re:split("ABC","((a))",[caseless]))),
+ <<":A:C">> = iolist_to_binary(join(re:split("ABC","(a)b(c)",[caseless,
+ trim]))),
+ <<":A:C:">> = iolist_to_binary(join(re:split("ABC","(a)b(c)",[caseless,
+ {parts,
+ 2}]))),
+ <<":A:C:">> = iolist_to_binary(join(re:split("ABC","(a)b(c)",[caseless]))),
+ <<"AABB">> = iolist_to_binary(join(re:split("AABBABC","a+b+c",[caseless,
+ trim]))),
+ <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a+b+c",[caseless,
+ {parts,
+ 2}]))),
+ <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a+b+c",[caseless]))),
+ <<"AABB">> = iolist_to_binary(join(re:split("AABBABC","a{1,}b{1,}c",[caseless,
+ trim]))),
+ <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a{1,}b{1,}c",[caseless,
+ {parts,
+ 2}]))),
+ <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a{1,}b{1,}c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABCABC","a.+?c",[caseless,
trim]))),
-?line <<"A-C">> = iolist_to_binary(join(re:split("A-C","a[^-b]c",[caseless,
+ <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","a.+?c",[caseless,
{parts,
2}]))),
-?line <<"A-C">> = iolist_to_binary(join(re:split("A-C","a[^-b]c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ADC","a[^]b]c",[caseless,
+ <<"::">> = iolist_to_binary(join(re:split("ABCABC","a.+?c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABCABC","a.*?c",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ADC","a[^]b]c",[caseless,
+ <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","a.*?c",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ADC","a[^]b]c",[caseless]))),
-?line <<":C">> = iolist_to_binary(join(re:split("ABC","ab|cd",[caseless,
- trim]))),
-?line <<":C">> = iolist_to_binary(join(re:split("ABC","ab|cd",[caseless,
- {parts,
- 2}]))),
-?line <<":C">> = iolist_to_binary(join(re:split("ABC","ab|cd",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABCD","ab|cd",[caseless,
- trim]))),
-?line <<":CD">> = iolist_to_binary(join(re:split("ABCD","ab|cd",[caseless,
- {parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("ABCD","ab|cd",[caseless]))),
-?line <<"D">> = iolist_to_binary(join(re:split("DEF","()ef",[caseless,
- trim]))),
-?line <<"D::">> = iolist_to_binary(join(re:split("DEF","()ef",[caseless,
- {parts,
- 2}]))),
-?line <<"D::">> = iolist_to_binary(join(re:split("DEF","()ef",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","$b",[caseless,
+ <<"::">> = iolist_to_binary(join(re:split("ABCABC","a.*?c",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABCABC","a.{0,5}?c",[caseless,
trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","$b",[caseless,
+ <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","a.{0,5}?c",[caseless,
{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","$b",[caseless]))),
-?line <<"A]C">> = iolist_to_binary(join(re:split("A]C","$b",[caseless,
- trim]))),
-?line <<"A]C">> = iolist_to_binary(join(re:split("A]C","$b",[caseless,
- {parts,
- 2}]))),
-?line <<"A]C">> = iolist_to_binary(join(re:split("A]C","$b",[caseless]))),
-?line <<"B">> = iolist_to_binary(join(re:split("B","$b",[caseless,
- trim]))),
-?line <<"B">> = iolist_to_binary(join(re:split("B","$b",[caseless,
- {parts,
- 2}]))),
-?line <<"B">> = iolist_to_binary(join(re:split("B","$b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("A(B","a\\(b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("A(B","a\\(b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("A(B","a\\(b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("AB","a\\(*b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("AB","a\\(*b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("AB","a\\(*b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("A((B","a\\(*b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("A((B","a\\(*b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("A((B","a\\(*b",[caseless]))),
-?line <<"A">> = iolist_to_binary(join(re:split("A","a\\\\b",[caseless,
- notbol,
- trim]))),
-?line <<"A">> = iolist_to_binary(join(re:split("A","a\\\\b",[caseless,
- notbol,
- {parts,
- 2}]))),
-?line <<"A">> = iolist_to_binary(join(re:split("A","a\\\\b",[caseless,
- notbol]))),
-?line <<":A:A:BC">> = iolist_to_binary(join(re:split("ABC","((a))",[caseless,
+ <<"::">> = iolist_to_binary(join(re:split("ABCABC","a.{0,5}?c",[caseless]))),
+ <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b)*",[caseless,
trim]))),
-?line <<":A:A:BC">> = iolist_to_binary(join(re:split("ABC","((a))",[caseless,
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)*",[caseless,
{parts,
2}]))),
-?line <<":A:A:BC">> = iolist_to_binary(join(re:split("ABC","((a))",[caseless]))),
-?line <<":A:C">> = iolist_to_binary(join(re:split("ABC","(a)b(c)",[caseless,
- trim]))),
-?line <<":A:C:">> = iolist_to_binary(join(re:split("ABC","(a)b(c)",[caseless,
- {parts,
- 2}]))),
-?line <<":A:C:">> = iolist_to_binary(join(re:split("ABC","(a)b(c)",[caseless]))),
-?line <<"AABB">> = iolist_to_binary(join(re:split("AABBABC","a+b+c",[caseless,
- trim]))),
-?line <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a+b+c",[caseless,
- {parts,
- 2}]))),
-?line <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a+b+c",[caseless]))),
-?line <<"AABB">> = iolist_to_binary(join(re:split("AABBABC","a{1,}b{1,}c",[caseless,
- trim]))),
-?line <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a{1,}b{1,}c",[caseless,
- {parts,
- 2}]))),
-?line <<"AABB:">> = iolist_to_binary(join(re:split("AABBABC","a{1,}b{1,}c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABCABC","a.+?c",[caseless,
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)*",[caseless]))),
+ <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,}",[caseless,
trim]))),
-?line <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","a.+?c",[caseless,
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,}",[caseless,
{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("ABCABC","a.+?c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABCABC","a.*?c",[caseless,
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,}",[caseless]))),
+ <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b)+",[caseless,
+ trim]))),
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)+",[caseless,
+ {parts,
+ 2}]))),
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)+",[caseless]))),
+ <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b){1,}",[caseless,
trim]))),
-?line <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","a.*?c",[caseless,
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){1,}",[caseless,
{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("ABCABC","a.*?c",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABCABC","a.{0,5}?c",[caseless,
- trim]))),
-?line <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","a.{0,5}?c",[caseless,
- {parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("ABCABC","a.{0,5}?c",[caseless]))),
-?line <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b)*",[caseless,
- trim]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)*",[caseless,
- {parts,
- 2}]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)*",[caseless]))),
-?line <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,}",[caseless,
- trim]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,}",[caseless,
- {parts,
- 2}]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,}",[caseless]))),
-?line <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b)+",[caseless,
- trim]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)+",[caseless,
- {parts,
- 2}]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b)+",[caseless]))),
-?line <<":B">> = iolist_to_binary(join(re:split("AB","(a+|b){1,}",[caseless,
+ <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){1,}",[caseless]))),
+ ok.
+run23() ->
+ <<":A::B">> = iolist_to_binary(join(re:split("AB","(a+|b)?",[caseless,
+ trim]))),
+ <<":A:B">> = iolist_to_binary(join(re:split("AB","(a+|b)?",[caseless,
+ {parts,
+ 2}]))),
+ <<":A::B:">> = iolist_to_binary(join(re:split("AB","(a+|b)?",[caseless]))),
+ <<":A::B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}",[caseless,
trim]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){1,}",[caseless,
+ <<":A:B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}",[caseless,
{parts,
2}]))),
-?line <<":B:">> = iolist_to_binary(join(re:split("AB","(a+|b){1,}",[caseless]))),
-?line <<":A::B">> = iolist_to_binary(join(re:split("AB","(a+|b)?",[caseless,
- trim]))),
-?line <<":A:B">> = iolist_to_binary(join(re:split("AB","(a+|b)?",[caseless,
- {parts,
- 2}]))),
-?line <<":A::B:">> = iolist_to_binary(join(re:split("AB","(a+|b)?",[caseless]))),
-?line <<":A::B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}",[caseless,
+ <<":A::B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}",[caseless]))),
+ <<":A::B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}?",[caseless,
trim]))),
-?line <<":A:B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}",[caseless,
+ <<":A:B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}?",[caseless,
{parts,
2}]))),
-?line <<":A::B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}",[caseless]))),
-?line <<":A::B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}?",[caseless,
+ <<":A::B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}?",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("CDE","[^ab]*",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("CDE","[^ab]*",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("CDE","[^ab]*",[caseless]))),
+ <<":C">> = iolist_to_binary(join(re:split("ABBBCD","([abc])*d",[caseless,
trim]))),
-?line <<":A:B">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}?",[caseless,
+ <<":C:">> = iolist_to_binary(join(re:split("ABBBCD","([abc])*d",[caseless,
{parts,
2}]))),
-?line <<":A::B:">> = iolist_to_binary(join(re:split("AB","(a+|b){0,1}?",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("CDE","[^ab]*",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("CDE","[^ab]*",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("CDE","[^ab]*",[caseless]))),
-?line <<":C">> = iolist_to_binary(join(re:split("ABBBCD","([abc])*d",[caseless,
- trim]))),
-?line <<":C:">> = iolist_to_binary(join(re:split("ABBBCD","([abc])*d",[caseless,
- {parts,
- 2}]))),
-?line <<":C:">> = iolist_to_binary(join(re:split("ABBBCD","([abc])*d",[caseless]))),
-?line <<":A">> = iolist_to_binary(join(re:split("ABCD","([abc])*bcd",[caseless,
- trim]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("ABCD","([abc])*bcd",[caseless,
- {parts,
- 2}]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("ABCD","([abc])*bcd",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("E","a|b|c|d|e",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("E","a|b|c|d|e",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("E","a|b|c|d|e",[caseless]))),
-?line <<":E">> = iolist_to_binary(join(re:split("EF","(a|b|c|d|e)f",[caseless,
+ <<":C:">> = iolist_to_binary(join(re:split("ABBBCD","([abc])*d",[caseless]))),
+ <<":A">> = iolist_to_binary(join(re:split("ABCD","([abc])*bcd",[caseless,
trim]))),
-?line <<":E:">> = iolist_to_binary(join(re:split("EF","(a|b|c|d|e)f",[caseless,
+ <<":A:">> = iolist_to_binary(join(re:split("ABCD","([abc])*bcd",[caseless,
{parts,
2}]))),
-?line <<":E:">> = iolist_to_binary(join(re:split("EF","(a|b|c|d|e)f",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABCDEFG","abcd*efg",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABCDEFG","abcd*efg",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABCDEFG","abcd*efg",[caseless]))),
-?line <<"X:Y:Z">> = iolist_to_binary(join(re:split("XABYABBBZ","ab*",[caseless,
- trim]))),
-?line <<"X:YABBBZ">> = iolist_to_binary(join(re:split("XABYABBBZ","ab*",[caseless,
- {parts,
- 2}]))),
-?line <<"X:Y:Z">> = iolist_to_binary(join(re:split("XABYABBBZ","ab*",[caseless]))),
-?line <<"X:Y:Z">> = iolist_to_binary(join(re:split("XAYABBBZ","ab*",[caseless,
- trim]))),
-?line <<"X:YABBBZ">> = iolist_to_binary(join(re:split("XAYABBBZ","ab*",[caseless,
- {parts,
- 2}]))),
-?line <<"X:Y:Z">> = iolist_to_binary(join(re:split("XAYABBBZ","ab*",[caseless]))),
-?line <<"AB:CD">> = iolist_to_binary(join(re:split("ABCDE","(ab|cd)e",[caseless,
+ <<":A:">> = iolist_to_binary(join(re:split("ABCD","([abc])*bcd",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("E","a|b|c|d|e",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("E","a|b|c|d|e",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("E","a|b|c|d|e",[caseless]))),
+ <<":E">> = iolist_to_binary(join(re:split("EF","(a|b|c|d|e)f",[caseless,
trim]))),
-?line <<"AB:CD:">> = iolist_to_binary(join(re:split("ABCDE","(ab|cd)e",[caseless,
+ <<":E:">> = iolist_to_binary(join(re:split("EF","(a|b|c|d|e)f",[caseless,
{parts,
2}]))),
-?line <<"AB:CD:">> = iolist_to_binary(join(re:split("ABCDE","(ab|cd)e",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("HIJ","[abhgefdc]ij",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("HIJ","[abhgefdc]ij",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("HIJ","[abhgefdc]ij",[caseless]))),
-?line <<"ABCDE">> = iolist_to_binary(join(re:split("ABCDE","^(ab|cd)e",[caseless,
+ <<":E:">> = iolist_to_binary(join(re:split("EF","(a|b|c|d|e)f",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABCDEFG","abcd*efg",[caseless,
trim]))),
-?line <<"ABCDE">> = iolist_to_binary(join(re:split("ABCDE","^(ab|cd)e",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABCDEFG","abcd*efg",[caseless,
{parts,
2}]))),
-?line <<"ABCDE">> = iolist_to_binary(join(re:split("ABCDE","^(ab|cd)e",[caseless]))),
-?line <<"ABCD">> = iolist_to_binary(join(re:split("ABCDEF","(abc|)ef",[caseless,
- trim]))),
-?line <<"ABCD::">> = iolist_to_binary(join(re:split("ABCDEF","(abc|)ef",[caseless,
- {parts,
- 2}]))),
-?line <<"ABCD::">> = iolist_to_binary(join(re:split("ABCDEF","(abc|)ef",[caseless]))),
-?line <<"A:B">> = iolist_to_binary(join(re:split("ABCD","(a|b)c*d",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ABCDEFG","abcd*efg",[caseless]))),
+ <<"X:Y:Z">> = iolist_to_binary(join(re:split("XABYABBBZ","ab*",[caseless,
+ trim]))),
+ <<"X:YABBBZ">> = iolist_to_binary(join(re:split("XABYABBBZ","ab*",[caseless,
+ {parts,
+ 2}]))),
+ <<"X:Y:Z">> = iolist_to_binary(join(re:split("XABYABBBZ","ab*",[caseless]))),
+ <<"X:Y:Z">> = iolist_to_binary(join(re:split("XAYABBBZ","ab*",[caseless,
+ trim]))),
+ <<"X:YABBBZ">> = iolist_to_binary(join(re:split("XAYABBBZ","ab*",[caseless,
+ {parts,
+ 2}]))),
+ <<"X:Y:Z">> = iolist_to_binary(join(re:split("XAYABBBZ","ab*",[caseless]))),
+ <<"AB:CD">> = iolist_to_binary(join(re:split("ABCDE","(ab|cd)e",[caseless,
trim]))),
-?line <<"A:B:">> = iolist_to_binary(join(re:split("ABCD","(a|b)c*d",[caseless,
+ <<"AB:CD:">> = iolist_to_binary(join(re:split("ABCDE","(ab|cd)e",[caseless,
{parts,
2}]))),
-?line <<"A:B:">> = iolist_to_binary(join(re:split("ABCD","(a|b)c*d",[caseless]))),
-?line <<":A">> = iolist_to_binary(join(re:split("ABC","(ab|ab*)bc",[caseless,
+ <<"AB:CD:">> = iolist_to_binary(join(re:split("ABCDE","(ab|cd)e",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("HIJ","[abhgefdc]ij",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("HIJ","[abhgefdc]ij",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("HIJ","[abhgefdc]ij",[caseless]))),
+ <<"ABCDE">> = iolist_to_binary(join(re:split("ABCDE","^(ab|cd)e",[caseless,
trim]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("ABC","(ab|ab*)bc",[caseless,
+ <<"ABCDE">> = iolist_to_binary(join(re:split("ABCDE","^(ab|cd)e",[caseless,
{parts,
2}]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("ABC","(ab|ab*)bc",[caseless]))),
-?line <<":BC">> = iolist_to_binary(join(re:split("ABC","a([bc]*)c*",[caseless,
+ <<"ABCDE">> = iolist_to_binary(join(re:split("ABCDE","^(ab|cd)e",[caseless]))),
+ <<"ABCD">> = iolist_to_binary(join(re:split("ABCDEF","(abc|)ef",[caseless,
trim]))),
-?line <<":BC:">> = iolist_to_binary(join(re:split("ABC","a([bc]*)c*",[caseless,
+ <<"ABCD::">> = iolist_to_binary(join(re:split("ABCDEF","(abc|)ef",[caseless,
{parts,
2}]))),
-?line <<":BC:">> = iolist_to_binary(join(re:split("ABC","a([bc]*)c*",[caseless]))),
-?line <<":BC:D">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c*d)",[caseless,
- trim]))),
-?line <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c*d)",[caseless,
- {parts,
- 2}]))),
-?line <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c*d)",[caseless]))),
-?line <<":BC:D">> = iolist_to_binary(join(re:split("ABCD","a([bc]+)(c*d)",[caseless,
- trim]))),
-?line <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]+)(c*d)",[caseless,
- {parts,
- 2}]))),
-?line <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]+)(c*d)",[caseless]))),
-?line <<":B:CD">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c+d)",[caseless,
- trim]))),
-?line <<":B:CD:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c+d)",[caseless,
- {parts,
- 2}]))),
-?line <<":B:CD:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c+d)",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ADCDCDE","a[bcd]*dcdcde",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ADCDCDE","a[bcd]*dcdcde",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ADCDCDE","a[bcd]*dcdcde",[caseless]))),
-?line <<":AB">> = iolist_to_binary(join(re:split("ABC","(ab|a)b*c",[caseless,
+ <<"ABCD::">> = iolist_to_binary(join(re:split("ABCDEF","(abc|)ef",[caseless]))),
+ <<"A:B">> = iolist_to_binary(join(re:split("ABCD","(a|b)c*d",[caseless,
+ trim]))),
+ <<"A:B:">> = iolist_to_binary(join(re:split("ABCD","(a|b)c*d",[caseless,
+ {parts,
+ 2}]))),
+ <<"A:B:">> = iolist_to_binary(join(re:split("ABCD","(a|b)c*d",[caseless]))),
+ <<":A">> = iolist_to_binary(join(re:split("ABC","(ab|ab*)bc",[caseless,
trim]))),
-?line <<":AB:">> = iolist_to_binary(join(re:split("ABC","(ab|a)b*c",[caseless,
+ <<":A:">> = iolist_to_binary(join(re:split("ABC","(ab|ab*)bc",[caseless,
{parts,
2}]))),
-?line <<":AB:">> = iolist_to_binary(join(re:split("ABC","(ab|a)b*c",[caseless]))),
-?line <<":ABC:A:B:D">> = iolist_to_binary(join(re:split("ABCD","((a)(b)c)(d)",[caseless,
+ <<":A:">> = iolist_to_binary(join(re:split("ABC","(ab|ab*)bc",[caseless]))),
+ <<":BC">> = iolist_to_binary(join(re:split("ABC","a([bc]*)c*",[caseless,
+ trim]))),
+ <<":BC:">> = iolist_to_binary(join(re:split("ABC","a([bc]*)c*",[caseless,
+ {parts,
+ 2}]))),
+ <<":BC:">> = iolist_to_binary(join(re:split("ABC","a([bc]*)c*",[caseless]))),
+ <<":BC:D">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c*d)",[caseless,
trim]))),
-?line <<":ABC:A:B:D:">> = iolist_to_binary(join(re:split("ABCD","((a)(b)c)(d)",[caseless,
+ <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c*d)",[caseless,
{parts,
2}]))),
-?line <<":ABC:A:B:D:">> = iolist_to_binary(join(re:split("ABCD","((a)(b)c)(d)",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*",[caseless]))),
-?line <<"A">> = iolist_to_binary(join(re:split("ABH","^a(bc+|b[eh])g|.h$",[caseless,
- trim]))),
-?line <<"A::">> = iolist_to_binary(join(re:split("ABH","^a(bc+|b[eh])g|.h$",[caseless,
- {parts,
- 2}]))),
-?line <<"A::">> = iolist_to_binary(join(re:split("ABH","^a(bc+|b[eh])g|.h$",[caseless]))),
-?line <<":EFFGZ">> = iolist_to_binary(join(re:split("EFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c*d)",[caseless]))),
+ ok.
+run24() ->
+ <<":BC:D">> = iolist_to_binary(join(re:split("ABCD","a([bc]+)(c*d)",[caseless,
+ trim]))),
+ <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]+)(c*d)",[caseless,
+ {parts,
+ 2}]))),
+ <<":BC:D:">> = iolist_to_binary(join(re:split("ABCD","a([bc]+)(c*d)",[caseless]))),
+ <<":B:CD">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c+d)",[caseless,
+ trim]))),
+ <<":B:CD:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c+d)",[caseless,
+ {parts,
+ 2}]))),
+ <<":B:CD:">> = iolist_to_binary(join(re:split("ABCD","a([bc]*)(c+d)",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ADCDCDE","a[bcd]*dcdcde",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ADCDCDE","a[bcd]*dcdcde",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ADCDCDE","a[bcd]*dcdcde",[caseless]))),
+ <<":AB">> = iolist_to_binary(join(re:split("ABC","(ab|a)b*c",[caseless,
+ trim]))),
+ <<":AB:">> = iolist_to_binary(join(re:split("ABC","(ab|a)b*c",[caseless,
+ {parts,
+ 2}]))),
+ <<":AB:">> = iolist_to_binary(join(re:split("ABC","(ab|a)b*c",[caseless]))),
+ <<":ABC:A:B:D">> = iolist_to_binary(join(re:split("ABCD","((a)(b)c)(d)",[caseless,
+ trim]))),
+ <<":ABC:A:B:D:">> = iolist_to_binary(join(re:split("ABCD","((a)(b)c)(d)",[caseless,
+ {parts,
+ 2}]))),
+ <<":ABC:A:B:D:">> = iolist_to_binary(join(re:split("ABCD","((a)(b)c)(d)",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ALPHA","[a-zA-Z_][a-zA-Z0-9_]*",[caseless]))),
+ <<"A">> = iolist_to_binary(join(re:split("ABH","^a(bc+|b[eh])g|.h$",[caseless,
+ trim]))),
+ <<"A::">> = iolist_to_binary(join(re:split("ABH","^a(bc+|b[eh])g|.h$",[caseless,
+ {parts,
+ 2}]))),
+ <<"A::">> = iolist_to_binary(join(re:split("ABH","^a(bc+|b[eh])g|.h$",[caseless]))),
+ <<":EFFGZ">> = iolist_to_binary(join(re:split("EFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ trim]))),
+ <<":EFFGZ::">> = iolist_to_binary(join(re:split("EFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ {parts,
+ 2}]))),
+ <<":EFFGZ::">> = iolist_to_binary(join(re:split("EFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
+ <<":IJ:J">> = iolist_to_binary(join(re:split("IJ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ trim]))),
+ <<":IJ:J:">> = iolist_to_binary(join(re:split("IJ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ {parts,
+ 2}]))),
+ <<":IJ:J:">> = iolist_to_binary(join(re:split("IJ","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
+ <<"R:EFFGZ">> = iolist_to_binary(join(re:split("REFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
trim]))),
-?line <<":EFFGZ::">> = iolist_to_binary(join(re:split("EFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ <<"R:EFFGZ::">> = iolist_to_binary(join(re:split("REFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
{parts,
2}]))),
-?line <<":EFFGZ::">> = iolist_to_binary(join(re:split("EFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
-?line <<":IJ:J">> = iolist_to_binary(join(re:split("IJ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- trim]))),
-?line <<":IJ:J:">> = iolist_to_binary(join(re:split("IJ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- {parts,
- 2}]))),
-?line <<":IJ:J:">> = iolist_to_binary(join(re:split("IJ","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
-?line <<"R:EFFGZ">> = iolist_to_binary(join(re:split("REFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ <<"R:EFFGZ::">> = iolist_to_binary(join(re:split("REFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
+ <<"ADCDCDE">> = iolist_to_binary(join(re:split("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))",[caseless,
trim]))),
-?line <<"R:EFFGZ::">> = iolist_to_binary(join(re:split("REFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ <<"ADCDCDE">> = iolist_to_binary(join(re:split("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))",[caseless,
{parts,
2}]))),
-?line <<"R:EFFGZ::">> = iolist_to_binary(join(re:split("REFFGZ","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
-?line <<"ADCDCDE">> = iolist_to_binary(join(re:split("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- trim]))),
-?line <<"ADCDCDE">> = iolist_to_binary(join(re:split("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- {parts,
- 2}]))),
-?line <<"ADCDCDE">> = iolist_to_binary(join(re:split("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
-?line <<"EFFG">> = iolist_to_binary(join(re:split("EFFG","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- trim]))),
-?line <<"EFFG">> = iolist_to_binary(join(re:split("EFFG","(bc+d$|ef*g.|h?i(j|k))",[caseless,
- {parts,
- 2}]))),
-?line <<"EFFG">> = iolist_to_binary(join(re:split("EFFG","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
-?line <<"BCDD">> = iolist_to_binary(join(re:split("BCDD","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ <<"ADCDCDE">> = iolist_to_binary(join(re:split("ADCDCDE","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
+ <<"EFFG">> = iolist_to_binary(join(re:split("EFFG","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ trim]))),
+ <<"EFFG">> = iolist_to_binary(join(re:split("EFFG","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ {parts,
+ 2}]))),
+ <<"EFFG">> = iolist_to_binary(join(re:split("EFFG","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
+ <<"BCDD">> = iolist_to_binary(join(re:split("BCDD","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ trim]))),
+ <<"BCDD">> = iolist_to_binary(join(re:split("BCDD","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ {parts,
+ 2}]))),
+ <<"BCDD">> = iolist_to_binary(join(re:split("BCDD","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
+ <<":A:A:A:A:A:A:A:A:A:A">> = iolist_to_binary(join(re:split("A","((((((((((a))))))))))",[caseless,
+ trim]))),
+ <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","((((((((((a))))))))))",[caseless,
+ {parts,
+ 2}]))),
+ <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","((((((((((a))))))))))",[caseless]))),
+ <<":A:A:A:A:A:A:A:A:A:A">> = iolist_to_binary(join(re:split("AA","((((((((((a))))))))))\\10",[caseless,
trim]))),
-?line <<"BCDD">> = iolist_to_binary(join(re:split("BCDD","(bc+d$|ef*g.|h?i(j|k))",[caseless,
+ <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("AA","((((((((((a))))))))))\\10",[caseless,
{parts,
2}]))),
-?line <<"BCDD">> = iolist_to_binary(join(re:split("BCDD","(bc+d$|ef*g.|h?i(j|k))",[caseless]))),
-?line <<":A:A:A:A:A:A:A:A:A:A">> = iolist_to_binary(join(re:split("A","((((((((((a))))))))))",[caseless,
- trim]))),
-?line <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","((((((((((a))))))))))",[caseless,
- {parts,
- 2}]))),
-?line <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","((((((((((a))))))))))",[caseless]))),
-?line <<":A:A:A:A:A:A:A:A:A:A">> = iolist_to_binary(join(re:split("AA","((((((((((a))))))))))\\10",[caseless,
- trim]))),
-?line <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("AA","((((((((((a))))))))))\\10",[caseless,
- {parts,
- 2}]))),
-?line <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("AA","((((((((((a))))))))))\\10",[caseless]))),
-?line <<":A:A:A:A:A:A:A:A:A">> = iolist_to_binary(join(re:split("A","(((((((((a)))))))))",[caseless,
- trim]))),
-?line <<":A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","(((((((((a)))))))))",[caseless,
- {parts,
- 2}]))),
-?line <<":A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","(((((((((a)))))))))",[caseless]))),
-?line <<":A">> = iolist_to_binary(join(re:split("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))",[caseless,
- trim]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))",[caseless,
- {parts,
- 2}]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))",[caseless]))),
-?line <<":C">> = iolist_to_binary(join(re:split("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))",[caseless,
- trim]))),
-?line <<":C:">> = iolist_to_binary(join(re:split("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))",[caseless,
- {parts,
- 2}]))),
-?line <<":C:">> = iolist_to_binary(join(re:split("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[caseless]))),
-?line <<"AA">> = iolist_to_binary(join(re:split("AA","multiple words of text",[caseless,
- trim]))),
-?line <<"AA">> = iolist_to_binary(join(re:split("AA","multiple words of text",[caseless,
- {parts,
- 2}]))),
-?line <<"AA">> = iolist_to_binary(join(re:split("AA","multiple words of text",[caseless]))),
-?line <<"UH-UH">> = iolist_to_binary(join(re:split("UH-UH","multiple words of text",[caseless,
- trim]))),
-?line <<"UH-UH">> = iolist_to_binary(join(re:split("UH-UH","multiple words of text",[caseless,
- {parts,
- 2}]))),
-?line <<"UH-UH">> = iolist_to_binary(join(re:split("UH-UH","multiple words of text",[caseless]))),
-?line <<":, YEAH">> = iolist_to_binary(join(re:split("MULTIPLE WORDS, YEAH","multiple words",[caseless,
- trim]))),
-?line <<":, YEAH">> = iolist_to_binary(join(re:split("MULTIPLE WORDS, YEAH","multiple words",[caseless,
- {parts,
- 2}]))),
-?line <<":, YEAH">> = iolist_to_binary(join(re:split("MULTIPLE WORDS, YEAH","multiple words",[caseless]))),
-?line <<":AB:DE">> = iolist_to_binary(join(re:split("ABCDE","(.*)c(.*)",[caseless,
- trim]))),
-?line <<":AB:DE:">> = iolist_to_binary(join(re:split("ABCDE","(.*)c(.*)",[caseless,
- {parts,
- 2}]))),
-?line <<":AB:DE:">> = iolist_to_binary(join(re:split("ABCDE","(.*)c(.*)",[caseless]))),
-?line <<":A:B">> = iolist_to_binary(join(re:split("(A, B)","\\((.*), (.*)\\)",[caseless,
+ <<":A:A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("AA","((((((((((a))))))))))\\10",[caseless]))),
+ <<":A:A:A:A:A:A:A:A:A">> = iolist_to_binary(join(re:split("A","(((((((((a)))))))))",[caseless,
+ trim]))),
+ <<":A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","(((((((((a)))))))))",[caseless,
+ {parts,
+ 2}]))),
+ <<":A:A:A:A:A:A:A:A:A:">> = iolist_to_binary(join(re:split("A","(((((((((a)))))))))",[caseless]))),
+ <<":A">> = iolist_to_binary(join(re:split("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))",[caseless,
+ trim]))),
+ <<":A:">> = iolist_to_binary(join(re:split("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))",[caseless,
+ {parts,
+ 2}]))),
+ <<":A:">> = iolist_to_binary(join(re:split("A","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))",[caseless]))),
+ <<":C">> = iolist_to_binary(join(re:split("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))",[caseless,
+ trim]))),
+ <<":C:">> = iolist_to_binary(join(re:split("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))",[caseless,
+ {parts,
+ 2}]))),
+ <<":C:">> = iolist_to_binary(join(re:split("C","(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","multiple words of text",[caseless]))),
+ <<"AA">> = iolist_to_binary(join(re:split("AA","multiple words of text",[caseless,
trim]))),
-?line <<":A:B:">> = iolist_to_binary(join(re:split("(A, B)","\\((.*), (.*)\\)",[caseless,
+ <<"AA">> = iolist_to_binary(join(re:split("AA","multiple words of text",[caseless,
{parts,
2}]))),
-?line <<":A:B:">> = iolist_to_binary(join(re:split("(A, B)","\\((.*), (.*)\\)",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ABCD","abcd",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABCD","abcd",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ABCD","abcd",[caseless]))),
-?line <<":BC">> = iolist_to_binary(join(re:split("ABCD","a(bc)d",[caseless,
- trim]))),
-?line <<":BC:">> = iolist_to_binary(join(re:split("ABCD","a(bc)d",[caseless,
- {parts,
- 2}]))),
-?line <<":BC:">> = iolist_to_binary(join(re:split("ABCD","a(bc)d",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("AC","a[-]?c",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("AC","a[-]?c",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("AC","a[-]?c",[caseless]))),
-?line <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","(abc)\\1",[caseless,
- trim]))),
-?line <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","(abc)\\1",[caseless,
- {parts,
+ <<"AA">> = iolist_to_binary(join(re:split("AA","multiple words of text",[caseless]))),
+ <<"UH-UH">> = iolist_to_binary(join(re:split("UH-UH","multiple words of text",[caseless,
+ trim]))),
+ <<"UH-UH">> = iolist_to_binary(join(re:split("UH-UH","multiple words of text",[caseless,
+ {parts,
+ 2}]))),
+ <<"UH-UH">> = iolist_to_binary(join(re:split("UH-UH","multiple words of text",[caseless]))),
+ <<":, YEAH">> = iolist_to_binary(join(re:split("MULTIPLE WORDS, YEAH","multiple words",[caseless,
+ trim]))),
+ <<":, YEAH">> = iolist_to_binary(join(re:split("MULTIPLE WORDS, YEAH","multiple words",[caseless,
+ {parts,
+ 2}]))),
+ <<":, YEAH">> = iolist_to_binary(join(re:split("MULTIPLE WORDS, YEAH","multiple words",[caseless]))),
+ <<":AB:DE">> = iolist_to_binary(join(re:split("ABCDE","(.*)c(.*)",[caseless,
+ trim]))),
+ <<":AB:DE:">> = iolist_to_binary(join(re:split("ABCDE","(.*)c(.*)",[caseless,
+ {parts,
+ 2}]))),
+ <<":AB:DE:">> = iolist_to_binary(join(re:split("ABCDE","(.*)c(.*)",[caseless]))),
+ <<":A:B">> = iolist_to_binary(join(re:split("(A, B)","\\((.*), (.*)\\)",[caseless,
+ trim]))),
+ <<":A:B:">> = iolist_to_binary(join(re:split("(A, B)","\\((.*), (.*)\\)",[caseless,
+ {parts,
+ 2}]))),
+ <<":A:B:">> = iolist_to_binary(join(re:split("(A, B)","\\((.*), (.*)\\)",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("ABCD","abcd",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ABCD","abcd",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ABCD","abcd",[caseless]))),
+ ok.
+run25() ->
+ <<":BC">> = iolist_to_binary(join(re:split("ABCD","a(bc)d",[caseless,
+ trim]))),
+ <<":BC:">> = iolist_to_binary(join(re:split("ABCD","a(bc)d",[caseless,
+ {parts,
+ 2}]))),
+ <<":BC:">> = iolist_to_binary(join(re:split("ABCD","a(bc)d",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("AC","a[-]?c",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("AC","a[-]?c",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("AC","a[-]?c",[caseless]))),
+ <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","(abc)\\1",[caseless,
+ trim]))),
+ <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","(abc)\\1",[caseless,
+ {parts,
+ 2}]))),
+ <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","(abc)\\1",[caseless]))),
+ <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","([a-c]*)\\1",[caseless,
+ trim]))),
+ <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","([a-c]*)\\1",[caseless,
+ {parts,
+ 2}]))),
+ <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","([a-c]*)\\1",[caseless]))),
+ <<"ab">> = iolist_to_binary(join(re:split("abad","a(?!b).",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?!b).",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?!b).",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("abad","a(?=d).",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=d).",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=d).",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("abad","a(?=c|d).",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=c|d).",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=c|d).",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)(.)",[{parts,
2}]))),
-?line <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","(abc)\\1",[caseless]))),
-?line <<":ABC">> = iolist_to_binary(join(re:split("ABCABC","([a-c]*)\\1",[caseless,
- trim]))),
-?line <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","([a-c]*)\\1",[caseless,
- {parts,
- 2}]))),
-?line <<":ABC:">> = iolist_to_binary(join(re:split("ABCABC","([a-c]*)\\1",[caseless]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("abad","a(?!b).",[trim]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?!b).",[{parts,
- 2}]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?!b).",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("abad","a(?=d).",[trim]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=d).",[{parts,
- 2}]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=d).",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("abad","a(?=c|d).",[trim]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=c|d).",[{parts,
- 2}]))),
-?line <<"ab:">> = iolist_to_binary(join(re:split("abad","a(?=c|d).",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)(.)",[{parts,
+ <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)(.)",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)*(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)*(.)",[{parts,
2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)(.)",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)*(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)*(.)",[{parts,
+ <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)*(.)",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)+?(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)+?(.)",[{parts,
2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)*(.)",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)+?(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)+?(.)",[{parts,
- 2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)+?(.)",[]))),
-?line <<":d:bcdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+?(.)",[trim]))),
-?line <<":d:bcdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+?(.)",[{parts,
- 2}]))),
-?line <<":d:bcdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+?(.)",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+(.)",[{parts,
+ <<":e:">> = iolist_to_binary(join(re:split("ace","a(?:b|c|d)+?(.)",[]))),
+ <<":d:bcdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+?(.)",[trim]))),
+ <<":d:bcdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+?(.)",[{parts,
2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+(.)",[]))),
-?line <<":b:cdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){2}(.)",[trim]))),
-?line <<":b:cdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){2}(.)",[{parts,
- 2}]))),
-?line <<":b:cdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){2}(.)",[]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}(.)",[trim]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}(.)",[{parts,
+ <<":d:bcdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+?(.)",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+(.)",[{parts,
+ 2}]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d)+(.)",[]))),
+ <<":b:cdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){2}(.)",[trim]))),
+ <<":b:cdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){2}(.)",[{parts,
+ 2}]))),
+ <<":b:cdbe">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){2}(.)",[]))),
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}(.)",[trim]))),
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}(.)",[{parts,
+ 2}]))),
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}(.)",[]))),
+ <<":d:be">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}?(.)",[trim]))),
+ <<":d:be">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}?(.)",[{parts,
2}]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}(.)",[]))),
-?line <<":d:be">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}?(.)",[trim]))),
-?line <<":d:be">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}?(.)",[{parts,
- 2}]))),
-?line <<":d:be">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}?(.)",[]))),
-?line <<":bar:foo:bar">> = iolist_to_binary(join(re:split("foobar","((foo)|(bar))*",[trim]))),
-?line <<":bar:foo:bar:">> = iolist_to_binary(join(re:split("foobar","((foo)|(bar))*",[{parts,
- 2}]))),
-?line <<":bar:foo:bar:">> = iolist_to_binary(join(re:split("foobar","((foo)|(bar))*",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}(.)",[{parts,
+ <<":d:be">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){4,5}?(.)",[]))),
+ <<":bar:foo:bar">> = iolist_to_binary(join(re:split("foobar","((foo)|(bar))*",[trim]))),
+ <<":bar:foo:bar:">> = iolist_to_binary(join(re:split("foobar","((foo)|(bar))*",[{parts,
+ 2}]))),
+ <<":bar:foo:bar:">> = iolist_to_binary(join(re:split("foobar","((foo)|(bar))*",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}(.)",[{parts,
+ 2}]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}(.)",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}?(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}?(.)",[{parts,
2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}(.)",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}?(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}?(.)",[{parts,
- 2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}?(.)",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}(.)",[{parts,
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){6,7}?(.)",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}(.)",[{parts,
+ 2}]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}(.)",[]))),
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}?(.)",[trim]))),
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}?(.)",[{parts,
2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}(.)",[]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}?(.)",[trim]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}?(.)",[{parts,
- 2}]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}?(.)",[]))),
-?line <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}(.)",[trim]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}(.)",[{parts,
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,6}?(.)",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}(.)",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}(.)",[{parts,
+ 2}]))),
+ <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}(.)",[]))),
+ ok.
+run26() ->
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}?(.)",[trim]))),
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}?(.)",[{parts,
2}]))),
-?line <<":e:">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}(.)",[]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}?(.)",[trim]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}?(.)",[{parts,
+ <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}?(.)",[]))),
+ <<":c:e">> = iolist_to_binary(join(re:split("ace","a(?:b|(c|e){1,2}?|d)+?(.)",[trim]))),
+ <<":c:e:">> = iolist_to_binary(join(re:split("ace","a(?:b|(c|e){1,2}?|d)+?(.)",[{parts,
2}]))),
-?line <<":b:e">> = iolist_to_binary(join(re:split("acdbcdbe","a(?:b|c|d){5,7}?(.)",[]))),
-?line <<":c:e">> = iolist_to_binary(join(re:split("ace","a(?:b|(c|e){1,2}?|d)+?(.)",[trim]))),
-?line <<":c:e:">> = iolist_to_binary(join(re:split("ace","a(?:b|(c|e){1,2}?|d)+?(.)",[{parts,
- 2}]))),
-?line <<":c:e:">> = iolist_to_binary(join(re:split("ace","a(?:b|(c|e){1,2}?|d)+?(.)",[]))),
-?line <<":A">> = iolist_to_binary(join(re:split("AB","^(.+)?B",[trim]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("AB","^(.+)?B",[{parts,
- 2}]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("AB","^(.+)?B",[]))),
-?line <<":.">> = iolist_to_binary(join(re:split(".","^([^a-z])|(\\^)$",[trim]))),
-?line <<":.::">> = iolist_to_binary(join(re:split(".","^([^a-z])|(\\^)$",[{parts,
- 2}]))),
-?line <<":.::">> = iolist_to_binary(join(re:split(".","^([^a-z])|(\\^)$",[]))),
-?line <<":OUT">> = iolist_to_binary(join(re:split("<&OUT","^[<>]&",[trim]))),
-?line <<":OUT">> = iolist_to_binary(join(re:split("<&OUT","^[<>]&",[{parts,
- 2}]))),
-?line <<":OUT">> = iolist_to_binary(join(re:split("<&OUT","^[<>]&",[]))),
-?line <<":aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[{parts,
- 2}]))),
-?line <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a\\1?){4}$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a\\1?){4}$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a\\1?){4}$",[]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","^(a\\1?){4}$",[trim]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","^(a\\1?){4}$",[{parts,
- 2}]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[{parts,
+ <<":c:e:">> = iolist_to_binary(join(re:split("ace","a(?:b|(c|e){1,2}?|d)+?(.)",[]))),
+ <<":A">> = iolist_to_binary(join(re:split("AB","^(.+)?B",[trim]))),
+ <<":A:">> = iolist_to_binary(join(re:split("AB","^(.+)?B",[{parts,
+ 2}]))),
+ <<":A:">> = iolist_to_binary(join(re:split("AB","^(.+)?B",[]))),
+ <<":.">> = iolist_to_binary(join(re:split(".","^([^a-z])|(\\^)$",[trim]))),
+ <<":.::">> = iolist_to_binary(join(re:split(".","^([^a-z])|(\\^)$",[{parts,
+ 2}]))),
+ <<":.::">> = iolist_to_binary(join(re:split(".","^([^a-z])|(\\^)$",[]))),
+ <<":OUT">> = iolist_to_binary(join(re:split("<&OUT","^[<>]&",[trim]))),
+ <<":OUT">> = iolist_to_binary(join(re:split("<&OUT","^[<>]&",[{parts,
+ 2}]))),
+ <<":OUT">> = iolist_to_binary(join(re:split("<&OUT","^[<>]&",[]))),
+ <<":aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[{parts,
- 2}]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[]))),
-?line <<":aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a(?(1)\\1)){4}$",[trim]))),
-?line <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a(?(1)\\1)){4}$",[{parts,
- 2}]))),
-?line <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a(?(1)\\1)){4}$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a(?(1)\\1)){4}$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a(?(1)\\1)){4}$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a(?(1)\\1)){4}$",[]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a(?(1)\\1)){4}$",[trim]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a(?(1)\\1)){4}$",[{parts,
+ <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a\\1?){4}$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a\\1?){4}$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a\\1?){4}$",[]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","^(a\\1?){4}$",[trim]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","^(a\\1?){4}$",[{parts,
+ 2}]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[{parts,
+ 2}]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[trim]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[{parts,
+ 2}]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a\\1?){4}$",[]))),
+ <<":aaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a(?(1)\\1)){4}$",[trim]))),
+ <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a(?(1)\\1)){4}$",[{parts,
2}]))),
-?line <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a(?(1)\\1)){4}$",[]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a(?(1)\\1)){4}$",[trim]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a(?(1)\\1)){4}$",[{parts,
+ <<":aaaa:">> = iolist_to_binary(join(re:split("aaaaaaaaaa","^(a(?(1)\\1)){4}$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a(?(1)\\1)){4}$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a(?(1)\\1)){4}$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a(?(1)\\1)){4}$",[]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a(?(1)\\1)){4}$",[trim]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a(?(1)\\1)){4}$",[{parts,
+ 2}]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a(?(1)\\1)){4}$",[]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a(?(1)\\1)){4}$",[trim]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a(?(1)\\1)){4}$",[{parts,
+ 2}]))),
+ <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a(?(1)\\1)){4}$",[]))),
+ <<":f:o:o:b:a:r">> = iolist_to_binary(join(re:split("foobar","(?:(f)(o)(o)|(b)(a)(r))*",[trim]))),
+ <<":f:o:o:b:a:r:">> = iolist_to_binary(join(re:split("foobar","(?:(f)(o)(o)|(b)(a)(r))*",[{parts,
2}]))),
-?line <<"aaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaa","^(a(?(1)\\1)){4}$",[]))),
-?line <<":f:o:o:b:a:r">> = iolist_to_binary(join(re:split("foobar","(?:(f)(o)(o)|(b)(a)(r))*",[trim]))),
-?line <<":f:o:o:b:a:r:">> = iolist_to_binary(join(re:split("foobar","(?:(f)(o)(o)|(b)(a)(r))*",[{parts,
- 2}]))),
-?line <<":f:o:o:b:a:r:">> = iolist_to_binary(join(re:split("foobar","(?:(f)(o)(o)|(b)(a)(r))*",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("ab","(?<=a)b",[trim]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("ab","(?<=a)b",[{parts,
- 2}]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("ab","(?<=a)b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a)b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a)b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a)b",[]))),
-?line <<"cb">> = iolist_to_binary(join(re:split("cb","(?<=a)b",[trim]))),
-?line <<"cb">> = iolist_to_binary(join(re:split("cb","(?<=a)b",[{parts,
- 2}]))),
-?line <<"cb">> = iolist_to_binary(join(re:split("cb","(?<=a)b",[]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","(?<=a)b",[trim]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","(?<=a)b",[{parts,
+ <<":f:o:o:b:a:r:">> = iolist_to_binary(join(re:split("foobar","(?:(f)(o)(o)|(b)(a)(r))*",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("ab","(?<=a)b",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?<=a)b",[{parts,
2}]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","(?<=a)b",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("ab","(?<!c)b",[trim]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("ab","(?<!c)b",[{parts,
- 2}]))),
-?line <<"a:">> = iolist_to_binary(join(re:split("ab","(?<!c)b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","(?<!c)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[{parts,
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?<=a)b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a)b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a)b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=a)b",[]))),
+ <<"cb">> = iolist_to_binary(join(re:split("cb","(?<=a)b",[trim]))),
+ <<"cb">> = iolist_to_binary(join(re:split("cb","(?<=a)b",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","(?<!c)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[{parts,
+ <<"cb">> = iolist_to_binary(join(re:split("cb","(?<=a)b",[]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","(?<=a)b",[trim]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","(?<=a)b",[{parts,
+ 2}]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","(?<=a)b",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("ab","(?<!c)b",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?<!c)b",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aba","(?:..)*a",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aba","(?:..)*a",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aba","(?:..)*a",[]))),
-?line <<":b">> = iolist_to_binary(join(re:split("aba","(?:..)*?a",[trim]))),
-?line <<":ba">> = iolist_to_binary(join(re:split("aba","(?:..)*?a",[{parts,
- 2}]))),
-?line <<":b:">> = iolist_to_binary(join(re:split("aba","(?:..)*?a",[]))),
-?line <<":b:c">> = iolist_to_binary(join(re:split("abc","^(?:b|a(?=(.)))*\\1",[trim]))),
-?line <<":b:c">> = iolist_to_binary(join(re:split("abc","^(?:b|a(?=(.)))*\\1",[{parts,
- 2}]))),
-?line <<":b:c">> = iolist_to_binary(join(re:split("abc","^(?:b|a(?=(.)))*\\1",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(){3,5}",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(){3,5}",[{parts,
- 2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(){3,5}",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aax","^(a+)*ax",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aax","^(a+)*ax",[{parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aax","^(a+)*ax",[]))),
-?line <<":a:a">> = iolist_to_binary(join(re:split("aax","^((a|b)+)*ax",[trim]))),
-?line <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|b)+)*ax",[{parts,
- 2}]))),
-?line <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|b)+)*ax",[]))),
-?line <<":a:a">> = iolist_to_binary(join(re:split("aax","^((a|bc)+)*ax",[trim]))),
-?line <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|bc)+)*ax",[{parts,
- 2}]))),
-?line <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|bc)+)*ax",[]))),
-?line <<"c">> = iolist_to_binary(join(re:split("cab","(a|x)*ab",[trim]))),
-?line <<"c::">> = iolist_to_binary(join(re:split("cab","(a|x)*ab",[{parts,
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?<!c)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","(?<!c)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","(?<!c)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("b","(?<!c)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aba","(?:..)*a",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aba","(?:..)*a",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aba","(?:..)*a",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("aba","(?:..)*?a",[trim]))),
+ <<":ba">> = iolist_to_binary(join(re:split("aba","(?:..)*?a",[{parts,
2}]))),
-?line <<"c::">> = iolist_to_binary(join(re:split("cab","(a|x)*ab",[]))),
-?line <<"c">> = iolist_to_binary(join(re:split("cab","(a)*ab",[trim]))),
-?line <<"c::">> = iolist_to_binary(join(re:split("cab","(a)*ab",[{parts,
- 2}]))),
-?line <<"c::">> = iolist_to_binary(join(re:split("cab","(a)*ab",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","(?:(?i)a)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?:(?i)a)b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?:(?i)a)b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("ab","((?i)a)b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?i)a)b",[{parts,
+ <<":b:">> = iolist_to_binary(join(re:split("aba","(?:..)*?a",[]))),
+ <<":b:c">> = iolist_to_binary(join(re:split("abc","^(?:b|a(?=(.)))*\\1",[trim]))),
+ <<":b:c">> = iolist_to_binary(join(re:split("abc","^(?:b|a(?=(.)))*\\1",[{parts,
+ 2}]))),
+ <<":b:c">> = iolist_to_binary(join(re:split("abc","^(?:b|a(?=(.)))*\\1",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(){3,5}",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(){3,5}",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?i)a)b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Ab","(?:(?i)a)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Ab","(?:(?i)a)b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Ab","(?:(?i)a)b",[]))),
-?line <<":A">> = iolist_to_binary(join(re:split("Ab","((?i)a)b",[trim]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i)a)b",[{parts,
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(){3,5}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aax","^(a+)*ax",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aax","^(a+)*ax",[{parts,
2}]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i)a)b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?i)a)b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?i)a)b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?i)a)b",[]))),
-?line <<"cb">> = iolist_to_binary(join(re:split("cb","(?:(?i)a)b",[trim]))),
-?line <<"cb">> = iolist_to_binary(join(re:split("cb","(?:(?i)a)b",[{parts,
- 2}]))),
-?line <<"cb">> = iolist_to_binary(join(re:split("cb","(?:(?i)a)b",[]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(?i)a)b",[trim]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(?i)a)b",[{parts,
- 2}]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(?i)a)b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","(?i:a)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?i:a)b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?i:a)b",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("ab","((?i:a))b",[trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?i:a))b",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("aax","^(a+)*ax",[]))),
+ <<":a:a">> = iolist_to_binary(join(re:split("aax","^((a|b)+)*ax",[trim]))),
+ <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|b)+)*ax",[{parts,
+ 2}]))),
+ <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|b)+)*ax",[]))),
+ <<":a:a">> = iolist_to_binary(join(re:split("aax","^((a|bc)+)*ax",[trim]))),
+ <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|bc)+)*ax",[{parts,
+ 2}]))),
+ <<":a:a:">> = iolist_to_binary(join(re:split("aax","^((a|bc)+)*ax",[]))),
+ <<"c">> = iolist_to_binary(join(re:split("cab","(a|x)*ab",[trim]))),
+ <<"c::">> = iolist_to_binary(join(re:split("cab","(a|x)*ab",[{parts,
+ 2}]))),
+ <<"c::">> = iolist_to_binary(join(re:split("cab","(a|x)*ab",[]))),
+ <<"c">> = iolist_to_binary(join(re:split("cab","(a)*ab",[trim]))),
+ <<"c::">> = iolist_to_binary(join(re:split("cab","(a)*ab",[{parts,
+ 2}]))),
+ <<"c::">> = iolist_to_binary(join(re:split("cab","(a)*ab",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","(?:(?i)a)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","(?:(?i)a)b",[{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?i:a))b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Ab","(?i:a)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Ab","(?i:a)b",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("ab","(?:(?i)a)b",[]))),
+ ok.
+run27() ->
+ <<":a">> = iolist_to_binary(join(re:split("ab","((?i)a)b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?i)a)b",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Ab","(?i:a)b",[]))),
-?line <<":A">> = iolist_to_binary(join(re:split("Ab","((?i:a))b",[trim]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i:a))b",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?i)a)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("Ab","(?:(?i)a)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("Ab","(?:(?i)a)b",[{parts,
2}]))),
-?line <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i:a))b",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i:a)b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i:a)b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i:a)b",[]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[trim]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("Ab","(?:(?i)a)b",[]))),
+ <<":A">> = iolist_to_binary(join(re:split("Ab","((?i)a)b",[trim]))),
+ <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i)a)b",[{parts,
2}]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[trim]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[{parts,
- 2}]))),
-?line <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?:(?-i)a)b",[caseless]))),
-?line <<":a">> = iolist_to_binary(join(re:split("ab","((?-i)a)b",[caseless,
- trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i)a)b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
- trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
- trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?:(?-i)a)b",[caseless,
- trim]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?:(?-i)a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?:(?-i)a)b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","(?-i:a)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?-i:a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","(?-i:a)b",[caseless]))),
-?line <<":a">> = iolist_to_binary(join(re:split("ab","((?-i:a))b",[caseless,
+ <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i)a)b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?i)a)b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?i)a)b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?i)a)b",[]))),
+ <<"cb">> = iolist_to_binary(join(re:split("cb","(?:(?i)a)b",[trim]))),
+ <<"cb">> = iolist_to_binary(join(re:split("cb","(?:(?i)a)b",[{parts,
+ 2}]))),
+ <<"cb">> = iolist_to_binary(join(re:split("cb","(?:(?i)a)b",[]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(?i)a)b",[trim]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(?i)a)b",[{parts,
+ 2}]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?:(?i)a)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","(?i:a)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","(?i:a)b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","(?i:a)b",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("ab","((?i:a))b",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?i:a))b",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?i:a))b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("Ab","(?i:a)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("Ab","(?i:a)b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("Ab","(?i:a)b",[]))),
+ <<":A">> = iolist_to_binary(join(re:split("Ab","((?i:a))b",[trim]))),
+ <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i:a))b",[{parts,
+ 2}]))),
+ <<":A:">> = iolist_to_binary(join(re:split("Ab","((?i:a))b",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i:a)b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i:a)b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i:a)b",[]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[trim]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[{parts,
+ 2}]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[trim]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[{parts,
+ 2}]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:a)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","(?:(?-i)a)b",[caseless,
trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i:a))b",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ab","(?:(?-i)a)b",[caseless,
{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i:a))b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("ab","(?:(?-i)a)b",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("ab","((?-i)a)b",[caseless,
trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i)a)b",[caseless,
{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i)a)b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
trim]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
{parts,
2}]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
- trim]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
trim]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
{parts,
2}]))),
-?line <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
- trim]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
- {parts,
- 2}]))),
-?line <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
+ trim]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aB","(?:(?-i)a)b",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
trim]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless,
{parts,
2}]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?-i:a.))b",[caseless,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?-i:a.))b",[caseless,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?-i:a.))b",[caseless]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","((?-i:a.))b",[caseless,
- trim]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","((?-i:a.))b",[caseless,
- {parts,
- 2}]))),
-?line <<"AB">> = iolist_to_binary(join(re:split("AB","((?-i:a.))b",[caseless]))),
-?line <<"a
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i)a)b",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?:(?-i)a)b",[caseless]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
+ trim]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?:(?-i)a)b",[caseless]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?:(?-i)a)b",[caseless,
+ trim]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?:(?-i)a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?:(?-i)a)b",[caseless]))),
+ ok.
+run28() ->
+ <<"">> = iolist_to_binary(join(re:split("ab","(?-i:a)b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","(?-i:a)b",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("ab","((?-i:a))b",[caseless,
+ trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i:a))b",[caseless,
+ {parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ab","((?-i:a))b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ {parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ trim]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
+ trim]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aB","(?-i:a)b",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless,
+ {parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aB","((?-i:a))b",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?-i:a)b",[caseless]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
+ trim]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"Ab">> = iolist_to_binary(join(re:split("Ab","(?-i:a)b",[caseless]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ trim]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless,
+ {parts,
+ 2}]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","(?-i:a)b",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?-i:a.))b",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?-i:a.))b",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?-i:a.))b",[caseless]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","((?-i:a.))b",[caseless,
+ trim]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","((?-i:a.))b",[caseless,
+ {parts,
+ 2}]))),
+ <<"AB">> = iolist_to_binary(join(re:split("AB","((?-i:a.))b",[caseless]))),
+ <<"a
B">> = iolist_to_binary(join(re:split("a
B","((?-i:a.))b",[caseless,trim]))),
-?line <<"a
+ <<"a
B">> = iolist_to_binary(join(re:split("a
B","((?-i:a.))b",[caseless,{parts,2}]))),
-?line <<"a
+ <<"a
B">> = iolist_to_binary(join(re:split("a
B","((?-i:a.))b",[caseless]))),
-?line <<":a
+ <<":a
">> = iolist_to_binary(join(re:split("a
B","((?s-i:a.))b",[caseless,trim]))),
-?line <<":a
+ <<":a
:">> = iolist_to_binary(join(re:split("a
B","((?s-i:a.))b",[caseless,{parts,2}]))),
-?line <<":a
+ <<":a
:">> = iolist_to_binary(join(re:split("a
B","((?s-i:a.))b",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))",[]))),
-?line <<":Ab">> = iolist_to_binary(join(re:split("Ab4ab","(ab)\\d\\1",[caseless,
- trim]))),
-?line <<":Ab:">> = iolist_to_binary(join(re:split("Ab4ab","(ab)\\d\\1",[caseless,
- {parts,
- 2}]))),
-?line <<":Ab:">> = iolist_to_binary(join(re:split("Ab4ab","(ab)\\d\\1",[caseless]))),
-?line <<":ab">> = iolist_to_binary(join(re:split("ab4Ab","(ab)\\d\\1",[caseless,
- trim]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("ab4Ab","(ab)\\d\\1",[caseless,
- {parts,
- 2}]))),
-?line <<":ab:">> = iolist_to_binary(join(re:split("ab4Ab","(ab)\\d\\1",[caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("foobar1234baz","foo\\w*\\d{4}baz",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("foobar1234baz","foo\\w*\\d{4}baz",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("foobar1234baz","foo\\w*\\d{4}baz",[]))),
-?line <<":~~">> = iolist_to_binary(join(re:split("x~~","x(~~)*(?:(?:F)?)?",[trim]))),
-?line <<":~~:">> = iolist_to_binary(join(re:split("x~~","x(~~)*(?:(?:F)?)?",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("cabbbb","(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))",[]))),
+ <<"">> = iolist_to_binary(join(re:split("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))",[]))),
+ <<":Ab">> = iolist_to_binary(join(re:split("Ab4ab","(ab)\\d\\1",[caseless,
+ trim]))),
+ <<":Ab:">> = iolist_to_binary(join(re:split("Ab4ab","(ab)\\d\\1",[caseless,
+ {parts,
+ 2}]))),
+ <<":Ab:">> = iolist_to_binary(join(re:split("Ab4ab","(ab)\\d\\1",[caseless]))),
+ <<":ab">> = iolist_to_binary(join(re:split("ab4Ab","(ab)\\d\\1",[caseless,
+ trim]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("ab4Ab","(ab)\\d\\1",[caseless,
+ {parts,
+ 2}]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("ab4Ab","(ab)\\d\\1",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("foobar1234baz","foo\\w*\\d{4}baz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("foobar1234baz","foo\\w*\\d{4}baz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("foobar1234baz","foo\\w*\\d{4}baz",[]))),
+ <<":~~">> = iolist_to_binary(join(re:split("x~~","x(~~)*(?:(?:F)?)?",[trim]))),
+ <<":~~:">> = iolist_to_binary(join(re:split("x~~","x(~~)*(?:(?:F)?)?",[{parts,
+ 2}]))),
+ <<":~~:">> = iolist_to_binary(join(re:split("x~~","x(~~)*(?:(?:F)?)?",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaac","^a(?#xxx){3}c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaac","^a(?#xxx){3}c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaac","^a(?#xxx){3}c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaac","^a (?#xxx) (?#yyy) {3}c",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaac","^a (?#xxx) (?#yyy) {3}c",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaac","^a (?#xxx) (?#yyy) {3}c",[extended]))),
+ ok.
+run29() ->
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<![cd])b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<![cd])b",[{parts,
2}]))),
-?line <<":~~:">> = iolist_to_binary(join(re:split("x~~","x(~~)*(?:(?:F)?)?",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaac","^a(?#xxx){3}c",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaac","^a(?#xxx){3}c",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaac","^a(?#xxx){3}c",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaac","^a (?#xxx) (?#yyy) {3}c",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaac","^a (?#xxx) (?#yyy) {3}c",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaac","^a (?#xxx) (?#yyy) {3}c",[extended]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<![cd])b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<![cd])b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<![cd])b",[]))),
-?line <<"B
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<![cd])b",[]))),
+ <<"B
B">> = iolist_to_binary(join(re:split("B
B","(?<![cd])b",[trim]))),
-?line <<"B
+ <<"B
B">> = iolist_to_binary(join(re:split("B
B","(?<![cd])b",[{parts,2}]))),
-?line <<"B
+ <<"B
B">> = iolist_to_binary(join(re:split("B
B","(?<![cd])b",[]))),
-?line <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","(?<![cd])b",[trim]))),
-?line <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","(?<![cd])b",[{parts,
- 2}]))),
-?line <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","(?<![cd])b",[]))),
-?line <<"db::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<![cd])[ab]",[trim]))),
-?line <<"db:acb">> = iolist_to_binary(join(re:split("dbaacb","(?<![cd])[ab]",[{parts,
+ <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","(?<![cd])b",[trim]))),
+ <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","(?<![cd])b",[{parts,
+ 2}]))),
+ <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","(?<![cd])b",[]))),
+ <<"db::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<![cd])[ab]",[trim]))),
+ <<"db:acb">> = iolist_to_binary(join(re:split("dbaacb","(?<![cd])[ab]",[{parts,
+ 2}]))),
+ <<"db::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<![cd])[ab]",[]))),
+ <<"db::::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<!(c|d))[ab]",[trim]))),
+ <<"db::acb">> = iolist_to_binary(join(re:split("dbaacb","(?<!(c|d))[ab]",[{parts,
2}]))),
-?line <<"db::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<![cd])[ab]",[]))),
-?line <<"db::::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<!(c|d))[ab]",[trim]))),
-?line <<"db::acb">> = iolist_to_binary(join(re:split("dbaacb","(?<!(c|d))[ab]",[{parts,
- 2}]))),
-?line <<"db::::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<!(c|d))[ab]",[]))),
-?line <<"cdacc">> = iolist_to_binary(join(re:split("cdaccb","(?<!cd)[ab]",[trim]))),
-?line <<"cdacc:">> = iolist_to_binary(join(re:split("cdaccb","(?<!cd)[ab]",[{parts,
- 2}]))),
-?line <<"cdacc:">> = iolist_to_binary(join(re:split("cdaccb","(?<!cd)[ab]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^(?:a?b?)*$",[trim]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^(?:a?b?)*$",[{parts,
+ <<"db::::cb">> = iolist_to_binary(join(re:split("dbaacb","(?<!(c|d))[ab]",[]))),
+ <<"cdacc">> = iolist_to_binary(join(re:split("cdaccb","(?<!cd)[ab]",[trim]))),
+ <<"cdacc:">> = iolist_to_binary(join(re:split("cdaccb","(?<!cd)[ab]",[{parts,
+ 2}]))),
+ <<"cdacc:">> = iolist_to_binary(join(re:split("cdaccb","(?<!cd)[ab]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("","^(?:a?b?)*$",[trim]))),
+ <<"">> = iolist_to_binary(join(re:split("","^(?:a?b?)*$",[{parts,
+ 2}]))),
+ <<"">> = iolist_to_binary(join(re:split("","^(?:a?b?)*$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","^(?:a?b?)*$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^(?:a?b?)*$",[{parts,
2}]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^(?:a?b?)*$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","^(?:a?b?)*$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^(?:a?b?)*$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("a","^(?:a?b?)*$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","^(?:a?b?)*$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","^(?:a?b?)*$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^(?:a?b?)*$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab","^(?:a?b?)*$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","^(?:a?b?)*$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("ab","^(?:a?b?)*$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaa","^(?:a?b?)*$",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaa","^(?:a?b?)*$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab","^(?:a?b?)*$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaa","^(?:a?b?)*$",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaa","^(?:a?b?)*$",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaa","^(?:a?b?)*$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:a?b?)*$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:a?b?)*$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:a?b?)*$",[]))),
+ <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","^(?:a?b?)*$",[trim]))),
+ <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","^(?:a?b?)*$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaa","^(?:a?b?)*$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:a?b?)*$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:a?b?)*$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:a?b?)*$",[]))),
-?line <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","^(?:a?b?)*$",[trim]))),
-?line <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","^(?:a?b?)*$",[{parts,
- 2}]))),
-?line <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","^(?:a?b?)*$",[]))),
-?line <<"a--">> = iolist_to_binary(join(re:split("a--","^(?:a?b?)*$",[trim]))),
-?line <<"a--">> = iolist_to_binary(join(re:split("a--","^(?:a?b?)*$",[{parts,
+ <<"dbcb">> = iolist_to_binary(join(re:split("dbcb","^(?:a?b?)*$",[]))),
+ <<"a--">> = iolist_to_binary(join(re:split("a--","^(?:a?b?)*$",[trim]))),
+ <<"a--">> = iolist_to_binary(join(re:split("a--","^(?:a?b?)*$",[{parts,
+ 2}]))),
+ <<"a--">> = iolist_to_binary(join(re:split("a--","^(?:a?b?)*$",[]))),
+ <<"aa--">> = iolist_to_binary(join(re:split("aa--","^(?:a?b?)*$",[trim]))),
+ <<"aa--">> = iolist_to_binary(join(re:split("aa--","^(?:a?b?)*$",[{parts,
2}]))),
-?line <<"a--">> = iolist_to_binary(join(re:split("a--","^(?:a?b?)*$",[]))),
-?line <<"aa--">> = iolist_to_binary(join(re:split("aa--","^(?:a?b?)*$",[trim]))),
-?line <<"aa--">> = iolist_to_binary(join(re:split("aa--","^(?:a?b?)*$",[{parts,
- 2}]))),
-?line <<"aa--">> = iolist_to_binary(join(re:split("aa--","^(?:a?b?)*$",[]))),
-?line <<":a
+ <<"aa--">> = iolist_to_binary(join(re:split("aa--","^(?:a?b?)*$",[]))),
+ <<":a
:
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?s)^a(.))((?m)^b$)",[trim]))),
-?line <<":a
+ <<":a
:
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?s)^a(.))((?m)^b$)",[{parts,2}]))),
-?line <<":a
+ <<":a
:
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?s)^a(.))((?m)^b$)",[]))),
-?line <<"a
+ <<"a
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?m)^b$)",[trim]))),
-?line <<"a
+ <<"a
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?m)^b$)",[{parts,2}]))),
-?line <<"a
+ <<"a
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?m)^b$)",[]))),
-?line <<"a
+ <<"a
">> = iolist_to_binary(join(re:split("a
b","(?m)^b",[trim]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","(?m)^b",[{parts,2}]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","(?m)^b",[]))),
-?line <<"a
+ <<"a
:b">> = iolist_to_binary(join(re:split("a
b","(?m)^(b)",[trim]))),
-?line <<"a
+ <<"a
:b:">> = iolist_to_binary(join(re:split("a
b","(?m)^(b)",[{parts,2}]))),
-?line <<"a
+ <<"a
:b:">> = iolist_to_binary(join(re:split("a
b","(?m)^(b)",[]))),
-?line <<"a
+ <<"a
:b">> = iolist_to_binary(join(re:split("a
b","((?m)^b)",[trim]))),
-?line <<"a
+ <<"a
:b:">> = iolist_to_binary(join(re:split("a
b","((?m)^b)",[{parts,2}]))),
-?line <<"a
+ <<"a
:b:">> = iolist_to_binary(join(re:split("a
b","((?m)^b)",[]))),
-?line <<"a:b">> = iolist_to_binary(join(re:split("a
+ <<"a:b">> = iolist_to_binary(join(re:split("a
b","\\n((?m)^b)",[trim]))),
-?line <<"a:b:">> = iolist_to_binary(join(re:split("a
+ <<"a:b:">> = iolist_to_binary(join(re:split("a
b","\\n((?m)^b)",[{parts,2}]))),
-?line <<"a:b:">> = iolist_to_binary(join(re:split("a
+ <<"a:b:">> = iolist_to_binary(join(re:split("a
b","\\n((?m)^b)",[]))),
-?line <<"a
+ <<"a
b:
">> = iolist_to_binary(join(re:split("a
b
c","((?s).)c(?!.)",[trim]))),
-?line <<"a
+ <<"a
b:
:">> = iolist_to_binary(join(re:split("a
b
c","((?s).)c(?!.)",[{parts,2}]))),
-?line <<"a
+ <<"a
b:
:">> = iolist_to_binary(join(re:split("a
b
c","((?s).)c(?!.)",[]))),
-?line <<"a
+ <<"a
b:
">> = iolist_to_binary(join(re:split("a
b
c","((?s).)c(?!.)",[trim]))),
-?line <<"a
+ <<"a
b:
:">> = iolist_to_binary(join(re:split("a
b
c","((?s).)c(?!.)",[{parts,2}]))),
-?line <<"a
+ <<"a
b:
:">> = iolist_to_binary(join(re:split("a
b
c","((?s).)c(?!.)",[]))),
-?line <<"a
+ <<"a
:b
">> = iolist_to_binary(join(re:split("a
b
c","((?s)b.)c(?!.)",[trim]))),
-?line <<"a
+ <<"a
:b
:">> = iolist_to_binary(join(re:split("a
b
c","((?s)b.)c(?!.)",[{parts,2}]))),
-?line <<"a
+ <<"a
:b
:">> = iolist_to_binary(join(re:split("a
b
c","((?s)b.)c(?!.)",[]))),
-?line <<"a
+ <<"a
:b
">> = iolist_to_binary(join(re:split("a
b
c","((?s)b.)c(?!.)",[trim]))),
-?line <<"a
+ <<"a
:b
:">> = iolist_to_binary(join(re:split("a
b
c","((?s)b.)c(?!.)",[{parts,2}]))),
-?line <<"a
+ <<"a
:b
:">> = iolist_to_binary(join(re:split("a
b
c","((?s)b.)c(?!.)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","()^b",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","()^b",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","()^b",[]))),
-?line <<"a
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","()^b",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","()^b",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","()^b",[]))),
+ <<"a
b
c">> = iolist_to_binary(join(re:split("a
b
c","()^b",[trim]))),
-?line <<"a
+ <<"a
b
c">> = iolist_to_binary(join(re:split("a
b
c","()^b",[{parts,2}]))),
-?line <<"a
+ <<"a
b
c">> = iolist_to_binary(join(re:split("a
b
c","()^b",[]))),
-?line <<"a
+ <<"a
b
c">> = iolist_to_binary(join(re:split("a
b
c","()^b",[trim]))),
-?line <<"a
+ <<"a
b
c">> = iolist_to_binary(join(re:split("a
b
c","()^b",[{parts,2}]))),
-?line <<"a
+ <<"a
b
c">> = iolist_to_binary(join(re:split("a
b
c","()^b",[]))),
-?line <<"a
+ <<"a
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?m)^b)",[trim]))),
-?line <<"a
+ <<"a
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?m)^b)",[{parts,2}]))),
-?line <<"a
+ <<"a
:b:
c">> = iolist_to_binary(join(re:split("a
b
c","((?m)^b)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(x)?(?(1)a|b)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(x)?(?(1)a|b)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(x)?(?(1)a|b)",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[{parts,
- 2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[{parts,
- 2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","(x)?(?(1)b|a)",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","(x)?(?(1)b|a)",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","(x)?(?(1)b|a)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","()?(?(1)b|a)",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)b|a)",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(x)?(?(1)a|b)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(x)?(?(1)a|b)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(x)?(?(1)a|b)",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)b|a)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","()?(?(1)a|b)",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)a|b)",[{parts,
+ <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[{parts,
2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)a|b)",[]))),
-?line <<":(:)">> = iolist_to_binary(join(re:split("(blah)","^(\\()?blah(?(1)(\\)))$",[trim]))),
-?line <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\()?blah(?(1)(\\)))$",[{parts,
+ <<"a">> = iolist_to_binary(join(re:split("a","(x)?(?(1)a|b)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","(x)?(?(1)b|a)",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","(x)?(?(1)b|a)",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","(x)?(?(1)b|a)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","()?(?(1)b|a)",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)b|a)",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)b|a)",[]))),
+ ok.
+run30() ->
+ <<"">> = iolist_to_binary(join(re:split("a","()?(?(1)a|b)",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)a|b)",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","()?(?(1)a|b)",[]))),
+ <<":(:)">> = iolist_to_binary(join(re:split("(blah)","^(\\()?blah(?(1)(\\)))$",[trim]))),
+ <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\()?blah(?(1)(\\)))$",[{parts,
+ 2}]))),
+ <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\()?blah(?(1)(\\)))$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("blah","^(\\()?blah(?(1)(\\)))$",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("blah","^(\\()?blah(?(1)(\\)))$",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("blah","^(\\()?blah(?(1)(\\)))$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\()?blah(?(1)(\\)))$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\()?blah(?(1)(\\)))$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\()?blah(?(1)(\\)))$",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(\\()?blah(?(1)(\\)))$",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(\\()?blah(?(1)(\\)))$",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(\\()?blah(?(1)(\\)))$",[]))),
+ <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\()?blah(?(1)(\\)))$",[trim]))),
+ <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\()?blah(?(1)(\\)))$",[{parts,
+ 2}]))),
+ <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\()?blah(?(1)(\\)))$",[]))),
+ <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\()?blah(?(1)(\\)))$",[trim]))),
+ <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\()?blah(?(1)(\\)))$",[{parts,
+ 2}]))),
+ <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\()?blah(?(1)(\\)))$",[]))),
+ <<":(:)">> = iolist_to_binary(join(re:split("(blah)","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
+ <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\(+)?blah(?(1)(\\)))$",[{parts,
2}]))),
-?line <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\()?blah(?(1)(\\)))$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("blah","^(\\()?blah(?(1)(\\)))$",[trim]))),
-?line <<":::">> = iolist_to_binary(join(re:split("blah","^(\\()?blah(?(1)(\\)))$",[{parts,
+ <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\(+)?blah(?(1)(\\)))$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("blah","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("blah","^(\\(+)?blah(?(1)(\\)))$",[{parts,
2}]))),
-?line <<":::">> = iolist_to_binary(join(re:split("blah","^(\\()?blah(?(1)(\\)))$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\()?blah(?(1)(\\)))$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\()?blah(?(1)(\\)))$",[{parts,
+ <<":::">> = iolist_to_binary(join(re:split("blah","^(\\(+)?blah(?(1)(\\)))$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\(+)?blah(?(1)(\\)))$",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\()?blah(?(1)(\\)))$",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(\\()?blah(?(1)(\\)))$",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(\\()?blah(?(1)(\\)))$",[{parts,
- 2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","^(\\()?blah(?(1)(\\)))$",[]))),
-?line <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\()?blah(?(1)(\\)))$",[trim]))),
-?line <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\()?blah(?(1)(\\)))$",[{parts,
- 2}]))),
-?line <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\()?blah(?(1)(\\)))$",[]))),
-?line <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\()?blah(?(1)(\\)))$",[trim]))),
-?line <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\()?blah(?(1)(\\)))$",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\(+)?blah(?(1)(\\)))$",[]))),
+ <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
+ <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\(+)?blah(?(1)(\\)))$",[{parts,
2}]))),
-?line <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\()?blah(?(1)(\\)))$",[]))),
-?line <<":(:)">> = iolist_to_binary(join(re:split("(blah)","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
-?line <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\(+)?blah(?(1)(\\)))$",[{parts,
- 2}]))),
-?line <<":(:):">> = iolist_to_binary(join(re:split("(blah)","^(\\(+)?blah(?(1)(\\)))$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("blah","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
-?line <<":::">> = iolist_to_binary(join(re:split("blah","^(\\(+)?blah(?(1)(\\)))$",[{parts,
+ <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\(+)?blah(?(1)(\\)))$",[]))),
+ <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
+ <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\(+)?blah(?(1)(\\)))$",[{parts,
2}]))),
-?line <<":::">> = iolist_to_binary(join(re:split("blah","^(\\(+)?blah(?(1)(\\)))$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\(+)?blah(?(1)(\\)))$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\(+)?blah(?(1)(\\)))$",[]))),
-?line <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
-?line <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\(+)?blah(?(1)(\\)))$",[{parts,
+ <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\(+)?blah(?(1)(\\)))$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","(?(?!a)b|a)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?(?!a)b|a)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?(?!a)b|a)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=a)b|a)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=a)b|a)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=a)b|a)",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","(?(?=a)a|b)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?(?=a)a|b)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","(?(?=a)a|b)",[]))),
+ <<"a:a:aab">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[trim]))),
+ <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[{parts,
+ 2}]))),
+ <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[]))),
+ <<":one:">> = iolist_to_binary(join(re:split("one:","(\\w+:)+",[trim]))),
+ <<":one::">> = iolist_to_binary(join(re:split("one:","(\\w+:)+",[{parts,
+ 2}]))),
+ <<":one::">> = iolist_to_binary(join(re:split("one:","(\\w+:)+",[]))),
+ <<"a:a">> = iolist_to_binary(join(re:split("a","$(?<=^(a))",[trim]))),
+ <<"a:a:">> = iolist_to_binary(join(re:split("a","$(?<=^(a))",[{parts,
+ 2}]))),
+ <<"a:a:">> = iolist_to_binary(join(re:split("a","$(?<=^(a))",[]))),
+ <<"a:a:aab">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[trim]))),
+ <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[{parts,
+ 2}]))),
+ <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?=(a+?))\\1ab",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?=(a+?))\\1ab",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?=(a+?))\\1ab",[]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[trim]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[{parts,
+ 2}]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[trim]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[{parts,
+ 2}]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[]))),
+ <<"::abcd">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[trim]))),
+ <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[{parts,
+ 2}]))),
+ <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[]))),
+ <<":xy:z::::abcd">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[trim]))),
+ <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[{parts,
2}]))),
-?line <<"blah)">> = iolist_to_binary(join(re:split("blah)","^(\\(+)?blah(?(1)(\\)))$",[]))),
-?line <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\(+)?blah(?(1)(\\)))$",[trim]))),
-?line <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\(+)?blah(?(1)(\\)))$",[{parts,
+ <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[]))),
+ <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[trim]))),
+ <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[{parts,
+ 2}]))),
+ <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[]))),
+ <<"c:aa">> = iolist_to_binary(join(re:split("caab","(a*)b+",[trim]))),
+ <<"c:aa:">> = iolist_to_binary(join(re:split("caab","(a*)b+",[{parts,
+ 2}]))),
+ <<"c:aa:">> = iolist_to_binary(join(re:split("caab","(a*)b+",[]))),
+ <<"::abcd">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[trim]))),
+ <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[{parts,
+ 2}]))),
+ <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[]))),
+ <<":xy:z::::abcd">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[trim]))),
+ <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[{parts,
2}]))),
-?line <<"(blah">> = iolist_to_binary(join(re:split("(blah","^(\\(+)?blah(?(1)(\\)))$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","(?(?!a)b|a)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?(?!a)b|a)",[{parts,
+ <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[]))),
+ <<"*** ::Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\w:]+::)?(\\w+)$",[trim]))),
+ <<"*** ::Failers:">> = iolist_to_binary(join(re:split("*** Failers","([\\w:]+::)?(\\w+)$",[{parts,
+ 2}]))),
+ <<"*** ::Failers:">> = iolist_to_binary(join(re:split("*** Failers","([\\w:]+::)?(\\w+)$",[]))),
+ <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[trim]))),
+ <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[{parts,
+ 2}]))),
+ <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[]))),
+ <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[trim]))),
+ <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[{parts,
+ 2}]))),
+ <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[]))),
+ <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[trim]))),
+ <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[{parts,
+ 2}]))),
+ <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[]))),
+ ok.
+run31() ->
+ <<"">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[]))),
+ <<"a::[:b]::">> = iolist_to_binary(join(re:split("a:[b]:","([[:]+)",[trim]))),
+ <<"a::[:b]:">> = iolist_to_binary(join(re:split("a:[b]:","([[:]+)",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?(?!a)b|a)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=a)b|a)",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=a)b|a)",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?(?=a)b|a)",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[{parts,
+ <<"a::[:b]:::">> = iolist_to_binary(join(re:split("a:[b]:","([[:]+)",[]))),
+ <<"a:=[:b]:=">> = iolist_to_binary(join(re:split("a=[b]=","([[=]+)",[trim]))),
+ <<"a:=[:b]=">> = iolist_to_binary(join(re:split("a=[b]=","([[=]+)",[{parts,
2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[trim]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[{parts,
+ <<"a:=[:b]:=:">> = iolist_to_binary(join(re:split("a=[b]=","([[=]+)",[]))),
+ <<"a:.[:b]:.">> = iolist_to_binary(join(re:split("a.[b].","([[.]+)",[trim]))),
+ <<"a:.[:b].">> = iolist_to_binary(join(re:split("a.[b].","([[.]+)",[{parts,
2}]))),
-?line <<"a">> = iolist_to_binary(join(re:split("a","(?(?=a)b|a)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","(?(?=a)a|b)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?(?=a)a|b)",[{parts,
+ <<"a:.[:b]:.:">> = iolist_to_binary(join(re:split("a.[b].","([[.]+)",[]))),
+ <<":aaab">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[trim]))),
+ <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","(?(?=a)a|b)",[]))),
-?line <<"a:a:aab">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[trim]))),
-?line <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[{parts,
- 2}]))),
-?line <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[]))),
-?line <<":one:">> = iolist_to_binary(join(re:split("one:","(\\w+:)+",[trim]))),
-?line <<":one::">> = iolist_to_binary(join(re:split("one:","(\\w+:)+",[{parts,
- 2}]))),
-?line <<":one::">> = iolist_to_binary(join(re:split("one:","(\\w+:)+",[]))),
-?line <<"a:a">> = iolist_to_binary(join(re:split("a","$(?<=^(a))",[trim]))),
-?line <<"a:a:">> = iolist_to_binary(join(re:split("a","$(?<=^(a))",[{parts,
- 2}]))),
-?line <<"a:a:">> = iolist_to_binary(join(re:split("a","$(?<=^(a))",[]))),
-?line <<"a:a:aab">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[trim]))),
-?line <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[{parts,
- 2}]))),
-?line <<"a:a:aab:">> = iolist_to_binary(join(re:split("aaab","(?=(a+?))(\\1ab)",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?=(a+?))\\1ab",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?=(a+?))\\1ab",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?=(a+?))\\1ab",[]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[trim]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[{parts,
- 2}]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[trim]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[{parts,
- 2}]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","^(?=(a+?))\\1ab",[]))),
-?line <<"::abcd">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[trim]))),
-?line <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[{parts,
- 2}]))),
-?line <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[]))),
-?line <<":xy:z::::abcd">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[trim]))),
-?line <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[{parts,
- 2}]))),
-?line <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[]))),
-?line <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[trim]))),
-?line <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[{parts,
- 2}]))),
-?line <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[]))),
-?line <<"c:aa">> = iolist_to_binary(join(re:split("caab","(a*)b+",[trim]))),
-?line <<"c:aa:">> = iolist_to_binary(join(re:split("caab","(a*)b+",[{parts,
- 2}]))),
-?line <<"c:aa:">> = iolist_to_binary(join(re:split("caab","(a*)b+",[]))),
-?line <<"::abcd">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[trim]))),
-?line <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[{parts,
- 2}]))),
-?line <<"::abcd:">> = iolist_to_binary(join(re:split("abcd","([\\w:]+::)?(\\w+)$",[]))),
-?line <<":xy:z::::abcd">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[trim]))),
-?line <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[{parts,
- 2}]))),
-?line <<":xy:z::::abcd:">> = iolist_to_binary(join(re:split("xy:z:::abcd","([\\w:]+::)?(\\w+)$",[]))),
-?line <<"*** ::Failers">> = iolist_to_binary(join(re:split("*** Failers","([\\w:]+::)?(\\w+)$",[trim]))),
-?line <<"*** ::Failers:">> = iolist_to_binary(join(re:split("*** Failers","([\\w:]+::)?(\\w+)$",[{parts,
- 2}]))),
-?line <<"*** ::Failers:">> = iolist_to_binary(join(re:split("*** Failers","([\\w:]+::)?(\\w+)$",[]))),
-?line <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[trim]))),
-?line <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[{parts,
- 2}]))),
-?line <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[]))),
-?line <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[trim]))),
-?line <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[{parts,
- 2}]))),
-?line <<"abcd:">> = iolist_to_binary(join(re:split("abcd:","([\\w:]+::)?(\\w+)$",[]))),
-?line <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[trim]))),
-?line <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[{parts,
- 2}]))),
-?line <<":c:d">> = iolist_to_binary(join(re:split("aexycd","^[^bcd]*(c+)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaab","(?>a+)b",[]))),
-?line <<"a::[:b]::">> = iolist_to_binary(join(re:split("a:[b]:","([[:]+)",[trim]))),
-?line <<"a::[:b]:">> = iolist_to_binary(join(re:split("a:[b]:","([[:]+)",[{parts,
- 2}]))),
-?line <<"a::[:b]:::">> = iolist_to_binary(join(re:split("a:[b]:","([[:]+)",[]))),
-?line <<"a:=[:b]:=">> = iolist_to_binary(join(re:split("a=[b]=","([[=]+)",[trim]))),
-?line <<"a:=[:b]=">> = iolist_to_binary(join(re:split("a=[b]=","([[=]+)",[{parts,
- 2}]))),
-?line <<"a:=[:b]:=:">> = iolist_to_binary(join(re:split("a=[b]=","([[=]+)",[]))),
-?line <<"a:.[:b]:.">> = iolist_to_binary(join(re:split("a.[b].","([[.]+)",[trim]))),
-?line <<"a:.[:b].">> = iolist_to_binary(join(re:split("a.[b].","([[.]+)",[{parts,
- 2}]))),
-?line <<"a:.[:b]:.:">> = iolist_to_binary(join(re:split("a.[b].","([[.]+)",[]))),
-?line <<":aaab">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[trim]))),
-?line <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[{parts,
- 2}]))),
-?line <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[]))),
-?line <<":aaa">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[trim]))),
-?line <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[{parts,
- 2}]))),
-?line <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[]))),
-?line <<"((:x">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[trim]))),
-?line <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[{parts,
- 2}]))),
-?line <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Z",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Z",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Z",[]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","a\\Z",[trim]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","a\\Z",[{parts,
- 2}]))),
-?line <<"aaab">> = iolist_to_binary(join(re:split("aaab","a\\Z",[]))),
-?line <<"a
+ <<":aaab:">> = iolist_to_binary(join(re:split("aaab","((?>a+)b)",[]))),
+ <<":aaa">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[trim]))),
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[{parts,
+ 2}]))),
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(?>(a+))b",[]))),
+ <<"((:x">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[trim]))),
+ <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[{parts,
+ 2}]))),
+ <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","((?>[^()]+)|\\([^()]*\\))+",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Z",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Z",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a\\Z",[]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","a\\Z",[trim]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","a\\Z",[{parts,
+ 2}]))),
+ <<"aaab">> = iolist_to_binary(join(re:split("aaab","a\\Z",[]))),
+ <<"a
b">> = iolist_to_binary(join(re:split("a
b","a\\Z",[trim]))),
-?line <<"a
+ <<"a
b">> = iolist_to_binary(join(re:split("a
b","a\\Z",[{parts,2}]))),
-?line <<"a
+ <<"a
b">> = iolist_to_binary(join(re:split("a
b","a\\Z",[]))),
-?line <<"a
+ <<"a
">> = iolist_to_binary(join(re:split("a
b","b\\Z",[trim]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","b\\Z",[{parts,2}]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","b\\Z",[]))),
-?line <<"a
+ <<"a
">> = iolist_to_binary(join(re:split("a
b","b\\Z",[trim]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","b\\Z",[{parts,2}]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","b\\Z",[]))),
-?line <<"a
+ <<"a
">> = iolist_to_binary(join(re:split("a
b","b\\z",[trim]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","b\\z",[{parts,2}]))),
-?line <<"a
+ <<"a
:">> = iolist_to_binary(join(re:split("a
b","b\\z",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","b\\z",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","b\\z",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","b\\z",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","b\\z",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","b\\z",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","b\\z",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
2}]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<".a">> = iolist_to_binary(join(re:split(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<".a">> = iolist_to_binary(join(re:split(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
2}]))),
-?line <<".a">> = iolist_to_binary(join(re:split(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"-a">> = iolist_to_binary(join(re:split("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"-a">> = iolist_to_binary(join(re:split("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("abc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
2}]))),
-?line <<"-a">> = iolist_to_binary(join(re:split("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"a-">> = iolist_to_binary(join(re:split("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"a-">> = iolist_to_binary(join(re:split("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("a-b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
2}]))),
-?line <<"a-">> = iolist_to_binary(join(re:split("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"a.">> = iolist_to_binary(join(re:split("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"a.">> = iolist_to_binary(join(re:split("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("0-9","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
2}]))),
-?line <<"a.">> = iolist_to_binary(join(re:split("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"a_b">> = iolist_to_binary(join(re:split("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"a_b">> = iolist_to_binary(join(re:split("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"a_b">> = iolist_to_binary(join(re:split("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"a.-">> = iolist_to_binary(join(re:split("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"a.-">> = iolist_to_binary(join(re:split("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"a.-">> = iolist_to_binary(join(re:split("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"a..">> = iolist_to_binary(join(re:split("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"a..">> = iolist_to_binary(join(re:split("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"a..">> = iolist_to_binary(join(re:split("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"ab..bc">> = iolist_to_binary(join(re:split("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"ab..bc">> = iolist_to_binary(join(re:split("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"ab..bc">> = iolist_to_binary(join(re:split("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"the.quick.brown.fox-">> = iolist_to_binary(join(re:split("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"the.quick.brown.fox-">> = iolist_to_binary(join(re:split("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"the.quick.brown.fox-">> = iolist_to_binary(join(re:split("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"the.quick.brown.fox.">> = iolist_to_binary(join(re:split("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"the.quick.brown.fox.">> = iolist_to_binary(join(re:split("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"the.quick.brown.fox.">> = iolist_to_binary(join(re:split("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"the.quick.brown.fox_">> = iolist_to_binary(join(re:split("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"the.quick.brown.fox_">> = iolist_to_binary(join(re:split("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"the.quick.brown.fox_">> = iolist_to_binary(join(re:split("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<"the.quick.brown.fox+">> = iolist_to_binary(join(re:split("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
-?line <<"the.quick.brown.fox+">> = iolist_to_binary(join(re:split("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
- 2}]))),
-?line <<"the.quick.brown.fox+">> = iolist_to_binary(join(re:split("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
-?line <<":abcd">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd|wxyz))",[trim]))),
-?line <<":abcd:">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd|wxyz))",[{parts,
- 2}]))),
-?line <<":abcd:">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd|wxyz))",[]))),
-?line <<":wxyz">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd|wxyz))",[trim]))),
-?line <<":wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd|wxyz))",[{parts,
- 2}]))),
-?line <<":wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd|wxyz))",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>.*)(?<=(abcd|wxyz))",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>.*)(?<=(abcd|wxyz))",[{parts,
+ <<"::">> = iolist_to_binary(join(re:split("a.b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("5.6.7","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("the.quick.brown.fox","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a100.b200.300c","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("12-ab.1245","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"">> = iolist_to_binary(join(re:split("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"">> = iolist_to_binary(join(re:split("","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<".a">> = iolist_to_binary(join(re:split(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<".a">> = iolist_to_binary(join(re:split(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<".a">> = iolist_to_binary(join(re:split(".a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"-a">> = iolist_to_binary(join(re:split("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"-a">> = iolist_to_binary(join(re:split("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"-a">> = iolist_to_binary(join(re:split("-a","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"a-">> = iolist_to_binary(join(re:split("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"a-">> = iolist_to_binary(join(re:split("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"a-">> = iolist_to_binary(join(re:split("a-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"a.">> = iolist_to_binary(join(re:split("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"a.">> = iolist_to_binary(join(re:split("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"a.">> = iolist_to_binary(join(re:split("a.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"a_b">> = iolist_to_binary(join(re:split("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"a_b">> = iolist_to_binary(join(re:split("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"a_b">> = iolist_to_binary(join(re:split("a_b","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"a.-">> = iolist_to_binary(join(re:split("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"a.-">> = iolist_to_binary(join(re:split("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"a.-">> = iolist_to_binary(join(re:split("a.-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"a..">> = iolist_to_binary(join(re:split("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"a..">> = iolist_to_binary(join(re:split("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"a..">> = iolist_to_binary(join(re:split("a..","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"ab..bc">> = iolist_to_binary(join(re:split("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"ab..bc">> = iolist_to_binary(join(re:split("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"ab..bc">> = iolist_to_binary(join(re:split("ab..bc","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"the.quick.brown.fox-">> = iolist_to_binary(join(re:split("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"the.quick.brown.fox-">> = iolist_to_binary(join(re:split("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"the.quick.brown.fox-">> = iolist_to_binary(join(re:split("the.quick.brown.fox-","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"the.quick.brown.fox.">> = iolist_to_binary(join(re:split("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"the.quick.brown.fox.">> = iolist_to_binary(join(re:split("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"the.quick.brown.fox.">> = iolist_to_binary(join(re:split("the.quick.brown.fox.","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"the.quick.brown.fox_">> = iolist_to_binary(join(re:split("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"the.quick.brown.fox_">> = iolist_to_binary(join(re:split("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"the.quick.brown.fox_">> = iolist_to_binary(join(re:split("the.quick.brown.fox_","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<"the.quick.brown.fox+">> = iolist_to_binary(join(re:split("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[trim]))),
+ <<"the.quick.brown.fox+">> = iolist_to_binary(join(re:split("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[{parts,
+ 2}]))),
+ <<"the.quick.brown.fox+">> = iolist_to_binary(join(re:split("the.quick.brown.fox+","^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$",[]))),
+ <<":abcd">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd|wxyz))",[trim]))),
+ <<":abcd:">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd|wxyz))",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>.*)(?<=(abcd|wxyz))",[]))),
-?line <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(join(re:split("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))",[trim]))),
-?line <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(join(re:split("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))",[{parts,
- 2}]))),
-?line <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(join(re:split("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[trim]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[{parts,
- 2}]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword",[trim]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword",[{parts,
- 2}]))),
-?line <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword",[]))),
-?line <<"999">> = iolist_to_binary(join(re:split("999foo","(?<=\\d{3}(?!999))foo",[trim]))),
-?line <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=\\d{3}(?!999))foo",[{parts,
- 2}]))),
-?line <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=\\d{3}(?!999))foo",[]))),
-?line <<"123999">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999))foo",[trim]))),
-?line <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999))foo",[{parts,
- 2}]))),
-?line <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999))foo",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999))foo",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999))foo",[{parts,
+ <<":abcd:">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd|wxyz))",[]))),
+ <<":wxyz">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd|wxyz))",[trim]))),
+ <<":wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd|wxyz))",[{parts,
+ 2}]))),
+ <<":wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd|wxyz))",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>.*)(?<=(abcd|wxyz))",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>.*)(?<=(abcd|wxyz))",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?>.*)(?<=(abcd|wxyz))",[]))),
+ <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(join(re:split("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))",[trim]))),
+ <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(join(re:split("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))",[{parts,
+ 2}]))),
+ <<"a rather long string that doesn't end with one of them">> = iolist_to_binary(join(re:split("a rather long string that doesn't end with one of them","(?>.*)(?<=(abcd|wxyz))",[]))),
+ <<"">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark otherword","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[trim]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[{parts,
+ 2}]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark","word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword",[]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword",[trim]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword",[{parts,
+ 2}]))),
+ <<"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope">> = iolist_to_binary(join(re:split("word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope","word (?>[a-zA-Z0-9]+ ){0,30}otherword",[]))),
+ <<"999">> = iolist_to_binary(join(re:split("999foo","(?<=\\d{3}(?!999))foo",[trim]))),
+ <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=\\d{3}(?!999))foo",[{parts,
+ 2}]))),
+ <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=\\d{3}(?!999))foo",[]))),
+ <<"123999">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999))foo",[trim]))),
+ <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999))foo",[{parts,
+ 2}]))),
+ <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999))foo",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999))foo",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999))foo",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999))foo",[]))),
+ <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999))foo",[trim]))),
+ <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999))foo",[{parts,
+ 2}]))),
+ <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999))foo",[]))),
+ <<"999">> = iolist_to_binary(join(re:split("999foo","(?<=(?!...999)\\d{3})foo",[trim]))),
+ <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=(?!...999)\\d{3})foo",[{parts,
+ 2}]))),
+ <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=(?!...999)\\d{3})foo",[]))),
+ <<"123999">> = iolist_to_binary(join(re:split("123999foo","(?<=(?!...999)\\d{3})foo",[trim]))),
+ <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=(?!...999)\\d{3})foo",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999))foo",[]))),
-?line <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999))foo",[trim]))),
-?line <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999))foo",[{parts,
- 2}]))),
-?line <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999))foo",[]))),
-?line <<"999">> = iolist_to_binary(join(re:split("999foo","(?<=(?!...999)\\d{3})foo",[trim]))),
-?line <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=(?!...999)\\d{3})foo",[{parts,
- 2}]))),
-?line <<"999:">> = iolist_to_binary(join(re:split("999foo","(?<=(?!...999)\\d{3})foo",[]))),
-?line <<"123999">> = iolist_to_binary(join(re:split("123999foo","(?<=(?!...999)\\d{3})foo",[trim]))),
-?line <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=(?!...999)\\d{3})foo",[{parts,
- 2}]))),
-?line <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=(?!...999)\\d{3})foo",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?!...999)\\d{3})foo",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?!...999)\\d{3})foo",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?!...999)\\d{3})foo",[]))),
-?line <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=(?!...999)\\d{3})foo",[trim]))),
-?line <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=(?!...999)\\d{3})foo",[{parts,
- 2}]))),
-?line <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=(?!...999)\\d{3})foo",[]))),
-?line <<"123abc">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999)...)foo",[trim]))),
-?line <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999)...)foo",[{parts,
+ <<"123999:">> = iolist_to_binary(join(re:split("123999foo","(?<=(?!...999)\\d{3})foo",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?!...999)\\d{3})foo",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?!...999)\\d{3})foo",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=(?!...999)\\d{3})foo",[]))),
+ <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=(?!...999)\\d{3})foo",[trim]))),
+ <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=(?!...999)\\d{3})foo",[{parts,
+ 2}]))),
+ <<"123abcfoo">> = iolist_to_binary(join(re:split("123abcfoo","(?<=(?!...999)\\d{3})foo",[]))),
+ <<"123abc">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999)...)foo",[trim]))),
+ <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999)...)foo",[{parts,
+ 2}]))),
+ <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999)...)foo",[]))),
+ <<"123456">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}(?!999)...)foo",[trim]))),
+ <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}(?!999)...)foo",[{parts,
+ 2}]))),
+ <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}(?!999)...)foo",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999)...)foo",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999)...)foo",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999)...)foo",[]))),
+ <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999)...)foo",[trim]))),
+ <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999)...)foo",[{parts,
+ 2}]))),
+ <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999)...)foo",[]))),
+ <<"123abc">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}...)(?<!999)foo",[trim]))),
+ <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}...)(?<!999)foo",[{parts,
2}]))),
-?line <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}(?!999)...)foo",[]))),
-?line <<"123456">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}(?!999)...)foo",[trim]))),
-?line <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}(?!999)...)foo",[{parts,
+ <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}...)(?<!999)foo",[]))),
+ <<"123456">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}...)(?<!999)foo",[trim]))),
+ <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}...)(?<!999)foo",[{parts,
2}]))),
-?line <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}(?!999)...)foo",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999)...)foo",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999)...)foo",[{parts,
+ <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}...)(?<!999)foo",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}...)(?<!999)foo",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}...)(?<!999)foo",[{parts,
2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}(?!999)...)foo",[]))),
-?line <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999)...)foo",[trim]))),
-?line <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999)...)foo",[{parts,
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}...)(?<!999)foo",[]))),
+ <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}...)(?<!999)foo",[trim]))),
+ <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}...)(?<!999)foo",[{parts,
2}]))),
-?line <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}(?!999)...)foo",[]))),
-?line <<"123abc">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}...)(?<!999)foo",[trim]))),
-?line <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}...)(?<!999)foo",[{parts,
- 2}]))),
-?line <<"123abc:">> = iolist_to_binary(join(re:split("123abcfoo","(?<=\\d{3}...)(?<!999)foo",[]))),
-?line <<"123456">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}...)(?<!999)foo",[trim]))),
-?line <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}...)(?<!999)foo",[{parts,
- 2}]))),
-?line <<"123456:">> = iolist_to_binary(join(re:split("123456foo","(?<=\\d{3}...)(?<!999)foo",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}...)(?<!999)foo",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}...)(?<!999)foo",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?<=\\d{3}...)(?<!999)foo",[]))),
-?line <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}...)(?<!999)foo",[trim]))),
-?line <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}...)(?<!999)foo",[{parts,
- 2}]))),
-?line <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}...)(?<!999)foo",[]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<"123999foo">> = iolist_to_binary(join(re:split("123999foo","(?<=\\d{3}...)(?<!999)foo",[]))),
+ ok.
+run32() ->
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -27998,20 +28106,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28019,20 +28127,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28040,20 +28148,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href='abcd xyz pqr' cats","<a[\\s]+href[\\s]*=[\\s]* # find <a href=
([\\\"\\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28061,20 +28169,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28082,20 +28190,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28103,20 +28211,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href\\s*=\\s* # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28124,20 +28232,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":::abcd: xyz">> = iolist_to_binary(join(re:split("<a href=abcd xyz","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28145,20 +28253,20 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":\":abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href=\"abcd xyz pqr\" cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended,
trim]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
@@ -28166,321 +28274,323 @@ b","b\\z",[]))),
extended,
{parts,
2}]))),
-?line <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
+ <<":':abcd xyz pqr:: cats">> = iolist_to_binary(join(re:split("<a href = 'abcd xyz pqr' cats","<a\\s+href(?>\\s*)=(?>\\s*) # find <a href=
([\"'])? # find single or double quote
(?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching
# quote, otherwise match up to next space",[caseless,
dotall,
extended]))),
-?line <<":A:Z:B:::C:::D:::E:::F:::G">> = iolist_to_binary(join(re:split("ZABCDEFG","((Z)+|A)*",[trim]))),
-?line <<":A:Z:BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","((Z)+|A)*",[{parts,
- 2}]))),
-?line <<":A:Z:B:::C:::D:::E:::F:::G:::">> = iolist_to_binary(join(re:split("ZABCDEFG","((Z)+|A)*",[]))),
-?line <<":A::B:::C:::D:::E:::F:::G">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z()|A)*",[trim]))),
-?line <<":A::BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z()|A)*",[{parts,
+ <<":A:Z:B:::C:::D:::E:::F:::G">> = iolist_to_binary(join(re:split("ZABCDEFG","((Z)+|A)*",[trim]))),
+ <<":A:Z:BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","((Z)+|A)*",[{parts,
2}]))),
-?line <<":A::B:::C:::D:::E:::F:::G:::">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z()|A)*",[]))),
-?line <<":A:::B::::C::::D::::E::::F::::G">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z(())|A)*",[trim]))),
-?line <<":A:::BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z(())|A)*",[{parts,
- 2}]))),
-?line <<":A:::B::::C::::D::::E::::F::::G::::">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z(())|A)*",[]))),
-?line <<":A:B::C::D::E::F::G">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>Z)+|A)*",[trim]))),
-?line <<":A:BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>Z)+|A)*",[{parts,
- 2}]))),
-?line <<":A:B::C::D::E::F::G::">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>Z)+|A)*",[]))),
-?line <<"Z::::B::C::D::E::F::G">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>)+|A)*",[trim]))),
-?line <<"Z::ABCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>)+|A)*",[{parts,
+ <<":A:Z:B:::C:::D:::E:::F:::G:::">> = iolist_to_binary(join(re:split("ZABCDEFG","((Z)+|A)*",[]))),
+ <<":A::B:::C:::D:::E:::F:::G">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z()|A)*",[trim]))),
+ <<":A::BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z()|A)*",[{parts,
+ 2}]))),
+ <<":A::B:::C:::D:::E:::F:::G:::">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z()|A)*",[]))),
+ <<":A:::B::::C::::D::::E::::F::::G">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z(())|A)*",[trim]))),
+ <<":A:::BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z(())|A)*",[{parts,
+ 2}]))),
+ <<":A:::B::::C::::D::::E::::F::::G::::">> = iolist_to_binary(join(re:split("ZABCDEFG","(Z(())|A)*",[]))),
+ <<":A:B::C::D::E::F::G">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>Z)+|A)*",[trim]))),
+ <<":A:BCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>Z)+|A)*",[{parts,
2}]))),
-?line <<"Z::::B::C::D::E::F::G::">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>)+|A)*",[]))),
-?line <<":b:b:b">> = iolist_to_binary(join(re:split("abbab","a*",[trim]))),
-?line <<":bbab">> = iolist_to_binary(join(re:split("abbab","a*",[{parts,
- 2}]))),
-?line <<":b:b:b:">> = iolist_to_binary(join(re:split("abbab","a*",[]))),
-?line <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[a-\\d]",[trim]))),
-?line <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[a-\\d]",[{parts,
- 2}]))),
-?line <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[a-\\d]",[]))),
-?line <<":things">> = iolist_to_binary(join(re:split("-things","^[a-\\d]",[trim]))),
-?line <<":things">> = iolist_to_binary(join(re:split("-things","^[a-\\d]",[{parts,
- 2}]))),
-?line <<":things">> = iolist_to_binary(join(re:split("-things","^[a-\\d]",[]))),
-?line <<":digit">> = iolist_to_binary(join(re:split("0digit","^[a-\\d]",[trim]))),
-?line <<":digit">> = iolist_to_binary(join(re:split("0digit","^[a-\\d]",[{parts,
+ <<":A:B::C::D::E::F::G::">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>Z)+|A)*",[]))),
+ <<"Z::::B::C::D::E::F::G">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>)+|A)*",[trim]))),
+ <<"Z::ABCDEFG">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>)+|A)*",[{parts,
+ 2}]))),
+ <<"Z::::B::C::D::E::F::G::">> = iolist_to_binary(join(re:split("ZABCDEFG","((?>)+|A)*",[]))),
+ <<":b:b:b">> = iolist_to_binary(join(re:split("abbab","a*",[trim]))),
+ <<":bbab">> = iolist_to_binary(join(re:split("abbab","a*",[{parts,
+ 2}]))),
+ <<":b:b:b:">> = iolist_to_binary(join(re:split("abbab","a*",[]))),
+ <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[a-\\d]",[trim]))),
+ <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[a-\\d]",[{parts,
+ 2}]))),
+ <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[a-\\d]",[]))),
+ <<":things">> = iolist_to_binary(join(re:split("-things","^[a-\\d]",[trim]))),
+ <<":things">> = iolist_to_binary(join(re:split("-things","^[a-\\d]",[{parts,
2}]))),
-?line <<":digit">> = iolist_to_binary(join(re:split("0digit","^[a-\\d]",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-\\d]",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-\\d]",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-\\d]",[]))),
-?line <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[a-\\d]",[trim]))),
-?line <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[a-\\d]",[{parts,
+ <<":things">> = iolist_to_binary(join(re:split("-things","^[a-\\d]",[]))),
+ <<":digit">> = iolist_to_binary(join(re:split("0digit","^[a-\\d]",[trim]))),
+ <<":digit">> = iolist_to_binary(join(re:split("0digit","^[a-\\d]",[{parts,
2}]))),
-?line <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[a-\\d]",[]))),
-?line <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[\\d-a]",[trim]))),
-?line <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[\\d-a]",[{parts,
- 2}]))),
-?line <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[\\d-a]",[]))),
-?line <<":things">> = iolist_to_binary(join(re:split("-things","^[\\d-a]",[trim]))),
-?line <<":things">> = iolist_to_binary(join(re:split("-things","^[\\d-a]",[{parts,
- 2}]))),
-?line <<":things">> = iolist_to_binary(join(re:split("-things","^[\\d-a]",[]))),
-?line <<":digit">> = iolist_to_binary(join(re:split("0digit","^[\\d-a]",[trim]))),
-?line <<":digit">> = iolist_to_binary(join(re:split("0digit","^[\\d-a]",[{parts,
+ <<":digit">> = iolist_to_binary(join(re:split("0digit","^[a-\\d]",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-\\d]",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-\\d]",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[a-\\d]",[]))),
+ <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[a-\\d]",[trim]))),
+ <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[a-\\d]",[{parts,
+ 2}]))),
+ <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[a-\\d]",[]))),
+ <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[\\d-a]",[trim]))),
+ <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[\\d-a]",[{parts,
+ 2}]))),
+ <<":bcde">> = iolist_to_binary(join(re:split("abcde","^[\\d-a]",[]))),
+ <<":things">> = iolist_to_binary(join(re:split("-things","^[\\d-a]",[trim]))),
+ <<":things">> = iolist_to_binary(join(re:split("-things","^[\\d-a]",[{parts,
2}]))),
-?line <<":digit">> = iolist_to_binary(join(re:split("0digit","^[\\d-a]",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[\\d-a]",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[\\d-a]",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[\\d-a]",[]))),
-?line <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[\\d-a]",[trim]))),
-?line <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[\\d-a]",[{parts,
+ <<":things">> = iolist_to_binary(join(re:split("-things","^[\\d-a]",[]))),
+ <<":digit">> = iolist_to_binary(join(re:split("0digit","^[\\d-a]",[trim]))),
+ <<":digit">> = iolist_to_binary(join(re:split("0digit","^[\\d-a]",[{parts,
2}]))),
-?line <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[\\d-a]",[]))),
-?line <<">:<">> = iolist_to_binary(join(re:split(">
+ <<":digit">> = iolist_to_binary(join(re:split("0digit","^[\\d-a]",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[\\d-a]",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[\\d-a]",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^[\\d-a]",[]))),
+ <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[\\d-a]",[trim]))),
+ <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[\\d-a]",[{parts,
+ 2}]))),
+ <<"bcdef">> = iolist_to_binary(join(re:split("bcdef","^[\\d-a]",[]))),
+ <<">:<">> = iolist_to_binary(join(re:split(">
<","[[:space:]]+",[trim]))),
-?line <<">:<">> = iolist_to_binary(join(re:split(">
+ <<">:<">> = iolist_to_binary(join(re:split(">
<","[[:space:]]+",[{parts,2}]))),
-?line <<">:<">> = iolist_to_binary(join(re:split(">
+ <<">:<">> = iolist_to_binary(join(re:split(">
<","[[:space:]]+",[]))),
-?line <<">:
+ <<">:
<">> = iolist_to_binary(join(re:split(">
<","[[:blank:]]+",[trim]))),
-?line <<">:
+ <<">:
<">> = iolist_to_binary(join(re:split(">
<","[[:blank:]]+",[{parts,2}]))),
-?line <<">:
+ <<">:
<">> = iolist_to_binary(join(re:split(">
<","[[:blank:]]+",[]))),
-?line <<">: <">> = iolist_to_binary(join(re:split(">
+ <<">: <">> = iolist_to_binary(join(re:split(">
<","[\\s]+",[trim]))),
-?line <<">: <">> = iolist_to_binary(join(re:split(">
+ <<">: <">> = iolist_to_binary(join(re:split(">
<","[\\s]+",[{parts,2}]))),
-?line <<">: <">> = iolist_to_binary(join(re:split(">
+ <<">: <">> = iolist_to_binary(join(re:split(">
<","[\\s]+",[]))),
-?line <<">: <">> = iolist_to_binary(join(re:split(">
+ <<">: <">> = iolist_to_binary(join(re:split(">
<","\\s+",[trim]))),
-?line <<">: <">> = iolist_to_binary(join(re:split(">
+ <<">: <">> = iolist_to_binary(join(re:split(">
<","\\s+",[{parts,2}]))),
-?line <<">: <">> = iolist_to_binary(join(re:split(">
+ <<">: <">> = iolist_to_binary(join(re:split(">
<","\\s+",[]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","a b",[extended,
- trim]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","a b",[extended,
- {parts,
- 2}]))),
-?line <<"ab">> = iolist_to_binary(join(re:split("ab","a b",[extended]))),
-?line <<"a
+ <<"ab">> = iolist_to_binary(join(re:split("ab","a b",[extended,
+ trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","a b",[extended,
+ {parts,
+ 2}]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","a b",[extended]))),
+ <<"a
:b">> = iolist_to_binary(join(re:split("a
xb","(?!\\A)x",[multiline,trim]))),
-?line <<"a
+ <<"a
:b">> = iolist_to_binary(join(re:split("a
xb","(?!\\A)x",[multiline,{parts,2}]))),
-?line <<"a
+ <<"a
:b">> = iolist_to_binary(join(re:split("a
xb","(?!\\A)x",[multiline]))),
-?line <<"a
+ <<"a
xb">> = iolist_to_binary(join(re:split("a
xb","(?!^)x",[multiline,trim]))),
-?line <<"a
+ <<"a
xb">> = iolist_to_binary(join(re:split("a
xb","(?!^)x",[multiline,{parts,2}]))),
-?line <<"a
+ <<"a
xb">> = iolist_to_binary(join(re:split("a
xb","(?!^)x",[multiline]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcabcabc","abc\\Qabc\\Eabc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcabcabc","abc\\Qabc\\Eabc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abcabcabc","abc\\Qabc\\Eabc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc(*+|abc","abc\\Q(*+|\\Eabc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc(*+|abc","abc\\Q(*+|\\Eabc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc(*+|abc","abc\\Q(*+|\\Eabc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc abcabc"," abc\\Q abc\\Eabc",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc abcabc"," abc\\Q abc\\Eabc",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc abcabc"," abc\\Q abc\\Eabc",[extended]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," abc\\Q abc\\Eabc",[extended,
- trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," abc\\Q abc\\Eabc",[extended,
- {parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," abc\\Q abc\\Eabc",[extended]))),
-?line <<"abcabcabc">> = iolist_to_binary(join(re:split("abcabcabc"," abc\\Q abc\\Eabc",[extended,
+ <<"">> = iolist_to_binary(join(re:split("abcabcabc","abc\\Qabc\\Eabc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcabcabc","abc\\Qabc\\Eabc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcabcabc","abc\\Qabc\\Eabc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc(*+|abc","abc\\Q(*+|\\Eabc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc(*+|abc","abc\\Q(*+|\\Eabc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc(*+|abc","abc\\Q(*+|\\Eabc",[]))),
+ ok.
+run33() ->
+ <<"">> = iolist_to_binary(join(re:split("abc abcabc"," abc\\Q abc\\Eabc",[extended,
trim]))),
-?line <<"abcabcabc">> = iolist_to_binary(join(re:split("abcabcabc"," abc\\Q abc\\Eabc",[extended,
+ <<":">> = iolist_to_binary(join(re:split("abc abcabc"," abc\\Q abc\\Eabc",[extended,
{parts,
2}]))),
-?line <<"abcabcabc">> = iolist_to_binary(join(re:split("abcabcabc"," abc\\Q abc\\Eabc",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc abcabc"," abc\\Q abc\\Eabc",[extended]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," abc\\Q abc\\Eabc",[extended,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," abc\\Q abc\\Eabc",[extended,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers"," abc\\Q abc\\Eabc",[extended]))),
+ <<"abcabcabc">> = iolist_to_binary(join(re:split("abcabcabc"," abc\\Q abc\\Eabc",[extended,
+ trim]))),
+ <<"abcabcabc">> = iolist_to_binary(join(re:split("abcabcabc"," abc\\Q abc\\Eabc",[extended,
+ {parts,
+ 2}]))),
+ <<"abcabcabc">> = iolist_to_binary(join(re:split("abcabcabc"," abc\\Q abc\\Eabc",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc#not comment
+ <<"">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc#not comment
+ <<"">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment
",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment
",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment
",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc#not comment
+ <<"">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc#not comment
+ <<":">> = iolist_to_binary(join(re:split("abc#not comment
literal","abc#comment
\\Q#not comment
literal\\E #more comment",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc\\$xyz","\\Qabc\\$xyz\\E",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc\\$xyz","\\Qabc\\$xyz\\E",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc\\$xyz","\\Qabc\\$xyz\\E",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc",[]))),
-?line <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","\\Aabc",[trim]))),
-?line <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","\\Aabc",[{parts,
- 2}]))),
-?line <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","\\Aabc",[]))),
-?line <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","\\Aabc.",[trim]))),
-?line <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","\\Aabc.",[{parts,
- 2}]))),
-?line <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","\\Aabc.",[]))),
-?line <<"::xyz">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","abc.",[trim]))),
-?line <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","abc.",[{parts,
- 2}]))),
-?line <<"::xyz:">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","abc.",[]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XabcdY","a(?x: b c )d",[trim]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XabcdY","a(?x: b c )d",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("abc\\$xyz","\\Qabc\\$xyz\\E",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc\\$xyz","\\Qabc\\$xyz\\E",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc\\$xyz","\\Qabc\\$xyz\\E",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc$xyz","\\Qabc\\E\\$\\Qxyz\\E",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","\\Aabc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","\\Aabc",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\Aabc",[]))),
+ <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","\\Aabc",[trim]))),
+ <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","\\Aabc",[{parts,
+ 2}]))),
+ <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","\\Aabc",[]))),
+ <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","\\Aabc.",[trim]))),
+ <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","\\Aabc.",[{parts,
+ 2}]))),
+ <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","\\Aabc.",[]))),
+ <<"::xyz">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","abc.",[trim]))),
+ <<":abc2xyzabc3">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","abc.",[{parts,
2}]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XabcdY","a(?x: b c )d",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?x: b c )d",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?x: b c )d",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?x: b c )d",[]))),
-?line <<"Xa b c d Y">> = iolist_to_binary(join(re:split("Xa b c d Y","a(?x: b c )d",[trim]))),
-?line <<"Xa b c d Y">> = iolist_to_binary(join(re:split("Xa b c d Y","a(?x: b c )d",[{parts,
- 2}]))),
-?line <<"Xa b c d Y">> = iolist_to_binary(join(re:split("Xa b c d Y","a(?x: b c )d",[]))),
-?line <<"X:abc:Y">> = iolist_to_binary(join(re:split("XabcY","((?x)x y z | a b c)",[trim]))),
-?line <<"X:abc:Y">> = iolist_to_binary(join(re:split("XabcY","((?x)x y z | a b c)",[{parts,
- 2}]))),
-?line <<"X:abc:Y">> = iolist_to_binary(join(re:split("XabcY","((?x)x y z | a b c)",[]))),
-?line <<"A:xyz:B">> = iolist_to_binary(join(re:split("AxyzB","((?x)x y z | a b c)",[trim]))),
-?line <<"A:xyz:B">> = iolist_to_binary(join(re:split("AxyzB","((?x)x y z | a b c)",[{parts,
- 2}]))),
-?line <<"A:xyz:B">> = iolist_to_binary(join(re:split("AxyzB","((?x)x y z | a b c)",[]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XabCY","(?i)AB(?-i)C",[trim]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XabCY","(?i)AB(?-i)C",[{parts,
- 2}]))),
-?line <<"X:Y">> = iolist_to_binary(join(re:split("XabCY","(?i)AB(?-i)C",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i)AB(?-i)C",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i)AB(?-i)C",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i)AB(?-i)C",[]))),
-?line <<"XabcY">> = iolist_to_binary(join(re:split("XabcY","(?i)AB(?-i)C",[trim]))),
-?line <<"XabcY">> = iolist_to_binary(join(re:split("XabcY","(?i)AB(?-i)C",[{parts,
+ <<"::xyz:">> = iolist_to_binary(join(re:split("abc1abc2xyzabc3","abc.",[]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XabcdY","a(?x: b c )d",[trim]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XabcdY","a(?x: b c )d",[{parts,
2}]))),
-?line <<"XabcY">> = iolist_to_binary(join(re:split("XabcY","(?i)AB(?-i)C",[]))),
-?line <<":abC">> = iolist_to_binary(join(re:split("abCE","((?i)AB(?-i)C|D)E",[trim]))),
-?line <<":abC:">> = iolist_to_binary(join(re:split("abCE","((?i)AB(?-i)C|D)E",[{parts,
- 2}]))),
-?line <<":abC:">> = iolist_to_binary(join(re:split("abCE","((?i)AB(?-i)C|D)E",[]))),
-?line <<":D">> = iolist_to_binary(join(re:split("DE","((?i)AB(?-i)C|D)E",[trim]))),
-?line <<":D:">> = iolist_to_binary(join(re:split("DE","((?i)AB(?-i)C|D)E",[{parts,
- 2}]))),
-?line <<":D:">> = iolist_to_binary(join(re:split("DE","((?i)AB(?-i)C|D)E",[]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)AB(?-i)C|D)E",[trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)AB(?-i)C|D)E",[{parts,
- 2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)AB(?-i)C|D)E",[]))),
-?line <<"abcE">> = iolist_to_binary(join(re:split("abcE","((?i)AB(?-i)C|D)E",[trim]))),
-?line <<"abcE">> = iolist_to_binary(join(re:split("abcE","((?i)AB(?-i)C|D)E",[{parts,
- 2}]))),
-?line <<"abcE">> = iolist_to_binary(join(re:split("abcE","((?i)AB(?-i)C|D)E",[]))),
-?line <<"abCe">> = iolist_to_binary(join(re:split("abCe","((?i)AB(?-i)C|D)E",[trim]))),
-?line <<"abCe">> = iolist_to_binary(join(re:split("abCe","((?i)AB(?-i)C|D)E",[{parts,
- 2}]))),
-?line <<"abCe">> = iolist_to_binary(join(re:split("abCe","((?i)AB(?-i)C|D)E",[]))),
-?line <<"dE">> = iolist_to_binary(join(re:split("dE","((?i)AB(?-i)C|D)E",[trim]))),
-?line <<"dE">> = iolist_to_binary(join(re:split("dE","((?i)AB(?-i)C|D)E",[{parts,
- 2}]))),
-?line <<"dE">> = iolist_to_binary(join(re:split("dE","((?i)AB(?-i)C|D)E",[]))),
-?line <<"De">> = iolist_to_binary(join(re:split("De","((?i)AB(?-i)C|D)E",[trim]))),
-?line <<"De">> = iolist_to_binary(join(re:split("De","((?i)AB(?-i)C|D)E",[{parts,
- 2}]))),
-?line <<"De">> = iolist_to_binary(join(re:split("De","((?i)AB(?-i)C|D)E",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[{parts,
+ <<"X:Y">> = iolist_to_binary(join(re:split("XabcdY","a(?x: b c )d",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?x: b c )d",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?x: b c )d",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","a(?x: b c )d",[]))),
+ <<"Xa b c d Y">> = iolist_to_binary(join(re:split("Xa b c d Y","a(?x: b c )d",[trim]))),
+ <<"Xa b c d Y">> = iolist_to_binary(join(re:split("Xa b c d Y","a(?x: b c )d",[{parts,
2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[]))),
-?line <<"a:bc">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[trim]))),
-?line <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[{parts,
+ <<"Xa b c d Y">> = iolist_to_binary(join(re:split("Xa b c d Y","a(?x: b c )d",[]))),
+ <<"X:abc:Y">> = iolist_to_binary(join(re:split("XabcY","((?x)x y z | a b c)",[trim]))),
+ <<"X:abc:Y">> = iolist_to_binary(join(re:split("XabcY","((?x)x y z | a b c)",[{parts,
+ 2}]))),
+ <<"X:abc:Y">> = iolist_to_binary(join(re:split("XabcY","((?x)x y z | a b c)",[]))),
+ <<"A:xyz:B">> = iolist_to_binary(join(re:split("AxyzB","((?x)x y z | a b c)",[trim]))),
+ <<"A:xyz:B">> = iolist_to_binary(join(re:split("AxyzB","((?x)x y z | a b c)",[{parts,
+ 2}]))),
+ <<"A:xyz:B">> = iolist_to_binary(join(re:split("AxyzB","((?x)x y z | a b c)",[]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XabCY","(?i)AB(?-i)C",[trim]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XabCY","(?i)AB(?-i)C",[{parts,
+ 2}]))),
+ <<"X:Y">> = iolist_to_binary(join(re:split("XabCY","(?i)AB(?-i)C",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i)AB(?-i)C",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i)AB(?-i)C",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(?i)AB(?-i)C",[]))),
+ <<"XabcY">> = iolist_to_binary(join(re:split("XabcY","(?i)AB(?-i)C",[trim]))),
+ <<"XabcY">> = iolist_to_binary(join(re:split("XabcY","(?i)AB(?-i)C",[{parts,
+ 2}]))),
+ <<"XabcY">> = iolist_to_binary(join(re:split("XabcY","(?i)AB(?-i)C",[]))),
+ <<":abC">> = iolist_to_binary(join(re:split("abCE","((?i)AB(?-i)C|D)E",[trim]))),
+ <<":abC:">> = iolist_to_binary(join(re:split("abCE","((?i)AB(?-i)C|D)E",[{parts,
2}]))),
-?line <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[]))),
-?line <<":abc">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[dotall,
- trim]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[dotall,
- {parts,
- 2}]))),
-?line <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[dotall]))),
-?line <<"a:bc">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[dotall,
+ <<":abC:">> = iolist_to_binary(join(re:split("abCE","((?i)AB(?-i)C|D)E",[]))),
+ <<":D">> = iolist_to_binary(join(re:split("DE","((?i)AB(?-i)C|D)E",[trim]))),
+ <<":D:">> = iolist_to_binary(join(re:split("DE","((?i)AB(?-i)C|D)E",[{parts,
+ 2}]))),
+ <<":D:">> = iolist_to_binary(join(re:split("DE","((?i)AB(?-i)C|D)E",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)AB(?-i)C|D)E",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)AB(?-i)C|D)E",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((?i)AB(?-i)C|D)E",[]))),
+ <<"abcE">> = iolist_to_binary(join(re:split("abcE","((?i)AB(?-i)C|D)E",[trim]))),
+ <<"abcE">> = iolist_to_binary(join(re:split("abcE","((?i)AB(?-i)C|D)E",[{parts,
+ 2}]))),
+ <<"abcE">> = iolist_to_binary(join(re:split("abcE","((?i)AB(?-i)C|D)E",[]))),
+ <<"abCe">> = iolist_to_binary(join(re:split("abCe","((?i)AB(?-i)C|D)E",[trim]))),
+ <<"abCe">> = iolist_to_binary(join(re:split("abCe","((?i)AB(?-i)C|D)E",[{parts,
+ 2}]))),
+ <<"abCe">> = iolist_to_binary(join(re:split("abCe","((?i)AB(?-i)C|D)E",[]))),
+ <<"dE">> = iolist_to_binary(join(re:split("dE","((?i)AB(?-i)C|D)E",[trim]))),
+ <<"dE">> = iolist_to_binary(join(re:split("dE","((?i)AB(?-i)C|D)E",[{parts,
+ 2}]))),
+ <<"dE">> = iolist_to_binary(join(re:split("dE","((?i)AB(?-i)C|D)E",[]))),
+ <<"De">> = iolist_to_binary(join(re:split("De","((?i)AB(?-i)C|D)E",[trim]))),
+ <<"De">> = iolist_to_binary(join(re:split("De","((?i)AB(?-i)C|D)E",[{parts,
+ 2}]))),
+ <<"De">> = iolist_to_binary(join(re:split("De","((?i)AB(?-i)C|D)E",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[]))),
+ <<"a:bc">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[trim]))),
+ <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[{parts,
+ 2}]))),
+ <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[dotall,
trim]))),
-?line <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[dotall,
+ <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[dotall,
{parts,
2}]))),
-?line <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[dotall]))),
-?line <<":abc:abc">> = iolist_to_binary(join(re:split("abc123abc","((.*))\\d+\\1",[trim]))),
-?line <<":abc:abc:">> = iolist_to_binary(join(re:split("abc123abc","((.*))\\d+\\1",[{parts,
- 2}]))),
-?line <<":abc:abc:">> = iolist_to_binary(join(re:split("abc123abc","((.*))\\d+\\1",[]))),
-?line <<"a:bc:bc">> = iolist_to_binary(join(re:split("abc123bc","((.*))\\d+\\1",[trim]))),
-?line <<"a:bc:bc:">> = iolist_to_binary(join(re:split("abc123bc","((.*))\\d+\\1",[{parts,
+ <<":abc:">> = iolist_to_binary(join(re:split("abc123abc","(.*)\\d+\\1",[dotall]))),
+ <<"a:bc">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[dotall,
+ trim]))),
+ <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[dotall,
+ {parts,
+ 2}]))),
+ <<"a:bc:">> = iolist_to_binary(join(re:split("abc123bc","(.*)\\d+\\1",[dotall]))),
+ <<":abc:abc">> = iolist_to_binary(join(re:split("abc123abc","((.*))\\d+\\1",[trim]))),
+ <<":abc:abc:">> = iolist_to_binary(join(re:split("abc123abc","((.*))\\d+\\1",[{parts,
2}]))),
-?line <<"a:bc:bc:">> = iolist_to_binary(join(re:split("abc123bc","((.*))\\d+\\1",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a123::a123","^(?!:) # colon disallowed at start
+ <<":abc:abc:">> = iolist_to_binary(join(re:split("abc123abc","((.*))\\d+\\1",[]))),
+ <<"a:bc:bc">> = iolist_to_binary(join(re:split("abc123bc","((.*))\\d+\\1",[trim]))),
+ <<"a:bc:bc:">> = iolist_to_binary(join(re:split("abc123bc","((.*))\\d+\\1",[{parts,
+ 2}]))),
+ <<"a:bc:bc:">> = iolist_to_binary(join(re:split("abc123bc","((.*))\\d+\\1",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a123::a123","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28489,7 +28599,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123::a123","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123::a123","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28498,7 +28608,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123::a123","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123::a123","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28507,7 +28617,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("a123:b342::abcd","^(?!:) # colon disallowed at start
+ <<"">> = iolist_to_binary(join(re:split("a123:b342::abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28516,7 +28626,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:b342::abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:b342::abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28525,7 +28635,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:b342::abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:b342::abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28534,7 +28644,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
+ <<"">> = iolist_to_binary(join(re:split("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28543,7 +28653,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28552,7 +28662,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28561,7 +28671,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
+ <<"">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28570,7 +28680,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28579,7 +28689,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28588,7 +28698,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28597,7 +28707,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28606,7 +28716,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:ddde:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28615,7 +28725,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"">> = iolist_to_binary(join(re:split("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28624,7 +28734,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28633,7 +28743,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"::">> = iolist_to_binary(join(re:split("a123:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28642,7 +28752,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?!:) # colon disallowed at start
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28651,7 +28761,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?!:) # colon disallowed at start
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28660,7 +28770,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?!:) # colon disallowed at start
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28669,7 +28779,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28678,7 +28788,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28687,7 +28797,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ <<"1:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("1:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28696,7 +28806,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28705,7 +28815,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28714,7 +28824,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"a123:bce:ddde:9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123:bce:ddde:9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28723,7 +28833,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28732,7 +28842,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28741,7 +28851,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
+ <<"a123::9999:b342::324e:dcba:abcd">> = iolist_to_binary(join(re:split("a123::9999:b342::324e:dcba:abcd","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28750,7 +28860,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28759,7 +28869,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28768,7 +28878,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
+ <<"abcde:2:3:4:5:6:7:8">> = iolist_to_binary(join(re:split("abcde:2:3:4:5:6:7:8","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28777,7 +28887,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"::1">> = iolist_to_binary(join(re:split("::1","^(?!:) # colon disallowed at start
+ <<"::1">> = iolist_to_binary(join(re:split("::1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28786,7 +28896,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"::1">> = iolist_to_binary(join(re:split("::1","^(?!:) # colon disallowed at start
+ <<"::1">> = iolist_to_binary(join(re:split("::1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28795,7 +28905,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"::1">> = iolist_to_binary(join(re:split("::1","^(?!:) # colon disallowed at start
+ <<"::1">> = iolist_to_binary(join(re:split("::1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28804,7 +28914,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"abcd:fee0:123::">> = iolist_to_binary(join(re:split("abcd:fee0:123::","^(?!:) # colon disallowed at start
+ <<"abcd:fee0:123::">> = iolist_to_binary(join(re:split("abcd:fee0:123::","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28813,7 +28923,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"abcd:fee0:123::">> = iolist_to_binary(join(re:split("abcd:fee0:123::","^(?!:) # colon disallowed at start
+ <<"abcd:fee0:123::">> = iolist_to_binary(join(re:split("abcd:fee0:123::","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28822,7 +28932,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"abcd:fee0:123::">> = iolist_to_binary(join(re:split("abcd:fee0:123::","^(?!:) # colon disallowed at start
+ <<"abcd:fee0:123::">> = iolist_to_binary(join(re:split("abcd:fee0:123::","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28831,7 +28941,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<":1">> = iolist_to_binary(join(re:split(":1","^(?!:) # colon disallowed at start
+ <<":1">> = iolist_to_binary(join(re:split(":1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28840,7 +28950,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<":1">> = iolist_to_binary(join(re:split(":1","^(?!:) # colon disallowed at start
+ <<":1">> = iolist_to_binary(join(re:split(":1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28849,7 +28959,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<":1">> = iolist_to_binary(join(re:split(":1","^(?!:) # colon disallowed at start
+ <<":1">> = iolist_to_binary(join(re:split(":1","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28858,7 +28968,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"1:">> = iolist_to_binary(join(re:split("1:","^(?!:) # colon disallowed at start
+ <<"1:">> = iolist_to_binary(join(re:split("1:","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28867,7 +28977,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,trim]))),
-?line <<"1:">> = iolist_to_binary(join(re:split("1:","^(?!:) # colon disallowed at start
+ <<"1:">> = iolist_to_binary(join(re:split("1:","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28876,7 +28986,7 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless,{parts,2}]))),
-?line <<"1:">> = iolist_to_binary(join(re:split("1:","^(?!:) # colon disallowed at start
+ <<"1:">> = iolist_to_binary(join(re:split("1:","^(?!:) # colon disallowed at start
(?: # start of item
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
(?(1)0 | () ) ) # if null previously matched, fail; else null
@@ -28885,535 +28995,2980 @@ xb","(?!^)x",[multiline]))),
[0-9a-f]{1,4} $ # final hex number at end of string
(?(1)|.) # check that there was an empty component
",[extended,caseless]))),
-?line <<"">> = iolist_to_binary(join(re:split("z","[z\\Qa-d]\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","[z\\Qa-d]\\E]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","[z\\Qa-d]\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","[z\\Qa-d]\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","[z\\Qa-d]\\E]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","[z\\Qa-d]\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","[z\\Qa-d]\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[z\\Qa-d]\\E]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","[z\\Qa-d]\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("d","[z\\Qa-d]\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("d","[z\\Qa-d]\\E]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("d","[z\\Qa-d]\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("]","[z\\Qa-d]\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("]","[z\\Qa-d]\\E]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("]","[z\\Qa-d]\\E]",[]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[z\\Qa-d]\\E]",[trim]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[z\\Qa-d]\\E]",[{parts,
- 2}]))),
-?line <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[z\\Qa-d]\\E]",[]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[z\\Qa-d]\\E]",[trim]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[z\\Qa-d]\\E]",[{parts,
- 2}]))),
-?line <<"b">> = iolist_to_binary(join(re:split("b","[z\\Qa-d]\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("z","[\\z\\C]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","[\\z\\C]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("z","[\\z\\C]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("C","[\\z\\C]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("C","[\\z\\C]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("C","[\\z\\C]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("M","\\M",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("M","\\M",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("M","\\M",[]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b",[trim]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b",[{parts,
- 2}]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("REGular","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("REGular","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("REGular","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("regulaer","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("regulaer","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("regulaer","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Regex","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Regex","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Regex","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("regulär","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("regulär","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("regulär","(?i)reg(?:ul(?:[aä]|ae)r|ex)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Åæåäà","Åæåä[à-ÿÀ-ß]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Åæåäà","Åæåä[à-ÿÀ-ß]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Åæåäà","Åæåä[à-ÿÀ-ß]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Åæåäÿ","Åæåä[à-ÿÀ-ß]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Åæåäÿ","Åæåä[à-ÿÀ-ß]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Åæåäÿ","Åæåä[à-ÿÀ-ß]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ÅæåäÀ","Åæåä[à-ÿÀ-ß]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ÅæåäÀ","Åæåä[à-ÿÀ-ß]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ÅæåäÀ","Åæåä[à-ÿÀ-ß]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("Åæåäß","Åæåä[à-ÿÀ-ß]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("Åæåäß","Åæåä[à-ÿÀ-ß]+",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("Åæåäß","Åæåä[à-ÿÀ-ß]+",[]))),
-?line <<"„XAZ">> = iolist_to_binary(join(re:split("„XAZXB","(?<=Z)X.",[trim]))),
-?line <<"„XAZ:">> = iolist_to_binary(join(re:split("„XAZXB","(?<=Z)X.",[{parts,
+ <<"">> = iolist_to_binary(join(re:split("z","[z\\Qa-d]\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("z","[z\\Qa-d]\\E]",[{parts,
2}]))),
-?line <<"„XAZ:">> = iolist_to_binary(join(re:split("„XAZXB","(?<=Z)X.",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab cd defg","ab cd (?x) de fg",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab cd defg","ab cd (?x) de fg",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab cd defg","ab cd (?x) de fg",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ab cddefg","ab cd(?x) de fg",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab cddefg","ab cd(?x) de fg",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("ab cddefg","ab cd(?x) de fg",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","ab cd(?x) de fg",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","ab cd(?x) de fg",[{parts,
- 2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","ab cd(?x) de fg",[]))),
-?line <<"abcddefg">> = iolist_to_binary(join(re:split("abcddefg","ab cd(?x) de fg",[trim]))),
-?line <<"abcddefg">> = iolist_to_binary(join(re:split("abcddefg","ab cd(?x) de fg",[{parts,
- 2}]))),
-?line <<"abcddefg">> = iolist_to_binary(join(re:split("abcddefg","ab cd(?x) de fg",[]))),
-?line <<"foo:bar:X">> = iolist_to_binary(join(re:split("foobarX","(?<![^f]oo)(bar)",[trim]))),
-?line <<"foo:bar:X">> = iolist_to_binary(join(re:split("foobarX","(?<![^f]oo)(bar)",[{parts,
- 2}]))),
-?line <<"foo:bar:X">> = iolist_to_binary(join(re:split("foobarX","(?<![^f]oo)(bar)",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f]oo)(bar)",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f]oo)(bar)",[{parts,
- 2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f]oo)(bar)",[]))),
-?line <<"boobarX">> = iolist_to_binary(join(re:split("boobarX","(?<![^f]oo)(bar)",[trim]))),
-?line <<"boobarX">> = iolist_to_binary(join(re:split("boobarX","(?<![^f]oo)(bar)",[{parts,
- 2}]))),
-?line <<"boobarX">> = iolist_to_binary(join(re:split("boobarX","(?<![^f]oo)(bar)",[]))),
-?line <<"off">> = iolist_to_binary(join(re:split("offX","(?<![^f])X",[trim]))),
-?line <<"off:">> = iolist_to_binary(join(re:split("offX","(?<![^f])X",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("z","[z\\Qa-d]\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","[z\\Qa-d]\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","[z\\Qa-d]\\E]",[{parts,
2}]))),
-?line <<"off:">> = iolist_to_binary(join(re:split("offX","(?<![^f])X",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f])X",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f])X",[{parts,
- 2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f])X",[]))),
-?line <<"onyX">> = iolist_to_binary(join(re:split("onyX","(?<![^f])X",[trim]))),
-?line <<"onyX">> = iolist_to_binary(join(re:split("onyX","(?<![^f])X",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("a","[z\\Qa-d]\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","[z\\Qa-d]\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","[z\\Qa-d]\\E]",[{parts,
2}]))),
-?line <<"onyX">> = iolist_to_binary(join(re:split("onyX","(?<![^f])X",[]))),
-?line <<"ony">> = iolist_to_binary(join(re:split("onyX","(?<=[^f])X",[trim]))),
-?line <<"ony:">> = iolist_to_binary(join(re:split("onyX","(?<=[^f])X",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("-","[z\\Qa-d]\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("d","[z\\Qa-d]\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("d","[z\\Qa-d]\\E]",[{parts,
2}]))),
-?line <<"ony:">> = iolist_to_binary(join(re:split("onyX","(?<=[^f])X",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^f])X",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^f])X",[{parts,
- 2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^f])X",[]))),
-?line <<"offX">> = iolist_to_binary(join(re:split("offX","(?<=[^f])X",[trim]))),
-?line <<"offX">> = iolist_to_binary(join(re:split("offX","(?<=[^f])X",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("d","[z\\Qa-d]\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("]","[z\\Qa-d]\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("]","[z\\Qa-d]\\E]",[{parts,
2}]))),
-?line <<"offX">> = iolist_to_binary(join(re:split("offX","(?<=[^f])X",[]))),
-?line <<"a
+ <<":">> = iolist_to_binary(join(re:split("]","[z\\Qa-d]\\E]",[]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[z\\Qa-d]\\E]",[trim]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[z\\Qa-d]\\E]",[{parts,
+ 2}]))),
+ <<"*** F:ilers">> = iolist_to_binary(join(re:split("*** Failers","[z\\Qa-d]\\E]",[]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[z\\Qa-d]\\E]",[trim]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[z\\Qa-d]\\E]",[{parts,
+ 2}]))),
+ <<"b">> = iolist_to_binary(join(re:split("b","[z\\Qa-d]\\E]",[]))),
+ ok.
+run34() ->
+ <<"">> = iolist_to_binary(join(re:split("z","[\\z\\C]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("z","[\\z\\C]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("z","[\\z\\C]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("C","[\\z\\C]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("C","[\\z\\C]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("C","[\\z\\C]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("M","\\M",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("M","\\M",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("M","\\M",[]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b",[trim]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b",[{parts,
+ 2}]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a+)*b",[]))),
+ <<"„XAZ">> = iolist_to_binary(join(re:split("„XAZXB","(?<=Z)X.",[trim]))),
+ <<"„XAZ:">> = iolist_to_binary(join(re:split("„XAZXB","(?<=Z)X.",[{parts,
+ 2}]))),
+ <<"„XAZ:">> = iolist_to_binary(join(re:split("„XAZXB","(?<=Z)X.",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab cd defg","ab cd (?x) de fg",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab cd defg","ab cd (?x) de fg",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab cd defg","ab cd (?x) de fg",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab cddefg","ab cd(?x) de fg",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab cddefg","ab cd(?x) de fg",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab cddefg","ab cd(?x) de fg",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","ab cd(?x) de fg",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","ab cd(?x) de fg",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","ab cd(?x) de fg",[]))),
+ <<"abcddefg">> = iolist_to_binary(join(re:split("abcddefg","ab cd(?x) de fg",[trim]))),
+ <<"abcddefg">> = iolist_to_binary(join(re:split("abcddefg","ab cd(?x) de fg",[{parts,
+ 2}]))),
+ <<"abcddefg">> = iolist_to_binary(join(re:split("abcddefg","ab cd(?x) de fg",[]))),
+ <<"foo:bar:X">> = iolist_to_binary(join(re:split("foobarX","(?<![^f]oo)(bar)",[trim]))),
+ <<"foo:bar:X">> = iolist_to_binary(join(re:split("foobarX","(?<![^f]oo)(bar)",[{parts,
+ 2}]))),
+ <<"foo:bar:X">> = iolist_to_binary(join(re:split("foobarX","(?<![^f]oo)(bar)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f]oo)(bar)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f]oo)(bar)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f]oo)(bar)",[]))),
+ <<"boobarX">> = iolist_to_binary(join(re:split("boobarX","(?<![^f]oo)(bar)",[trim]))),
+ <<"boobarX">> = iolist_to_binary(join(re:split("boobarX","(?<![^f]oo)(bar)",[{parts,
+ 2}]))),
+ <<"boobarX">> = iolist_to_binary(join(re:split("boobarX","(?<![^f]oo)(bar)",[]))),
+ <<"off">> = iolist_to_binary(join(re:split("offX","(?<![^f])X",[trim]))),
+ <<"off:">> = iolist_to_binary(join(re:split("offX","(?<![^f])X",[{parts,
+ 2}]))),
+ <<"off:">> = iolist_to_binary(join(re:split("offX","(?<![^f])X",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f])X",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f])X",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<![^f])X",[]))),
+ <<"onyX">> = iolist_to_binary(join(re:split("onyX","(?<![^f])X",[trim]))),
+ <<"onyX">> = iolist_to_binary(join(re:split("onyX","(?<![^f])X",[{parts,
+ 2}]))),
+ <<"onyX">> = iolist_to_binary(join(re:split("onyX","(?<![^f])X",[]))),
+ <<"ony">> = iolist_to_binary(join(re:split("onyX","(?<=[^f])X",[trim]))),
+ <<"ony:">> = iolist_to_binary(join(re:split("onyX","(?<=[^f])X",[{parts,
+ 2}]))),
+ <<"ony:">> = iolist_to_binary(join(re:split("onyX","(?<=[^f])X",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^f])X",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^f])X",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^f])X",[]))),
+ <<"offX">> = iolist_to_binary(join(re:split("offX","(?<=[^f])X",[trim]))),
+ <<"offX">> = iolist_to_binary(join(re:split("offX","(?<=[^f])X",[{parts,
+ 2}]))),
+ <<"offX">> = iolist_to_binary(join(re:split("offX","(?<=[^f])X",[]))),
+ <<"a
:b
:c">> = iolist_to_binary(join(re:split("a
b
c","^",[multiline,trim]))),
-?line <<"a
+ <<"a
:b
c">> = iolist_to_binary(join(re:split("a
b
c","^",[multiline,{parts,2}]))),
-?line <<"a
+ <<"a
:b
:c">> = iolist_to_binary(join(re:split("a
b
c","^",[multiline]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^",[multiline,
- trim]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^",[multiline,
- {parts,
- 2}]))),
-?line <<"">> = iolist_to_binary(join(re:split("","^",[multiline]))),
-?line <<"A
+ <<"">> = iolist_to_binary(join(re:split("","^",[multiline,
+ trim]))),
+ <<"">> = iolist_to_binary(join(re:split("","^",[multiline,
+ {parts,
+ 2}]))),
+ <<"">> = iolist_to_binary(join(re:split("","^",[multiline]))),
+ <<"A
C
:C">> = iolist_to_binary(join(re:split("A
C
C","(?<=C\\n)^",[multiline,trim]))),
-?line <<"A
+ <<"A
C
:C">> = iolist_to_binary(join(re:split("A
C
C","(?<=C\\n)^",[multiline,{parts,2}]))),
-?line <<"A
+ <<"A
C
:C">> = iolist_to_binary(join(re:split("A
C
C","(?<=C\\n)^",[multiline]))),
-?line <<":X">> = iolist_to_binary(join(re:split("bXaX","(?:(?(1)a|b)(X))+",[trim]))),
-?line <<":X:">> = iolist_to_binary(join(re:split("bXaX","(?:(?(1)a|b)(X))+",[{parts,
+ <<":X">> = iolist_to_binary(join(re:split("bXaX","(?:(?(1)a|b)(X))+",[trim]))),
+ <<":X:">> = iolist_to_binary(join(re:split("bXaX","(?:(?(1)a|b)(X))+",[{parts,
+ 2}]))),
+ <<":X:">> = iolist_to_binary(join(re:split("bXaX","(?:(?(1)a|b)(X))+",[]))),
+ <<":Y">> = iolist_to_binary(join(re:split("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+",[trim]))),
+ <<":Y:">> = iolist_to_binary(join(re:split("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+",[{parts,
+ 2}]))),
+ <<":Y:">> = iolist_to_binary(join(re:split("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+",[]))),
+ <<":X:YaXXaX">> = iolist_to_binary(join(re:split("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+",[trim]))),
+ <<":X:YaXXaX">> = iolist_to_binary(join(re:split("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+",[{parts,
+ 2}]))),
+ <<":X:YaXXaX">> = iolist_to_binary(join(re:split("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+",[]))),
+ <<"::::::::::X:XaYYaY">> = iolist_to_binary(join(re:split("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+",[trim]))),
+ <<"::::::::::X:XaYYaY">> = iolist_to_binary(join(re:split("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+",[{parts,
+ 2}]))),
+ <<"::::::::::X:XaYYaY">> = iolist_to_binary(join(re:split("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc]","[[,abc,]+]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc]","[[,abc,]+]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc]","[[,abc,]+]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a,b]","[[,abc,]+]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a,b]","[[,abc,]+]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a,b]","[[,abc,]+]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("[a,b,c]","[[,abc,]+]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("[a,b,c]","[[,abc,]+]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("[a,b,c]","[[,abc,]+]",[]))),
+ <<"A:B">> = iolist_to_binary(join(re:split("A B","(?-x: )",[extended,
+ trim]))),
+ <<"A:B">> = iolist_to_binary(join(re:split("A B","(?-x: )",[extended,
+ {parts,
+ 2}]))),
+ <<"A:B">> = iolist_to_binary(join(re:split("A B","(?-x: )",[extended]))),
+ <<"A:B">> = iolist_to_binary(join(re:split("A # B","(?x)(?-x: \\s*#\\s*)",[trim]))),
+ <<"A:B">> = iolist_to_binary(join(re:split("A # B","(?x)(?-x: \\s*#\\s*)",[{parts,
+ 2}]))),
+ <<"A:B">> = iolist_to_binary(join(re:split("A # B","(?x)(?-x: \\s*#\\s*)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x)(?-x: \\s*#\\s*)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x)(?-x: \\s*#\\s*)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x)(?-x: \\s*#\\s*)",[]))),
+ <<"#">> = iolist_to_binary(join(re:split("#","(?x)(?-x: \\s*#\\s*)",[trim]))),
+ <<"#">> = iolist_to_binary(join(re:split("#","(?x)(?-x: \\s*#\\s*)",[{parts,
2}]))),
-?line <<":X:">> = iolist_to_binary(join(re:split("bXaX","(?:(?(1)a|b)(X))+",[]))),
-?line <<":Y">> = iolist_to_binary(join(re:split("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+",[trim]))),
-?line <<":Y:">> = iolist_to_binary(join(re:split("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+",[{parts,
- 2}]))),
-?line <<":Y:">> = iolist_to_binary(join(re:split("bXXaYYaY","(?:(?(1)\\1a|b)(X|Y))+",[]))),
-?line <<":X:YaXXaX">> = iolist_to_binary(join(re:split("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+",[trim]))),
-?line <<":X:YaXXaX">> = iolist_to_binary(join(re:split("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+",[{parts,
- 2}]))),
-?line <<":X:YaXXaX">> = iolist_to_binary(join(re:split("bXYaXXaX","(?:(?(1)\\1a|b)(X|Y))+",[]))),
-?line <<"::::::::::X:XaYYaY">> = iolist_to_binary(join(re:split("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+",[trim]))),
-?line <<"::::::::::X:XaYYaY">> = iolist_to_binary(join(re:split("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+",[{parts,
- 2}]))),
-?line <<"::::::::::X:XaYYaY">> = iolist_to_binary(join(re:split("bXXaYYaY","()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc]","[[,abc,]+]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc]","[[,abc,]+]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc]","[[,abc,]+]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a,b]","[[,abc,]+]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a,b]","[[,abc,]+]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a,b]","[[,abc,]+]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("[a,b,c]","[[,abc,]+]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("[a,b,c]","[[,abc,]+]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("[a,b,c]","[[,abc,]+]",[]))),
-?line <<"A:B">> = iolist_to_binary(join(re:split("A B","(?-x: )",[extended,
- trim]))),
-?line <<"A:B">> = iolist_to_binary(join(re:split("A B","(?-x: )",[extended,
- {parts,
- 2}]))),
-?line <<"A:B">> = iolist_to_binary(join(re:split("A B","(?-x: )",[extended]))),
-?line <<"A:B">> = iolist_to_binary(join(re:split("A # B","(?x)(?-x: \\s*#\\s*)",[trim]))),
-?line <<"A:B">> = iolist_to_binary(join(re:split("A # B","(?x)(?-x: \\s*#\\s*)",[{parts,
- 2}]))),
-?line <<"A:B">> = iolist_to_binary(join(re:split("A # B","(?x)(?-x: \\s*#\\s*)",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x)(?-x: \\s*#\\s*)",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x)(?-x: \\s*#\\s*)",[{parts,
- 2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x)(?-x: \\s*#\\s*)",[]))),
-?line <<"#">> = iolist_to_binary(join(re:split("#","(?x)(?-x: \\s*#\\s*)",[trim]))),
-?line <<"#">> = iolist_to_binary(join(re:split("#","(?x)(?-x: \\s*#\\s*)",[{parts,
- 2}]))),
-?line <<"#">> = iolist_to_binary(join(re:split("#","(?x)(?-x: \\s*#\\s*)",[]))),
-?line <<"A">> = iolist_to_binary(join(re:split("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
-?line <<"A:">> = iolist_to_binary(join(re:split("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
- 2}]))),
-?line <<"A:">> = iolist_to_binary(join(re:split("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
- 2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
-?line <<"A#include">> = iolist_to_binary(join(re:split("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
-?line <<"A#include">> = iolist_to_binary(join(re:split("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
+ <<"#">> = iolist_to_binary(join(re:split("#","(?x)(?-x: \\s*#\\s*)",[]))),
+ <<"A">> = iolist_to_binary(join(re:split("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
+ <<"A:">> = iolist_to_binary(join(re:split("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
2}]))),
-?line <<"A#include">> = iolist_to_binary(join(re:split("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
-?line <<"A #Include">> = iolist_to_binary(join(re:split("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
-?line <<"A #Include">> = iolist_to_binary(join(re:split("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
- 2}]))),
-?line <<"A #Include">> = iolist_to_binary(join(re:split("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b*\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","a*b*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b*\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a*b*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b*\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b?\\w",[trim]))),
-?line <<":bb">> = iolist_to_binary(join(re:split("aaabbbb","a*b?\\w",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("aaabbbb","a*b?\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","a*b?\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b?\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b?\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a*b?\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b?\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b?\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,4}\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,4}\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,4}\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","a*b{0,4}\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,4}\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,4}\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a*b{0,4}\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b{0,4}\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b{0,4}\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,}\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,}\\w",[{parts,
+ <<"A:">> = iolist_to_binary(join(re:split("A #include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
+ <<"A#include">> = iolist_to_binary(join(re:split("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
+ <<"A#include">> = iolist_to_binary(join(re:split("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
+ 2}]))),
+ <<"A#include">> = iolist_to_binary(join(re:split("A#include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
+ <<"A #Include">> = iolist_to_binary(join(re:split("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[trim]))),
+ <<"A #Include">> = iolist_to_binary(join(re:split("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[{parts,
+ 2}]))),
+ <<"A #Include">> = iolist_to_binary(join(re:split("A #Include","(?x-is)(?:(?-ixs) \\s*#\\s*) include",[]))),
+ ok.
+run35() ->
+ <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","a*b*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a*b*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b*\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b?\\w",[trim]))),
+ <<":bb">> = iolist_to_binary(join(re:split("aaabbbb","a*b?\\w",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaabbbb","a*b?\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","a*b?\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b?\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b?\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a*b?\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b?\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b?\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,4}\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,4}\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,}\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","a*b{0,}\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,}\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,4}\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","a*b{0,4}\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,4}\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,}\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a*b{0,}\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b{0,}\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,4}\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a*b{0,4}\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b{0,4}\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b{0,}\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("0a","a*\\d*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("0a","a*\\d*\\w",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("0a","a*\\d*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a*\\d*\\w",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*\\d*\\w",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("a","a*b{0,4}\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,}\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,}\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaabbbb","a*b{0,}\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","a*b{0,}\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,}\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","a*b{0,}\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a*b{0,}\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b{0,}\\w",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b{0,}\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("0a","a*\\d*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("0a","a*\\d*\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*\\d*\\w",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a*b *\\w",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b *\\w",[extended,
- {parts,
+ <<":">> = iolist_to_binary(join(re:split("0a","a*\\d*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a*\\d*\\w",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*\\d*\\w",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b *\\w",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a*b#comment
+ <<":">> = iolist_to_binary(join(re:split("a","a*\\d*\\w",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a*b *\\w",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b *\\w",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a*b *\\w",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("a","a*b#comment
*\\w",[extended,trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b#comment
+ <<":">> = iolist_to_binary(join(re:split("a","a*b#comment
*\\w",[extended,{parts,2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a*b#comment
+ <<":">> = iolist_to_binary(join(re:split("a","a*b#comment
*\\w",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","a* b *\\w",[extended,
- trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a* b *\\w",[extended,
- {parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","a* b *\\w",[extended]))),
-?line <<"::
+ <<"">> = iolist_to_binary(join(re:split("a","a* b *\\w",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a* b *\\w",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","a* b *\\w",[extended]))),
+ <<"::
pqr">> = iolist_to_binary(join(re:split("abc=xyz\\
pqr","^\\w+=.*(\\\\\\n.*)*",[trim]))),
-?line <<"::
+ <<"::
pqr">> = iolist_to_binary(join(re:split("abc=xyz\\
pqr","^\\w+=.*(\\\\\\n.*)*",[{parts,2}]))),
-?line <<"::
+ <<"::
pqr">> = iolist_to_binary(join(re:split("abc=xyz\\
pqr","^\\w+=.*(\\\\\\n.*)*",[]))),
-?line <<":abcd">> = iolist_to_binary(join(re:split("abcd:","(?=(\\w+))\\1:",[trim]))),
-?line <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","(?=(\\w+))\\1:",[{parts,
+ <<":abcd">> = iolist_to_binary(join(re:split("abcd:","(?=(\\w+))\\1:",[trim]))),
+ <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","(?=(\\w+))\\1:",[{parts,
+ 2}]))),
+ <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","(?=(\\w+))\\1:",[]))),
+ <<":abcd">> = iolist_to_binary(join(re:split("abcd:","^(?=(\\w+))\\1:",[trim]))),
+ <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","^(?=(\\w+))\\1:",[{parts,
2}]))),
-?line <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","(?=(\\w+))\\1:",[]))),
-?line <<":abcd">> = iolist_to_binary(join(re:split("abcd:","^(?=(\\w+))\\1:",[trim]))),
-?line <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","^(?=(\\w+))\\1:",[{parts,
- 2}]))),
-?line <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","^(?=(\\w+))\\1:",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^\\Eabc",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^\\Eabc",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^\\Eabc",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","^[\\Eabc]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^[\\Eabc]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^[\\Eabc]",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\Eabc]",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\Eabc]",[{parts,
+ <<":abcd:">> = iolist_to_binary(join(re:split("abcd:","^(?=(\\w+))\\1:",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","^\\Eabc",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^\\Eabc",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^\\Eabc",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","^[\\Eabc]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^[\\Eabc]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^[\\Eabc]",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\Eabc]",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\Eabc]",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\Eabc]",[]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[\\Eabc]",[trim]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[\\Eabc]",[{parts,
+ 2}]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[\\Eabc]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^[a-\\Ec]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("b","^[a-\\Ec]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("b","^[a-\\Ec]",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a-\\Ec]",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a-\\Ec]",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a-\\Ec]",[]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[a-\\Ec]",[trim]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[a-\\Ec]",[{parts,
+ 2}]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[a-\\Ec]",[]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[a-\\Ec]",[trim]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[a-\\Ec]",[{parts,
+ 2}]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[a-\\Ec]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^[a\\E\\E-\\Ec]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("b","^[a\\E\\E-\\Ec]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("b","^[a\\E\\E-\\Ec]",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a\\E\\E-\\Ec]",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a\\E\\E-\\Ec]",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a\\E\\E-\\Ec]",[]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[a\\E\\E-\\Ec]",[trim]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[a\\E\\E-\\Ec]",[{parts,
+ 2}]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[a\\E\\E-\\Ec]",[]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[a\\E\\E-\\Ec]",[trim]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[a\\E\\E-\\Ec]",[{parts,
+ 2}]))),
+ <<"E">> = iolist_to_binary(join(re:split("E","^[a\\E\\E-\\Ec]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","^[\\E\\Qa\\E-\\Qz\\E]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("b","^[\\E\\Qa\\E-\\Qz\\E]+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("b","^[\\E\\Qa\\E-\\Qz\\E]+",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+",[]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[\\E\\Qa\\E-\\Qz\\E]+",[trim]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[\\E\\Qa\\E-\\Qz\\E]+",[{parts,
+ 2}]))),
+ <<"-">> = iolist_to_binary(join(re:split("-","^[\\E\\Qa\\E-\\Qz\\E]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","^[a\\Q]bc\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^[a\\Q]bc\\E]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^[a\\Q]bc\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("]","^[a\\Q]bc\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("]","^[a\\Q]bc\\E]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("]","^[a\\Q]bc\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("c","^[a\\Q]bc\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("c","^[a\\Q]bc\\E]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("c","^[a\\Q]bc\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","^[a-\\Q\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^[a-\\Q\\E]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","^[a-\\Q\\E]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("-","^[a-\\Q\\E]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("-","^[a-\\Q\\E]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("-","^[a-\\Q\\E]",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaa","^(a()*)*",[trim]))),
+ <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()*)*",[{parts,
+ 2}]))),
+ <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()*)*",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))*)*",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))*)*",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))*)*",[]))),
+ ok.
+run36() ->
+ <<":a">> = iolist_to_binary(join(re:split("aaaa","^(a()+)+",[trim]))),
+ <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()+)+",[{parts,
+ 2}]))),
+ <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()+)+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))+)+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))+)+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))+)+",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("abbD","(a){0,3}(?(1)b|(c|))*D",[trim]))),
+ <<":a::">> = iolist_to_binary(join(re:split("abbD","(a){0,3}(?(1)b|(c|))*D",[{parts,
+ 2}]))),
+ <<":a::">> = iolist_to_binary(join(re:split("abbD","(a){0,3}(?(1)b|(c|))*D",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ccccD","(a){0,3}(?(1)b|(c|))*D",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("ccccD","(a){0,3}(?(1)b|(c|))*D",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("ccccD","(a){0,3}(?(1)b|(c|))*D",[]))),
+ <<"">> = iolist_to_binary(join(re:split("D","(a){0,3}(?(1)b|(c|))*D",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("D","(a){0,3}(?(1)b|(c|))*D",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("D","(a){0,3}(?(1)b|(c|))*D",[]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d",[trim]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d",[{parts,
+ 2}]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d",[]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d",[trim]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d",[{parts,
+ 2}]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d",[]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d",[trim]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d",[{parts,
+ 2}]))),
+ <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","\\Z",[trim]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","\\Z",[{parts,
+ 2}]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","\\Z",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[trim]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[{parts,
+ 2}]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[trim]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[{parts,
+ 2}]))),
+ <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","(.*(.)?)*",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("abcd","(.*(.)?)*",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("abcd","(.*(.)?)*",[]))),
+ <<"a:::b:::c:::d">> = iolist_to_binary(join(re:split("abcd","( (A | (?(1)0|) )* )",[extended,
+ trim]))),
+ <<"a:::bcd">> = iolist_to_binary(join(re:split("abcd","( (A | (?(1)0|) )* )",[extended,
+ {parts,
+ 2}]))),
+ <<"a:::b:::c:::d:::">> = iolist_to_binary(join(re:split("abcd","( (A | (?(1)0|) )* )",[extended]))),
+ <<"a:::b:::c:::d">> = iolist_to_binary(join(re:split("abcd","( ( (?(1)0|) )* )",[extended,
+ trim]))),
+ <<"a:::bcd">> = iolist_to_binary(join(re:split("abcd","( ( (?(1)0|) )* )",[extended,
+ {parts,
+ 2}]))),
+ <<"a:::b:::c:::d:::">> = iolist_to_binary(join(re:split("abcd","( ( (?(1)0|) )* )",[extended]))),
+ <<"a::b::c::d">> = iolist_to_binary(join(re:split("abcd","( (?(1)0|)* )",[extended,
+ trim]))),
+ <<"a::bcd">> = iolist_to_binary(join(re:split("abcd","( (?(1)0|)* )",[extended,
+ {parts,
2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\Eabc]",[]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[\\Eabc]",[trim]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[\\Eabc]",[{parts,
+ <<"a::b::c::d::">> = iolist_to_binary(join(re:split("abcd","( (?(1)0|)* )",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("a]","[[:abcd:xyz]]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a]","[[:abcd:xyz]]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a]","[[:abcd:xyz]]",[]))),
+ <<"">> = iolist_to_binary(join(re:split(":]","[[:abcd:xyz]]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split(":]","[[:abcd:xyz]]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split(":]","[[:abcd:xyz]]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","[abc[:x\\]pqr]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("a","[abc[:x\\]pqr]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("a","[abc[:x\\]pqr]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("[","[abc[:x\\]pqr]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("[","[abc[:x\\]pqr]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("[","[abc[:x\\]pqr]",[]))),
+ <<"">> = iolist_to_binary(join(re:split(":","[abc[:x\\]pqr]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split(":","[abc[:x\\]pqr]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split(":","[abc[:x\\]pqr]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("]","[abc[:x\\]pqr]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("]","[abc[:x\\]pqr]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("]","[abc[:x\\]pqr]",[]))),
+ <<"">> = iolist_to_binary(join(re:split("p","[abc[:x\\]pqr]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("p","[abc[:x\\]pqr]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("p","[abc[:x\\]pqr]",[]))),
+ <<"fooabcfoo">> = iolist_to_binary(join(re:split("fooabcfoo",".*[op][xyz]",[trim]))),
+ <<"fooabcfoo">> = iolist_to_binary(join(re:split("fooabcfoo",".*[op][xyz]",[{parts,
+ 2}]))),
+ <<"fooabcfoo">> = iolist_to_binary(join(re:split("fooabcfoo",".*[op][xyz]",[]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)",[trim]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)",[{parts,
+ 2}]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)",[]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)",[trim]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)",[{parts,
+ 2}]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)",[]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=^.*b)b|^)",[trim]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=^.*b)b|^)",[{parts,
+ 2}]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=^.*b)b|^)",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?(?=^.*b)b|^)",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?(?=^.*b)b|^)",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(?(?=^.*b)b|^)",[]))),
+ <<"a:d:c">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)*",[trim]))),
+ <<"a:dc">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)*",[{parts,
+ 2}]))),
+ <<"a:d:c:">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)*",[]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)*",[trim]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)*",[{parts,
+ 2}]))),
+ <<"a:c:">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)*",[]))),
+ ok.
+run37() ->
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)+",[trim]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)+",[{parts,
+ 2}]))),
+ <<"adc">> = iolist_to_binary(join(re:split("adc","(?(?=.*b)b|^)+",[]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)+",[trim]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)+",[{parts,
+ 2}]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b)b|^)+",[]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=b).*b|^d)",[trim]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=b).*b|^d)",[{parts,
+ 2}]))),
+ <<"a:c">> = iolist_to_binary(join(re:split("abc","(?(?=b).*b|^d)",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b).*b|^d)",[trim]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b).*b|^d)",[{parts,
+ 2}]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","(?(?=.*b).*b|^d)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("%ab%","^%((?(?=[a])[^%])|b)*%$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("%ab%","^%((?(?=[a])[^%])|b)*%$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("%ab%","^%((?(?=[a])[^%])|b)*%$",[]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XabX","(?i)a(?-i)b|c",[trim]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XabX","(?i)a(?-i)b|c",[{parts,
+ 2}]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XabX","(?i)a(?-i)b|c",[]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XAbX","(?i)a(?-i)b|c",[trim]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XAbX","(?i)a(?-i)b|c",[{parts,
+ 2}]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XAbX","(?i)a(?-i)b|c",[]))),
+ <<"C:C">> = iolist_to_binary(join(re:split("CcC","(?i)a(?-i)b|c",[trim]))),
+ <<"C:C">> = iolist_to_binary(join(re:split("CcC","(?i)a(?-i)b|c",[{parts,
+ 2}]))),
+ <<"C:C">> = iolist_to_binary(join(re:split("CcC","(?i)a(?-i)b|c",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?i)a(?-i)b|c",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?i)a(?-i)b|c",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?i)a(?-i)b|c",[]))),
+ <<"XABX">> = iolist_to_binary(join(re:split("XABX","(?i)a(?-i)b|c",[trim]))),
+ <<"XABX">> = iolist_to_binary(join(re:split("XABX","(?i)a(?-i)b|c",[{parts,
+ 2}]))),
+ <<"XABX">> = iolist_to_binary(join(re:split("XABX","(?i)a(?-i)b|c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("
+ ","[\\x00-\\xff\\s]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("
+ ","[\\x00-\\xff\\s]+",[{parts,2}]))),
+ <<":">> = iolist_to_binary(join(re:split("
+ ","[\\x00-\\xff\\s]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split("?","^\\c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("?","^\\c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("?","^\\c",[]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1",[caseless,
+ trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1",[caseless,
+ {parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1",[caseless]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1",[trim]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1",[{parts,
+ 2}]))),
+ <<"abc">> = iolist_to_binary(join(re:split("abc","(abc)\\1",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("12abc","[^a]*",[caseless,
+ trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split("12abc","[^a]*",[caseless,
+ {parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("12abc","[^a]*",[caseless]))),
+ <<":A">> = iolist_to_binary(join(re:split("12ABC","[^a]*",[caseless,
+ trim]))),
+ <<":ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]*",[caseless,
+ {parts,
+ 2}]))),
+ <<":A:">> = iolist_to_binary(join(re:split("12ABC","[^a]*",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("12abc","[^a]*+",[caseless,
+ trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split("12abc","[^a]*+",[caseless,
+ {parts,
2}]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[\\Eabc]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^[a-\\Ec]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","^[a-\\Ec]",[{parts,
+ <<":a:">> = iolist_to_binary(join(re:split("12abc","[^a]*+",[caseless]))),
+ <<":A">> = iolist_to_binary(join(re:split("12ABC","[^a]*+",[caseless,
+ trim]))),
+ <<":ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]*+",[caseless,
+ {parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","^[a-\\Ec]",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a-\\Ec]",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a-\\Ec]",[{parts,
+ <<":A:">> = iolist_to_binary(join(re:split("12ABC","[^a]*+",[caseless]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","[^a]*?X",[caseless,
+ trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","[^a]*?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","[^a]*?X",[caseless]))),
+ <<"12abc">> = iolist_to_binary(join(re:split("12abc","[^a]*?X",[caseless,
+ trim]))),
+ <<"12abc">> = iolist_to_binary(join(re:split("12abc","[^a]*?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12abc">> = iolist_to_binary(join(re:split("12abc","[^a]*?X",[caseless]))),
+ <<"12ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]*?X",[caseless,
+ trim]))),
+ <<"12ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]*?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]*?X",[caseless]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","[^a]+?X",[caseless,
+ trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","[^a]+?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","[^a]+?X",[caseless]))),
+ <<"12abc">> = iolist_to_binary(join(re:split("12abc","[^a]+?X",[caseless,
+ trim]))),
+ <<"12abc">> = iolist_to_binary(join(re:split("12abc","[^a]+?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12abc">> = iolist_to_binary(join(re:split("12abc","[^a]+?X",[caseless]))),
+ <<"12ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]+?X",[caseless,
+ trim]))),
+ <<"12ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]+?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12ABC">> = iolist_to_binary(join(re:split("12ABC","[^a]+?X",[caseless]))),
+ <<"12a:b">> = iolist_to_binary(join(re:split("12aXbcX","[^a]?X",[caseless,
+ trim]))),
+ <<"12a:bcX">> = iolist_to_binary(join(re:split("12aXbcX","[^a]?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12a:b:">> = iolist_to_binary(join(re:split("12aXbcX","[^a]?X",[caseless]))),
+ <<"12A:B">> = iolist_to_binary(join(re:split("12AXBCX","[^a]?X",[caseless,
+ trim]))),
+ <<"12A:BCX">> = iolist_to_binary(join(re:split("12AXBCX","[^a]?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12A:B:">> = iolist_to_binary(join(re:split("12AXBCX","[^a]?X",[caseless]))),
+ <<"B">> = iolist_to_binary(join(re:split("BCX","[^a]?X",[caseless,
+ trim]))),
+ <<"B:">> = iolist_to_binary(join(re:split("BCX","[^a]?X",[caseless,
+ {parts,
+ 2}]))),
+ <<"B:">> = iolist_to_binary(join(re:split("BCX","[^a]?X",[caseless]))),
+ <<"12a:b">> = iolist_to_binary(join(re:split("12aXbcX","[^a]??X",[caseless,
+ trim]))),
+ <<"12a:bcX">> = iolist_to_binary(join(re:split("12aXbcX","[^a]??X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12a:b:">> = iolist_to_binary(join(re:split("12aXbcX","[^a]??X",[caseless]))),
+ <<"12A:B">> = iolist_to_binary(join(re:split("12AXBCX","[^a]??X",[caseless,
+ trim]))),
+ <<"12A:BCX">> = iolist_to_binary(join(re:split("12AXBCX","[^a]??X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12A:B:">> = iolist_to_binary(join(re:split("12AXBCX","[^a]??X",[caseless]))),
+ <<"B">> = iolist_to_binary(join(re:split("BCX","[^a]??X",[caseless,
+ trim]))),
+ <<"B:">> = iolist_to_binary(join(re:split("BCX","[^a]??X",[caseless,
+ {parts,
+ 2}]))),
+ <<"B:">> = iolist_to_binary(join(re:split("BCX","[^a]??X",[caseless]))),
+ <<"12aXb">> = iolist_to_binary(join(re:split("12aXbcX","[^a]?+X",[caseless,
+ trim]))),
+ <<"12aXb:">> = iolist_to_binary(join(re:split("12aXbcX","[^a]?+X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12aXb:">> = iolist_to_binary(join(re:split("12aXbcX","[^a]?+X",[caseless]))),
+ <<"12AXB">> = iolist_to_binary(join(re:split("12AXBCX","[^a]?+X",[caseless,
+ trim]))),
+ <<"12AXB:">> = iolist_to_binary(join(re:split("12AXBCX","[^a]?+X",[caseless,
+ {parts,
+ 2}]))),
+ <<"12AXB:">> = iolist_to_binary(join(re:split("12AXBCX","[^a]?+X",[caseless]))),
+ <<"B">> = iolist_to_binary(join(re:split("BCX","[^a]?+X",[caseless,
+ trim]))),
+ <<"B:">> = iolist_to_binary(join(re:split("BCX","[^a]?+X",[caseless,
+ {parts,
+ 2}]))),
+ <<"B:">> = iolist_to_binary(join(re:split("BCX","[^a]?+X",[caseless]))),
+ <<"a">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}",[caseless,
+ trim]))),
+ <<"a:ef">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}",[caseless,
+ {parts,
+ 2}]))),
+ <<"a::">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}",[caseless]))),
+ <<"A">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}",[caseless,
+ trim]))),
+ <<"A:EF">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}",[caseless,
+ {parts,
+ 2}]))),
+ <<"A::">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}",[caseless]))),
+ <<"a::f">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}?",[caseless,
+ trim]))),
+ <<"a:def">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}?",[caseless,
+ {parts,
+ 2}]))),
+ <<"a::f">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}?",[caseless]))),
+ <<"A::F">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}?",[caseless,
+ trim]))),
+ <<"A:DEF">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}?",[caseless,
+ {parts,
+ 2}]))),
+ <<"A::F">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}?",[caseless]))),
+ <<"a">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}+",[caseless,
+ trim]))),
+ <<"a:ef">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}+",[caseless,
+ {parts,
+ 2}]))),
+ <<"a::">> = iolist_to_binary(join(re:split("abcdef","[^a]{2,3}+",[caseless]))),
+ <<"A">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}+",[caseless,
+ trim]))),
+ <<"A:EF">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}+",[caseless,
+ {parts,
+ 2}]))),
+ <<"A::">> = iolist_to_binary(join(re:split("ABCDEF","[^a]{2,3}+",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("Z","((a|)+)+Z",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("Z","((a|)+)+Z",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("Z","((a|)+)+Z",[]))),
+ ok.
+run38() ->
+ <<"::a">> = iolist_to_binary(join(re:split("ac","(a)b|(a)c",[trim]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(a)b|(a)c",[{parts,
+ 2}]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(a)b|(a)c",[]))),
+ <<"::a">> = iolist_to_binary(join(re:split("ac","(?>(a))b|(a)c",[trim]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?>(a))b|(a)c",[{parts,
+ 2}]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?>(a))b|(a)c",[]))),
+ <<"::a">> = iolist_to_binary(join(re:split("ac","(?=(a))ab|(a)c",[trim]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?=(a))ab|(a)c",[{parts,
+ 2}]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?=(a))ab|(a)c",[]))),
+ <<":ac::a">> = iolist_to_binary(join(re:split("ac","((?>(a))b|(a)c)",[trim]))),
+ <<":ac::a:">> = iolist_to_binary(join(re:split("ac","((?>(a))b|(a)c)",[{parts,
+ 2}]))),
+ <<":ac::a:">> = iolist_to_binary(join(re:split("ac","((?>(a))b|(a)c)",[]))),
+ <<":ac::a">> = iolist_to_binary(join(re:split("ac","((?>(a))b|(a)c)++",[trim]))),
+ <<":ac::a:">> = iolist_to_binary(join(re:split("ac","((?>(a))b|(a)c)++",[{parts,
+ 2}]))),
+ <<":ac::a:">> = iolist_to_binary(join(re:split("ac","((?>(a))b|(a)c)++",[]))),
+ <<"::a">> = iolist_to_binary(join(re:split("ac","(?:(?>(a))b|(a)c)++",[trim]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?:(?>(a))b|(a)c)++",[{parts,
+ 2}]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?:(?>(a))b|(a)c)++",[]))),
+ <<"::a:ac">> = iolist_to_binary(join(re:split("ac","(?=(?>(a))b|(a)c)(..)",[trim]))),
+ <<"::a:ac:">> = iolist_to_binary(join(re:split("ac","(?=(?>(a))b|(a)c)(..)",[{parts,
+ 2}]))),
+ <<"::a:ac:">> = iolist_to_binary(join(re:split("ac","(?=(?>(a))b|(a)c)(..)",[]))),
+ <<"::a">> = iolist_to_binary(join(re:split("ac","(?>(?>(a))b|(a)c)",[trim]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?>(?>(a))b|(a)c)",[{parts,
+ 2}]))),
+ <<"::a:">> = iolist_to_binary(join(re:split("ac","(?>(?>(a))b|(a)c)",[]))),
+ <<":aaaabaaabaabab:aaa:aabab">> = iolist_to_binary(join(re:split("aaaabaaabaabab","((?>(a+)b)+(aabab))",[trim]))),
+ <<":aaaabaaabaabab:aaa:aabab:">> = iolist_to_binary(join(re:split("aaaabaaabaabab","((?>(a+)b)+(aabab))",[{parts,
+ 2}]))),
+ <<":aaaabaaabaabab:aaa:aabab:">> = iolist_to_binary(join(re:split("aaaabaaabaabab","((?>(a+)b)+(aabab))",[]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","(?>a+|ab)+?c",[trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","(?>a+|ab)+?c",[{parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","(?>a+|ab)+?c",[]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","(?>a+|ab)+c",[trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","(?>a+|ab)+c",[{parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","(?>a+|ab)+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aabc","(?:a+|ab)+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","(?:a+|ab)+c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","(?:a+|ab)+c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("a","(?(?=(a))a)",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("a","(?(?=(a))a)",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("a","(?(?=(a))a)",[]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("ab","(?(?=(a))a)(b)",[trim]))),
+ <<":a:b:">> = iolist_to_binary(join(re:split("ab","(?(?=(a))a)(b)",[{parts,
+ 2}]))),
+ <<":a:b:">> = iolist_to_binary(join(re:split("ab","(?(?=(a))a)(b)",[]))),
+ <<"aaaabc">> = iolist_to_binary(join(re:split("aaaabc","^(?:a|ab)++c",[trim]))),
+ <<"aaaabc">> = iolist_to_binary(join(re:split("aaaabc","^(?:a|ab)++c",[{parts,
+ 2}]))),
+ <<"aaaabc">> = iolist_to_binary(join(re:split("aaaabc","^(?:a|ab)++c",[]))),
+ <<"aaaabc">> = iolist_to_binary(join(re:split("aaaabc","^(?>a|ab)++c",[trim]))),
+ <<"aaaabc">> = iolist_to_binary(join(re:split("aaaabc","^(?>a|ab)++c",[{parts,
+ 2}]))),
+ <<"aaaabc">> = iolist_to_binary(join(re:split("aaaabc","^(?>a|ab)++c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaabc","^(?:a|ab)+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabc","^(?:a|ab)+c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaabc","^(?:a|ab)+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("xyz","(?=abc){0}xyz",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("xyz","(?=abc){0}xyz",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("xyz","(?=abc){0}xyz",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?=abc){1}xyz",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?=abc){1}xyz",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?=abc){1}xyz",[]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","(?=abc){1}xyz",[trim]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","(?=abc){1}xyz",[{parts,
+ 2}]))),
+ <<"xyz">> = iolist_to_binary(join(re:split("xyz","(?=abc){1}xyz",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("ab","(?=(a))?.",[trim]))),
+ <<":a:b">> = iolist_to_binary(join(re:split("ab","(?=(a))?.",[{parts,
+ 2}]))),
+ <<":a:::">> = iolist_to_binary(join(re:split("ab","(?=(a))?.",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bc","(?=(a))?.",[trim]))),
+ <<"::c">> = iolist_to_binary(join(re:split("bc","(?=(a))?.",[{parts,
+ 2}]))),
+ <<"::::">> = iolist_to_binary(join(re:split("bc","(?=(a))?.",[]))),
+ ok.
+run39() ->
+ <<"">> = iolist_to_binary(join(re:split("ab","(?=(a))??.",[trim]))),
+ <<"::b">> = iolist_to_binary(join(re:split("ab","(?=(a))??.",[{parts,
+ 2}]))),
+ <<"::::">> = iolist_to_binary(join(re:split("ab","(?=(a))??.",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bc","(?=(a))??.",[trim]))),
+ <<"::c">> = iolist_to_binary(join(re:split("bc","(?=(a))??.",[{parts,
+ 2}]))),
+ <<"::::">> = iolist_to_binary(join(re:split("bc","(?=(a))??.",[]))),
+ <<"::ckgammon">> = iolist_to_binary(join(re:split("backgammon","^(?=(a)){0}b(?1)",[trim]))),
+ <<"::ckgammon">> = iolist_to_binary(join(re:split("backgammon","^(?=(a)){0}b(?1)",[{parts,
+ 2}]))),
+ <<"::ckgammon">> = iolist_to_binary(join(re:split("backgammon","^(?=(a)){0}b(?1)",[]))),
+ <<":b">> = iolist_to_binary(join(re:split("abd","^(?=(?1))?[az]([abc])d",[trim]))),
+ <<":b:">> = iolist_to_binary(join(re:split("abd","^(?=(?1))?[az]([abc])d",[{parts,
+ 2}]))),
+ <<":b:">> = iolist_to_binary(join(re:split("abd","^(?=(?1))?[az]([abc])d",[]))),
+ <<":c:xx">> = iolist_to_binary(join(re:split("zcdxx","^(?=(?1))?[az]([abc])d",[trim]))),
+ <<":c:xx">> = iolist_to_binary(join(re:split("zcdxx","^(?=(?1))?[az]([abc])d",[{parts,
+ 2}]))),
+ <<":c:xx">> = iolist_to_binary(join(re:split("zcdxx","^(?=(?1))?[az]([abc])d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaa","^(?!a){0}\\w+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaa","^(?!a){0}\\w+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaa","^(?!a){0}\\w+",[]))),
+ <<"abc:abc">> = iolist_to_binary(join(re:split("abcxyz","(?<=(abc))?xyz",[trim]))),
+ <<"abc:abc:">> = iolist_to_binary(join(re:split("abcxyz","(?<=(abc))?xyz",[{parts,
+ 2}]))),
+ <<"abc:abc:">> = iolist_to_binary(join(re:split("abcxyz","(?<=(abc))?xyz",[]))),
+ <<"pqr">> = iolist_to_binary(join(re:split("pqrxyz","(?<=(abc))?xyz",[trim]))),
+ <<"pqr::">> = iolist_to_binary(join(re:split("pqrxyz","(?<=(abc))?xyz",[{parts,
+ 2}]))),
+ <<"pqr::">> = iolist_to_binary(join(re:split("pqrxyz","(?<=(abc))?xyz",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ggg<<<aaa>>>","^[\\g<a>]+",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ggg<<<aaa>>>","^[\\g<a>]+",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ggg<<<aaa>>>","^[\\g<a>]+",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\g<a>]+",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\g<a>]+",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\g<a>]+",[]))),
+ <<"\\ga">> = iolist_to_binary(join(re:split("\\ga","^[\\g<a>]+",[trim]))),
+ <<"\\ga">> = iolist_to_binary(join(re:split("\\ga","^[\\g<a>]+",[{parts,
+ 2}]))),
+ <<"\\ga">> = iolist_to_binary(join(re:split("\\ga","^[\\g<a>]+",[]))),
+ <<":xyz">> = iolist_to_binary(join(re:split("gggagagaxyz","^[\\ga]+",[trim]))),
+ <<":xyz">> = iolist_to_binary(join(re:split("gggagagaxyz","^[\\ga]+",[{parts,
+ 2}]))),
+ <<":xyz">> = iolist_to_binary(join(re:split("gggagagaxyz","^[\\ga]+",[]))),
+ <<":Z">> = iolist_to_binary(join(re:split("aaaa444:::Z","^[:a[:digit:]]+",[trim]))),
+ <<":Z">> = iolist_to_binary(join(re:split("aaaa444:::Z","^[:a[:digit:]]+",[{parts,
+ 2}]))),
+ <<":Z">> = iolist_to_binary(join(re:split("aaaa444:::Z","^[:a[:digit:]]+",[]))),
+ <<":Z">> = iolist_to_binary(join(re:split("aaaa444:::bbbZ","^[:a[:digit:]:b]+",[trim]))),
+ <<":Z">> = iolist_to_binary(join(re:split("aaaa444:::bbbZ","^[:a[:digit:]:b]+",[{parts,
+ 2}]))),
+ <<":Z">> = iolist_to_binary(join(re:split("aaaa444:::bbbZ","^[:a[:digit:]:b]+",[]))),
+ <<"">> = iolist_to_binary(join(re:split(":xxx:","[:a]xxx[b:]",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split(":xxx:","[:a]xxx[b:]",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split(":xxx:","[:a]xxx[b:]",[]))),
+ <<"xaa:c">> = iolist_to_binary(join(re:split("xaabc","(?<=a{2})b",[caseless,
+ trim]))),
+ <<"xaa:c">> = iolist_to_binary(join(re:split("xaabc","(?<=a{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"xaa:c">> = iolist_to_binary(join(re:split("xaabc","(?<=a{2})b",[caseless]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=a{2})b",[caseless,
+ trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=a{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=a{2})b",[caseless]))),
+ <<"xabc">> = iolist_to_binary(join(re:split("xabc","(?<=a{2})b",[caseless,
+ trim]))),
+ <<"xabc">> = iolist_to_binary(join(re:split("xabc","(?<=a{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"xabc">> = iolist_to_binary(join(re:split("xabc","(?<=a{2})b",[caseless]))),
+ <<"xa:c">> = iolist_to_binary(join(re:split("xabc","(?<!a{2})b",[caseless,
+ trim]))),
+ <<"xa:c">> = iolist_to_binary(join(re:split("xabc","(?<!a{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"xa:c">> = iolist_to_binary(join(re:split("xabc","(?<!a{2})b",[caseless]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<!a{2})b",[caseless,
+ trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<!a{2})b",[caseless,
+ {parts,
2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a-\\Ec]",[]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[a-\\Ec]",[trim]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[a-\\Ec]",[{parts,
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<!a{2})b",[caseless]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<!a{2})b",[caseless,
+ trim]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<!a{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<!a{2})b",[caseless]))),
+ <<"xa ">> = iolist_to_binary(join(re:split("xa c","(?<=a\\h)c",[trim]))),
+ <<"xa :">> = iolist_to_binary(join(re:split("xa c","(?<=a\\h)c",[{parts,
+ 2}]))),
+ <<"xa :">> = iolist_to_binary(join(re:split("xa c","(?<=a\\h)c",[]))),
+ <<"axx:c">> = iolist_to_binary(join(re:split("axxbc","(?<=[^a]{2})b",[trim]))),
+ <<"axx:c">> = iolist_to_binary(join(re:split("axxbc","(?<=[^a]{2})b",[{parts,
+ 2}]))),
+ <<"axx:c">> = iolist_to_binary(join(re:split("axxbc","(?<=[^a]{2})b",[]))),
+ <<"aAA:c">> = iolist_to_binary(join(re:split("aAAbc","(?<=[^a]{2})b",[trim]))),
+ <<"aAA:c">> = iolist_to_binary(join(re:split("aAAbc","(?<=[^a]{2})b",[{parts,
+ 2}]))),
+ <<"aAA:c">> = iolist_to_binary(join(re:split("aAAbc","(?<=[^a]{2})b",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^a]{2})b",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^a]{2})b",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^a]{2})b",[]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<=[^a]{2})b",[trim]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<=[^a]{2})b",[{parts,
+ 2}]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<=[^a]{2})b",[]))),
+ <<"axx:c">> = iolist_to_binary(join(re:split("axxbc","(?<=[^a]{2})b",[caseless,
+ trim]))),
+ <<"axx:c">> = iolist_to_binary(join(re:split("axxbc","(?<=[^a]{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"axx:c">> = iolist_to_binary(join(re:split("axxbc","(?<=[^a]{2})b",[caseless]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^a]{2})b",[caseless,
+ trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^a]{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=[^a]{2})b",[caseless]))),
+ <<"aAAbc">> = iolist_to_binary(join(re:split("aAAbc","(?<=[^a]{2})b",[caseless,
+ trim]))),
+ <<"aAAbc">> = iolist_to_binary(join(re:split("aAAbc","(?<=[^a]{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"aAAbc">> = iolist_to_binary(join(re:split("aAAbc","(?<=[^a]{2})b",[caseless]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<=[^a]{2})b",[caseless,
+ trim]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<=[^a]{2})b",[caseless,
+ {parts,
+ 2}]))),
+ <<"xaabc">> = iolist_to_binary(join(re:split("xaabc","(?<=[^a]{2})b",[caseless]))),
+ <<"ab">> = iolist_to_binary(join(re:split("abc","(?<=a\\H)c",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abc","(?<=a\\H)c",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abc","(?<=a\\H)c",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("abc","(?<=a\\V)c",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abc","(?<=a\\V)c",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abc","(?<=a\\V)c",[]))),
+ <<"a
+">> = iolist_to_binary(join(re:split("a
+c","(?<=a\\v)c",[trim]))),
+ <<"a
+:">> = iolist_to_binary(join(re:split("a
+c","(?<=a\\v)c",[{parts,2}]))),
+ <<"a
+:">> = iolist_to_binary(join(re:split("a
+c","(?<=a\\v)c",[]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XcccddYX","(?(?=c)c|d)++Y",[trim]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XcccddYX","(?(?=c)c|d)++Y",[{parts,
+ 2}]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XcccddYX","(?(?=c)c|d)++Y",[]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XcccddYX","(?(?=c)c|d)*+Y",[trim]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XcccddYX","(?(?=c)c|d)*+Y",[{parts,
+ 2}]))),
+ <<"X:X">> = iolist_to_binary(join(re:split("XcccddYX","(?(?=c)c|d)*+Y",[]))),
+ ok.
+run40() ->
+ <<":aaa">> = iolist_to_binary(join(re:split("aaaaaaa","^(a{2,3}){2,}+a",[trim]))),
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a{2,3}){2,}+a",[{parts,
+ 2}]))),
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaaaaaa","^(a{2,3}){2,}+a",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3}){2,}+a",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3}){2,}+a",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3}){2,}+a",[]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3}){2,}+a",[trim]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3}){2,}+a",[{parts,
+ 2}]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3}){2,}+a",[]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a{2,3}){2,}+a",[trim]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a{2,3}){2,}+a",[{parts,
+ 2}]))),
+ <<"aaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaa","^(a{2,3}){2,}+a",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3})++a",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3})++a",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3})++a",[]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3})++a",[trim]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3})++a",[{parts,
+ 2}]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3})++a",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3})*+a",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3})*+a",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a{2,3})*+a",[]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3})*+a",[trim]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3})*+a",[{parts,
+ 2}]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(a{2,3})*+a",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abXde","ab\\Cde",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abXde","ab\\Cde",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abXde","ab\\Cde",[]))),
+ <<"abZde">> = iolist_to_binary(join(re:split("abZdeX","(?<=ab\\Cde)X",[trim]))),
+ <<"abZde:">> = iolist_to_binary(join(re:split("abZdeX","(?<=ab\\Cde)X",[{parts,
+ 2}]))),
+ <<"abZde:">> = iolist_to_binary(join(re:split("abZdeX","(?<=ab\\Cde)X",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aCb","a[\\CD]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aCb","a[\\CD]b",[{parts,
2}]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[a-\\Ec]",[]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[a-\\Ec]",[trim]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[a-\\Ec]",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aCb","a[\\CD]b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aDb","a[\\CD]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aDb","a[\\CD]b",[{parts,
2}]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[a-\\Ec]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^[a\\E\\E-\\Ec]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","^[a\\E\\E-\\Ec]",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("aDb","a[\\CD]b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aJb","a[\\C-X]b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aJb","a[\\C-X]b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aJb","a[\\C-X]b",[]))),
+ <<"X X">> = iolist_to_binary(join(re:split("X X","\\H\\h\\V\\v",[trim]))),
+ <<"X X">> = iolist_to_binary(join(re:split("X X","\\H\\h\\V\\v",[{parts,
+ 2}]))),
+ <<"X X">> = iolist_to_binary(join(re:split("X X","\\H\\h\\V\\v",[]))),
+ <<"">> = iolist_to_binary(join(re:split("X X ","\\H\\h\\V\\v",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("X X ","\\H\\h\\V\\v",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("X X ","\\H\\h\\V\\v",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\H\\h\\V\\v",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\H\\h\\V\\v",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\H\\h\\V\\v",[]))),
+ <<"  X">> = iolist_to_binary(join(re:split("  X","\\H\\h\\V\\v",[trim]))),
+ <<"  X">> = iolist_to_binary(join(re:split("  X","\\H\\h\\V\\v",[{parts,
+ 2}]))),
+ <<"  X">> = iolist_to_binary(join(re:split("  X","\\H\\h\\V\\v",[]))),
+ <<"">> = iolist_to_binary(join(re:split("  X
+ ","\\H*\\h+\\V?\\v{3,4}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("  X
+ ","\\H*\\h+\\V?\\v{3,4}",[{parts,2}]))),
+ <<":">> = iolist_to_binary(join(re:split("  X
+ ","\\H*\\h+\\V?\\v{3,4}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[{parts,2}]))),
+ <<":">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[{parts,2}]))),
+ <<":">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\H*\\h+\\V?\\v{3,4}",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\H*\\h+\\V?\\v{3,4}",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\H*\\h+\\V?\\v{3,4}",[]))),
+ <<"  
+ ">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[trim]))),
+ <<"  
+ ">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[{parts,2}]))),
+ <<"  
+ ">> = iolist_to_binary(join(re:split("  
+ ","\\H*\\h+\\V?\\v{3,4}",[]))),
+ <<"XY :E">> = iolist_to_binary(join(re:split("XY ABCDE","\\H{3,4}",[trim]))),
+ <<"XY :E">> = iolist_to_binary(join(re:split("XY ABCDE","\\H{3,4}",[{parts,
+ 2}]))),
+ <<"XY :E">> = iolist_to_binary(join(re:split("XY ABCDE","\\H{3,4}",[]))),
+ <<"XY : ST">> = iolist_to_binary(join(re:split("XY PQR ST","\\H{3,4}",[trim]))),
+ <<"XY : ST">> = iolist_to_binary(join(re:split("XY PQR ST","\\H{3,4}",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","^[a\\E\\E-\\Ec]",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a\\E\\E-\\Ec]",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a\\E\\E-\\Ec]",[{parts,
+ <<"XY : ST">> = iolist_to_binary(join(re:split("XY PQR ST","\\H{3,4}",[]))),
+ <<"XY A:QRS">> = iolist_to_binary(join(re:split("XY AB PQRS",".\\h{3,4}.",[trim]))),
+ <<"XY A:QRS">> = iolist_to_binary(join(re:split("XY AB PQRS",".\\h{3,4}.",[{parts,
+ 2}]))),
+ <<"XY A:QRS">> = iolist_to_binary(join(re:split("XY AB PQRS",".\\h{3,4}.",[]))),
+ <<">">> = iolist_to_binary(join(re:split(">XNNNYZ","\\h*X\\h?\\H+Y\\H?Z",[trim]))),
+ <<">:">> = iolist_to_binary(join(re:split(">XNNNYZ","\\h*X\\h?\\H+Y\\H?Z",[{parts,
+ 2}]))),
+ <<">:">> = iolist_to_binary(join(re:split(">XNNNYZ","\\h*X\\h?\\H+Y\\H?Z",[]))),
+ <<">">> = iolist_to_binary(join(re:split("> X NYQZ","\\h*X\\h?\\H+Y\\H?Z",[trim]))),
+ <<">:">> = iolist_to_binary(join(re:split("> X NYQZ","\\h*X\\h?\\H+Y\\H?Z",[{parts,
+ 2}]))),
+ <<">:">> = iolist_to_binary(join(re:split("> X NYQZ","\\h*X\\h?\\H+Y\\H?Z",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\h*X\\h?\\H+Y\\H?Z",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\h*X\\h?\\H+Y\\H?Z",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\h*X\\h?\\H+Y\\H?Z",[]))),
+ <<">XYZ">> = iolist_to_binary(join(re:split(">XYZ","\\h*X\\h?\\H+Y\\H?Z",[trim]))),
+ <<">XYZ">> = iolist_to_binary(join(re:split(">XYZ","\\h*X\\h?\\H+Y\\H?Z",[{parts,
+ 2}]))),
+ <<">XYZ">> = iolist_to_binary(join(re:split(">XYZ","\\h*X\\h?\\H+Y\\H?Z",[]))),
+ <<"> X NY Z">> = iolist_to_binary(join(re:split("> X NY Z","\\h*X\\h?\\H+Y\\H?Z",[trim]))),
+ <<"> X NY Z">> = iolist_to_binary(join(re:split("> X NY Z","\\h*X\\h?\\H+Y\\H?Z",[{parts,
+ 2}]))),
+ <<"> X NY Z">> = iolist_to_binary(join(re:split("> X NY Z","\\h*X\\h?\\H+Y\\H?Z",[]))),
+ <<">">> = iolist_to_binary(join(re:split(">XY
+Z
+A NN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c",[trim]))),
+ <<">:">> = iolist_to_binary(join(re:split(">XY
+Z
+A NN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c",[{parts,
+ 2}]))),
+ <<">:">> = iolist_to_binary(join(re:split(">XY
+Z
+A NN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c",[]))),
+ <<">">> = iolist_to_binary(join(re:split(">
+ X
+Y
+ ZZZ
+AAA NNN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c",[trim]))),
+ <<">:">> = iolist_to_binary(join(re:split(">
+ X
+Y
+ ZZZ
+AAA NNN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c",[{parts,
+ 2}]))),
+ <<">:">> = iolist_to_binary(join(re:split(">
+ X
+Y
+ ZZZ
+AAA NNN ","\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c",[]))),
+ <<"foo:foo">> = iolist_to_binary(join(re:split("foobar","(foo)\\Kbar",[trim]))),
+ <<"foo:foo:">> = iolist_to_binary(join(re:split("foobar","(foo)\\Kbar",[{parts,
+ 2}]))),
+ <<"foo:foo:">> = iolist_to_binary(join(re:split("foobar","(foo)\\Kbar",[]))),
+ <<"foo:foo:bar">> = iolist_to_binary(join(re:split("foobar","(foo)(\\Kbar|baz)",[trim]))),
+ <<"foo:foo:bar:">> = iolist_to_binary(join(re:split("foobar","(foo)(\\Kbar|baz)",[{parts,
+ 2}]))),
+ <<"foo:foo:bar:">> = iolist_to_binary(join(re:split("foobar","(foo)(\\Kbar|baz)",[]))),
+ <<":foo:baz">> = iolist_to_binary(join(re:split("foobaz","(foo)(\\Kbar|baz)",[trim]))),
+ <<":foo:baz:">> = iolist_to_binary(join(re:split("foobaz","(foo)(\\Kbar|baz)",[{parts,
+ 2}]))),
+ <<":foo:baz:">> = iolist_to_binary(join(re:split("foobaz","(foo)(\\Kbar|baz)",[]))),
+ <<"foo:foobar">> = iolist_to_binary(join(re:split("foobarbaz","(foo\\Kbar)baz",[trim]))),
+ <<"foo:foobar:">> = iolist_to_binary(join(re:split("foobarbaz","(foo\\Kbar)baz",[{parts,
+ 2}]))),
+ <<"foo:foobar:">> = iolist_to_binary(join(re:split("foobarbaz","(foo\\Kbar)baz",[]))),
+ <<":ab:b:XXXX">> = iolist_to_binary(join(re:split("ababababbbabZXXXX","^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z",[trim]))),
+ <<":ab:b:XXXX">> = iolist_to_binary(join(re:split("ababababbbabZXXXX","^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z",[{parts,
+ 2}]))),
+ <<":ab:b:XXXX">> = iolist_to_binary(join(re:split("ababababbbabZXXXX","^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z",[]))),
+ <<":tom">> = iolist_to_binary(join(re:split("tom-tom","(?<A>tom|bon)-\\g{A}",[trim]))),
+ <<":tom:">> = iolist_to_binary(join(re:split("tom-tom","(?<A>tom|bon)-\\g{A}",[{parts,
2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[a\\E\\E-\\Ec]",[]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[a\\E\\E-\\Ec]",[trim]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[a\\E\\E-\\Ec]",[{parts,
- 2}]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[a\\E\\E-\\Ec]",[]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[a\\E\\E-\\Ec]",[trim]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[a\\E\\E-\\Ec]",[{parts,
+ <<":tom:">> = iolist_to_binary(join(re:split("tom-tom","(?<A>tom|bon)-\\g{A}",[]))),
+ <<":bon">> = iolist_to_binary(join(re:split("bon-bon","(?<A>tom|bon)-\\g{A}",[trim]))),
+ <<":bon:">> = iolist_to_binary(join(re:split("bon-bon","(?<A>tom|bon)-\\g{A}",[{parts,
+ 2}]))),
+ <<":bon:">> = iolist_to_binary(join(re:split("bon-bon","(?<A>tom|bon)-\\g{A}",[]))),
+ <<"bacxxx">> = iolist_to_binary(join(re:split("bacxxx","(^(a|b\\g{-1}))",[trim]))),
+ <<"bacxxx">> = iolist_to_binary(join(re:split("bacxxx","(^(a|b\\g{-1}))",[{parts,
+ 2}]))),
+ <<"bacxxx">> = iolist_to_binary(join(re:split("bacxxx","(^(a|b\\g{-1}))",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","(?|(abc)|(xyz))\\1",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(?|(abc)|(xyz))\\1",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(?|(abc)|(xyz))\\1",[]))),
+ <<":xyz">> = iolist_to_binary(join(re:split("xyzxyz","(?|(abc)|(xyz))\\1",[trim]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("xyzxyz","(?|(abc)|(xyz))\\1",[{parts,
+ 2}]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("xyzxyz","(?|(abc)|(xyz))\\1",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?|(abc)|(xyz))\\1",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?|(abc)|(xyz))\\1",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?|(abc)|(xyz))\\1",[]))),
+ <<"abcxyz">> = iolist_to_binary(join(re:split("abcxyz","(?|(abc)|(xyz))\\1",[trim]))),
+ <<"abcxyz">> = iolist_to_binary(join(re:split("abcxyz","(?|(abc)|(xyz))\\1",[{parts,
+ 2}]))),
+ <<"abcxyz">> = iolist_to_binary(join(re:split("abcxyz","(?|(abc)|(xyz))\\1",[]))),
+ <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","(?|(abc)|(xyz))\\1",[trim]))),
+ <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","(?|(abc)|(xyz))\\1",[{parts,
+ 2}]))),
+ <<"xyzabc">> = iolist_to_binary(join(re:split("xyzabc","(?|(abc)|(xyz))\\1",[]))),
+ ok.
+run41() ->
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","(?|(abc)|(xyz))(?1)",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(?|(abc)|(xyz))(?1)",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","(?|(abc)|(xyz))(?1)",[]))),
+ <<":xyz">> = iolist_to_binary(join(re:split("xyzabc","(?|(abc)|(xyz))(?1)",[trim]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("xyzabc","(?|(abc)|(xyz))(?1)",[{parts,
+ 2}]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("xyzabc","(?|(abc)|(xyz))(?1)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?|(abc)|(xyz))(?1)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?|(abc)|(xyz))(?1)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?|(abc)|(xyz))(?1)",[]))),
+ <<"xyzxyz">> = iolist_to_binary(join(re:split("xyzxyz","(?|(abc)|(xyz))(?1)",[trim]))),
+ <<"xyzxyz">> = iolist_to_binary(join(re:split("xyzxyz","(?|(abc)|(xyz))(?1)",[{parts,
+ 2}]))),
+ <<"xyzxyz">> = iolist_to_binary(join(re:split("xyzxyz","(?|(abc)|(xyz))(?1)",[]))),
+ <<":a:b:c:d:Y">> = iolist_to_binary(join(re:split("XYabcdY","^X(?5)(a)(?|(b)|(q))(c)(d)(Y)",[trim]))),
+ <<":a:b:c:d:Y:">> = iolist_to_binary(join(re:split("XYabcdY","^X(?5)(a)(?|(b)|(q))(c)(d)(Y)",[{parts,
+ 2}]))),
+ <<":a:b:c:d:Y:">> = iolist_to_binary(join(re:split("XYabcdY","^X(?5)(a)(?|(b)|(q))(c)(d)(Y)",[]))),
+ <<":a:b:::c:d:Y">> = iolist_to_binary(join(re:split("XYabcdY","^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)",[trim]))),
+ <<":a:b:::c:d:Y:">> = iolist_to_binary(join(re:split("XYabcdY","^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)",[{parts,
+ 2}]))),
+ <<":a:b:::c:d:Y:">> = iolist_to_binary(join(re:split("XYabcdY","^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)",[]))),
+ <<":a:b:::c:d:Y">> = iolist_to_binary(join(re:split("XYabcdY","^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)",[trim]))),
+ <<":a:b:::c:d:Y:">> = iolist_to_binary(join(re:split("XYabcdY","^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)",[{parts,
+ 2}]))),
+ <<":a:b:::c:d:Y:">> = iolist_to_binary(join(re:split("XYabcdY","^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)",[]))),
+ <<":a:xyz">> = iolist_to_binary(join(re:split("a:aaxyz","(?'abc'\\w+):\\k<abc>{2}",[trim]))),
+ <<":a:xyz">> = iolist_to_binary(join(re:split("a:aaxyz","(?'abc'\\w+):\\k<abc>{2}",[{parts,
+ 2}]))),
+ <<":a:xyz">> = iolist_to_binary(join(re:split("a:aaxyz","(?'abc'\\w+):\\k<abc>{2}",[]))),
+ <<":ab:xyz">> = iolist_to_binary(join(re:split("ab:ababxyz","(?'abc'\\w+):\\k<abc>{2}",[trim]))),
+ <<":ab:xyz">> = iolist_to_binary(join(re:split("ab:ababxyz","(?'abc'\\w+):\\k<abc>{2}",[{parts,
+ 2}]))),
+ <<":ab:xyz">> = iolist_to_binary(join(re:split("ab:ababxyz","(?'abc'\\w+):\\k<abc>{2}",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?'abc'\\w+):\\k<abc>{2}",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?'abc'\\w+):\\k<abc>{2}",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?'abc'\\w+):\\k<abc>{2}",[]))),
+ <<"a:axyz">> = iolist_to_binary(join(re:split("a:axyz","(?'abc'\\w+):\\k<abc>{2}",[trim]))),
+ <<"a:axyz">> = iolist_to_binary(join(re:split("a:axyz","(?'abc'\\w+):\\k<abc>{2}",[{parts,
+ 2}]))),
+ <<"a:axyz">> = iolist_to_binary(join(re:split("a:axyz","(?'abc'\\w+):\\k<abc>{2}",[]))),
+ <<"ab:abxyz">> = iolist_to_binary(join(re:split("ab:abxyz","(?'abc'\\w+):\\k<abc>{2}",[trim]))),
+ <<"ab:abxyz">> = iolist_to_binary(join(re:split("ab:abxyz","(?'abc'\\w+):\\k<abc>{2}",[{parts,
+ 2}]))),
+ <<"ab:abxyz">> = iolist_to_binary(join(re:split("ab:abxyz","(?'abc'\\w+):\\k<abc>{2}",[]))),
+ <<":a:xyz">> = iolist_to_binary(join(re:split("a:aaxyz","(?'abc'\\w+):\\g{abc}{2}",[trim]))),
+ <<":a:xyz">> = iolist_to_binary(join(re:split("a:aaxyz","(?'abc'\\w+):\\g{abc}{2}",[{parts,
+ 2}]))),
+ <<":a:xyz">> = iolist_to_binary(join(re:split("a:aaxyz","(?'abc'\\w+):\\g{abc}{2}",[]))),
+ <<":ab:xyz">> = iolist_to_binary(join(re:split("ab:ababxyz","(?'abc'\\w+):\\g{abc}{2}",[trim]))),
+ <<":ab:xyz">> = iolist_to_binary(join(re:split("ab:ababxyz","(?'abc'\\w+):\\g{abc}{2}",[{parts,
+ 2}]))),
+ <<":ab:xyz">> = iolist_to_binary(join(re:split("ab:ababxyz","(?'abc'\\w+):\\g{abc}{2}",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?'abc'\\w+):\\g{abc}{2}",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?'abc'\\w+):\\g{abc}{2}",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?'abc'\\w+):\\g{abc}{2}",[]))),
+ <<"a:axyz">> = iolist_to_binary(join(re:split("a:axyz","(?'abc'\\w+):\\g{abc}{2}",[trim]))),
+ <<"a:axyz">> = iolist_to_binary(join(re:split("a:axyz","(?'abc'\\w+):\\g{abc}{2}",[{parts,
+ 2}]))),
+ <<"a:axyz">> = iolist_to_binary(join(re:split("a:axyz","(?'abc'\\w+):\\g{abc}{2}",[]))),
+ <<"ab:abxyz">> = iolist_to_binary(join(re:split("ab:abxyz","(?'abc'\\w+):\\g{abc}{2}",[trim]))),
+ <<"ab:abxyz">> = iolist_to_binary(join(re:split("ab:abxyz","(?'abc'\\w+):\\g{abc}{2}",[{parts,
+ 2}]))),
+ <<"ab:abxyz">> = iolist_to_binary(join(re:split("ab:abxyz","(?'abc'\\w+):\\g{abc}{2}",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("abd","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)",[extended,
+ trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("abd","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)",[extended,
+ {parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("abd","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("ce","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)",[extended,
+ trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("ce","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)",[extended,
+ {parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("ce","^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)",[extended]))),
+ <<":aX">> = iolist_to_binary(join(re:split("aXaXZ","^(a.)\\g-1Z",[trim]))),
+ <<":aX:">> = iolist_to_binary(join(re:split("aXaXZ","^(a.)\\g-1Z",[{parts,
+ 2}]))),
+ <<":aX:">> = iolist_to_binary(join(re:split("aXaXZ","^(a.)\\g-1Z",[]))),
+ <<":aX">> = iolist_to_binary(join(re:split("aXaXZ","^(a.)\\g{-1}Z",[trim]))),
+ <<":aX:">> = iolist_to_binary(join(re:split("aXaXZ","^(a.)\\g{-1}Z",[{parts,
2}]))),
-?line <<"E">> = iolist_to_binary(join(re:split("E","^[a\\E\\E-\\Ec]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("b","^[\\E\\Qa\\E-\\Qz\\E]+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","^[\\E\\Qa\\E-\\Qz\\E]+",[{parts,
+ <<":aX:">> = iolist_to_binary(join(re:split("aXaXZ","^(a.)\\g{-1}Z",[]))),
+ <<":::cd">> = iolist_to_binary(join(re:split("abcd","^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) ",[extended,
+ trim]))),
+ <<":::cd">> = iolist_to_binary(join(re:split("abcd","^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) ",[extended,
+ {parts,
+ 2}]))),
+ <<":::cd">> = iolist_to_binary(join(re:split("abcd","^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) ",[extended]))),
+ <<":metcalfe:33">> = iolist_to_binary(join(re:split("metcalfe 33","(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\\d+)
+ )",[extended,trim]))),
+ <<":metcalfe:33:::">> = iolist_to_binary(join(re:split("metcalfe 33","(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\\d+)
+ )",[extended,{parts,2}]))),
+ <<":metcalfe:33:::">> = iolist_to_binary(join(re:split("metcalfe 33","(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\\d+)
+ )",[extended]))),
+ <<"::.4">> = iolist_to_binary(join(re:split("1.2.3.4","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[trim]))),
+ <<"::.4:">> = iolist_to_binary(join(re:split("1.2.3.4","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[{parts,
+ 2}]))),
+ <<"::.4:">> = iolist_to_binary(join(re:split("1.2.3.4","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[]))),
+ <<"::.206">> = iolist_to_binary(join(re:split("131.111.10.206","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[trim]))),
+ <<"::.206:">> = iolist_to_binary(join(re:split("131.111.10.206","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[{parts,
+ 2}]))),
+ <<"::.206:">> = iolist_to_binary(join(re:split("131.111.10.206","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[]))),
+ <<"::.0">> = iolist_to_binary(join(re:split("10.0.0.0","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[trim]))),
+ <<"::.0:">> = iolist_to_binary(join(re:split("10.0.0.0","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[{parts,
+ 2}]))),
+ <<"::.0:">> = iolist_to_binary(join(re:split("10.0.0.0","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[]))),
+ <<"10.6">> = iolist_to_binary(join(re:split("10.6","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[trim]))),
+ <<"10.6">> = iolist_to_binary(join(re:split("10.6","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[{parts,
+ 2}]))),
+ <<"10.6">> = iolist_to_binary(join(re:split("10.6","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[]))),
+ <<"455.3.4.5">> = iolist_to_binary(join(re:split("455.3.4.5","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[trim]))),
+ <<"455.3.4.5">> = iolist_to_binary(join(re:split("455.3.4.5","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[{parts,
+ 2}]))),
+ <<"455.3.4.5">> = iolist_to_binary(join(re:split("455.3.4.5","(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}",[]))),
+ <<":.4">> = iolist_to_binary(join(re:split("1.2.3.4","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[trim]))),
+ <<":.4::">> = iolist_to_binary(join(re:split("1.2.3.4","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[{parts,
+ 2}]))),
+ <<":.4::">> = iolist_to_binary(join(re:split("1.2.3.4","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[]))),
+ <<":.206">> = iolist_to_binary(join(re:split("131.111.10.206","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[trim]))),
+ <<":.206::">> = iolist_to_binary(join(re:split("131.111.10.206","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[{parts,
+ 2}]))),
+ <<":.206::">> = iolist_to_binary(join(re:split("131.111.10.206","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[]))),
+ <<":.0">> = iolist_to_binary(join(re:split("10.0.0.0","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[trim]))),
+ <<":.0::">> = iolist_to_binary(join(re:split("10.0.0.0","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[{parts,
+ 2}]))),
+ <<":.0::">> = iolist_to_binary(join(re:split("10.0.0.0","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[]))),
+ <<"10.6">> = iolist_to_binary(join(re:split("10.6","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[trim]))),
+ <<"10.6">> = iolist_to_binary(join(re:split("10.6","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[{parts,
+ 2}]))),
+ <<"10.6">> = iolist_to_binary(join(re:split("10.6","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[]))),
+ <<"455.3.4.5">> = iolist_to_binary(join(re:split("455.3.4.5","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[trim]))),
+ <<"455.3.4.5">> = iolist_to_binary(join(re:split("455.3.4.5","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[{parts,
+ 2}]))),
+ <<"455.3.4.5">> = iolist_to_binary(join(re:split("455.3.4.5","\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))",[]))),
+ <<":party">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^(\\w++|\\s++)*$",[trim]))),
+ <<":party:">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^(\\w++|\\s++)*$",[{parts,
+ 2}]))),
+ <<":party:">> = iolist_to_binary(join(re:split("now is the time for all good men to come to the aid of the party","^(\\w++|\\s++)*$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\w++|\\s++)*$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\w++|\\s++)*$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\w++|\\s++)*$",[]))),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^(\\w++|\\s++)*$",[trim]))),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^(\\w++|\\s++)*$",[{parts,
+ 2}]))),
+ <<"this is not a line with only words and spaces!">> = iolist_to_binary(join(re:split("this is not a line with only words and spaces!","^(\\w++|\\s++)*$",[]))),
+ <<":12345:a">> = iolist_to_binary(join(re:split("12345a","(\\d++)(\\w)",[trim]))),
+ <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","(\\d++)(\\w)",[{parts,
+ 2}]))),
+ <<":12345:a:">> = iolist_to_binary(join(re:split("12345a","(\\d++)(\\w)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\d++)(\\w)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\d++)(\\w)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","(\\d++)(\\w)",[]))),
+ <<"12345+">> = iolist_to_binary(join(re:split("12345+","(\\d++)(\\w)",[trim]))),
+ <<"12345+">> = iolist_to_binary(join(re:split("12345+","(\\d++)(\\w)",[{parts,
+ 2}]))),
+ <<"12345+">> = iolist_to_binary(join(re:split("12345+","(\\d++)(\\w)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaab","a++b",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaab","a++b",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaab","a++b",[]))),
+ <<":aaab">> = iolist_to_binary(join(re:split("aaab","(a++b)",[trim]))),
+ <<":aaab:">> = iolist_to_binary(join(re:split("aaab","(a++b)",[{parts,
+ 2}]))),
+ <<":aaab:">> = iolist_to_binary(join(re:split("aaab","(a++b)",[]))),
+ <<":aaa">> = iolist_to_binary(join(re:split("aaab","(a++)b",[trim]))),
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(a++)b",[{parts,
+ 2}]))),
+ <<":aaa:">> = iolist_to_binary(join(re:split("aaab","(a++)b",[]))),
+ <<"((:x">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","([^()]++|\\([^()]*\\))+",[trim]))),
+ <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","([^()]++|\\([^()]*\\))+",[{parts,
+ 2}]))),
+ <<"((:x:">> = iolist_to_binary(join(re:split("((abc(ade)ufh()()x","([^()]++|\\([^()]*\\))+",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("(abc)","\\(([^()]++|\\([^()]+\\))+\\)",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("(abc)","\\(([^()]++|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("(abc)","\\(([^()]++|\\([^()]+\\))+\\)",[]))),
+ <<":xyz">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(([^()]++|\\([^()]+\\))+\\)",[trim]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(([^()]++|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<":xyz:">> = iolist_to_binary(join(re:split("(abc(def)xyz)","\\(([^()]++|\\([^()]+\\))+\\)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(([^()]++|\\([^()]+\\))+\\)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(([^()]++|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","\\(([^()]++|\\([^()]+\\))+\\)",[]))),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(([^()]++|\\([^()]+\\))+\\)",[trim]))),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(([^()]++|\\([^()]+\\))+\\)",[{parts,
+ 2}]))),
+ <<"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","\\(([^()]++|\\([^()]+\\))+\\)",[]))),
+ ok.
+run42() ->
+ <<":c">> = iolist_to_binary(join(re:split("abc","^([^()]|\\((?1)*\\))*$",[trim]))),
+ <<":c:">> = iolist_to_binary(join(re:split("abc","^([^()]|\\((?1)*\\))*$",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("b","^[\\E\\Qa\\E-\\Qz\\E]+",[]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+",[trim]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+",[{parts,
+ <<":c:">> = iolist_to_binary(join(re:split("abc","^([^()]|\\((?1)*\\))*$",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("a(b)c","^([^()]|\\((?1)*\\))*$",[trim]))),
+ <<":c:">> = iolist_to_binary(join(re:split("a(b)c","^([^()]|\\((?1)*\\))*$",[{parts,
+ 2}]))),
+ <<":c:">> = iolist_to_binary(join(re:split("a(b)c","^([^()]|\\((?1)*\\))*$",[]))),
+ <<":d">> = iolist_to_binary(join(re:split("a(b(c))d","^([^()]|\\((?1)*\\))*$",[trim]))),
+ <<":d:">> = iolist_to_binary(join(re:split("a(b(c))d","^([^()]|\\((?1)*\\))*$",[{parts,
+ 2}]))),
+ <<":d:">> = iolist_to_binary(join(re:split("a(b(c))d","^([^()]|\\((?1)*\\))*$",[]))),
+ <<"*** Failers)">> = iolist_to_binary(join(re:split("*** Failers)","^([^()]|\\((?1)*\\))*$",[trim]))),
+ <<"*** Failers)">> = iolist_to_binary(join(re:split("*** Failers)","^([^()]|\\((?1)*\\))*$",[{parts,
2}]))),
-?line <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^[\\E\\Qa\\E-\\Qz\\E]+",[]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[\\E\\Qa\\E-\\Qz\\E]+",[trim]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[\\E\\Qa\\E-\\Qz\\E]+",[{parts,
- 2}]))),
-?line <<"-">> = iolist_to_binary(join(re:split("-","^[\\E\\Qa\\E-\\Qz\\E]+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","^[a\\Q]bc\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^[a\\Q]bc\\E]",[{parts,
+ <<"*** Failers)">> = iolist_to_binary(join(re:split("*** Failers)","^([^()]|\\((?1)*\\))*$",[]))),
+ <<"a(b(c)d">> = iolist_to_binary(join(re:split("a(b(c)d","^([^()]|\\((?1)*\\))*$",[trim]))),
+ <<"a(b(c)d">> = iolist_to_binary(join(re:split("a(b(c)d","^([^()]|\\((?1)*\\))*$",[{parts,
+ 2}]))),
+ <<"a(b(c)d">> = iolist_to_binary(join(re:split("a(b(c)d","^([^()]|\\((?1)*\\))*$",[]))),
+ <<":3">> = iolist_to_binary(join(re:split(">abc>123<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[trim]))),
+ <<":3:">> = iolist_to_binary(join(re:split(">abc>123<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[{parts,
+ 2}]))),
+ <<":3:">> = iolist_to_binary(join(re:split(">abc>123<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[]))),
+ <<":3">> = iolist_to_binary(join(re:split(">abc>1(2)3<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[trim]))),
+ <<":3:">> = iolist_to_binary(join(re:split(">abc>1(2)3<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[{parts,
+ 2}]))),
+ <<":3:">> = iolist_to_binary(join(re:split(">abc>1(2)3<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[]))),
+ <<":(1(2)3)">> = iolist_to_binary(join(re:split(">abc>(1(2)3)<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[trim]))),
+ <<":(1(2)3):">> = iolist_to_binary(join(re:split(">abc>(1(2)3)<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[{parts,
+ 2}]))),
+ <<":(1(2)3):">> = iolist_to_binary(join(re:split(">abc>(1(2)3)<xyz<","^>abc>([^()]|\\((?1)*\\))*<xyz<$",[]))),
+ <<":1221:1">> = iolist_to_binary(join(re:split("1221","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ trim]))),
+ <<":1221:1:::">> = iolist_to_binary(join(re:split("1221","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ {parts,
+ 2}]))),
+ <<":1221:1:::">> = iolist_to_binary(join(re:split("1221","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless]))),
+ <<":::Satanoscillatemymetallicsonatas:S">> = iolist_to_binary(join(re:split("Satanoscillatemymetallicsonatas","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ trim]))),
+ <<":::Satanoscillatemymetallicsonatas:S:">> = iolist_to_binary(join(re:split("Satanoscillatemymetallicsonatas","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ {parts,
+ 2}]))),
+ <<":::Satanoscillatemymetallicsonatas:S:">> = iolist_to_binary(join(re:split("Satanoscillatemymetallicsonatas","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless]))),
+ <<":::AmanaplanacanalPanama:A">> = iolist_to_binary(join(re:split("AmanaplanacanalPanama","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ trim]))),
+ <<":::AmanaplanacanalPanama:A:">> = iolist_to_binary(join(re:split("AmanaplanacanalPanama","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ {parts,
+ 2}]))),
+ <<":::AmanaplanacanalPanama:A:">> = iolist_to_binary(join(re:split("AmanaplanacanalPanama","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless]))),
+ <<":::AblewasIereIsawElba:A">> = iolist_to_binary(join(re:split("AblewasIereIsawElba","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ trim]))),
+ <<":::AblewasIereIsawElba:A:">> = iolist_to_binary(join(re:split("AblewasIereIsawElba","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ {parts,
+ 2}]))),
+ <<":::AblewasIereIsawElba:A:">> = iolist_to_binary(join(re:split("AblewasIereIsawElba","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless]))),
+ <<"Thequickbrownfox">> = iolist_to_binary(join(re:split("Thequickbrownfox","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ trim]))),
+ <<"Thequickbrownfox">> = iolist_to_binary(join(re:split("Thequickbrownfox","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless,
+ {parts,
+ 2}]))),
+ <<"Thequickbrownfox">> = iolist_to_binary(join(re:split("Thequickbrownfox","^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$",[caseless]))),
+ <<":12">> = iolist_to_binary(join(re:split("12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[trim]))),
+ <<":12::">> = iolist_to_binary(join(re:split("12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[{parts,
+ 2}]))),
+ <<":12::">> = iolist_to_binary(join(re:split("12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[]))),
+ <<":(((2+2)*-3)-7):-">> = iolist_to_binary(join(re:split("(((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[trim]))),
+ <<":(((2+2)*-3)-7):-:">> = iolist_to_binary(join(re:split("(((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[{parts,
+ 2}]))),
+ <<":(((2+2)*-3)-7):-:">> = iolist_to_binary(join(re:split("(((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[]))),
+ <<":-12">> = iolist_to_binary(join(re:split("-12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[trim]))),
+ <<":-12::">> = iolist_to_binary(join(re:split("-12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[{parts,
+ 2}]))),
+ <<":-12::">> = iolist_to_binary(join(re:split("-12","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[]))),
+ <<"((2+2)*-3)-7)">> = iolist_to_binary(join(re:split("((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[trim]))),
+ <<"((2+2)*-3)-7)">> = iolist_to_binary(join(re:split("((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[{parts,
+ 2}]))),
+ <<"((2+2)*-3)-7)">> = iolist_to_binary(join(re:split("((2+2)*-3)-7)","^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$",[]))),
+ <<":xyz:y">> = iolist_to_binary(join(re:split("xyz","^(x(y|(?1){2})z)",[trim]))),
+ <<":xyz:y:">> = iolist_to_binary(join(re:split("xyz","^(x(y|(?1){2})z)",[{parts,
+ 2}]))),
+ <<":xyz:y:">> = iolist_to_binary(join(re:split("xyz","^(x(y|(?1){2})z)",[]))),
+ <<":xxyzxyzz:xyzxyz">> = iolist_to_binary(join(re:split("xxyzxyzz","^(x(y|(?1){2})z)",[trim]))),
+ <<":xxyzxyzz:xyzxyz:">> = iolist_to_binary(join(re:split("xxyzxyzz","^(x(y|(?1){2})z)",[{parts,
+ 2}]))),
+ <<":xxyzxyzz:xyzxyz:">> = iolist_to_binary(join(re:split("xxyzxyzz","^(x(y|(?1){2})z)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(x(y|(?1){2})z)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(x(y|(?1){2})z)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(x(y|(?1){2})z)",[]))),
+ <<"xxyzz">> = iolist_to_binary(join(re:split("xxyzz","^(x(y|(?1){2})z)",[trim]))),
+ <<"xxyzz">> = iolist_to_binary(join(re:split("xxyzz","^(x(y|(?1){2})z)",[{parts,
+ 2}]))),
+ <<"xxyzz">> = iolist_to_binary(join(re:split("xxyzz","^(x(y|(?1){2})z)",[]))),
+ <<"xxyzxyzxyzz">> = iolist_to_binary(join(re:split("xxyzxyzxyzz","^(x(y|(?1){2})z)",[trim]))),
+ <<"xxyzxyzxyzz">> = iolist_to_binary(join(re:split("xxyzxyzxyzz","^(x(y|(?1){2})z)",[{parts,
+ 2}]))),
+ <<"xxyzxyzxyzz">> = iolist_to_binary(join(re:split("xxyzxyzxyzz","^(x(y|(?1){2})z)",[]))),
+ <<":<>:<>">> = iolist_to_binary(join(re:split("<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<":<>:<>:">> = iolist_to_binary(join(re:split("<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<":<>:<>:">> = iolist_to_binary(join(re:split("<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<":<abcd>:<abcd>">> = iolist_to_binary(join(re:split("<abcd>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<":<abcd>:<abcd>:">> = iolist_to_binary(join(re:split("<abcd>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<":<abcd>:<abcd>:">> = iolist_to_binary(join(re:split("<abcd>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<":<abc <123> hij>:<abc <123> hij>">> = iolist_to_binary(join(re:split("<abc <123> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<":<abc <123> hij>:<abc <123> hij>:">> = iolist_to_binary(join(re:split("<abc <123> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<":<abc <123> hij>:<abc <123> hij>:">> = iolist_to_binary(join(re:split("<abc <123> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<"<abc :<def>:<def>: hij>">> = iolist_to_binary(join(re:split("<abc <def> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<"<abc :<def>:<def>: hij>">> = iolist_to_binary(join(re:split("<abc <def> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<"<abc :<def>:<def>: hij>">> = iolist_to_binary(join(re:split("<abc <def> hij>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<":<abc<>def>:<abc<>def>">> = iolist_to_binary(join(re:split("<abc<>def>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<":<abc<>def>:<abc<>def>:">> = iolist_to_binary(join(re:split("<abc<>def>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<":<abc<>def>:<abc<>def>:">> = iolist_to_binary(join(re:split("<abc<>def>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<"<abc:<>:<>">> = iolist_to_binary(join(re:split("<abc<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<"<abc:<>:<>:">> = iolist_to_binary(join(re:split("<abc<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<"<abc:<>:<>:">> = iolist_to_binary(join(re:split("<abc<>","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<"<abc">> = iolist_to_binary(join(re:split("<abc","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ trim]))),
+ <<"<abc">> = iolist_to_binary(join(re:split("<abc","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended,
+ {parts,
+ 2}]))),
+ <<"<abc">> = iolist_to_binary(join(re:split("<abc","((< (?: (?(R) \\d++ | [^<>]*+) | (?2)) * >))",[extended]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^a+(*FAIL)",[trim]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^a+(*FAIL)",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^[a\\Q]bc\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("]","^[a\\Q]bc\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("]","^[a\\Q]bc\\E]",[{parts,
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^a+(*FAIL)",[]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?c+(*FAIL)",[trim]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?c+(*FAIL)",[{parts,
+ 2}]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?c+(*FAIL)",[]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*PRUNE)c+(*FAIL)",[trim]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*PRUNE)c+(*FAIL)",[{parts,
+ 2}]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*PRUNE)c+(*FAIL)",[]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*COMMIT)c+(*FAIL)",[trim]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*COMMIT)c+(*FAIL)",[{parts,
+ 2}]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*COMMIT)c+(*FAIL)",[]))),
+ <<"aaabcccaaabccc">> = iolist_to_binary(join(re:split("aaabcccaaabccc","a+b?(*SKIP)c+(*FAIL)",[trim]))),
+ <<"aaabcccaaabccc">> = iolist_to_binary(join(re:split("aaabcccaaabccc","a+b?(*SKIP)c+(*FAIL)",[{parts,
+ 2}]))),
+ <<"aaabcccaaabccc">> = iolist_to_binary(join(re:split("aaabcccaaabccc","a+b?(*SKIP)c+(*FAIL)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaxxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaxxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaxxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":++++++">> = iolist_to_binary(join(re:split("aaa++++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":++++++">> = iolist_to_binary(join(re:split("aaa++++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":++++++">> = iolist_to_binary(join(re:split("aaa++++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bbbxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("bbbxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("bbbxxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":+++++">> = iolist_to_binary(join(re:split("bbb+++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":+++++">> = iolist_to_binary(join(re:split("bbb+++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":+++++">> = iolist_to_binary(join(re:split("bbb+++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<"">> = iolist_to_binary(join(re:split("cccxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("cccxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("cccxxxx","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":++++">> = iolist_to_binary(join(re:split("ccc++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":++++">> = iolist_to_binary(join(re:split("ccc++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":++++">> = iolist_to_binary(join(re:split("ccc++++","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":ddddd">> = iolist_to_binary(join(re:split("dddddddd","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":ddddd">> = iolist_to_binary(join(re:split("dddddddd","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":ddddd">> = iolist_to_binary(join(re:split("dddddddd","^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":aaaxxxxxx">> = iolist_to_binary(join(re:split("aaaxxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":aaaxxxxxx:">> = iolist_to_binary(join(re:split("aaaxxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":aaaxxxxxx:">> = iolist_to_binary(join(re:split("aaaxxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":aaa:++++++">> = iolist_to_binary(join(re:split("aaa++++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":aaa:++++++">> = iolist_to_binary(join(re:split("aaa++++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":aaa:++++++">> = iolist_to_binary(join(re:split("aaa++++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":bbbxxxxx">> = iolist_to_binary(join(re:split("bbbxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":bbbxxxxx:">> = iolist_to_binary(join(re:split("bbbxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":bbbxxxxx:">> = iolist_to_binary(join(re:split("bbbxxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":bbb:+++++">> = iolist_to_binary(join(re:split("bbb+++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":bbb:+++++">> = iolist_to_binary(join(re:split("bbb+++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":bbb:+++++">> = iolist_to_binary(join(re:split("bbb+++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":cccxxxx">> = iolist_to_binary(join(re:split("cccxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":cccxxxx:">> = iolist_to_binary(join(re:split("cccxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":cccxxxx:">> = iolist_to_binary(join(re:split("cccxxxx","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":ccc:++++">> = iolist_to_binary(join(re:split("ccc++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":ccc:++++">> = iolist_to_binary(join(re:split("ccc++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":ccc:++++">> = iolist_to_binary(join(re:split("ccc++++","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<":ddd:ddddd">> = iolist_to_binary(join(re:split("dddddddd","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[trim]))),
+ <<":ddd:ddddd">> = iolist_to_binary(join(re:split("dddddddd","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[{parts,
+ 2}]))),
+ <<":ddd:ddddd">> = iolist_to_binary(join(re:split("dddddddd","^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})",[]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*THEN)c+(*FAIL)",[trim]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*THEN)c+(*FAIL)",[{parts,
+ 2}]))),
+ <<"aaabccc">> = iolist_to_binary(join(re:split("aaabccc","a+b?(*THEN)c+(*FAIL)",[]))),
+ <<":AB:B">> = iolist_to_binary(join(re:split("AB","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ trim]))),
+ <<":AB:B::">> = iolist_to_binary(join(re:split("AB","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ {parts,
+ 2}]))),
+ <<":AB:B::">> = iolist_to_binary(join(re:split("AB","(A (A|B(*ACCEPT)|C) D)(E)",[extended]))),
+ <<":AB:B::X">> = iolist_to_binary(join(re:split("ABX","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ trim]))),
+ <<":AB:B::X">> = iolist_to_binary(join(re:split("ABX","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ {parts,
+ 2}]))),
+ <<":AB:B::X">> = iolist_to_binary(join(re:split("ABX","(A (A|B(*ACCEPT)|C) D)(E)",[extended]))),
+ <<":AAD:A:E">> = iolist_to_binary(join(re:split("AADE","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ trim]))),
+ <<":AAD:A:E:">> = iolist_to_binary(join(re:split("AADE","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ {parts,
+ 2}]))),
+ <<":AAD:A:E:">> = iolist_to_binary(join(re:split("AADE","(A (A|B(*ACCEPT)|C) D)(E)",[extended]))),
+ <<":ACD:C:E">> = iolist_to_binary(join(re:split("ACDE","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ trim]))),
+ <<":ACD:C:E:">> = iolist_to_binary(join(re:split("ACDE","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ {parts,
+ 2}]))),
+ <<":ACD:C:E:">> = iolist_to_binary(join(re:split("ACDE","(A (A|B(*ACCEPT)|C) D)(E)",[extended]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ {parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(A (A|B(*ACCEPT)|C) D)(E)",[extended]))),
+ <<"AD">> = iolist_to_binary(join(re:split("AD","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ trim]))),
+ <<"AD">> = iolist_to_binary(join(re:split("AD","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ {parts,
+ 2}]))),
+ <<"AD">> = iolist_to_binary(join(re:split("AD","(A (A|B(*ACCEPT)|C) D)(E)",[extended]))),
+ <<":1221:1">> = iolist_to_binary(join(re:split("1221","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ trim]))),
+ <<":1221:1:::">> = iolist_to_binary(join(re:split("1221","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ {parts,
+ 2}]))),
+ <<":1221:1:::">> = iolist_to_binary(join(re:split("1221","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless]))),
+ <<":::Satan, oscillate my metallic sonatas:S">> = iolist_to_binary(join(re:split("Satan, oscillate my metallic sonatas!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ trim]))),
+ <<":::Satan, oscillate my metallic sonatas:S:">> = iolist_to_binary(join(re:split("Satan, oscillate my metallic sonatas!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ {parts,
+ 2}]))),
+ <<":::Satan, oscillate my metallic sonatas:S:">> = iolist_to_binary(join(re:split("Satan, oscillate my metallic sonatas!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless]))),
+ <<":::A man, a plan, a canal: Panama:A">> = iolist_to_binary(join(re:split("A man, a plan, a canal: Panama!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ trim]))),
+ <<":::A man, a plan, a canal: Panama:A:">> = iolist_to_binary(join(re:split("A man, a plan, a canal: Panama!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ {parts,
+ 2}]))),
+ <<":::A man, a plan, a canal: Panama:A:">> = iolist_to_binary(join(re:split("A man, a plan, a canal: Panama!","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless]))),
+ <<":::Able was I ere I saw Elba:A">> = iolist_to_binary(join(re:split("Able was I ere I saw Elba.","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ trim]))),
+ <<":::Able was I ere I saw Elba:A:">> = iolist_to_binary(join(re:split("Able was I ere I saw Elba.","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ {parts,
+ 2}]))),
+ <<":::Able was I ere I saw Elba:A:">> = iolist_to_binary(join(re:split("Able was I ere I saw Elba.","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ {parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless]))),
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ trim]))),
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless,
+ {parts,
+ 2}]))),
+ <<"The quick brown fox">> = iolist_to_binary(join(re:split("The quick brown fox","^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$",[caseless]))),
+ <<":a">> = iolist_to_binary(join(re:split("a","^((.)(?1)\\2|.)$",[trim]))),
+ <<":a::">> = iolist_to_binary(join(re:split("a","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<":a::">> = iolist_to_binary(join(re:split("a","^((.)(?1)\\2|.)$",[]))),
+ <<":aba:a">> = iolist_to_binary(join(re:split("aba","^((.)(?1)\\2|.)$",[trim]))),
+ <<":aba:a:">> = iolist_to_binary(join(re:split("aba","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<":aba:a:">> = iolist_to_binary(join(re:split("aba","^((.)(?1)\\2|.)$",[]))),
+ <<":aabaa:a">> = iolist_to_binary(join(re:split("aabaa","^((.)(?1)\\2|.)$",[trim]))),
+ <<":aabaa:a:">> = iolist_to_binary(join(re:split("aabaa","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<":aabaa:a:">> = iolist_to_binary(join(re:split("aabaa","^((.)(?1)\\2|.)$",[]))),
+ <<":abcdcba:a">> = iolist_to_binary(join(re:split("abcdcba","^((.)(?1)\\2|.)$",[trim]))),
+ <<":abcdcba:a:">> = iolist_to_binary(join(re:split("abcdcba","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<":abcdcba:a:">> = iolist_to_binary(join(re:split("abcdcba","^((.)(?1)\\2|.)$",[]))),
+ <<":pqaabaaqp:p">> = iolist_to_binary(join(re:split("pqaabaaqp","^((.)(?1)\\2|.)$",[trim]))),
+ <<":pqaabaaqp:p:">> = iolist_to_binary(join(re:split("pqaabaaqp","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<":pqaabaaqp:p:">> = iolist_to_binary(join(re:split("pqaabaaqp","^((.)(?1)\\2|.)$",[]))),
+ <<":ablewasiereisawelba:a">> = iolist_to_binary(join(re:split("ablewasiereisawelba","^((.)(?1)\\2|.)$",[trim]))),
+ <<":ablewasiereisawelba:a:">> = iolist_to_binary(join(re:split("ablewasiereisawelba","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<":ablewasiereisawelba:a:">> = iolist_to_binary(join(re:split("ablewasiereisawelba","^((.)(?1)\\2|.)$",[]))),
+ <<"rhubarb">> = iolist_to_binary(join(re:split("rhubarb","^((.)(?1)\\2|.)$",[trim]))),
+ <<"rhubarb">> = iolist_to_binary(join(re:split("rhubarb","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<"rhubarb">> = iolist_to_binary(join(re:split("rhubarb","^((.)(?1)\\2|.)$",[]))),
+ <<"the quick brown fox">> = iolist_to_binary(join(re:split("the quick brown fox","^((.)(?1)\\2|.)$",[trim]))),
+ <<"the quick brown fox">> = iolist_to_binary(join(re:split("the quick brown fox","^((.)(?1)\\2|.)$",[{parts,
+ 2}]))),
+ <<"the quick brown fox">> = iolist_to_binary(join(re:split("the quick brown fox","^((.)(?1)\\2|.)$",[]))),
+ <<"b:a:z">> = iolist_to_binary(join(re:split("baz","(a)(?<=b(?1))",[trim]))),
+ <<"b:a:z">> = iolist_to_binary(join(re:split("baz","(a)(?<=b(?1))",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("]","^[a\\Q]bc\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("c","^[a\\Q]bc\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("c","^[a\\Q]bc\\E]",[{parts,
+ <<"b:a:z">> = iolist_to_binary(join(re:split("baz","(a)(?<=b(?1))",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)(?<=b(?1))",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)(?<=b(?1))",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)(?<=b(?1))",[]))),
+ <<"caz">> = iolist_to_binary(join(re:split("caz","(a)(?<=b(?1))",[trim]))),
+ <<"caz">> = iolist_to_binary(join(re:split("caz","(a)(?<=b(?1))",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("c","^[a\\Q]bc\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","^[a-\\Q\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^[a-\\Q\\E]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","^[a-\\Q\\E]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("-","^[a-\\Q\\E]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","^[a-\\Q\\E]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("-","^[a-\\Q\\E]",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaa","^(a()*)*",[trim]))),
-?line <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()*)*",[{parts,
- 2}]))),
-?line <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()*)*",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))*)*",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))*)*",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))*)*",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("aaaa","^(a()+)+",[trim]))),
-?line <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()+)+",[{parts,
- 2}]))),
-?line <<":a::">> = iolist_to_binary(join(re:split("aaaa","^(a()+)+",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))+)+",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))+)+",[{parts,
+ <<"caz">> = iolist_to_binary(join(re:split("caz","(a)(?<=b(?1))",[]))),
+ <<"zba:a:z">> = iolist_to_binary(join(re:split("zbaaz","(?<=b(?1))(a)",[trim]))),
+ <<"zba:a:z">> = iolist_to_binary(join(re:split("zbaaz","(?<=b(?1))(a)",[{parts,
+ 2}]))),
+ <<"zba:a:z">> = iolist_to_binary(join(re:split("zbaaz","(?<=b(?1))(a)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=b(?1))(a)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=b(?1))(a)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=b(?1))(a)",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","(?<=b(?1))(a)",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","(?<=b(?1))(a)",[{parts,
+ 2}]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","(?<=b(?1))(a)",[]))),
+ <<"b:a:z">> = iolist_to_binary(join(re:split("baz","(?<X>a)(?<=b(?&X))",[trim]))),
+ <<"b:a:z">> = iolist_to_binary(join(re:split("baz","(?<X>a)(?<=b(?&X))",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaa","^(?:a(?:(?:))+)+",[]))),
-?line <<":a">> = iolist_to_binary(join(re:split("abbD","(a){0,3}(?(1)b|(c|))*D",[trim]))),
-?line <<":a::">> = iolist_to_binary(join(re:split("abbD","(a){0,3}(?(1)b|(c|))*D",[{parts,
- 2}]))),
-?line <<":a::">> = iolist_to_binary(join(re:split("abbD","(a){0,3}(?(1)b|(c|))*D",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("ccccD","(a){0,3}(?(1)b|(c|))*D",[trim]))),
-?line <<":::">> = iolist_to_binary(join(re:split("ccccD","(a){0,3}(?(1)b|(c|))*D",[{parts,
- 2}]))),
-?line <<":::">> = iolist_to_binary(join(re:split("ccccD","(a){0,3}(?(1)b|(c|))*D",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("D","(a){0,3}(?(1)b|(c|))*D",[trim]))),
-?line <<":::">> = iolist_to_binary(join(re:split("D","(a){0,3}(?(1)b|(c|))*D",[{parts,
+ <<"b:a:z">> = iolist_to_binary(join(re:split("baz","(?<X>a)(?<=b(?&X))",[]))),
+ ok.
+run43() ->
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","^(?|(abc)|(def))\\1",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","^(?|(abc)|(def))\\1",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","^(?|(abc)|(def))\\1",[]))),
+ <<":def">> = iolist_to_binary(join(re:split("defdef","^(?|(abc)|(def))\\1",[trim]))),
+ <<":def:">> = iolist_to_binary(join(re:split("defdef","^(?|(abc)|(def))\\1",[{parts,
+ 2}]))),
+ <<":def:">> = iolist_to_binary(join(re:split("defdef","^(?|(abc)|(def))\\1",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?|(abc)|(def))\\1",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?|(abc)|(def))\\1",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?|(abc)|(def))\\1",[]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","^(?|(abc)|(def))\\1",[trim]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","^(?|(abc)|(def))\\1",[{parts,
+ 2}]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","^(?|(abc)|(def))\\1",[]))),
+ <<"defabc">> = iolist_to_binary(join(re:split("defabc","^(?|(abc)|(def))\\1",[trim]))),
+ <<"defabc">> = iolist_to_binary(join(re:split("defabc","^(?|(abc)|(def))\\1",[{parts,
+ 2}]))),
+ <<"defabc">> = iolist_to_binary(join(re:split("defabc","^(?|(abc)|(def))\\1",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("abcabc","^(?|(abc)|(def))(?1)",[trim]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","^(?|(abc)|(def))(?1)",[{parts,
+ 2}]))),
+ <<":abc:">> = iolist_to_binary(join(re:split("abcabc","^(?|(abc)|(def))(?1)",[]))),
+ <<":def">> = iolist_to_binary(join(re:split("defabc","^(?|(abc)|(def))(?1)",[trim]))),
+ <<":def:">> = iolist_to_binary(join(re:split("defabc","^(?|(abc)|(def))(?1)",[{parts,
+ 2}]))),
+ <<":def:">> = iolist_to_binary(join(re:split("defabc","^(?|(abc)|(def))(?1)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?|(abc)|(def))(?1)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?|(abc)|(def))(?1)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?|(abc)|(def))(?1)",[]))),
+ <<"defdef">> = iolist_to_binary(join(re:split("defdef","^(?|(abc)|(def))(?1)",[trim]))),
+ <<"defdef">> = iolist_to_binary(join(re:split("defdef","^(?|(abc)|(def))(?1)",[{parts,
+ 2}]))),
+ <<"defdef">> = iolist_to_binary(join(re:split("defdef","^(?|(abc)|(def))(?1)",[]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","^(?|(abc)|(def))(?1)",[trim]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","^(?|(abc)|(def))(?1)",[{parts,
+ 2}]))),
+ <<"abcdef">> = iolist_to_binary(join(re:split("abcdef","^(?|(abc)|(def))(?1)",[]))),
+ <<"A:C:D">> = iolist_to_binary(join(re:split("ABCD","(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<"A:C:D">> = iolist_to_binary(join(re:split("ABCD","(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<"A:C:D">> = iolist_to_binary(join(re:split("ABCD","(?:(?1)|B)(A(*F)|C)",[]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("CCD","(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("CCD","(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("CCD","(?:(?1)|B)(A(*F)|C)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?:(?1)|B)(A(*F)|C)",[]))),
+ <<"CAD">> = iolist_to_binary(join(re:split("CAD","(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<"CAD">> = iolist_to_binary(join(re:split("CAD","(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<"CAD">> = iolist_to_binary(join(re:split("CAD","(?:(?1)|B)(A(*F)|C)",[]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("CCD","^(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("CCD","^(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("CCD","^(?:(?1)|B)(A(*F)|C)",[]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("BCD","^(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("BCD","^(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<":C:D">> = iolist_to_binary(join(re:split("BCD","^(?:(?1)|B)(A(*F)|C)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:(?1)|B)(A(*F)|C)",[]))),
+ <<"ABCD">> = iolist_to_binary(join(re:split("ABCD","^(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<"ABCD">> = iolist_to_binary(join(re:split("ABCD","^(?:(?1)|B)(A(*F)|C)",[{parts,
2}]))),
-?line <<":::">> = iolist_to_binary(join(re:split("D","(a){0,3}(?(1)b|(c|))*D",[]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d",[trim]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d",[{parts,
- 2}]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(a|)*\\d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d",[trim]))),
-?line <<"::">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d",[{parts,
- 2}]))),
-?line <<"::">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(a|)*\\d",[]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d",[trim]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d",[{parts,
- 2}]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?>a|)*\\d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?>a|)*\\d",[]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d",[trim]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d",[{parts,
- 2}]))),
-?line <<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(?:a|)*\\d",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4","(?:a|)*\\d",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","\\Z",[trim]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","\\Z",[{parts,
- 2}]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","\\Z",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("abc","^(?s)(?>.*)(?<!\\n)",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[{parts,
+ <<"ABCD">> = iolist_to_binary(join(re:split("ABCD","^(?:(?1)|B)(A(*F)|C)",[]))),
+ <<"CAD">> = iolist_to_binary(join(re:split("CAD","^(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<"CAD">> = iolist_to_binary(join(re:split("CAD","^(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<"CAD">> = iolist_to_binary(join(re:split("CAD","^(?:(?1)|B)(A(*F)|C)",[]))),
+ <<"BAD">> = iolist_to_binary(join(re:split("BAD","^(?:(?1)|B)(A(*F)|C)",[trim]))),
+ <<"BAD">> = iolist_to_binary(join(re:split("BAD","^(?:(?1)|B)(A(*F)|C)",[{parts,
+ 2}]))),
+ <<"BAD">> = iolist_to_binary(join(re:split("BAD","^(?:(?1)|B)(A(*F)|C)",[]))),
+ <<":A:D">> = iolist_to_binary(join(re:split("AAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<":A:D">> = iolist_to_binary(join(re:split("AAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<":A:D">> = iolist_to_binary(join(re:split("AAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<":C">> = iolist_to_binary(join(re:split("ACD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<":C:">> = iolist_to_binary(join(re:split("ACD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<":C:">> = iolist_to_binary(join(re:split("ACD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<":A:D">> = iolist_to_binary(join(re:split("BAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<":A:D">> = iolist_to_binary(join(re:split("BAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<":A:D">> = iolist_to_binary(join(re:split("BAD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<":C">> = iolist_to_binary(join(re:split("BCD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<":C:">> = iolist_to_binary(join(re:split("BCD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<":C:">> = iolist_to_binary(join(re:split("BCD","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<":A:X">> = iolist_to_binary(join(re:split("BAX","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<":A:X">> = iolist_to_binary(join(re:split("BAX","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<":A:X">> = iolist_to_binary(join(re:split("BAX","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<"ACX">> = iolist_to_binary(join(re:split("ACX","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<"ACX">> = iolist_to_binary(join(re:split("ACX","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<"ACX">> = iolist_to_binary(join(re:split("ACX","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[trim]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[{parts,
+ 2}]))),
+ <<"ABC">> = iolist_to_binary(join(re:split("ABC","(?:(?1)|B)(A(*ACCEPT)XX|C)D",[]))),
+ <<"">> = iolist_to_binary(join(re:split("BAC","(?(DEFINE)(A))B(?1)C",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("BAC","(?(DEFINE)(A))B(?1)C",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("BAC","(?(DEFINE)(A))B(?1)C",[]))),
+ <<"">> = iolist_to_binary(join(re:split("BAAC","(?(DEFINE)((A)\\2))B(?1)C",[trim]))),
+ <<":::">> = iolist_to_binary(join(re:split("BAAC","(?(DEFINE)((A)\\2))B(?1)C",[{parts,
+ 2}]))),
+ <<":::">> = iolist_to_binary(join(re:split("BAAC","(?(DEFINE)((A)\\2))B(?1)C",[]))),
+ <<":(ab(cd)ef):ef">> = iolist_to_binary(join(re:split("(ab(cd)ef)","(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )",[extended,
+ trim]))),
+ <<":(ab(cd)ef):ef:">> = iolist_to_binary(join(re:split("(ab(cd)ef)","(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )",[extended,
+ {parts,
+ 2}]))),
+ <<":(ab(cd)ef):ef:">> = iolist_to_binary(join(re:split("(ab(cd)ef)","(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )",[extended]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?=a(*SKIP)b|ac)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?=a(*SKIP)b|ac)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?=a(*SKIP)b|ac)",[]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*SKIP)b|ac)",[trim]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*SKIP)b|ac)",[{parts,
+ 2}]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*SKIP)b|ac)",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(?=a(*PRUNE)b)",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(?=a(*PRUNE)b)",[{parts,
+ 2}]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","^(?=a(*PRUNE)b)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?=a(*PRUNE)b)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?=a(*PRUNE)b)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?=a(*PRUNE)b)",[]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*PRUNE)b)",[trim]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*PRUNE)b)",[{parts,
+ 2}]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*PRUNE)b)",[]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*ACCEPT)b)",[trim]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*ACCEPT)b)",[{parts,
+ 2}]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?=a(*ACCEPT)b)",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("ab","(?>a\\Kb)",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?>a\\Kb)",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?>a\\Kb)",[]))),
+ <<"a:ab">> = iolist_to_binary(join(re:split("ab","((?>a\\Kb))",[trim]))),
+ <<"a:ab:">> = iolist_to_binary(join(re:split("ab","((?>a\\Kb))",[{parts,
+ 2}]))),
+ <<"a:ab:">> = iolist_to_binary(join(re:split("ab","((?>a\\Kb))",[]))),
+ <<"a:ab">> = iolist_to_binary(join(re:split("ab","(a\\Kb)",[trim]))),
+ <<"a:ab:">> = iolist_to_binary(join(re:split("ab","(a\\Kb)",[{parts,
+ 2}]))),
+ <<"a:ab:">> = iolist_to_binary(join(re:split("ab","(a\\Kb)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ac","^a\\Kcz|ac",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","^a\\Kcz|ac",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","^a\\Kcz|ac",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","(?>a\\Kbz|ab)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","(?>a\\Kbz|ab)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ab","(?>a\\Kbz|ab)",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("ab","^(?&t)(?(DEFINE)(?<t>a\\Kb))$",[trim]))),
+ <<"a::">> = iolist_to_binary(join(re:split("ab","^(?&t)(?(DEFINE)(?<t>a\\Kb))$",[{parts,
+ 2}]))),
+ <<"a::">> = iolist_to_binary(join(re:split("ab","^(?&t)(?(DEFINE)(?<t>a\\Kb))$",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("a(b)c","^([^()]|\\((?1)*\\))*$",[trim]))),
+ <<":c:">> = iolist_to_binary(join(re:split("a(b)c","^([^()]|\\((?1)*\\))*$",[{parts,
+ 2}]))),
+ <<":c:">> = iolist_to_binary(join(re:split("a(b)c","^([^()]|\\((?1)*\\))*$",[]))),
+ <<":e">> = iolist_to_binary(join(re:split("a(b(c)d)e","^([^()]|\\((?1)*\\))*$",[trim]))),
+ <<":e:">> = iolist_to_binary(join(re:split("a(b(c)d)e","^([^()]|\\((?1)*\\))*$",[{parts,
+ 2}]))),
+ <<":e:">> = iolist_to_binary(join(re:split("a(b(c)d)e","^([^()]|\\((?1)*\\))*$",[]))),
+ <<":0">> = iolist_to_binary(join(re:split("0","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[trim]))),
+ <<":0::">> = iolist_to_binary(join(re:split("0","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[{parts,
+ 2}]))),
+ <<":0::">> = iolist_to_binary(join(re:split("0","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[]))),
+ <<":00:0">> = iolist_to_binary(join(re:split("00","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[trim]))),
+ <<":00:0:">> = iolist_to_binary(join(re:split("00","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[{parts,
+ 2}]))),
+ <<":00:0:">> = iolist_to_binary(join(re:split("00","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[]))),
+ <<":0000:0">> = iolist_to_binary(join(re:split("0000","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[trim]))),
+ <<":0000:0:">> = iolist_to_binary(join(re:split("0000","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[{parts,
+ 2}]))),
+ <<":0000:0:">> = iolist_to_binary(join(re:split("0000","(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))",[]))),
+ ok.
+run44() ->
+ <<":0:0">> = iolist_to_binary(join(re:split("0","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[trim]))),
+ <<":0:0:">> = iolist_to_binary(join(re:split("0","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[{parts,
+ 2}]))),
+ <<":0:0:">> = iolist_to_binary(join(re:split("0","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[]))),
+ <<":0:0::0:0">> = iolist_to_binary(join(re:split("00","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[trim]))),
+ <<":0:0:0">> = iolist_to_binary(join(re:split("00","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[{parts,
+ 2}]))),
+ <<":0:0::0:0:">> = iolist_to_binary(join(re:split("00","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[]))),
+ <<":0:0::0:0::0:0::0:0">> = iolist_to_binary(join(re:split("0000","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[trim]))),
+ <<":0:0:000">> = iolist_to_binary(join(re:split("0000","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[{parts,
+ 2}]))),
+ <<":0:0::0:0::0:0::0:0:">> = iolist_to_binary(join(re:split("0000","(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))",[]))),
+ <<"ACABX">> = iolist_to_binary(join(re:split("ACABX","A(*COMMIT)(B|D)",[trim]))),
+ <<"ACABX">> = iolist_to_binary(join(re:split("ACABX","A(*COMMIT)(B|D)",[{parts,
+ 2}]))),
+ <<"ACABX">> = iolist_to_binary(join(re:split("ACABX","A(*COMMIT)(B|D)",[]))),
+ <<":A:B:C:DEFG">> = iolist_to_binary(join(re:split("ABCDEFG","(*COMMIT)(A|P)(B|P)(C|P)",[trim]))),
+ <<":A:B:C:DEFG">> = iolist_to_binary(join(re:split("ABCDEFG","(*COMMIT)(A|P)(B|P)(C|P)",[{parts,
+ 2}]))),
+ <<":A:B:C:DEFG">> = iolist_to_binary(join(re:split("ABCDEFG","(*COMMIT)(A|P)(B|P)(C|P)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(*COMMIT)(A|P)(B|P)(C|P)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(*COMMIT)(A|P)(B|P)(C|P)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(*COMMIT)(A|P)(B|P)(C|P)",[]))),
+ <<"DEFGABC">> = iolist_to_binary(join(re:split("DEFGABC","(*COMMIT)(A|P)(B|P)(C|P)",[trim]))),
+ <<"DEFGABC">> = iolist_to_binary(join(re:split("DEFGABC","(*COMMIT)(A|P)(B|P)(C|P)",[{parts,
+ 2}]))),
+ <<"DEFGABC">> = iolist_to_binary(join(re:split("DEFGABC","(*COMMIT)(A|P)(B|P)(C|P)",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("abbb","(\\w+)(?>b(*COMMIT))\\w{2}",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("abbb","(\\w+)(?>b(*COMMIT))\\w{2}",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("abbb","(\\w+)(?>b(*COMMIT))\\w{2}",[]))),
+ <<"abbb">> = iolist_to_binary(join(re:split("abbb","(\\w+)b(*COMMIT)\\w{2}",[trim]))),
+ <<"abbb">> = iolist_to_binary(join(re:split("abbb","(\\w+)b(*COMMIT)\\w{2}",[{parts,
+ 2}]))),
+ <<"abbb">> = iolist_to_binary(join(re:split("abbb","(\\w+)b(*COMMIT)\\w{2}",[]))),
+ <<"b::c">> = iolist_to_binary(join(re:split("bac","(?&t)(?#()(?(DEFINE)(?<t>a))",[trim]))),
+ <<"b::c">> = iolist_to_binary(join(re:split("bac","(?&t)(?#()(?(DEFINE)(?<t>a))",[{parts,
+ 2}]))),
+ <<"b::c">> = iolist_to_binary(join(re:split("bac","(?&t)(?#()(?(DEFINE)(?<t>a))",[]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?",[trim]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?",[{parts,
+ 2}]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?",[]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","(?>(*COMMIT)(yes|no)(*THEN)(*F))?",[trim]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","(?>(*COMMIT)(yes|no)(*THEN)(*F))?",[{parts,
+ 2}]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","(?>(*COMMIT)(yes|no)(*THEN)(*F))?",[]))),
+ ok.
+run45() ->
+ <<"">> = iolist_to_binary(join(re:split("bc","b?(*SKIP)c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("bc","b?(*SKIP)c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("bc","b?(*SKIP)c",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("abc","b?(*SKIP)c",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("abc","b?(*SKIP)c",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("abc","b?(*SKIP)c",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(*SKIP)bc",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(*SKIP)bc",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(*SKIP)bc",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(*SKIP)b",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(*SKIP)b",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","(*SKIP)b",[]))),
+ <<"x::x::x">> = iolist_to_binary(join(re:split("xxx","(?P<abn>(?P=abn)xxx|)+",[trim]))),
+ <<"x::xx">> = iolist_to_binary(join(re:split("xxx","(?P<abn>(?P=abn)xxx|)+",[{parts,
+ 2}]))),
+ <<"x::x::x::">> = iolist_to_binary(join(re:split("xxx","(?P<abn>(?P=abn)xxx|)+",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aa","(?i:([^b]))(?1)",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aa","(?i:([^b]))(?1)",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aa","(?i:([^b]))(?1)",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aA","(?i:([^b]))(?1)",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aA","(?i:([^b]))(?1)",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aA","(?i:([^b]))(?1)",[]))),
+ <<":*:: ::a::l::r">> = iolist_to_binary(join(re:split("** Failers","(?i:([^b]))(?1)",[trim]))),
+ <<":*: Failers">> = iolist_to_binary(join(re:split("** Failers","(?i:([^b]))(?1)",[{parts,
+ 2}]))),
+ <<":*:: ::a::l::r:">> = iolist_to_binary(join(re:split("** Failers","(?i:([^b]))(?1)",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(?i:([^b]))(?1)",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(?i:([^b]))(?1)",[{parts,
+ 2}]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(?i:([^b]))(?1)",[]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:([^b]))(?1)",[trim]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:([^b]))(?1)",[{parts,
+ 2}]))),
+ <<"aB">> = iolist_to_binary(join(re:split("aB","(?i:([^b]))(?1)",[]))),
+ <<"Ba">> = iolist_to_binary(join(re:split("Ba","(?i:([^b]))(?1)",[trim]))),
+ <<"Ba">> = iolist_to_binary(join(re:split("Ba","(?i:([^b]))(?1)",[{parts,
+ 2}]))),
+ <<"Ba">> = iolist_to_binary(join(re:split("Ba","(?i:([^b]))(?1)",[]))),
+ <<"ba">> = iolist_to_binary(join(re:split("ba","(?i:([^b]))(?1)",[trim]))),
+ <<"ba">> = iolist_to_binary(join(re:split("ba","(?i:([^b]))(?1)",[{parts,
+ 2}]))),
+ <<"ba">> = iolist_to_binary(join(re:split("ba","(?i:([^b]))(?1)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaaX","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaaX","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaaX","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[trim]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[{parts,
+ 2}]))),
+ <<"aaaaaa">> = iolist_to_binary(join(re:split("aaaaaa","^(?&t)*+(?(DEFINE)(?<t>a))\\w$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaaX","^(?&t)*(?(DEFINE)(?<t>a))\\w$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaaX","^(?&t)*(?(DEFINE)(?<t>a))\\w$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaaX","^(?&t)*(?(DEFINE)(?<t>a))\\w$",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaa","^(?&t)*(?(DEFINE)(?<t>a))\\w$",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaa","^(?&t)*(?(DEFINE)(?<t>a))\\w$",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aaaaaa","^(?&t)*(?(DEFINE)(?<t>a))\\w$",[]))),
+ <<":a:X">> = iolist_to_binary(join(re:split("aaaaX","^(a)*+(\\w)",[trim]))),
+ <<":a:X:">> = iolist_to_binary(join(re:split("aaaaX","^(a)*+(\\w)",[{parts,
+ 2}]))),
+ <<":a:X:">> = iolist_to_binary(join(re:split("aaaaX","^(a)*+(\\w)",[]))),
+ <<"::Y:Z">> = iolist_to_binary(join(re:split("YZ","^(a)*+(\\w)",[trim]))),
+ <<"::Y:Z">> = iolist_to_binary(join(re:split("YZ","^(a)*+(\\w)",[{parts,
+ 2}]))),
+ <<"::Y:Z">> = iolist_to_binary(join(re:split("YZ","^(a)*+(\\w)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a)*+(\\w)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a)*+(\\w)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a)*+(\\w)",[]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(a)*+(\\w)",[trim]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(a)*+(\\w)",[{parts,
+ 2}]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(a)*+(\\w)",[]))),
+ <<":X">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)*+(\\w)",[trim]))),
+ <<":X:">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)*+(\\w)",[{parts,
+ 2}]))),
+ <<":X:">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)*+(\\w)",[]))),
+ <<":Y:Z">> = iolist_to_binary(join(re:split("YZ","^(?:a)*+(\\w)",[trim]))),
+ <<":Y:Z">> = iolist_to_binary(join(re:split("YZ","^(?:a)*+(\\w)",[{parts,
+ 2}]))),
+ <<":Y:Z">> = iolist_to_binary(join(re:split("YZ","^(?:a)*+(\\w)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a)*+(\\w)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a)*+(\\w)",[{parts,
2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[trim]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[{parts,
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a)*+(\\w)",[]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(?:a)*+(\\w)",[trim]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(?:a)*+(\\w)",[{parts,
+ 2}]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(?:a)*+(\\w)",[]))),
+ <<":a:X">> = iolist_to_binary(join(re:split("aaaaX","^(a)++(\\w)",[trim]))),
+ <<":a:X:">> = iolist_to_binary(join(re:split("aaaaX","^(a)++(\\w)",[{parts,
+ 2}]))),
+ <<":a:X:">> = iolist_to_binary(join(re:split("aaaaX","^(a)++(\\w)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a)++(\\w)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a)++(\\w)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a)++(\\w)",[]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(a)++(\\w)",[trim]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(a)++(\\w)",[{parts,
+ 2}]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(a)++(\\w)",[]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(a)++(\\w)",[trim]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(a)++(\\w)",[{parts,
+ 2}]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(a)++(\\w)",[]))),
+ <<":X">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)++(\\w)",[trim]))),
+ <<":X:">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)++(\\w)",[{parts,
+ 2}]))),
+ <<":X:">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)++(\\w)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a)++(\\w)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a)++(\\w)",[{parts,
2}]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","^(?![^\\n]*\\n\\z)",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[trim]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[{parts,
- 2}]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[]))),
-?line <<"abc">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[trim]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[{parts,
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a)++(\\w)",[]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(?:a)++(\\w)",[trim]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(?:a)++(\\w)",[{parts,
+ 2}]))),
+ <<"aaaa">> = iolist_to_binary(join(re:split("aaaa","^(?:a)++(\\w)",[]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(?:a)++(\\w)",[trim]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(?:a)++(\\w)",[{parts,
+ 2}]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(?:a)++(\\w)",[]))),
+ <<":a:a:aaX">> = iolist_to_binary(join(re:split("aaaaX","^(a)?+(\\w)",[trim]))),
+ <<":a:a:aaX">> = iolist_to_binary(join(re:split("aaaaX","^(a)?+(\\w)",[{parts,
+ 2}]))),
+ <<":a:a:aaX">> = iolist_to_binary(join(re:split("aaaaX","^(a)?+(\\w)",[]))),
+ <<"::Y:Z">> = iolist_to_binary(join(re:split("YZ","^(a)?+(\\w)",[trim]))),
+ <<"::Y:Z">> = iolist_to_binary(join(re:split("YZ","^(a)?+(\\w)",[{parts,
+ 2}]))),
+ <<"::Y:Z">> = iolist_to_binary(join(re:split("YZ","^(a)?+(\\w)",[]))),
+ <<":a:aaX">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)?+(\\w)",[trim]))),
+ <<":a:aaX">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)?+(\\w)",[{parts,
+ 2}]))),
+ <<":a:aaX">> = iolist_to_binary(join(re:split("aaaaX","^(?:a)?+(\\w)",[]))),
+ <<":Y:Z">> = iolist_to_binary(join(re:split("YZ","^(?:a)?+(\\w)",[trim]))),
+ <<":Y:Z">> = iolist_to_binary(join(re:split("YZ","^(?:a)?+(\\w)",[{parts,
+ 2}]))),
+ <<":Y:Z">> = iolist_to_binary(join(re:split("YZ","^(?:a)?+(\\w)",[]))),
+ <<":a:X">> = iolist_to_binary(join(re:split("aaaaX","^(a){2,}+(\\w)",[trim]))),
+ <<":a:X:">> = iolist_to_binary(join(re:split("aaaaX","^(a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<":a:X:">> = iolist_to_binary(join(re:split("aaaaX","^(a){2,}+(\\w)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a){2,}+(\\w)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(a){2,}+(\\w)",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a){2,}+(\\w)",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(a){2,}+(\\w)",[]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(a){2,}+(\\w)",[trim]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(a){2,}+(\\w)",[]))),
+ <<":X">> = iolist_to_binary(join(re:split("aaaaX","^(?:a){2,}+(\\w)",[trim]))),
+ <<":X:">> = iolist_to_binary(join(re:split("aaaaX","^(?:a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<":X:">> = iolist_to_binary(join(re:split("aaaaX","^(?:a){2,}+(\\w)",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a){2,}+(\\w)",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","^(?:a){2,}+(\\w)",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(?:a){2,}+(\\w)",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(?:a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^(?:a){2,}+(\\w)",[]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(?:a){2,}+(\\w)",[trim]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(?:a){2,}+(\\w)",[{parts,
+ 2}]))),
+ <<"YZ">> = iolist_to_binary(join(re:split("YZ","^(?:a){2,}+(\\w)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","(a|)*(?1)b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","(a|)*(?1)b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","(a|)*(?1)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ab","(a|)*(?1)b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("ab","(a|)*(?1)b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("ab","(a|)*(?1)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aab","(a|)*(?1)b",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aab","(a|)*(?1)b",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aab","(a|)*(?1)b",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)++(?1)b",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)++(?1)b",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)++(?1)b",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(a)++(?1)b",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(a)++(?1)b",[{parts,
+ 2}]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(a)++(?1)b",[]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(a)++(?1)b",[trim]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(a)++(?1)b",[{parts,
+ 2}]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(a)++(?1)b",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)*+(?1)b",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)*+(?1)b",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(a)*+(?1)b",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(a)*+(?1)b",[trim]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(a)*+(?1)b",[{parts,
+ 2}]))),
+ <<"ab">> = iolist_to_binary(join(re:split("ab","(a)*+(?1)b",[]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(a)*+(?1)b",[trim]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(a)*+(?1)b",[{parts,
+ 2}]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(a)*+(?1)b",[]))),
+ <<"">> = iolist_to_binary(join(re:split("b","(?1)(?:(b)){0}",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","(?1)(?:(b)){0}",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("b","(?1)(?:(b)){0}",[]))),
+ <<":foo(bar(baz)+baz(bop)):(bar(baz)+baz(bop)):bar(baz)+baz(bop)">> = iolist_to_binary(join(re:split("foo(bar(baz)+baz(bop))","(foo ( \\( ((?:(?> [^()]+ )|(?2))*) \\) ) )",[extended,
+ trim]))),
+ <<":foo(bar(baz)+baz(bop)):(bar(baz)+baz(bop)):bar(baz)+baz(bop):">> = iolist_to_binary(join(re:split("foo(bar(baz)+baz(bop))","(foo ( \\( ((?:(?> [^()]+ )|(?2))*) \\) ) )",[extended,
+ {parts,
+ 2}]))),
+ <<":foo(bar(baz)+baz(bop)):(bar(baz)+baz(bop)):bar(baz)+baz(bop):">> = iolist_to_binary(join(re:split("foo(bar(baz)+baz(bop))","(foo ( \\( ((?:(?> [^()]+ )|(?2))*) \\) ) )",[extended]))),
+ ok.
+run46() ->
+ <<":AB:B">> = iolist_to_binary(join(re:split("AB","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ trim]))),
+ <<":AB:B::">> = iolist_to_binary(join(re:split("AB","(A (A|B(*ACCEPT)|C) D)(E)",[extended,
+ {parts,
+ 2}]))),
+ <<":AB:B::">> = iolist_to_binary(join(re:split("AB","(A (A|B(*ACCEPT)|C) D)(E)",[extended]))),
+ <<":a">> = iolist_to_binary(join(re:split("ba","\\A.*?(a|bc)",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ba","\\A.*?(a|bc)",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ba","\\A.*?(a|bc)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc)++",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc)++",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc)++",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("ba","\\A.*?(a|bc)++",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ba","\\A.*?(a|bc)++",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ba","\\A.*?(a|bc)++",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc|d)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc|d)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc|d)",[]))),
+ <<":b:eetle">> = iolist_to_binary(join(re:split("beetle","(?:(b))++",[trim]))),
+ <<":b:eetle">> = iolist_to_binary(join(re:split("beetle","(?:(b))++",[{parts,
+ 2}]))),
+ <<":b:eetle">> = iolist_to_binary(join(re:split("beetle","(?:(b))++",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("a","(?(?=(a(*ACCEPT)z))a)",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("a","(?(?=(a(*ACCEPT)z))a)",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("a","(?(?=(a(*ACCEPT)z))a)",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("aaaab","^(a)(?1)+ab",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a)(?1)+ab",[{parts,
2}]))),
-?line <<"abc:">> = iolist_to_binary(join(re:split("abc","\\z(?<!\\n)",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("abcd","(.*(.)?)*",[trim]))),
-?line <<":::">> = iolist_to_binary(join(re:split("abcd","(.*(.)?)*",[{parts,
- 2}]))),
-?line <<":::">> = iolist_to_binary(join(re:split("abcd","(.*(.)?)*",[]))),
-?line <<"a:::b:::c:::d">> = iolist_to_binary(join(re:split("abcd","( (A | (?(1)0|) )* )",[extended,
+ <<":a:">> = iolist_to_binary(join(re:split("aaaab","^(a)(?1)+ab",[]))),
+ <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a)(?1)++ab",[trim]))),
+ <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a)(?1)++ab",[{parts,
+ 2}]))),
+ <<"aaaab">> = iolist_to_binary(join(re:split("aaaab","^(a)(?1)++ab",[]))),
+ <<"::ckgammon">> = iolist_to_binary(join(re:split("backgammon","(?(DEFINE)(a))?b(?1)",[trim]))),
+ <<"::ckgammon">> = iolist_to_binary(join(re:split("backgammon","(?(DEFINE)(a))?b(?1)",[{parts,
+ 2}]))),
+ <<"::ckgammon">> = iolist_to_binary(join(re:split("backgammon","(?(DEFINE)(a))?b(?1)",[]))),
+ <<":
+def">> = iolist_to_binary(join(re:split("abc
+def","^\\N+",[trim]))),
+ <<":
+def">> = iolist_to_binary(join(re:split("abc
+def","^\\N+",[{parts,2}]))),
+ <<":
+def">> = iolist_to_binary(join(re:split("abc
+def","^\\N+",[]))),
+ <<":
+def">> = iolist_to_binary(join(re:split("abc
+def","^\\N{1,}",[trim]))),
+ <<":
+def">> = iolist_to_binary(join(re:split("abc
+def","^\\N{1,}",[{parts,2}]))),
+ <<":
+def">> = iolist_to_binary(join(re:split("abc
+def","^\\N{1,}",[]))),
+ <<":cde">> = iolist_to_binary(join(re:split("aaaabcde","(?(R)a+|(?R)b)",[trim]))),
+ <<":cde">> = iolist_to_binary(join(re:split("aaaabcde","(?(R)a+|(?R)b)",[{parts,
+ 2}]))),
+ <<":cde">> = iolist_to_binary(join(re:split("aaaabcde","(?(R)a+|(?R)b)",[]))),
+ <<":aaaa:cde">> = iolist_to_binary(join(re:split("aaaabcde","(?(R)a+|((?R))b)",[trim]))),
+ <<":aaaa:cde">> = iolist_to_binary(join(re:split("aaaabcde","(?(R)a+|((?R))b)",[{parts,
+ 2}]))),
+ <<":aaaa:cde">> = iolist_to_binary(join(re:split("aaaabcde","(?(R)a+|((?R))b)",[]))),
+ <<":aaaab:cde">> = iolist_to_binary(join(re:split("aaaabcde","((?(R)a+|(?1)b))",[trim]))),
+ <<":aaaab:cde">> = iolist_to_binary(join(re:split("aaaabcde","((?(R)a+|(?1)b))",[{parts,
+ 2}]))),
+ <<":aaaab:cde">> = iolist_to_binary(join(re:split("aaaabcde","((?(R)a+|(?1)b))",[]))),
+ <<":aaaab:cde">> = iolist_to_binary(join(re:split("aaaabcde","((?(R1)a+|(?1)b))",[trim]))),
+ <<":aaaab:cde">> = iolist_to_binary(join(re:split("aaaabcde","((?(R1)a+|(?1)b))",[{parts,
+ 2}]))),
+ <<":aaaab:cde">> = iolist_to_binary(join(re:split("aaaabcde","((?(R1)a+|(?1)b))",[]))),
+ <<"">> = iolist_to_binary(join(re:split("a","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("a","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[]))),
+ <<"b">> = iolist_to_binary(join(re:split("ba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[trim]))),
+ <<"b::">> = iolist_to_binary(join(re:split("ba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[{parts,
+ 2}]))),
+ <<"b::">> = iolist_to_binary(join(re:split("ba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[]))),
+ <<"bb">> = iolist_to_binary(join(re:split("bba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[trim]))),
+ <<"bb::">> = iolist_to_binary(join(re:split("bba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[{parts,
+ 2}]))),
+ <<"bb::">> = iolist_to_binary(join(re:split("bba","(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))",[]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b) c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b) c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b) c",[extended]))),
+ ok.
+run47() ->
+ <<":ab">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b|(*F)) c",[extended,
trim]))),
-?line <<"a:::bcd">> = iolist_to_binary(join(re:split("abcd","( (A | (?(1)0|) )* )",[extended,
+ <<":ab:">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b|(*F)) c",[extended,
{parts,
2}]))),
-?line <<"a:::b:::c:::d:::">> = iolist_to_binary(join(re:split("abcd","( (A | (?(1)0|) )* )",[extended]))),
-?line <<"a:::b:::c:::d">> = iolist_to_binary(join(re:split("abcd","( ( (?(1)0|) )* )",[extended,
+ <<":ab:">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b|(*F)) c",[extended]))),
+ <<":ab:ab">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b) | (*F) ) c",[extended,
+ trim]))),
+ <<":ab:ab:">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b) | (*F) ) c",[extended,
+ {parts,
+ 2}]))),
+ <<":ab:ab:">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b) | (*F) ) c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b) ) c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b) ) c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b) ) c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b) c",[extended,
trim]))),
-?line <<"a:::bcd">> = iolist_to_binary(join(re:split("abcd","( ( (?(1)0|) )* )",[extended,
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b) c",[extended,
{parts,
2}]))),
-?line <<"a:::b:::c:::d:::">> = iolist_to_binary(join(re:split("abcd","( ( (?(1)0|) )* )",[extended]))),
-?line <<"a::b::c::d">> = iolist_to_binary(join(re:split("abcd","( (?(1)0|)* )",[extended,
- trim]))),
-?line <<"a::bcd">> = iolist_to_binary(join(re:split("abcd","( (?(1)0|)* )",[extended,
- {parts,
- 2}]))),
-?line <<"a::b::c::d::">> = iolist_to_binary(join(re:split("abcd","( (?(1)0|)* )",[extended]))),
-?line <<"">> = iolist_to_binary(join(re:split("a]","[[:abcd:xyz]]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a]","[[:abcd:xyz]]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a]","[[:abcd:xyz]]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split(":]","[[:abcd:xyz]]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split(":]","[[:abcd:xyz]]",[{parts,
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b) c",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b|(*F)) c",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b|(*F)) c",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b|(*F)) c",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b) | (*F) ) c",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b) | (*F) ) c",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b) | (*F) ) c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b) ) c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b) ) c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b) ) c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?>a(*THEN)b) c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?>a(*THEN)b) c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?>a(*THEN)b) c",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("aabc","^.*? (?>a(*THEN)b|(*F)) c",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?>a(*THEN)b|(*F)) c",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?>a(*THEN)b|(*F)) c",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("aabc","^.*? (?> (?>a(*THEN)b) | (*F) ) c",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?> (?>a(*THEN)b) | (*F) ) c",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?> (?>a(*THEN)b) | (*F) ) c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?> (?>a(*THEN)b) ) c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?> (?>a(*THEN)b) ) c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?> (?>a(*THEN)b) ) c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b)++ c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b)++ c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b)++ c",[extended]))),
+ <<":ab">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b|(*F))++ c",[extended,
+ trim]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b|(*F))++ c",[extended,
+ {parts,
+ 2}]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("aabc","^.*? (a(*THEN)b|(*F))++ c",[extended]))),
+ <<":ab:ab">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b)++ | (*F) )++ c",[extended,
+ trim]))),
+ <<":ab:ab:">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b)++ | (*F) )++ c",[extended,
+ {parts,
+ 2}]))),
+ <<":ab:ab:">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b)++ | (*F) )++ c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b)++ )++ c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b)++ )++ c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? ( (a(*THEN)b)++ )++ c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b)++ c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b)++ c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b)++ c",[extended]))),
+ ok.
+run48() ->
+ <<"">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b|(*F))++ c",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b|(*F))++ c",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?:a(*THEN)b|(*F))++ c",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c",[extended,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c",[extended,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c",[extended]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b)++ )++ c",[extended,
+ trim]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b)++ )++ c",[extended,
+ {parts,
+ 2}]))),
+ <<"aabc">> = iolist_to_binary(join(re:split("aabc","^.*? (?: (?:a(*THEN)b)++ )++ c",[extended]))),
+ <<"">> = iolist_to_binary(join(re:split("ac","^(?(?=a(*THEN)b)ab|ac)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","^(?(?=a(*THEN)b)ab|ac)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","^(?(?=a(*THEN)b)ab|ac)",[]))),
+ <<"ba">> = iolist_to_binary(join(re:split("ba","^.*?(?(?=a)a|b(*THEN)c)",[trim]))),
+ <<"ba">> = iolist_to_binary(join(re:split("ba","^.*?(?(?=a)a|b(*THEN)c)",[{parts,
+ 2}]))),
+ <<"ba">> = iolist_to_binary(join(re:split("ba","^.*?(?(?=a)a|b(*THEN)c)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ba","^.*?(?:(?(?=a)a|b(*THEN)c)|d)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ba","^.*?(?:(?(?=a)a|b(*THEN)c)|d)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ba","^.*?(?:(?(?=a)a|b(*THEN)c)|d)",[]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^.*?(?(?=a)a(*THEN)b|c)",[trim]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^.*?(?(?=a)a(*THEN)b|c)",[{parts,
+ 2}]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^.*?(?(?=a)a(*THEN)b|c)",[]))),
+ <<":abc">> = iolist_to_binary(join(re:split("aabc","^.*(?=a(*THEN)b)",[trim]))),
+ <<":abc">> = iolist_to_binary(join(re:split("aabc","^.*(?=a(*THEN)b)",[{parts,
+ 2}]))),
+ <<":abc">> = iolist_to_binary(join(re:split("aabc","^.*(?=a(*THEN)b)",[]))),
+ <<"xa:d">> = iolist_to_binary(join(re:split("xacd","(?<=a(*ACCEPT)b)c",[trim]))),
+ <<"xa:d">> = iolist_to_binary(join(re:split("xacd","(?<=a(*ACCEPT)b)c",[{parts,
+ 2}]))),
+ <<"xa:d">> = iolist_to_binary(join(re:split("xacd","(?<=a(*ACCEPT)b)c",[]))),
+ <<"xa:a:d">> = iolist_to_binary(join(re:split("xacd","(?<=(a(*ACCEPT)b))c",[trim]))),
+ <<"xa:a:d">> = iolist_to_binary(join(re:split("xacd","(?<=(a(*ACCEPT)b))c",[{parts,
+ 2}]))),
+ <<"xa:a:d">> = iolist_to_binary(join(re:split("xacd","(?<=(a(*ACCEPT)b))c",[]))),
+ <<"xab:ab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=(a(*COMMIT)b))c",[trim]))),
+ <<"xab:ab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=(a(*COMMIT)b))c",[{parts,
+ 2}]))),
+ <<"xab:ab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=(a(*COMMIT)b))c",[]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=(a(*COMMIT)b))c",[trim]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=(a(*COMMIT)b))c",[{parts,
+ 2}]))),
+ <<"** Failers">> = iolist_to_binary(join(re:split("** Failers","(?<=(a(*COMMIT)b))c",[]))),
+ <<"xacd">> = iolist_to_binary(join(re:split("xacd","(?<=(a(*COMMIT)b))c",[trim]))),
+ <<"xacd">> = iolist_to_binary(join(re:split("xacd","(?<=(a(*COMMIT)b))c",[{parts,
+ 2}]))),
+ <<"xacd">> = iolist_to_binary(join(re:split("xacd","(?<=(a(*COMMIT)b))c",[]))),
+ <<"x:d">> = iolist_to_binary(join(re:split("xcd","(?<!a(*FAIL)b)c",[trim]))),
+ <<"x:d">> = iolist_to_binary(join(re:split("xcd","(?<!a(*FAIL)b)c",[{parts,
+ 2}]))),
+ <<"x:d">> = iolist_to_binary(join(re:split("xcd","(?<!a(*FAIL)b)c",[]))),
+ <<"a:d">> = iolist_to_binary(join(re:split("acd","(?<!a(*FAIL)b)c",[trim]))),
+ <<"a:d">> = iolist_to_binary(join(re:split("acd","(?<!a(*FAIL)b)c",[{parts,
+ 2}]))),
+ <<"a:d">> = iolist_to_binary(join(re:split("acd","(?<!a(*FAIL)b)c",[]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*PRUNE)b)c",[trim]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*PRUNE)b)c",[{parts,
+ 2}]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*PRUNE)b)c",[]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*SKIP)b)c",[trim]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*SKIP)b)c",[{parts,
+ 2}]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*SKIP)b)c",[]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*THEN)b)c",[trim]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*THEN)b)c",[{parts,
+ 2}]))),
+ <<"xab:d">> = iolist_to_binary(join(re:split("xabcd","(?<=a(*THEN)b)c",[]))),
+ <<":a:d">> = iolist_to_binary(join(re:split("abcd","(a)(?2){2}(.)",[trim]))),
+ <<":a:d:">> = iolist_to_binary(join(re:split("abcd","(a)(?2){2}(.)",[{parts,
+ 2}]))),
+ <<":a:d:">> = iolist_to_binary(join(re:split("abcd","(a)(?2){2}(.)",[]))),
+ ok.
+run49() ->
+ <<"hello world ">> = iolist_to_binary(join(re:split("hello world test","(another)?(\\1?)test",[trim]))),
+ <<"hello world :::">> = iolist_to_binary(join(re:split("hello world test","(another)?(\\1?)test",[{parts,
+ 2}]))),
+ <<"hello world :::">> = iolist_to_binary(join(re:split("hello world test","(another)?(\\1?)test",[]))),
+ <<"hello world test">> = iolist_to_binary(join(re:split("hello world test","(another)?(\\1+)test",[trim]))),
+ <<"hello world test">> = iolist_to_binary(join(re:split("hello world test","(another)?(\\1+)test",[{parts,
+ 2}]))),
+ <<"hello world test">> = iolist_to_binary(join(re:split("hello world test","(another)?(\\1+)test",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aac","(a(*COMMIT)b){0}a(?1)|aac",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aac","(a(*COMMIT)b){0}a(?1)|aac",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aac","(a(*COMMIT)b){0}a(?1)|aac",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aac","((?:a?)*)*c",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aac","((?:a?)*)*c",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aac","((?:a?)*)*c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aac","((?>a?)*)*c",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("aac","((?>a?)*)*c",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("aac","((?>a?)*)*c",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("aba","(?>.*?a)(?<=ba)",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aba","(?>.*?a)(?<=ba)",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aba","(?>.*?a)(?<=ba)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aba","(?:.*?a)(?<=ba)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aba","(?:.*?a)(?<=ba)",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aba","(?:.*?a)(?<=ba)",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("aab",".*?a(*PRUNE)b",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab",".*?a(*PRUNE)b",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split(":]","[[:abcd:xyz]]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("a","[abc[:x\\]pqr]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","[abc[:x\\]pqr]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("a","[abc[:x\\]pqr]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("[","[abc[:x\\]pqr]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("[","[abc[:x\\]pqr]",[{parts,
- 2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("[","[abc[:x\\]pqr]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split(":","[abc[:x\\]pqr]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split(":","[abc[:x\\]pqr]",[{parts,
+ <<"a:">> = iolist_to_binary(join(re:split("aab",".*?a(*PRUNE)b",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("aab",".*?a(*PRUNE)b",[dotall,
+ trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab",".*?a(*PRUNE)b",[dotall,
+ {parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split(":","[abc[:x\\]pqr]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("]","[abc[:x\\]pqr]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("]","[abc[:x\\]pqr]",[{parts,
+ <<"a:">> = iolist_to_binary(join(re:split("aab",".*?a(*PRUNE)b",[dotall]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^a(*PRUNE)b",[dotall,
+ trim]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^a(*PRUNE)b",[dotall,
+ {parts,
+ 2}]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","^a(*PRUNE)b",[dotall]))),
+ <<"a">> = iolist_to_binary(join(re:split("aab",".*?a(*SKIP)b",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab",".*?a(*SKIP)b",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab",".*?a(*SKIP)b",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("aab","(?>.*?a)b",[dotall,
+ trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab","(?>.*?a)b",[dotall,
+ {parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab","(?>.*?a)b",[dotall]))),
+ <<"a">> = iolist_to_binary(join(re:split("aab","(?>.*?a)b",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab","(?>.*?a)b",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("aab","(?>.*?a)b",[]))),
+ ok.
+run50() ->
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(?>^a)b",[dotall,
+ trim]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(?>^a)b",[dotall,
+ {parts,
+ 2}]))),
+ <<"aab">> = iolist_to_binary(join(re:split("aab","(?>^a)b",[dotall]))),
+ <<"alphabetabcd:abcd">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*?)(?<=(abcd)|(wxyz))",[trim]))),
+ <<"alphabetabcd:abcd::">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*?)(?<=(abcd)|(wxyz))",[{parts,
+ 2}]))),
+ <<"alphabetabcd:abcd::">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*?)(?<=(abcd)|(wxyz))",[]))),
+ <<"endingwxyz::wxyz">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*?)(?<=(abcd)|(wxyz))",[trim]))),
+ <<"endingwxyz::wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*?)(?<=(abcd)|(wxyz))",[{parts,
+ 2}]))),
+ <<"endingwxyz::wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*?)(?<=(abcd)|(wxyz))",[]))),
+ <<":abcd">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd)|(wxyz))",[trim]))),
+ <<":abcd::">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd)|(wxyz))",[{parts,
+ 2}]))),
+ <<":abcd::">> = iolist_to_binary(join(re:split("alphabetabcd","(?>.*)(?<=(abcd)|(wxyz))",[]))),
+ <<"::wxyz">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd)|(wxyz))",[trim]))),
+ <<"::wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd)|(wxyz))",[{parts,
+ 2}]))),
+ <<"::wxyz:">> = iolist_to_binary(join(re:split("endingwxyz","(?>.*)(?<=(abcd)|(wxyz))",[]))),
+ <<"abcdfooxyz">> = iolist_to_binary(join(re:split("abcdfooxyz","(?>.*)foo",[trim]))),
+ <<"abcdfooxyz">> = iolist_to_binary(join(re:split("abcdfooxyz","(?>.*)foo",[{parts,
+ 2}]))),
+ <<"abcdfooxyz">> = iolist_to_binary(join(re:split("abcdfooxyz","(?>.*)foo",[]))),
+ <<"abcd:xyz">> = iolist_to_binary(join(re:split("abcdfooxyz","(?>.*?)foo",[trim]))),
+ <<"abcd:xyz">> = iolist_to_binary(join(re:split("abcdfooxyz","(?>.*?)foo",[{parts,
+ 2}]))),
+ <<"abcd:xyz">> = iolist_to_binary(join(re:split("abcdfooxyz","(?>.*?)foo",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ac","(?:(a(*PRUNE)b)){0}(?:(?1)|ac)",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("ac","(?:(a(*PRUNE)b)){0}(?:(?1)|ac)",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("ac","(?:(a(*PRUNE)b)){0}(?:(?1)|ac)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ac","(?:(a(*SKIP)b)){0}(?:(?1)|ac)",[trim]))),
+ <<"::">> = iolist_to_binary(join(re:split("ac","(?:(a(*SKIP)b)){0}(?:(?1)|ac)",[{parts,
+ 2}]))),
+ <<"::">> = iolist_to_binary(join(re:split("ac","(?:(a(*SKIP)b)){0}(?:(?1)|ac)",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","(?<=(*SKIP)ac)a",[trim]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","(?<=(*SKIP)ac)a",[{parts,
+ 2}]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aa","(?<=(*SKIP)ac)a",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)b|a+c",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)b|a+c",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)b|a+c",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)(*PRUNE)b|a+c",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)(*PRUNE)b|a+c",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)(*PRUNE)b|a+c",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP:N)(*PRUNE)b|a+c",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP:N)(*PRUNE)b|a+c",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP:N)(*PRUNE)b|a+c",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaaaac","aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)(*PRUNE)b|a+c",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)(*PRUNE)b|a+c",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)(*PRUNE)b|a+c",[]))),
+ ok.
+run51() ->
+ <<"aaaaa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)b|a+c",[trim]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)b|a+c",[{parts,
+ 2}]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)b|a+c",[]))),
+ <<"aaaaa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)(*SKIP)b|a+c",[trim]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)(*SKIP)b|a+c",[{parts,
+ 2}]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)(*SKIP)b|a+c",[]))),
+ <<"aaaaa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)(*SKIP)b|a+c",[trim]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)(*SKIP)b|a+c",[{parts,
+ 2}]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)(*SKIP)b|a+c",[]))),
+ <<"aaaaa">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)(*SKIP)b|a+c",[trim]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)(*SKIP)b|a+c",[{parts,
+ 2}]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)(*SKIP)b|a+c",[]))),
+ <<"aaaaaac">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)b|a+c",[trim]))),
+ <<"aaaaaac">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)b|a+c",[{parts,
+ 2}]))),
+ <<"aaaaaac">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)b|a+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)b|a+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)b|a+c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*THEN)b|a+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)(*THEN)b|a+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)(*THEN)b|a+c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*SKIP)(*THEN)b|a+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)(*THEN)b|a+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)(*THEN)b|a+c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*PRUNE)(*THEN)b|a+c",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)(*THEN)b|a+c",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)(*THEN)b|a+c",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaaaac","aaaaa(*COMMIT)(*THEN)b|a+c",[]))),
+ ok.
+run52() ->
+ <<"aaaaa">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+",[trim]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+",[{parts,
+ 2}]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+",[]))),
+ <<"aaaaa">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+",[trim]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+",[{parts,
+ 2}]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+",[]))),
+ <<"aaaaa">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+",[trim]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+",[{parts,
+ 2}]))),
+ <<"aaaaa:">> = iolist_to_binary(join(re:split("aaaaaa","aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaac","a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaac","a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaac","a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaaac","a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c",[trim]))),
+ <<"aaa:">> = iolist_to_binary(join(re:split("aaaac","a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c",[{parts,
+ 2}]))),
+ <<"aaa:">> = iolist_to_binary(join(re:split("aaaac","a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c",[]))),
+ <<"aa">> = iolist_to_binary(join(re:split("aaaac","aaa(*PRUNE:A)a(*SKIP:A)b|a+c",[trim]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaac","aaa(*PRUNE:A)a(*SKIP:A)b|a+c",[{parts,
+ 2}]))),
+ <<"aa:">> = iolist_to_binary(join(re:split("aaaac","aaa(*PRUNE:A)a(*SKIP:A)b|a+c",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaaac","aaa(*MARK:A)a(*SKIP:A)b|a+c",[trim]))),
+ <<"aaa:">> = iolist_to_binary(join(re:split("aaaac","aaa(*MARK:A)a(*SKIP:A)b|a+c",[{parts,
+ 2}]))),
+ <<"aaa:">> = iolist_to_binary(join(re:split("aaaac","aaa(*MARK:A)a(*SKIP:A)b|a+c",[]))),
+ <<":a">> = iolist_to_binary(join(re:split("ba",".?(a|b(*THEN)c)",[trim]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ba",".?(a|b(*THEN)c)",[{parts,
+ 2}]))),
+ <<":a:">> = iolist_to_binary(join(re:split("ba",".?(a|b(*THEN)c)",[]))),
+ <<":ab">> = iolist_to_binary(join(re:split("abc","(a(*COMMIT)b)c|abd",[trim]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("abc","(a(*COMMIT)b)c|abd",[{parts,
+ 2}]))),
+ <<":ab:">> = iolist_to_binary(join(re:split("abc","(a(*COMMIT)b)c|abd",[]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","(a(*COMMIT)b)c|abd",[trim]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","(a(*COMMIT)b)c|abd",[{parts,
+ 2}]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","(a(*COMMIT)b)c|abd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","(?=a(*COMMIT)b)abc|abd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?=a(*COMMIT)b)abc|abd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?=a(*COMMIT)b)abc|abd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abd","(?=a(*COMMIT)b)abc|abd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","(?=a(*COMMIT)b)abc|abd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","(?=a(*COMMIT)b)abc|abd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abc","(?>a(*COMMIT)b)c|abd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?>a(*COMMIT)b)c|abd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abc","(?>a(*COMMIT)b)c|abd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)b)c|abd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)b)c|abd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)b)c|abd",[]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a(?=b(*COMMIT)c)[^d]|abd",[trim]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a(?=b(*COMMIT)c)[^d]|abd",[{parts,
+ 2}]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","a(?=b(*COMMIT)c)[^d]|abd",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","a(?=b(*COMMIT)c)[^d]|abd",[trim]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","a(?=b(*COMMIT)c)[^d]|abd",[{parts,
+ 2}]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","a(?=b(*COMMIT)c)[^d]|abd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abd","a(?=bc).|abd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","a(?=bc).|abd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","a(?=bc).|abd",[]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","a(?=bc).|abd",[trim]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","a(?=bc).|abd",[{parts,
+ 2}]))),
+ <<":c">> = iolist_to_binary(join(re:split("abc","a(?=bc).|abd",[]))),
+ <<"abceabd">> = iolist_to_binary(join(re:split("abceabd","a(?>b(*COMMIT)c)d|abd",[trim]))),
+ <<"abceabd">> = iolist_to_binary(join(re:split("abceabd","a(?>b(*COMMIT)c)d|abd",[{parts,
+ 2}]))),
+ <<"abceabd">> = iolist_to_binary(join(re:split("abceabd","a(?>b(*COMMIT)c)d|abd",[]))),
+ <<"abce">> = iolist_to_binary(join(re:split("abceabd","a(?>bc)d|abd",[trim]))),
+ <<"abce:">> = iolist_to_binary(join(re:split("abceabd","a(?>bc)d|abd",[{parts,
+ 2}]))),
+ <<"abce:">> = iolist_to_binary(join(re:split("abceabd","a(?>bc)d|abd",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)b)c|abd",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)b)c|abd",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)b)c|abd",[]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)c)d|abd",[trim]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)c)d|abd",[{parts,
+ 2}]))),
+ <<"abd">> = iolist_to_binary(join(re:split("abd","(?>a(*COMMIT)c)d|abd",[]))),
+ <<"::c">> = iolist_to_binary(join(re:split("ac","((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))",[trim]))),
+ <<"::c:">> = iolist_to_binary(join(re:split("ac","((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))",[{parts,
+ 2}]))),
+ <<"::c:">> = iolist_to_binary(join(re:split("ac","((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))",[]))),
+ ok.
+run53() ->
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^(a)?(?(1)a|b)+$",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a)?(?(1)a|b)+$",[trim]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a)?(?(1)a|b)+$",[{parts,
+ 2}]))),
+ <<"a">> = iolist_to_binary(join(re:split("a","^(a)?(?(1)a|b)+$",[]))),
+ <<"a">> = iolist_to_binary(join(re:split("ab","(?=a\\Kb)ab",[trim]))),
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?=a\\Kb)ab",[{parts,
+ 2}]))),
+ <<"a:">> = iolist_to_binary(join(re:split("ab","(?=a\\Kb)ab",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ac","(?!a\\Kb)ac",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","(?!a\\Kb)ac",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("ac","(?!a\\Kb)ac",[]))),
+ <<"ab">> = iolist_to_binary(join(re:split("abcd","^abc(?<=b\\Kc)d",[trim]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abcd","^abc(?<=b\\Kc)d",[{parts,
+ 2}]))),
+ <<"ab:">> = iolist_to_binary(join(re:split("abcd","^abc(?<=b\\Kc)d",[]))),
+ <<"">> = iolist_to_binary(join(re:split("abcd","^abc(?<!b\\Kq)d",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","^abc(?<!b\\Kq)d",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("abcd","^abc(?<!b\\Kq)d",[]))),
+ <<":abcd">> = iolist_to_binary(join(re:split("abcd","^((abc|abcx)(*THEN)y|abcd)",[trim]))),
+ <<":abcd::">> = iolist_to_binary(join(re:split("abcd","^((abc|abcx)(*THEN)y|abcd)",[{parts,
+ 2}]))),
+ <<":abcd::">> = iolist_to_binary(join(re:split("abcd","^((abc|abcx)(*THEN)y|abcd)",[]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((abc|abcx)(*THEN)y|abcd)",[trim]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((abc|abcx)(*THEN)y|abcd)",[{parts,
+ 2}]))),
+ <<"*** Failers">> = iolist_to_binary(join(re:split("*** Failers","^((abc|abcx)(*THEN)y|abcd)",[]))),
+ <<"abcxy">> = iolist_to_binary(join(re:split("abcxy","^((abc|abcx)(*THEN)y|abcd)",[trim]))),
+ <<"abcxy">> = iolist_to_binary(join(re:split("abcxy","^((abc|abcx)(*THEN)y|abcd)",[{parts,
+ 2}]))),
+ <<"abcxy">> = iolist_to_binary(join(re:split("abcxy","^((abc|abcx)(*THEN)y|abcd)",[]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","^((yes|no)(*THEN)(*F))?",[trim]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","^((yes|no)(*THEN)(*F))?",[{parts,
+ 2}]))),
+ <<"yes">> = iolist_to_binary(join(re:split("yes","^((yes|no)(*THEN)(*F))?",[]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","(?=a(*COMMIT)b|ac)ac|ac",[trim]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","(?=a(*COMMIT)b|ac)ac|ac",[{parts,
+ 2}]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","(?=a(*COMMIT)b|ac)ac|ac",[]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","(?=a(*COMMIT)b|(ac)) ac | (a)c",[extended,
+ trim]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","(?=a(*COMMIT)b|(ac)) ac | (a)c",[extended,
+ {parts,
+ 2}]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","(?=a(*COMMIT)b|(ac)) ac | (a)c",[extended]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*THEN)a)bn|bnn)",[trim]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*THEN)a)bn|bnn)",[{parts,
+ 2}]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*THEN)a)bn|bnn)",[]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*SKIP)a)bn|bnn",[trim]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*SKIP)a)bn|bnn",[{parts,
+ 2}]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*SKIP)a)bn|bnn",[]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*SKIP)a)bn|bnn)",[trim]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*SKIP)a)bn|bnn)",[{parts,
+ 2}]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*SKIP)a)bn|bnn)",[]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*PRUNE)a)bn|bnn",[trim]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*PRUNE)a)bn|bnn",[{parts,
+ 2}]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*PRUNE)a)bn|bnn",[]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*PRUNE)a)bn|bnn)",[trim]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*PRUNE)a)bn|bnn)",[{parts,
+ 2}]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*PRUNE)a)bn|bnn)",[]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*COMMIT)a)bn|bnn",[trim]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*COMMIT)a)bn|bnn",[{parts,
+ 2}]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?!b(*COMMIT)a)bn|bnn",[]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*COMMIT)a)bn|bnn)",[trim]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*COMMIT)a)bn|bnn)",[{parts,
+ 2}]))),
+ <<":n">> = iolist_to_binary(join(re:split("bnn","(?(?!b(*COMMIT)a)bn|bnn)",[]))),
+ <<"bnn">> = iolist_to_binary(join(re:split("bnn","(?=b(*SKIP)a)bn|bnn",[trim]))),
+ <<"bnn">> = iolist_to_binary(join(re:split("bnn","(?=b(*SKIP)a)bn|bnn",[{parts,
+ 2}]))),
+ <<"bnn">> = iolist_to_binary(join(re:split("bnn","(?=b(*SKIP)a)bn|bnn",[]))),
+ <<"">> = iolist_to_binary(join(re:split("bnn","(?=b(*THEN)a)bn|bnn",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("bnn","(?=b(*THEN)a)bn|bnn",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("bnn","(?=b(*THEN)a)bn|bnn",[]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","(?!a(*SKIP)b)..",[trim]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","(?!a(*SKIP)b)..",[{parts,
+ 2}]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","(?!a(*SKIP)b)..",[]))),
+ ok.
+run54() ->
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?(?!a(*SKIP)b))",[trim]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?(?!a(*SKIP)b))",[{parts,
+ 2}]))),
+ <<"ac">> = iolist_to_binary(join(re:split("ac","^(?(?!a(*SKIP)b))",[]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","^(?!a(*PRUNE)b)..",[trim]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","^(?!a(*PRUNE)b)..",[{parts,
+ 2}]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","^(?!a(*PRUNE)b)..",[]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","(?!a(*PRUNE)b)..",[trim]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","(?!a(*PRUNE)b)..",[{parts,
+ 2}]))),
+ <<":d">> = iolist_to_binary(join(re:split("acd","(?!a(*PRUNE)b)..",[]))),
+ <<"">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc)",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc)",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("]","[abc[:x\\]pqr]",[]))),
-?line <<"">> = iolist_to_binary(join(re:split("p","[abc[:x\\]pqr]",[trim]))),
-?line <<":">> = iolist_to_binary(join(re:split("p","[abc[:x\\]pqr]",[{parts,
+ <<":">> = iolist_to_binary(join(re:split("ba","\\A.*?(?:a|bc)",[]))),
+ <<":CD">> = iolist_to_binary(join(re:split("CD","^(A(*THEN)B|C(*THEN)D)",[trim]))),
+ <<":CD:">> = iolist_to_binary(join(re:split("CD","^(A(*THEN)B|C(*THEN)D)",[{parts,
+ 2}]))),
+ <<":CD:">> = iolist_to_binary(join(re:split("CD","^(A(*THEN)B|C(*THEN)D)",[]))),
+ <<"">> = iolist_to_binary(join(re:split("1234","^\\d*\\w{4}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("1234","^\\d*\\w{4}",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("1234","^\\d*\\w{4}",[]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^\\d*\\w{4}",[trim]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^\\d*\\w{4}",[{parts,
+ 2}]))),
+ <<"123">> = iolist_to_binary(join(re:split("123","^\\d*\\w{4}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^[^b]*\\w{4}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^[^b]*\\w{4}",[{parts,
2}]))),
-?line <<":">> = iolist_to_binary(join(re:split("p","[abc[:x\\]pqr]",[]))),
-ok.
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^[^b]*\\w{4}",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^[^b]*\\w{4}",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^[^b]*\\w{4}",[{parts,
+ 2}]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^[^b]*\\w{4}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^[^b]*\\w{4}",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^[^b]*\\w{4}",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^[^b]*\\w{4}",[caseless]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^[^b]*\\w{4}",[caseless,
+ trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^[^b]*\\w{4}",[caseless,
+ {parts,
+ 2}]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^[^b]*\\w{4}",[caseless]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^a*\\w{4}",[trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w{4}",[{parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w{4}",[]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^a*\\w{4}",[trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^a*\\w{4}",[{parts,
+ 2}]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^a*\\w{4}",[]))),
+ <<"">> = iolist_to_binary(join(re:split("aaaa","^a*\\w{4}",[caseless,
+ trim]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w{4}",[caseless,
+ {parts,
+ 2}]))),
+ <<":">> = iolist_to_binary(join(re:split("aaaa","^a*\\w{4}",[caseless]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^a*\\w{4}",[caseless,
+ trim]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^a*\\w{4}",[caseless,
+ {parts,
+ 2}]))),
+ <<"aaa">> = iolist_to_binary(join(re:split("aaa","^a*\\w{4}",[caseless]))),
+ ok.
diff --git a/lib/stdlib/test/run_pcre_tests.erl b/lib/stdlib/test/run_pcre_tests.erl
index 78b4803fc8..c4a8afc092 100644
--- a/lib/stdlib/test/run_pcre_tests.erl
+++ b/lib/stdlib/test/run_pcre_tests.erl
@@ -468,25 +468,26 @@ stru([{Line,<<Ch,Re0/binary>>}|T0]) ->
{NewRe,<< Ch, Options/binary >>} = end_of_re(Ch,Re),
case interpret_options_x(backstrip(frontstrip(Options)),NewRe) of
{Olist,<<>>} ->
+ U = lists:member(unicode,Olist),
case T of
[{_,<<$-,_/binary>>}|Con] ->
%Debug output, we skip those
%io:format("Skipping debug (~w)~n",[Line]),
TmpT = skip_debug(Con),
- {NewT,Matches} = stru2(TmpT),
+ {NewT,Matches} = stru2(TmpT,U),
[{NewRe,Line,Olist,Matches}|stru(NewT)];
[{_,<<$C,$a,$p,$t,$u,$r,$i,$n,$g,_/binary>>}|_] ->
NewT0 = skip_extra_info(T),
- {NewT,Matches} = stru2(NewT0),
+ {NewT,Matches} = stru2(NewT0,U),
[{NewRe,Line,Olist,Matches}|stru(NewT)];
[{_,<<Bla,_/binary>>}|_] when Bla =/= $ ->
%io:format("Skipping blabla (~w)~n",[Line]),
NewT = skip_until_empty(T),
stru(NewT);
_ ->
- {NewT,Matches} = stru2(T),
+ {NewT,Matches} = stru2(T,U),
%erlang:display({NewRe,Line,Olist,Matches}),
- Matches1 = case lists:member(unicode,Olist) of
+ Matches1 = case U of
true ->
Matches ++
[ {unicode:characters_to_list(E1,unicode),E2,E3,E4} ||
@@ -498,14 +499,7 @@ stru([{Line,<<Ch,Re0/binary>>}|T0]) ->
[{NewRe,Line,Olist,Matches1}|stru(NewT)]
end;
{_,Rest} ->
-%% case T of
-%% [{_,<<Bla,_/binary>>}|_] when Bla =/= $ ->
-%% io:format("Skipping blabla (~w)~n",[Line]);
-%% _ ->
-%% ok
-%% end,
NewT = skip_until_empty(T),
- %{NewT,_Matches} = stru2(T),
info("Skipping options ~s for now (~w)~n",[binary_to_list(Rest),Line]),
case NewT of
[{Li,_}|_] ->
@@ -568,10 +562,16 @@ tr_option($g) ->
tr_option(_) ->
false.
+
interpret_options(<<$<,Rest0/binary>>) ->
{Option,Rest} = pinch_cr(Rest0),
- {Olist,NRest} = interpret_options(Rest),
- {[Option | Olist], NRest};
+ case Option of
+ {not_supported,{newline,_Offender}} ->
+ {[],<<$<,Rest0/binary>>};
+ _ ->
+ {Olist,NRest} = interpret_options(Rest),
+ {[Option | Olist], NRest}
+ end;
interpret_options(<<$L,$f,$r,$_,$F,$R,Rest/binary>>) ->
info("Accepting (and ignoring) french locale~n",[]),
{Olist,NRest} = interpret_options(Rest),
@@ -603,13 +603,11 @@ backslash_end(<<_>>) ->
backslash_end(<<_,R/binary>>) ->
backslash_end(R).
-%stru2([<<$ ,$ ,$ ,$ , $*,$*,$*,$ ,_/binary>> | T]) ->
-% stru2(T);
-stru2([{Line,<<$ ,Rest/binary>>} | T]) ->
+stru2([{Line,<<$ ,Rest/binary>>} | T],U) ->
% A challenge
- case (catch responses(T)) of
+ case (catch responses(T,U)) of
{NewT,Rlist} ->
- {NewNewT,StrList} = stru2(NewT),
+ {NewNewT,StrList} = stru2(NewT,U),
%% Hack...
FS = case backstrip(frontstrip(Rest)) of
<<"\\">> ->
@@ -624,7 +622,7 @@ stru2([{Line,<<$ ,Rest/binary>>} | T]) ->
OFS
end
end,
- {ExecOpts,NFS} = escape(FS),
+ {ExecOpts,NFS} = escape(FS,U),
case find_unsupported(ExecOpts) of
[] ->
{NewNewT,[{NFS,Line,ExecOpts,
@@ -641,30 +639,29 @@ stru2([{Line,<<$ ,Rest/binary>>} | T]) ->
{NewT,[]}
end;
-stru2(X) ->
+stru2(X,_) ->
{X,[]}.
-%responses([<< $ ,$ ,$ ,$ ,$*,$*,$*,$ ,_/binary>>|T]) ->
-% responses(T);
-responses([{_Line,<< X:2/binary,$:,$ ,Resp/binary>>}|T]) ->
- {NT,R2} = responses(T),
+
+responses([{_Line,<< X:2/binary,$:,$ ,Resp/binary>>}|T],U) ->
+ {NT,R2} = responses(T,U),
NX=list_to_integer(binary_to_list(frontstrip(X))),
- {NT,[{NX,escape2(Resp)} | R2]};
-responses([{_Line,<< X:3/binary,$:,$ ,Resp/binary>>}|T]) ->
- {NT,R2} = responses(T),
+ {NT,[{NX,escape2(Resp,U)} | R2]};
+responses([{_Line,<< X:3/binary,$:,$ ,Resp/binary>>}|T],U) ->
+ {NT,R2} = responses(T,U),
NX=list_to_integer(binary_to_list(frontstrip(X))),
- {NT,[{NX,escape2(Resp)} | R2]};
-responses([{_Line,<<$N,$o,$ ,$m,$a,$t,$c,$h,_/binary>>}|T]) ->
+ {NT,[{NX,escape2(Resp,U)} | R2]};
+responses([{_Line,<<$N,$o,$ ,$m,$a,$t,$c,$h,_/binary>>}|T],_) ->
{T,nomatch};
-responses([{Line,<<$ ,No,Ch,_/binary>>}|T]) when No >= $0, No =< $9, Ch >= $A, Ch =< $Z ->
+responses([{Line,<<$ ,No,Ch,_/binary>>}|T],U) when No >= $0, No =< $9, Ch >= $A, Ch =< $Z ->
info("Skipping strange debug response at line ~p~n",[Line]),
- responses(T);
-responses([{Line,<<$ ,$ ,Ch,_/binary>>}|T]) when Ch =:= $G; Ch =:= $C ->
+ responses(T,U);
+responses([{Line,<<$ ,$ ,Ch,_/binary>>}|T],U) when Ch =:= $G; Ch =:= $C ->
info("Skipping stranger debug response at line ~p~n",[Line]),
- responses(T);
-responses([{Line,<<C,_/binary>>=X}|_]) when C =/= $ ->
+ responses(T,U);
+responses([{Line,<<C,_/binary>>=X}|_],_) when C =/= $ ->
info("Offending response line(~w)! ~p~n",[Line,X]),
throw(fail);
-responses(X) ->
+responses(X,_) ->
{X,[]}.
@@ -753,24 +750,38 @@ splitby(Ch,<<Ch,Rest/binary>>,Acc) ->
{Acc,Rest};
splitby(Ch,<<OCh,Rest/binary>>,Acc) ->
splitby(Ch,Rest,<<Acc/binary,OCh>>).
+
+pick_number(N,<<Ch:8,Rest/binary>>) when Ch >= $0, Ch =< $9 ->
+ pick_number(N*10+(Ch - $0),Rest);
+pick_number(N,Rest) ->
+ {N,Rest}.
+
+pick_offset(Rest) ->
+ {Int,NRest} = pick_number(0,Rest),
+ {{offset,Int},NRest}.
-escape(<<>>) ->
+escape(<<>>,_) ->
{[],<<>>};
-escape(<<$\\, Ch, Rest/binary>>) when Ch >= $A, Ch =< $Z; Ch =:= $? ->
+escape(<<$\\, Ch, Rest/binary>>,U) when Ch >= $A, Ch =< $Z; Ch =:= $? ->
%Options in the string...
NewOpts = eopt(Ch),
- {MoreOpts,Tail} = escape(Rest),
+ {MoreOpts,Tail} = escape(Rest,U),
{NewOpts ++ MoreOpts,Tail};
-escape(<<$\\, $<, Rest/binary>>) ->
+escape(<<$\\, $>, Rest/binary>>,U) ->
+ %Offset Options in the string...
+ {NewOpt,NewRest} = pick_offset(Rest),
+ {MoreOpts,Tail} = escape(NewRest,U),
+ {[NewOpt|MoreOpts],Tail};
+escape(<<$\\, $<, Rest/binary>>,U) ->
%CR Options in the string...
{NewOpt,NewRest} = pinch_cr(Rest),
- {MoreOpts,Tail} = escape(NewRest),
+ {MoreOpts,Tail} = escape(NewRest,U),
{[NewOpt|MoreOpts],Tail};
-escape(<<$\\, Ch, Rest/binary>>) ->
+escape(<<$\\, Ch, Rest/binary>>,U) ->
{C,NR} = case single_esc(Ch) of
no ->
- case multi_esc(<<Ch,Rest/binary>>) of
+ case multi_esc(<<Ch,Rest/binary>>,U) of
{CharBin,NewRest} ->
{CharBin,NewRest};
no ->
@@ -780,30 +791,28 @@ escape(<<$\\, Ch, Rest/binary>>) ->
%erlang:display({escape,CCC}),
{<<CCC>>,Rest}
end,
- {MoreOpts,Tail} = escape(NR),
+ {MoreOpts,Tail} = escape(NR,U),
{MoreOpts,<<C/binary,Tail/binary>>};
-%escape(<<$\\,Rest/binary>>) ->
-% escape(<<Rest/binary>>);
-escape(<<Ch,Rest/binary>>) ->
- {X,RR} = escape(<<Rest/binary>>),
+escape(<<Ch,Rest/binary>>,U) ->
+ {X,RR} = escape(<<Rest/binary>>,U),
{X,<<Ch,RR/binary>>};
-escape(Any) ->
+escape(Any,_) ->
{[],Any}.
-escape2(<<>>) ->
+escape2(<<>>,_) ->
<<>>;
-escape2(<<$\\, Ch, Rest/binary>>) ->
- {C,NR} = case multi_esc(<<Ch,Rest/binary>>) of
+escape2(<<$\\, Ch, Rest/binary>>,U) ->
+ {C,NR} = case multi_esc(<<Ch,Rest/binary>>,U) of
{CharBin,NewRest} ->
{CharBin,NewRest};
no ->
{<<$\\>>,<<Ch,Rest/binary>>}
end,
- Tail = escape2(NR),
+ Tail = escape2(NR,U),
<<C/binary,Tail/binary>>;
-escape2(<<Ch,Rest/binary>>) ->
- RR = escape2(<<Rest/binary>>),
+escape2(<<Ch,Rest/binary>>,U) ->
+ RR = escape2(<<Rest/binary>>,U),
<<Ch,RR/binary>>;
-escape2(Any) ->
+escape2(Any,_) ->
Any.
@@ -848,28 +857,34 @@ list_to_utf8(L) when is_list(L); is_binary(L) ->
list_to_utf8({Tag,_,_}) when Tag =:= incomplete ; Tag =:= error ->
throw(skip).
-multi_esc(<<M,N,O,Rest/binary>>)
+multi_esc(<<M,N,O,Rest/binary>>,_)
when M >= $0, M =< $7, N >= $0, N =< $7, O >= $0, O =< $7 ->
Cha = ((M - $0) bsl 6) bor ((N - $0) bsl 3) bor (O - $0),
{<<Cha>>,Rest};
-multi_esc(<<N,O,Rest/binary>>)
+multi_esc(<<N,O,Rest/binary>>,_)
when N >= $0, N =< $7, O >= $0, O =< $7 ->
Cha = ((N - $0) bsl 3) bor (O - $0),
{<<Cha>>,Rest};
-multi_esc(<<O,Rest/binary>>)
+multi_esc(<<O,Rest/binary>>,_)
when O >= $0, O =< $7 ->
Cha = (O - $0),
{<<Cha>>,Rest};
-multi_esc(<<$x,${,N,O,$},Rest/binary>>)
+multi_esc(<<$x,${,N,O,$},Rest/binary>>,Unicode)
when ((((N >= $0) and (N =< $9)) or ((N >= $A) and (N =< $F)) or
((N >= $a) and (N =< $f))) and
(((O >= $0) and (O =< $9)) or ((O >= $A) and (O =< $F)) or
((O >= $a) and (O =< $f)))) ->
+ %io:format("~p(~p)~n",[<<$x,${,N,O,$}>>,get(unicode)]),
Cha = (trx(N) bsl 4) bor trx(O),
- {int_to_utf8(Cha),Rest};
-multi_esc(<<$x,${,N,O,P,$},Rest/binary>>)
+ case Unicode of
+ false ->
+ {<<Cha:8>>,Rest};
+ _ ->
+ {int_to_utf8(Cha),Rest}
+ end;
+multi_esc(<<$x,${,N,O,P,$},Rest/binary>>,_)
when ((((N >= $0) and (N =< $9)) or ((N >= $A) and (N =< $F)) or
((N >= $a) and (N =< $f))) and
(((O >= $0) and (O =< $9)) or ((O >= $A) and (O =< $F)) or
@@ -878,7 +893,7 @@ multi_esc(<<$x,${,N,O,P,$},Rest/binary>>)
((P >= $a) and (P =< $f)))) ->
Cha = (trx(N) bsl 8) bor (trx(O) bsl 4) bor trx(P),
{int_to_utf8(Cha),Rest};
-multi_esc(<<$x,${,N,O,P,Q,$},Rest/binary>>)
+multi_esc(<<$x,${,N,O,P,Q,$},Rest/binary>>,_)
when ((((N >= $0) and (N =< $9)) or ((N >= $A) and (N =< $F)) or
((N >= $a) and (N =< $f))) and
(((O >= $0) and (O =< $9)) or ((O >= $A) and (O =< $F)) or
@@ -889,7 +904,7 @@ multi_esc(<<$x,${,N,O,P,Q,$},Rest/binary>>)
((Q >= $a) and (Q =< $f)))) ->
Cha = (trx(N) bsl 12) bor (trx(O) bsl 8) bor (trx(P) bsl 4) bor trx(Q),
{int_to_utf8(Cha),Rest};
-multi_esc(<<$x,${,N,O,P,Q,R,$},Rest/binary>>)
+multi_esc(<<$x,${,N,O,P,Q,R,$},Rest/binary>>,_)
when ((((N >= $0) and (N =< $9)) or ((N >= $A) and (N =< $F)) or
((N >= $a) and (N =< $f))) and
(((O >= $0) and (O =< $9)) or ((O >= $A) and (O =< $F)) or
@@ -902,7 +917,7 @@ multi_esc(<<$x,${,N,O,P,Q,R,$},Rest/binary>>)
((R >= $a) and (R =< $f)))) ->
Cha = (trx(N) bsl 16) bor (trx(O) bsl 12) bor (trx(P) bsl 8) bor (trx(Q) bsl 4) bor trx(R),
{int_to_utf8(Cha),Rest};
-multi_esc(<<$x,${,N,O,P,Q,R,S,$},Rest/binary>>)
+multi_esc(<<$x,${,N,O,P,Q,R,S,$},Rest/binary>>,_)
when ((((N >= $0) and (N =< $9)) or ((N >= $A) and (N =< $F)) or
((N >= $a) and (N =< $f))) and
(((O >= $0) and (O =< $9)) or ((O >= $A) and (O =< $F)) or
@@ -917,19 +932,19 @@ multi_esc(<<$x,${,N,O,P,Q,R,S,$},Rest/binary>>)
((S >= $a) and (S =< $f)))) ->
Cha = (trx(N) bsl 20) bor (trx(O) bsl 16) bor (trx(P) bsl 12) bor (trx(Q) bsl 8) bor (trx(R) bsl 4) bor trx(S),
{int_to_utf8(Cha),Rest};
-multi_esc(<<$x,N,O,Rest/binary>>)
+multi_esc(<<$x,N,O,Rest/binary>>,_)
when ((((N >= $0) and (N =< $9)) or ((N >= $A) and (N =< $F)) or
((N >= $a) and (N =< $f))) and
(((O >= $0) and (O =< $9)) or ((O >= $A) and (O =< $F)) or
((O >= $a) and (O =< $f)))) ->
Cha = (trx(N) bsl 4) bor trx(O),
{<<Cha>>,Rest};
-multi_esc(<<$x,N,Rest/binary>>)
+multi_esc(<<$x,N,Rest/binary>>,_)
when (((N >= $0) and (N =< $9)) or ((N >= $A) and (N =< $F)) or
((N >= $a) and (N =< $f))) ->
Cha = trx(N),
{<<Cha>>,Rest};
-multi_esc(_) ->
+multi_esc(_,_) ->
no.
single_esc($") ->
@@ -980,15 +995,14 @@ gen_split_test(OneFile) ->
Lines = splitfile(0,Bin,1),
Structured = stru(Lines),
PerlShellScript = OneFile++"_split_test_gen.sh",
- dumpsplit(Structured,PerlShellScript),
- PerlShellScript,
+ FunList = dumpsplit(Structured,PerlShellScript),
ErlModule = "re_"++filename:basename(OneFile)++"_split_test",
ErlFileName = ErlModule++".erl",
{ok,F}= file:open(ErlFileName,[write]),
io:format(F,"-module(~s).~n",[ErlModule]),
io:format(F,"-compile(export_all).~n",[]),
io:format(F,"-compile(no_native).~n",[]),
- io:format(F,"-include(\"test_server.hrl\").~n",[]),
+ %io:format(F,"-include(\"test_server.hrl\").~n",[]),
%io:format(F,"-define(line,erlang:display(?LINE),).~n",[]),
io:format(F,"%% This file is generated by running ~w:gen_split_test(~p)~n",
[?MODULE,OneFile]),
@@ -996,62 +1010,72 @@ gen_split_test(OneFile) ->
io:format(F,"join([A]) -> [A];~n",[]),
io:format(F,"join([H|T]) -> [H,<<\":\">>|join(T)].~n",[]),
io:format(F,"run() ->~n",[]),
+ [ io:format(F," ~s(),~n",[FunName]) || FunName <- FunList ],
file:close(F),
os:cmd("sh "++ PerlShellScript++" 2>/dev/null >> "++ErlFileName),
- {ok,F2}= file:open(ErlFileName,[append]),
- io:format(F2,"ok.~n",[]),
- file:close(F2),
io:format("~s~n",[os:cmd("wc -l "++ErlFileName)]),
ok.
dumpsplit(S,Fname) ->
{ok,F}= file:open(Fname,[write]),
- dodumpsplit(F,S),
- file:close(F).
-
-dodumpsplit(_,[]) ->
- ok;
-dodumpsplit(F,[H|T]) ->
+ Res = dodumpsplit(F,S,0,[],0),
+ file:close(F),
+ Res.
+
+dodumpsplit(F,[],_,Acc,_) ->
+ io:format(F,"echo \" ok.\"~n",[]),
+ lists:reverse(Acc);
+dodumpsplit(F,L,0,Acc,FunNum) ->
+ NewFun = "run"++integer_to_list(FunNum),
+ io:format(F,"echo \" ok.\"~n",[]),
+ io:format(F,"echo \"~s() ->\"~n",[NewFun]),
+ dodumpsplit(F,L,20,[NewFun|Acc],FunNum+1);
+dodumpsplit(F,[H|T],N,Acc,FunNum) ->
dumponesplit(F,H),
- dodumpsplit(F,T).
+ dodumpsplit(F,T,N-1,Acc,FunNum).
-dumponesplit(F,{RE,_,O,TS}) ->
+dumponesplit(F,{RE,Line,O,TS}) ->
[begin
{NO,_} = pick_exec_options(O++Op),
SSS = opt_to_string(NO),
- io:format(F,"perl -e '$x = join(\":\",split(/~s/~s,\"~s\")); "
- "$x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; "
- "print \"?line <<\\\"$x\\\">> = "
- "iolist_to_binary(join(re:split(\\\"~s\\\","
- "\\\"~s\\\",~p))), \\n\";'~n",
- [zsafe(safe(RE)),
- SSS,
- ysafe(safe(Str)),
- dsafe(safe(Str)),
- dsafe2(safe(RE)),
- NO++[trim]]),
- io:format(F,"perl -e '$x = join(\":\",split(/~s/~s,\"~s\",2)); "
- "$x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; "
- "print \"?line <<\\\"$x\\\">> = "
- "iolist_to_binary(join(re:split(\\\"~s\\\","
- "\\\"~s\\\",~p))), \\n\";'~n",
- [zsafe(safe(RE)),
- SSS,
- ysafe(safe(Str)),
- dsafe(safe(Str)),
- dsafe2(safe(RE)),
- NO++[{parts,2}]]),
- io:format(F,"perl -e '$x = join(\":\",split(/~s/~s,\"~s\",-1)); "
- "$x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; "
- "print \"?line <<\\\"$x\\\">> = "
- "iolist_to_binary(join(re:split(\\\"~s\\\","
- "\\\"~s\\\",~p))), \\n\";'~n",
- [zsafe(safe(RE)),
- SSS,
- ysafe(safe(Str)),
- dsafe(safe(Str)),
- dsafe2(safe(RE)),
- NO])
+ LLL = unicode:characters_to_list(RE),
+ case (catch iolist_to_binary(LLL)) of
+ X when is_binary(X) ->
+ io:format(F,"perl -e '$x = join(\":\",split(/~s/~s,\"~s\")); "
+ "$x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; "
+ "print \" <<\\\"$x\\\">> = "
+ "iolist_to_binary(join(re:split(\\\"~s\\\","
+ "\\\"~s\\\",~p))), \\n\";'~n",
+ [zsafe(safe(RE)),
+ SSS,
+ ysafe(safe(Str)),
+ dsafe(safe(Str)),
+ dsafe2(safe(RE)),
+ NO++[trim]]),
+ io:format(F,"perl -e '$x = join(\":\",split(/~s/~s,\"~s\",2)); "
+ "$x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; "
+ "print \" <<\\\"$x\\\">> = "
+ "iolist_to_binary(join(re:split(\\\"~s\\\","
+ "\\\"~s\\\",~p))), \\n\";'~n",
+ [zsafe(safe(RE)),
+ SSS,
+ ysafe(safe(Str)),
+ dsafe(safe(Str)),
+ dsafe2(safe(RE)),
+ NO++[{parts,2}]]),
+ io:format(F,"perl -e '$x = join(\":\",split(/~s/~s,\"~s\",-1)); "
+ "$x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; "
+ "print \" <<\\\"$x\\\">> = "
+ "iolist_to_binary(join(re:split(\\\"~s\\\","
+ "\\\"~s\\\",~p))), \\n\";'~n",
+ [zsafe(safe(RE)),
+ SSS,
+ ysafe(safe(Str)),
+ dsafe(safe(Str)),
+ dsafe2(safe(RE)),
+ NO]);
+ _ -> io:format("Found fishy character at line ~w~n",[Line])
+ end
end ||
{Str,_,Op,_} <- TS].
@@ -1063,42 +1087,51 @@ gen_repl_test(OneFile) ->
Lines = splitfile(0,Bin,1),
Structured = stru(Lines),
PerlShellScript = OneFile++"_replacement_test_gen.sh",
- dump(Structured,PerlShellScript),
+ FunList = dump(Structured,PerlShellScript),
ErlModule = "re_"++filename:basename(OneFile)++"_replacement_test",
ErlFileName = ErlModule++".erl",
{ok,F}= file:open(ErlFileName,[write]),
io:format(F,"-module(~s).~n",[ErlModule]),
io:format(F,"-compile(export_all).~n",[]),
io:format(F,"-compile(no_native).~n",[]),
- io:format(F,"-include(\"test_server.hrl\").~n",[]),
+ %io:format(F,"-include(\"test_server.hrl\").~n",[]),
io:format(F,"%% This file is generated by running ~w:gen_repl_test(~p)~n",
[?MODULE,OneFile]),
io:format(F,"run() ->~n",[]),
+ [ io:format(F," ~s(),~n",[FunName]) || FunName <- FunList ],
file:close(F),
os:cmd("sh "++ PerlShellScript++" 2>/dev/null >> "++ErlFileName),
- {ok,F2}= file:open(ErlFileName,[append]),
- io:format(F2,"ok.~n",[]),
- file:close(F2),
io:format("~s~n",[os:cmd("wc -l "++ErlFileName)]),
ok.
dump(S,Fname) ->
{ok,F}= file:open(Fname,[write]),
- dodump(F,S),
- file:close(F).
+ Res = dodump(F,S,0,[],0),
+ file:close(F),
+ Res.
-dodump(_,[]) ->
- ok;
-dodump(F,[H|T]) ->
+dodump(F,[],_,Acc,_) ->
+ io:format(F,"echo \" ok.\"~n",[]),
+ lists:reverse(Acc);
+dodump(F,L,0,Acc,FunNum) ->
+ NewFun = "run"++integer_to_list(FunNum),
+ io:format(F,"echo \" ok.\"~n",[]),
+ io:format(F,"echo \"~s() ->\"~n",[NewFun]),
+ dodump(F,L,20,[NewFun|Acc],FunNum+1);
+dodump(F,[H|T],N,Acc,FunNum) ->
dumpone(F,H),
- dodump(F,T).
+ dodump(F,T,N-1,Acc,FunNum).
-dumpone(F,{RE,_,O,TS}) ->
+dumpone(F,{RE,Line,O,TS}) ->
[begin
{NO,_} = pick_exec_options(O++Op),
SSS = opt_to_string(NO),
RS = ranstring(),
- io:format(F,"perl -e '$x = \"~s\"; $x =~~ s/~s/~s/~s; $x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; print \"?line <<\\\"$x\\\">> = iolist_to_binary(re:replace(\\\"~s\\\",\\\"~s\\\",\\\"~s\\\",~p)), \\n\";'~n",[ysafe(safe(Str)),zsafe(safe(RE)),perlify(binary_to_list(RS)),SSS,dsafe(safe(Str)),dsafe(safe(RE)),xsafe(RS),NO]),
- io:format(F,"perl -e '$x = \"~s\"; $x =~~ s/~s/~s/g~s; $x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; print \"?line <<\\\"$x\\\">> = iolist_to_binary(re:replace(\\\"~s\\\",\\\"~s\\\",\\\"~s\\\",~p)), \\n\";'~n",[ysafe(safe(Str)),zsafe(safe(RE)),perlify(binary_to_list(RS)),SSS,dsafe(safe(Str)),dsafe(safe(RE)),xsafe(RS),NO++[global]])
+ LLL = unicode:characters_to_list(RE),
+ case (catch iolist_to_binary(LLL)) of
+ X when is_binary(X) -> io:format(F,"perl -e '$x = \"~s\"; $x =~~ s/~s/~s/~s; $x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; print \" <<\\\"$x\\\">> = iolist_to_binary(re:replace(\\\"~s\\\",\\\"~s\\\",\\\"~s\\\",~p)), \\n\";'~n",[ysafe(safe(Str)),zsafe(safe(RE)),perlify(binary_to_list(RS)),SSS,dsafe(safe(Str)),dsafe(safe(RE)),xsafe(RS),NO]),
+ io:format(F,"perl -e '$x = \"~s\"; $x =~~ s/~s/~s/g~s; $x =~~ s/\\\\/\\\\\\\\/g; $x =~~ s/\\\"/\\\\\"/g; print \" <<\\\"$x\\\">> = iolist_to_binary(re:replace(\\\"~s\\\",\\\"~s\\\",\\\"~s\\\",~p)), \\n\";'~n",[ysafe(safe(Str)),zsafe(safe(RE)),perlify(binary_to_list(RS)),SSS,dsafe(safe(Str)),dsafe(safe(RE)),xsafe(RS),NO++[global]]);
+ _ -> io:format("Found fishy character at line ~w~n",[Line])
+ end
end ||
{Str,_,Op,_} <- TS].
diff --git a/lib/test_server/doc/src/notes.xml b/lib/test_server/doc/src/notes.xml
index f3d4bc201a..bc83231950 100644
--- a/lib/test_server/doc/src/notes.xml
+++ b/lib/test_server/doc/src/notes.xml
@@ -32,6 +32,62 @@
<file>notes.xml</file>
</header>
+<section><title>Test_Server 3.6.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Test Server installed an error handler (test_server_h)
+ only to be able to write the name of the current test
+ case to stdout whenever it received an error- or progress
+ report. This functionality was not useful and has been
+ removed. The built-in Common Test hook, cth_log_redirect,
+ has instead been improved to now also tag all error- and
+ progress reports in the log with suite-, group-, and/or
+ test case name.</p>
+ <p>
+ Own Id: OTP-11263 Aux Id: seq12251 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ A new log, the "Pre- and Post Test I/O Log", has been
+ introduced, which makes it possible to capture error- and
+ progress reports, as well as printouts made with ct:log/2
+ and ct:pal/2, before and after a test run. (Some minor
+ improvements of the logging system have been made at the
+ same time). Links to the new log are found on the Common
+ Test Framework Log page. The Common Test User's Guide has
+ been updated with information about the new log and also
+ with a new section on how to synchronize external
+ applications with Common Test by means of the CT Hook
+ init and terminate functions.</p>
+ <p>
+ Own Id: OTP-11272</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Known Bugs and Problems</title>
+ <list>
+ <item>
+ <p>
+ Test Server: Report auto_skipped in major log.</p>
+ <p>
+ Own Id: OTP-11297</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Test_Server 3.6.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/test_server/src/Makefile b/lib/test_server/src/Makefile
index ebc5f5b71b..ab4dd4d95d 100644
--- a/lib/test_server/src/Makefile
+++ b/lib/test_server/src/Makefile
@@ -45,7 +45,6 @@ MODULES= test_server_ctrl \
test_server_node \
test_server \
test_server_sup \
- test_server_h \
erl2html2
TS_MODULES= \
diff --git a/lib/test_server/src/test_server.app.src b/lib/test_server/src/test_server.app.src
index 163f370a47..42e78ed279 100644
--- a/lib/test_server/src/test_server.app.src
+++ b/lib/test_server/src/test_server.app.src
@@ -23,7 +23,6 @@
erl2html2,
test_server_ctrl,
test_server,
- test_server_h,
test_server_io,
test_server_node,
test_server_sup
diff --git a/lib/test_server/src/test_server.erl b/lib/test_server/src/test_server.erl
index c350f758ce..6ddb2b615f 100644
--- a/lib/test_server/src/test_server.erl
+++ b/lib/test_server/src/test_server.erl
@@ -389,7 +389,6 @@ run_test_case_apply({CaseNum,Mod,Func,Args,Name,
os:putenv("VALGRIND_LOGFILE_INFIX",atom_to_list(Mod)++"."++
atom_to_list(Func)++"-")
end,
- test_server_h:testcase({Mod,Func,1}),
ProcBef = erlang:system_info(process_count),
Result = run_test_case_apply(Mod, Func, Args, Name, RunInit,
TimetrapData),
diff --git a/lib/test_server/src/test_server_ctrl.erl b/lib/test_server/src/test_server_ctrl.erl
index ffa21d054c..d0f31af198 100644
--- a/lib/test_server/src/test_server_ctrl.erl
+++ b/lib/test_server/src/test_server_ctrl.erl
@@ -479,12 +479,6 @@ init([]) ->
test_server_sup:call_trace(TraceSpec)
end,
process_flag(trap_exit, true),
- case lists:keysearch(sasl, 1, application:which_applications()) of
- {value,_} ->
- test_server_h:install();
- false ->
- ok
- end,
%% copy format_exception setting from init arg to application environment
case init:get_argument(test_server_format_exception) of
{ok,[[TSFE]]} ->
@@ -1067,12 +1061,6 @@ terminate(_Reason, State) ->
end,
kill_all_jobs(State#state.jobs),
test_server_node:kill_nodes(),
- case lists:keysearch(sasl, 1, application:which_applications()) of
- {value,_} ->
- test_server_h:restore();
- _ ->
- ok
- end,
ok.
kill_all_jobs([{_Name,JobPid}|Jobs]) ->
@@ -1183,7 +1171,13 @@ init_tester(Mod, Func, Args, Dir, Name, {_,_,MinLev}=Levels,
"<td>~.3fs</td><td><b>~ts</b></td><td>~w Ok, ~w Failed~ts of ~w</td></tr>\n"
"</tfoot>\n",
[Time,SuccessStr,OkN,FailedN,SkipStr,OkN+FailedN+SkippedN]),
- test_server_io:stop([major,html,unexpected_io]).
+
+ test_server_io:stop([major,html,unexpected_io]),
+ {UnexpectedIoName,UnexpectedIoFooter} = get(test_server_unexpected_footer),
+ {ok,UnexpectedIoFd} = open_html_file(UnexpectedIoName, [append]),
+ io:put_chars(UnexpectedIoFd, "\n</pre>\n"++UnexpectedIoFooter),
+ file:close(UnexpectedIoFd),
+ ok.
report_severe_error(Reason) ->
test_server_sup:framework_call(report, [severe_error,Reason]).
@@ -1642,15 +1636,13 @@ start_log_file() ->
FilenameMode),
ok = write_file(?last_file, TestDir1 ++ "\n", FilenameMode),
put(test_server_log_dir_base,TestDir1),
+
MajorName = filename:join(TestDir1, ?suitelog_name),
HtmlName = MajorName ++ ?html_ext,
UnexpectedName = filename:join(TestDir1, ?unexpected_io_log),
+
{ok,Major} = open_utf8_file(MajorName),
{ok,Html} = open_html_file(HtmlName),
- {ok,Unexpected} = open_html_file(UnexpectedName),
- test_server_io:set_fd(major, Major),
- test_server_io:set_fd(html, Html),
- test_server_io:set_fd(unexpected_io, Unexpected),
{UnexpHeader,UnexpFooter} =
case test_server_sup:framework_call(get_html_wrapper,
@@ -1663,8 +1655,17 @@ start_log_file() ->
{xhtml,UH,UF} ->
{UH,UF}
end,
- io:put_chars(Unexpected, UnexpHeader++"\n<pre>\n"),
- put(test_server_unexpected_footer,UnexpFooter),
+
+ {ok,Unexpected} = open_html_file(UnexpectedName),
+ io:put_chars(Unexpected, [UnexpHeader,
+ xhtml("<br>\n<h2>Unexpected I/O</h2>",
+ "<br />\n<h3>Unexpected I/O</h3>"),
+ "\n<pre>\n"]),
+ put(test_server_unexpected_footer,{UnexpectedName,UnexpFooter}),
+
+ test_server_io:set_fd(major, Major),
+ test_server_io:set_fd(html, Html),
+ test_server_io:set_fd(unexpected_io, Unexpected),
make_html_link(filename:absname(?last_test ++ ?html_ext),
HtmlName, filename:basename(Dir)),
@@ -5299,6 +5300,9 @@ html_header(Title) ->
open_html_file(File) ->
open_utf8_file(File).
+open_html_file(File,Opts) ->
+ open_utf8_file(File,Opts).
+
write_html_file(File,Content) ->
write_file(File,Content,utf8).
@@ -5307,6 +5311,9 @@ write_html_file(File,Content) ->
open_utf8_file(File) ->
file:open(File,[write,{encoding,utf8}]).
+open_utf8_file(File,Opts) ->
+ file:open(File,[{encoding,utf8}|Opts]).
+
%% Write a file with specified encoding
write_file(File,Content,latin1) ->
file:write_file(File,Content);
diff --git a/lib/test_server/src/test_server_h.erl b/lib/test_server/src/test_server_h.erl
deleted file mode 100644
index 24063ddb10..0000000000
--- a/lib/test_server/src/test_server_h.erl
+++ /dev/null
@@ -1,148 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(test_server_h).
--behaviour(gen_event).
-
-%% API
--export([install/0, restore/0]).
--export([testcase/1]).
-
-%% gen_event callbacks
--export([init/1, handle_event/2, handle_call/2,
- handle_info/2, terminate/2, code_change/3]).
-
--record(state, {kernel, sasl, testcase}).
-
-%%====================================================================
-%% API
-%%====================================================================
-
-install() ->
- case gen_event:add_handler(error_logger, ?MODULE, []) of
- ok ->
- error_logger:delete_report_handler(sasl_report_tty_h),
- gen_event:delete_handler(error_logger, error_logger_tty_h, []),
- ok;
- Error ->
- Error
- end.
-
-restore() ->
- gen_event:add_handler(error_logger, error_logger_tty_h, []),
- error_logger:add_report_handler(sasl_report_tty_h, all),
- gen_event:delete_handler(error_logger, ?MODULE, []).
-
-testcase(Testcase) ->
- gen_event:call(error_logger, ?MODULE, {set_testcase, Testcase}, 10*60*1000).
-
-%%====================================================================
-%% gen_event callbacks
-%%====================================================================
-
-init([]) ->
-
- %% error_logger_tty_h initialization
- User = set_group_leader(),
-
- %% sasl_report_tty_h initialization
- Type = all,
-
- {ok, #state{kernel={User, []}, sasl=Type}}.
-
-set_group_leader() ->
- case whereis(user) of
- User when is_pid(User) ->
- link(User),
- group_leader(User, self()),
- User;
- _ ->
- false
- end.
-
-handle_event({_Type, GL, _Msg}, State) when node(GL)/=node() ->
- {ok, State};
-handle_event({Tag, _GL, {_Pid, Type, _Report}} = Event, State) ->
- SASL = lists:keyfind(sasl, 1, application:which_applications()),
- case report_receiver(Tag, Type) of
- sasl when SASL /= false ->
- {ok,ErrLogType} = application:get_env(sasl, errlog_type),
- SReport = sasl_report:format_report(group_leader(), ErrLogType,
- tag_event(Event)),
- if is_list(SReport) ->
- tag(State#state.testcase),
- sasl_report_tty_h:handle_event(Event,
- State#state.sasl);
- true -> %% Report is an atom if no logging is to be done
- ignore
- end;
- sasl -> %% SASL not running
- ignore;
- kernel ->
- tag(State#state.testcase),
- error_logger_tty_h:handle_event(Event, State#state.kernel);
- none ->
- ignore
- end,
- {ok, State};
-handle_event(_Event, State) ->
- {ok, State}.
-
-handle_call({set_testcase, Testcase}, State) ->
- {ok, ok, State#state{testcase=Testcase}};
-handle_call(_Query, _State) ->
- {error, bad_query}.
-
-handle_info({emulator,GL,_Chars}=Event, State) when node(GL)==node() ->
- tag(State#state.testcase),
- error_logger_tty_h:handle_info(Event, State#state.kernel),
- {ok, State};
-handle_info(_Msg, State) ->
- {ok, State}.
-
-terminate(_Reason, _State) ->
- ok.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-report_receiver(error_report, supervisor_report) -> sasl;
-report_receiver(error_report, crash_report) -> sasl;
-report_receiver(info_report, progress) -> sasl;
-report_receiver(error, _) -> kernel;
-report_receiver(error_report, _) -> kernel;
-report_receiver(warning_msg, _) -> kernel;
-report_receiver(warning_report, _) -> kernel;
-report_receiver(info, _) -> kernel;
-report_receiver(info_msg, _) -> kernel;
-report_receiver(info_report,Tuple)
- when is_tuple(Tuple) andalso
- (element(1,Tuple)==ct_connection orelse
- element(1,Tuple)==conn_log) ->
- none;
-report_receiver(info_report, _) -> kernel;
-report_receiver(_, _) -> none.
-
-tag({M,F,A}) when is_atom(M), is_atom(F), is_integer(A) ->
- io:format(user, "~n=TESTCASE: ~w:~w/~w", [M,F,A]);
-tag(Testcase) ->
- io:format(user, "~n=TESTCASE: ~p", [Testcase]).
-
-tag_event(Event) ->
- {calendar:local_time(), Event}.
diff --git a/lib/test_server/src/test_server_io.erl b/lib/test_server/src/test_server_io.erl
index 73d4468bda..62af3d5b28 100644
--- a/lib/test_server/src/test_server_io.erl
+++ b/lib/test_server/src/test_server_io.erl
@@ -32,27 +32,39 @@
-export([start_link/0,stop/1,get_gl/1,set_fd/2,
start_transaction/0,end_transaction/0,
print_buffered/1,print/3,print_unexpected/1,
- set_footer/1,set_job_name/1,set_gl_props/1]).
+ set_footer/1,set_job_name/1,set_gl_props/1,
+ reset_state/0,finish/0]).
-export([init/1,handle_call/3,handle_info/2,terminate/2]).
--record(st, {fds, %Singleton fds (gb_tree)
- shared_gl :: pid(), %Shared group leader
- gls, %Group leaders (gb_set)
- io_buffering=false, %I/O buffering
- buffered, %Buffered I/O requests
- html_footer, %HTML footer
- job_name, %Name of current job.
- gl_props, %Properties for GL.
- stopping
+-record(st, {fds, % Singleton fds (gb_tree)
+ tags=[], % Known tag types
+ shared_gl :: pid(), % Shared group leader
+ gls, % Group leaders (gb_set)
+ io_buffering=false, % I/O buffering
+ buffered, % Buffered I/O requests
+ html_footer, % HTML footer
+ job_name, % Name of current job.
+ gl_props, % Properties for GL
+ phase, % Indicates current mode
+ offline_buffer, % Buffer I/O during startup
+ stopping, % Reply to when process stopped
+ pending_ops % Perform when process idle
}).
start_link() ->
- case gen_server:start_link({local,?MODULE}, ?MODULE, [], []) of
- {ok,Pid} ->
- {ok,Pid};
- Other ->
- Other
+ case whereis(?MODULE) of
+ undefined ->
+ case gen_server:start_link({local,?MODULE}, ?MODULE, [], []) of
+ {ok,Pid} ->
+ {ok,Pid};
+ Other ->
+ Other
+ end;
+ Pid ->
+ %% already running, reset the state
+ reset_state(),
+ {ok,Pid}
end.
stop(FilesToClose) ->
@@ -62,6 +74,9 @@ stop(FilesToClose) ->
group_leader(OldGL, self()),
ok.
+finish() ->
+ req(finish).
+
%% get_gl(Shared) -> Pid
%% Shared = boolean()
%% Pid = pid()
@@ -142,19 +157,27 @@ set_footer(Footer) ->
req({set_footer,Footer}).
%% set_job_name(Name)
+%%
%% Set a name for the currently running job. The name will be used
%% when printing to 'stdout'.
%%
+
set_job_name(Name) ->
req({set_job_name,Name}).
%% set_gl_props(PropList)
+%%
%% Set properties for group leader processes. When a group_leader process
%% is created, test_server_gl:set_props(PropList) will be called.
set_gl_props(PropList) ->
req({set_gl_props,PropList}).
+%% reset_state
+%%
+%% Reset the initial state
+reset_state() ->
+ req(reset_state).
%%% Internal functions.
@@ -167,7 +190,10 @@ init([]) ->
buffered=Empty,
html_footer="</body>\n</html>\n",
job_name="<name not set>",
- gl_props=[]}}.
+ gl_props=[],
+ phase=starting,
+ offline_buffer=[],
+ pending_ops=[]}}.
req(Req) ->
gen_server:call(?MODULE, Req, infinity).
@@ -178,9 +204,24 @@ handle_call({get_gl,false}, _From, #st{gls=Gls,gl_props=Props}=St) ->
{reply,Pid,St#st{gls=gb_sets:insert(Pid, Gls)}};
handle_call({get_gl,true}, _From, #st{shared_gl=Shared}=St) ->
{reply,Shared,St};
-handle_call({set_fd,Tag,Fd}, _From, #st{fds=Fds0}=St) ->
+handle_call({set_fd,Tag,Fd}, _From, #st{fds=Fds0,tags=Tags0,
+ offline_buffer=OfflineBuff}=St) ->
Fds = gb_trees:enter(Tag, Fd, Fds0),
- {reply,ok,St#st{fds=Fds}};
+ St1 = St#st{fds=Fds,tags=[Tag|lists:delete(Tag, Tags0)]},
+ OfflineBuff1 =
+ if OfflineBuff == [] ->
+ [];
+ true ->
+ %% Fd ready, print anything buffered for associated Tag
+ lists:filtermap(fun({T,From,Str}) when T == Tag ->
+ output(From, Tag, Str, St1),
+ false;
+ (_) ->
+ true
+ end, lists:reverse(OfflineBuff))
+ end,
+ {reply,ok,St1#st{phase=started,
+ offline_buffer=lists:reverse(OfflineBuff1)}};
handle_call({start_transaction,Pid}, _From, #st{io_buffering=Buffer0,
buffered=Buf0}=St) ->
Buf = case gb_trees:is_defined(Pid, Buf0) of
@@ -213,12 +254,15 @@ handle_call({set_job_name,Name}, _From, St) ->
handle_call({set_gl_props,Props}, _From, #st{shared_gl=Shared}=St) ->
test_server_gl:set_props(Shared, Props),
{reply,ok,St#st{gl_props=Props}};
-handle_call({stop,FdTags}, From, #st{fds=Fds,shared_gl=SGL,gls=Gls0}=St0) ->
- St = St0#st{gls=gb_sets:insert(SGL, Gls0),stopping=From},
- gc(St),
- %% Give the users of the surviving group leaders some
- %% time to finish.
- erlang:send_after(2000, self(), stop_group_leaders),
+handle_call(reset_state, From, #st{phase=stopping,pending_ops=Ops}=St) ->
+ %% can't reset during stopping phase, save op for later
+ Op = fun(NewSt) ->
+ {_,Result,NewSt1} = handle_call(reset_state, From, NewSt),
+ {Result,NewSt1}
+ end,
+ {noreply,St#st{pending_ops=[{From,Op}|Ops]}};
+handle_call(reset_state, _From, #st{fds=Fds,tags=Tags,gls=Gls,
+ offline_buffer=OfflineBuff}) ->
%% close open log files
lists:foreach(fun(Tag) ->
case gb_trees:lookup(Tag, Fds) of
@@ -227,8 +271,50 @@ handle_call({stop,FdTags}, From, #st{fds=Fds,shared_gl=SGL,gls=Gls0}=St0) ->
{value,Fd} ->
file:close(Fd)
end
- end, FdTags),
- {noreply,St}.
+ end, Tags),
+ GlList = gb_sets:to_list(Gls),
+ [test_server_gl:stop(GL) || GL <- GlList],
+ timer:sleep(100),
+ case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlList) of
+ [] ->
+ ok;
+ _ ->
+ timer:sleep(2000),
+ [exit(GL, kill) || GL <- GlList]
+ end,
+ Empty = gb_trees:empty(),
+ {ok,Shared} = test_server_gl:start_link(),
+ {reply,ok,#st{fds=Empty,shared_gl=Shared,gls=gb_sets:empty(),
+ io_buffering=gb_sets:empty(),
+ buffered=Empty,
+ html_footer="</body>\n</html>\n",
+ job_name="<name not set>",
+ gl_props=[],
+ phase=starting,
+ offline_buffer=OfflineBuff,
+ pending_ops=[]}};
+handle_call({stop,FdTags}, From, #st{fds=Fds0,tags=Tags0,
+ shared_gl=SGL,gls=Gls0}=St0) ->
+ St = St0#st{gls=gb_sets:insert(SGL, Gls0),phase=stopping,stopping=From},
+ gc(St),
+ %% close open log files
+ {Fds1,Tags1} = lists:foldl(fun(Tag, {Fds,Tags}) ->
+ case gb_trees:lookup(Tag, Fds) of
+ none ->
+ {Fds,Tags};
+ {value,Fd} ->
+ file:close(Fd),
+ {gb_trees:delete(Tag, Fds),
+ lists:delete(Tag, Tags)}
+ end
+ end, {Fds0,Tags0}, FdTags),
+ %% Give the users of the surviving group leaders some
+ %% time to finish.
+ erlang:send_after(1000, self(), stop_group_leaders),
+ {noreply,St#st{fds=Fds1,tags=Tags1}};
+handle_call(finish, From, St) ->
+ gen_server:reply(From, ok),
+ {stop,normal,St}.
handle_info({'EXIT',Pid,normal}, #st{gls=Gls0,stopping=From}=St) ->
Gls = gb_sets:delete_any(Pid, Gls0),
@@ -236,22 +322,40 @@ handle_info({'EXIT',Pid,normal}, #st{gls=Gls0,stopping=From}=St) ->
true ->
%% No more group leaders left.
gen_server:reply(From, ok),
- {stop,normal,St#st{gls=Gls,stopping=undefined}};
+ {noreply,St#st{gls=Gls,phase=stopping,stopping=undefined}};
false ->
%% Wait for more group leaders to finish.
- {noreply,St#st{gls=Gls}}
+ {noreply,St#st{gls=Gls,phase=stopping}}
end;
handle_info({'EXIT',_Pid,Reason}, _St) ->
exit(Reason);
handle_info(stop_group_leaders, #st{gls=Gls}=St) ->
%% Stop the remaining group leaders.
- [test_server_gl:stop(GL) || GL <- gb_sets:to_list(Gls)],
- erlang:send_after(2000, self(), kill_group_leaders),
+ GlPids = gb_sets:to_list(Gls),
+ [test_server_gl:stop(GL) || GL <- GlPids],
+ timer:sleep(100),
+ Wait =
+ case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlPids) of
+ [] -> 0;
+ _ -> 2000
+ end,
+ erlang:send_after(Wait, self(), kill_group_leaders),
{noreply,St};
-handle_info(kill_group_leaders, #st{gls=Gls,stopping=From}=St) ->
+handle_info(kill_group_leaders, #st{gls=Gls,stopping=From,
+ pending_ops=Ops}=St) ->
[exit(GL, kill) || GL <- gb_sets:to_list(Gls)],
- gen_server:reply(From, ok),
- {stop,normal,St};
+ if From /= undefined ->
+ gen_server:reply(From, ok);
+ true -> % reply has been sent already
+ ok
+ end,
+ %% we're idle, check if any ops are pending
+ St1 = lists:foldr(fun({ReplyTo,Op},NewSt) ->
+ {Result,NewSt1} = Op(NewSt),
+ gen_server:reply(ReplyTo, Result),
+ NewSt1
+ end, St#st{phase=idle,pending_ops=[]}, Ops),
+ {noreply,St1};
handle_info(Other, St) ->
io:format("Ignoring: ~p\n", [Other]),
{noreply,St}.
@@ -259,11 +363,19 @@ handle_info(Other, St) ->
terminate(_, _) ->
ok.
-output(From, Tag, Str, #st{io_buffering=Buffered,buffered=Buf0}=St) ->
+output(From, Tag, Str, #st{io_buffering=Buffered,buffered=Buf0,
+ phase=Phase,offline_buffer=OfflineBuff}=St) ->
case gb_sets:is_member(From, Buffered) of
false ->
- do_output(Tag, Str, St),
- St;
+ case do_output(Tag, Str, Phase, St) of
+ buffer when length(OfflineBuff)>500 ->
+ %% something's wrong, clear buffer
+ St#st{offline_buffer=[]};
+ buffer ->
+ St#st{offline_buffer=[{Tag,From,Str}|OfflineBuff]};
+ _ ->
+ St
+ end;
true ->
Q0 = gb_trees:get(From, Buf0),
Q = queue:in({Tag,Str}, Q0),
@@ -271,17 +383,19 @@ output(From, Tag, Str, #st{io_buffering=Buffered,buffered=Buf0}=St) ->
St#st{buffered=Buf}
end.
-do_output(stdout, Str, #st{job_name=undefined}) ->
+do_output(stdout, Str, _, #st{job_name=undefined}) ->
io:put_chars(Str);
-do_output(stdout, Str0, #st{job_name=Name}) ->
+do_output(stdout, Str0, _, #st{job_name=Name}) ->
Str = io_lib:format("Testing ~ts: ~ts\n", [Name,Str0]),
io:put_chars(Str);
-do_output(Tag, Str, #st{fds=Fds}=St) ->
+do_output(Tag, Str, Phase, #st{fds=Fds}=St) ->
case gb_trees:lookup(Tag, Fds) of
+ none when Phase /= started ->
+ buffer;
none ->
S = io_lib:format("\n*** ERROR: ~w, line ~w: No known '~p' log file\n",
[?MODULE,?LINE,Tag]),
- do_output(stdout, [S,Str], St);
+ do_output(stdout, [S,Str], Phase, St);
{value,Fd} ->
try
io:put_chars(Fd, Str),
@@ -293,14 +407,14 @@ do_output(Tag, Str, #st{fds=Fds}=St) ->
S = io_lib:format("\n*** ERROR: ~w, line ~w: Error writing to "
"log file '~p': ~p\n",
[?MODULE,?LINE,Tag,Error]),
- do_output(stdout, [S,Str], St)
+ do_output(stdout, [S,Str], Phase, St)
end
end.
finalise_table(Fd, #st{html_footer=Footer}) ->
case file:position(Fd, {cur,0}) of
{ok,Pos} ->
- %% We are writing to a seekable file. Finalise so
+ %% We are writing to a seekable file. Finalise so
%% we get complete valid (and viewable) HTML code.
%% Then rewind to overwrite the finalising code.
io:put_chars(Fd, ["\n</table>\n",Footer]),
@@ -319,7 +433,7 @@ do_print_buffered(Q0, St) ->
eot ->
Q;
{Tag,Str} ->
- do_output(Tag, Str, St),
+ do_output(Tag, Str, undefined, St),
do_print_buffered(Q, St)
end.
diff --git a/lib/test_server/src/ts.erl b/lib/test_server/src/ts.erl
index 4e5dc1b759..8e71c69d35 100644
--- a/lib/test_server/src/ts.erl
+++ b/lib/test_server/src/ts.erl
@@ -28,6 +28,7 @@
tests/0, tests/1,
install/0, install/1,
bench/0, bench/1, bench/2, benchmarks/0,
+ smoke_test/0, smoke_test/1,smoke_test/2, smoke_tests/0,
estone/0, estone/1,
cross_cover_analyse/1,
compile_testcases/0, compile_testcases/1,
@@ -174,6 +175,13 @@ help(installed) ->
" ts:bench(Spec) - Runs all benchmarks in the given spec file.\n"
" The spec file is actually ../*_test/Spec_bench.spec\n\n"
" ts:bench can take the same Options argument as ts:run.\n"
+ "Smoke test functions:\n"
+ " ts:smoke_tests() - Get all available families of smoke tests\n"
+ " ts:smoke_test() - Runs all smoke tests\n"
+ " ts:smoke_test(Spec)\n"
+ " - Runs all smoke tests in the given spec file.\n"
+ " The spec file is actually ../*_test/Spec_smoke.spec\n\n"
+ " ts:smoke_test can take the same Options argument as ts:run.\n"
"\n"
"Installation (already done):\n"
],
@@ -258,6 +266,7 @@ run(List, Opts) when is_list(List), is_list(Opts) ->
%% Runs one test spec with Options
run(Testspec, Config) when is_atom(Testspec), is_list(Config) ->
Options=check_test_get_opts(Testspec, Config),
+ IsSmoke=proplists:get_value(smoke,Config),
File=atom_to_list(Testspec),
WhatToDo =
case Testspec of
@@ -293,6 +302,8 @@ run(Testspec, Config) when is_atom(Testspec), is_list(Config) ->
case WhatToDo of
skip ->
create_skip_spec(Testspec, tests(Testspec));
+ test when IsSmoke ->
+ File++"_smoke.spec";
test ->
File++".spec"
end,
@@ -507,7 +518,22 @@ bench(Specs, Opts) ->
benchmarks() ->
ts_benchmark:benchmarks().
+smoke_test() ->
+ smoke_test([]).
+smoke_test(Opts) when is_list(Opts) ->
+ smoke_test(smoke_tests(),Opts);
+smoke_test(Spec) ->
+ smoke_test([Spec],[]).
+
+smoke_test(Spec, Opts) when is_atom(Spec) ->
+ smoke_test([Spec],Opts);
+smoke_test(Specs, Opts) ->
+ run(Specs, [{smoke,true}|Opts]).
+
+smoke_tests() ->
+ {ok, Cwd} = file:get_cwd(),
+ ts_lib:specialized_specs(Cwd,"smoke").
%%
%% estone/0, estone/1
diff --git a/lib/test_server/src/ts_benchmark.erl b/lib/test_server/src/ts_benchmark.erl
index 516d22fd2d..bd6abc3372 100644
--- a/lib/test_server/src/ts_benchmark.erl
+++ b/lib/test_server/src/ts_benchmark.erl
@@ -30,12 +30,7 @@
benchmarks() ->
{ok, Cwd} = file:get_cwd(),
- Benches = filelib:wildcard(
- filename:join([Cwd,"..","*_test","*_bench.spec"])),
- [begin
- Base = filename:basename(N),
- list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1))
- end || N <- Benches].
+ ts_lib:specialized_specs(Cwd,"bench").
run(Specs, Opts, Vars) ->
{ok, Cwd} = file:get_cwd(),
diff --git a/lib/test_server/src/ts_lib.erl b/lib/test_server/src/ts_lib.erl
index a00f607fc1..52bb346043 100644
--- a/lib/test_server/src/ts_lib.erl
+++ b/lib/test_server/src/ts_lib.erl
@@ -27,6 +27,7 @@
erlang_type/1,
initial_capital/1,
specs/1, suites/2,
+ specialized_specs/2,
subst_file/3, subst/2, print_data/1,
make_non_erlang/2,
maybe_atom_to_list/1, progress/4,
@@ -91,13 +92,22 @@ initial_capital([C|Rest]) when $a =< C, C =< $z ->
initial_capital(String) ->
String.
+specialized_specs(Dir,PostFix) ->
+ Specs = filelib:wildcard(filename:join([filename:dirname(Dir),
+ "*_test", "*_"++PostFix++".spec"])),
+ sort_tests([begin
+ Base = filename:basename(Name),
+ list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1))
+ end || Name <- Specs]).
+
specs(Dir) ->
Specs = filelib:wildcard(filename:join([filename:dirname(Dir),
"*_test", "*.{dyn,}spec"])),
- % Filter away all spec which end with _bench.spec
+ % Filter away all spec which end with {_bench,_smoke}.spec
NoBench = fun(SpecName) ->
case lists:reverse(SpecName) of
"ceps.hcneb_"++_ -> false;
+ "ceps.ekoms_"++_ -> false;
_ -> true
end
end,
diff --git a/lib/test_server/vsn.mk b/lib/test_server/vsn.mk
index 1753bbb913..0e37512dc2 100644
--- a/lib/test_server/vsn.mk
+++ b/lib/test_server/vsn.mk
@@ -1 +1 @@
-TEST_SERVER_VSN = 3.6.2
+TEST_SERVER_VSN = 3.6.3
diff --git a/lib/tools/doc/src/notes.xml b/lib/tools/doc/src/notes.xml
index 422d4538a6..d8239460b3 100644
--- a/lib/tools/doc/src/notes.xml
+++ b/lib/tools/doc/src/notes.xml
@@ -30,6 +30,37 @@
</header>
<p>This document describes the changes made to the Tools application.</p>
+<section><title>Tools 2.6.12</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Remove trailing spaces in Emacs templates. Thanks to
+ Roberto Aloi.</p>
+ <p>
+ Own Id: OTP-11198</p>
+ </item>
+ <item>
+ <p>
+ Fixed the Emacs erlang-mode to accommodate the coding
+ style where lists written across several lines have each
+ line starting with a comma. Thanks to Magnus Henoch.</p>
+ <p>
+ Own Id: OTP-11242</p>
+ </item>
+ <item>
+ <p>
+ Make the Emacs Erlang mode TRAMP-aware when compiling.
+ Thanks to Tomas Abrahamsson.</p>
+ <p>
+ Own Id: OTP-11270</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Tools 2.6.11</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el
index f3bc95e3e5..624042204c 100644
--- a/lib/tools/emacs/erlang.el
+++ b/lib/tools/emacs/erlang.el
@@ -2813,6 +2813,9 @@ Return nil if inside string, t if in a comment."
(- (+ previous erlang-argument-indent) 1))))
(t
(nth 2 stack-top))))
+ ((= (following-char) ?,)
+ ;; a comma at the start of the line: line up with opening parenthesis.
+ (nth 2 stack-top))
(t
(goto-char (nth 1 stack-top))
(let ((base (cond ((looking-at "[({]\\s *\\($\\|%\\)")
@@ -5365,7 +5368,7 @@ There exists two workarounds for this bug:
(inferior-erlang-prepare-for-input)
(let* ((dir (inferior-erlang-compile-outdir))
;;; (file (file-name-nondirectory (buffer-file-name)))
- (noext (substring (buffer-file-name) 0 -4))
+ (noext (substring (erlang-local-buffer-file-name) 0 -4))
(opts (append (list (cons 'outdir dir))
(if current-prefix-arg
(list 'debug_info 'export_all))
@@ -5403,7 +5406,7 @@ unless the optional NO-DISPLAY is non-nil."
(defun inferior-erlang-compile-outdir ()
"Return the directory to compile the current buffer into."
(let* ((buffer-dir (directory-file-name
- (file-name-directory (buffer-file-name))))
+ (file-name-directory (erlang-local-buffer-file-name))))
(parent-dir (directory-file-name
(file-name-directory buffer-dir)))
(ebin-dir (concat (file-name-as-directory parent-dir) "ebin"))
@@ -5421,11 +5424,11 @@ unless the optional NO-DISPLAY is non-nil."
(res (inferior-erlang-compute-erl-compile-command module-name opts))
ccfn-entry
done)
- (if (not (null (buffer-file-name)))
+ (if (not (null (erlang-local-buffer-file-name)))
(while (and (not done) (not (null ccfn)))
(setq ccfn-entry (car ccfn))
(setq ccfn (cdr ccfn))
- (if (string-match (car ccfn-entry) (buffer-file-name))
+ (if (string-match (car ccfn-entry) (erlang-local-buffer-file-name))
(let ((c-fn (cdr ccfn-entry)))
(setq done t)
(if (not (null c-fn))
@@ -5457,7 +5460,7 @@ unless the optional NO-DISPLAY is non-nil."
tmpvar tmpvar tmpvar2)))))
(defun inferior-erlang-compute-leex-compile-command (module-name opts)
- (let ((file-name (buffer-file-name))
+ (let ((file-name (erlang-local-buffer-file-name))
(erl-compile-expr (inferior-erlang-remove-any-trailing-dot
(inferior-erlang-compute-erl-compile-command
module-name opts))))
@@ -5476,7 +5479,7 @@ unless the optional NO-DISPLAY is non-nil."
erl-compile-expr)))
(defun inferior-erlang-compute-yecc-compile-command (module-name opts)
- (let ((file-name (buffer-file-name))
+ (let ((file-name (erlang-local-buffer-file-name))
(erl-compile-expr (inferior-erlang-remove-any-trailing-dot
(inferior-erlang-compute-erl-compile-command
module-name opts))))
@@ -5527,6 +5530,36 @@ unless the optional NO-DISPLAY is non-nil."
(setq strs (cdr strs)))
result))
+(defun erlang-local-buffer-file-name ()
+ ;; When editing a file remotely via tramp,
+ ;; the buffer's file name may be for example
+ ;; "/ssh:host.example.com:/some/path/x.erl"
+ ;;
+ ;; If I try to compile such a file using C-c C-k, an
+ ;; erlang shell on the remote host is automatically
+ ;; started if needed, but for it to successfully compile
+ ;; the file, the c(...) command that is sent must contain
+ ;; the file name "/some/path/x.erl" without the
+ ;; tramp-prefix "/ssh:host.example.com:".
+ (cond ((null (buffer-file-name))
+ nil)
+ ((erlang-tramp-remote-file-p)
+ (erlang-tramp-get-localname))
+ (t
+ (buffer-file-name))))
+
+(defun erlang-tramp-remote-file-p ()
+ (and (fboundp 'tramp-tramp-file-p)
+ (tramp-tramp-file-p (buffer-file-name))))
+
+(defun erlang-tramp-get-localname ()
+ (let ((tramp-info (tramp-dissect-file-name (buffer-file-name))))
+ (if (fboundp 'tramp-file-name-localname)
+ (tramp-file-name-localname tramp-info)
+ ;; In old versions of tramp, it was `tramp-file-name-path'
+ ;; instead of the newer `tramp-file-name-localname'
+ (tramp-file-name-path tramp-info))))
+
;; `next-error' only accepts buffers with major mode `compilation-mode'
;; or with the minor mode `compilation-minor-mode' activated.
;; (To activate the minor mode is out of the question, since it will
@@ -5561,7 +5594,7 @@ Capable of finding error messages in an inferior Erlang buffer."
"Make the inferior Erlang change directory.
The default is to go to the directory of the current buffer."
(interactive)
- (or dir (setq dir (file-name-directory (buffer-file-name))))
+ (or dir (setq dir (file-name-directory (erlang-local-buffer-file-name))))
(or (inferior-erlang-running-p)
(error "No inferior Erlang is running"))
(inferior-erlang-display-buffer)
diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented
index 6c9343f6cb..7e61bcc45b 100644
--- a/lib/tools/emacs/test.erl.indented
+++ b/lib/tools/emacs/test.erl.indented
@@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{
field2 = Field1,
field2 = Field2}}),
{ok, SomeVariable}.
+
+commas_first() ->
+ {abc, [ {some_var, 1}
+ , {some_other_var, 2}
+ , {erlang_ftw, 9}
+ , {erlang_cookie, 'cookie'}
+ , {cmds,
+ [ {one, "sudo ls"}
+ , {one, "sudo ls"}
+ , {two, "sudo ls"}
+ , {three, "sudo ls"}
+ , {four, "sudo ls"}
+ , {three, "sudo ls"}
+ ] }
+ , {ssh_username, "yow"}
+ , {cluster,
+ [ {aaaa, [ {"10.198.55.12" , "" }
+ , {"10.198.55.13" , "" }
+ ] }
+ , {bbbb, [ {"10.198.55.151", "" }
+ , {"10.198.55.123", "" }
+ , {"10.198.55.34" , "" }
+ , {"10.198.55.85" , "" }
+ , {"10.198.55.67" , "" }
+ ] }
+ , {cccc, [ {"10.198.55.68" , "" }
+ , {"10.198.55.69" , "" }
+ ] }
+ ] }
+ ]
+ }.
diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig
index 0f8c4a9175..932758997d 100644
--- a/lib/tools/emacs/test.erl.orig
+++ b/lib/tools/emacs/test.erl.orig
@@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{
field2 = Field1,
field2 = Field2}}),
{ok, SomeVariable}.
+
+commas_first() ->
+ {abc, [ {some_var, 1}
+ , {some_other_var, 2}
+ , {erlang_ftw, 9}
+ , {erlang_cookie, 'cookie'}
+ , {cmds,
+ [ {one, "sudo ls"}
+ , {one, "sudo ls"}
+ , {two, "sudo ls"}
+ , {three, "sudo ls"}
+ , {four, "sudo ls"}
+ , {three, "sudo ls"}
+ ] }
+ , {ssh_username, "yow"}
+ , {cluster,
+ [ {aaaa, [ {"10.198.55.12" , "" }
+ , {"10.198.55.13" , "" }
+ ] }
+ , {bbbb, [ {"10.198.55.151", "" }
+ , {"10.198.55.123", "" }
+ , {"10.198.55.34" , "" }
+ , {"10.198.55.85" , "" }
+ , {"10.198.55.67" , "" }
+ ] }
+ , {cccc, [ {"10.198.55.68" , "" }
+ , {"10.198.55.69" , "" }
+ ] }
+ ] }
+]
+}.
diff --git a/lib/tools/vsn.mk b/lib/tools/vsn.mk
index a30b16fc49..c51b833dd0 100644
--- a/lib/tools/vsn.mk
+++ b/lib/tools/vsn.mk
@@ -1 +1 @@
-TOOLS_VSN = 2.6.11
+TOOLS_VSN = 2.6.12
diff --git a/lib/wx/api_gen/wx_extra/bugs.h b/lib/wx/api_gen/wx_extra/bugs.h
index e3a4fa200b..0563a8901f 100644
--- a/lib/wx/api_gen/wx_extra/bugs.h
+++ b/lib/wx/api_gen/wx_extra/bugs.h
@@ -39,4 +39,12 @@ class WXDLLIMPEXP_ADV wxTreeCtrlBase : public wxControl
{
public:
static bool IsTreeItemIdOk(wxTreeItemId id);
-}
+};
+
+
+// Enable lost macro functionality
+class WXDLLEXPORT wxPanel : public wxWindow
+{
+ public:
+ void SetFocusIgnoringChildren();
+};
diff --git a/lib/wx/api_gen/wx_gen.erl b/lib/wx/api_gen/wx_gen.erl
index 2eb9d9d33d..3ca8cd7d14 100644
--- a/lib/wx/api_gen/wx_gen.erl
+++ b/lib/wx/api_gen/wx_gen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -1350,7 +1350,11 @@ extract_enum3([#xmlElement{name=name,content=[#xmlText{value=Name}]}|R], Id, Acc
end;
extract_enum3([#xmlElement{name=initializer,content=Cs}|_],_Id,[{Name,_}|Acc]) ->
- String = extract_def2(Cs),
+ String = case extract_def2(Cs) of
+ "= " ++ Str0 -> Str0; %% Doxygen 1.8.3.1 keeps the '=' sign
+ "=" ++ Str0 -> Str0; %% Doxygen 1.8.3.1 keeps the '=' sign
+ Str0 -> Str0
+ end,
Val0 = gen_util:tokens(String,"<& "),
try
case Val0 of
diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf
index 81f2a389ab..21f9f1b44d 100644
--- a/lib/wx/api_gen/wxapi.conf
+++ b/lib/wx/api_gen/wxapi.conf
@@ -190,8 +190,9 @@
{class, wxPanel, wxWindow, [],
['wxPanel','~wxPanel',%'Create',
%%'GetDefaultItem',
- 'InitDialog'%,
- %%'OnSysColourChanged', %'SetDefaultItem','SetFocus','SetFocusIgnoringChildren'
+ 'InitDialog',
+ %%'OnSysColourChanged', %'SetDefaultItem','SetFocus',
+ 'SetFocusIgnoringChildren'
]}.
{class, wxScrolledWindow, wxPanel, [],
@@ -504,7 +505,8 @@
[{'wxStatusBar',[{"size", skip_member}]},
'~wxStatusBar',
{'Create',[{"size", skip_member}]},
- 'GetFieldRect','GetFieldsCount','GetStatusText','PopStatusText',
+ {'GetFieldRect', [{"rect", out}]},
+ 'GetFieldsCount','GetStatusText','PopStatusText',
'PushStatusText',
{'SetFieldsCount', [{"number", {def,none}},
{"widths", [{single, array}, {def, "(int *) NULL"}]}]},
@@ -1741,6 +1743,12 @@
'Get'
]}.
+{class, wxClipboardTextEvent, wxCommandEvent,
+ [{event, [wxEVT_COMMAND_TEXT_COPY,
+ wxEVT_COMMAND_TEXT_CUT,
+ wxEVT_COMMAND_TEXT_PASTE]}],
+ []}.
+
{class, wxSpinEvent, wxNotifyEvent,
[{acc, [{m_commandInt, "GetPosition()"}]},
{event, [wxEVT_COMMAND_SPINCTRL_UPDATED,
diff --git a/lib/wx/c_src/gen/wxe_events.cpp b/lib/wx/c_src/gen/wxe_events.cpp
index c9cdee3160..a6a37cb37f 100644
--- a/lib/wx/c_src/gen/wxe_events.cpp
+++ b/lib/wx/c_src/gen/wxe_events.cpp
@@ -243,57 +243,60 @@ void initEventTable()
{wxEVT_COMMAND_TREE_ITEM_MENU, 208, "command_tree_item_menu"},
{wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 209, "command_notebook_page_changed"},
{wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 209, "command_notebook_page_changing"},
- {wxEVT_COMMAND_SPINCTRL_UPDATED, 215, "command_spinctrl_updated"},
+ {wxEVT_COMMAND_TEXT_COPY, 215, "command_text_copy"},
+ {wxEVT_COMMAND_TEXT_CUT, 215, "command_text_cut"},
+ {wxEVT_COMMAND_TEXT_PASTE, 215, "command_text_paste"},
+ {wxEVT_COMMAND_SPINCTRL_UPDATED, 216, "command_spinctrl_updated"},
{wxEVT_SCROLL_LINEUP + wxEVT_USER_FIRST, 165, "spin_up"},
{wxEVT_SCROLL_LINEDOWN + wxEVT_USER_FIRST, 165, "spin_down"},
{wxEVT_SCROLL_THUMBTRACK + wxEVT_USER_FIRST, 165, "spin"},
- {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, 217, "command_splitter_sash_pos_changed"},
- {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, 217, "command_splitter_sash_pos_changing"},
- {wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, 217, "command_splitter_doubleclicked"},
- {wxEVT_COMMAND_SPLITTER_UNSPLIT, 217, "command_splitter_unsplit"},
- {wxEVT_COMMAND_HTML_LINK_CLICKED, 219, "command_html_link_clicked"},
- {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, 222, "command_auinotebook_page_close"},
- {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 222, "command_auinotebook_page_changed"},
- {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 222, "command_auinotebook_page_changing"},
- {wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 222, "command_auinotebook_button"},
- {wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 222, "command_auinotebook_begin_drag"},
- {wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 222, "command_auinotebook_end_drag"},
- {wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 222, "command_auinotebook_drag_motion"},
- {wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 222, "command_auinotebook_allow_dnd"},
+ {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, 218, "command_splitter_sash_pos_changed"},
+ {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, 218, "command_splitter_sash_pos_changing"},
+ {wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, 218, "command_splitter_doubleclicked"},
+ {wxEVT_COMMAND_SPLITTER_UNSPLIT, 218, "command_splitter_unsplit"},
+ {wxEVT_COMMAND_HTML_LINK_CLICKED, 220, "command_html_link_clicked"},
+ {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, 223, "command_auinotebook_page_close"},
+ {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 223, "command_auinotebook_page_changed"},
+ {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 223, "command_auinotebook_page_changing"},
+ {wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 223, "command_auinotebook_button"},
+ {wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 223, "command_auinotebook_begin_drag"},
+ {wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 223, "command_auinotebook_end_drag"},
+ {wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 223, "command_auinotebook_drag_motion"},
+ {wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 223, "command_auinotebook_allow_dnd"},
#if wxCHECK_VERSION(2,8,5)
- {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 222, "command_auinotebook_tab_middle_down"},
+ {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 223, "command_auinotebook_tab_middle_down"},
#endif
#if wxCHECK_VERSION(2,8,5)
- {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, 222, "command_auinotebook_tab_middle_up"},
+ {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, 223, "command_auinotebook_tab_middle_up"},
#endif
#if wxCHECK_VERSION(2,8,5)
- {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 222, "command_auinotebook_tab_right_down"},
+ {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 223, "command_auinotebook_tab_right_down"},
#endif
#if wxCHECK_VERSION(2,8,5)
- {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 222, "command_auinotebook_tab_right_up"},
+ {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 223, "command_auinotebook_tab_right_up"},
#endif
#if wxCHECK_VERSION(2,8,5)
- {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, 222, "command_auinotebook_page_closed"},
+ {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, 223, "command_auinotebook_page_closed"},
#endif
#if wxCHECK_VERSION(2,8,5)
- {wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, 222, "command_auinotebook_drag_done"},
+ {wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, 223, "command_auinotebook_drag_done"},
#endif
#if wxCHECK_VERSION(2,8,5)
- {wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, 222, "command_auinotebook_bg_dclick"},
+ {wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, 223, "command_auinotebook_bg_dclick"},
#endif
- {wxEVT_AUI_PANE_BUTTON, 223, "aui_pane_button"},
- {wxEVT_AUI_PANE_CLOSE, 223, "aui_pane_close"},
- {wxEVT_AUI_PANE_MAXIMIZE, 223, "aui_pane_maximize"},
- {wxEVT_AUI_PANE_RESTORE, 223, "aui_pane_restore"},
- {wxEVT_AUI_RENDER, 223, "aui_render"},
- {wxEVT_AUI_FIND_MANAGER, 223, "aui_find_manager"},
- {wxEVT_TASKBAR_MOVE, 226, "taskbar_move"},
- {wxEVT_TASKBAR_LEFT_DOWN, 226, "taskbar_left_down"},
- {wxEVT_TASKBAR_LEFT_UP, 226, "taskbar_left_up"},
- {wxEVT_TASKBAR_RIGHT_DOWN, 226, "taskbar_right_down"},
- {wxEVT_TASKBAR_RIGHT_UP, 226, "taskbar_right_up"},
- {wxEVT_TASKBAR_LEFT_DCLICK, 226, "taskbar_left_dclick"},
- {wxEVT_TASKBAR_RIGHT_DCLICK, 226, "taskbar_right_dclick"},
+ {wxEVT_AUI_PANE_BUTTON, 224, "aui_pane_button"},
+ {wxEVT_AUI_PANE_CLOSE, 224, "aui_pane_close"},
+ {wxEVT_AUI_PANE_MAXIMIZE, 224, "aui_pane_maximize"},
+ {wxEVT_AUI_PANE_RESTORE, 224, "aui_pane_restore"},
+ {wxEVT_AUI_RENDER, 224, "aui_render"},
+ {wxEVT_AUI_FIND_MANAGER, 224, "aui_find_manager"},
+ {wxEVT_TASKBAR_MOVE, 227, "taskbar_move"},
+ {wxEVT_TASKBAR_LEFT_DOWN, 227, "taskbar_left_down"},
+ {wxEVT_TASKBAR_LEFT_UP, 227, "taskbar_left_up"},
+ {wxEVT_TASKBAR_RIGHT_DOWN, 227, "taskbar_right_down"},
+ {wxEVT_TASKBAR_RIGHT_UP, 227, "taskbar_right_up"},
+ {wxEVT_TASKBAR_LEFT_DCLICK, 227, "taskbar_left_dclick"},
+ {wxEVT_TASKBAR_RIGHT_DCLICK, 227, "taskbar_right_dclick"},
{-1, 0, }
};
for(int i=0; event_types[i].ev_type != -1; i++) {
@@ -743,7 +746,14 @@ case 209: {// wxNotebookEvent
rt.addTupleCount(2);
break;
}
-case 215: {// wxSpinEvent
+case 215: {// wxClipboardTextEvent
+ evClass = (char*)"wxClipboardTextEvent";
+ rt.addAtom((char*)"wxClipboardText");
+ rt.addAtom(Etype->eName);
+ rt.addTupleCount(2);
+ break;
+}
+case 216: {// wxSpinEvent
wxSpinEvent * ev = (wxSpinEvent *) event;
evClass = (char*)"wxSpinEvent";
rt.addAtom((char*)"wxSpin");
@@ -752,14 +762,14 @@ case 215: {// wxSpinEvent
rt.addTupleCount(3);
break;
}
-case 217: {// wxSplitterEvent
+case 218: {// wxSplitterEvent
evClass = (char*)"wxSplitterEvent";
rt.addAtom((char*)"wxSplitter");
rt.addAtom(Etype->eName);
rt.addTupleCount(2);
break;
}
-case 219: {// wxHtmlLinkEvent
+case 220: {// wxHtmlLinkEvent
wxHtmlLinkEvent * ev = (wxHtmlLinkEvent *) event;
evClass = (char*)"wxHtmlLinkEvent";
rt.addAtom((char*)"wxHtmlLink");
@@ -768,7 +778,7 @@ case 219: {// wxHtmlLinkEvent
rt.addTupleCount(3);
break;
}
-case 222: {// wxAuiNotebookEvent
+case 223: {// wxAuiNotebookEvent
wxAuiNotebookEvent * ev = (wxAuiNotebookEvent *) event;
wxAuiNotebook * GetDragSource = ev->GetDragSource();
evClass = (char*)"wxAuiNotebookEvent";
@@ -780,7 +790,7 @@ case 222: {// wxAuiNotebookEvent
rt.addTupleCount(5);
break;
}
-case 223: {// wxAuiManagerEvent
+case 224: {// wxAuiManagerEvent
wxAuiManagerEvent * ev = (wxAuiManagerEvent *) event;
wxAuiManager * GetManager = ev->GetManager();
wxAuiPaneInfo * GetPane = ev->GetPane();
@@ -797,7 +807,7 @@ case 223: {// wxAuiManagerEvent
rt.addTupleCount(8);
break;
}
-case 226: {// wxTaskBarIconEvent
+case 227: {// wxTaskBarIconEvent
evClass = (char*)"wxTaskBarIconEvent";
rt.addAtom((char*)"wxTaskBarIcon");
rt.addAtom(Etype->eName);
diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp
index 2d55f34346..2d8dbb242b 100644
--- a/lib/wx/c_src/gen/wxe_funcs.cpp
+++ b/lib/wx/c_src/gen/wxe_funcs.cpp
@@ -2218,6 +2218,12 @@ case wxPanel_InitDialog: { // wxPanel::InitDialog
This->InitDialog();
break;
}
+case wxPanel_SetFocusIgnoringChildren: { // wxPanel::SetFocusIgnoringChildren
+ wxPanel *This = (wxPanel *) getPtr(bp,memenv); bp += 4;
+ if(!This) throw wxe_badarg(0);
+ This->SetFocusIgnoringChildren();
+ break;
+}
case wxScrolledWindow_new_0: { // wxScrolledWindow::wxScrolledWindow
wxScrolledWindow * Result = new EwxScrolledWindow();
newPtr((void *) Result, 0, memenv);
@@ -8849,16 +8855,14 @@ case wxStatusBar_Create: { // wxStatusBar::Create
break;
}
case wxStatusBar_GetFieldRect: { // wxStatusBar::GetFieldRect
+ wxRect rect;
wxStatusBar *This = (wxStatusBar *) getPtr(bp,memenv); bp += 4;
int * i = (int *) bp; bp += 4;
- int * rectX = (int *) bp; bp += 4;
- int * rectY = (int *) bp; bp += 4;
- int * rectW = (int *) bp; bp += 4;
- int * rectH = (int *) bp; bp += 4;
- wxRect rect = wxRect(*rectX,*rectY,*rectW,*rectH);
if(!This) throw wxe_badarg(0);
bool Result = This->GetFieldRect(*i,rect);
rt.addBool(Result);
+ rt.add(rect);
+ rt.addTupleCount(2);
break;
}
case wxStatusBar_GetFieldsCount: { // wxStatusBar::GetFieldsCount
@@ -31360,7 +31364,7 @@ case wxAuiManagerEvent_CanVeto: { // wxAuiManagerEvent::CanVeto
}
case wxLogNull_new: { // wxLogNull::wxLogNull
wxLogNull * Result = new wxLogNull();
- newPtr((void *) Result, 224, memenv);
+ newPtr((void *) Result, 225, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxLogNull");
break;
}
@@ -31450,7 +31454,7 @@ void WxeApp::delete_object(void *ptr, wxeRefData *refd) {
case 211: /* delete (wxFileDataObject *) ptr;These objects must be deleted by owner object */ break;
case 212: /* delete (wxTextDataObject *) ptr;These objects must be deleted by owner object */ break;
case 213: /* delete (wxBitmapDataObject *) ptr;These objects must be deleted by owner object */ break;
- case 224: delete (wxLogNull *) ptr; break;
+ case 225: delete (wxLogNull *) ptr; break;
default: delete (wxObject *) ptr;
}}
diff --git a/lib/wx/c_src/gen/wxe_macros.h b/lib/wx/c_src/gen/wxe_macros.h
index c341825d8d..bd7e962fcc 100644
--- a/lib/wx/c_src/gen/wxe_macros.h
+++ b/lib/wx/c_src/gen/wxe_macros.h
@@ -288,3068 +288,3069 @@
#define wxPanel_new_2 334
#define wxPanel_destruct 335
#define wxPanel_InitDialog 336
-#define wxScrolledWindow_new_0 337
-#define wxScrolledWindow_new_2 338
-#define wxScrolledWindow_destruct 339
-#define wxScrolledWindow_CalcScrolledPosition_4 340
-#define wxScrolledWindow_CalcScrolledPosition_1 341
-#define wxScrolledWindow_CalcUnscrolledPosition_4 342
-#define wxScrolledWindow_CalcUnscrolledPosition_1 343
-#define wxScrolledWindow_EnableScrolling 344
-#define wxScrolledWindow_GetScrollPixelsPerUnit 345
-#define wxScrolledWindow_GetViewStart 346
-#define wxScrolledWindow_DoPrepareDC 347
-#define wxScrolledWindow_PrepareDC 348
-#define wxScrolledWindow_Scroll 349
-#define wxScrolledWindow_SetScrollbars 350
-#define wxScrolledWindow_SetScrollRate 351
-#define wxScrolledWindow_SetTargetWindow 352
-#define wxSashWindow_new_0 353
-#define wxSashWindow_new_2 354
-#define wxSashWindow_destruct 355
-#define wxSashWindow_GetSashVisible 356
-#define wxSashWindow_GetMaximumSizeX 357
-#define wxSashWindow_GetMaximumSizeY 358
-#define wxSashWindow_GetMinimumSizeX 359
-#define wxSashWindow_GetMinimumSizeY 360
-#define wxSashWindow_SetMaximumSizeX 361
-#define wxSashWindow_SetMaximumSizeY 362
-#define wxSashWindow_SetMinimumSizeX 363
-#define wxSashWindow_SetMinimumSizeY 364
-#define wxSashWindow_SetSashVisible 365
-#define wxSashLayoutWindow_new_0 366
-#define wxSashLayoutWindow_new_2 367
-#define wxSashLayoutWindow_Create 368
-#define wxSashLayoutWindow_GetAlignment 369
-#define wxSashLayoutWindow_GetOrientation 370
-#define wxSashLayoutWindow_SetAlignment 371
-#define wxSashLayoutWindow_SetDefaultSize 372
-#define wxSashLayoutWindow_SetOrientation 373
-#define wxSashLayoutWindow_destroy 374
-#define wxGrid_new_0 375
-#define wxGrid_new_3 376
-#define wxGrid_new_4 377
-#define wxGrid_destruct 378
-#define wxGrid_AppendCols 379
-#define wxGrid_AppendRows 380
-#define wxGrid_AutoSize 381
-#define wxGrid_AutoSizeColumn 382
-#define wxGrid_AutoSizeColumns 383
-#define wxGrid_AutoSizeRow 384
-#define wxGrid_AutoSizeRows 385
-#define wxGrid_BeginBatch 386
-#define wxGrid_BlockToDeviceRect 387
-#define wxGrid_CanDragColSize 388
-#define wxGrid_CanDragRowSize 389
-#define wxGrid_CanDragGridSize 390
-#define wxGrid_CanEnableCellControl 391
-#define wxGrid_CellToRect_2 392
-#define wxGrid_CellToRect_1 393
-#define wxGrid_ClearGrid 394
-#define wxGrid_ClearSelection 395
-#define wxGrid_CreateGrid 396
-#define wxGrid_DeleteCols 397
-#define wxGrid_DeleteRows 398
-#define wxGrid_DisableCellEditControl 399
-#define wxGrid_DisableDragColSize 400
-#define wxGrid_DisableDragGridSize 401
-#define wxGrid_DisableDragRowSize 402
-#define wxGrid_EnableCellEditControl 403
-#define wxGrid_EnableDragColSize 404
-#define wxGrid_EnableDragGridSize 405
-#define wxGrid_EnableDragRowSize 406
-#define wxGrid_EnableEditing 407
-#define wxGrid_EnableGridLines 408
-#define wxGrid_EndBatch 409
-#define wxGrid_Fit 410
-#define wxGrid_ForceRefresh 411
-#define wxGrid_GetBatchCount 412
-#define wxGrid_GetCellAlignment 413
-#define wxGrid_GetCellBackgroundColour 414
-#define wxGrid_GetCellEditor 415
-#define wxGrid_GetCellFont 416
-#define wxGrid_GetCellRenderer 417
-#define wxGrid_GetCellTextColour 418
-#define wxGrid_GetCellValue_2 419
-#define wxGrid_GetCellValue_1 420
-#define wxGrid_GetColLabelAlignment 421
-#define wxGrid_GetColLabelSize 422
-#define wxGrid_GetColLabelValue 423
-#define wxGrid_GetColMinimalAcceptableWidth 424
-#define wxGrid_GetDefaultCellAlignment 425
-#define wxGrid_GetDefaultCellBackgroundColour 426
-#define wxGrid_GetDefaultCellFont 427
-#define wxGrid_GetDefaultCellTextColour 428
-#define wxGrid_GetDefaultColLabelSize 429
-#define wxGrid_GetDefaultColSize 430
-#define wxGrid_GetDefaultEditor 431
-#define wxGrid_GetDefaultEditorForCell_2 432
-#define wxGrid_GetDefaultEditorForCell_1 433
-#define wxGrid_GetDefaultEditorForType 434
-#define wxGrid_GetDefaultRenderer 435
-#define wxGrid_GetDefaultRendererForCell 436
-#define wxGrid_GetDefaultRendererForType 437
-#define wxGrid_GetDefaultRowLabelSize 438
-#define wxGrid_GetDefaultRowSize 439
-#define wxGrid_GetGridCursorCol 440
-#define wxGrid_GetGridCursorRow 441
-#define wxGrid_GetGridLineColour 442
-#define wxGrid_GridLinesEnabled 443
-#define wxGrid_GetLabelBackgroundColour 444
-#define wxGrid_GetLabelFont 445
-#define wxGrid_GetLabelTextColour 446
-#define wxGrid_GetNumberCols 447
-#define wxGrid_GetNumberRows 448
-#define wxGrid_GetOrCreateCellAttr 449
-#define wxGrid_GetRowMinimalAcceptableHeight 450
-#define wxGrid_GetRowLabelAlignment 451
-#define wxGrid_GetRowLabelSize 452
-#define wxGrid_GetRowLabelValue 453
-#define wxGrid_GetRowSize 454
-#define wxGrid_GetScrollLineX 455
-#define wxGrid_GetScrollLineY 456
-#define wxGrid_GetSelectedCells 457
-#define wxGrid_GetSelectedCols 458
-#define wxGrid_GetSelectedRows 459
-#define wxGrid_GetSelectionBackground 460
-#define wxGrid_GetSelectionBlockTopLeft 461
-#define wxGrid_GetSelectionBlockBottomRight 462
-#define wxGrid_GetSelectionForeground 463
-#define wxGrid_GetViewWidth 464
-#define wxGrid_GetGridWindow 465
-#define wxGrid_GetGridRowLabelWindow 466
-#define wxGrid_GetGridColLabelWindow 467
-#define wxGrid_GetGridCornerLabelWindow 468
-#define wxGrid_HideCellEditControl 469
-#define wxGrid_InsertCols 470
-#define wxGrid_InsertRows 471
-#define wxGrid_IsCellEditControlEnabled 472
-#define wxGrid_IsCurrentCellReadOnly 473
-#define wxGrid_IsEditable 474
-#define wxGrid_IsInSelection_2 475
-#define wxGrid_IsInSelection_1 476
-#define wxGrid_IsReadOnly 477
-#define wxGrid_IsSelection 478
-#define wxGrid_IsVisible_3 479
-#define wxGrid_IsVisible_2 480
-#define wxGrid_MakeCellVisible_2 481
-#define wxGrid_MakeCellVisible_1 482
-#define wxGrid_MoveCursorDown 483
-#define wxGrid_MoveCursorLeft 484
-#define wxGrid_MoveCursorRight 485
-#define wxGrid_MoveCursorUp 486
-#define wxGrid_MoveCursorDownBlock 487
-#define wxGrid_MoveCursorLeftBlock 488
-#define wxGrid_MoveCursorRightBlock 489
-#define wxGrid_MoveCursorUpBlock 490
-#define wxGrid_MovePageDown 491
-#define wxGrid_MovePageUp 492
-#define wxGrid_RegisterDataType 493
-#define wxGrid_SaveEditControlValue 494
-#define wxGrid_SelectAll 495
-#define wxGrid_SelectBlock_5 496
-#define wxGrid_SelectBlock_3 497
-#define wxGrid_SelectCol 498
-#define wxGrid_SelectRow 499
-#define wxGrid_SetCellAlignment_4 500
-#define wxGrid_SetCellAlignment_3 501
-#define wxGrid_SetCellAlignment_1 502
-#define wxGrid_SetCellBackgroundColour_3_0 503
-#define wxGrid_SetCellBackgroundColour_1 504
-#define wxGrid_SetCellBackgroundColour_3_1 505
-#define wxGrid_SetCellEditor 506
-#define wxGrid_SetCellFont 507
-#define wxGrid_SetCellRenderer 508
-#define wxGrid_SetCellTextColour_3_0 509
-#define wxGrid_SetCellTextColour_3_1 510
-#define wxGrid_SetCellTextColour_1 511
-#define wxGrid_SetCellValue_3_0 512
-#define wxGrid_SetCellValue_2 513
-#define wxGrid_SetCellValue_3_1 514
-#define wxGrid_SetColAttr 515
-#define wxGrid_SetColFormatBool 516
-#define wxGrid_SetColFormatNumber 517
-#define wxGrid_SetColFormatFloat 518
-#define wxGrid_SetColFormatCustom 519
-#define wxGrid_SetColLabelAlignment 520
-#define wxGrid_SetColLabelSize 521
-#define wxGrid_SetColLabelValue 522
-#define wxGrid_SetColMinimalWidth 523
-#define wxGrid_SetColMinimalAcceptableWidth 524
-#define wxGrid_SetColSize 525
-#define wxGrid_SetDefaultCellAlignment 526
-#define wxGrid_SetDefaultCellBackgroundColour 527
-#define wxGrid_SetDefaultCellFont 528
-#define wxGrid_SetDefaultCellTextColour 529
-#define wxGrid_SetDefaultEditor 530
-#define wxGrid_SetDefaultRenderer 531
-#define wxGrid_SetDefaultColSize 532
-#define wxGrid_SetDefaultRowSize 533
-#define wxGrid_SetGridCursor 534
-#define wxGrid_SetGridLineColour 535
-#define wxGrid_SetLabelBackgroundColour 536
-#define wxGrid_SetLabelFont 537
-#define wxGrid_SetLabelTextColour 538
-#define wxGrid_SetMargins 539
-#define wxGrid_SetReadOnly 540
-#define wxGrid_SetRowAttr 541
-#define wxGrid_SetRowLabelAlignment 542
-#define wxGrid_SetRowLabelSize 543
-#define wxGrid_SetRowLabelValue 544
-#define wxGrid_SetRowMinimalHeight 545
-#define wxGrid_SetRowMinimalAcceptableHeight 546
-#define wxGrid_SetRowSize 547
-#define wxGrid_SetScrollLineX 548
-#define wxGrid_SetScrollLineY 549
-#define wxGrid_SetSelectionBackground 550
-#define wxGrid_SetSelectionForeground 551
-#define wxGrid_SetSelectionMode 552
-#define wxGrid_ShowCellEditControl 553
-#define wxGrid_XToCol 554
-#define wxGrid_XToEdgeOfCol 555
-#define wxGrid_YToEdgeOfRow 556
-#define wxGrid_YToRow 557
-#define wxGridCellRenderer_Draw 558
-#define wxGridCellRenderer_GetBestSize 559
-#define wxGridCellEditor_Create 560
-#define wxGridCellEditor_IsCreated 561
-#define wxGridCellEditor_SetSize 562
-#define wxGridCellEditor_Show 563
-#define wxGridCellEditor_PaintBackground 564
-#define wxGridCellEditor_BeginEdit 565
-#define wxGridCellEditor_EndEdit 566
-#define wxGridCellEditor_Reset 567
-#define wxGridCellEditor_StartingKey 568
-#define wxGridCellEditor_StartingClick 569
-#define wxGridCellEditor_HandleReturn 570
-#define wxGridCellBoolRenderer_new 571
-#define wxGridCellBoolRenderer_destroy 572
-#define wxGridCellBoolEditor_new 573
-#define wxGridCellBoolEditor_IsTrueValue 574
-#define wxGridCellBoolEditor_UseStringValues 575
-#define wxGridCellBoolEditor_destroy 576
-#define wxGridCellFloatRenderer_new 577
-#define wxGridCellFloatRenderer_GetPrecision 578
-#define wxGridCellFloatRenderer_GetWidth 579
-#define wxGridCellFloatRenderer_SetParameters 580
-#define wxGridCellFloatRenderer_SetPrecision 581
-#define wxGridCellFloatRenderer_SetWidth 582
-#define wxGridCellFloatRenderer_destroy 583
-#define wxGridCellFloatEditor_new 584
-#define wxGridCellFloatEditor_SetParameters 585
-#define wxGridCellFloatEditor_destroy 586
-#define wxGridCellStringRenderer_new 587
-#define wxGridCellStringRenderer_destroy 588
-#define wxGridCellTextEditor_new 589
-#define wxGridCellTextEditor_SetParameters 590
-#define wxGridCellTextEditor_destroy 591
-#define wxGridCellChoiceEditor_new 593
-#define wxGridCellChoiceEditor_SetParameters 594
-#define wxGridCellChoiceEditor_destroy 595
-#define wxGridCellNumberRenderer_new 596
-#define wxGridCellNumberRenderer_destroy 597
-#define wxGridCellNumberEditor_new 598
-#define wxGridCellNumberEditor_GetValue 599
-#define wxGridCellNumberEditor_SetParameters 600
-#define wxGridCellNumberEditor_destroy 601
-#define wxGridCellAttr_SetTextColour 602
-#define wxGridCellAttr_SetBackgroundColour 603
-#define wxGridCellAttr_SetFont 604
-#define wxGridCellAttr_SetAlignment 605
-#define wxGridCellAttr_SetReadOnly 606
-#define wxGridCellAttr_SetRenderer 607
-#define wxGridCellAttr_SetEditor 608
-#define wxGridCellAttr_HasTextColour 609
-#define wxGridCellAttr_HasBackgroundColour 610
-#define wxGridCellAttr_HasFont 611
-#define wxGridCellAttr_HasAlignment 612
-#define wxGridCellAttr_HasRenderer 613
-#define wxGridCellAttr_HasEditor 614
-#define wxGridCellAttr_GetTextColour 615
-#define wxGridCellAttr_GetBackgroundColour 616
-#define wxGridCellAttr_GetFont 617
-#define wxGridCellAttr_GetAlignment 618
-#define wxGridCellAttr_GetRenderer 619
-#define wxGridCellAttr_GetEditor 620
-#define wxGridCellAttr_IsReadOnly 621
-#define wxGridCellAttr_SetDefAttr 622
-#define wxDC_Blit 623
-#define wxDC_CalcBoundingBox 624
-#define wxDC_Clear 625
-#define wxDC_ComputeScaleAndOrigin 626
-#define wxDC_CrossHair 627
-#define wxDC_DestroyClippingRegion 628
-#define wxDC_DeviceToLogicalX 629
-#define wxDC_DeviceToLogicalXRel 630
-#define wxDC_DeviceToLogicalY 631
-#define wxDC_DeviceToLogicalYRel 632
-#define wxDC_DrawArc 633
-#define wxDC_DrawBitmap 634
-#define wxDC_DrawCheckMark 635
-#define wxDC_DrawCircle 636
-#define wxDC_DrawEllipse_2 638
-#define wxDC_DrawEllipse_1 639
-#define wxDC_DrawEllipticArc 640
-#define wxDC_DrawIcon 641
-#define wxDC_DrawLabel 642
-#define wxDC_DrawLine 643
-#define wxDC_DrawLines 644
-#define wxDC_DrawPolygon 646
-#define wxDC_DrawPoint 648
-#define wxDC_DrawRectangle_2 650
-#define wxDC_DrawRectangle_1 651
-#define wxDC_DrawRotatedText 652
-#define wxDC_DrawRoundedRectangle_3 654
-#define wxDC_DrawRoundedRectangle_2 655
-#define wxDC_DrawText 656
-#define wxDC_EndDoc 657
-#define wxDC_EndPage 658
-#define wxDC_FloodFill 659
-#define wxDC_GetBackground 660
-#define wxDC_GetBackgroundMode 661
-#define wxDC_GetBrush 662
-#define wxDC_GetCharHeight 663
-#define wxDC_GetCharWidth 664
-#define wxDC_GetClippingBox 665
-#define wxDC_GetFont 667
-#define wxDC_GetLayoutDirection 668
-#define wxDC_GetLogicalFunction 669
-#define wxDC_GetMapMode 670
-#define wxDC_GetMultiLineTextExtent_4 671
-#define wxDC_GetMultiLineTextExtent_1 672
-#define wxDC_GetPartialTextExtents 673
-#define wxDC_GetPen 674
-#define wxDC_GetPixel 675
-#define wxDC_GetPPI 676
-#define wxDC_GetSize 678
-#define wxDC_GetSizeMM 680
-#define wxDC_GetTextBackground 681
-#define wxDC_GetTextExtent_4 682
-#define wxDC_GetTextExtent_1 683
-#define wxDC_GetTextForeground 685
-#define wxDC_GetUserScale 686
-#define wxDC_GradientFillConcentric_3 687
-#define wxDC_GradientFillConcentric_4 688
-#define wxDC_GradientFillLinear 689
-#define wxDC_LogicalToDeviceX 690
-#define wxDC_LogicalToDeviceXRel 691
-#define wxDC_LogicalToDeviceY 692
-#define wxDC_LogicalToDeviceYRel 693
-#define wxDC_MaxX 694
-#define wxDC_MaxY 695
-#define wxDC_MinX 696
-#define wxDC_MinY 697
-#define wxDC_IsOk 698
-#define wxDC_ResetBoundingBox 699
-#define wxDC_SetAxisOrientation 700
-#define wxDC_SetBackground 701
-#define wxDC_SetBackgroundMode 702
-#define wxDC_SetBrush 703
-#define wxDC_SetClippingRegion_2 705
-#define wxDC_SetClippingRegion_1_1 706
-#define wxDC_SetClippingRegion_1_0 707
-#define wxDC_SetDeviceOrigin 708
-#define wxDC_SetFont 709
-#define wxDC_SetLayoutDirection 710
-#define wxDC_SetLogicalFunction 711
-#define wxDC_SetMapMode 712
-#define wxDC_SetPalette 713
-#define wxDC_SetPen 714
-#define wxDC_SetTextBackground 715
-#define wxDC_SetTextForeground 716
-#define wxDC_SetUserScale 717
-#define wxDC_StartDoc 718
-#define wxDC_StartPage 719
-#define wxMirrorDC_new 720
-#define wxMirrorDC_destroy 721
-#define wxScreenDC_new 722
-#define wxScreenDC_destruct 723
-#define wxPostScriptDC_new_0 724
-#define wxPostScriptDC_new_1 725
-#define wxPostScriptDC_destruct 726
-#define wxPostScriptDC_SetResolution 727
-#define wxPostScriptDC_GetResolution 728
-#define wxWindowDC_new_0 729
-#define wxWindowDC_new_1 730
-#define wxWindowDC_destruct 731
-#define wxClientDC_new_0 732
-#define wxClientDC_new_1 733
-#define wxClientDC_destroy 734
-#define wxPaintDC_new_0 735
-#define wxPaintDC_new_1 736
-#define wxPaintDC_destroy 737
-#define wxMemoryDC_new_1_0 739
-#define wxMemoryDC_new_1_1 740
-#define wxMemoryDC_new_0 741
-#define wxMemoryDC_destruct 743
-#define wxMemoryDC_SelectObject 744
-#define wxMemoryDC_SelectObjectAsSource 745
-#define wxBufferedDC_new_0 746
-#define wxBufferedDC_new_2 747
-#define wxBufferedDC_new_3 748
-#define wxBufferedDC_destruct 749
-#define wxBufferedDC_Init_2 750
-#define wxBufferedDC_Init_3 751
-#define wxBufferedPaintDC_new_3 752
-#define wxBufferedPaintDC_new_2 753
-#define wxBufferedPaintDC_destruct 754
-#define wxGraphicsObject_destruct 755
-#define wxGraphicsObject_GetRenderer 756
-#define wxGraphicsObject_IsNull 757
-#define wxGraphicsContext_destruct 758
-#define wxGraphicsContext_Create_1_1 759
-#define wxGraphicsContext_Create_1_0 760
-#define wxGraphicsContext_Create_0 761
-#define wxGraphicsContext_CreatePen 762
-#define wxGraphicsContext_CreateBrush 763
-#define wxGraphicsContext_CreateRadialGradientBrush 764
-#define wxGraphicsContext_CreateLinearGradientBrush 765
-#define wxGraphicsContext_CreateFont 766
-#define wxGraphicsContext_CreateMatrix 767
-#define wxGraphicsContext_CreatePath 768
-#define wxGraphicsContext_Clip_1 769
-#define wxGraphicsContext_Clip_4 770
-#define wxGraphicsContext_ResetClip 771
-#define wxGraphicsContext_DrawBitmap 772
-#define wxGraphicsContext_DrawEllipse 773
-#define wxGraphicsContext_DrawIcon 774
-#define wxGraphicsContext_DrawLines 775
-#define wxGraphicsContext_DrawPath 776
-#define wxGraphicsContext_DrawRectangle 777
-#define wxGraphicsContext_DrawRoundedRectangle 778
-#define wxGraphicsContext_DrawText_3 779
-#define wxGraphicsContext_DrawText_4_0 780
-#define wxGraphicsContext_DrawText_4_1 781
-#define wxGraphicsContext_DrawText_5 782
-#define wxGraphicsContext_FillPath 783
-#define wxGraphicsContext_StrokePath 784
-#define wxGraphicsContext_GetPartialTextExtents 785
-#define wxGraphicsContext_GetTextExtent 786
-#define wxGraphicsContext_Rotate 787
-#define wxGraphicsContext_Scale 788
-#define wxGraphicsContext_Translate 789
-#define wxGraphicsContext_GetTransform 790
-#define wxGraphicsContext_SetTransform 791
-#define wxGraphicsContext_ConcatTransform 792
-#define wxGraphicsContext_SetBrush_1_1 793
-#define wxGraphicsContext_SetBrush_1_0 794
-#define wxGraphicsContext_SetFont_1 795
-#define wxGraphicsContext_SetFont_2 796
-#define wxGraphicsContext_SetPen_1_0 797
-#define wxGraphicsContext_SetPen_1_1 798
-#define wxGraphicsContext_StrokeLine 799
-#define wxGraphicsContext_StrokeLines 800
-#define wxGraphicsMatrix_Concat 802
-#define wxGraphicsMatrix_Get 804
-#define wxGraphicsMatrix_Invert 805
-#define wxGraphicsMatrix_IsEqual 806
-#define wxGraphicsMatrix_IsIdentity 808
-#define wxGraphicsMatrix_Rotate 809
-#define wxGraphicsMatrix_Scale 810
-#define wxGraphicsMatrix_Translate 811
-#define wxGraphicsMatrix_Set 812
-#define wxGraphicsMatrix_TransformPoint 813
-#define wxGraphicsMatrix_TransformDistance 814
-#define wxGraphicsPath_MoveToPoint_2 815
-#define wxGraphicsPath_MoveToPoint_1 816
-#define wxGraphicsPath_AddArc_6 817
-#define wxGraphicsPath_AddArc_5 818
-#define wxGraphicsPath_AddArcToPoint 819
-#define wxGraphicsPath_AddCircle 820
-#define wxGraphicsPath_AddCurveToPoint_6 821
-#define wxGraphicsPath_AddCurveToPoint_3 822
-#define wxGraphicsPath_AddEllipse 823
-#define wxGraphicsPath_AddLineToPoint_2 824
-#define wxGraphicsPath_AddLineToPoint_1 825
-#define wxGraphicsPath_AddPath 826
-#define wxGraphicsPath_AddQuadCurveToPoint 827
-#define wxGraphicsPath_AddRectangle 828
-#define wxGraphicsPath_AddRoundedRectangle 829
-#define wxGraphicsPath_CloseSubpath 830
-#define wxGraphicsPath_Contains_3 831
-#define wxGraphicsPath_Contains_2 832
-#define wxGraphicsPath_GetBox 834
-#define wxGraphicsPath_GetCurrentPoint 836
-#define wxGraphicsPath_Transform 837
-#define wxGraphicsRenderer_GetDefaultRenderer 838
-#define wxGraphicsRenderer_CreateContext_1_1 839
-#define wxGraphicsRenderer_CreateContext_1_0 840
-#define wxGraphicsRenderer_CreatePen 841
-#define wxGraphicsRenderer_CreateBrush 842
-#define wxGraphicsRenderer_CreateLinearGradientBrush 843
-#define wxGraphicsRenderer_CreateRadialGradientBrush 844
-#define wxGraphicsRenderer_CreateFont 845
-#define wxGraphicsRenderer_CreateMatrix 846
-#define wxGraphicsRenderer_CreatePath 847
-#define wxMenuBar_new_1 849
-#define wxMenuBar_new_0 851
-#define wxMenuBar_destruct 853
-#define wxMenuBar_Append 854
-#define wxMenuBar_Check 855
-#define wxMenuBar_Enable_2 856
-#define wxMenuBar_Enable_1 857
-#define wxMenuBar_EnableTop 858
-#define wxMenuBar_FindMenu 859
-#define wxMenuBar_FindMenuItem 860
-#define wxMenuBar_FindItem 861
-#define wxMenuBar_GetHelpString 862
-#define wxMenuBar_GetLabel_1 863
-#define wxMenuBar_GetLabel_0 864
-#define wxMenuBar_GetLabelTop 865
-#define wxMenuBar_GetMenu 866
-#define wxMenuBar_GetMenuCount 867
-#define wxMenuBar_Insert 868
-#define wxMenuBar_IsChecked 869
-#define wxMenuBar_IsEnabled_1 870
-#define wxMenuBar_IsEnabled_0 871
-#define wxMenuBar_Remove 872
-#define wxMenuBar_Replace 873
-#define wxMenuBar_SetHelpString 874
-#define wxMenuBar_SetLabel_2 875
-#define wxMenuBar_SetLabel_1 876
-#define wxMenuBar_SetLabelTop 877
-#define wxControl_GetLabel 878
-#define wxControl_SetLabel 879
-#define wxControlWithItems_Append_1 880
-#define wxControlWithItems_Append_2 881
-#define wxControlWithItems_appendStrings_1 882
-#define wxControlWithItems_Clear 883
-#define wxControlWithItems_Delete 884
-#define wxControlWithItems_FindString 885
-#define wxControlWithItems_getClientData 886
-#define wxControlWithItems_setClientData 887
-#define wxControlWithItems_GetCount 888
-#define wxControlWithItems_GetSelection 889
-#define wxControlWithItems_GetString 890
-#define wxControlWithItems_GetStringSelection 891
-#define wxControlWithItems_Insert_2 892
-#define wxControlWithItems_Insert_3 893
-#define wxControlWithItems_IsEmpty 894
-#define wxControlWithItems_Select 895
-#define wxControlWithItems_SetSelection 896
-#define wxControlWithItems_SetString 897
-#define wxControlWithItems_SetStringSelection 898
-#define wxMenu_new_2 901
-#define wxMenu_new_1 902
-#define wxMenu_destruct 904
-#define wxMenu_Append_3 905
-#define wxMenu_Append_1 906
-#define wxMenu_Append_4_0 907
-#define wxMenu_Append_4_1 908
-#define wxMenu_AppendCheckItem 909
-#define wxMenu_AppendRadioItem 910
-#define wxMenu_AppendSeparator 911
-#define wxMenu_Break 912
-#define wxMenu_Check 913
-#define wxMenu_Delete_1_0 914
-#define wxMenu_Delete_1_1 915
-#define wxMenu_Destroy_1_0 916
-#define wxMenu_Destroy_1_1 917
-#define wxMenu_Enable 918
-#define wxMenu_FindItem_1 919
-#define wxMenu_FindItem_2 920
-#define wxMenu_FindItemByPosition 921
-#define wxMenu_GetHelpString 922
-#define wxMenu_GetLabel 923
-#define wxMenu_GetMenuItemCount 924
-#define wxMenu_GetMenuItems 925
-#define wxMenu_GetTitle 927
-#define wxMenu_Insert_2 928
-#define wxMenu_Insert_3 929
-#define wxMenu_Insert_5_1 930
-#define wxMenu_Insert_5_0 931
-#define wxMenu_InsertCheckItem 932
-#define wxMenu_InsertRadioItem 933
-#define wxMenu_InsertSeparator 934
-#define wxMenu_IsChecked 935
-#define wxMenu_IsEnabled 936
-#define wxMenu_Prepend_1 937
-#define wxMenu_Prepend_2 938
-#define wxMenu_Prepend_4_1 939
-#define wxMenu_Prepend_4_0 940
-#define wxMenu_PrependCheckItem 941
-#define wxMenu_PrependRadioItem 942
-#define wxMenu_PrependSeparator 943
-#define wxMenu_Remove_1_0 944
-#define wxMenu_Remove_1_1 945
-#define wxMenu_SetHelpString 946
-#define wxMenu_SetLabel 947
-#define wxMenu_SetTitle 948
-#define wxMenuItem_new 949
-#define wxMenuItem_destruct 951
-#define wxMenuItem_Check 952
-#define wxMenuItem_Enable 953
-#define wxMenuItem_GetBitmap 954
-#define wxMenuItem_GetHelp 955
-#define wxMenuItem_GetId 956
-#define wxMenuItem_GetKind 957
-#define wxMenuItem_GetLabel 958
-#define wxMenuItem_GetLabelFromText 959
-#define wxMenuItem_GetMenu 960
-#define wxMenuItem_GetText 961
-#define wxMenuItem_GetSubMenu 962
-#define wxMenuItem_IsCheckable 963
-#define wxMenuItem_IsChecked 964
-#define wxMenuItem_IsEnabled 965
-#define wxMenuItem_IsSeparator 966
-#define wxMenuItem_IsSubMenu 967
-#define wxMenuItem_SetBitmap 968
-#define wxMenuItem_SetHelp 969
-#define wxMenuItem_SetMenu 970
-#define wxMenuItem_SetSubMenu 971
-#define wxMenuItem_SetText 972
-#define wxToolBar_AddControl 973
-#define wxToolBar_AddSeparator 974
-#define wxToolBar_AddTool_5 975
-#define wxToolBar_AddTool_4_0 976
-#define wxToolBar_AddTool_1 977
-#define wxToolBar_AddTool_4_1 978
-#define wxToolBar_AddTool_3 979
-#define wxToolBar_AddTool_6 980
-#define wxToolBar_AddCheckTool 981
-#define wxToolBar_AddRadioTool 982
-#define wxToolBar_DeleteTool 983
-#define wxToolBar_DeleteToolByPos 984
-#define wxToolBar_EnableTool 985
-#define wxToolBar_FindById 986
-#define wxToolBar_FindControl 987
-#define wxToolBar_FindToolForPosition 988
-#define wxToolBar_GetToolSize 989
-#define wxToolBar_GetToolBitmapSize 990
-#define wxToolBar_GetMargins 991
-#define wxToolBar_GetToolEnabled 992
-#define wxToolBar_GetToolLongHelp 993
-#define wxToolBar_GetToolPacking 994
-#define wxToolBar_GetToolPos 995
-#define wxToolBar_GetToolSeparation 996
-#define wxToolBar_GetToolShortHelp 997
-#define wxToolBar_GetToolState 998
-#define wxToolBar_InsertControl 999
-#define wxToolBar_InsertSeparator 1000
-#define wxToolBar_InsertTool_5 1001
-#define wxToolBar_InsertTool_2 1002
-#define wxToolBar_InsertTool_4 1003
-#define wxToolBar_Realize 1004
-#define wxToolBar_RemoveTool 1005
-#define wxToolBar_SetMargins 1006
-#define wxToolBar_SetToolBitmapSize 1007
-#define wxToolBar_SetToolLongHelp 1008
-#define wxToolBar_SetToolPacking 1009
-#define wxToolBar_SetToolShortHelp 1010
-#define wxToolBar_SetToolSeparation 1011
-#define wxToolBar_ToggleTool 1012
-#define wxStatusBar_new_0 1014
-#define wxStatusBar_new_2 1015
-#define wxStatusBar_destruct 1017
-#define wxStatusBar_Create 1018
-#define wxStatusBar_GetFieldRect 1019
-#define wxStatusBar_GetFieldsCount 1020
-#define wxStatusBar_GetStatusText 1021
-#define wxStatusBar_PopStatusText 1022
-#define wxStatusBar_PushStatusText 1023
-#define wxStatusBar_SetFieldsCount 1024
-#define wxStatusBar_SetMinHeight 1025
-#define wxStatusBar_SetStatusText 1026
-#define wxStatusBar_SetStatusWidths 1027
-#define wxStatusBar_SetStatusStyles 1028
-#define wxBitmap_new_0 1029
-#define wxBitmap_new_3 1030
-#define wxBitmap_new_4 1031
-#define wxBitmap_new_2_0 1032
-#define wxBitmap_new_2_1 1033
-#define wxBitmap_destruct 1034
-#define wxBitmap_ConvertToImage 1035
-#define wxBitmap_CopyFromIcon 1036
-#define wxBitmap_Create 1037
-#define wxBitmap_GetDepth 1038
-#define wxBitmap_GetHeight 1039
-#define wxBitmap_GetPalette 1040
-#define wxBitmap_GetMask 1041
-#define wxBitmap_GetWidth 1042
-#define wxBitmap_GetSubBitmap 1043
-#define wxBitmap_LoadFile 1044
-#define wxBitmap_Ok 1045
-#define wxBitmap_SaveFile 1046
-#define wxBitmap_SetDepth 1047
-#define wxBitmap_SetHeight 1048
-#define wxBitmap_SetMask 1049
-#define wxBitmap_SetPalette 1050
-#define wxBitmap_SetWidth 1051
-#define wxIcon_new_0 1052
-#define wxIcon_new_2 1053
-#define wxIcon_new_1 1054
-#define wxIcon_CopyFromBitmap 1055
-#define wxIcon_destroy 1056
-#define wxIconBundle_new_0 1057
-#define wxIconBundle_new_2 1058
-#define wxIconBundle_new_1_0 1059
-#define wxIconBundle_new_1_1 1060
-#define wxIconBundle_destruct 1061
-#define wxIconBundle_AddIcon_2 1062
-#define wxIconBundle_AddIcon_1 1063
-#define wxIconBundle_GetIcon_1_1 1064
-#define wxIconBundle_GetIcon_1_0 1065
-#define wxCursor_new_0 1066
-#define wxCursor_new_1_0 1067
-#define wxCursor_new_1_1 1068
-#define wxCursor_new_4 1069
-#define wxCursor_destruct 1070
-#define wxCursor_Ok 1071
-#define wxMask_new_0 1072
-#define wxMask_new_2_1 1073
-#define wxMask_new_2_0 1074
-#define wxMask_new_1 1075
-#define wxMask_destruct 1076
-#define wxMask_Create_2_1 1077
-#define wxMask_Create_2_0 1078
-#define wxMask_Create_1 1079
-#define wxImage_new_0 1080
-#define wxImage_new_3_0 1081
-#define wxImage_new_4 1082
-#define wxImage_new_5 1083
-#define wxImage_new_2 1084
-#define wxImage_new_3_1 1085
-#define wxImage_Blur 1086
-#define wxImage_BlurHorizontal 1087
-#define wxImage_BlurVertical 1088
-#define wxImage_ConvertAlphaToMask 1089
-#define wxImage_ConvertToGreyscale 1090
-#define wxImage_ConvertToMono 1091
-#define wxImage_Copy 1092
-#define wxImage_Create_3 1093
-#define wxImage_Create_4 1094
-#define wxImage_Create_5 1095
-#define wxImage_Destroy 1096
-#define wxImage_FindFirstUnusedColour 1097
-#define wxImage_GetImageExtWildcard 1098
-#define wxImage_GetAlpha_2 1099
-#define wxImage_GetAlpha_0 1100
-#define wxImage_GetBlue 1101
-#define wxImage_GetData 1102
-#define wxImage_GetGreen 1103
-#define wxImage_GetImageCount 1104
-#define wxImage_GetHeight 1105
-#define wxImage_GetMaskBlue 1106
-#define wxImage_GetMaskGreen 1107
-#define wxImage_GetMaskRed 1108
-#define wxImage_GetOrFindMaskColour 1109
-#define wxImage_GetPalette 1110
-#define wxImage_GetRed 1111
-#define wxImage_GetSubImage 1112
-#define wxImage_GetWidth 1113
-#define wxImage_HasAlpha 1114
-#define wxImage_HasMask 1115
-#define wxImage_GetOption 1116
-#define wxImage_GetOptionInt 1117
-#define wxImage_HasOption 1118
-#define wxImage_InitAlpha 1119
-#define wxImage_InitStandardHandlers 1120
-#define wxImage_IsTransparent 1121
-#define wxImage_LoadFile_2 1122
-#define wxImage_LoadFile_3 1123
-#define wxImage_Ok 1124
-#define wxImage_RemoveHandler 1125
-#define wxImage_Mirror 1126
-#define wxImage_Replace 1127
-#define wxImage_Rescale 1128
-#define wxImage_Resize 1129
-#define wxImage_Rotate 1130
-#define wxImage_RotateHue 1131
-#define wxImage_Rotate90 1132
-#define wxImage_SaveFile_1 1133
-#define wxImage_SaveFile_2_0 1134
-#define wxImage_SaveFile_2_1 1135
-#define wxImage_Scale 1136
-#define wxImage_Size 1137
-#define wxImage_SetAlpha_3 1138
-#define wxImage_SetAlpha_2 1139
-#define wxImage_SetData_2 1140
-#define wxImage_SetData_4 1141
-#define wxImage_SetMask 1142
-#define wxImage_SetMaskColour 1143
-#define wxImage_SetMaskFromImage 1144
-#define wxImage_SetOption_2_1 1145
-#define wxImage_SetOption_2_0 1146
-#define wxImage_SetPalette 1147
-#define wxImage_SetRGB_5 1148
-#define wxImage_SetRGB_4 1149
-#define wxImage_destroy 1150
-#define wxBrush_new_0 1151
-#define wxBrush_new_2 1152
-#define wxBrush_new_1 1153
-#define wxBrush_destruct 1155
-#define wxBrush_GetColour 1156
-#define wxBrush_GetStipple 1157
-#define wxBrush_GetStyle 1158
-#define wxBrush_IsHatch 1159
-#define wxBrush_IsOk 1160
-#define wxBrush_SetColour_1 1161
-#define wxBrush_SetColour_3 1162
-#define wxBrush_SetStipple 1163
-#define wxBrush_SetStyle 1164
-#define wxPen_new_0 1165
-#define wxPen_new_2 1166
-#define wxPen_destruct 1167
-#define wxPen_GetCap 1168
-#define wxPen_GetColour 1169
-#define wxPen_GetJoin 1170
-#define wxPen_GetStyle 1171
-#define wxPen_GetWidth 1172
-#define wxPen_IsOk 1173
-#define wxPen_SetCap 1174
-#define wxPen_SetColour_1 1175
-#define wxPen_SetColour_3 1176
-#define wxPen_SetJoin 1177
-#define wxPen_SetStyle 1178
-#define wxPen_SetWidth 1179
-#define wxRegion_new_0 1180
-#define wxRegion_new_4 1181
-#define wxRegion_new_2 1182
-#define wxRegion_new_1_1 1183
-#define wxRegion_new_1_0 1185
-#define wxRegion_destruct 1187
-#define wxRegion_Clear 1188
-#define wxRegion_Contains_2 1189
-#define wxRegion_Contains_1_0 1190
-#define wxRegion_Contains_4 1191
-#define wxRegion_Contains_1_1 1192
-#define wxRegion_ConvertToBitmap 1193
-#define wxRegion_GetBox 1194
-#define wxRegion_Intersect_4 1195
-#define wxRegion_Intersect_1_1 1196
-#define wxRegion_Intersect_1_0 1197
-#define wxRegion_IsEmpty 1198
-#define wxRegion_Subtract_4 1199
-#define wxRegion_Subtract_1_1 1200
-#define wxRegion_Subtract_1_0 1201
-#define wxRegion_Offset_2 1202
-#define wxRegion_Offset_1 1203
-#define wxRegion_Union_4 1204
-#define wxRegion_Union_1_2 1205
-#define wxRegion_Union_1_1 1206
-#define wxRegion_Union_1_0 1207
-#define wxRegion_Union_3 1208
-#define wxRegion_Xor_4 1209
-#define wxRegion_Xor_1_1 1210
-#define wxRegion_Xor_1_0 1211
-#define wxAcceleratorTable_new_0 1212
-#define wxAcceleratorTable_new_2 1213
-#define wxAcceleratorTable_destruct 1214
-#define wxAcceleratorTable_Ok 1215
-#define wxAcceleratorEntry_new_1_0 1216
-#define wxAcceleratorEntry_new_1_1 1217
-#define wxAcceleratorEntry_GetCommand 1218
-#define wxAcceleratorEntry_GetFlags 1219
-#define wxAcceleratorEntry_GetKeyCode 1220
-#define wxAcceleratorEntry_Set 1221
-#define wxAcceleratorEntry_destroy 1222
-#define wxCaret_new_3 1227
-#define wxCaret_new_2 1228
-#define wxCaret_destruct 1230
-#define wxCaret_Create_3 1231
-#define wxCaret_Create_2 1232
-#define wxCaret_GetBlinkTime 1233
-#define wxCaret_GetPosition 1235
-#define wxCaret_GetSize 1237
-#define wxCaret_GetWindow 1238
-#define wxCaret_Hide 1239
-#define wxCaret_IsOk 1240
-#define wxCaret_IsVisible 1241
-#define wxCaret_Move_2 1242
-#define wxCaret_Move_1 1243
-#define wxCaret_SetBlinkTime 1244
-#define wxCaret_SetSize_2 1245
-#define wxCaret_SetSize_1 1246
-#define wxCaret_Show 1247
-#define wxSizer_Add_2_1 1248
-#define wxSizer_Add_2_0 1249
-#define wxSizer_Add_3 1250
-#define wxSizer_Add_2_3 1251
-#define wxSizer_Add_2_2 1252
-#define wxSizer_AddSpacer 1253
-#define wxSizer_AddStretchSpacer 1254
-#define wxSizer_CalcMin 1255
-#define wxSizer_Clear 1256
-#define wxSizer_Detach_1_2 1257
-#define wxSizer_Detach_1_1 1258
-#define wxSizer_Detach_1_0 1259
-#define wxSizer_Fit 1260
-#define wxSizer_FitInside 1261
-#define wxSizer_GetChildren 1262
-#define wxSizer_GetItem_2_1 1263
-#define wxSizer_GetItem_2_0 1264
-#define wxSizer_GetItem_1 1265
-#define wxSizer_GetSize 1266
-#define wxSizer_GetPosition 1267
-#define wxSizer_GetMinSize 1268
-#define wxSizer_Hide_2_0 1269
-#define wxSizer_Hide_2_1 1270
-#define wxSizer_Hide_1 1271
-#define wxSizer_Insert_3_1 1272
-#define wxSizer_Insert_3_0 1273
-#define wxSizer_Insert_4 1274
-#define wxSizer_Insert_3_3 1275
-#define wxSizer_Insert_3_2 1276
-#define wxSizer_Insert_2 1277
-#define wxSizer_InsertSpacer 1278
-#define wxSizer_InsertStretchSpacer 1279
-#define wxSizer_IsShown_1_2 1280
-#define wxSizer_IsShown_1_1 1281
-#define wxSizer_IsShown_1_0 1282
-#define wxSizer_Layout 1283
-#define wxSizer_Prepend_2_1 1284
-#define wxSizer_Prepend_2_0 1285
-#define wxSizer_Prepend_3 1286
-#define wxSizer_Prepend_2_3 1287
-#define wxSizer_Prepend_2_2 1288
-#define wxSizer_Prepend_1 1289
-#define wxSizer_PrependSpacer 1290
-#define wxSizer_PrependStretchSpacer 1291
-#define wxSizer_RecalcSizes 1292
-#define wxSizer_Remove_1_1 1293
-#define wxSizer_Remove_1_0 1294
-#define wxSizer_Replace_3_1 1295
-#define wxSizer_Replace_3_0 1296
-#define wxSizer_Replace_2 1297
-#define wxSizer_SetDimension 1298
-#define wxSizer_SetMinSize_2 1299
-#define wxSizer_SetMinSize_1 1300
-#define wxSizer_SetItemMinSize_3_2 1301
-#define wxSizer_SetItemMinSize_2_2 1302
-#define wxSizer_SetItemMinSize_3_1 1303
-#define wxSizer_SetItemMinSize_2_1 1304
-#define wxSizer_SetItemMinSize_3_0 1305
-#define wxSizer_SetItemMinSize_2_0 1306
-#define wxSizer_SetSizeHints 1307
-#define wxSizer_SetVirtualSizeHints 1308
-#define wxSizer_Show_2_2 1309
-#define wxSizer_Show_2_1 1310
-#define wxSizer_Show_2_0 1311
-#define wxSizer_Show_1 1312
-#define wxSizerFlags_new 1313
-#define wxSizerFlags_Align 1314
-#define wxSizerFlags_Border_2 1315
-#define wxSizerFlags_Border_1 1316
-#define wxSizerFlags_Center 1317
-#define wxSizerFlags_Centre 1318
-#define wxSizerFlags_Expand 1319
-#define wxSizerFlags_Left 1320
-#define wxSizerFlags_Proportion 1321
-#define wxSizerFlags_Right 1322
-#define wxSizerFlags_destroy 1323
-#define wxSizerItem_new_5_1 1324
-#define wxSizerItem_new_2_1 1325
-#define wxSizerItem_new_5_0 1326
-#define wxSizerItem_new_2_0 1327
-#define wxSizerItem_new_6 1328
-#define wxSizerItem_new_3 1329
-#define wxSizerItem_new_0 1330
-#define wxSizerItem_destruct 1331
-#define wxSizerItem_CalcMin 1332
-#define wxSizerItem_DeleteWindows 1333
-#define wxSizerItem_DetachSizer 1334
-#define wxSizerItem_GetBorder 1335
-#define wxSizerItem_GetFlag 1336
-#define wxSizerItem_GetMinSize 1337
-#define wxSizerItem_GetPosition 1338
-#define wxSizerItem_GetProportion 1339
-#define wxSizerItem_GetRatio 1340
-#define wxSizerItem_GetRect 1341
-#define wxSizerItem_GetSize 1342
-#define wxSizerItem_GetSizer 1343
-#define wxSizerItem_GetSpacer 1344
-#define wxSizerItem_GetUserData 1345
-#define wxSizerItem_GetWindow 1346
-#define wxSizerItem_IsSizer 1347
-#define wxSizerItem_IsShown 1348
-#define wxSizerItem_IsSpacer 1349
-#define wxSizerItem_IsWindow 1350
-#define wxSizerItem_SetBorder 1351
-#define wxSizerItem_SetDimension 1352
-#define wxSizerItem_SetFlag 1353
-#define wxSizerItem_SetInitSize 1354
-#define wxSizerItem_SetMinSize_1 1355
-#define wxSizerItem_SetMinSize_2 1356
-#define wxSizerItem_SetProportion 1357
-#define wxSizerItem_SetRatio_2 1358
-#define wxSizerItem_SetRatio_1_1 1359
-#define wxSizerItem_SetRatio_1_0 1360
-#define wxSizerItem_SetSizer 1361
-#define wxSizerItem_SetSpacer_1 1362
-#define wxSizerItem_SetSpacer_2 1363
-#define wxSizerItem_SetWindow 1364
-#define wxSizerItem_Show 1365
-#define wxBoxSizer_new 1366
-#define wxBoxSizer_GetOrientation 1367
-#define wxBoxSizer_destroy 1368
-#define wxStaticBoxSizer_new_2 1369
-#define wxStaticBoxSizer_new_3 1370
-#define wxStaticBoxSizer_GetStaticBox 1371
-#define wxStaticBoxSizer_destroy 1372
-#define wxGridSizer_new_4 1373
-#define wxGridSizer_new_2 1374
-#define wxGridSizer_GetCols 1375
-#define wxGridSizer_GetHGap 1376
-#define wxGridSizer_GetRows 1377
-#define wxGridSizer_GetVGap 1378
-#define wxGridSizer_SetCols 1379
-#define wxGridSizer_SetHGap 1380
-#define wxGridSizer_SetRows 1381
-#define wxGridSizer_SetVGap 1382
-#define wxGridSizer_destroy 1383
-#define wxFlexGridSizer_new_4 1384
-#define wxFlexGridSizer_new_2 1385
-#define wxFlexGridSizer_AddGrowableCol 1386
-#define wxFlexGridSizer_AddGrowableRow 1387
-#define wxFlexGridSizer_GetFlexibleDirection 1388
-#define wxFlexGridSizer_GetNonFlexibleGrowMode 1389
-#define wxFlexGridSizer_RemoveGrowableCol 1390
-#define wxFlexGridSizer_RemoveGrowableRow 1391
-#define wxFlexGridSizer_SetFlexibleDirection 1392
-#define wxFlexGridSizer_SetNonFlexibleGrowMode 1393
-#define wxFlexGridSizer_destroy 1394
-#define wxGridBagSizer_new 1395
-#define wxGridBagSizer_Add_3_2 1396
-#define wxGridBagSizer_Add_3_1 1397
-#define wxGridBagSizer_Add_4 1398
-#define wxGridBagSizer_Add_1_0 1399
-#define wxGridBagSizer_Add_2_1 1400
-#define wxGridBagSizer_Add_2_0 1401
-#define wxGridBagSizer_Add_3_0 1402
-#define wxGridBagSizer_Add_1_1 1403
-#define wxGridBagSizer_CalcMin 1404
-#define wxGridBagSizer_CheckForIntersection_2 1405
-#define wxGridBagSizer_CheckForIntersection_3 1406
-#define wxGridBagSizer_FindItem_1_1 1407
-#define wxGridBagSizer_FindItem_1_0 1408
-#define wxGridBagSizer_FindItemAtPoint 1409
-#define wxGridBagSizer_FindItemAtPosition 1410
-#define wxGridBagSizer_FindItemWithData 1411
-#define wxGridBagSizer_GetCellSize 1412
-#define wxGridBagSizer_GetEmptyCellSize 1413
-#define wxGridBagSizer_GetItemPosition_1_2 1414
-#define wxGridBagSizer_GetItemPosition_1_1 1415
-#define wxGridBagSizer_GetItemPosition_1_0 1416
-#define wxGridBagSizer_GetItemSpan_1_2 1417
-#define wxGridBagSizer_GetItemSpan_1_1 1418
-#define wxGridBagSizer_GetItemSpan_1_0 1419
-#define wxGridBagSizer_SetEmptyCellSize 1420
-#define wxGridBagSizer_SetItemPosition_2_2 1421
-#define wxGridBagSizer_SetItemPosition_2_1 1422
-#define wxGridBagSizer_SetItemPosition_2_0 1423
-#define wxGridBagSizer_SetItemSpan_2_2 1424
-#define wxGridBagSizer_SetItemSpan_2_1 1425
-#define wxGridBagSizer_SetItemSpan_2_0 1426
-#define wxGridBagSizer_destroy 1427
-#define wxStdDialogButtonSizer_new 1428
-#define wxStdDialogButtonSizer_AddButton 1429
-#define wxStdDialogButtonSizer_Realize 1430
-#define wxStdDialogButtonSizer_SetAffirmativeButton 1431
-#define wxStdDialogButtonSizer_SetCancelButton 1432
-#define wxStdDialogButtonSizer_SetNegativeButton 1433
-#define wxStdDialogButtonSizer_destroy 1434
-#define wxFont_new_0 1435
-#define wxFont_new_1 1436
-#define wxFont_new_5 1437
-#define wxFont_destruct 1439
-#define wxFont_IsFixedWidth 1440
-#define wxFont_GetDefaultEncoding 1441
-#define wxFont_GetFaceName 1442
-#define wxFont_GetFamily 1443
-#define wxFont_GetNativeFontInfoDesc 1444
-#define wxFont_GetNativeFontInfoUserDesc 1445
-#define wxFont_GetPointSize 1446
-#define wxFont_GetStyle 1447
-#define wxFont_GetUnderlined 1448
-#define wxFont_GetWeight 1449
-#define wxFont_Ok 1450
-#define wxFont_SetDefaultEncoding 1451
-#define wxFont_SetFaceName 1452
-#define wxFont_SetFamily 1453
-#define wxFont_SetPointSize 1454
-#define wxFont_SetStyle 1455
-#define wxFont_SetUnderlined 1456
-#define wxFont_SetWeight 1457
-#define wxToolTip_Enable 1458
-#define wxToolTip_SetDelay 1459
-#define wxToolTip_new 1460
-#define wxToolTip_SetTip 1461
-#define wxToolTip_GetTip 1462
-#define wxToolTip_GetWindow 1463
-#define wxToolTip_destroy 1464
-#define wxButton_new_3 1466
-#define wxButton_new_0 1467
-#define wxButton_destruct 1468
-#define wxButton_Create 1469
-#define wxButton_GetDefaultSize 1470
-#define wxButton_SetDefault 1471
-#define wxButton_SetLabel 1472
-#define wxBitmapButton_new_4 1474
-#define wxBitmapButton_new_0 1475
-#define wxBitmapButton_Create 1476
-#define wxBitmapButton_GetBitmapDisabled 1477
-#define wxBitmapButton_GetBitmapFocus 1479
-#define wxBitmapButton_GetBitmapLabel 1481
-#define wxBitmapButton_GetBitmapSelected 1483
-#define wxBitmapButton_SetBitmapDisabled 1485
-#define wxBitmapButton_SetBitmapFocus 1486
-#define wxBitmapButton_SetBitmapLabel 1487
-#define wxBitmapButton_SetBitmapSelected 1488
-#define wxBitmapButton_destroy 1489
-#define wxToggleButton_new_0 1490
-#define wxToggleButton_new_4 1491
-#define wxToggleButton_Create 1492
-#define wxToggleButton_GetValue 1493
-#define wxToggleButton_SetValue 1494
-#define wxToggleButton_destroy 1495
-#define wxCalendarCtrl_new_0 1496
-#define wxCalendarCtrl_new_3 1497
-#define wxCalendarCtrl_Create 1498
-#define wxCalendarCtrl_destruct 1499
-#define wxCalendarCtrl_SetDate 1500
-#define wxCalendarCtrl_GetDate 1501
-#define wxCalendarCtrl_EnableYearChange 1502
-#define wxCalendarCtrl_EnableMonthChange 1503
-#define wxCalendarCtrl_EnableHolidayDisplay 1504
-#define wxCalendarCtrl_SetHeaderColours 1505
-#define wxCalendarCtrl_GetHeaderColourFg 1506
-#define wxCalendarCtrl_GetHeaderColourBg 1507
-#define wxCalendarCtrl_SetHighlightColours 1508
-#define wxCalendarCtrl_GetHighlightColourFg 1509
-#define wxCalendarCtrl_GetHighlightColourBg 1510
-#define wxCalendarCtrl_SetHolidayColours 1511
-#define wxCalendarCtrl_GetHolidayColourFg 1512
-#define wxCalendarCtrl_GetHolidayColourBg 1513
-#define wxCalendarCtrl_GetAttr 1514
-#define wxCalendarCtrl_SetAttr 1515
-#define wxCalendarCtrl_SetHoliday 1516
-#define wxCalendarCtrl_ResetAttr 1517
-#define wxCalendarCtrl_HitTest 1518
-#define wxCalendarDateAttr_new_0 1519
-#define wxCalendarDateAttr_new_2_1 1520
-#define wxCalendarDateAttr_new_2_0 1521
-#define wxCalendarDateAttr_SetTextColour 1522
-#define wxCalendarDateAttr_SetBackgroundColour 1523
-#define wxCalendarDateAttr_SetBorderColour 1524
-#define wxCalendarDateAttr_SetFont 1525
-#define wxCalendarDateAttr_SetBorder 1526
-#define wxCalendarDateAttr_SetHoliday 1527
-#define wxCalendarDateAttr_HasTextColour 1528
-#define wxCalendarDateAttr_HasBackgroundColour 1529
-#define wxCalendarDateAttr_HasBorderColour 1530
-#define wxCalendarDateAttr_HasFont 1531
-#define wxCalendarDateAttr_HasBorder 1532
-#define wxCalendarDateAttr_IsHoliday 1533
-#define wxCalendarDateAttr_GetTextColour 1534
-#define wxCalendarDateAttr_GetBackgroundColour 1535
-#define wxCalendarDateAttr_GetBorderColour 1536
-#define wxCalendarDateAttr_GetFont 1537
-#define wxCalendarDateAttr_GetBorder 1538
-#define wxCalendarDateAttr_destroy 1539
-#define wxCheckBox_new_4 1541
-#define wxCheckBox_new_0 1542
-#define wxCheckBox_Create 1543
-#define wxCheckBox_GetValue 1544
-#define wxCheckBox_Get3StateValue 1545
-#define wxCheckBox_Is3rdStateAllowedForUser 1546
-#define wxCheckBox_Is3State 1547
-#define wxCheckBox_IsChecked 1548
-#define wxCheckBox_SetValue 1549
-#define wxCheckBox_Set3StateValue 1550
-#define wxCheckBox_destroy 1551
-#define wxCheckListBox_new_0 1552
-#define wxCheckListBox_new_3 1554
-#define wxCheckListBox_Check 1555
-#define wxCheckListBox_IsChecked 1556
-#define wxCheckListBox_destroy 1557
-#define wxChoice_new_3 1560
-#define wxChoice_new_0 1561
-#define wxChoice_destruct 1563
-#define wxChoice_Create 1565
-#define wxChoice_Delete 1566
-#define wxChoice_GetColumns 1567
-#define wxChoice_SetColumns 1568
-#define wxComboBox_new_0 1569
-#define wxComboBox_new_3 1571
-#define wxComboBox_destruct 1572
-#define wxComboBox_Create 1574
-#define wxComboBox_CanCopy 1575
-#define wxComboBox_CanCut 1576
-#define wxComboBox_CanPaste 1577
-#define wxComboBox_CanRedo 1578
-#define wxComboBox_CanUndo 1579
-#define wxComboBox_Copy 1580
-#define wxComboBox_Cut 1581
-#define wxComboBox_GetInsertionPoint 1582
-#define wxComboBox_GetLastPosition 1583
-#define wxComboBox_GetValue 1584
-#define wxComboBox_Paste 1585
-#define wxComboBox_Redo 1586
-#define wxComboBox_Replace 1587
-#define wxComboBox_Remove 1588
-#define wxComboBox_SetInsertionPoint 1589
-#define wxComboBox_SetInsertionPointEnd 1590
-#define wxComboBox_SetSelection_1 1591
-#define wxComboBox_SetSelection_2 1592
-#define wxComboBox_SetValue 1593
-#define wxComboBox_Undo 1594
-#define wxGauge_new_0 1595
-#define wxGauge_new_4 1596
-#define wxGauge_Create 1597
-#define wxGauge_GetBezelFace 1598
-#define wxGauge_GetRange 1599
-#define wxGauge_GetShadowWidth 1600
-#define wxGauge_GetValue 1601
-#define wxGauge_IsVertical 1602
-#define wxGauge_SetBezelFace 1603
-#define wxGauge_SetRange 1604
-#define wxGauge_SetShadowWidth 1605
-#define wxGauge_SetValue 1606
-#define wxGauge_Pulse 1607
-#define wxGauge_destroy 1608
-#define wxGenericDirCtrl_new_0 1609
-#define wxGenericDirCtrl_new_2 1610
-#define wxGenericDirCtrl_destruct 1611
-#define wxGenericDirCtrl_Create 1612
-#define wxGenericDirCtrl_Init 1613
-#define wxGenericDirCtrl_CollapseTree 1614
-#define wxGenericDirCtrl_ExpandPath 1615
-#define wxGenericDirCtrl_GetDefaultPath 1616
-#define wxGenericDirCtrl_GetPath 1617
-#define wxGenericDirCtrl_GetFilePath 1618
-#define wxGenericDirCtrl_GetFilter 1619
-#define wxGenericDirCtrl_GetFilterIndex 1620
-#define wxGenericDirCtrl_GetRootId 1621
-#define wxGenericDirCtrl_GetTreeCtrl 1622
-#define wxGenericDirCtrl_ReCreateTree 1623
-#define wxGenericDirCtrl_SetDefaultPath 1624
-#define wxGenericDirCtrl_SetFilter 1625
-#define wxGenericDirCtrl_SetFilterIndex 1626
-#define wxGenericDirCtrl_SetPath 1627
-#define wxStaticBox_new_4 1629
-#define wxStaticBox_new_0 1630
-#define wxStaticBox_Create 1631
-#define wxStaticBox_destroy 1632
-#define wxStaticLine_new_2 1634
-#define wxStaticLine_new_0 1635
-#define wxStaticLine_Create 1636
-#define wxStaticLine_IsVertical 1637
-#define wxStaticLine_GetDefaultSize 1638
-#define wxStaticLine_destroy 1639
-#define wxListBox_new_3 1642
-#define wxListBox_new_0 1643
-#define wxListBox_destruct 1645
-#define wxListBox_Create 1647
-#define wxListBox_Deselect 1648
-#define wxListBox_GetSelections 1649
-#define wxListBox_InsertItems 1650
-#define wxListBox_IsSelected 1651
-#define wxListBox_Set 1653
-#define wxListBox_HitTest 1654
-#define wxListBox_SetFirstItem_1_0 1655
-#define wxListBox_SetFirstItem_1_1 1656
-#define wxListCtrl_new_0 1657
-#define wxListCtrl_new_2 1658
-#define wxListCtrl_Arrange 1659
-#define wxListCtrl_AssignImageList 1660
-#define wxListCtrl_ClearAll 1661
-#define wxListCtrl_Create 1662
-#define wxListCtrl_DeleteAllItems 1663
-#define wxListCtrl_DeleteColumn 1664
-#define wxListCtrl_DeleteItem 1665
-#define wxListCtrl_EditLabel 1666
-#define wxListCtrl_EnsureVisible 1667
-#define wxListCtrl_FindItem_3_0 1668
-#define wxListCtrl_FindItem_3_1 1669
-#define wxListCtrl_GetColumn 1670
-#define wxListCtrl_GetColumnCount 1671
-#define wxListCtrl_GetColumnWidth 1672
-#define wxListCtrl_GetCountPerPage 1673
-#define wxListCtrl_GetEditControl 1674
-#define wxListCtrl_GetImageList 1675
-#define wxListCtrl_GetItem 1676
-#define wxListCtrl_GetItemBackgroundColour 1677
-#define wxListCtrl_GetItemCount 1678
-#define wxListCtrl_GetItemData 1679
-#define wxListCtrl_GetItemFont 1680
-#define wxListCtrl_GetItemPosition 1681
-#define wxListCtrl_GetItemRect 1682
-#define wxListCtrl_GetItemSpacing 1683
-#define wxListCtrl_GetItemState 1684
-#define wxListCtrl_GetItemText 1685
-#define wxListCtrl_GetItemTextColour 1686
-#define wxListCtrl_GetNextItem 1687
-#define wxListCtrl_GetSelectedItemCount 1688
-#define wxListCtrl_GetTextColour 1689
-#define wxListCtrl_GetTopItem 1690
-#define wxListCtrl_GetViewRect 1691
-#define wxListCtrl_HitTest 1692
-#define wxListCtrl_InsertColumn_2 1693
-#define wxListCtrl_InsertColumn_3 1694
-#define wxListCtrl_InsertItem_1 1695
-#define wxListCtrl_InsertItem_2_1 1696
-#define wxListCtrl_InsertItem_2_0 1697
-#define wxListCtrl_InsertItem_3 1698
-#define wxListCtrl_RefreshItem 1699
-#define wxListCtrl_RefreshItems 1700
-#define wxListCtrl_ScrollList 1701
-#define wxListCtrl_SetBackgroundColour 1702
-#define wxListCtrl_SetColumn 1703
-#define wxListCtrl_SetColumnWidth 1704
-#define wxListCtrl_SetImageList 1705
-#define wxListCtrl_SetItem_1 1706
-#define wxListCtrl_SetItem_4 1707
-#define wxListCtrl_SetItemBackgroundColour 1708
-#define wxListCtrl_SetItemCount 1709
-#define wxListCtrl_SetItemData 1710
-#define wxListCtrl_SetItemFont 1711
-#define wxListCtrl_SetItemImage 1712
-#define wxListCtrl_SetItemColumnImage 1713
-#define wxListCtrl_SetItemPosition 1714
-#define wxListCtrl_SetItemState 1715
-#define wxListCtrl_SetItemText 1716
-#define wxListCtrl_SetItemTextColour 1717
-#define wxListCtrl_SetSingleStyle 1718
-#define wxListCtrl_SetTextColour 1719
-#define wxListCtrl_SetWindowStyleFlag 1720
-#define wxListCtrl_SortItems 1721
-#define wxListCtrl_destroy 1722
-#define wxListView_ClearColumnImage 1723
-#define wxListView_Focus 1724
-#define wxListView_GetFirstSelected 1725
-#define wxListView_GetFocusedItem 1726
-#define wxListView_GetNextSelected 1727
-#define wxListView_IsSelected 1728
-#define wxListView_Select 1729
-#define wxListView_SetColumnImage 1730
-#define wxListItem_new_0 1731
-#define wxListItem_new_1 1732
-#define wxListItem_destruct 1733
-#define wxListItem_Clear 1734
-#define wxListItem_GetAlign 1735
-#define wxListItem_GetBackgroundColour 1736
-#define wxListItem_GetColumn 1737
-#define wxListItem_GetFont 1738
-#define wxListItem_GetId 1739
-#define wxListItem_GetImage 1740
-#define wxListItem_GetMask 1741
-#define wxListItem_GetState 1742
-#define wxListItem_GetText 1743
-#define wxListItem_GetTextColour 1744
-#define wxListItem_GetWidth 1745
-#define wxListItem_SetAlign 1746
-#define wxListItem_SetBackgroundColour 1747
-#define wxListItem_SetColumn 1748
-#define wxListItem_SetFont 1749
-#define wxListItem_SetId 1750
-#define wxListItem_SetImage 1751
-#define wxListItem_SetMask 1752
-#define wxListItem_SetState 1753
-#define wxListItem_SetStateMask 1754
-#define wxListItem_SetText 1755
-#define wxListItem_SetTextColour 1756
-#define wxListItem_SetWidth 1757
-#define wxListItemAttr_new_0 1758
-#define wxListItemAttr_new_3 1759
-#define wxListItemAttr_GetBackgroundColour 1760
-#define wxListItemAttr_GetFont 1761
-#define wxListItemAttr_GetTextColour 1762
-#define wxListItemAttr_HasBackgroundColour 1763
-#define wxListItemAttr_HasFont 1764
-#define wxListItemAttr_HasTextColour 1765
-#define wxListItemAttr_SetBackgroundColour 1766
-#define wxListItemAttr_SetFont 1767
-#define wxListItemAttr_SetTextColour 1768
-#define wxListItemAttr_destroy 1769
-#define wxImageList_new_0 1770
-#define wxImageList_new_3 1771
-#define wxImageList_Add_1 1772
-#define wxImageList_Add_2_0 1773
-#define wxImageList_Add_2_1 1774
-#define wxImageList_Create 1775
-#define wxImageList_Draw 1777
-#define wxImageList_GetBitmap 1778
-#define wxImageList_GetIcon 1779
-#define wxImageList_GetImageCount 1780
-#define wxImageList_GetSize 1781
-#define wxImageList_Remove 1782
-#define wxImageList_RemoveAll 1783
-#define wxImageList_Replace_2 1784
-#define wxImageList_Replace_3 1785
-#define wxImageList_destroy 1786
-#define wxTextAttr_new_0 1787
-#define wxTextAttr_new_2 1788
-#define wxTextAttr_GetAlignment 1789
-#define wxTextAttr_GetBackgroundColour 1790
-#define wxTextAttr_GetFont 1791
-#define wxTextAttr_GetLeftIndent 1792
-#define wxTextAttr_GetLeftSubIndent 1793
-#define wxTextAttr_GetRightIndent 1794
-#define wxTextAttr_GetTabs 1795
-#define wxTextAttr_GetTextColour 1796
-#define wxTextAttr_HasBackgroundColour 1797
-#define wxTextAttr_HasFont 1798
-#define wxTextAttr_HasTextColour 1799
-#define wxTextAttr_GetFlags 1800
-#define wxTextAttr_IsDefault 1801
-#define wxTextAttr_SetAlignment 1802
-#define wxTextAttr_SetBackgroundColour 1803
-#define wxTextAttr_SetFlags 1804
-#define wxTextAttr_SetFont 1805
-#define wxTextAttr_SetLeftIndent 1806
-#define wxTextAttr_SetRightIndent 1807
-#define wxTextAttr_SetTabs 1808
-#define wxTextAttr_SetTextColour 1809
-#define wxTextAttr_destroy 1810
-#define wxTextCtrl_new_3 1812
-#define wxTextCtrl_new_0 1813
-#define wxTextCtrl_destruct 1815
-#define wxTextCtrl_AppendText 1816
-#define wxTextCtrl_CanCopy 1817
-#define wxTextCtrl_CanCut 1818
-#define wxTextCtrl_CanPaste 1819
-#define wxTextCtrl_CanRedo 1820
-#define wxTextCtrl_CanUndo 1821
-#define wxTextCtrl_Clear 1822
-#define wxTextCtrl_Copy 1823
-#define wxTextCtrl_Create 1824
-#define wxTextCtrl_Cut 1825
-#define wxTextCtrl_DiscardEdits 1826
-#define wxTextCtrl_EmulateKeyPress 1827
-#define wxTextCtrl_GetDefaultStyle 1828
-#define wxTextCtrl_GetInsertionPoint 1829
-#define wxTextCtrl_GetLastPosition 1830
-#define wxTextCtrl_GetLineLength 1831
-#define wxTextCtrl_GetLineText 1832
-#define wxTextCtrl_GetNumberOfLines 1833
-#define wxTextCtrl_GetRange 1834
-#define wxTextCtrl_GetSelection 1835
-#define wxTextCtrl_GetStringSelection 1836
-#define wxTextCtrl_GetStyle 1837
-#define wxTextCtrl_GetValue 1838
-#define wxTextCtrl_IsEditable 1839
-#define wxTextCtrl_IsModified 1840
-#define wxTextCtrl_IsMultiLine 1841
-#define wxTextCtrl_IsSingleLine 1842
-#define wxTextCtrl_LoadFile 1843
-#define wxTextCtrl_MarkDirty 1844
-#define wxTextCtrl_Paste 1845
-#define wxTextCtrl_PositionToXY 1846
-#define wxTextCtrl_Redo 1847
-#define wxTextCtrl_Remove 1848
-#define wxTextCtrl_Replace 1849
-#define wxTextCtrl_SaveFile 1850
-#define wxTextCtrl_SetDefaultStyle 1851
-#define wxTextCtrl_SetEditable 1852
-#define wxTextCtrl_SetInsertionPoint 1853
-#define wxTextCtrl_SetInsertionPointEnd 1854
-#define wxTextCtrl_SetMaxLength 1856
-#define wxTextCtrl_SetSelection 1857
-#define wxTextCtrl_SetStyle 1858
-#define wxTextCtrl_SetValue 1859
-#define wxTextCtrl_ShowPosition 1860
-#define wxTextCtrl_Undo 1861
-#define wxTextCtrl_WriteText 1862
-#define wxTextCtrl_XYToPosition 1863
-#define wxNotebook_new_0 1866
-#define wxNotebook_new_3 1867
-#define wxNotebook_destruct 1868
-#define wxNotebook_AddPage 1869
-#define wxNotebook_AdvanceSelection 1870
-#define wxNotebook_AssignImageList 1871
-#define wxNotebook_Create 1872
-#define wxNotebook_DeleteAllPages 1873
-#define wxNotebook_DeletePage 1874
-#define wxNotebook_RemovePage 1875
-#define wxNotebook_GetCurrentPage 1876
-#define wxNotebook_GetImageList 1877
-#define wxNotebook_GetPage 1879
-#define wxNotebook_GetPageCount 1880
-#define wxNotebook_GetPageImage 1881
-#define wxNotebook_GetPageText 1882
-#define wxNotebook_GetRowCount 1883
-#define wxNotebook_GetSelection 1884
-#define wxNotebook_GetThemeBackgroundColour 1885
-#define wxNotebook_HitTest 1887
-#define wxNotebook_InsertPage 1889
-#define wxNotebook_SetImageList 1890
-#define wxNotebook_SetPadding 1891
-#define wxNotebook_SetPageSize 1892
-#define wxNotebook_SetPageImage 1893
-#define wxNotebook_SetPageText 1894
-#define wxNotebook_SetSelection 1895
-#define wxNotebook_ChangeSelection 1896
-#define wxChoicebook_new_0 1897
-#define wxChoicebook_new_3 1898
-#define wxChoicebook_AddPage 1899
-#define wxChoicebook_AdvanceSelection 1900
-#define wxChoicebook_AssignImageList 1901
-#define wxChoicebook_Create 1902
-#define wxChoicebook_DeleteAllPages 1903
-#define wxChoicebook_DeletePage 1904
-#define wxChoicebook_RemovePage 1905
-#define wxChoicebook_GetCurrentPage 1906
-#define wxChoicebook_GetImageList 1907
-#define wxChoicebook_GetPage 1909
-#define wxChoicebook_GetPageCount 1910
-#define wxChoicebook_GetPageImage 1911
-#define wxChoicebook_GetPageText 1912
-#define wxChoicebook_GetSelection 1913
-#define wxChoicebook_HitTest 1914
-#define wxChoicebook_InsertPage 1915
-#define wxChoicebook_SetImageList 1916
-#define wxChoicebook_SetPageSize 1917
-#define wxChoicebook_SetPageImage 1918
-#define wxChoicebook_SetPageText 1919
-#define wxChoicebook_SetSelection 1920
-#define wxChoicebook_ChangeSelection 1921
-#define wxChoicebook_destroy 1922
-#define wxToolbook_new_0 1923
-#define wxToolbook_new_3 1924
-#define wxToolbook_AddPage 1925
-#define wxToolbook_AdvanceSelection 1926
-#define wxToolbook_AssignImageList 1927
-#define wxToolbook_Create 1928
-#define wxToolbook_DeleteAllPages 1929
-#define wxToolbook_DeletePage 1930
-#define wxToolbook_RemovePage 1931
-#define wxToolbook_GetCurrentPage 1932
-#define wxToolbook_GetImageList 1933
-#define wxToolbook_GetPage 1935
-#define wxToolbook_GetPageCount 1936
-#define wxToolbook_GetPageImage 1937
-#define wxToolbook_GetPageText 1938
-#define wxToolbook_GetSelection 1939
-#define wxToolbook_HitTest 1941
-#define wxToolbook_InsertPage 1942
-#define wxToolbook_SetImageList 1943
-#define wxToolbook_SetPageSize 1944
-#define wxToolbook_SetPageImage 1945
-#define wxToolbook_SetPageText 1946
-#define wxToolbook_SetSelection 1947
-#define wxToolbook_ChangeSelection 1948
-#define wxToolbook_destroy 1949
-#define wxListbook_new_0 1950
-#define wxListbook_new_3 1951
-#define wxListbook_AddPage 1952
-#define wxListbook_AdvanceSelection 1953
-#define wxListbook_AssignImageList 1954
-#define wxListbook_Create 1955
-#define wxListbook_DeleteAllPages 1956
-#define wxListbook_DeletePage 1957
-#define wxListbook_RemovePage 1958
-#define wxListbook_GetCurrentPage 1959
-#define wxListbook_GetImageList 1960
-#define wxListbook_GetPage 1962
-#define wxListbook_GetPageCount 1963
-#define wxListbook_GetPageImage 1964
-#define wxListbook_GetPageText 1965
-#define wxListbook_GetSelection 1966
-#define wxListbook_HitTest 1968
-#define wxListbook_InsertPage 1969
-#define wxListbook_SetImageList 1970
-#define wxListbook_SetPageSize 1971
-#define wxListbook_SetPageImage 1972
-#define wxListbook_SetPageText 1973
-#define wxListbook_SetSelection 1974
-#define wxListbook_ChangeSelection 1975
-#define wxListbook_destroy 1976
-#define wxTreebook_new_0 1977
-#define wxTreebook_new_3 1978
-#define wxTreebook_AddPage 1979
-#define wxTreebook_AdvanceSelection 1980
-#define wxTreebook_AssignImageList 1981
-#define wxTreebook_Create 1982
-#define wxTreebook_DeleteAllPages 1983
-#define wxTreebook_DeletePage 1984
-#define wxTreebook_RemovePage 1985
-#define wxTreebook_GetCurrentPage 1986
-#define wxTreebook_GetImageList 1987
-#define wxTreebook_GetPage 1989
-#define wxTreebook_GetPageCount 1990
-#define wxTreebook_GetPageImage 1991
-#define wxTreebook_GetPageText 1992
-#define wxTreebook_GetSelection 1993
-#define wxTreebook_ExpandNode 1994
-#define wxTreebook_IsNodeExpanded 1995
-#define wxTreebook_HitTest 1997
-#define wxTreebook_InsertPage 1998
-#define wxTreebook_InsertSubPage 1999
-#define wxTreebook_SetImageList 2000
-#define wxTreebook_SetPageSize 2001
-#define wxTreebook_SetPageImage 2002
-#define wxTreebook_SetPageText 2003
-#define wxTreebook_SetSelection 2004
-#define wxTreebook_ChangeSelection 2005
-#define wxTreebook_destroy 2006
-#define wxTreeCtrl_new_2 2009
-#define wxTreeCtrl_new_0 2010
-#define wxTreeCtrl_destruct 2012
-#define wxTreeCtrl_AddRoot 2013
-#define wxTreeCtrl_AppendItem 2014
-#define wxTreeCtrl_AssignImageList 2015
-#define wxTreeCtrl_AssignStateImageList 2016
-#define wxTreeCtrl_Collapse 2017
-#define wxTreeCtrl_CollapseAndReset 2018
-#define wxTreeCtrl_Create 2019
-#define wxTreeCtrl_Delete 2020
-#define wxTreeCtrl_DeleteAllItems 2021
-#define wxTreeCtrl_DeleteChildren 2022
-#define wxTreeCtrl_EditLabel 2023
-#define wxTreeCtrl_EnsureVisible 2024
-#define wxTreeCtrl_Expand 2025
-#define wxTreeCtrl_GetBoundingRect 2026
-#define wxTreeCtrl_GetChildrenCount 2028
-#define wxTreeCtrl_GetCount 2029
-#define wxTreeCtrl_GetEditControl 2030
-#define wxTreeCtrl_GetFirstChild 2031
-#define wxTreeCtrl_GetNextChild 2032
-#define wxTreeCtrl_GetFirstVisibleItem 2033
-#define wxTreeCtrl_GetImageList 2034
-#define wxTreeCtrl_GetIndent 2035
-#define wxTreeCtrl_GetItemBackgroundColour 2036
-#define wxTreeCtrl_GetItemData 2037
-#define wxTreeCtrl_GetItemFont 2038
-#define wxTreeCtrl_GetItemImage_1 2039
-#define wxTreeCtrl_GetItemImage_2 2040
-#define wxTreeCtrl_GetItemText 2041
-#define wxTreeCtrl_GetItemTextColour 2042
-#define wxTreeCtrl_GetLastChild 2043
-#define wxTreeCtrl_GetNextSibling 2044
-#define wxTreeCtrl_GetNextVisible 2045
-#define wxTreeCtrl_GetItemParent 2046
-#define wxTreeCtrl_GetPrevSibling 2047
-#define wxTreeCtrl_GetPrevVisible 2048
-#define wxTreeCtrl_GetRootItem 2049
-#define wxTreeCtrl_GetSelection 2050
-#define wxTreeCtrl_GetSelections 2051
-#define wxTreeCtrl_GetStateImageList 2052
-#define wxTreeCtrl_HitTest 2053
-#define wxTreeCtrl_InsertItem 2055
-#define wxTreeCtrl_IsBold 2056
-#define wxTreeCtrl_IsExpanded 2057
-#define wxTreeCtrl_IsSelected 2058
-#define wxTreeCtrl_IsVisible 2059
-#define wxTreeCtrl_ItemHasChildren 2060
-#define wxTreeCtrl_IsTreeItemIdOk 2061
-#define wxTreeCtrl_PrependItem 2062
-#define wxTreeCtrl_ScrollTo 2063
-#define wxTreeCtrl_SelectItem_1 2064
-#define wxTreeCtrl_SelectItem_2 2065
-#define wxTreeCtrl_SetIndent 2066
-#define wxTreeCtrl_SetImageList 2067
-#define wxTreeCtrl_SetItemBackgroundColour 2068
-#define wxTreeCtrl_SetItemBold 2069
-#define wxTreeCtrl_SetItemData 2070
-#define wxTreeCtrl_SetItemDropHighlight 2071
-#define wxTreeCtrl_SetItemFont 2072
-#define wxTreeCtrl_SetItemHasChildren 2073
-#define wxTreeCtrl_SetItemImage_2 2074
-#define wxTreeCtrl_SetItemImage_3 2075
-#define wxTreeCtrl_SetItemText 2076
-#define wxTreeCtrl_SetItemTextColour 2077
-#define wxTreeCtrl_SetStateImageList 2078
-#define wxTreeCtrl_SetWindowStyle 2079
-#define wxTreeCtrl_SortChildren 2080
-#define wxTreeCtrl_Toggle 2081
-#define wxTreeCtrl_ToggleItemSelection 2082
-#define wxTreeCtrl_Unselect 2083
-#define wxTreeCtrl_UnselectAll 2084
-#define wxTreeCtrl_UnselectItem 2085
-#define wxScrollBar_new_0 2086
-#define wxScrollBar_new_3 2087
-#define wxScrollBar_destruct 2088
-#define wxScrollBar_Create 2089
-#define wxScrollBar_GetRange 2090
-#define wxScrollBar_GetPageSize 2091
-#define wxScrollBar_GetThumbPosition 2092
-#define wxScrollBar_GetThumbSize 2093
-#define wxScrollBar_SetThumbPosition 2094
-#define wxScrollBar_SetScrollbar 2095
-#define wxSpinButton_new_2 2097
-#define wxSpinButton_new_0 2098
-#define wxSpinButton_Create 2099
-#define wxSpinButton_GetMax 2100
-#define wxSpinButton_GetMin 2101
-#define wxSpinButton_GetValue 2102
-#define wxSpinButton_SetRange 2103
-#define wxSpinButton_SetValue 2104
-#define wxSpinButton_destroy 2105
-#define wxSpinCtrl_new_0 2106
-#define wxSpinCtrl_new_2 2107
-#define wxSpinCtrl_Create 2109
-#define wxSpinCtrl_SetValue_1_1 2112
-#define wxSpinCtrl_SetValue_1_0 2113
-#define wxSpinCtrl_GetValue 2115
-#define wxSpinCtrl_SetRange 2117
-#define wxSpinCtrl_SetSelection 2118
-#define wxSpinCtrl_GetMin 2120
-#define wxSpinCtrl_GetMax 2122
-#define wxSpinCtrl_destroy 2123
-#define wxStaticText_new_0 2124
-#define wxStaticText_new_4 2125
-#define wxStaticText_Create 2126
-#define wxStaticText_GetLabel 2127
-#define wxStaticText_SetLabel 2128
-#define wxStaticText_Wrap 2129
-#define wxStaticText_destroy 2130
-#define wxStaticBitmap_new_0 2131
-#define wxStaticBitmap_new_4 2132
-#define wxStaticBitmap_Create 2133
-#define wxStaticBitmap_GetBitmap 2134
-#define wxStaticBitmap_SetBitmap 2135
-#define wxStaticBitmap_destroy 2136
-#define wxRadioBox_new 2137
-#define wxRadioBox_destruct 2139
-#define wxRadioBox_Create 2140
-#define wxRadioBox_Enable_2 2141
-#define wxRadioBox_Enable_1 2142
-#define wxRadioBox_GetSelection 2143
-#define wxRadioBox_GetString 2144
-#define wxRadioBox_SetSelection 2145
-#define wxRadioBox_Show_2 2146
-#define wxRadioBox_Show_1 2147
-#define wxRadioBox_GetColumnCount 2148
-#define wxRadioBox_GetItemHelpText 2149
-#define wxRadioBox_GetItemToolTip 2150
-#define wxRadioBox_GetItemFromPoint 2152
-#define wxRadioBox_GetRowCount 2153
-#define wxRadioBox_IsItemEnabled 2154
-#define wxRadioBox_IsItemShown 2155
-#define wxRadioBox_SetItemHelpText 2156
-#define wxRadioBox_SetItemToolTip 2157
-#define wxRadioButton_new_0 2158
-#define wxRadioButton_new_4 2159
-#define wxRadioButton_Create 2160
-#define wxRadioButton_GetValue 2161
-#define wxRadioButton_SetValue 2162
-#define wxRadioButton_destroy 2163
-#define wxSlider_new_6 2165
-#define wxSlider_new_0 2166
-#define wxSlider_Create 2167
-#define wxSlider_GetLineSize 2168
-#define wxSlider_GetMax 2169
-#define wxSlider_GetMin 2170
-#define wxSlider_GetPageSize 2171
-#define wxSlider_GetThumbLength 2172
-#define wxSlider_GetValue 2173
-#define wxSlider_SetLineSize 2174
-#define wxSlider_SetPageSize 2175
-#define wxSlider_SetRange 2176
-#define wxSlider_SetThumbLength 2177
-#define wxSlider_SetValue 2178
-#define wxSlider_destroy 2179
-#define wxDialog_new_4 2181
-#define wxDialog_new_0 2182
-#define wxDialog_destruct 2184
-#define wxDialog_Create 2185
-#define wxDialog_CreateButtonSizer 2186
-#define wxDialog_CreateStdDialogButtonSizer 2187
-#define wxDialog_EndModal 2188
-#define wxDialog_GetAffirmativeId 2189
-#define wxDialog_GetReturnCode 2190
-#define wxDialog_IsModal 2191
-#define wxDialog_SetAffirmativeId 2192
-#define wxDialog_SetReturnCode 2193
-#define wxDialog_Show 2194
-#define wxDialog_ShowModal 2195
-#define wxColourDialog_new_0 2196
-#define wxColourDialog_new_2 2197
-#define wxColourDialog_destruct 2198
-#define wxColourDialog_Create 2199
-#define wxColourDialog_GetColourData 2200
-#define wxColourData_new_0 2201
-#define wxColourData_new_1 2202
-#define wxColourData_destruct 2203
-#define wxColourData_GetChooseFull 2204
-#define wxColourData_GetColour 2205
-#define wxColourData_GetCustomColour 2207
-#define wxColourData_SetChooseFull 2208
-#define wxColourData_SetColour 2209
-#define wxColourData_SetCustomColour 2210
-#define wxPalette_new_0 2211
-#define wxPalette_new_4 2212
-#define wxPalette_destruct 2214
-#define wxPalette_Create 2215
-#define wxPalette_GetColoursCount 2216
-#define wxPalette_GetPixel 2217
-#define wxPalette_GetRGB 2218
-#define wxPalette_IsOk 2219
-#define wxDirDialog_new 2223
-#define wxDirDialog_destruct 2224
-#define wxDirDialog_GetPath 2225
-#define wxDirDialog_GetMessage 2226
-#define wxDirDialog_SetMessage 2227
-#define wxDirDialog_SetPath 2228
-#define wxFileDialog_new 2232
-#define wxFileDialog_destruct 2233
-#define wxFileDialog_GetDirectory 2234
-#define wxFileDialog_GetFilename 2235
-#define wxFileDialog_GetFilenames 2236
-#define wxFileDialog_GetFilterIndex 2237
-#define wxFileDialog_GetMessage 2238
-#define wxFileDialog_GetPath 2239
-#define wxFileDialog_GetPaths 2240
-#define wxFileDialog_GetWildcard 2241
-#define wxFileDialog_SetDirectory 2242
-#define wxFileDialog_SetFilename 2243
-#define wxFileDialog_SetFilterIndex 2244
-#define wxFileDialog_SetMessage 2245
-#define wxFileDialog_SetPath 2246
-#define wxFileDialog_SetWildcard 2247
-#define wxPickerBase_SetInternalMargin 2248
-#define wxPickerBase_GetInternalMargin 2249
-#define wxPickerBase_SetTextCtrlProportion 2250
-#define wxPickerBase_SetPickerCtrlProportion 2251
-#define wxPickerBase_GetTextCtrlProportion 2252
-#define wxPickerBase_GetPickerCtrlProportion 2253
-#define wxPickerBase_HasTextCtrl 2254
-#define wxPickerBase_GetTextCtrl 2255
-#define wxPickerBase_IsTextCtrlGrowable 2256
-#define wxPickerBase_SetPickerCtrlGrowable 2257
-#define wxPickerBase_SetTextCtrlGrowable 2258
-#define wxPickerBase_IsPickerCtrlGrowable 2259
-#define wxFilePickerCtrl_new_0 2260
-#define wxFilePickerCtrl_new_3 2261
-#define wxFilePickerCtrl_Create 2262
-#define wxFilePickerCtrl_GetPath 2263
-#define wxFilePickerCtrl_SetPath 2264
-#define wxFilePickerCtrl_destroy 2265
-#define wxDirPickerCtrl_new_0 2266
-#define wxDirPickerCtrl_new_3 2267
-#define wxDirPickerCtrl_Create 2268
-#define wxDirPickerCtrl_GetPath 2269
-#define wxDirPickerCtrl_SetPath 2270
-#define wxDirPickerCtrl_destroy 2271
-#define wxColourPickerCtrl_new_0 2272
-#define wxColourPickerCtrl_new_3 2273
-#define wxColourPickerCtrl_Create 2274
-#define wxColourPickerCtrl_GetColour 2275
-#define wxColourPickerCtrl_SetColour_1_1 2276
-#define wxColourPickerCtrl_SetColour_1_0 2277
-#define wxColourPickerCtrl_destroy 2278
-#define wxDatePickerCtrl_new_0 2279
-#define wxDatePickerCtrl_new_3 2280
-#define wxDatePickerCtrl_GetRange 2281
-#define wxDatePickerCtrl_GetValue 2282
-#define wxDatePickerCtrl_SetRange 2283
-#define wxDatePickerCtrl_SetValue 2284
-#define wxDatePickerCtrl_destroy 2285
-#define wxFontPickerCtrl_new_0 2286
-#define wxFontPickerCtrl_new_3 2287
-#define wxFontPickerCtrl_Create 2288
-#define wxFontPickerCtrl_GetSelectedFont 2289
-#define wxFontPickerCtrl_SetSelectedFont 2290
-#define wxFontPickerCtrl_GetMaxPointSize 2291
-#define wxFontPickerCtrl_SetMaxPointSize 2292
-#define wxFontPickerCtrl_destroy 2293
-#define wxFindReplaceDialog_new_0 2296
-#define wxFindReplaceDialog_new_4 2297
-#define wxFindReplaceDialog_destruct 2298
-#define wxFindReplaceDialog_Create 2299
-#define wxFindReplaceDialog_GetData 2300
-#define wxFindReplaceData_new_0 2301
-#define wxFindReplaceData_new_1 2302
-#define wxFindReplaceData_GetFindString 2303
-#define wxFindReplaceData_GetReplaceString 2304
-#define wxFindReplaceData_GetFlags 2305
-#define wxFindReplaceData_SetFlags 2306
-#define wxFindReplaceData_SetFindString 2307
-#define wxFindReplaceData_SetReplaceString 2308
-#define wxFindReplaceData_destroy 2309
-#define wxMultiChoiceDialog_new_0 2310
-#define wxMultiChoiceDialog_new_5 2312
-#define wxMultiChoiceDialog_GetSelections 2313
-#define wxMultiChoiceDialog_SetSelections 2314
-#define wxMultiChoiceDialog_destroy 2315
-#define wxSingleChoiceDialog_new_0 2316
-#define wxSingleChoiceDialog_new_5 2318
-#define wxSingleChoiceDialog_GetSelection 2319
-#define wxSingleChoiceDialog_GetStringSelection 2320
-#define wxSingleChoiceDialog_SetSelection 2321
-#define wxSingleChoiceDialog_destroy 2322
-#define wxTextEntryDialog_new 2323
-#define wxTextEntryDialog_GetValue 2324
-#define wxTextEntryDialog_SetValue 2325
-#define wxTextEntryDialog_destroy 2326
-#define wxPasswordEntryDialog_new 2327
-#define wxPasswordEntryDialog_destroy 2328
-#define wxFontData_new_0 2329
-#define wxFontData_new_1 2330
-#define wxFontData_destruct 2331
-#define wxFontData_EnableEffects 2332
-#define wxFontData_GetAllowSymbols 2333
-#define wxFontData_GetColour 2334
-#define wxFontData_GetChosenFont 2335
-#define wxFontData_GetEnableEffects 2336
-#define wxFontData_GetInitialFont 2337
-#define wxFontData_GetShowHelp 2338
-#define wxFontData_SetAllowSymbols 2339
-#define wxFontData_SetChosenFont 2340
-#define wxFontData_SetColour 2341
-#define wxFontData_SetInitialFont 2342
-#define wxFontData_SetRange 2343
-#define wxFontData_SetShowHelp 2344
-#define wxFontDialog_new_0 2348
-#define wxFontDialog_new_2 2350
-#define wxFontDialog_Create 2352
-#define wxFontDialog_GetFontData 2353
-#define wxFontDialog_destroy 2355
-#define wxProgressDialog_new 2356
-#define wxProgressDialog_destruct 2357
-#define wxProgressDialog_Resume 2358
-#define wxProgressDialog_Update_2 2359
-#define wxProgressDialog_Update_0 2360
-#define wxMessageDialog_new 2361
-#define wxMessageDialog_destruct 2362
-#define wxPageSetupDialog_new 2363
-#define wxPageSetupDialog_destruct 2364
-#define wxPageSetupDialog_GetPageSetupData 2365
-#define wxPageSetupDialog_ShowModal 2366
-#define wxPageSetupDialogData_new_0 2367
-#define wxPageSetupDialogData_new_1_0 2368
-#define wxPageSetupDialogData_new_1_1 2369
-#define wxPageSetupDialogData_destruct 2370
-#define wxPageSetupDialogData_EnableHelp 2371
-#define wxPageSetupDialogData_EnableMargins 2372
-#define wxPageSetupDialogData_EnableOrientation 2373
-#define wxPageSetupDialogData_EnablePaper 2374
-#define wxPageSetupDialogData_EnablePrinter 2375
-#define wxPageSetupDialogData_GetDefaultMinMargins 2376
-#define wxPageSetupDialogData_GetEnableMargins 2377
-#define wxPageSetupDialogData_GetEnableOrientation 2378
-#define wxPageSetupDialogData_GetEnablePaper 2379
-#define wxPageSetupDialogData_GetEnablePrinter 2380
-#define wxPageSetupDialogData_GetEnableHelp 2381
-#define wxPageSetupDialogData_GetDefaultInfo 2382
-#define wxPageSetupDialogData_GetMarginTopLeft 2383
-#define wxPageSetupDialogData_GetMarginBottomRight 2384
-#define wxPageSetupDialogData_GetMinMarginTopLeft 2385
-#define wxPageSetupDialogData_GetMinMarginBottomRight 2386
-#define wxPageSetupDialogData_GetPaperId 2387
-#define wxPageSetupDialogData_GetPaperSize 2388
-#define wxPageSetupDialogData_GetPrintData 2390
-#define wxPageSetupDialogData_IsOk 2391
-#define wxPageSetupDialogData_SetDefaultInfo 2392
-#define wxPageSetupDialogData_SetDefaultMinMargins 2393
-#define wxPageSetupDialogData_SetMarginTopLeft 2394
-#define wxPageSetupDialogData_SetMarginBottomRight 2395
-#define wxPageSetupDialogData_SetMinMarginTopLeft 2396
-#define wxPageSetupDialogData_SetMinMarginBottomRight 2397
-#define wxPageSetupDialogData_SetPaperId 2398
-#define wxPageSetupDialogData_SetPaperSize_1_1 2399
-#define wxPageSetupDialogData_SetPaperSize_1_0 2400
-#define wxPageSetupDialogData_SetPrintData 2401
-#define wxPrintDialog_new_2_0 2402
-#define wxPrintDialog_new_2_1 2403
-#define wxPrintDialog_destruct 2404
-#define wxPrintDialog_GetPrintDialogData 2405
-#define wxPrintDialog_GetPrintDC 2406
-#define wxPrintDialogData_new_0 2407
-#define wxPrintDialogData_new_1_1 2408
-#define wxPrintDialogData_new_1_0 2409
-#define wxPrintDialogData_destruct 2410
-#define wxPrintDialogData_EnableHelp 2411
-#define wxPrintDialogData_EnablePageNumbers 2412
-#define wxPrintDialogData_EnablePrintToFile 2413
-#define wxPrintDialogData_EnableSelection 2414
-#define wxPrintDialogData_GetAllPages 2415
-#define wxPrintDialogData_GetCollate 2416
-#define wxPrintDialogData_GetFromPage 2417
-#define wxPrintDialogData_GetMaxPage 2418
-#define wxPrintDialogData_GetMinPage 2419
-#define wxPrintDialogData_GetNoCopies 2420
-#define wxPrintDialogData_GetPrintData 2421
-#define wxPrintDialogData_GetPrintToFile 2422
-#define wxPrintDialogData_GetSelection 2423
-#define wxPrintDialogData_GetToPage 2424
-#define wxPrintDialogData_IsOk 2425
-#define wxPrintDialogData_SetCollate 2426
-#define wxPrintDialogData_SetFromPage 2427
-#define wxPrintDialogData_SetMaxPage 2428
-#define wxPrintDialogData_SetMinPage 2429
-#define wxPrintDialogData_SetNoCopies 2430
-#define wxPrintDialogData_SetPrintData 2431
-#define wxPrintDialogData_SetPrintToFile 2432
-#define wxPrintDialogData_SetSelection 2433
-#define wxPrintDialogData_SetToPage 2434
-#define wxPrintData_new_0 2435
-#define wxPrintData_new_1 2436
-#define wxPrintData_destruct 2437
-#define wxPrintData_GetCollate 2438
-#define wxPrintData_GetBin 2439
-#define wxPrintData_GetColour 2440
-#define wxPrintData_GetDuplex 2441
-#define wxPrintData_GetNoCopies 2442
-#define wxPrintData_GetOrientation 2443
-#define wxPrintData_GetPaperId 2444
-#define wxPrintData_GetPrinterName 2445
-#define wxPrintData_GetQuality 2446
-#define wxPrintData_IsOk 2447
-#define wxPrintData_SetBin 2448
-#define wxPrintData_SetCollate 2449
-#define wxPrintData_SetColour 2450
-#define wxPrintData_SetDuplex 2451
-#define wxPrintData_SetNoCopies 2452
-#define wxPrintData_SetOrientation 2453
-#define wxPrintData_SetPaperId 2454
-#define wxPrintData_SetPrinterName 2455
-#define wxPrintData_SetQuality 2456
-#define wxPrintPreview_new_2 2459
-#define wxPrintPreview_new_3 2460
-#define wxPrintPreview_destruct 2462
-#define wxPrintPreview_GetCanvas 2463
-#define wxPrintPreview_GetCurrentPage 2464
-#define wxPrintPreview_GetFrame 2465
-#define wxPrintPreview_GetMaxPage 2466
-#define wxPrintPreview_GetMinPage 2467
-#define wxPrintPreview_GetPrintout 2468
-#define wxPrintPreview_GetPrintoutForPrinting 2469
-#define wxPrintPreview_IsOk 2470
-#define wxPrintPreview_PaintPage 2471
-#define wxPrintPreview_Print 2472
-#define wxPrintPreview_RenderPage 2473
-#define wxPrintPreview_SetCanvas 2474
-#define wxPrintPreview_SetCurrentPage 2475
-#define wxPrintPreview_SetFrame 2476
-#define wxPrintPreview_SetPrintout 2477
-#define wxPrintPreview_SetZoom 2478
-#define wxPreviewFrame_new 2479
-#define wxPreviewFrame_destruct 2480
-#define wxPreviewFrame_CreateControlBar 2481
-#define wxPreviewFrame_CreateCanvas 2482
-#define wxPreviewFrame_Initialize 2483
-#define wxPreviewFrame_OnCloseWindow 2484
-#define wxPreviewControlBar_new 2485
-#define wxPreviewControlBar_destruct 2486
-#define wxPreviewControlBar_CreateButtons 2487
-#define wxPreviewControlBar_GetPrintPreview 2488
-#define wxPreviewControlBar_GetZoomControl 2489
-#define wxPreviewControlBar_SetZoomControl 2490
-#define wxPrinter_new 2492
-#define wxPrinter_CreateAbortWindow 2493
-#define wxPrinter_GetAbort 2494
-#define wxPrinter_GetLastError 2495
-#define wxPrinter_GetPrintDialogData 2496
-#define wxPrinter_Print 2497
-#define wxPrinter_PrintDialog 2498
-#define wxPrinter_ReportError 2499
-#define wxPrinter_Setup 2500
-#define wxPrinter_destroy 2501
-#define wxXmlResource_new_1 2502
-#define wxXmlResource_new_2 2503
-#define wxXmlResource_destruct 2504
-#define wxXmlResource_AttachUnknownControl 2505
-#define wxXmlResource_ClearHandlers 2506
-#define wxXmlResource_CompareVersion 2507
-#define wxXmlResource_Get 2508
-#define wxXmlResource_GetFlags 2509
-#define wxXmlResource_GetVersion 2510
-#define wxXmlResource_GetXRCID 2511
-#define wxXmlResource_InitAllHandlers 2512
-#define wxXmlResource_Load 2513
-#define wxXmlResource_LoadBitmap 2514
-#define wxXmlResource_LoadDialog_2 2515
-#define wxXmlResource_LoadDialog_3 2516
-#define wxXmlResource_LoadFrame_2 2517
-#define wxXmlResource_LoadFrame_3 2518
-#define wxXmlResource_LoadIcon 2519
-#define wxXmlResource_LoadMenu 2520
-#define wxXmlResource_LoadMenuBar_2 2521
-#define wxXmlResource_LoadMenuBar_1 2522
-#define wxXmlResource_LoadPanel_2 2523
-#define wxXmlResource_LoadPanel_3 2524
-#define wxXmlResource_LoadToolBar 2525
-#define wxXmlResource_Set 2526
-#define wxXmlResource_SetFlags 2527
-#define wxXmlResource_Unload 2528
-#define wxXmlResource_xrcctrl 2529
-#define wxHtmlEasyPrinting_new 2530
-#define wxHtmlEasyPrinting_destruct 2531
-#define wxHtmlEasyPrinting_GetPrintData 2532
-#define wxHtmlEasyPrinting_GetPageSetupData 2533
-#define wxHtmlEasyPrinting_PreviewFile 2534
-#define wxHtmlEasyPrinting_PreviewText 2535
-#define wxHtmlEasyPrinting_PrintFile 2536
-#define wxHtmlEasyPrinting_PrintText 2537
-#define wxHtmlEasyPrinting_PageSetup 2538
-#define wxHtmlEasyPrinting_SetFonts 2539
-#define wxHtmlEasyPrinting_SetHeader 2540
-#define wxHtmlEasyPrinting_SetFooter 2541
-#define wxGLCanvas_new_2 2543
-#define wxGLCanvas_new_3_1 2544
-#define wxGLCanvas_new_3_0 2545
-#define wxGLCanvas_GetContext 2546
-#define wxGLCanvas_SetCurrent 2548
-#define wxGLCanvas_SwapBuffers 2549
-#define wxGLCanvas_destroy 2550
-#define wxAuiManager_new 2551
-#define wxAuiManager_destruct 2552
-#define wxAuiManager_AddPane_2_1 2553
-#define wxAuiManager_AddPane_3 2554
-#define wxAuiManager_AddPane_2_0 2555
-#define wxAuiManager_DetachPane 2556
-#define wxAuiManager_GetAllPanes 2557
-#define wxAuiManager_GetArtProvider 2558
-#define wxAuiManager_GetDockSizeConstraint 2559
-#define wxAuiManager_GetFlags 2560
-#define wxAuiManager_GetManagedWindow 2561
-#define wxAuiManager_GetManager 2562
-#define wxAuiManager_GetPane_1_1 2563
-#define wxAuiManager_GetPane_1_0 2564
-#define wxAuiManager_HideHint 2565
-#define wxAuiManager_InsertPane 2566
-#define wxAuiManager_LoadPaneInfo 2567
-#define wxAuiManager_LoadPerspective 2568
-#define wxAuiManager_SavePaneInfo 2569
-#define wxAuiManager_SavePerspective 2570
-#define wxAuiManager_SetArtProvider 2571
-#define wxAuiManager_SetDockSizeConstraint 2572
-#define wxAuiManager_SetFlags 2573
-#define wxAuiManager_SetManagedWindow 2574
-#define wxAuiManager_ShowHint 2575
-#define wxAuiManager_UnInit 2576
-#define wxAuiManager_Update 2577
-#define wxAuiPaneInfo_new_0 2578
-#define wxAuiPaneInfo_new_1 2579
-#define wxAuiPaneInfo_destruct 2580
-#define wxAuiPaneInfo_BestSize_1 2581
-#define wxAuiPaneInfo_BestSize_2 2582
-#define wxAuiPaneInfo_Bottom 2583
-#define wxAuiPaneInfo_BottomDockable 2584
-#define wxAuiPaneInfo_Caption 2585
-#define wxAuiPaneInfo_CaptionVisible 2586
-#define wxAuiPaneInfo_Centre 2587
-#define wxAuiPaneInfo_CentrePane 2588
-#define wxAuiPaneInfo_CloseButton 2589
-#define wxAuiPaneInfo_DefaultPane 2590
-#define wxAuiPaneInfo_DestroyOnClose 2591
-#define wxAuiPaneInfo_Direction 2592
-#define wxAuiPaneInfo_Dock 2593
-#define wxAuiPaneInfo_Dockable 2594
-#define wxAuiPaneInfo_Fixed 2595
-#define wxAuiPaneInfo_Float 2596
-#define wxAuiPaneInfo_Floatable 2597
-#define wxAuiPaneInfo_FloatingPosition_1 2598
-#define wxAuiPaneInfo_FloatingPosition_2 2599
-#define wxAuiPaneInfo_FloatingSize_1 2600
-#define wxAuiPaneInfo_FloatingSize_2 2601
-#define wxAuiPaneInfo_Gripper 2602
-#define wxAuiPaneInfo_GripperTop 2603
-#define wxAuiPaneInfo_HasBorder 2604
-#define wxAuiPaneInfo_HasCaption 2605
-#define wxAuiPaneInfo_HasCloseButton 2606
-#define wxAuiPaneInfo_HasFlag 2607
-#define wxAuiPaneInfo_HasGripper 2608
-#define wxAuiPaneInfo_HasGripperTop 2609
-#define wxAuiPaneInfo_HasMaximizeButton 2610
-#define wxAuiPaneInfo_HasMinimizeButton 2611
-#define wxAuiPaneInfo_HasPinButton 2612
-#define wxAuiPaneInfo_Hide 2613
-#define wxAuiPaneInfo_IsBottomDockable 2614
-#define wxAuiPaneInfo_IsDocked 2615
-#define wxAuiPaneInfo_IsFixed 2616
-#define wxAuiPaneInfo_IsFloatable 2617
-#define wxAuiPaneInfo_IsFloating 2618
-#define wxAuiPaneInfo_IsLeftDockable 2619
-#define wxAuiPaneInfo_IsMovable 2620
-#define wxAuiPaneInfo_IsOk 2621
-#define wxAuiPaneInfo_IsResizable 2622
-#define wxAuiPaneInfo_IsRightDockable 2623
-#define wxAuiPaneInfo_IsShown 2624
-#define wxAuiPaneInfo_IsToolbar 2625
-#define wxAuiPaneInfo_IsTopDockable 2626
-#define wxAuiPaneInfo_Layer 2627
-#define wxAuiPaneInfo_Left 2628
-#define wxAuiPaneInfo_LeftDockable 2629
-#define wxAuiPaneInfo_MaxSize_1 2630
-#define wxAuiPaneInfo_MaxSize_2 2631
-#define wxAuiPaneInfo_MaximizeButton 2632
-#define wxAuiPaneInfo_MinSize_1 2633
-#define wxAuiPaneInfo_MinSize_2 2634
-#define wxAuiPaneInfo_MinimizeButton 2635
-#define wxAuiPaneInfo_Movable 2636
-#define wxAuiPaneInfo_Name 2637
-#define wxAuiPaneInfo_PaneBorder 2638
-#define wxAuiPaneInfo_PinButton 2639
-#define wxAuiPaneInfo_Position 2640
-#define wxAuiPaneInfo_Resizable 2641
-#define wxAuiPaneInfo_Right 2642
-#define wxAuiPaneInfo_RightDockable 2643
-#define wxAuiPaneInfo_Row 2644
-#define wxAuiPaneInfo_SafeSet 2645
-#define wxAuiPaneInfo_SetFlag 2646
-#define wxAuiPaneInfo_Show 2647
-#define wxAuiPaneInfo_ToolbarPane 2648
-#define wxAuiPaneInfo_Top 2649
-#define wxAuiPaneInfo_TopDockable 2650
-#define wxAuiPaneInfo_Window 2651
-#define wxAuiNotebook_new_0 2652
-#define wxAuiNotebook_new_2 2653
-#define wxAuiNotebook_AddPage 2654
-#define wxAuiNotebook_Create 2655
-#define wxAuiNotebook_DeletePage 2656
-#define wxAuiNotebook_GetArtProvider 2657
-#define wxAuiNotebook_GetPage 2658
-#define wxAuiNotebook_GetPageBitmap 2659
-#define wxAuiNotebook_GetPageCount 2660
-#define wxAuiNotebook_GetPageIndex 2661
-#define wxAuiNotebook_GetPageText 2662
-#define wxAuiNotebook_GetSelection 2663
-#define wxAuiNotebook_InsertPage 2664
-#define wxAuiNotebook_RemovePage 2665
-#define wxAuiNotebook_SetArtProvider 2666
-#define wxAuiNotebook_SetFont 2667
-#define wxAuiNotebook_SetPageBitmap 2668
-#define wxAuiNotebook_SetPageText 2669
-#define wxAuiNotebook_SetSelection 2670
-#define wxAuiNotebook_SetTabCtrlHeight 2671
-#define wxAuiNotebook_SetUniformBitmapSize 2672
-#define wxAuiNotebook_destroy 2673
-#define wxMDIParentFrame_new_0 2674
-#define wxMDIParentFrame_new_4 2675
-#define wxMDIParentFrame_destruct 2676
-#define wxMDIParentFrame_ActivateNext 2677
-#define wxMDIParentFrame_ActivatePrevious 2678
-#define wxMDIParentFrame_ArrangeIcons 2679
-#define wxMDIParentFrame_Cascade 2680
-#define wxMDIParentFrame_Create 2681
-#define wxMDIParentFrame_GetActiveChild 2682
-#define wxMDIParentFrame_GetClientWindow 2683
-#define wxMDIParentFrame_Tile 2684
-#define wxMDIChildFrame_new_0 2685
-#define wxMDIChildFrame_new_4 2686
-#define wxMDIChildFrame_destruct 2687
-#define wxMDIChildFrame_Activate 2688
-#define wxMDIChildFrame_Create 2689
-#define wxMDIChildFrame_Maximize 2690
-#define wxMDIChildFrame_Restore 2691
-#define wxMDIClientWindow_new_0 2692
-#define wxMDIClientWindow_new_2 2693
-#define wxMDIClientWindow_destruct 2694
-#define wxMDIClientWindow_CreateClient 2695
-#define wxLayoutAlgorithm_new 2696
-#define wxLayoutAlgorithm_LayoutFrame 2697
-#define wxLayoutAlgorithm_LayoutMDIFrame 2698
-#define wxLayoutAlgorithm_LayoutWindow 2699
-#define wxLayoutAlgorithm_destroy 2700
-#define wxEvent_GetId 2701
-#define wxEvent_GetSkipped 2702
-#define wxEvent_GetTimestamp 2703
-#define wxEvent_IsCommandEvent 2704
-#define wxEvent_ResumePropagation 2705
-#define wxEvent_ShouldPropagate 2706
-#define wxEvent_Skip 2707
-#define wxEvent_StopPropagation 2708
-#define wxCommandEvent_getClientData 2709
-#define wxCommandEvent_GetExtraLong 2710
-#define wxCommandEvent_GetInt 2711
-#define wxCommandEvent_GetSelection 2712
-#define wxCommandEvent_GetString 2713
-#define wxCommandEvent_IsChecked 2714
-#define wxCommandEvent_IsSelection 2715
-#define wxCommandEvent_SetInt 2716
-#define wxCommandEvent_SetString 2717
-#define wxScrollEvent_GetOrientation 2718
-#define wxScrollEvent_GetPosition 2719
-#define wxScrollWinEvent_GetOrientation 2720
-#define wxScrollWinEvent_GetPosition 2721
-#define wxMouseEvent_AltDown 2722
-#define wxMouseEvent_Button 2723
-#define wxMouseEvent_ButtonDClick 2724
-#define wxMouseEvent_ButtonDown 2725
-#define wxMouseEvent_ButtonUp 2726
-#define wxMouseEvent_CmdDown 2727
-#define wxMouseEvent_ControlDown 2728
-#define wxMouseEvent_Dragging 2729
-#define wxMouseEvent_Entering 2730
-#define wxMouseEvent_GetButton 2731
-#define wxMouseEvent_GetPosition 2734
-#define wxMouseEvent_GetLogicalPosition 2735
-#define wxMouseEvent_GetLinesPerAction 2736
-#define wxMouseEvent_GetWheelRotation 2737
-#define wxMouseEvent_GetWheelDelta 2738
-#define wxMouseEvent_GetX 2739
-#define wxMouseEvent_GetY 2740
-#define wxMouseEvent_IsButton 2741
-#define wxMouseEvent_IsPageScroll 2742
-#define wxMouseEvent_Leaving 2743
-#define wxMouseEvent_LeftDClick 2744
-#define wxMouseEvent_LeftDown 2745
-#define wxMouseEvent_LeftIsDown 2746
-#define wxMouseEvent_LeftUp 2747
-#define wxMouseEvent_MetaDown 2748
-#define wxMouseEvent_MiddleDClick 2749
-#define wxMouseEvent_MiddleDown 2750
-#define wxMouseEvent_MiddleIsDown 2751
-#define wxMouseEvent_MiddleUp 2752
-#define wxMouseEvent_Moving 2753
-#define wxMouseEvent_RightDClick 2754
-#define wxMouseEvent_RightDown 2755
-#define wxMouseEvent_RightIsDown 2756
-#define wxMouseEvent_RightUp 2757
-#define wxMouseEvent_ShiftDown 2758
-#define wxSetCursorEvent_GetCursor 2759
-#define wxSetCursorEvent_GetX 2760
-#define wxSetCursorEvent_GetY 2761
-#define wxSetCursorEvent_HasCursor 2762
-#define wxSetCursorEvent_SetCursor 2763
-#define wxKeyEvent_AltDown 2764
-#define wxKeyEvent_CmdDown 2765
-#define wxKeyEvent_ControlDown 2766
-#define wxKeyEvent_GetKeyCode 2767
-#define wxKeyEvent_GetModifiers 2768
-#define wxKeyEvent_GetPosition 2771
-#define wxKeyEvent_GetRawKeyCode 2772
-#define wxKeyEvent_GetRawKeyFlags 2773
-#define wxKeyEvent_GetUnicodeKey 2774
-#define wxKeyEvent_GetX 2775
-#define wxKeyEvent_GetY 2776
-#define wxKeyEvent_HasModifiers 2777
-#define wxKeyEvent_MetaDown 2778
-#define wxKeyEvent_ShiftDown 2779
-#define wxSizeEvent_GetSize 2780
-#define wxMoveEvent_GetPosition 2781
-#define wxEraseEvent_GetDC 2782
-#define wxFocusEvent_GetWindow 2783
-#define wxChildFocusEvent_GetWindow 2784
-#define wxMenuEvent_GetMenu 2785
-#define wxMenuEvent_GetMenuId 2786
-#define wxMenuEvent_IsPopup 2787
-#define wxCloseEvent_CanVeto 2788
-#define wxCloseEvent_GetLoggingOff 2789
-#define wxCloseEvent_SetCanVeto 2790
-#define wxCloseEvent_SetLoggingOff 2791
-#define wxCloseEvent_Veto 2792
-#define wxShowEvent_SetShow 2793
-#define wxShowEvent_GetShow 2794
-#define wxIconizeEvent_Iconized 2795
-#define wxJoystickEvent_ButtonDown 2796
-#define wxJoystickEvent_ButtonIsDown 2797
-#define wxJoystickEvent_ButtonUp 2798
-#define wxJoystickEvent_GetButtonChange 2799
-#define wxJoystickEvent_GetButtonState 2800
-#define wxJoystickEvent_GetJoystick 2801
-#define wxJoystickEvent_GetPosition 2802
-#define wxJoystickEvent_GetZPosition 2803
-#define wxJoystickEvent_IsButton 2804
-#define wxJoystickEvent_IsMove 2805
-#define wxJoystickEvent_IsZMove 2806
-#define wxUpdateUIEvent_CanUpdate 2807
-#define wxUpdateUIEvent_Check 2808
-#define wxUpdateUIEvent_Enable 2809
-#define wxUpdateUIEvent_Show 2810
-#define wxUpdateUIEvent_GetChecked 2811
-#define wxUpdateUIEvent_GetEnabled 2812
-#define wxUpdateUIEvent_GetShown 2813
-#define wxUpdateUIEvent_GetSetChecked 2814
-#define wxUpdateUIEvent_GetSetEnabled 2815
-#define wxUpdateUIEvent_GetSetShown 2816
-#define wxUpdateUIEvent_GetSetText 2817
-#define wxUpdateUIEvent_GetText 2818
-#define wxUpdateUIEvent_GetMode 2819
-#define wxUpdateUIEvent_GetUpdateInterval 2820
-#define wxUpdateUIEvent_ResetUpdateTime 2821
-#define wxUpdateUIEvent_SetMode 2822
-#define wxUpdateUIEvent_SetText 2823
-#define wxUpdateUIEvent_SetUpdateInterval 2824
-#define wxMouseCaptureChangedEvent_GetCapturedWindow 2825
-#define wxPaletteChangedEvent_SetChangedWindow 2826
-#define wxPaletteChangedEvent_GetChangedWindow 2827
-#define wxQueryNewPaletteEvent_SetPaletteRealized 2828
-#define wxQueryNewPaletteEvent_GetPaletteRealized 2829
-#define wxNavigationKeyEvent_GetDirection 2830
-#define wxNavigationKeyEvent_SetDirection 2831
-#define wxNavigationKeyEvent_IsWindowChange 2832
-#define wxNavigationKeyEvent_SetWindowChange 2833
-#define wxNavigationKeyEvent_IsFromTab 2834
-#define wxNavigationKeyEvent_SetFromTab 2835
-#define wxNavigationKeyEvent_GetCurrentFocus 2836
-#define wxNavigationKeyEvent_SetCurrentFocus 2837
-#define wxHelpEvent_GetOrigin 2838
-#define wxHelpEvent_GetPosition 2839
-#define wxHelpEvent_SetOrigin 2840
-#define wxHelpEvent_SetPosition 2841
-#define wxContextMenuEvent_GetPosition 2842
-#define wxContextMenuEvent_SetPosition 2843
-#define wxIdleEvent_CanSend 2844
-#define wxIdleEvent_GetMode 2845
-#define wxIdleEvent_RequestMore 2846
-#define wxIdleEvent_MoreRequested 2847
-#define wxIdleEvent_SetMode 2848
-#define wxGridEvent_AltDown 2849
-#define wxGridEvent_ControlDown 2850
-#define wxGridEvent_GetCol 2851
-#define wxGridEvent_GetPosition 2852
-#define wxGridEvent_GetRow 2853
-#define wxGridEvent_MetaDown 2854
-#define wxGridEvent_Selecting 2855
-#define wxGridEvent_ShiftDown 2856
-#define wxNotifyEvent_Allow 2857
-#define wxNotifyEvent_IsAllowed 2858
-#define wxNotifyEvent_Veto 2859
-#define wxSashEvent_GetEdge 2860
-#define wxSashEvent_GetDragRect 2861
-#define wxSashEvent_GetDragStatus 2862
-#define wxListEvent_GetCacheFrom 2863
-#define wxListEvent_GetCacheTo 2864
-#define wxListEvent_GetKeyCode 2865
-#define wxListEvent_GetIndex 2866
-#define wxListEvent_GetColumn 2867
-#define wxListEvent_GetPoint 2868
-#define wxListEvent_GetLabel 2869
-#define wxListEvent_GetText 2870
-#define wxListEvent_GetImage 2871
-#define wxListEvent_GetData 2872
-#define wxListEvent_GetMask 2873
-#define wxListEvent_GetItem 2874
-#define wxListEvent_IsEditCancelled 2875
-#define wxDateEvent_GetDate 2876
-#define wxCalendarEvent_GetWeekDay 2877
-#define wxFileDirPickerEvent_GetPath 2878
-#define wxColourPickerEvent_GetColour 2879
-#define wxFontPickerEvent_GetFont 2880
-#define wxStyledTextEvent_GetPosition 2881
-#define wxStyledTextEvent_GetKey 2882
-#define wxStyledTextEvent_GetModifiers 2883
-#define wxStyledTextEvent_GetModificationType 2884
-#define wxStyledTextEvent_GetText 2885
-#define wxStyledTextEvent_GetLength 2886
-#define wxStyledTextEvent_GetLinesAdded 2887
-#define wxStyledTextEvent_GetLine 2888
-#define wxStyledTextEvent_GetFoldLevelNow 2889
-#define wxStyledTextEvent_GetFoldLevelPrev 2890
-#define wxStyledTextEvent_GetMargin 2891
-#define wxStyledTextEvent_GetMessage 2892
-#define wxStyledTextEvent_GetWParam 2893
-#define wxStyledTextEvent_GetLParam 2894
-#define wxStyledTextEvent_GetListType 2895
-#define wxStyledTextEvent_GetX 2896
-#define wxStyledTextEvent_GetY 2897
-#define wxStyledTextEvent_GetDragText 2898
-#define wxStyledTextEvent_GetDragAllowMove 2899
-#define wxStyledTextEvent_GetDragResult 2900
-#define wxStyledTextEvent_GetShift 2901
-#define wxStyledTextEvent_GetControl 2902
-#define wxStyledTextEvent_GetAlt 2903
-#define utils_wxGetKeyState 2904
-#define utils_wxGetMousePosition 2905
-#define utils_wxGetMouseState 2906
-#define utils_wxSetDetectableAutoRepeat 2907
-#define utils_wxBell 2908
-#define utils_wxFindMenuItemId 2909
-#define utils_wxGenericFindWindowAtPoint 2910
-#define utils_wxFindWindowAtPoint 2911
-#define utils_wxBeginBusyCursor 2912
-#define utils_wxEndBusyCursor 2913
-#define utils_wxIsBusy 2914
-#define utils_wxShutdown 2915
-#define utils_wxShell 2916
-#define utils_wxLaunchDefaultBrowser 2917
-#define utils_wxGetEmailAddress 2918
-#define utils_wxGetUserId 2919
-#define utils_wxGetHomeDir 2920
-#define utils_wxNewId 2921
-#define utils_wxRegisterId 2922
-#define utils_wxGetCurrentId 2923
-#define utils_wxGetOsDescription 2924
-#define utils_wxIsPlatformLittleEndian 2925
-#define utils_wxIsPlatform64Bit 2926
-#define wxPrintout_new 2927
-#define wxPrintout_destruct 2928
-#define wxPrintout_GetDC 2929
-#define wxPrintout_GetPageSizeMM 2930
-#define wxPrintout_GetPageSizePixels 2931
-#define wxPrintout_GetPaperRectPixels 2932
-#define wxPrintout_GetPPIPrinter 2933
-#define wxPrintout_GetPPIScreen 2934
-#define wxPrintout_GetTitle 2935
-#define wxPrintout_IsPreview 2936
-#define wxPrintout_FitThisSizeToPaper 2937
-#define wxPrintout_FitThisSizeToPage 2938
-#define wxPrintout_FitThisSizeToPageMargins 2939
-#define wxPrintout_MapScreenSizeToPaper 2940
-#define wxPrintout_MapScreenSizeToPage 2941
-#define wxPrintout_MapScreenSizeToPageMargins 2942
-#define wxPrintout_MapScreenSizeToDevice 2943
-#define wxPrintout_GetLogicalPaperRect 2944
-#define wxPrintout_GetLogicalPageRect 2945
-#define wxPrintout_GetLogicalPageMarginsRect 2946
-#define wxPrintout_SetLogicalOrigin 2947
-#define wxPrintout_OffsetLogicalOrigin 2948
-#define wxStyledTextCtrl_new_2 2949
-#define wxStyledTextCtrl_new_0 2950
-#define wxStyledTextCtrl_destruct 2951
-#define wxStyledTextCtrl_Create 2952
-#define wxStyledTextCtrl_AddText 2953
-#define wxStyledTextCtrl_AddStyledText 2954
-#define wxStyledTextCtrl_InsertText 2955
-#define wxStyledTextCtrl_ClearAll 2956
-#define wxStyledTextCtrl_ClearDocumentStyle 2957
-#define wxStyledTextCtrl_GetLength 2958
-#define wxStyledTextCtrl_GetCharAt 2959
-#define wxStyledTextCtrl_GetCurrentPos 2960
-#define wxStyledTextCtrl_GetAnchor 2961
-#define wxStyledTextCtrl_GetStyleAt 2962
-#define wxStyledTextCtrl_Redo 2963
-#define wxStyledTextCtrl_SetUndoCollection 2964
-#define wxStyledTextCtrl_SelectAll 2965
-#define wxStyledTextCtrl_SetSavePoint 2966
-#define wxStyledTextCtrl_GetStyledText 2967
-#define wxStyledTextCtrl_CanRedo 2968
-#define wxStyledTextCtrl_MarkerLineFromHandle 2969
-#define wxStyledTextCtrl_MarkerDeleteHandle 2970
-#define wxStyledTextCtrl_GetUndoCollection 2971
-#define wxStyledTextCtrl_GetViewWhiteSpace 2972
-#define wxStyledTextCtrl_SetViewWhiteSpace 2973
-#define wxStyledTextCtrl_PositionFromPoint 2974
-#define wxStyledTextCtrl_PositionFromPointClose 2975
-#define wxStyledTextCtrl_GotoLine 2976
-#define wxStyledTextCtrl_GotoPos 2977
-#define wxStyledTextCtrl_SetAnchor 2978
-#define wxStyledTextCtrl_GetCurLine 2979
-#define wxStyledTextCtrl_GetEndStyled 2980
-#define wxStyledTextCtrl_ConvertEOLs 2981
-#define wxStyledTextCtrl_GetEOLMode 2982
-#define wxStyledTextCtrl_SetEOLMode 2983
-#define wxStyledTextCtrl_StartStyling 2984
-#define wxStyledTextCtrl_SetStyling 2985
-#define wxStyledTextCtrl_GetBufferedDraw 2986
-#define wxStyledTextCtrl_SetBufferedDraw 2987
-#define wxStyledTextCtrl_SetTabWidth 2988
-#define wxStyledTextCtrl_GetTabWidth 2989
-#define wxStyledTextCtrl_SetCodePage 2990
-#define wxStyledTextCtrl_MarkerDefine 2991
-#define wxStyledTextCtrl_MarkerSetForeground 2992
-#define wxStyledTextCtrl_MarkerSetBackground 2993
-#define wxStyledTextCtrl_MarkerAdd 2994
-#define wxStyledTextCtrl_MarkerDelete 2995
-#define wxStyledTextCtrl_MarkerDeleteAll 2996
-#define wxStyledTextCtrl_MarkerGet 2997
-#define wxStyledTextCtrl_MarkerNext 2998
-#define wxStyledTextCtrl_MarkerPrevious 2999
-#define wxStyledTextCtrl_MarkerDefineBitmap 3000
-#define wxStyledTextCtrl_MarkerAddSet 3001
-#define wxStyledTextCtrl_MarkerSetAlpha 3002
-#define wxStyledTextCtrl_SetMarginType 3003
-#define wxStyledTextCtrl_GetMarginType 3004
-#define wxStyledTextCtrl_SetMarginWidth 3005
-#define wxStyledTextCtrl_GetMarginWidth 3006
-#define wxStyledTextCtrl_SetMarginMask 3007
-#define wxStyledTextCtrl_GetMarginMask 3008
-#define wxStyledTextCtrl_SetMarginSensitive 3009
-#define wxStyledTextCtrl_GetMarginSensitive 3010
-#define wxStyledTextCtrl_StyleClearAll 3011
-#define wxStyledTextCtrl_StyleSetForeground 3012
-#define wxStyledTextCtrl_StyleSetBackground 3013
-#define wxStyledTextCtrl_StyleSetBold 3014
-#define wxStyledTextCtrl_StyleSetItalic 3015
-#define wxStyledTextCtrl_StyleSetSize 3016
-#define wxStyledTextCtrl_StyleSetFaceName 3017
-#define wxStyledTextCtrl_StyleSetEOLFilled 3018
-#define wxStyledTextCtrl_StyleResetDefault 3019
-#define wxStyledTextCtrl_StyleSetUnderline 3020
-#define wxStyledTextCtrl_StyleSetCase 3021
-#define wxStyledTextCtrl_StyleSetHotSpot 3022
-#define wxStyledTextCtrl_SetSelForeground 3023
-#define wxStyledTextCtrl_SetSelBackground 3024
-#define wxStyledTextCtrl_GetSelAlpha 3025
-#define wxStyledTextCtrl_SetSelAlpha 3026
-#define wxStyledTextCtrl_SetCaretForeground 3027
-#define wxStyledTextCtrl_CmdKeyAssign 3028
-#define wxStyledTextCtrl_CmdKeyClear 3029
-#define wxStyledTextCtrl_CmdKeyClearAll 3030
-#define wxStyledTextCtrl_SetStyleBytes 3031
-#define wxStyledTextCtrl_StyleSetVisible 3032
-#define wxStyledTextCtrl_GetCaretPeriod 3033
-#define wxStyledTextCtrl_SetCaretPeriod 3034
-#define wxStyledTextCtrl_SetWordChars 3035
-#define wxStyledTextCtrl_BeginUndoAction 3036
-#define wxStyledTextCtrl_EndUndoAction 3037
-#define wxStyledTextCtrl_IndicatorSetStyle 3038
-#define wxStyledTextCtrl_IndicatorGetStyle 3039
-#define wxStyledTextCtrl_IndicatorSetForeground 3040
-#define wxStyledTextCtrl_IndicatorGetForeground 3041
-#define wxStyledTextCtrl_SetWhitespaceForeground 3042
-#define wxStyledTextCtrl_SetWhitespaceBackground 3043
-#define wxStyledTextCtrl_GetStyleBits 3044
-#define wxStyledTextCtrl_SetLineState 3045
-#define wxStyledTextCtrl_GetLineState 3046
-#define wxStyledTextCtrl_GetMaxLineState 3047
-#define wxStyledTextCtrl_GetCaretLineVisible 3048
-#define wxStyledTextCtrl_SetCaretLineVisible 3049
-#define wxStyledTextCtrl_GetCaretLineBackground 3050
-#define wxStyledTextCtrl_SetCaretLineBackground 3051
-#define wxStyledTextCtrl_AutoCompShow 3052
-#define wxStyledTextCtrl_AutoCompCancel 3053
-#define wxStyledTextCtrl_AutoCompActive 3054
-#define wxStyledTextCtrl_AutoCompPosStart 3055
-#define wxStyledTextCtrl_AutoCompComplete 3056
-#define wxStyledTextCtrl_AutoCompStops 3057
-#define wxStyledTextCtrl_AutoCompSetSeparator 3058
-#define wxStyledTextCtrl_AutoCompGetSeparator 3059
-#define wxStyledTextCtrl_AutoCompSelect 3060
-#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3061
-#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3062
-#define wxStyledTextCtrl_AutoCompSetFillUps 3063
-#define wxStyledTextCtrl_AutoCompSetChooseSingle 3064
-#define wxStyledTextCtrl_AutoCompGetChooseSingle 3065
-#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3066
-#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3067
-#define wxStyledTextCtrl_UserListShow 3068
-#define wxStyledTextCtrl_AutoCompSetAutoHide 3069
-#define wxStyledTextCtrl_AutoCompGetAutoHide 3070
-#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3071
-#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3072
-#define wxStyledTextCtrl_RegisterImage 3073
-#define wxStyledTextCtrl_ClearRegisteredImages 3074
-#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3075
-#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3076
-#define wxStyledTextCtrl_AutoCompSetMaxWidth 3077
-#define wxStyledTextCtrl_AutoCompGetMaxWidth 3078
-#define wxStyledTextCtrl_AutoCompSetMaxHeight 3079
-#define wxStyledTextCtrl_AutoCompGetMaxHeight 3080
-#define wxStyledTextCtrl_SetIndent 3081
-#define wxStyledTextCtrl_GetIndent 3082
-#define wxStyledTextCtrl_SetUseTabs 3083
-#define wxStyledTextCtrl_GetUseTabs 3084
-#define wxStyledTextCtrl_SetLineIndentation 3085
-#define wxStyledTextCtrl_GetLineIndentation 3086
-#define wxStyledTextCtrl_GetLineIndentPosition 3087
-#define wxStyledTextCtrl_GetColumn 3088
-#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3089
-#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3090
-#define wxStyledTextCtrl_SetIndentationGuides 3091
-#define wxStyledTextCtrl_GetIndentationGuides 3092
-#define wxStyledTextCtrl_SetHighlightGuide 3093
-#define wxStyledTextCtrl_GetHighlightGuide 3094
-#define wxStyledTextCtrl_GetLineEndPosition 3095
-#define wxStyledTextCtrl_GetCodePage 3096
-#define wxStyledTextCtrl_GetCaretForeground 3097
-#define wxStyledTextCtrl_GetReadOnly 3098
-#define wxStyledTextCtrl_SetCurrentPos 3099
-#define wxStyledTextCtrl_SetSelectionStart 3100
-#define wxStyledTextCtrl_GetSelectionStart 3101
-#define wxStyledTextCtrl_SetSelectionEnd 3102
-#define wxStyledTextCtrl_GetSelectionEnd 3103
-#define wxStyledTextCtrl_SetPrintMagnification 3104
-#define wxStyledTextCtrl_GetPrintMagnification 3105
-#define wxStyledTextCtrl_SetPrintColourMode 3106
-#define wxStyledTextCtrl_GetPrintColourMode 3107
-#define wxStyledTextCtrl_FindText 3108
-#define wxStyledTextCtrl_FormatRange 3109
-#define wxStyledTextCtrl_GetFirstVisibleLine 3110
-#define wxStyledTextCtrl_GetLine 3111
-#define wxStyledTextCtrl_GetLineCount 3112
-#define wxStyledTextCtrl_SetMarginLeft 3113
-#define wxStyledTextCtrl_GetMarginLeft 3114
-#define wxStyledTextCtrl_SetMarginRight 3115
-#define wxStyledTextCtrl_GetMarginRight 3116
-#define wxStyledTextCtrl_GetModify 3117
-#define wxStyledTextCtrl_SetSelection 3118
-#define wxStyledTextCtrl_GetSelectedText 3119
-#define wxStyledTextCtrl_GetTextRange 3120
-#define wxStyledTextCtrl_HideSelection 3121
-#define wxStyledTextCtrl_LineFromPosition 3122
-#define wxStyledTextCtrl_PositionFromLine 3123
-#define wxStyledTextCtrl_LineScroll 3124
-#define wxStyledTextCtrl_EnsureCaretVisible 3125
-#define wxStyledTextCtrl_ReplaceSelection 3126
-#define wxStyledTextCtrl_SetReadOnly 3127
-#define wxStyledTextCtrl_CanPaste 3128
-#define wxStyledTextCtrl_CanUndo 3129
-#define wxStyledTextCtrl_EmptyUndoBuffer 3130
-#define wxStyledTextCtrl_Undo 3131
-#define wxStyledTextCtrl_Cut 3132
-#define wxStyledTextCtrl_Copy 3133
-#define wxStyledTextCtrl_Paste 3134
-#define wxStyledTextCtrl_Clear 3135
-#define wxStyledTextCtrl_SetText 3136
-#define wxStyledTextCtrl_GetText 3137
-#define wxStyledTextCtrl_GetTextLength 3138
-#define wxStyledTextCtrl_GetOvertype 3139
-#define wxStyledTextCtrl_SetCaretWidth 3140
-#define wxStyledTextCtrl_GetCaretWidth 3141
-#define wxStyledTextCtrl_SetTargetStart 3142
-#define wxStyledTextCtrl_GetTargetStart 3143
-#define wxStyledTextCtrl_SetTargetEnd 3144
-#define wxStyledTextCtrl_GetTargetEnd 3145
-#define wxStyledTextCtrl_ReplaceTarget 3146
-#define wxStyledTextCtrl_SearchInTarget 3147
-#define wxStyledTextCtrl_SetSearchFlags 3148
-#define wxStyledTextCtrl_GetSearchFlags 3149
-#define wxStyledTextCtrl_CallTipShow 3150
-#define wxStyledTextCtrl_CallTipCancel 3151
-#define wxStyledTextCtrl_CallTipActive 3152
-#define wxStyledTextCtrl_CallTipPosAtStart 3153
-#define wxStyledTextCtrl_CallTipSetHighlight 3154
-#define wxStyledTextCtrl_CallTipSetBackground 3155
-#define wxStyledTextCtrl_CallTipSetForeground 3156
-#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3157
-#define wxStyledTextCtrl_CallTipUseStyle 3158
-#define wxStyledTextCtrl_VisibleFromDocLine 3159
-#define wxStyledTextCtrl_DocLineFromVisible 3160
-#define wxStyledTextCtrl_WrapCount 3161
-#define wxStyledTextCtrl_SetFoldLevel 3162
-#define wxStyledTextCtrl_GetFoldLevel 3163
-#define wxStyledTextCtrl_GetLastChild 3164
-#define wxStyledTextCtrl_GetFoldParent 3165
-#define wxStyledTextCtrl_ShowLines 3166
-#define wxStyledTextCtrl_HideLines 3167
-#define wxStyledTextCtrl_GetLineVisible 3168
-#define wxStyledTextCtrl_SetFoldExpanded 3169
-#define wxStyledTextCtrl_GetFoldExpanded 3170
-#define wxStyledTextCtrl_ToggleFold 3171
-#define wxStyledTextCtrl_EnsureVisible 3172
-#define wxStyledTextCtrl_SetFoldFlags 3173
-#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3174
-#define wxStyledTextCtrl_SetTabIndents 3175
-#define wxStyledTextCtrl_GetTabIndents 3176
-#define wxStyledTextCtrl_SetBackSpaceUnIndents 3177
-#define wxStyledTextCtrl_GetBackSpaceUnIndents 3178
-#define wxStyledTextCtrl_SetMouseDwellTime 3179
-#define wxStyledTextCtrl_GetMouseDwellTime 3180
-#define wxStyledTextCtrl_WordStartPosition 3181
-#define wxStyledTextCtrl_WordEndPosition 3182
-#define wxStyledTextCtrl_SetWrapMode 3183
-#define wxStyledTextCtrl_GetWrapMode 3184
-#define wxStyledTextCtrl_SetWrapVisualFlags 3185
-#define wxStyledTextCtrl_GetWrapVisualFlags 3186
-#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3187
-#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3188
-#define wxStyledTextCtrl_SetWrapStartIndent 3189
-#define wxStyledTextCtrl_GetWrapStartIndent 3190
-#define wxStyledTextCtrl_SetLayoutCache 3191
-#define wxStyledTextCtrl_GetLayoutCache 3192
-#define wxStyledTextCtrl_SetScrollWidth 3193
-#define wxStyledTextCtrl_GetScrollWidth 3194
-#define wxStyledTextCtrl_TextWidth 3195
-#define wxStyledTextCtrl_GetEndAtLastLine 3196
-#define wxStyledTextCtrl_TextHeight 3197
-#define wxStyledTextCtrl_SetUseVerticalScrollBar 3198
-#define wxStyledTextCtrl_GetUseVerticalScrollBar 3199
-#define wxStyledTextCtrl_AppendText 3200
-#define wxStyledTextCtrl_GetTwoPhaseDraw 3201
-#define wxStyledTextCtrl_SetTwoPhaseDraw 3202
-#define wxStyledTextCtrl_TargetFromSelection 3203
-#define wxStyledTextCtrl_LinesJoin 3204
-#define wxStyledTextCtrl_LinesSplit 3205
-#define wxStyledTextCtrl_SetFoldMarginColour 3206
-#define wxStyledTextCtrl_SetFoldMarginHiColour 3207
-#define wxStyledTextCtrl_LineDown 3208
-#define wxStyledTextCtrl_LineDownExtend 3209
-#define wxStyledTextCtrl_LineUp 3210
-#define wxStyledTextCtrl_LineUpExtend 3211
-#define wxStyledTextCtrl_CharLeft 3212
-#define wxStyledTextCtrl_CharLeftExtend 3213
-#define wxStyledTextCtrl_CharRight 3214
-#define wxStyledTextCtrl_CharRightExtend 3215
-#define wxStyledTextCtrl_WordLeft 3216
-#define wxStyledTextCtrl_WordLeftExtend 3217
-#define wxStyledTextCtrl_WordRight 3218
-#define wxStyledTextCtrl_WordRightExtend 3219
-#define wxStyledTextCtrl_Home 3220
-#define wxStyledTextCtrl_HomeExtend 3221
-#define wxStyledTextCtrl_LineEnd 3222
-#define wxStyledTextCtrl_LineEndExtend 3223
-#define wxStyledTextCtrl_DocumentStart 3224
-#define wxStyledTextCtrl_DocumentStartExtend 3225
-#define wxStyledTextCtrl_DocumentEnd 3226
-#define wxStyledTextCtrl_DocumentEndExtend 3227
-#define wxStyledTextCtrl_PageUp 3228
-#define wxStyledTextCtrl_PageUpExtend 3229
-#define wxStyledTextCtrl_PageDown 3230
-#define wxStyledTextCtrl_PageDownExtend 3231
-#define wxStyledTextCtrl_EditToggleOvertype 3232
-#define wxStyledTextCtrl_Cancel 3233
-#define wxStyledTextCtrl_DeleteBack 3234
-#define wxStyledTextCtrl_Tab 3235
-#define wxStyledTextCtrl_BackTab 3236
-#define wxStyledTextCtrl_NewLine 3237
-#define wxStyledTextCtrl_FormFeed 3238
-#define wxStyledTextCtrl_VCHome 3239
-#define wxStyledTextCtrl_VCHomeExtend 3240
-#define wxStyledTextCtrl_ZoomIn 3241
-#define wxStyledTextCtrl_ZoomOut 3242
-#define wxStyledTextCtrl_DelWordLeft 3243
-#define wxStyledTextCtrl_DelWordRight 3244
-#define wxStyledTextCtrl_LineCut 3245
-#define wxStyledTextCtrl_LineDelete 3246
-#define wxStyledTextCtrl_LineTranspose 3247
-#define wxStyledTextCtrl_LineDuplicate 3248
-#define wxStyledTextCtrl_LowerCase 3249
-#define wxStyledTextCtrl_UpperCase 3250
-#define wxStyledTextCtrl_LineScrollDown 3251
-#define wxStyledTextCtrl_LineScrollUp 3252
-#define wxStyledTextCtrl_DeleteBackNotLine 3253
-#define wxStyledTextCtrl_HomeDisplay 3254
-#define wxStyledTextCtrl_HomeDisplayExtend 3255
-#define wxStyledTextCtrl_LineEndDisplay 3256
-#define wxStyledTextCtrl_LineEndDisplayExtend 3257
-#define wxStyledTextCtrl_HomeWrapExtend 3258
-#define wxStyledTextCtrl_LineEndWrap 3259
-#define wxStyledTextCtrl_LineEndWrapExtend 3260
-#define wxStyledTextCtrl_VCHomeWrap 3261
-#define wxStyledTextCtrl_VCHomeWrapExtend 3262
-#define wxStyledTextCtrl_LineCopy 3263
-#define wxStyledTextCtrl_MoveCaretInsideView 3264
-#define wxStyledTextCtrl_LineLength 3265
-#define wxStyledTextCtrl_BraceHighlight 3266
-#define wxStyledTextCtrl_BraceBadLight 3267
-#define wxStyledTextCtrl_BraceMatch 3268
-#define wxStyledTextCtrl_GetViewEOL 3269
-#define wxStyledTextCtrl_SetViewEOL 3270
-#define wxStyledTextCtrl_SetModEventMask 3271
-#define wxStyledTextCtrl_GetEdgeColumn 3272
-#define wxStyledTextCtrl_SetEdgeColumn 3273
-#define wxStyledTextCtrl_SetEdgeMode 3274
-#define wxStyledTextCtrl_GetEdgeMode 3275
-#define wxStyledTextCtrl_GetEdgeColour 3276
-#define wxStyledTextCtrl_SetEdgeColour 3277
-#define wxStyledTextCtrl_SearchAnchor 3278
-#define wxStyledTextCtrl_SearchNext 3279
-#define wxStyledTextCtrl_SearchPrev 3280
-#define wxStyledTextCtrl_LinesOnScreen 3281
-#define wxStyledTextCtrl_UsePopUp 3282
-#define wxStyledTextCtrl_SelectionIsRectangle 3283
-#define wxStyledTextCtrl_SetZoom 3284
-#define wxStyledTextCtrl_GetZoom 3285
-#define wxStyledTextCtrl_GetModEventMask 3286
-#define wxStyledTextCtrl_SetSTCFocus 3287
-#define wxStyledTextCtrl_GetSTCFocus 3288
-#define wxStyledTextCtrl_SetStatus 3289
-#define wxStyledTextCtrl_GetStatus 3290
-#define wxStyledTextCtrl_SetMouseDownCaptures 3291
-#define wxStyledTextCtrl_GetMouseDownCaptures 3292
-#define wxStyledTextCtrl_SetSTCCursor 3293
-#define wxStyledTextCtrl_GetSTCCursor 3294
-#define wxStyledTextCtrl_SetControlCharSymbol 3295
-#define wxStyledTextCtrl_GetControlCharSymbol 3296
-#define wxStyledTextCtrl_WordPartLeft 3297
-#define wxStyledTextCtrl_WordPartLeftExtend 3298
-#define wxStyledTextCtrl_WordPartRight 3299
-#define wxStyledTextCtrl_WordPartRightExtend 3300
-#define wxStyledTextCtrl_SetVisiblePolicy 3301
-#define wxStyledTextCtrl_DelLineLeft 3302
-#define wxStyledTextCtrl_DelLineRight 3303
-#define wxStyledTextCtrl_GetXOffset 3304
-#define wxStyledTextCtrl_ChooseCaretX 3305
-#define wxStyledTextCtrl_SetXCaretPolicy 3306
-#define wxStyledTextCtrl_SetYCaretPolicy 3307
-#define wxStyledTextCtrl_GetPrintWrapMode 3308
-#define wxStyledTextCtrl_SetHotspotActiveForeground 3309
-#define wxStyledTextCtrl_SetHotspotActiveBackground 3310
-#define wxStyledTextCtrl_SetHotspotActiveUnderline 3311
-#define wxStyledTextCtrl_SetHotspotSingleLine 3312
-#define wxStyledTextCtrl_ParaDownExtend 3313
-#define wxStyledTextCtrl_ParaUp 3314
-#define wxStyledTextCtrl_ParaUpExtend 3315
-#define wxStyledTextCtrl_PositionBefore 3316
-#define wxStyledTextCtrl_PositionAfter 3317
-#define wxStyledTextCtrl_CopyRange 3318
-#define wxStyledTextCtrl_CopyText 3319
-#define wxStyledTextCtrl_SetSelectionMode 3320
-#define wxStyledTextCtrl_GetSelectionMode 3321
-#define wxStyledTextCtrl_LineDownRectExtend 3322
-#define wxStyledTextCtrl_LineUpRectExtend 3323
-#define wxStyledTextCtrl_CharLeftRectExtend 3324
-#define wxStyledTextCtrl_CharRightRectExtend 3325
-#define wxStyledTextCtrl_HomeRectExtend 3326
-#define wxStyledTextCtrl_VCHomeRectExtend 3327
-#define wxStyledTextCtrl_LineEndRectExtend 3328
-#define wxStyledTextCtrl_PageUpRectExtend 3329
-#define wxStyledTextCtrl_PageDownRectExtend 3330
-#define wxStyledTextCtrl_StutteredPageUp 3331
-#define wxStyledTextCtrl_StutteredPageUpExtend 3332
-#define wxStyledTextCtrl_StutteredPageDown 3333
-#define wxStyledTextCtrl_StutteredPageDownExtend 3334
-#define wxStyledTextCtrl_WordLeftEnd 3335
-#define wxStyledTextCtrl_WordLeftEndExtend 3336
-#define wxStyledTextCtrl_WordRightEnd 3337
-#define wxStyledTextCtrl_WordRightEndExtend 3338
-#define wxStyledTextCtrl_SetWhitespaceChars 3339
-#define wxStyledTextCtrl_SetCharsDefault 3340
-#define wxStyledTextCtrl_AutoCompGetCurrent 3341
-#define wxStyledTextCtrl_Allocate 3342
-#define wxStyledTextCtrl_FindColumn 3343
-#define wxStyledTextCtrl_GetCaretSticky 3344
-#define wxStyledTextCtrl_SetCaretSticky 3345
-#define wxStyledTextCtrl_ToggleCaretSticky 3346
-#define wxStyledTextCtrl_SetPasteConvertEndings 3347
-#define wxStyledTextCtrl_GetPasteConvertEndings 3348
-#define wxStyledTextCtrl_SelectionDuplicate 3349
-#define wxStyledTextCtrl_SetCaretLineBackAlpha 3350
-#define wxStyledTextCtrl_GetCaretLineBackAlpha 3351
-#define wxStyledTextCtrl_StartRecord 3352
-#define wxStyledTextCtrl_StopRecord 3353
-#define wxStyledTextCtrl_SetLexer 3354
-#define wxStyledTextCtrl_GetLexer 3355
-#define wxStyledTextCtrl_Colourise 3356
-#define wxStyledTextCtrl_SetProperty 3357
-#define wxStyledTextCtrl_SetKeyWords 3358
-#define wxStyledTextCtrl_SetLexerLanguage 3359
-#define wxStyledTextCtrl_GetProperty 3360
-#define wxStyledTextCtrl_GetStyleBitsNeeded 3361
-#define wxStyledTextCtrl_GetCurrentLine 3362
-#define wxStyledTextCtrl_StyleSetSpec 3363
-#define wxStyledTextCtrl_StyleSetFont 3364
-#define wxStyledTextCtrl_StyleSetFontAttr 3365
-#define wxStyledTextCtrl_StyleSetCharacterSet 3366
-#define wxStyledTextCtrl_StyleSetFontEncoding 3367
-#define wxStyledTextCtrl_CmdKeyExecute 3368
-#define wxStyledTextCtrl_SetMargins 3369
-#define wxStyledTextCtrl_GetSelection 3370
-#define wxStyledTextCtrl_PointFromPosition 3371
-#define wxStyledTextCtrl_ScrollToLine 3372
-#define wxStyledTextCtrl_ScrollToColumn 3373
-#define wxStyledTextCtrl_SetVScrollBar 3374
-#define wxStyledTextCtrl_SetHScrollBar 3375
-#define wxStyledTextCtrl_GetLastKeydownProcessed 3376
-#define wxStyledTextCtrl_SetLastKeydownProcessed 3377
-#define wxStyledTextCtrl_SaveFile 3378
-#define wxStyledTextCtrl_LoadFile 3379
-#define wxStyledTextCtrl_DoDragOver 3380
-#define wxStyledTextCtrl_DoDropText 3381
-#define wxStyledTextCtrl_GetUseAntiAliasing 3382
-#define wxStyledTextCtrl_AddTextRaw 3383
-#define wxStyledTextCtrl_InsertTextRaw 3384
-#define wxStyledTextCtrl_GetCurLineRaw 3385
-#define wxStyledTextCtrl_GetLineRaw 3386
-#define wxStyledTextCtrl_GetSelectedTextRaw 3387
-#define wxStyledTextCtrl_GetTextRangeRaw 3388
-#define wxStyledTextCtrl_SetTextRaw 3389
-#define wxStyledTextCtrl_GetTextRaw 3390
-#define wxStyledTextCtrl_AppendTextRaw 3391
-#define wxArtProvider_GetBitmap 3392
-#define wxArtProvider_GetIcon 3393
-#define wxTreeEvent_GetKeyCode 3394
-#define wxTreeEvent_GetItem 3395
-#define wxTreeEvent_GetKeyEvent 3396
-#define wxTreeEvent_GetLabel 3397
-#define wxTreeEvent_GetOldItem 3398
-#define wxTreeEvent_GetPoint 3399
-#define wxTreeEvent_IsEditCancelled 3400
-#define wxTreeEvent_SetToolTip 3401
-#define wxNotebookEvent_GetOldSelection 3402
-#define wxNotebookEvent_GetSelection 3403
-#define wxNotebookEvent_SetOldSelection 3404
-#define wxNotebookEvent_SetSelection 3405
-#define wxFileDataObject_new 3406
-#define wxFileDataObject_AddFile 3407
-#define wxFileDataObject_GetFilenames 3408
-#define wxFileDataObject_destroy 3409
-#define wxTextDataObject_new 3410
-#define wxTextDataObject_GetTextLength 3411
-#define wxTextDataObject_GetText 3412
-#define wxTextDataObject_SetText 3413
-#define wxTextDataObject_destroy 3414
-#define wxBitmapDataObject_new_1_1 3415
-#define wxBitmapDataObject_new_1_0 3416
-#define wxBitmapDataObject_GetBitmap 3417
-#define wxBitmapDataObject_SetBitmap 3418
-#define wxBitmapDataObject_destroy 3419
-#define wxClipboard_new 3421
-#define wxClipboard_destruct 3422
-#define wxClipboard_AddData 3423
-#define wxClipboard_Clear 3424
-#define wxClipboard_Close 3425
-#define wxClipboard_Flush 3426
-#define wxClipboard_GetData 3427
-#define wxClipboard_IsOpened 3428
-#define wxClipboard_Open 3429
-#define wxClipboard_SetData 3430
-#define wxClipboard_UsePrimarySelection 3432
-#define wxClipboard_IsSupported 3433
-#define wxClipboard_Get 3434
-#define wxSpinEvent_GetPosition 3435
-#define wxSpinEvent_SetPosition 3436
-#define wxSplitterWindow_new_0 3437
-#define wxSplitterWindow_new_2 3438
-#define wxSplitterWindow_destruct 3439
-#define wxSplitterWindow_Create 3440
-#define wxSplitterWindow_GetMinimumPaneSize 3441
-#define wxSplitterWindow_GetSashGravity 3442
-#define wxSplitterWindow_GetSashPosition 3443
-#define wxSplitterWindow_GetSplitMode 3444
-#define wxSplitterWindow_GetWindow1 3445
-#define wxSplitterWindow_GetWindow2 3446
-#define wxSplitterWindow_Initialize 3447
-#define wxSplitterWindow_IsSplit 3448
-#define wxSplitterWindow_ReplaceWindow 3449
-#define wxSplitterWindow_SetSashGravity 3450
-#define wxSplitterWindow_SetSashPosition 3451
-#define wxSplitterWindow_SetSashSize 3452
-#define wxSplitterWindow_SetMinimumPaneSize 3453
-#define wxSplitterWindow_SetSplitMode 3454
-#define wxSplitterWindow_SplitHorizontally 3455
-#define wxSplitterWindow_SplitVertically 3456
-#define wxSplitterWindow_Unsplit 3457
-#define wxSplitterWindow_UpdateSize 3458
-#define wxSplitterEvent_GetSashPosition 3459
-#define wxSplitterEvent_GetX 3460
-#define wxSplitterEvent_GetY 3461
-#define wxSplitterEvent_GetWindowBeingRemoved 3462
-#define wxSplitterEvent_SetSashPosition 3463
-#define wxHtmlWindow_new_0 3464
-#define wxHtmlWindow_new_2 3465
-#define wxHtmlWindow_AppendToPage 3466
-#define wxHtmlWindow_GetOpenedAnchor 3467
-#define wxHtmlWindow_GetOpenedPage 3468
-#define wxHtmlWindow_GetOpenedPageTitle 3469
-#define wxHtmlWindow_GetRelatedFrame 3470
-#define wxHtmlWindow_HistoryBack 3471
-#define wxHtmlWindow_HistoryCanBack 3472
-#define wxHtmlWindow_HistoryCanForward 3473
-#define wxHtmlWindow_HistoryClear 3474
-#define wxHtmlWindow_HistoryForward 3475
-#define wxHtmlWindow_LoadFile 3476
-#define wxHtmlWindow_LoadPage 3477
-#define wxHtmlWindow_SelectAll 3478
-#define wxHtmlWindow_SelectionToText 3479
-#define wxHtmlWindow_SelectLine 3480
-#define wxHtmlWindow_SelectWord 3481
-#define wxHtmlWindow_SetBorders 3482
-#define wxHtmlWindow_SetFonts 3483
-#define wxHtmlWindow_SetPage 3484
-#define wxHtmlWindow_SetRelatedFrame 3485
-#define wxHtmlWindow_SetRelatedStatusBar 3486
-#define wxHtmlWindow_ToText 3487
-#define wxHtmlWindow_destroy 3488
-#define wxHtmlLinkEvent_GetLinkInfo 3489
-#define wxSystemSettings_GetColour 3490
-#define wxSystemSettings_GetFont 3491
-#define wxSystemSettings_GetMetric 3492
-#define wxSystemSettings_GetScreenType 3493
-#define wxSystemOptions_GetOption 3494
-#define wxSystemOptions_GetOptionInt 3495
-#define wxSystemOptions_HasOption 3496
-#define wxSystemOptions_IsFalse 3497
-#define wxSystemOptions_SetOption_2_1 3498
-#define wxSystemOptions_SetOption_2_0 3499
-#define wxAuiNotebookEvent_SetSelection 3500
-#define wxAuiNotebookEvent_GetSelection 3501
-#define wxAuiNotebookEvent_SetOldSelection 3502
-#define wxAuiNotebookEvent_GetOldSelection 3503
-#define wxAuiNotebookEvent_SetDragSource 3504
-#define wxAuiNotebookEvent_GetDragSource 3505
-#define wxAuiManagerEvent_SetManager 3506
-#define wxAuiManagerEvent_GetManager 3507
-#define wxAuiManagerEvent_SetPane 3508
-#define wxAuiManagerEvent_GetPane 3509
-#define wxAuiManagerEvent_SetButton 3510
-#define wxAuiManagerEvent_GetButton 3511
-#define wxAuiManagerEvent_SetDC 3512
-#define wxAuiManagerEvent_GetDC 3513
-#define wxAuiManagerEvent_Veto 3514
-#define wxAuiManagerEvent_GetVeto 3515
-#define wxAuiManagerEvent_SetCanVeto 3516
-#define wxAuiManagerEvent_CanVeto 3517
-#define wxLogNull_new 3518
-#define wxLogNull_destroy 3519
-#define wxTaskBarIcon_new 3520
-#define wxTaskBarIcon_destruct 3521
-#define wxTaskBarIcon_PopupMenu 3522
-#define wxTaskBarIcon_RemoveIcon 3523
-#define wxTaskBarIcon_SetIcon 3524
+#define wxPanel_SetFocusIgnoringChildren 337
+#define wxScrolledWindow_new_0 338
+#define wxScrolledWindow_new_2 339
+#define wxScrolledWindow_destruct 340
+#define wxScrolledWindow_CalcScrolledPosition_4 341
+#define wxScrolledWindow_CalcScrolledPosition_1 342
+#define wxScrolledWindow_CalcUnscrolledPosition_4 343
+#define wxScrolledWindow_CalcUnscrolledPosition_1 344
+#define wxScrolledWindow_EnableScrolling 345
+#define wxScrolledWindow_GetScrollPixelsPerUnit 346
+#define wxScrolledWindow_GetViewStart 347
+#define wxScrolledWindow_DoPrepareDC 348
+#define wxScrolledWindow_PrepareDC 349
+#define wxScrolledWindow_Scroll 350
+#define wxScrolledWindow_SetScrollbars 351
+#define wxScrolledWindow_SetScrollRate 352
+#define wxScrolledWindow_SetTargetWindow 353
+#define wxSashWindow_new_0 354
+#define wxSashWindow_new_2 355
+#define wxSashWindow_destruct 356
+#define wxSashWindow_GetSashVisible 357
+#define wxSashWindow_GetMaximumSizeX 358
+#define wxSashWindow_GetMaximumSizeY 359
+#define wxSashWindow_GetMinimumSizeX 360
+#define wxSashWindow_GetMinimumSizeY 361
+#define wxSashWindow_SetMaximumSizeX 362
+#define wxSashWindow_SetMaximumSizeY 363
+#define wxSashWindow_SetMinimumSizeX 364
+#define wxSashWindow_SetMinimumSizeY 365
+#define wxSashWindow_SetSashVisible 366
+#define wxSashLayoutWindow_new_0 367
+#define wxSashLayoutWindow_new_2 368
+#define wxSashLayoutWindow_Create 369
+#define wxSashLayoutWindow_GetAlignment 370
+#define wxSashLayoutWindow_GetOrientation 371
+#define wxSashLayoutWindow_SetAlignment 372
+#define wxSashLayoutWindow_SetDefaultSize 373
+#define wxSashLayoutWindow_SetOrientation 374
+#define wxSashLayoutWindow_destroy 375
+#define wxGrid_new_0 376
+#define wxGrid_new_3 377
+#define wxGrid_new_4 378
+#define wxGrid_destruct 379
+#define wxGrid_AppendCols 380
+#define wxGrid_AppendRows 381
+#define wxGrid_AutoSize 382
+#define wxGrid_AutoSizeColumn 383
+#define wxGrid_AutoSizeColumns 384
+#define wxGrid_AutoSizeRow 385
+#define wxGrid_AutoSizeRows 386
+#define wxGrid_BeginBatch 387
+#define wxGrid_BlockToDeviceRect 388
+#define wxGrid_CanDragColSize 389
+#define wxGrid_CanDragRowSize 390
+#define wxGrid_CanDragGridSize 391
+#define wxGrid_CanEnableCellControl 392
+#define wxGrid_CellToRect_2 393
+#define wxGrid_CellToRect_1 394
+#define wxGrid_ClearGrid 395
+#define wxGrid_ClearSelection 396
+#define wxGrid_CreateGrid 397
+#define wxGrid_DeleteCols 398
+#define wxGrid_DeleteRows 399
+#define wxGrid_DisableCellEditControl 400
+#define wxGrid_DisableDragColSize 401
+#define wxGrid_DisableDragGridSize 402
+#define wxGrid_DisableDragRowSize 403
+#define wxGrid_EnableCellEditControl 404
+#define wxGrid_EnableDragColSize 405
+#define wxGrid_EnableDragGridSize 406
+#define wxGrid_EnableDragRowSize 407
+#define wxGrid_EnableEditing 408
+#define wxGrid_EnableGridLines 409
+#define wxGrid_EndBatch 410
+#define wxGrid_Fit 411
+#define wxGrid_ForceRefresh 412
+#define wxGrid_GetBatchCount 413
+#define wxGrid_GetCellAlignment 414
+#define wxGrid_GetCellBackgroundColour 415
+#define wxGrid_GetCellEditor 416
+#define wxGrid_GetCellFont 417
+#define wxGrid_GetCellRenderer 418
+#define wxGrid_GetCellTextColour 419
+#define wxGrid_GetCellValue_2 420
+#define wxGrid_GetCellValue_1 421
+#define wxGrid_GetColLabelAlignment 422
+#define wxGrid_GetColLabelSize 423
+#define wxGrid_GetColLabelValue 424
+#define wxGrid_GetColMinimalAcceptableWidth 425
+#define wxGrid_GetDefaultCellAlignment 426
+#define wxGrid_GetDefaultCellBackgroundColour 427
+#define wxGrid_GetDefaultCellFont 428
+#define wxGrid_GetDefaultCellTextColour 429
+#define wxGrid_GetDefaultColLabelSize 430
+#define wxGrid_GetDefaultColSize 431
+#define wxGrid_GetDefaultEditor 432
+#define wxGrid_GetDefaultEditorForCell_2 433
+#define wxGrid_GetDefaultEditorForCell_1 434
+#define wxGrid_GetDefaultEditorForType 435
+#define wxGrid_GetDefaultRenderer 436
+#define wxGrid_GetDefaultRendererForCell 437
+#define wxGrid_GetDefaultRendererForType 438
+#define wxGrid_GetDefaultRowLabelSize 439
+#define wxGrid_GetDefaultRowSize 440
+#define wxGrid_GetGridCursorCol 441
+#define wxGrid_GetGridCursorRow 442
+#define wxGrid_GetGridLineColour 443
+#define wxGrid_GridLinesEnabled 444
+#define wxGrid_GetLabelBackgroundColour 445
+#define wxGrid_GetLabelFont 446
+#define wxGrid_GetLabelTextColour 447
+#define wxGrid_GetNumberCols 448
+#define wxGrid_GetNumberRows 449
+#define wxGrid_GetOrCreateCellAttr 450
+#define wxGrid_GetRowMinimalAcceptableHeight 451
+#define wxGrid_GetRowLabelAlignment 452
+#define wxGrid_GetRowLabelSize 453
+#define wxGrid_GetRowLabelValue 454
+#define wxGrid_GetRowSize 455
+#define wxGrid_GetScrollLineX 456
+#define wxGrid_GetScrollLineY 457
+#define wxGrid_GetSelectedCells 458
+#define wxGrid_GetSelectedCols 459
+#define wxGrid_GetSelectedRows 460
+#define wxGrid_GetSelectionBackground 461
+#define wxGrid_GetSelectionBlockTopLeft 462
+#define wxGrid_GetSelectionBlockBottomRight 463
+#define wxGrid_GetSelectionForeground 464
+#define wxGrid_GetViewWidth 465
+#define wxGrid_GetGridWindow 466
+#define wxGrid_GetGridRowLabelWindow 467
+#define wxGrid_GetGridColLabelWindow 468
+#define wxGrid_GetGridCornerLabelWindow 469
+#define wxGrid_HideCellEditControl 470
+#define wxGrid_InsertCols 471
+#define wxGrid_InsertRows 472
+#define wxGrid_IsCellEditControlEnabled 473
+#define wxGrid_IsCurrentCellReadOnly 474
+#define wxGrid_IsEditable 475
+#define wxGrid_IsInSelection_2 476
+#define wxGrid_IsInSelection_1 477
+#define wxGrid_IsReadOnly 478
+#define wxGrid_IsSelection 479
+#define wxGrid_IsVisible_3 480
+#define wxGrid_IsVisible_2 481
+#define wxGrid_MakeCellVisible_2 482
+#define wxGrid_MakeCellVisible_1 483
+#define wxGrid_MoveCursorDown 484
+#define wxGrid_MoveCursorLeft 485
+#define wxGrid_MoveCursorRight 486
+#define wxGrid_MoveCursorUp 487
+#define wxGrid_MoveCursorDownBlock 488
+#define wxGrid_MoveCursorLeftBlock 489
+#define wxGrid_MoveCursorRightBlock 490
+#define wxGrid_MoveCursorUpBlock 491
+#define wxGrid_MovePageDown 492
+#define wxGrid_MovePageUp 493
+#define wxGrid_RegisterDataType 494
+#define wxGrid_SaveEditControlValue 495
+#define wxGrid_SelectAll 496
+#define wxGrid_SelectBlock_5 497
+#define wxGrid_SelectBlock_3 498
+#define wxGrid_SelectCol 499
+#define wxGrid_SelectRow 500
+#define wxGrid_SetCellAlignment_4 501
+#define wxGrid_SetCellAlignment_3 502
+#define wxGrid_SetCellAlignment_1 503
+#define wxGrid_SetCellBackgroundColour_3_0 504
+#define wxGrid_SetCellBackgroundColour_1 505
+#define wxGrid_SetCellBackgroundColour_3_1 506
+#define wxGrid_SetCellEditor 507
+#define wxGrid_SetCellFont 508
+#define wxGrid_SetCellRenderer 509
+#define wxGrid_SetCellTextColour_3_0 510
+#define wxGrid_SetCellTextColour_3_1 511
+#define wxGrid_SetCellTextColour_1 512
+#define wxGrid_SetCellValue_3_0 513
+#define wxGrid_SetCellValue_2 514
+#define wxGrid_SetCellValue_3_1 515
+#define wxGrid_SetColAttr 516
+#define wxGrid_SetColFormatBool 517
+#define wxGrid_SetColFormatNumber 518
+#define wxGrid_SetColFormatFloat 519
+#define wxGrid_SetColFormatCustom 520
+#define wxGrid_SetColLabelAlignment 521
+#define wxGrid_SetColLabelSize 522
+#define wxGrid_SetColLabelValue 523
+#define wxGrid_SetColMinimalWidth 524
+#define wxGrid_SetColMinimalAcceptableWidth 525
+#define wxGrid_SetColSize 526
+#define wxGrid_SetDefaultCellAlignment 527
+#define wxGrid_SetDefaultCellBackgroundColour 528
+#define wxGrid_SetDefaultCellFont 529
+#define wxGrid_SetDefaultCellTextColour 530
+#define wxGrid_SetDefaultEditor 531
+#define wxGrid_SetDefaultRenderer 532
+#define wxGrid_SetDefaultColSize 533
+#define wxGrid_SetDefaultRowSize 534
+#define wxGrid_SetGridCursor 535
+#define wxGrid_SetGridLineColour 536
+#define wxGrid_SetLabelBackgroundColour 537
+#define wxGrid_SetLabelFont 538
+#define wxGrid_SetLabelTextColour 539
+#define wxGrid_SetMargins 540
+#define wxGrid_SetReadOnly 541
+#define wxGrid_SetRowAttr 542
+#define wxGrid_SetRowLabelAlignment 543
+#define wxGrid_SetRowLabelSize 544
+#define wxGrid_SetRowLabelValue 545
+#define wxGrid_SetRowMinimalHeight 546
+#define wxGrid_SetRowMinimalAcceptableHeight 547
+#define wxGrid_SetRowSize 548
+#define wxGrid_SetScrollLineX 549
+#define wxGrid_SetScrollLineY 550
+#define wxGrid_SetSelectionBackground 551
+#define wxGrid_SetSelectionForeground 552
+#define wxGrid_SetSelectionMode 553
+#define wxGrid_ShowCellEditControl 554
+#define wxGrid_XToCol 555
+#define wxGrid_XToEdgeOfCol 556
+#define wxGrid_YToEdgeOfRow 557
+#define wxGrid_YToRow 558
+#define wxGridCellRenderer_Draw 559
+#define wxGridCellRenderer_GetBestSize 560
+#define wxGridCellEditor_Create 561
+#define wxGridCellEditor_IsCreated 562
+#define wxGridCellEditor_SetSize 563
+#define wxGridCellEditor_Show 564
+#define wxGridCellEditor_PaintBackground 565
+#define wxGridCellEditor_BeginEdit 566
+#define wxGridCellEditor_EndEdit 567
+#define wxGridCellEditor_Reset 568
+#define wxGridCellEditor_StartingKey 569
+#define wxGridCellEditor_StartingClick 570
+#define wxGridCellEditor_HandleReturn 571
+#define wxGridCellBoolRenderer_new 572
+#define wxGridCellBoolRenderer_destroy 573
+#define wxGridCellBoolEditor_new 574
+#define wxGridCellBoolEditor_IsTrueValue 575
+#define wxGridCellBoolEditor_UseStringValues 576
+#define wxGridCellBoolEditor_destroy 577
+#define wxGridCellFloatRenderer_new 578
+#define wxGridCellFloatRenderer_GetPrecision 579
+#define wxGridCellFloatRenderer_GetWidth 580
+#define wxGridCellFloatRenderer_SetParameters 581
+#define wxGridCellFloatRenderer_SetPrecision 582
+#define wxGridCellFloatRenderer_SetWidth 583
+#define wxGridCellFloatRenderer_destroy 584
+#define wxGridCellFloatEditor_new 585
+#define wxGridCellFloatEditor_SetParameters 586
+#define wxGridCellFloatEditor_destroy 587
+#define wxGridCellStringRenderer_new 588
+#define wxGridCellStringRenderer_destroy 589
+#define wxGridCellTextEditor_new 590
+#define wxGridCellTextEditor_SetParameters 591
+#define wxGridCellTextEditor_destroy 592
+#define wxGridCellChoiceEditor_new 594
+#define wxGridCellChoiceEditor_SetParameters 595
+#define wxGridCellChoiceEditor_destroy 596
+#define wxGridCellNumberRenderer_new 597
+#define wxGridCellNumberRenderer_destroy 598
+#define wxGridCellNumberEditor_new 599
+#define wxGridCellNumberEditor_GetValue 600
+#define wxGridCellNumberEditor_SetParameters 601
+#define wxGridCellNumberEditor_destroy 602
+#define wxGridCellAttr_SetTextColour 603
+#define wxGridCellAttr_SetBackgroundColour 604
+#define wxGridCellAttr_SetFont 605
+#define wxGridCellAttr_SetAlignment 606
+#define wxGridCellAttr_SetReadOnly 607
+#define wxGridCellAttr_SetRenderer 608
+#define wxGridCellAttr_SetEditor 609
+#define wxGridCellAttr_HasTextColour 610
+#define wxGridCellAttr_HasBackgroundColour 611
+#define wxGridCellAttr_HasFont 612
+#define wxGridCellAttr_HasAlignment 613
+#define wxGridCellAttr_HasRenderer 614
+#define wxGridCellAttr_HasEditor 615
+#define wxGridCellAttr_GetTextColour 616
+#define wxGridCellAttr_GetBackgroundColour 617
+#define wxGridCellAttr_GetFont 618
+#define wxGridCellAttr_GetAlignment 619
+#define wxGridCellAttr_GetRenderer 620
+#define wxGridCellAttr_GetEditor 621
+#define wxGridCellAttr_IsReadOnly 622
+#define wxGridCellAttr_SetDefAttr 623
+#define wxDC_Blit 624
+#define wxDC_CalcBoundingBox 625
+#define wxDC_Clear 626
+#define wxDC_ComputeScaleAndOrigin 627
+#define wxDC_CrossHair 628
+#define wxDC_DestroyClippingRegion 629
+#define wxDC_DeviceToLogicalX 630
+#define wxDC_DeviceToLogicalXRel 631
+#define wxDC_DeviceToLogicalY 632
+#define wxDC_DeviceToLogicalYRel 633
+#define wxDC_DrawArc 634
+#define wxDC_DrawBitmap 635
+#define wxDC_DrawCheckMark 636
+#define wxDC_DrawCircle 637
+#define wxDC_DrawEllipse_2 639
+#define wxDC_DrawEllipse_1 640
+#define wxDC_DrawEllipticArc 641
+#define wxDC_DrawIcon 642
+#define wxDC_DrawLabel 643
+#define wxDC_DrawLine 644
+#define wxDC_DrawLines 645
+#define wxDC_DrawPolygon 647
+#define wxDC_DrawPoint 649
+#define wxDC_DrawRectangle_2 651
+#define wxDC_DrawRectangle_1 652
+#define wxDC_DrawRotatedText 653
+#define wxDC_DrawRoundedRectangle_3 655
+#define wxDC_DrawRoundedRectangle_2 656
+#define wxDC_DrawText 657
+#define wxDC_EndDoc 658
+#define wxDC_EndPage 659
+#define wxDC_FloodFill 660
+#define wxDC_GetBackground 661
+#define wxDC_GetBackgroundMode 662
+#define wxDC_GetBrush 663
+#define wxDC_GetCharHeight 664
+#define wxDC_GetCharWidth 665
+#define wxDC_GetClippingBox 666
+#define wxDC_GetFont 668
+#define wxDC_GetLayoutDirection 669
+#define wxDC_GetLogicalFunction 670
+#define wxDC_GetMapMode 671
+#define wxDC_GetMultiLineTextExtent_4 672
+#define wxDC_GetMultiLineTextExtent_1 673
+#define wxDC_GetPartialTextExtents 674
+#define wxDC_GetPen 675
+#define wxDC_GetPixel 676
+#define wxDC_GetPPI 677
+#define wxDC_GetSize 679
+#define wxDC_GetSizeMM 681
+#define wxDC_GetTextBackground 682
+#define wxDC_GetTextExtent_4 683
+#define wxDC_GetTextExtent_1 684
+#define wxDC_GetTextForeground 686
+#define wxDC_GetUserScale 687
+#define wxDC_GradientFillConcentric_3 688
+#define wxDC_GradientFillConcentric_4 689
+#define wxDC_GradientFillLinear 690
+#define wxDC_LogicalToDeviceX 691
+#define wxDC_LogicalToDeviceXRel 692
+#define wxDC_LogicalToDeviceY 693
+#define wxDC_LogicalToDeviceYRel 694
+#define wxDC_MaxX 695
+#define wxDC_MaxY 696
+#define wxDC_MinX 697
+#define wxDC_MinY 698
+#define wxDC_IsOk 699
+#define wxDC_ResetBoundingBox 700
+#define wxDC_SetAxisOrientation 701
+#define wxDC_SetBackground 702
+#define wxDC_SetBackgroundMode 703
+#define wxDC_SetBrush 704
+#define wxDC_SetClippingRegion_2 706
+#define wxDC_SetClippingRegion_1_1 707
+#define wxDC_SetClippingRegion_1_0 708
+#define wxDC_SetDeviceOrigin 709
+#define wxDC_SetFont 710
+#define wxDC_SetLayoutDirection 711
+#define wxDC_SetLogicalFunction 712
+#define wxDC_SetMapMode 713
+#define wxDC_SetPalette 714
+#define wxDC_SetPen 715
+#define wxDC_SetTextBackground 716
+#define wxDC_SetTextForeground 717
+#define wxDC_SetUserScale 718
+#define wxDC_StartDoc 719
+#define wxDC_StartPage 720
+#define wxMirrorDC_new 721
+#define wxMirrorDC_destroy 722
+#define wxScreenDC_new 723
+#define wxScreenDC_destruct 724
+#define wxPostScriptDC_new_0 725
+#define wxPostScriptDC_new_1 726
+#define wxPostScriptDC_destruct 727
+#define wxPostScriptDC_SetResolution 728
+#define wxPostScriptDC_GetResolution 729
+#define wxWindowDC_new_0 730
+#define wxWindowDC_new_1 731
+#define wxWindowDC_destruct 732
+#define wxClientDC_new_0 733
+#define wxClientDC_new_1 734
+#define wxClientDC_destroy 735
+#define wxPaintDC_new_0 736
+#define wxPaintDC_new_1 737
+#define wxPaintDC_destroy 738
+#define wxMemoryDC_new_1_0 740
+#define wxMemoryDC_new_1_1 741
+#define wxMemoryDC_new_0 742
+#define wxMemoryDC_destruct 744
+#define wxMemoryDC_SelectObject 745
+#define wxMemoryDC_SelectObjectAsSource 746
+#define wxBufferedDC_new_0 747
+#define wxBufferedDC_new_2 748
+#define wxBufferedDC_new_3 749
+#define wxBufferedDC_destruct 750
+#define wxBufferedDC_Init_2 751
+#define wxBufferedDC_Init_3 752
+#define wxBufferedPaintDC_new_3 753
+#define wxBufferedPaintDC_new_2 754
+#define wxBufferedPaintDC_destruct 755
+#define wxGraphicsObject_destruct 756
+#define wxGraphicsObject_GetRenderer 757
+#define wxGraphicsObject_IsNull 758
+#define wxGraphicsContext_destruct 759
+#define wxGraphicsContext_Create_1_1 760
+#define wxGraphicsContext_Create_1_0 761
+#define wxGraphicsContext_Create_0 762
+#define wxGraphicsContext_CreatePen 763
+#define wxGraphicsContext_CreateBrush 764
+#define wxGraphicsContext_CreateRadialGradientBrush 765
+#define wxGraphicsContext_CreateLinearGradientBrush 766
+#define wxGraphicsContext_CreateFont 767
+#define wxGraphicsContext_CreateMatrix 768
+#define wxGraphicsContext_CreatePath 769
+#define wxGraphicsContext_Clip_1 770
+#define wxGraphicsContext_Clip_4 771
+#define wxGraphicsContext_ResetClip 772
+#define wxGraphicsContext_DrawBitmap 773
+#define wxGraphicsContext_DrawEllipse 774
+#define wxGraphicsContext_DrawIcon 775
+#define wxGraphicsContext_DrawLines 776
+#define wxGraphicsContext_DrawPath 777
+#define wxGraphicsContext_DrawRectangle 778
+#define wxGraphicsContext_DrawRoundedRectangle 779
+#define wxGraphicsContext_DrawText_3 780
+#define wxGraphicsContext_DrawText_4_0 781
+#define wxGraphicsContext_DrawText_4_1 782
+#define wxGraphicsContext_DrawText_5 783
+#define wxGraphicsContext_FillPath 784
+#define wxGraphicsContext_StrokePath 785
+#define wxGraphicsContext_GetPartialTextExtents 786
+#define wxGraphicsContext_GetTextExtent 787
+#define wxGraphicsContext_Rotate 788
+#define wxGraphicsContext_Scale 789
+#define wxGraphicsContext_Translate 790
+#define wxGraphicsContext_GetTransform 791
+#define wxGraphicsContext_SetTransform 792
+#define wxGraphicsContext_ConcatTransform 793
+#define wxGraphicsContext_SetBrush_1_1 794
+#define wxGraphicsContext_SetBrush_1_0 795
+#define wxGraphicsContext_SetFont_1 796
+#define wxGraphicsContext_SetFont_2 797
+#define wxGraphicsContext_SetPen_1_0 798
+#define wxGraphicsContext_SetPen_1_1 799
+#define wxGraphicsContext_StrokeLine 800
+#define wxGraphicsContext_StrokeLines 801
+#define wxGraphicsMatrix_Concat 803
+#define wxGraphicsMatrix_Get 805
+#define wxGraphicsMatrix_Invert 806
+#define wxGraphicsMatrix_IsEqual 807
+#define wxGraphicsMatrix_IsIdentity 809
+#define wxGraphicsMatrix_Rotate 810
+#define wxGraphicsMatrix_Scale 811
+#define wxGraphicsMatrix_Translate 812
+#define wxGraphicsMatrix_Set 813
+#define wxGraphicsMatrix_TransformPoint 814
+#define wxGraphicsMatrix_TransformDistance 815
+#define wxGraphicsPath_MoveToPoint_2 816
+#define wxGraphicsPath_MoveToPoint_1 817
+#define wxGraphicsPath_AddArc_6 818
+#define wxGraphicsPath_AddArc_5 819
+#define wxGraphicsPath_AddArcToPoint 820
+#define wxGraphicsPath_AddCircle 821
+#define wxGraphicsPath_AddCurveToPoint_6 822
+#define wxGraphicsPath_AddCurveToPoint_3 823
+#define wxGraphicsPath_AddEllipse 824
+#define wxGraphicsPath_AddLineToPoint_2 825
+#define wxGraphicsPath_AddLineToPoint_1 826
+#define wxGraphicsPath_AddPath 827
+#define wxGraphicsPath_AddQuadCurveToPoint 828
+#define wxGraphicsPath_AddRectangle 829
+#define wxGraphicsPath_AddRoundedRectangle 830
+#define wxGraphicsPath_CloseSubpath 831
+#define wxGraphicsPath_Contains_3 832
+#define wxGraphicsPath_Contains_2 833
+#define wxGraphicsPath_GetBox 835
+#define wxGraphicsPath_GetCurrentPoint 837
+#define wxGraphicsPath_Transform 838
+#define wxGraphicsRenderer_GetDefaultRenderer 839
+#define wxGraphicsRenderer_CreateContext_1_1 840
+#define wxGraphicsRenderer_CreateContext_1_0 841
+#define wxGraphicsRenderer_CreatePen 842
+#define wxGraphicsRenderer_CreateBrush 843
+#define wxGraphicsRenderer_CreateLinearGradientBrush 844
+#define wxGraphicsRenderer_CreateRadialGradientBrush 845
+#define wxGraphicsRenderer_CreateFont 846
+#define wxGraphicsRenderer_CreateMatrix 847
+#define wxGraphicsRenderer_CreatePath 848
+#define wxMenuBar_new_1 850
+#define wxMenuBar_new_0 852
+#define wxMenuBar_destruct 854
+#define wxMenuBar_Append 855
+#define wxMenuBar_Check 856
+#define wxMenuBar_Enable_2 857
+#define wxMenuBar_Enable_1 858
+#define wxMenuBar_EnableTop 859
+#define wxMenuBar_FindMenu 860
+#define wxMenuBar_FindMenuItem 861
+#define wxMenuBar_FindItem 862
+#define wxMenuBar_GetHelpString 863
+#define wxMenuBar_GetLabel_1 864
+#define wxMenuBar_GetLabel_0 865
+#define wxMenuBar_GetLabelTop 866
+#define wxMenuBar_GetMenu 867
+#define wxMenuBar_GetMenuCount 868
+#define wxMenuBar_Insert 869
+#define wxMenuBar_IsChecked 870
+#define wxMenuBar_IsEnabled_1 871
+#define wxMenuBar_IsEnabled_0 872
+#define wxMenuBar_Remove 873
+#define wxMenuBar_Replace 874
+#define wxMenuBar_SetHelpString 875
+#define wxMenuBar_SetLabel_2 876
+#define wxMenuBar_SetLabel_1 877
+#define wxMenuBar_SetLabelTop 878
+#define wxControl_GetLabel 879
+#define wxControl_SetLabel 880
+#define wxControlWithItems_Append_1 881
+#define wxControlWithItems_Append_2 882
+#define wxControlWithItems_appendStrings_1 883
+#define wxControlWithItems_Clear 884
+#define wxControlWithItems_Delete 885
+#define wxControlWithItems_FindString 886
+#define wxControlWithItems_getClientData 887
+#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 wxListItemAttr_new_0 1759
+#define wxListItemAttr_new_3 1760
+#define wxListItemAttr_GetBackgroundColour 1761
+#define wxListItemAttr_GetFont 1762
+#define wxListItemAttr_GetTextColour 1763
+#define wxListItemAttr_HasBackgroundColour 1764
+#define wxListItemAttr_HasFont 1765
+#define wxListItemAttr_HasTextColour 1766
+#define wxListItemAttr_SetBackgroundColour 1767
+#define wxListItemAttr_SetFont 1768
+#define wxListItemAttr_SetTextColour 1769
+#define wxListItemAttr_destroy 1770
+#define wxImageList_new_0 1771
+#define wxImageList_new_3 1772
+#define wxImageList_Add_1 1773
+#define wxImageList_Add_2_0 1774
+#define wxImageList_Add_2_1 1775
+#define wxImageList_Create 1776
+#define wxImageList_Draw 1778
+#define wxImageList_GetBitmap 1779
+#define wxImageList_GetIcon 1780
+#define wxImageList_GetImageCount 1781
+#define wxImageList_GetSize 1782
+#define wxImageList_Remove 1783
+#define wxImageList_RemoveAll 1784
+#define wxImageList_Replace_2 1785
+#define wxImageList_Replace_3 1786
+#define wxImageList_destroy 1787
+#define wxTextAttr_new_0 1788
+#define wxTextAttr_new_2 1789
+#define wxTextAttr_GetAlignment 1790
+#define wxTextAttr_GetBackgroundColour 1791
+#define wxTextAttr_GetFont 1792
+#define wxTextAttr_GetLeftIndent 1793
+#define wxTextAttr_GetLeftSubIndent 1794
+#define wxTextAttr_GetRightIndent 1795
+#define wxTextAttr_GetTabs 1796
+#define wxTextAttr_GetTextColour 1797
+#define wxTextAttr_HasBackgroundColour 1798
+#define wxTextAttr_HasFont 1799
+#define wxTextAttr_HasTextColour 1800
+#define wxTextAttr_GetFlags 1801
+#define wxTextAttr_IsDefault 1802
+#define wxTextAttr_SetAlignment 1803
+#define wxTextAttr_SetBackgroundColour 1804
+#define wxTextAttr_SetFlags 1805
+#define wxTextAttr_SetFont 1806
+#define wxTextAttr_SetLeftIndent 1807
+#define wxTextAttr_SetRightIndent 1808
+#define wxTextAttr_SetTabs 1809
+#define wxTextAttr_SetTextColour 1810
+#define wxTextAttr_destroy 1811
+#define wxTextCtrl_new_3 1813
+#define wxTextCtrl_new_0 1814
+#define wxTextCtrl_destruct 1816
+#define wxTextCtrl_AppendText 1817
+#define wxTextCtrl_CanCopy 1818
+#define wxTextCtrl_CanCut 1819
+#define wxTextCtrl_CanPaste 1820
+#define wxTextCtrl_CanRedo 1821
+#define wxTextCtrl_CanUndo 1822
+#define wxTextCtrl_Clear 1823
+#define wxTextCtrl_Copy 1824
+#define wxTextCtrl_Create 1825
+#define wxTextCtrl_Cut 1826
+#define wxTextCtrl_DiscardEdits 1827
+#define wxTextCtrl_EmulateKeyPress 1828
+#define wxTextCtrl_GetDefaultStyle 1829
+#define wxTextCtrl_GetInsertionPoint 1830
+#define wxTextCtrl_GetLastPosition 1831
+#define wxTextCtrl_GetLineLength 1832
+#define wxTextCtrl_GetLineText 1833
+#define wxTextCtrl_GetNumberOfLines 1834
+#define wxTextCtrl_GetRange 1835
+#define wxTextCtrl_GetSelection 1836
+#define wxTextCtrl_GetStringSelection 1837
+#define wxTextCtrl_GetStyle 1838
+#define wxTextCtrl_GetValue 1839
+#define wxTextCtrl_IsEditable 1840
+#define wxTextCtrl_IsModified 1841
+#define wxTextCtrl_IsMultiLine 1842
+#define wxTextCtrl_IsSingleLine 1843
+#define wxTextCtrl_LoadFile 1844
+#define wxTextCtrl_MarkDirty 1845
+#define wxTextCtrl_Paste 1846
+#define wxTextCtrl_PositionToXY 1847
+#define wxTextCtrl_Redo 1848
+#define wxTextCtrl_Remove 1849
+#define wxTextCtrl_Replace 1850
+#define wxTextCtrl_SaveFile 1851
+#define wxTextCtrl_SetDefaultStyle 1852
+#define wxTextCtrl_SetEditable 1853
+#define wxTextCtrl_SetInsertionPoint 1854
+#define wxTextCtrl_SetInsertionPointEnd 1855
+#define wxTextCtrl_SetMaxLength 1857
+#define wxTextCtrl_SetSelection 1858
+#define wxTextCtrl_SetStyle 1859
+#define wxTextCtrl_SetValue 1860
+#define wxTextCtrl_ShowPosition 1861
+#define wxTextCtrl_Undo 1862
+#define wxTextCtrl_WriteText 1863
+#define wxTextCtrl_XYToPosition 1864
+#define wxNotebook_new_0 1867
+#define wxNotebook_new_3 1868
+#define wxNotebook_destruct 1869
+#define wxNotebook_AddPage 1870
+#define wxNotebook_AdvanceSelection 1871
+#define wxNotebook_AssignImageList 1872
+#define wxNotebook_Create 1873
+#define wxNotebook_DeleteAllPages 1874
+#define wxNotebook_DeletePage 1875
+#define wxNotebook_RemovePage 1876
+#define wxNotebook_GetCurrentPage 1877
+#define wxNotebook_GetImageList 1878
+#define wxNotebook_GetPage 1880
+#define wxNotebook_GetPageCount 1881
+#define wxNotebook_GetPageImage 1882
+#define wxNotebook_GetPageText 1883
+#define wxNotebook_GetRowCount 1884
+#define wxNotebook_GetSelection 1885
+#define wxNotebook_GetThemeBackgroundColour 1886
+#define wxNotebook_HitTest 1888
+#define wxNotebook_InsertPage 1890
+#define wxNotebook_SetImageList 1891
+#define wxNotebook_SetPadding 1892
+#define wxNotebook_SetPageSize 1893
+#define wxNotebook_SetPageImage 1894
+#define wxNotebook_SetPageText 1895
+#define wxNotebook_SetSelection 1896
+#define wxNotebook_ChangeSelection 1897
+#define wxChoicebook_new_0 1898
+#define wxChoicebook_new_3 1899
+#define wxChoicebook_AddPage 1900
+#define wxChoicebook_AdvanceSelection 1901
+#define wxChoicebook_AssignImageList 1902
+#define wxChoicebook_Create 1903
+#define wxChoicebook_DeleteAllPages 1904
+#define wxChoicebook_DeletePage 1905
+#define wxChoicebook_RemovePage 1906
+#define wxChoicebook_GetCurrentPage 1907
+#define wxChoicebook_GetImageList 1908
+#define wxChoicebook_GetPage 1910
+#define wxChoicebook_GetPageCount 1911
+#define wxChoicebook_GetPageImage 1912
+#define wxChoicebook_GetPageText 1913
+#define wxChoicebook_GetSelection 1914
+#define wxChoicebook_HitTest 1915
+#define wxChoicebook_InsertPage 1916
+#define wxChoicebook_SetImageList 1917
+#define wxChoicebook_SetPageSize 1918
+#define wxChoicebook_SetPageImage 1919
+#define wxChoicebook_SetPageText 1920
+#define wxChoicebook_SetSelection 1921
+#define wxChoicebook_ChangeSelection 1922
+#define wxChoicebook_destroy 1923
+#define wxToolbook_new_0 1924
+#define wxToolbook_new_3 1925
+#define wxToolbook_AddPage 1926
+#define wxToolbook_AdvanceSelection 1927
+#define wxToolbook_AssignImageList 1928
+#define wxToolbook_Create 1929
+#define wxToolbook_DeleteAllPages 1930
+#define wxToolbook_DeletePage 1931
+#define wxToolbook_RemovePage 1932
+#define wxToolbook_GetCurrentPage 1933
+#define wxToolbook_GetImageList 1934
+#define wxToolbook_GetPage 1936
+#define wxToolbook_GetPageCount 1937
+#define wxToolbook_GetPageImage 1938
+#define wxToolbook_GetPageText 1939
+#define wxToolbook_GetSelection 1940
+#define wxToolbook_HitTest 1942
+#define wxToolbook_InsertPage 1943
+#define wxToolbook_SetImageList 1944
+#define wxToolbook_SetPageSize 1945
+#define wxToolbook_SetPageImage 1946
+#define wxToolbook_SetPageText 1947
+#define wxToolbook_SetSelection 1948
+#define wxToolbook_ChangeSelection 1949
+#define wxToolbook_destroy 1950
+#define wxListbook_new_0 1951
+#define wxListbook_new_3 1952
+#define wxListbook_AddPage 1953
+#define wxListbook_AdvanceSelection 1954
+#define wxListbook_AssignImageList 1955
+#define wxListbook_Create 1956
+#define wxListbook_DeleteAllPages 1957
+#define wxListbook_DeletePage 1958
+#define wxListbook_RemovePage 1959
+#define wxListbook_GetCurrentPage 1960
+#define wxListbook_GetImageList 1961
+#define wxListbook_GetPage 1963
+#define wxListbook_GetPageCount 1964
+#define wxListbook_GetPageImage 1965
+#define wxListbook_GetPageText 1966
+#define wxListbook_GetSelection 1967
+#define wxListbook_HitTest 1969
+#define wxListbook_InsertPage 1970
+#define wxListbook_SetImageList 1971
+#define wxListbook_SetPageSize 1972
+#define wxListbook_SetPageImage 1973
+#define wxListbook_SetPageText 1974
+#define wxListbook_SetSelection 1975
+#define wxListbook_ChangeSelection 1976
+#define wxListbook_destroy 1977
+#define wxTreebook_new_0 1978
+#define wxTreebook_new_3 1979
+#define wxTreebook_AddPage 1980
+#define wxTreebook_AdvanceSelection 1981
+#define wxTreebook_AssignImageList 1982
+#define wxTreebook_Create 1983
+#define wxTreebook_DeleteAllPages 1984
+#define wxTreebook_DeletePage 1985
+#define wxTreebook_RemovePage 1986
+#define wxTreebook_GetCurrentPage 1987
+#define wxTreebook_GetImageList 1988
+#define wxTreebook_GetPage 1990
+#define wxTreebook_GetPageCount 1991
+#define wxTreebook_GetPageImage 1992
+#define wxTreebook_GetPageText 1993
+#define wxTreebook_GetSelection 1994
+#define wxTreebook_ExpandNode 1995
+#define wxTreebook_IsNodeExpanded 1996
+#define wxTreebook_HitTest 1998
+#define wxTreebook_InsertPage 1999
+#define wxTreebook_InsertSubPage 2000
+#define wxTreebook_SetImageList 2001
+#define wxTreebook_SetPageSize 2002
+#define wxTreebook_SetPageImage 2003
+#define wxTreebook_SetPageText 2004
+#define wxTreebook_SetSelection 2005
+#define wxTreebook_ChangeSelection 2006
+#define wxTreebook_destroy 2007
+#define wxTreeCtrl_new_2 2010
+#define wxTreeCtrl_new_0 2011
+#define wxTreeCtrl_destruct 2013
+#define wxTreeCtrl_AddRoot 2014
+#define wxTreeCtrl_AppendItem 2015
+#define wxTreeCtrl_AssignImageList 2016
+#define wxTreeCtrl_AssignStateImageList 2017
+#define wxTreeCtrl_Collapse 2018
+#define wxTreeCtrl_CollapseAndReset 2019
+#define wxTreeCtrl_Create 2020
+#define wxTreeCtrl_Delete 2021
+#define wxTreeCtrl_DeleteAllItems 2022
+#define wxTreeCtrl_DeleteChildren 2023
+#define wxTreeCtrl_EditLabel 2024
+#define wxTreeCtrl_EnsureVisible 2025
+#define wxTreeCtrl_Expand 2026
+#define wxTreeCtrl_GetBoundingRect 2027
+#define wxTreeCtrl_GetChildrenCount 2029
+#define wxTreeCtrl_GetCount 2030
+#define wxTreeCtrl_GetEditControl 2031
+#define wxTreeCtrl_GetFirstChild 2032
+#define wxTreeCtrl_GetNextChild 2033
+#define wxTreeCtrl_GetFirstVisibleItem 2034
+#define wxTreeCtrl_GetImageList 2035
+#define wxTreeCtrl_GetIndent 2036
+#define wxTreeCtrl_GetItemBackgroundColour 2037
+#define wxTreeCtrl_GetItemData 2038
+#define wxTreeCtrl_GetItemFont 2039
+#define wxTreeCtrl_GetItemImage_1 2040
+#define wxTreeCtrl_GetItemImage_2 2041
+#define wxTreeCtrl_GetItemText 2042
+#define wxTreeCtrl_GetItemTextColour 2043
+#define wxTreeCtrl_GetLastChild 2044
+#define wxTreeCtrl_GetNextSibling 2045
+#define wxTreeCtrl_GetNextVisible 2046
+#define wxTreeCtrl_GetItemParent 2047
+#define wxTreeCtrl_GetPrevSibling 2048
+#define wxTreeCtrl_GetPrevVisible 2049
+#define wxTreeCtrl_GetRootItem 2050
+#define wxTreeCtrl_GetSelection 2051
+#define wxTreeCtrl_GetSelections 2052
+#define wxTreeCtrl_GetStateImageList 2053
+#define wxTreeCtrl_HitTest 2054
+#define wxTreeCtrl_InsertItem 2056
+#define wxTreeCtrl_IsBold 2057
+#define wxTreeCtrl_IsExpanded 2058
+#define wxTreeCtrl_IsSelected 2059
+#define wxTreeCtrl_IsVisible 2060
+#define wxTreeCtrl_ItemHasChildren 2061
+#define wxTreeCtrl_IsTreeItemIdOk 2062
+#define wxTreeCtrl_PrependItem 2063
+#define wxTreeCtrl_ScrollTo 2064
+#define wxTreeCtrl_SelectItem_1 2065
+#define wxTreeCtrl_SelectItem_2 2066
+#define wxTreeCtrl_SetIndent 2067
+#define wxTreeCtrl_SetImageList 2068
+#define wxTreeCtrl_SetItemBackgroundColour 2069
+#define wxTreeCtrl_SetItemBold 2070
+#define wxTreeCtrl_SetItemData 2071
+#define wxTreeCtrl_SetItemDropHighlight 2072
+#define wxTreeCtrl_SetItemFont 2073
+#define wxTreeCtrl_SetItemHasChildren 2074
+#define wxTreeCtrl_SetItemImage_2 2075
+#define wxTreeCtrl_SetItemImage_3 2076
+#define wxTreeCtrl_SetItemText 2077
+#define wxTreeCtrl_SetItemTextColour 2078
+#define wxTreeCtrl_SetStateImageList 2079
+#define wxTreeCtrl_SetWindowStyle 2080
+#define wxTreeCtrl_SortChildren 2081
+#define wxTreeCtrl_Toggle 2082
+#define wxTreeCtrl_ToggleItemSelection 2083
+#define wxTreeCtrl_Unselect 2084
+#define wxTreeCtrl_UnselectAll 2085
+#define wxTreeCtrl_UnselectItem 2086
+#define wxScrollBar_new_0 2087
+#define wxScrollBar_new_3 2088
+#define wxScrollBar_destruct 2089
+#define wxScrollBar_Create 2090
+#define wxScrollBar_GetRange 2091
+#define wxScrollBar_GetPageSize 2092
+#define wxScrollBar_GetThumbPosition 2093
+#define wxScrollBar_GetThumbSize 2094
+#define wxScrollBar_SetThumbPosition 2095
+#define wxScrollBar_SetScrollbar 2096
+#define wxSpinButton_new_2 2098
+#define wxSpinButton_new_0 2099
+#define wxSpinButton_Create 2100
+#define wxSpinButton_GetMax 2101
+#define wxSpinButton_GetMin 2102
+#define wxSpinButton_GetValue 2103
+#define wxSpinButton_SetRange 2104
+#define wxSpinButton_SetValue 2105
+#define wxSpinButton_destroy 2106
+#define wxSpinCtrl_new_0 2107
+#define wxSpinCtrl_new_2 2108
+#define wxSpinCtrl_Create 2110
+#define wxSpinCtrl_SetValue_1_1 2113
+#define wxSpinCtrl_SetValue_1_0 2114
+#define wxSpinCtrl_GetValue 2116
+#define wxSpinCtrl_SetRange 2118
+#define wxSpinCtrl_SetSelection 2119
+#define wxSpinCtrl_GetMin 2121
+#define wxSpinCtrl_GetMax 2123
+#define wxSpinCtrl_destroy 2124
+#define wxStaticText_new_0 2125
+#define wxStaticText_new_4 2126
+#define wxStaticText_Create 2127
+#define wxStaticText_GetLabel 2128
+#define wxStaticText_SetLabel 2129
+#define wxStaticText_Wrap 2130
+#define wxStaticText_destroy 2131
+#define wxStaticBitmap_new_0 2132
+#define wxStaticBitmap_new_4 2133
+#define wxStaticBitmap_Create 2134
+#define wxStaticBitmap_GetBitmap 2135
+#define wxStaticBitmap_SetBitmap 2136
+#define wxStaticBitmap_destroy 2137
+#define wxRadioBox_new 2138
+#define wxRadioBox_destruct 2140
+#define wxRadioBox_Create 2141
+#define wxRadioBox_Enable_2 2142
+#define wxRadioBox_Enable_1 2143
+#define wxRadioBox_GetSelection 2144
+#define wxRadioBox_GetString 2145
+#define wxRadioBox_SetSelection 2146
+#define wxRadioBox_Show_2 2147
+#define wxRadioBox_Show_1 2148
+#define wxRadioBox_GetColumnCount 2149
+#define wxRadioBox_GetItemHelpText 2150
+#define wxRadioBox_GetItemToolTip 2151
+#define wxRadioBox_GetItemFromPoint 2153
+#define wxRadioBox_GetRowCount 2154
+#define wxRadioBox_IsItemEnabled 2155
+#define wxRadioBox_IsItemShown 2156
+#define wxRadioBox_SetItemHelpText 2157
+#define wxRadioBox_SetItemToolTip 2158
+#define wxRadioButton_new_0 2159
+#define wxRadioButton_new_4 2160
+#define wxRadioButton_Create 2161
+#define wxRadioButton_GetValue 2162
+#define wxRadioButton_SetValue 2163
+#define wxRadioButton_destroy 2164
+#define wxSlider_new_6 2166
+#define wxSlider_new_0 2167
+#define wxSlider_Create 2168
+#define wxSlider_GetLineSize 2169
+#define wxSlider_GetMax 2170
+#define wxSlider_GetMin 2171
+#define wxSlider_GetPageSize 2172
+#define wxSlider_GetThumbLength 2173
+#define wxSlider_GetValue 2174
+#define wxSlider_SetLineSize 2175
+#define wxSlider_SetPageSize 2176
+#define wxSlider_SetRange 2177
+#define wxSlider_SetThumbLength 2178
+#define wxSlider_SetValue 2179
+#define wxSlider_destroy 2180
+#define wxDialog_new_4 2182
+#define wxDialog_new_0 2183
+#define wxDialog_destruct 2185
+#define wxDialog_Create 2186
+#define wxDialog_CreateButtonSizer 2187
+#define wxDialog_CreateStdDialogButtonSizer 2188
+#define wxDialog_EndModal 2189
+#define wxDialog_GetAffirmativeId 2190
+#define wxDialog_GetReturnCode 2191
+#define wxDialog_IsModal 2192
+#define wxDialog_SetAffirmativeId 2193
+#define wxDialog_SetReturnCode 2194
+#define wxDialog_Show 2195
+#define wxDialog_ShowModal 2196
+#define wxColourDialog_new_0 2197
+#define wxColourDialog_new_2 2198
+#define wxColourDialog_destruct 2199
+#define wxColourDialog_Create 2200
+#define wxColourDialog_GetColourData 2201
+#define wxColourData_new_0 2202
+#define wxColourData_new_1 2203
+#define wxColourData_destruct 2204
+#define wxColourData_GetChooseFull 2205
+#define wxColourData_GetColour 2206
+#define wxColourData_GetCustomColour 2208
+#define wxColourData_SetChooseFull 2209
+#define wxColourData_SetColour 2210
+#define wxColourData_SetCustomColour 2211
+#define wxPalette_new_0 2212
+#define wxPalette_new_4 2213
+#define wxPalette_destruct 2215
+#define wxPalette_Create 2216
+#define wxPalette_GetColoursCount 2217
+#define wxPalette_GetPixel 2218
+#define wxPalette_GetRGB 2219
+#define wxPalette_IsOk 2220
+#define wxDirDialog_new 2224
+#define wxDirDialog_destruct 2225
+#define wxDirDialog_GetPath 2226
+#define wxDirDialog_GetMessage 2227
+#define wxDirDialog_SetMessage 2228
+#define wxDirDialog_SetPath 2229
+#define wxFileDialog_new 2233
+#define wxFileDialog_destruct 2234
+#define wxFileDialog_GetDirectory 2235
+#define wxFileDialog_GetFilename 2236
+#define wxFileDialog_GetFilenames 2237
+#define wxFileDialog_GetFilterIndex 2238
+#define wxFileDialog_GetMessage 2239
+#define wxFileDialog_GetPath 2240
+#define wxFileDialog_GetPaths 2241
+#define wxFileDialog_GetWildcard 2242
+#define wxFileDialog_SetDirectory 2243
+#define wxFileDialog_SetFilename 2244
+#define wxFileDialog_SetFilterIndex 2245
+#define wxFileDialog_SetMessage 2246
+#define wxFileDialog_SetPath 2247
+#define wxFileDialog_SetWildcard 2248
+#define wxPickerBase_SetInternalMargin 2249
+#define wxPickerBase_GetInternalMargin 2250
+#define wxPickerBase_SetTextCtrlProportion 2251
+#define wxPickerBase_SetPickerCtrlProportion 2252
+#define wxPickerBase_GetTextCtrlProportion 2253
+#define wxPickerBase_GetPickerCtrlProportion 2254
+#define wxPickerBase_HasTextCtrl 2255
+#define wxPickerBase_GetTextCtrl 2256
+#define wxPickerBase_IsTextCtrlGrowable 2257
+#define wxPickerBase_SetPickerCtrlGrowable 2258
+#define wxPickerBase_SetTextCtrlGrowable 2259
+#define wxPickerBase_IsPickerCtrlGrowable 2260
+#define wxFilePickerCtrl_new_0 2261
+#define wxFilePickerCtrl_new_3 2262
+#define wxFilePickerCtrl_Create 2263
+#define wxFilePickerCtrl_GetPath 2264
+#define wxFilePickerCtrl_SetPath 2265
+#define wxFilePickerCtrl_destroy 2266
+#define wxDirPickerCtrl_new_0 2267
+#define wxDirPickerCtrl_new_3 2268
+#define wxDirPickerCtrl_Create 2269
+#define wxDirPickerCtrl_GetPath 2270
+#define wxDirPickerCtrl_SetPath 2271
+#define wxDirPickerCtrl_destroy 2272
+#define wxColourPickerCtrl_new_0 2273
+#define wxColourPickerCtrl_new_3 2274
+#define wxColourPickerCtrl_Create 2275
+#define wxColourPickerCtrl_GetColour 2276
+#define wxColourPickerCtrl_SetColour_1_1 2277
+#define wxColourPickerCtrl_SetColour_1_0 2278
+#define wxColourPickerCtrl_destroy 2279
+#define wxDatePickerCtrl_new_0 2280
+#define wxDatePickerCtrl_new_3 2281
+#define wxDatePickerCtrl_GetRange 2282
+#define wxDatePickerCtrl_GetValue 2283
+#define wxDatePickerCtrl_SetRange 2284
+#define wxDatePickerCtrl_SetValue 2285
+#define wxDatePickerCtrl_destroy 2286
+#define wxFontPickerCtrl_new_0 2287
+#define wxFontPickerCtrl_new_3 2288
+#define wxFontPickerCtrl_Create 2289
+#define wxFontPickerCtrl_GetSelectedFont 2290
+#define wxFontPickerCtrl_SetSelectedFont 2291
+#define wxFontPickerCtrl_GetMaxPointSize 2292
+#define wxFontPickerCtrl_SetMaxPointSize 2293
+#define wxFontPickerCtrl_destroy 2294
+#define wxFindReplaceDialog_new_0 2297
+#define wxFindReplaceDialog_new_4 2298
+#define wxFindReplaceDialog_destruct 2299
+#define wxFindReplaceDialog_Create 2300
+#define wxFindReplaceDialog_GetData 2301
+#define wxFindReplaceData_new_0 2302
+#define wxFindReplaceData_new_1 2303
+#define wxFindReplaceData_GetFindString 2304
+#define wxFindReplaceData_GetReplaceString 2305
+#define wxFindReplaceData_GetFlags 2306
+#define wxFindReplaceData_SetFlags 2307
+#define wxFindReplaceData_SetFindString 2308
+#define wxFindReplaceData_SetReplaceString 2309
+#define wxFindReplaceData_destroy 2310
+#define wxMultiChoiceDialog_new_0 2311
+#define wxMultiChoiceDialog_new_5 2313
+#define wxMultiChoiceDialog_GetSelections 2314
+#define wxMultiChoiceDialog_SetSelections 2315
+#define wxMultiChoiceDialog_destroy 2316
+#define wxSingleChoiceDialog_new_0 2317
+#define wxSingleChoiceDialog_new_5 2319
+#define wxSingleChoiceDialog_GetSelection 2320
+#define wxSingleChoiceDialog_GetStringSelection 2321
+#define wxSingleChoiceDialog_SetSelection 2322
+#define wxSingleChoiceDialog_destroy 2323
+#define wxTextEntryDialog_new 2324
+#define wxTextEntryDialog_GetValue 2325
+#define wxTextEntryDialog_SetValue 2326
+#define wxTextEntryDialog_destroy 2327
+#define wxPasswordEntryDialog_new 2328
+#define wxPasswordEntryDialog_destroy 2329
+#define wxFontData_new_0 2330
+#define wxFontData_new_1 2331
+#define wxFontData_destruct 2332
+#define wxFontData_EnableEffects 2333
+#define wxFontData_GetAllowSymbols 2334
+#define wxFontData_GetColour 2335
+#define wxFontData_GetChosenFont 2336
+#define wxFontData_GetEnableEffects 2337
+#define wxFontData_GetInitialFont 2338
+#define wxFontData_GetShowHelp 2339
+#define wxFontData_SetAllowSymbols 2340
+#define wxFontData_SetChosenFont 2341
+#define wxFontData_SetColour 2342
+#define wxFontData_SetInitialFont 2343
+#define wxFontData_SetRange 2344
+#define wxFontData_SetShowHelp 2345
+#define wxFontDialog_new_0 2349
+#define wxFontDialog_new_2 2351
+#define wxFontDialog_Create 2353
+#define wxFontDialog_GetFontData 2354
+#define wxFontDialog_destroy 2356
+#define wxProgressDialog_new 2357
+#define wxProgressDialog_destruct 2358
+#define wxProgressDialog_Resume 2359
+#define wxProgressDialog_Update_2 2360
+#define wxProgressDialog_Update_0 2361
+#define wxMessageDialog_new 2362
+#define wxMessageDialog_destruct 2363
+#define wxPageSetupDialog_new 2364
+#define wxPageSetupDialog_destruct 2365
+#define wxPageSetupDialog_GetPageSetupData 2366
+#define wxPageSetupDialog_ShowModal 2367
+#define wxPageSetupDialogData_new_0 2368
+#define wxPageSetupDialogData_new_1_0 2369
+#define wxPageSetupDialogData_new_1_1 2370
+#define wxPageSetupDialogData_destruct 2371
+#define wxPageSetupDialogData_EnableHelp 2372
+#define wxPageSetupDialogData_EnableMargins 2373
+#define wxPageSetupDialogData_EnableOrientation 2374
+#define wxPageSetupDialogData_EnablePaper 2375
+#define wxPageSetupDialogData_EnablePrinter 2376
+#define wxPageSetupDialogData_GetDefaultMinMargins 2377
+#define wxPageSetupDialogData_GetEnableMargins 2378
+#define wxPageSetupDialogData_GetEnableOrientation 2379
+#define wxPageSetupDialogData_GetEnablePaper 2380
+#define wxPageSetupDialogData_GetEnablePrinter 2381
+#define wxPageSetupDialogData_GetEnableHelp 2382
+#define wxPageSetupDialogData_GetDefaultInfo 2383
+#define wxPageSetupDialogData_GetMarginTopLeft 2384
+#define wxPageSetupDialogData_GetMarginBottomRight 2385
+#define wxPageSetupDialogData_GetMinMarginTopLeft 2386
+#define wxPageSetupDialogData_GetMinMarginBottomRight 2387
+#define wxPageSetupDialogData_GetPaperId 2388
+#define wxPageSetupDialogData_GetPaperSize 2389
+#define wxPageSetupDialogData_GetPrintData 2391
+#define wxPageSetupDialogData_IsOk 2392
+#define wxPageSetupDialogData_SetDefaultInfo 2393
+#define wxPageSetupDialogData_SetDefaultMinMargins 2394
+#define wxPageSetupDialogData_SetMarginTopLeft 2395
+#define wxPageSetupDialogData_SetMarginBottomRight 2396
+#define wxPageSetupDialogData_SetMinMarginTopLeft 2397
+#define wxPageSetupDialogData_SetMinMarginBottomRight 2398
+#define wxPageSetupDialogData_SetPaperId 2399
+#define wxPageSetupDialogData_SetPaperSize_1_1 2400
+#define wxPageSetupDialogData_SetPaperSize_1_0 2401
+#define wxPageSetupDialogData_SetPrintData 2402
+#define wxPrintDialog_new_2_0 2403
+#define wxPrintDialog_new_2_1 2404
+#define wxPrintDialog_destruct 2405
+#define wxPrintDialog_GetPrintDialogData 2406
+#define wxPrintDialog_GetPrintDC 2407
+#define wxPrintDialogData_new_0 2408
+#define wxPrintDialogData_new_1_1 2409
+#define wxPrintDialogData_new_1_0 2410
+#define wxPrintDialogData_destruct 2411
+#define wxPrintDialogData_EnableHelp 2412
+#define wxPrintDialogData_EnablePageNumbers 2413
+#define wxPrintDialogData_EnablePrintToFile 2414
+#define wxPrintDialogData_EnableSelection 2415
+#define wxPrintDialogData_GetAllPages 2416
+#define wxPrintDialogData_GetCollate 2417
+#define wxPrintDialogData_GetFromPage 2418
+#define wxPrintDialogData_GetMaxPage 2419
+#define wxPrintDialogData_GetMinPage 2420
+#define wxPrintDialogData_GetNoCopies 2421
+#define wxPrintDialogData_GetPrintData 2422
+#define wxPrintDialogData_GetPrintToFile 2423
+#define wxPrintDialogData_GetSelection 2424
+#define wxPrintDialogData_GetToPage 2425
+#define wxPrintDialogData_IsOk 2426
+#define wxPrintDialogData_SetCollate 2427
+#define wxPrintDialogData_SetFromPage 2428
+#define wxPrintDialogData_SetMaxPage 2429
+#define wxPrintDialogData_SetMinPage 2430
+#define wxPrintDialogData_SetNoCopies 2431
+#define wxPrintDialogData_SetPrintData 2432
+#define wxPrintDialogData_SetPrintToFile 2433
+#define wxPrintDialogData_SetSelection 2434
+#define wxPrintDialogData_SetToPage 2435
+#define wxPrintData_new_0 2436
+#define wxPrintData_new_1 2437
+#define wxPrintData_destruct 2438
+#define wxPrintData_GetCollate 2439
+#define wxPrintData_GetBin 2440
+#define wxPrintData_GetColour 2441
+#define wxPrintData_GetDuplex 2442
+#define wxPrintData_GetNoCopies 2443
+#define wxPrintData_GetOrientation 2444
+#define wxPrintData_GetPaperId 2445
+#define wxPrintData_GetPrinterName 2446
+#define wxPrintData_GetQuality 2447
+#define wxPrintData_IsOk 2448
+#define wxPrintData_SetBin 2449
+#define wxPrintData_SetCollate 2450
+#define wxPrintData_SetColour 2451
+#define wxPrintData_SetDuplex 2452
+#define wxPrintData_SetNoCopies 2453
+#define wxPrintData_SetOrientation 2454
+#define wxPrintData_SetPaperId 2455
+#define wxPrintData_SetPrinterName 2456
+#define wxPrintData_SetQuality 2457
+#define wxPrintPreview_new_2 2460
+#define wxPrintPreview_new_3 2461
+#define wxPrintPreview_destruct 2463
+#define wxPrintPreview_GetCanvas 2464
+#define wxPrintPreview_GetCurrentPage 2465
+#define wxPrintPreview_GetFrame 2466
+#define wxPrintPreview_GetMaxPage 2467
+#define wxPrintPreview_GetMinPage 2468
+#define wxPrintPreview_GetPrintout 2469
+#define wxPrintPreview_GetPrintoutForPrinting 2470
+#define wxPrintPreview_IsOk 2471
+#define wxPrintPreview_PaintPage 2472
+#define wxPrintPreview_Print 2473
+#define wxPrintPreview_RenderPage 2474
+#define wxPrintPreview_SetCanvas 2475
+#define wxPrintPreview_SetCurrentPage 2476
+#define wxPrintPreview_SetFrame 2477
+#define wxPrintPreview_SetPrintout 2478
+#define wxPrintPreview_SetZoom 2479
+#define wxPreviewFrame_new 2480
+#define wxPreviewFrame_destruct 2481
+#define wxPreviewFrame_CreateControlBar 2482
+#define wxPreviewFrame_CreateCanvas 2483
+#define wxPreviewFrame_Initialize 2484
+#define wxPreviewFrame_OnCloseWindow 2485
+#define wxPreviewControlBar_new 2486
+#define wxPreviewControlBar_destruct 2487
+#define wxPreviewControlBar_CreateButtons 2488
+#define wxPreviewControlBar_GetPrintPreview 2489
+#define wxPreviewControlBar_GetZoomControl 2490
+#define wxPreviewControlBar_SetZoomControl 2491
+#define wxPrinter_new 2493
+#define wxPrinter_CreateAbortWindow 2494
+#define wxPrinter_GetAbort 2495
+#define wxPrinter_GetLastError 2496
+#define wxPrinter_GetPrintDialogData 2497
+#define wxPrinter_Print 2498
+#define wxPrinter_PrintDialog 2499
+#define wxPrinter_ReportError 2500
+#define wxPrinter_Setup 2501
+#define wxPrinter_destroy 2502
+#define wxXmlResource_new_1 2503
+#define wxXmlResource_new_2 2504
+#define wxXmlResource_destruct 2505
+#define wxXmlResource_AttachUnknownControl 2506
+#define wxXmlResource_ClearHandlers 2507
+#define wxXmlResource_CompareVersion 2508
+#define wxXmlResource_Get 2509
+#define wxXmlResource_GetFlags 2510
+#define wxXmlResource_GetVersion 2511
+#define wxXmlResource_GetXRCID 2512
+#define wxXmlResource_InitAllHandlers 2513
+#define wxXmlResource_Load 2514
+#define wxXmlResource_LoadBitmap 2515
+#define wxXmlResource_LoadDialog_2 2516
+#define wxXmlResource_LoadDialog_3 2517
+#define wxXmlResource_LoadFrame_2 2518
+#define wxXmlResource_LoadFrame_3 2519
+#define wxXmlResource_LoadIcon 2520
+#define wxXmlResource_LoadMenu 2521
+#define wxXmlResource_LoadMenuBar_2 2522
+#define wxXmlResource_LoadMenuBar_1 2523
+#define wxXmlResource_LoadPanel_2 2524
+#define wxXmlResource_LoadPanel_3 2525
+#define wxXmlResource_LoadToolBar 2526
+#define wxXmlResource_Set 2527
+#define wxXmlResource_SetFlags 2528
+#define wxXmlResource_Unload 2529
+#define wxXmlResource_xrcctrl 2530
+#define wxHtmlEasyPrinting_new 2531
+#define wxHtmlEasyPrinting_destruct 2532
+#define wxHtmlEasyPrinting_GetPrintData 2533
+#define wxHtmlEasyPrinting_GetPageSetupData 2534
+#define wxHtmlEasyPrinting_PreviewFile 2535
+#define wxHtmlEasyPrinting_PreviewText 2536
+#define wxHtmlEasyPrinting_PrintFile 2537
+#define wxHtmlEasyPrinting_PrintText 2538
+#define wxHtmlEasyPrinting_PageSetup 2539
+#define wxHtmlEasyPrinting_SetFonts 2540
+#define wxHtmlEasyPrinting_SetHeader 2541
+#define wxHtmlEasyPrinting_SetFooter 2542
+#define wxGLCanvas_new_2 2544
+#define wxGLCanvas_new_3_1 2545
+#define wxGLCanvas_new_3_0 2546
+#define wxGLCanvas_GetContext 2547
+#define wxGLCanvas_SetCurrent 2549
+#define wxGLCanvas_SwapBuffers 2550
+#define wxGLCanvas_destroy 2551
+#define wxAuiManager_new 2552
+#define wxAuiManager_destruct 2553
+#define wxAuiManager_AddPane_2_1 2554
+#define wxAuiManager_AddPane_3 2555
+#define wxAuiManager_AddPane_2_0 2556
+#define wxAuiManager_DetachPane 2557
+#define wxAuiManager_GetAllPanes 2558
+#define wxAuiManager_GetArtProvider 2559
+#define wxAuiManager_GetDockSizeConstraint 2560
+#define wxAuiManager_GetFlags 2561
+#define wxAuiManager_GetManagedWindow 2562
+#define wxAuiManager_GetManager 2563
+#define wxAuiManager_GetPane_1_1 2564
+#define wxAuiManager_GetPane_1_0 2565
+#define wxAuiManager_HideHint 2566
+#define wxAuiManager_InsertPane 2567
+#define wxAuiManager_LoadPaneInfo 2568
+#define wxAuiManager_LoadPerspective 2569
+#define wxAuiManager_SavePaneInfo 2570
+#define wxAuiManager_SavePerspective 2571
+#define wxAuiManager_SetArtProvider 2572
+#define wxAuiManager_SetDockSizeConstraint 2573
+#define wxAuiManager_SetFlags 2574
+#define wxAuiManager_SetManagedWindow 2575
+#define wxAuiManager_ShowHint 2576
+#define wxAuiManager_UnInit 2577
+#define wxAuiManager_Update 2578
+#define wxAuiPaneInfo_new_0 2579
+#define wxAuiPaneInfo_new_1 2580
+#define wxAuiPaneInfo_destruct 2581
+#define wxAuiPaneInfo_BestSize_1 2582
+#define wxAuiPaneInfo_BestSize_2 2583
+#define wxAuiPaneInfo_Bottom 2584
+#define wxAuiPaneInfo_BottomDockable 2585
+#define wxAuiPaneInfo_Caption 2586
+#define wxAuiPaneInfo_CaptionVisible 2587
+#define wxAuiPaneInfo_Centre 2588
+#define wxAuiPaneInfo_CentrePane 2589
+#define wxAuiPaneInfo_CloseButton 2590
+#define wxAuiPaneInfo_DefaultPane 2591
+#define wxAuiPaneInfo_DestroyOnClose 2592
+#define wxAuiPaneInfo_Direction 2593
+#define wxAuiPaneInfo_Dock 2594
+#define wxAuiPaneInfo_Dockable 2595
+#define wxAuiPaneInfo_Fixed 2596
+#define wxAuiPaneInfo_Float 2597
+#define wxAuiPaneInfo_Floatable 2598
+#define wxAuiPaneInfo_FloatingPosition_1 2599
+#define wxAuiPaneInfo_FloatingPosition_2 2600
+#define wxAuiPaneInfo_FloatingSize_1 2601
+#define wxAuiPaneInfo_FloatingSize_2 2602
+#define wxAuiPaneInfo_Gripper 2603
+#define wxAuiPaneInfo_GripperTop 2604
+#define wxAuiPaneInfo_HasBorder 2605
+#define wxAuiPaneInfo_HasCaption 2606
+#define wxAuiPaneInfo_HasCloseButton 2607
+#define wxAuiPaneInfo_HasFlag 2608
+#define wxAuiPaneInfo_HasGripper 2609
+#define wxAuiPaneInfo_HasGripperTop 2610
+#define wxAuiPaneInfo_HasMaximizeButton 2611
+#define wxAuiPaneInfo_HasMinimizeButton 2612
+#define wxAuiPaneInfo_HasPinButton 2613
+#define wxAuiPaneInfo_Hide 2614
+#define wxAuiPaneInfo_IsBottomDockable 2615
+#define wxAuiPaneInfo_IsDocked 2616
+#define wxAuiPaneInfo_IsFixed 2617
+#define wxAuiPaneInfo_IsFloatable 2618
+#define wxAuiPaneInfo_IsFloating 2619
+#define wxAuiPaneInfo_IsLeftDockable 2620
+#define wxAuiPaneInfo_IsMovable 2621
+#define wxAuiPaneInfo_IsOk 2622
+#define wxAuiPaneInfo_IsResizable 2623
+#define wxAuiPaneInfo_IsRightDockable 2624
+#define wxAuiPaneInfo_IsShown 2625
+#define wxAuiPaneInfo_IsToolbar 2626
+#define wxAuiPaneInfo_IsTopDockable 2627
+#define wxAuiPaneInfo_Layer 2628
+#define wxAuiPaneInfo_Left 2629
+#define wxAuiPaneInfo_LeftDockable 2630
+#define wxAuiPaneInfo_MaxSize_1 2631
+#define wxAuiPaneInfo_MaxSize_2 2632
+#define wxAuiPaneInfo_MaximizeButton 2633
+#define wxAuiPaneInfo_MinSize_1 2634
+#define wxAuiPaneInfo_MinSize_2 2635
+#define wxAuiPaneInfo_MinimizeButton 2636
+#define wxAuiPaneInfo_Movable 2637
+#define wxAuiPaneInfo_Name 2638
+#define wxAuiPaneInfo_PaneBorder 2639
+#define wxAuiPaneInfo_PinButton 2640
+#define wxAuiPaneInfo_Position 2641
+#define wxAuiPaneInfo_Resizable 2642
+#define wxAuiPaneInfo_Right 2643
+#define wxAuiPaneInfo_RightDockable 2644
+#define wxAuiPaneInfo_Row 2645
+#define wxAuiPaneInfo_SafeSet 2646
+#define wxAuiPaneInfo_SetFlag 2647
+#define wxAuiPaneInfo_Show 2648
+#define wxAuiPaneInfo_ToolbarPane 2649
+#define wxAuiPaneInfo_Top 2650
+#define wxAuiPaneInfo_TopDockable 2651
+#define wxAuiPaneInfo_Window 2652
+#define wxAuiNotebook_new_0 2653
+#define wxAuiNotebook_new_2 2654
+#define wxAuiNotebook_AddPage 2655
+#define wxAuiNotebook_Create 2656
+#define wxAuiNotebook_DeletePage 2657
+#define wxAuiNotebook_GetArtProvider 2658
+#define wxAuiNotebook_GetPage 2659
+#define wxAuiNotebook_GetPageBitmap 2660
+#define wxAuiNotebook_GetPageCount 2661
+#define wxAuiNotebook_GetPageIndex 2662
+#define wxAuiNotebook_GetPageText 2663
+#define wxAuiNotebook_GetSelection 2664
+#define wxAuiNotebook_InsertPage 2665
+#define wxAuiNotebook_RemovePage 2666
+#define wxAuiNotebook_SetArtProvider 2667
+#define wxAuiNotebook_SetFont 2668
+#define wxAuiNotebook_SetPageBitmap 2669
+#define wxAuiNotebook_SetPageText 2670
+#define wxAuiNotebook_SetSelection 2671
+#define wxAuiNotebook_SetTabCtrlHeight 2672
+#define wxAuiNotebook_SetUniformBitmapSize 2673
+#define wxAuiNotebook_destroy 2674
+#define wxMDIParentFrame_new_0 2675
+#define wxMDIParentFrame_new_4 2676
+#define wxMDIParentFrame_destruct 2677
+#define wxMDIParentFrame_ActivateNext 2678
+#define wxMDIParentFrame_ActivatePrevious 2679
+#define wxMDIParentFrame_ArrangeIcons 2680
+#define wxMDIParentFrame_Cascade 2681
+#define wxMDIParentFrame_Create 2682
+#define wxMDIParentFrame_GetActiveChild 2683
+#define wxMDIParentFrame_GetClientWindow 2684
+#define wxMDIParentFrame_Tile 2685
+#define wxMDIChildFrame_new_0 2686
+#define wxMDIChildFrame_new_4 2687
+#define wxMDIChildFrame_destruct 2688
+#define wxMDIChildFrame_Activate 2689
+#define wxMDIChildFrame_Create 2690
+#define wxMDIChildFrame_Maximize 2691
+#define wxMDIChildFrame_Restore 2692
+#define wxMDIClientWindow_new_0 2693
+#define wxMDIClientWindow_new_2 2694
+#define wxMDIClientWindow_destruct 2695
+#define wxMDIClientWindow_CreateClient 2696
+#define wxLayoutAlgorithm_new 2697
+#define wxLayoutAlgorithm_LayoutFrame 2698
+#define wxLayoutAlgorithm_LayoutMDIFrame 2699
+#define wxLayoutAlgorithm_LayoutWindow 2700
+#define wxLayoutAlgorithm_destroy 2701
+#define wxEvent_GetId 2702
+#define wxEvent_GetSkipped 2703
+#define wxEvent_GetTimestamp 2704
+#define wxEvent_IsCommandEvent 2705
+#define wxEvent_ResumePropagation 2706
+#define wxEvent_ShouldPropagate 2707
+#define wxEvent_Skip 2708
+#define wxEvent_StopPropagation 2709
+#define wxCommandEvent_getClientData 2710
+#define wxCommandEvent_GetExtraLong 2711
+#define wxCommandEvent_GetInt 2712
+#define wxCommandEvent_GetSelection 2713
+#define wxCommandEvent_GetString 2714
+#define wxCommandEvent_IsChecked 2715
+#define wxCommandEvent_IsSelection 2716
+#define wxCommandEvent_SetInt 2717
+#define wxCommandEvent_SetString 2718
+#define wxScrollEvent_GetOrientation 2719
+#define wxScrollEvent_GetPosition 2720
+#define wxScrollWinEvent_GetOrientation 2721
+#define wxScrollWinEvent_GetPosition 2722
+#define wxMouseEvent_AltDown 2723
+#define wxMouseEvent_Button 2724
+#define wxMouseEvent_ButtonDClick 2725
+#define wxMouseEvent_ButtonDown 2726
+#define wxMouseEvent_ButtonUp 2727
+#define wxMouseEvent_CmdDown 2728
+#define wxMouseEvent_ControlDown 2729
+#define wxMouseEvent_Dragging 2730
+#define wxMouseEvent_Entering 2731
+#define wxMouseEvent_GetButton 2732
+#define wxMouseEvent_GetPosition 2735
+#define wxMouseEvent_GetLogicalPosition 2736
+#define wxMouseEvent_GetLinesPerAction 2737
+#define wxMouseEvent_GetWheelRotation 2738
+#define wxMouseEvent_GetWheelDelta 2739
+#define wxMouseEvent_GetX 2740
+#define wxMouseEvent_GetY 2741
+#define wxMouseEvent_IsButton 2742
+#define wxMouseEvent_IsPageScroll 2743
+#define wxMouseEvent_Leaving 2744
+#define wxMouseEvent_LeftDClick 2745
+#define wxMouseEvent_LeftDown 2746
+#define wxMouseEvent_LeftIsDown 2747
+#define wxMouseEvent_LeftUp 2748
+#define wxMouseEvent_MetaDown 2749
+#define wxMouseEvent_MiddleDClick 2750
+#define wxMouseEvent_MiddleDown 2751
+#define wxMouseEvent_MiddleIsDown 2752
+#define wxMouseEvent_MiddleUp 2753
+#define wxMouseEvent_Moving 2754
+#define wxMouseEvent_RightDClick 2755
+#define wxMouseEvent_RightDown 2756
+#define wxMouseEvent_RightIsDown 2757
+#define wxMouseEvent_RightUp 2758
+#define wxMouseEvent_ShiftDown 2759
+#define wxSetCursorEvent_GetCursor 2760
+#define wxSetCursorEvent_GetX 2761
+#define wxSetCursorEvent_GetY 2762
+#define wxSetCursorEvent_HasCursor 2763
+#define wxSetCursorEvent_SetCursor 2764
+#define wxKeyEvent_AltDown 2765
+#define wxKeyEvent_CmdDown 2766
+#define wxKeyEvent_ControlDown 2767
+#define wxKeyEvent_GetKeyCode 2768
+#define wxKeyEvent_GetModifiers 2769
+#define wxKeyEvent_GetPosition 2772
+#define wxKeyEvent_GetRawKeyCode 2773
+#define wxKeyEvent_GetRawKeyFlags 2774
+#define wxKeyEvent_GetUnicodeKey 2775
+#define wxKeyEvent_GetX 2776
+#define wxKeyEvent_GetY 2777
+#define wxKeyEvent_HasModifiers 2778
+#define wxKeyEvent_MetaDown 2779
+#define wxKeyEvent_ShiftDown 2780
+#define wxSizeEvent_GetSize 2781
+#define wxMoveEvent_GetPosition 2782
+#define wxEraseEvent_GetDC 2783
+#define wxFocusEvent_GetWindow 2784
+#define wxChildFocusEvent_GetWindow 2785
+#define wxMenuEvent_GetMenu 2786
+#define wxMenuEvent_GetMenuId 2787
+#define wxMenuEvent_IsPopup 2788
+#define wxCloseEvent_CanVeto 2789
+#define wxCloseEvent_GetLoggingOff 2790
+#define wxCloseEvent_SetCanVeto 2791
+#define wxCloseEvent_SetLoggingOff 2792
+#define wxCloseEvent_Veto 2793
+#define wxShowEvent_SetShow 2794
+#define wxShowEvent_GetShow 2795
+#define wxIconizeEvent_Iconized 2796
+#define wxJoystickEvent_ButtonDown 2797
+#define wxJoystickEvent_ButtonIsDown 2798
+#define wxJoystickEvent_ButtonUp 2799
+#define wxJoystickEvent_GetButtonChange 2800
+#define wxJoystickEvent_GetButtonState 2801
+#define wxJoystickEvent_GetJoystick 2802
+#define wxJoystickEvent_GetPosition 2803
+#define wxJoystickEvent_GetZPosition 2804
+#define wxJoystickEvent_IsButton 2805
+#define wxJoystickEvent_IsMove 2806
+#define wxJoystickEvent_IsZMove 2807
+#define wxUpdateUIEvent_CanUpdate 2808
+#define wxUpdateUIEvent_Check 2809
+#define wxUpdateUIEvent_Enable 2810
+#define wxUpdateUIEvent_Show 2811
+#define wxUpdateUIEvent_GetChecked 2812
+#define wxUpdateUIEvent_GetEnabled 2813
+#define wxUpdateUIEvent_GetShown 2814
+#define wxUpdateUIEvent_GetSetChecked 2815
+#define wxUpdateUIEvent_GetSetEnabled 2816
+#define wxUpdateUIEvent_GetSetShown 2817
+#define wxUpdateUIEvent_GetSetText 2818
+#define wxUpdateUIEvent_GetText 2819
+#define wxUpdateUIEvent_GetMode 2820
+#define wxUpdateUIEvent_GetUpdateInterval 2821
+#define wxUpdateUIEvent_ResetUpdateTime 2822
+#define wxUpdateUIEvent_SetMode 2823
+#define wxUpdateUIEvent_SetText 2824
+#define wxUpdateUIEvent_SetUpdateInterval 2825
+#define wxMouseCaptureChangedEvent_GetCapturedWindow 2826
+#define wxPaletteChangedEvent_SetChangedWindow 2827
+#define wxPaletteChangedEvent_GetChangedWindow 2828
+#define wxQueryNewPaletteEvent_SetPaletteRealized 2829
+#define wxQueryNewPaletteEvent_GetPaletteRealized 2830
+#define wxNavigationKeyEvent_GetDirection 2831
+#define wxNavigationKeyEvent_SetDirection 2832
+#define wxNavigationKeyEvent_IsWindowChange 2833
+#define wxNavigationKeyEvent_SetWindowChange 2834
+#define wxNavigationKeyEvent_IsFromTab 2835
+#define wxNavigationKeyEvent_SetFromTab 2836
+#define wxNavigationKeyEvent_GetCurrentFocus 2837
+#define wxNavigationKeyEvent_SetCurrentFocus 2838
+#define wxHelpEvent_GetOrigin 2839
+#define wxHelpEvent_GetPosition 2840
+#define wxHelpEvent_SetOrigin 2841
+#define wxHelpEvent_SetPosition 2842
+#define wxContextMenuEvent_GetPosition 2843
+#define wxContextMenuEvent_SetPosition 2844
+#define wxIdleEvent_CanSend 2845
+#define wxIdleEvent_GetMode 2846
+#define wxIdleEvent_RequestMore 2847
+#define wxIdleEvent_MoreRequested 2848
+#define wxIdleEvent_SetMode 2849
+#define wxGridEvent_AltDown 2850
+#define wxGridEvent_ControlDown 2851
+#define wxGridEvent_GetCol 2852
+#define wxGridEvent_GetPosition 2853
+#define wxGridEvent_GetRow 2854
+#define wxGridEvent_MetaDown 2855
+#define wxGridEvent_Selecting 2856
+#define wxGridEvent_ShiftDown 2857
+#define wxNotifyEvent_Allow 2858
+#define wxNotifyEvent_IsAllowed 2859
+#define wxNotifyEvent_Veto 2860
+#define wxSashEvent_GetEdge 2861
+#define wxSashEvent_GetDragRect 2862
+#define wxSashEvent_GetDragStatus 2863
+#define wxListEvent_GetCacheFrom 2864
+#define wxListEvent_GetCacheTo 2865
+#define wxListEvent_GetKeyCode 2866
+#define wxListEvent_GetIndex 2867
+#define wxListEvent_GetColumn 2868
+#define wxListEvent_GetPoint 2869
+#define wxListEvent_GetLabel 2870
+#define wxListEvent_GetText 2871
+#define wxListEvent_GetImage 2872
+#define wxListEvent_GetData 2873
+#define wxListEvent_GetMask 2874
+#define wxListEvent_GetItem 2875
+#define wxListEvent_IsEditCancelled 2876
+#define wxDateEvent_GetDate 2877
+#define wxCalendarEvent_GetWeekDay 2878
+#define wxFileDirPickerEvent_GetPath 2879
+#define wxColourPickerEvent_GetColour 2880
+#define wxFontPickerEvent_GetFont 2881
+#define wxStyledTextEvent_GetPosition 2882
+#define wxStyledTextEvent_GetKey 2883
+#define wxStyledTextEvent_GetModifiers 2884
+#define wxStyledTextEvent_GetModificationType 2885
+#define wxStyledTextEvent_GetText 2886
+#define wxStyledTextEvent_GetLength 2887
+#define wxStyledTextEvent_GetLinesAdded 2888
+#define wxStyledTextEvent_GetLine 2889
+#define wxStyledTextEvent_GetFoldLevelNow 2890
+#define wxStyledTextEvent_GetFoldLevelPrev 2891
+#define wxStyledTextEvent_GetMargin 2892
+#define wxStyledTextEvent_GetMessage 2893
+#define wxStyledTextEvent_GetWParam 2894
+#define wxStyledTextEvent_GetLParam 2895
+#define wxStyledTextEvent_GetListType 2896
+#define wxStyledTextEvent_GetX 2897
+#define wxStyledTextEvent_GetY 2898
+#define wxStyledTextEvent_GetDragText 2899
+#define wxStyledTextEvent_GetDragAllowMove 2900
+#define wxStyledTextEvent_GetDragResult 2901
+#define wxStyledTextEvent_GetShift 2902
+#define wxStyledTextEvent_GetControl 2903
+#define wxStyledTextEvent_GetAlt 2904
+#define utils_wxGetKeyState 2905
+#define utils_wxGetMousePosition 2906
+#define utils_wxGetMouseState 2907
+#define utils_wxSetDetectableAutoRepeat 2908
+#define utils_wxBell 2909
+#define utils_wxFindMenuItemId 2910
+#define utils_wxGenericFindWindowAtPoint 2911
+#define utils_wxFindWindowAtPoint 2912
+#define utils_wxBeginBusyCursor 2913
+#define utils_wxEndBusyCursor 2914
+#define utils_wxIsBusy 2915
+#define utils_wxShutdown 2916
+#define utils_wxShell 2917
+#define utils_wxLaunchDefaultBrowser 2918
+#define utils_wxGetEmailAddress 2919
+#define utils_wxGetUserId 2920
+#define utils_wxGetHomeDir 2921
+#define utils_wxNewId 2922
+#define utils_wxRegisterId 2923
+#define utils_wxGetCurrentId 2924
+#define utils_wxGetOsDescription 2925
+#define utils_wxIsPlatformLittleEndian 2926
+#define utils_wxIsPlatform64Bit 2927
+#define wxPrintout_new 2928
+#define wxPrintout_destruct 2929
+#define wxPrintout_GetDC 2930
+#define wxPrintout_GetPageSizeMM 2931
+#define wxPrintout_GetPageSizePixels 2932
+#define wxPrintout_GetPaperRectPixels 2933
+#define wxPrintout_GetPPIPrinter 2934
+#define wxPrintout_GetPPIScreen 2935
+#define wxPrintout_GetTitle 2936
+#define wxPrintout_IsPreview 2937
+#define wxPrintout_FitThisSizeToPaper 2938
+#define wxPrintout_FitThisSizeToPage 2939
+#define wxPrintout_FitThisSizeToPageMargins 2940
+#define wxPrintout_MapScreenSizeToPaper 2941
+#define wxPrintout_MapScreenSizeToPage 2942
+#define wxPrintout_MapScreenSizeToPageMargins 2943
+#define wxPrintout_MapScreenSizeToDevice 2944
+#define wxPrintout_GetLogicalPaperRect 2945
+#define wxPrintout_GetLogicalPageRect 2946
+#define wxPrintout_GetLogicalPageMarginsRect 2947
+#define wxPrintout_SetLogicalOrigin 2948
+#define wxPrintout_OffsetLogicalOrigin 2949
+#define wxStyledTextCtrl_new_2 2950
+#define wxStyledTextCtrl_new_0 2951
+#define wxStyledTextCtrl_destruct 2952
+#define wxStyledTextCtrl_Create 2953
+#define wxStyledTextCtrl_AddText 2954
+#define wxStyledTextCtrl_AddStyledText 2955
+#define wxStyledTextCtrl_InsertText 2956
+#define wxStyledTextCtrl_ClearAll 2957
+#define wxStyledTextCtrl_ClearDocumentStyle 2958
+#define wxStyledTextCtrl_GetLength 2959
+#define wxStyledTextCtrl_GetCharAt 2960
+#define wxStyledTextCtrl_GetCurrentPos 2961
+#define wxStyledTextCtrl_GetAnchor 2962
+#define wxStyledTextCtrl_GetStyleAt 2963
+#define wxStyledTextCtrl_Redo 2964
+#define wxStyledTextCtrl_SetUndoCollection 2965
+#define wxStyledTextCtrl_SelectAll 2966
+#define wxStyledTextCtrl_SetSavePoint 2967
+#define wxStyledTextCtrl_GetStyledText 2968
+#define wxStyledTextCtrl_CanRedo 2969
+#define wxStyledTextCtrl_MarkerLineFromHandle 2970
+#define wxStyledTextCtrl_MarkerDeleteHandle 2971
+#define wxStyledTextCtrl_GetUndoCollection 2972
+#define wxStyledTextCtrl_GetViewWhiteSpace 2973
+#define wxStyledTextCtrl_SetViewWhiteSpace 2974
+#define wxStyledTextCtrl_PositionFromPoint 2975
+#define wxStyledTextCtrl_PositionFromPointClose 2976
+#define wxStyledTextCtrl_GotoLine 2977
+#define wxStyledTextCtrl_GotoPos 2978
+#define wxStyledTextCtrl_SetAnchor 2979
+#define wxStyledTextCtrl_GetCurLine 2980
+#define wxStyledTextCtrl_GetEndStyled 2981
+#define wxStyledTextCtrl_ConvertEOLs 2982
+#define wxStyledTextCtrl_GetEOLMode 2983
+#define wxStyledTextCtrl_SetEOLMode 2984
+#define wxStyledTextCtrl_StartStyling 2985
+#define wxStyledTextCtrl_SetStyling 2986
+#define wxStyledTextCtrl_GetBufferedDraw 2987
+#define wxStyledTextCtrl_SetBufferedDraw 2988
+#define wxStyledTextCtrl_SetTabWidth 2989
+#define wxStyledTextCtrl_GetTabWidth 2990
+#define wxStyledTextCtrl_SetCodePage 2991
+#define wxStyledTextCtrl_MarkerDefine 2992
+#define wxStyledTextCtrl_MarkerSetForeground 2993
+#define wxStyledTextCtrl_MarkerSetBackground 2994
+#define wxStyledTextCtrl_MarkerAdd 2995
+#define wxStyledTextCtrl_MarkerDelete 2996
+#define wxStyledTextCtrl_MarkerDeleteAll 2997
+#define wxStyledTextCtrl_MarkerGet 2998
+#define wxStyledTextCtrl_MarkerNext 2999
+#define wxStyledTextCtrl_MarkerPrevious 3000
+#define wxStyledTextCtrl_MarkerDefineBitmap 3001
+#define wxStyledTextCtrl_MarkerAddSet 3002
+#define wxStyledTextCtrl_MarkerSetAlpha 3003
+#define wxStyledTextCtrl_SetMarginType 3004
+#define wxStyledTextCtrl_GetMarginType 3005
+#define wxStyledTextCtrl_SetMarginWidth 3006
+#define wxStyledTextCtrl_GetMarginWidth 3007
+#define wxStyledTextCtrl_SetMarginMask 3008
+#define wxStyledTextCtrl_GetMarginMask 3009
+#define wxStyledTextCtrl_SetMarginSensitive 3010
+#define wxStyledTextCtrl_GetMarginSensitive 3011
+#define wxStyledTextCtrl_StyleClearAll 3012
+#define wxStyledTextCtrl_StyleSetForeground 3013
+#define wxStyledTextCtrl_StyleSetBackground 3014
+#define wxStyledTextCtrl_StyleSetBold 3015
+#define wxStyledTextCtrl_StyleSetItalic 3016
+#define wxStyledTextCtrl_StyleSetSize 3017
+#define wxStyledTextCtrl_StyleSetFaceName 3018
+#define wxStyledTextCtrl_StyleSetEOLFilled 3019
+#define wxStyledTextCtrl_StyleResetDefault 3020
+#define wxStyledTextCtrl_StyleSetUnderline 3021
+#define wxStyledTextCtrl_StyleSetCase 3022
+#define wxStyledTextCtrl_StyleSetHotSpot 3023
+#define wxStyledTextCtrl_SetSelForeground 3024
+#define wxStyledTextCtrl_SetSelBackground 3025
+#define wxStyledTextCtrl_GetSelAlpha 3026
+#define wxStyledTextCtrl_SetSelAlpha 3027
+#define wxStyledTextCtrl_SetCaretForeground 3028
+#define wxStyledTextCtrl_CmdKeyAssign 3029
+#define wxStyledTextCtrl_CmdKeyClear 3030
+#define wxStyledTextCtrl_CmdKeyClearAll 3031
+#define wxStyledTextCtrl_SetStyleBytes 3032
+#define wxStyledTextCtrl_StyleSetVisible 3033
+#define wxStyledTextCtrl_GetCaretPeriod 3034
+#define wxStyledTextCtrl_SetCaretPeriod 3035
+#define wxStyledTextCtrl_SetWordChars 3036
+#define wxStyledTextCtrl_BeginUndoAction 3037
+#define wxStyledTextCtrl_EndUndoAction 3038
+#define wxStyledTextCtrl_IndicatorSetStyle 3039
+#define wxStyledTextCtrl_IndicatorGetStyle 3040
+#define wxStyledTextCtrl_IndicatorSetForeground 3041
+#define wxStyledTextCtrl_IndicatorGetForeground 3042
+#define wxStyledTextCtrl_SetWhitespaceForeground 3043
+#define wxStyledTextCtrl_SetWhitespaceBackground 3044
+#define wxStyledTextCtrl_GetStyleBits 3045
+#define wxStyledTextCtrl_SetLineState 3046
+#define wxStyledTextCtrl_GetLineState 3047
+#define wxStyledTextCtrl_GetMaxLineState 3048
+#define wxStyledTextCtrl_GetCaretLineVisible 3049
+#define wxStyledTextCtrl_SetCaretLineVisible 3050
+#define wxStyledTextCtrl_GetCaretLineBackground 3051
+#define wxStyledTextCtrl_SetCaretLineBackground 3052
+#define wxStyledTextCtrl_AutoCompShow 3053
+#define wxStyledTextCtrl_AutoCompCancel 3054
+#define wxStyledTextCtrl_AutoCompActive 3055
+#define wxStyledTextCtrl_AutoCompPosStart 3056
+#define wxStyledTextCtrl_AutoCompComplete 3057
+#define wxStyledTextCtrl_AutoCompStops 3058
+#define wxStyledTextCtrl_AutoCompSetSeparator 3059
+#define wxStyledTextCtrl_AutoCompGetSeparator 3060
+#define wxStyledTextCtrl_AutoCompSelect 3061
+#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3062
+#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3063
+#define wxStyledTextCtrl_AutoCompSetFillUps 3064
+#define wxStyledTextCtrl_AutoCompSetChooseSingle 3065
+#define wxStyledTextCtrl_AutoCompGetChooseSingle 3066
+#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3067
+#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3068
+#define wxStyledTextCtrl_UserListShow 3069
+#define wxStyledTextCtrl_AutoCompSetAutoHide 3070
+#define wxStyledTextCtrl_AutoCompGetAutoHide 3071
+#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3072
+#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3073
+#define wxStyledTextCtrl_RegisterImage 3074
+#define wxStyledTextCtrl_ClearRegisteredImages 3075
+#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3076
+#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3077
+#define wxStyledTextCtrl_AutoCompSetMaxWidth 3078
+#define wxStyledTextCtrl_AutoCompGetMaxWidth 3079
+#define wxStyledTextCtrl_AutoCompSetMaxHeight 3080
+#define wxStyledTextCtrl_AutoCompGetMaxHeight 3081
+#define wxStyledTextCtrl_SetIndent 3082
+#define wxStyledTextCtrl_GetIndent 3083
+#define wxStyledTextCtrl_SetUseTabs 3084
+#define wxStyledTextCtrl_GetUseTabs 3085
+#define wxStyledTextCtrl_SetLineIndentation 3086
+#define wxStyledTextCtrl_GetLineIndentation 3087
+#define wxStyledTextCtrl_GetLineIndentPosition 3088
+#define wxStyledTextCtrl_GetColumn 3089
+#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3090
+#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3091
+#define wxStyledTextCtrl_SetIndentationGuides 3092
+#define wxStyledTextCtrl_GetIndentationGuides 3093
+#define wxStyledTextCtrl_SetHighlightGuide 3094
+#define wxStyledTextCtrl_GetHighlightGuide 3095
+#define wxStyledTextCtrl_GetLineEndPosition 3096
+#define wxStyledTextCtrl_GetCodePage 3097
+#define wxStyledTextCtrl_GetCaretForeground 3098
+#define wxStyledTextCtrl_GetReadOnly 3099
+#define wxStyledTextCtrl_SetCurrentPos 3100
+#define wxStyledTextCtrl_SetSelectionStart 3101
+#define wxStyledTextCtrl_GetSelectionStart 3102
+#define wxStyledTextCtrl_SetSelectionEnd 3103
+#define wxStyledTextCtrl_GetSelectionEnd 3104
+#define wxStyledTextCtrl_SetPrintMagnification 3105
+#define wxStyledTextCtrl_GetPrintMagnification 3106
+#define wxStyledTextCtrl_SetPrintColourMode 3107
+#define wxStyledTextCtrl_GetPrintColourMode 3108
+#define wxStyledTextCtrl_FindText 3109
+#define wxStyledTextCtrl_FormatRange 3110
+#define wxStyledTextCtrl_GetFirstVisibleLine 3111
+#define wxStyledTextCtrl_GetLine 3112
+#define wxStyledTextCtrl_GetLineCount 3113
+#define wxStyledTextCtrl_SetMarginLeft 3114
+#define wxStyledTextCtrl_GetMarginLeft 3115
+#define wxStyledTextCtrl_SetMarginRight 3116
+#define wxStyledTextCtrl_GetMarginRight 3117
+#define wxStyledTextCtrl_GetModify 3118
+#define wxStyledTextCtrl_SetSelection 3119
+#define wxStyledTextCtrl_GetSelectedText 3120
+#define wxStyledTextCtrl_GetTextRange 3121
+#define wxStyledTextCtrl_HideSelection 3122
+#define wxStyledTextCtrl_LineFromPosition 3123
+#define wxStyledTextCtrl_PositionFromLine 3124
+#define wxStyledTextCtrl_LineScroll 3125
+#define wxStyledTextCtrl_EnsureCaretVisible 3126
+#define wxStyledTextCtrl_ReplaceSelection 3127
+#define wxStyledTextCtrl_SetReadOnly 3128
+#define wxStyledTextCtrl_CanPaste 3129
+#define wxStyledTextCtrl_CanUndo 3130
+#define wxStyledTextCtrl_EmptyUndoBuffer 3131
+#define wxStyledTextCtrl_Undo 3132
+#define wxStyledTextCtrl_Cut 3133
+#define wxStyledTextCtrl_Copy 3134
+#define wxStyledTextCtrl_Paste 3135
+#define wxStyledTextCtrl_Clear 3136
+#define wxStyledTextCtrl_SetText 3137
+#define wxStyledTextCtrl_GetText 3138
+#define wxStyledTextCtrl_GetTextLength 3139
+#define wxStyledTextCtrl_GetOvertype 3140
+#define wxStyledTextCtrl_SetCaretWidth 3141
+#define wxStyledTextCtrl_GetCaretWidth 3142
+#define wxStyledTextCtrl_SetTargetStart 3143
+#define wxStyledTextCtrl_GetTargetStart 3144
+#define wxStyledTextCtrl_SetTargetEnd 3145
+#define wxStyledTextCtrl_GetTargetEnd 3146
+#define wxStyledTextCtrl_ReplaceTarget 3147
+#define wxStyledTextCtrl_SearchInTarget 3148
+#define wxStyledTextCtrl_SetSearchFlags 3149
+#define wxStyledTextCtrl_GetSearchFlags 3150
+#define wxStyledTextCtrl_CallTipShow 3151
+#define wxStyledTextCtrl_CallTipCancel 3152
+#define wxStyledTextCtrl_CallTipActive 3153
+#define wxStyledTextCtrl_CallTipPosAtStart 3154
+#define wxStyledTextCtrl_CallTipSetHighlight 3155
+#define wxStyledTextCtrl_CallTipSetBackground 3156
+#define wxStyledTextCtrl_CallTipSetForeground 3157
+#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3158
+#define wxStyledTextCtrl_CallTipUseStyle 3159
+#define wxStyledTextCtrl_VisibleFromDocLine 3160
+#define wxStyledTextCtrl_DocLineFromVisible 3161
+#define wxStyledTextCtrl_WrapCount 3162
+#define wxStyledTextCtrl_SetFoldLevel 3163
+#define wxStyledTextCtrl_GetFoldLevel 3164
+#define wxStyledTextCtrl_GetLastChild 3165
+#define wxStyledTextCtrl_GetFoldParent 3166
+#define wxStyledTextCtrl_ShowLines 3167
+#define wxStyledTextCtrl_HideLines 3168
+#define wxStyledTextCtrl_GetLineVisible 3169
+#define wxStyledTextCtrl_SetFoldExpanded 3170
+#define wxStyledTextCtrl_GetFoldExpanded 3171
+#define wxStyledTextCtrl_ToggleFold 3172
+#define wxStyledTextCtrl_EnsureVisible 3173
+#define wxStyledTextCtrl_SetFoldFlags 3174
+#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3175
+#define wxStyledTextCtrl_SetTabIndents 3176
+#define wxStyledTextCtrl_GetTabIndents 3177
+#define wxStyledTextCtrl_SetBackSpaceUnIndents 3178
+#define wxStyledTextCtrl_GetBackSpaceUnIndents 3179
+#define wxStyledTextCtrl_SetMouseDwellTime 3180
+#define wxStyledTextCtrl_GetMouseDwellTime 3181
+#define wxStyledTextCtrl_WordStartPosition 3182
+#define wxStyledTextCtrl_WordEndPosition 3183
+#define wxStyledTextCtrl_SetWrapMode 3184
+#define wxStyledTextCtrl_GetWrapMode 3185
+#define wxStyledTextCtrl_SetWrapVisualFlags 3186
+#define wxStyledTextCtrl_GetWrapVisualFlags 3187
+#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3188
+#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3189
+#define wxStyledTextCtrl_SetWrapStartIndent 3190
+#define wxStyledTextCtrl_GetWrapStartIndent 3191
+#define wxStyledTextCtrl_SetLayoutCache 3192
+#define wxStyledTextCtrl_GetLayoutCache 3193
+#define wxStyledTextCtrl_SetScrollWidth 3194
+#define wxStyledTextCtrl_GetScrollWidth 3195
+#define wxStyledTextCtrl_TextWidth 3196
+#define wxStyledTextCtrl_GetEndAtLastLine 3197
+#define wxStyledTextCtrl_TextHeight 3198
+#define wxStyledTextCtrl_SetUseVerticalScrollBar 3199
+#define wxStyledTextCtrl_GetUseVerticalScrollBar 3200
+#define wxStyledTextCtrl_AppendText 3201
+#define wxStyledTextCtrl_GetTwoPhaseDraw 3202
+#define wxStyledTextCtrl_SetTwoPhaseDraw 3203
+#define wxStyledTextCtrl_TargetFromSelection 3204
+#define wxStyledTextCtrl_LinesJoin 3205
+#define wxStyledTextCtrl_LinesSplit 3206
+#define wxStyledTextCtrl_SetFoldMarginColour 3207
+#define wxStyledTextCtrl_SetFoldMarginHiColour 3208
+#define wxStyledTextCtrl_LineDown 3209
+#define wxStyledTextCtrl_LineDownExtend 3210
+#define wxStyledTextCtrl_LineUp 3211
+#define wxStyledTextCtrl_LineUpExtend 3212
+#define wxStyledTextCtrl_CharLeft 3213
+#define wxStyledTextCtrl_CharLeftExtend 3214
+#define wxStyledTextCtrl_CharRight 3215
+#define wxStyledTextCtrl_CharRightExtend 3216
+#define wxStyledTextCtrl_WordLeft 3217
+#define wxStyledTextCtrl_WordLeftExtend 3218
+#define wxStyledTextCtrl_WordRight 3219
+#define wxStyledTextCtrl_WordRightExtend 3220
+#define wxStyledTextCtrl_Home 3221
+#define wxStyledTextCtrl_HomeExtend 3222
+#define wxStyledTextCtrl_LineEnd 3223
+#define wxStyledTextCtrl_LineEndExtend 3224
+#define wxStyledTextCtrl_DocumentStart 3225
+#define wxStyledTextCtrl_DocumentStartExtend 3226
+#define wxStyledTextCtrl_DocumentEnd 3227
+#define wxStyledTextCtrl_DocumentEndExtend 3228
+#define wxStyledTextCtrl_PageUp 3229
+#define wxStyledTextCtrl_PageUpExtend 3230
+#define wxStyledTextCtrl_PageDown 3231
+#define wxStyledTextCtrl_PageDownExtend 3232
+#define wxStyledTextCtrl_EditToggleOvertype 3233
+#define wxStyledTextCtrl_Cancel 3234
+#define wxStyledTextCtrl_DeleteBack 3235
+#define wxStyledTextCtrl_Tab 3236
+#define wxStyledTextCtrl_BackTab 3237
+#define wxStyledTextCtrl_NewLine 3238
+#define wxStyledTextCtrl_FormFeed 3239
+#define wxStyledTextCtrl_VCHome 3240
+#define wxStyledTextCtrl_VCHomeExtend 3241
+#define wxStyledTextCtrl_ZoomIn 3242
+#define wxStyledTextCtrl_ZoomOut 3243
+#define wxStyledTextCtrl_DelWordLeft 3244
+#define wxStyledTextCtrl_DelWordRight 3245
+#define wxStyledTextCtrl_LineCut 3246
+#define wxStyledTextCtrl_LineDelete 3247
+#define wxStyledTextCtrl_LineTranspose 3248
+#define wxStyledTextCtrl_LineDuplicate 3249
+#define wxStyledTextCtrl_LowerCase 3250
+#define wxStyledTextCtrl_UpperCase 3251
+#define wxStyledTextCtrl_LineScrollDown 3252
+#define wxStyledTextCtrl_LineScrollUp 3253
+#define wxStyledTextCtrl_DeleteBackNotLine 3254
+#define wxStyledTextCtrl_HomeDisplay 3255
+#define wxStyledTextCtrl_HomeDisplayExtend 3256
+#define wxStyledTextCtrl_LineEndDisplay 3257
+#define wxStyledTextCtrl_LineEndDisplayExtend 3258
+#define wxStyledTextCtrl_HomeWrapExtend 3259
+#define wxStyledTextCtrl_LineEndWrap 3260
+#define wxStyledTextCtrl_LineEndWrapExtend 3261
+#define wxStyledTextCtrl_VCHomeWrap 3262
+#define wxStyledTextCtrl_VCHomeWrapExtend 3263
+#define wxStyledTextCtrl_LineCopy 3264
+#define wxStyledTextCtrl_MoveCaretInsideView 3265
+#define wxStyledTextCtrl_LineLength 3266
+#define wxStyledTextCtrl_BraceHighlight 3267
+#define wxStyledTextCtrl_BraceBadLight 3268
+#define wxStyledTextCtrl_BraceMatch 3269
+#define wxStyledTextCtrl_GetViewEOL 3270
+#define wxStyledTextCtrl_SetViewEOL 3271
+#define wxStyledTextCtrl_SetModEventMask 3272
+#define wxStyledTextCtrl_GetEdgeColumn 3273
+#define wxStyledTextCtrl_SetEdgeColumn 3274
+#define wxStyledTextCtrl_SetEdgeMode 3275
+#define wxStyledTextCtrl_GetEdgeMode 3276
+#define wxStyledTextCtrl_GetEdgeColour 3277
+#define wxStyledTextCtrl_SetEdgeColour 3278
+#define wxStyledTextCtrl_SearchAnchor 3279
+#define wxStyledTextCtrl_SearchNext 3280
+#define wxStyledTextCtrl_SearchPrev 3281
+#define wxStyledTextCtrl_LinesOnScreen 3282
+#define wxStyledTextCtrl_UsePopUp 3283
+#define wxStyledTextCtrl_SelectionIsRectangle 3284
+#define wxStyledTextCtrl_SetZoom 3285
+#define wxStyledTextCtrl_GetZoom 3286
+#define wxStyledTextCtrl_GetModEventMask 3287
+#define wxStyledTextCtrl_SetSTCFocus 3288
+#define wxStyledTextCtrl_GetSTCFocus 3289
+#define wxStyledTextCtrl_SetStatus 3290
+#define wxStyledTextCtrl_GetStatus 3291
+#define wxStyledTextCtrl_SetMouseDownCaptures 3292
+#define wxStyledTextCtrl_GetMouseDownCaptures 3293
+#define wxStyledTextCtrl_SetSTCCursor 3294
+#define wxStyledTextCtrl_GetSTCCursor 3295
+#define wxStyledTextCtrl_SetControlCharSymbol 3296
+#define wxStyledTextCtrl_GetControlCharSymbol 3297
+#define wxStyledTextCtrl_WordPartLeft 3298
+#define wxStyledTextCtrl_WordPartLeftExtend 3299
+#define wxStyledTextCtrl_WordPartRight 3300
+#define wxStyledTextCtrl_WordPartRightExtend 3301
+#define wxStyledTextCtrl_SetVisiblePolicy 3302
+#define wxStyledTextCtrl_DelLineLeft 3303
+#define wxStyledTextCtrl_DelLineRight 3304
+#define wxStyledTextCtrl_GetXOffset 3305
+#define wxStyledTextCtrl_ChooseCaretX 3306
+#define wxStyledTextCtrl_SetXCaretPolicy 3307
+#define wxStyledTextCtrl_SetYCaretPolicy 3308
+#define wxStyledTextCtrl_GetPrintWrapMode 3309
+#define wxStyledTextCtrl_SetHotspotActiveForeground 3310
+#define wxStyledTextCtrl_SetHotspotActiveBackground 3311
+#define wxStyledTextCtrl_SetHotspotActiveUnderline 3312
+#define wxStyledTextCtrl_SetHotspotSingleLine 3313
+#define wxStyledTextCtrl_ParaDownExtend 3314
+#define wxStyledTextCtrl_ParaUp 3315
+#define wxStyledTextCtrl_ParaUpExtend 3316
+#define wxStyledTextCtrl_PositionBefore 3317
+#define wxStyledTextCtrl_PositionAfter 3318
+#define wxStyledTextCtrl_CopyRange 3319
+#define wxStyledTextCtrl_CopyText 3320
+#define wxStyledTextCtrl_SetSelectionMode 3321
+#define wxStyledTextCtrl_GetSelectionMode 3322
+#define wxStyledTextCtrl_LineDownRectExtend 3323
+#define wxStyledTextCtrl_LineUpRectExtend 3324
+#define wxStyledTextCtrl_CharLeftRectExtend 3325
+#define wxStyledTextCtrl_CharRightRectExtend 3326
+#define wxStyledTextCtrl_HomeRectExtend 3327
+#define wxStyledTextCtrl_VCHomeRectExtend 3328
+#define wxStyledTextCtrl_LineEndRectExtend 3329
+#define wxStyledTextCtrl_PageUpRectExtend 3330
+#define wxStyledTextCtrl_PageDownRectExtend 3331
+#define wxStyledTextCtrl_StutteredPageUp 3332
+#define wxStyledTextCtrl_StutteredPageUpExtend 3333
+#define wxStyledTextCtrl_StutteredPageDown 3334
+#define wxStyledTextCtrl_StutteredPageDownExtend 3335
+#define wxStyledTextCtrl_WordLeftEnd 3336
+#define wxStyledTextCtrl_WordLeftEndExtend 3337
+#define wxStyledTextCtrl_WordRightEnd 3338
+#define wxStyledTextCtrl_WordRightEndExtend 3339
+#define wxStyledTextCtrl_SetWhitespaceChars 3340
+#define wxStyledTextCtrl_SetCharsDefault 3341
+#define wxStyledTextCtrl_AutoCompGetCurrent 3342
+#define wxStyledTextCtrl_Allocate 3343
+#define wxStyledTextCtrl_FindColumn 3344
+#define wxStyledTextCtrl_GetCaretSticky 3345
+#define wxStyledTextCtrl_SetCaretSticky 3346
+#define wxStyledTextCtrl_ToggleCaretSticky 3347
+#define wxStyledTextCtrl_SetPasteConvertEndings 3348
+#define wxStyledTextCtrl_GetPasteConvertEndings 3349
+#define wxStyledTextCtrl_SelectionDuplicate 3350
+#define wxStyledTextCtrl_SetCaretLineBackAlpha 3351
+#define wxStyledTextCtrl_GetCaretLineBackAlpha 3352
+#define wxStyledTextCtrl_StartRecord 3353
+#define wxStyledTextCtrl_StopRecord 3354
+#define wxStyledTextCtrl_SetLexer 3355
+#define wxStyledTextCtrl_GetLexer 3356
+#define wxStyledTextCtrl_Colourise 3357
+#define wxStyledTextCtrl_SetProperty 3358
+#define wxStyledTextCtrl_SetKeyWords 3359
+#define wxStyledTextCtrl_SetLexerLanguage 3360
+#define wxStyledTextCtrl_GetProperty 3361
+#define wxStyledTextCtrl_GetStyleBitsNeeded 3362
+#define wxStyledTextCtrl_GetCurrentLine 3363
+#define wxStyledTextCtrl_StyleSetSpec 3364
+#define wxStyledTextCtrl_StyleSetFont 3365
+#define wxStyledTextCtrl_StyleSetFontAttr 3366
+#define wxStyledTextCtrl_StyleSetCharacterSet 3367
+#define wxStyledTextCtrl_StyleSetFontEncoding 3368
+#define wxStyledTextCtrl_CmdKeyExecute 3369
+#define wxStyledTextCtrl_SetMargins 3370
+#define wxStyledTextCtrl_GetSelection 3371
+#define wxStyledTextCtrl_PointFromPosition 3372
+#define wxStyledTextCtrl_ScrollToLine 3373
+#define wxStyledTextCtrl_ScrollToColumn 3374
+#define wxStyledTextCtrl_SetVScrollBar 3375
+#define wxStyledTextCtrl_SetHScrollBar 3376
+#define wxStyledTextCtrl_GetLastKeydownProcessed 3377
+#define wxStyledTextCtrl_SetLastKeydownProcessed 3378
+#define wxStyledTextCtrl_SaveFile 3379
+#define wxStyledTextCtrl_LoadFile 3380
+#define wxStyledTextCtrl_DoDragOver 3381
+#define wxStyledTextCtrl_DoDropText 3382
+#define wxStyledTextCtrl_GetUseAntiAliasing 3383
+#define wxStyledTextCtrl_AddTextRaw 3384
+#define wxStyledTextCtrl_InsertTextRaw 3385
+#define wxStyledTextCtrl_GetCurLineRaw 3386
+#define wxStyledTextCtrl_GetLineRaw 3387
+#define wxStyledTextCtrl_GetSelectedTextRaw 3388
+#define wxStyledTextCtrl_GetTextRangeRaw 3389
+#define wxStyledTextCtrl_SetTextRaw 3390
+#define wxStyledTextCtrl_GetTextRaw 3391
+#define wxStyledTextCtrl_AppendTextRaw 3392
+#define wxArtProvider_GetBitmap 3393
+#define wxArtProvider_GetIcon 3394
+#define wxTreeEvent_GetKeyCode 3395
+#define wxTreeEvent_GetItem 3396
+#define wxTreeEvent_GetKeyEvent 3397
+#define wxTreeEvent_GetLabel 3398
+#define wxTreeEvent_GetOldItem 3399
+#define wxTreeEvent_GetPoint 3400
+#define wxTreeEvent_IsEditCancelled 3401
+#define wxTreeEvent_SetToolTip 3402
+#define wxNotebookEvent_GetOldSelection 3403
+#define wxNotebookEvent_GetSelection 3404
+#define wxNotebookEvent_SetOldSelection 3405
+#define wxNotebookEvent_SetSelection 3406
+#define wxFileDataObject_new 3407
+#define wxFileDataObject_AddFile 3408
+#define wxFileDataObject_GetFilenames 3409
+#define wxFileDataObject_destroy 3410
+#define wxTextDataObject_new 3411
+#define wxTextDataObject_GetTextLength 3412
+#define wxTextDataObject_GetText 3413
+#define wxTextDataObject_SetText 3414
+#define wxTextDataObject_destroy 3415
+#define wxBitmapDataObject_new_1_1 3416
+#define wxBitmapDataObject_new_1_0 3417
+#define wxBitmapDataObject_GetBitmap 3418
+#define wxBitmapDataObject_SetBitmap 3419
+#define wxBitmapDataObject_destroy 3420
+#define wxClipboard_new 3422
+#define wxClipboard_destruct 3423
+#define wxClipboard_AddData 3424
+#define wxClipboard_Clear 3425
+#define wxClipboard_Close 3426
+#define wxClipboard_Flush 3427
+#define wxClipboard_GetData 3428
+#define wxClipboard_IsOpened 3429
+#define wxClipboard_Open 3430
+#define wxClipboard_SetData 3431
+#define wxClipboard_UsePrimarySelection 3433
+#define wxClipboard_IsSupported 3434
+#define wxClipboard_Get 3435
+#define wxSpinEvent_GetPosition 3436
+#define wxSpinEvent_SetPosition 3437
+#define wxSplitterWindow_new_0 3438
+#define wxSplitterWindow_new_2 3439
+#define wxSplitterWindow_destruct 3440
+#define wxSplitterWindow_Create 3441
+#define wxSplitterWindow_GetMinimumPaneSize 3442
+#define wxSplitterWindow_GetSashGravity 3443
+#define wxSplitterWindow_GetSashPosition 3444
+#define wxSplitterWindow_GetSplitMode 3445
+#define wxSplitterWindow_GetWindow1 3446
+#define wxSplitterWindow_GetWindow2 3447
+#define wxSplitterWindow_Initialize 3448
+#define wxSplitterWindow_IsSplit 3449
+#define wxSplitterWindow_ReplaceWindow 3450
+#define wxSplitterWindow_SetSashGravity 3451
+#define wxSplitterWindow_SetSashPosition 3452
+#define wxSplitterWindow_SetSashSize 3453
+#define wxSplitterWindow_SetMinimumPaneSize 3454
+#define wxSplitterWindow_SetSplitMode 3455
+#define wxSplitterWindow_SplitHorizontally 3456
+#define wxSplitterWindow_SplitVertically 3457
+#define wxSplitterWindow_Unsplit 3458
+#define wxSplitterWindow_UpdateSize 3459
+#define wxSplitterEvent_GetSashPosition 3460
+#define wxSplitterEvent_GetX 3461
+#define wxSplitterEvent_GetY 3462
+#define wxSplitterEvent_GetWindowBeingRemoved 3463
+#define wxSplitterEvent_SetSashPosition 3464
+#define wxHtmlWindow_new_0 3465
+#define wxHtmlWindow_new_2 3466
+#define wxHtmlWindow_AppendToPage 3467
+#define wxHtmlWindow_GetOpenedAnchor 3468
+#define wxHtmlWindow_GetOpenedPage 3469
+#define wxHtmlWindow_GetOpenedPageTitle 3470
+#define wxHtmlWindow_GetRelatedFrame 3471
+#define wxHtmlWindow_HistoryBack 3472
+#define wxHtmlWindow_HistoryCanBack 3473
+#define wxHtmlWindow_HistoryCanForward 3474
+#define wxHtmlWindow_HistoryClear 3475
+#define wxHtmlWindow_HistoryForward 3476
+#define wxHtmlWindow_LoadFile 3477
+#define wxHtmlWindow_LoadPage 3478
+#define wxHtmlWindow_SelectAll 3479
+#define wxHtmlWindow_SelectionToText 3480
+#define wxHtmlWindow_SelectLine 3481
+#define wxHtmlWindow_SelectWord 3482
+#define wxHtmlWindow_SetBorders 3483
+#define wxHtmlWindow_SetFonts 3484
+#define wxHtmlWindow_SetPage 3485
+#define wxHtmlWindow_SetRelatedFrame 3486
+#define wxHtmlWindow_SetRelatedStatusBar 3487
+#define wxHtmlWindow_ToText 3488
+#define wxHtmlWindow_destroy 3489
+#define wxHtmlLinkEvent_GetLinkInfo 3490
+#define wxSystemSettings_GetColour 3491
+#define wxSystemSettings_GetFont 3492
+#define wxSystemSettings_GetMetric 3493
+#define wxSystemSettings_GetScreenType 3494
+#define wxSystemOptions_GetOption 3495
+#define wxSystemOptions_GetOptionInt 3496
+#define wxSystemOptions_HasOption 3497
+#define wxSystemOptions_IsFalse 3498
+#define wxSystemOptions_SetOption_2_1 3499
+#define wxSystemOptions_SetOption_2_0 3500
+#define wxAuiNotebookEvent_SetSelection 3501
+#define wxAuiNotebookEvent_GetSelection 3502
+#define wxAuiNotebookEvent_SetOldSelection 3503
+#define wxAuiNotebookEvent_GetOldSelection 3504
+#define wxAuiNotebookEvent_SetDragSource 3505
+#define wxAuiNotebookEvent_GetDragSource 3506
+#define wxAuiManagerEvent_SetManager 3507
+#define wxAuiManagerEvent_GetManager 3508
+#define wxAuiManagerEvent_SetPane 3509
+#define wxAuiManagerEvent_GetPane 3510
+#define wxAuiManagerEvent_SetButton 3511
+#define wxAuiManagerEvent_GetButton 3512
+#define wxAuiManagerEvent_SetDC 3513
+#define wxAuiManagerEvent_GetDC 3514
+#define wxAuiManagerEvent_Veto 3515
+#define wxAuiManagerEvent_GetVeto 3516
+#define wxAuiManagerEvent_SetCanVeto 3517
+#define wxAuiManagerEvent_CanVeto 3518
+#define wxLogNull_new 3519
+#define wxLogNull_destroy 3520
+#define wxTaskBarIcon_new 3521
+#define wxTaskBarIcon_destruct 3522
+#define wxTaskBarIcon_PopupMenu 3523
+#define wxTaskBarIcon_RemoveIcon 3524
+#define wxTaskBarIcon_SetIcon 3525
diff --git a/lib/wx/include/wx.hrl b/lib/wx/include/wx.hrl
index a48c756dea..aa1c81ac0f 100644
--- a/lib/wx/include/wx.hrl
+++ b/lib/wx/include/wx.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -255,6 +255,10 @@
-type wxMouseEventType() :: left_down | left_up | middle_down | middle_up | right_down | right_up | motion | enter_window | leave_window | left_dclick | middle_dclick | right_dclick | mousewheel.
-type wxMouse() :: #wxMouse{}. %% Callback event: {@link wxMouseEvent}
+-record(wxClipboardText, {type :: wxClipboardTextEventType()}). %% Callback event: {@link wxClipboardTextEvent}
+-type wxClipboardTextEventType() :: command_text_copy | command_text_cut | command_text_paste.
+-type wxClipboardText() :: #wxClipboardText{}. %% Callback event: {@link wxClipboardTextEvent}
+
-record(wxWindowCreate, {type :: wxWindowCreateEventType()}). %% Callback event: {@link wxWindowCreateEvent}
-type wxWindowCreateEventType() :: create.
-type wxWindowCreate() :: #wxWindowCreate{}. %% Callback event: {@link wxWindowCreateEvent}
@@ -308,8 +312,8 @@
-type wxTreeEventType() :: command_tree_begin_drag | command_tree_begin_rdrag | command_tree_begin_label_edit | command_tree_end_label_edit | command_tree_delete_item | command_tree_get_info | command_tree_set_info | command_tree_item_expanded | command_tree_item_expanding | command_tree_item_collapsed | command_tree_item_collapsing | command_tree_sel_changed | command_tree_sel_changing | command_tree_key_down | command_tree_item_activated | command_tree_item_right_click | command_tree_item_middle_click | command_tree_end_drag | command_tree_state_image_click | command_tree_item_gettooltip | command_tree_item_menu.
-type wxTree() :: #wxTree{}. %% Callback event: {@link wxTreeEvent}
--type event() :: wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy().
--type wxEventType() :: wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType().
+-type event() :: wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClipboardText() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy().
+-type wxEventType() :: wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxClipboardTextEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType().
%% Hardcoded Records
-record(wxMouseState, {x :: integer(), y :: integer(),
diff --git a/lib/wx/src/gen/wxClipboardTextEvent.erl b/lib/wx/src/gen/wxClipboardTextEvent.erl
new file mode 100644
index 0000000000..ff040ce7fd
--- /dev/null
+++ b/lib/wx/src/gen/wxClipboardTextEvent.erl
@@ -0,0 +1,87 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%% This file is generated DO NOT EDIT
+
+%% @doc See external documentation: <a href="http://www.wxwidgets.org/manuals/stable/wx_wxclipboardtextevent.html">wxClipboardTextEvent</a>.
+%% <dl><dt>Use {@link wxEvtHandler:connect/3.} with EventType:</dt>
+%% <dd><em>command_text_copy</em>, <em>command_text_cut</em>, <em>command_text_paste</em></dd></dl>
+%% See also the message variant {@link wxEvtHandler:wxClipboardText(). #wxClipboardText{}} event record type.
+%%
+%% <p>This class is derived (and can use functions) from:
+%% <br />{@link wxCommandEvent}
+%% <br />{@link wxEvent}
+%% </p>
+%% @type wxClipboardTextEvent(). An object reference, The representation is internal
+%% and can be changed without notice. It can't be used for comparsion
+%% stored on disc or distributed for use on other nodes.
+
+-module(wxClipboardTextEvent).
+-include("wxe.hrl").
+-export([]).
+
+%% inherited exports
+-export([getClientData/1,getExtraLong/1,getId/1,getInt/1,getSelection/1,getSkipped/1,
+ getString/1,getTimestamp/1,isChecked/1,isCommandEvent/1,isSelection/1,
+ parent_class/1,resumePropagation/2,setInt/2,setString/2,shouldPropagate/1,
+ skip/1,skip/2,stopPropagation/1]).
+
+-export_type([wxClipboardTextEvent/0]).
+%% @hidden
+parent_class(wxCommandEvent) -> true;
+parent_class(wxEvent) -> true;
+parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
+
+-type wxClipboardTextEvent() :: wx:wx_object().
+ %% From wxCommandEvent
+%% @hidden
+setString(This,S) -> wxCommandEvent:setString(This,S).
+%% @hidden
+setInt(This,I) -> wxCommandEvent:setInt(This,I).
+%% @hidden
+isSelection(This) -> wxCommandEvent:isSelection(This).
+%% @hidden
+isChecked(This) -> wxCommandEvent:isChecked(This).
+%% @hidden
+getString(This) -> wxCommandEvent:getString(This).
+%% @hidden
+getSelection(This) -> wxCommandEvent:getSelection(This).
+%% @hidden
+getInt(This) -> wxCommandEvent:getInt(This).
+%% @hidden
+getExtraLong(This) -> wxCommandEvent:getExtraLong(This).
+%% @hidden
+getClientData(This) -> wxCommandEvent:getClientData(This).
+ %% From wxEvent
+%% @hidden
+stopPropagation(This) -> wxEvent:stopPropagation(This).
+%% @hidden
+skip(This, Options) -> wxEvent:skip(This, Options).
+%% @hidden
+skip(This) -> wxEvent:skip(This).
+%% @hidden
+shouldPropagate(This) -> wxEvent:shouldPropagate(This).
+%% @hidden
+resumePropagation(This,PropagationLevel) -> wxEvent:resumePropagation(This,PropagationLevel).
+%% @hidden
+isCommandEvent(This) -> wxEvent:isCommandEvent(This).
+%% @hidden
+getTimestamp(This) -> wxEvent:getTimestamp(This).
+%% @hidden
+getSkipped(This) -> wxEvent:getSkipped(This).
+%% @hidden
+getId(This) -> wxEvent:getId(This).
diff --git a/lib/wx/src/gen/wxGrid.erl b/lib/wx/src/gen/wxGrid.erl
index 2f4b45b1bc..39cb084e2f 100644
--- a/lib/wx/src/gen/wxGrid.erl
+++ b/lib/wx/src/gen/wxGrid.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -112,13 +112,13 @@
scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,
- setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,setPalette/2,
- setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,
- setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,
- setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,
- setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
+ setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,
+ setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,
+ setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
@@ -2151,6 +2151,8 @@ calcScrolledPosition(This,X,Y) -> wxScrolledWindow:calcScrolledPosition(This,X,Y
calcScrolledPosition(This,Pt) -> wxScrolledWindow:calcScrolledPosition(This,Pt).
%% From wxPanel
%% @hidden
+setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
+%% @hidden
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
diff --git a/lib/wx/src/gen/wxHtmlWindow.erl b/lib/wx/src/gen/wxHtmlWindow.erl
index 4820f7d075..bbe1445463 100644
--- a/lib/wx/src/gen/wxHtmlWindow.erl
+++ b/lib/wx/src/gen/wxHtmlWindow.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -66,13 +66,13 @@
scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,
- setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,setPalette/2,
- setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,
- setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,
- setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,
- setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
+ setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,
+ setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,
+ setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
@@ -364,6 +364,8 @@ calcScrolledPosition(This,X,Y) -> wxScrolledWindow:calcScrolledPosition(This,X,Y
calcScrolledPosition(This,Pt) -> wxScrolledWindow:calcScrolledPosition(This,Pt).
%% From wxPanel
%% @hidden
+setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
+%% @hidden
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
diff --git a/lib/wx/src/gen/wxPanel.erl b/lib/wx/src/gen/wxPanel.erl
index 88c1b119a8..30a0e32ffc 100644
--- a/lib/wx/src/gen/wxPanel.erl
+++ b/lib/wx/src/gen/wxPanel.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -28,7 +28,7 @@
-module(wxPanel).
-include("wxe.hrl").
--export([destroy/1,initDialog/1,new/0,new/1,new/2,new/5,new/6]).
+-export([destroy/1,initDialog/1,new/0,new/1,new/2,new/5,new/6,setFocusIgnoringChildren/1]).
%% inherited exports
-export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
@@ -137,6 +137,14 @@ initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
wxe_util:cast(?wxPanel_InitDialog,
<<ThisRef:32/?UI>>).
+%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxpanel.html#wxpanelsetfocusignoringchildren">external documentation</a>.
+-spec setFocusIgnoringChildren(This) -> ok when
+ This::wxPanel().
+setFocusIgnoringChildren(#wx_ref{type=ThisT,ref=ThisRef}) ->
+ ?CLASS(ThisT,wxPanel),
+ wxe_util:cast(?wxPanel_SetFocusIgnoringChildren,
+ <<ThisRef:32/?UI>>).
+
%% @doc Destroys this object, do not use object again
-spec destroy(This::wxPanel()) -> ok.
destroy(Obj=#wx_ref{type=Type}) ->
diff --git a/lib/wx/src/gen/wxPreviewCanvas.erl b/lib/wx/src/gen/wxPreviewCanvas.erl
index cc9f43e5e4..7d25ee4bc4 100644
--- a/lib/wx/src/gen/wxPreviewCanvas.erl
+++ b/lib/wx/src/gen/wxPreviewCanvas.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -61,13 +61,13 @@
scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,
- setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,setPalette/2,
- setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,
- setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,
- setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,
- setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
+ setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,
+ setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,
+ setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
@@ -114,6 +114,8 @@ calcScrolledPosition(This,X,Y) -> wxScrolledWindow:calcScrolledPosition(This,X,Y
calcScrolledPosition(This,Pt) -> wxScrolledWindow:calcScrolledPosition(This,Pt).
%% From wxPanel
%% @hidden
+setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
+%% @hidden
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
diff --git a/lib/wx/src/gen/wxPreviewControlBar.erl b/lib/wx/src/gen/wxPreviewControlBar.erl
index dce3feb9ea..a56adf9ebe 100644
--- a/lib/wx/src/gen/wxPreviewControlBar.erl
+++ b/lib/wx/src/gen/wxPreviewControlBar.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -58,8 +58,8 @@
screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
@@ -145,6 +145,8 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxPanel
%% @hidden
+setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
+%% @hidden
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
diff --git a/lib/wx/src/gen/wxScrolledWindow.erl b/lib/wx/src/gen/wxScrolledWindow.erl
index 9141487a8c..dbc5eb010e 100644
--- a/lib/wx/src/gen/wxScrolledWindow.erl
+++ b/lib/wx/src/gen/wxScrolledWindow.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -60,8 +60,8 @@
screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
@@ -252,6 +252,8 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxPanel
%% @hidden
+setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
+%% @hidden
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
diff --git a/lib/wx/src/gen/wxStatusBar.erl b/lib/wx/src/gen/wxStatusBar.erl
index 31dab03b56..5e8a707c22 100644
--- a/lib/wx/src/gen/wxStatusBar.erl
+++ b/lib/wx/src/gen/wxStatusBar.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -28,7 +28,7 @@
-module(wxStatusBar).
-include("wxe.hrl").
--export([create/2,create/3,destroy/1,getFieldRect/3,getFieldsCount/1,getStatusText/1,
+-export([create/2,create/3,destroy/1,getFieldRect/2,getFieldsCount/1,getStatusText/1,
getStatusText/2,new/0,new/1,new/2,popStatusText/1,popStatusText/2,pushStatusText/2,
pushStatusText/3,setFieldsCount/2,setFieldsCount/3,setMinHeight/2,
setStatusStyles/2,setStatusText/2,setStatusText/3,setStatusWidths/2]).
@@ -132,13 +132,14 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxstatusbar.html#wxstatusbargetfieldrect">external documentation</a>.
--spec getFieldRect(This, I, Rect) -> boolean() when
- This::wxStatusBar(), I::integer(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
-getFieldRect(#wx_ref{type=ThisT,ref=ThisRef},I,{RectX,RectY,RectW,RectH})
- when is_integer(I),is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
+-spec getFieldRect(This, I) -> Result when
+ Result ::{Res ::boolean(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}},
+ This::wxStatusBar(), I::integer().
+getFieldRect(#wx_ref{type=ThisT,ref=ThisRef},I)
+ when is_integer(I) ->
?CLASS(ThisT,wxStatusBar),
wxe_util:call(?wxStatusBar_GetFieldRect,
- <<ThisRef:32/?UI,I:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
+ <<ThisRef:32/?UI,I:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxstatusbar.html#wxstatusbargetfieldscount">external documentation</a>.
-spec getFieldsCount(This) -> integer() when
diff --git a/lib/wx/src/gen/wxe_debug.hrl b/lib/wx/src/gen/wxe_debug.hrl
index 29cb2b05e6..eb1f89b845 100644
--- a/lib/wx/src/gen/wxe_debug.hrl
+++ b/lib/wx/src/gen/wxe_debug.hrl
@@ -241,3069 +241,3070 @@ wxdebug_table() ->
{334, {wxPanel, new_2, 2}},
{335, {wxPanel, destruct, 0}},
{336, {wxPanel, initDialog, 0}},
- {337, {wxScrolledWindow, new_0, 0}},
- {338, {wxScrolledWindow, new_2, 2}},
- {339, {wxScrolledWindow, destruct, 0}},
- {340, {wxScrolledWindow, calcScrolledPosition_4, 4}},
- {341, {wxScrolledWindow, calcScrolledPosition_1, 1}},
- {342, {wxScrolledWindow, calcUnscrolledPosition_4, 4}},
- {343, {wxScrolledWindow, calcUnscrolledPosition_1, 1}},
- {344, {wxScrolledWindow, enableScrolling, 2}},
- {345, {wxScrolledWindow, getScrollPixelsPerUnit, 2}},
- {346, {wxScrolledWindow, getViewStart, 2}},
- {347, {wxScrolledWindow, doPrepareDC, 1}},
- {348, {wxScrolledWindow, prepareDC, 1}},
- {349, {wxScrolledWindow, scroll, 2}},
- {350, {wxScrolledWindow, setScrollbars, 5}},
- {351, {wxScrolledWindow, setScrollRate, 2}},
- {352, {wxScrolledWindow, setTargetWindow, 1}},
- {353, {wxSashWindow, new_0, 0}},
- {354, {wxSashWindow, new_2, 2}},
- {355, {wxSashWindow, destruct, 0}},
- {356, {wxSashWindow, getSashVisible, 1}},
- {357, {wxSashWindow, getMaximumSizeX, 0}},
- {358, {wxSashWindow, getMaximumSizeY, 0}},
- {359, {wxSashWindow, getMinimumSizeX, 0}},
- {360, {wxSashWindow, getMinimumSizeY, 0}},
- {361, {wxSashWindow, setMaximumSizeX, 1}},
- {362, {wxSashWindow, setMaximumSizeY, 1}},
- {363, {wxSashWindow, setMinimumSizeX, 1}},
- {364, {wxSashWindow, setMinimumSizeY, 1}},
- {365, {wxSashWindow, setSashVisible, 2}},
- {366, {wxSashLayoutWindow, new_0, 0}},
- {367, {wxSashLayoutWindow, new_2, 2}},
- {368, {wxSashLayoutWindow, create, 2}},
- {369, {wxSashLayoutWindow, getAlignment, 0}},
- {370, {wxSashLayoutWindow, getOrientation, 0}},
- {371, {wxSashLayoutWindow, setAlignment, 1}},
- {372, {wxSashLayoutWindow, setDefaultSize, 1}},
- {373, {wxSashLayoutWindow, setOrientation, 1}},
- {374, {wxSashLayoutWindow, 'Destroy', undefined}},
- {375, {wxGrid, new_0, 0}},
- {376, {wxGrid, new_3, 3}},
- {377, {wxGrid, new_4, 4}},
- {378, {wxGrid, destruct, 0}},
- {379, {wxGrid, appendCols, 1}},
- {380, {wxGrid, appendRows, 1}},
- {381, {wxGrid, autoSize, 0}},
- {382, {wxGrid, autoSizeColumn, 2}},
- {383, {wxGrid, autoSizeColumns, 1}},
- {384, {wxGrid, autoSizeRow, 2}},
- {385, {wxGrid, autoSizeRows, 1}},
- {386, {wxGrid, beginBatch, 0}},
- {387, {wxGrid, blockToDeviceRect, 2}},
- {388, {wxGrid, canDragColSize, 0}},
- {389, {wxGrid, canDragRowSize, 0}},
- {390, {wxGrid, canDragGridSize, 0}},
- {391, {wxGrid, canEnableCellControl, 0}},
- {392, {wxGrid, cellToRect_2, 2}},
- {393, {wxGrid, cellToRect_1, 1}},
- {394, {wxGrid, clearGrid, 0}},
- {395, {wxGrid, clearSelection, 0}},
- {396, {wxGrid, createGrid, 3}},
- {397, {wxGrid, deleteCols, 1}},
- {398, {wxGrid, deleteRows, 1}},
- {399, {wxGrid, disableCellEditControl, 0}},
- {400, {wxGrid, disableDragColSize, 0}},
- {401, {wxGrid, disableDragGridSize, 0}},
- {402, {wxGrid, disableDragRowSize, 0}},
- {403, {wxGrid, enableCellEditControl, 1}},
- {404, {wxGrid, enableDragColSize, 1}},
- {405, {wxGrid, enableDragGridSize, 1}},
- {406, {wxGrid, enableDragRowSize, 1}},
- {407, {wxGrid, enableEditing, 1}},
- {408, {wxGrid, enableGridLines, 1}},
- {409, {wxGrid, endBatch, 0}},
- {410, {wxGrid, fit, 0}},
- {411, {wxGrid, forceRefresh, 0}},
- {412, {wxGrid, getBatchCount, 0}},
- {413, {wxGrid, getCellAlignment, 4}},
- {414, {wxGrid, getCellBackgroundColour, 2}},
- {415, {wxGrid, getCellEditor, 2}},
- {416, {wxGrid, getCellFont, 2}},
- {417, {wxGrid, getCellRenderer, 2}},
- {418, {wxGrid, getCellTextColour, 2}},
- {419, {wxGrid, getCellValue_2, 2}},
- {420, {wxGrid, getCellValue_1, 1}},
- {421, {wxGrid, getColLabelAlignment, 2}},
- {422, {wxGrid, getColLabelSize, 0}},
- {423, {wxGrid, getColLabelValue, 1}},
- {424, {wxGrid, getColMinimalAcceptableWidth, 0}},
- {425, {wxGrid, getDefaultCellAlignment, 2}},
- {426, {wxGrid, getDefaultCellBackgroundColour, 0}},
- {427, {wxGrid, getDefaultCellFont, 0}},
- {428, {wxGrid, getDefaultCellTextColour, 0}},
- {429, {wxGrid, getDefaultColLabelSize, 0}},
- {430, {wxGrid, getDefaultColSize, 0}},
- {431, {wxGrid, getDefaultEditor, 0}},
- {432, {wxGrid, getDefaultEditorForCell_2, 2}},
- {433, {wxGrid, getDefaultEditorForCell_1, 1}},
- {434, {wxGrid, getDefaultEditorForType, 1}},
- {435, {wxGrid, getDefaultRenderer, 0}},
- {436, {wxGrid, getDefaultRendererForCell, 2}},
- {437, {wxGrid, getDefaultRendererForType, 1}},
- {438, {wxGrid, getDefaultRowLabelSize, 0}},
- {439, {wxGrid, getDefaultRowSize, 0}},
- {440, {wxGrid, getGridCursorCol, 0}},
- {441, {wxGrid, getGridCursorRow, 0}},
- {442, {wxGrid, getGridLineColour, 0}},
- {443, {wxGrid, gridLinesEnabled, 0}},
- {444, {wxGrid, getLabelBackgroundColour, 0}},
- {445, {wxGrid, getLabelFont, 0}},
- {446, {wxGrid, getLabelTextColour, 0}},
- {447, {wxGrid, getNumberCols, 0}},
- {448, {wxGrid, getNumberRows, 0}},
- {449, {wxGrid, getOrCreateCellAttr, 2}},
- {450, {wxGrid, getRowMinimalAcceptableHeight, 0}},
- {451, {wxGrid, getRowLabelAlignment, 2}},
- {452, {wxGrid, getRowLabelSize, 0}},
- {453, {wxGrid, getRowLabelValue, 1}},
- {454, {wxGrid, getRowSize, 1}},
- {455, {wxGrid, getScrollLineX, 0}},
- {456, {wxGrid, getScrollLineY, 0}},
- {457, {wxGrid, getSelectedCells, 0}},
- {458, {wxGrid, getSelectedCols, 0}},
- {459, {wxGrid, getSelectedRows, 0}},
- {460, {wxGrid, getSelectionBackground, 0}},
- {461, {wxGrid, getSelectionBlockTopLeft, 0}},
- {462, {wxGrid, getSelectionBlockBottomRight, 0}},
- {463, {wxGrid, getSelectionForeground, 0}},
- {464, {wxGrid, getViewWidth, 0}},
- {465, {wxGrid, getGridWindow, 0}},
- {466, {wxGrid, getGridRowLabelWindow, 0}},
- {467, {wxGrid, getGridColLabelWindow, 0}},
- {468, {wxGrid, getGridCornerLabelWindow, 0}},
- {469, {wxGrid, hideCellEditControl, 0}},
- {470, {wxGrid, insertCols, 1}},
- {471, {wxGrid, insertRows, 1}},
- {472, {wxGrid, isCellEditControlEnabled, 0}},
- {473, {wxGrid, isCurrentCellReadOnly, 0}},
- {474, {wxGrid, isEditable, 0}},
- {475, {wxGrid, isInSelection_2, 2}},
- {476, {wxGrid, isInSelection_1, 1}},
- {477, {wxGrid, isReadOnly, 2}},
- {478, {wxGrid, isSelection, 0}},
- {479, {wxGrid, isVisible_3, 3}},
- {480, {wxGrid, isVisible_2, 2}},
- {481, {wxGrid, makeCellVisible_2, 2}},
- {482, {wxGrid, makeCellVisible_1, 1}},
- {483, {wxGrid, moveCursorDown, 1}},
- {484, {wxGrid, moveCursorLeft, 1}},
- {485, {wxGrid, moveCursorRight, 1}},
- {486, {wxGrid, moveCursorUp, 1}},
- {487, {wxGrid, moveCursorDownBlock, 1}},
- {488, {wxGrid, moveCursorLeftBlock, 1}},
- {489, {wxGrid, moveCursorRightBlock, 1}},
- {490, {wxGrid, moveCursorUpBlock, 1}},
- {491, {wxGrid, movePageDown, 0}},
- {492, {wxGrid, movePageUp, 0}},
- {493, {wxGrid, registerDataType, 3}},
- {494, {wxGrid, saveEditControlValue, 0}},
- {495, {wxGrid, selectAll, 0}},
- {496, {wxGrid, selectBlock_5, 5}},
- {497, {wxGrid, selectBlock_3, 3}},
- {498, {wxGrid, selectCol, 2}},
- {499, {wxGrid, selectRow, 2}},
- {500, {wxGrid, setCellAlignment_4, 4}},
- {501, {wxGrid, setCellAlignment_3, 3}},
- {502, {wxGrid, setCellAlignment_1, 1}},
- {503, {wxGrid, setCellBackgroundColour_3_0, 3}},
- {504, {wxGrid, setCellBackgroundColour_1, 1}},
- {505, {wxGrid, setCellBackgroundColour_3_1, 3}},
- {506, {wxGrid, setCellEditor, 3}},
- {507, {wxGrid, setCellFont, 3}},
- {508, {wxGrid, setCellRenderer, 3}},
- {509, {wxGrid, setCellTextColour_3_0, 3}},
- {510, {wxGrid, setCellTextColour_3_1, 3}},
- {511, {wxGrid, setCellTextColour_1, 1}},
- {512, {wxGrid, setCellValue_3_0, 3}},
- {513, {wxGrid, setCellValue_2, 2}},
- {514, {wxGrid, setCellValue_3_1, 3}},
- {515, {wxGrid, setColAttr, 2}},
- {516, {wxGrid, setColFormatBool, 1}},
- {517, {wxGrid, setColFormatNumber, 1}},
- {518, {wxGrid, setColFormatFloat, 2}},
- {519, {wxGrid, setColFormatCustom, 2}},
- {520, {wxGrid, setColLabelAlignment, 2}},
- {521, {wxGrid, setColLabelSize, 1}},
- {522, {wxGrid, setColLabelValue, 2}},
- {523, {wxGrid, setColMinimalWidth, 2}},
- {524, {wxGrid, setColMinimalAcceptableWidth, 1}},
- {525, {wxGrid, setColSize, 2}},
- {526, {wxGrid, setDefaultCellAlignment, 2}},
- {527, {wxGrid, setDefaultCellBackgroundColour, 1}},
- {528, {wxGrid, setDefaultCellFont, 1}},
- {529, {wxGrid, setDefaultCellTextColour, 1}},
- {530, {wxGrid, setDefaultEditor, 1}},
- {531, {wxGrid, setDefaultRenderer, 1}},
- {532, {wxGrid, setDefaultColSize, 2}},
- {533, {wxGrid, setDefaultRowSize, 2}},
- {534, {wxGrid, setGridCursor, 2}},
- {535, {wxGrid, setGridLineColour, 1}},
- {536, {wxGrid, setLabelBackgroundColour, 1}},
- {537, {wxGrid, setLabelFont, 1}},
- {538, {wxGrid, setLabelTextColour, 1}},
- {539, {wxGrid, setMargins, 2}},
- {540, {wxGrid, setReadOnly, 3}},
- {541, {wxGrid, setRowAttr, 2}},
- {542, {wxGrid, setRowLabelAlignment, 2}},
- {543, {wxGrid, setRowLabelSize, 1}},
- {544, {wxGrid, setRowLabelValue, 2}},
- {545, {wxGrid, setRowMinimalHeight, 2}},
- {546, {wxGrid, setRowMinimalAcceptableHeight, 1}},
- {547, {wxGrid, setRowSize, 2}},
- {548, {wxGrid, setScrollLineX, 1}},
- {549, {wxGrid, setScrollLineY, 1}},
- {550, {wxGrid, setSelectionBackground, 1}},
- {551, {wxGrid, setSelectionForeground, 1}},
- {552, {wxGrid, setSelectionMode, 1}},
- {553, {wxGrid, showCellEditControl, 0}},
- {554, {wxGrid, xToCol, 2}},
- {555, {wxGrid, xToEdgeOfCol, 1}},
- {556, {wxGrid, yToEdgeOfRow, 1}},
- {557, {wxGrid, yToRow, 1}},
- {558, {wxGridCellRenderer, draw, 7}},
- {559, {wxGridCellRenderer, getBestSize, 5}},
- {560, {wxGridCellEditor, create, 3}},
- {561, {wxGridCellEditor, isCreated, 0}},
- {562, {wxGridCellEditor, setSize, 1}},
- {563, {wxGridCellEditor, show, 2}},
- {564, {wxGridCellEditor, paintBackground, 2}},
- {565, {wxGridCellEditor, beginEdit, 3}},
- {566, {wxGridCellEditor, endEdit, 3}},
- {567, {wxGridCellEditor, reset, 0}},
- {568, {wxGridCellEditor, startingKey, 1}},
- {569, {wxGridCellEditor, startingClick, 0}},
- {570, {wxGridCellEditor, handleReturn, 1}},
- {571, {wxGridCellBoolRenderer, new, 0}},
- {572, {wxGridCellBoolRenderer, 'Destroy', undefined}},
- {573, {wxGridCellBoolEditor, new, 0}},
- {574, {wxGridCellBoolEditor, isTrueValue, 1}},
- {575, {wxGridCellBoolEditor, useStringValues, 1}},
- {576, {wxGridCellBoolEditor, 'Destroy', undefined}},
- {577, {wxGridCellFloatRenderer, new, 1}},
- {578, {wxGridCellFloatRenderer, getPrecision, 0}},
- {579, {wxGridCellFloatRenderer, getWidth, 0}},
- {580, {wxGridCellFloatRenderer, setParameters, 1}},
- {581, {wxGridCellFloatRenderer, setPrecision, 1}},
- {582, {wxGridCellFloatRenderer, setWidth, 1}},
- {583, {wxGridCellFloatRenderer, 'Destroy', undefined}},
- {584, {wxGridCellFloatEditor, new, 1}},
- {585, {wxGridCellFloatEditor, setParameters, 1}},
- {586, {wxGridCellFloatEditor, 'Destroy', undefined}},
- {587, {wxGridCellStringRenderer, new, 0}},
- {588, {wxGridCellStringRenderer, 'Destroy', undefined}},
- {589, {wxGridCellTextEditor, new, 0}},
- {590, {wxGridCellTextEditor, setParameters, 1}},
- {591, {wxGridCellTextEditor, 'Destroy', undefined}},
- {593, {wxGridCellChoiceEditor, new, 2}},
- {594, {wxGridCellChoiceEditor, setParameters, 1}},
- {595, {wxGridCellChoiceEditor, 'Destroy', undefined}},
- {596, {wxGridCellNumberRenderer, new, 0}},
- {597, {wxGridCellNumberRenderer, 'Destroy', undefined}},
- {598, {wxGridCellNumberEditor, new, 1}},
- {599, {wxGridCellNumberEditor, getValue, 0}},
- {600, {wxGridCellNumberEditor, setParameters, 1}},
- {601, {wxGridCellNumberEditor, 'Destroy', undefined}},
- {602, {wxGridCellAttr, setTextColour, 1}},
- {603, {wxGridCellAttr, setBackgroundColour, 1}},
- {604, {wxGridCellAttr, setFont, 1}},
- {605, {wxGridCellAttr, setAlignment, 2}},
- {606, {wxGridCellAttr, setReadOnly, 1}},
- {607, {wxGridCellAttr, setRenderer, 1}},
- {608, {wxGridCellAttr, setEditor, 1}},
- {609, {wxGridCellAttr, hasTextColour, 0}},
- {610, {wxGridCellAttr, hasBackgroundColour, 0}},
- {611, {wxGridCellAttr, hasFont, 0}},
- {612, {wxGridCellAttr, hasAlignment, 0}},
- {613, {wxGridCellAttr, hasRenderer, 0}},
- {614, {wxGridCellAttr, hasEditor, 0}},
- {615, {wxGridCellAttr, getTextColour, 0}},
- {616, {wxGridCellAttr, getBackgroundColour, 0}},
- {617, {wxGridCellAttr, getFont, 0}},
- {618, {wxGridCellAttr, getAlignment, 2}},
- {619, {wxGridCellAttr, getRenderer, 3}},
- {620, {wxGridCellAttr, getEditor, 3}},
- {621, {wxGridCellAttr, isReadOnly, 0}},
- {622, {wxGridCellAttr, setDefAttr, 1}},
- {623, {wxDC, blit, 5}},
- {624, {wxDC, calcBoundingBox, 2}},
- {625, {wxDC, clear, 0}},
- {626, {wxDC, computeScaleAndOrigin, 0}},
- {627, {wxDC, crossHair, 1}},
- {628, {wxDC, destroyClippingRegion, 0}},
- {629, {wxDC, deviceToLogicalX, 1}},
- {630, {wxDC, deviceToLogicalXRel, 1}},
- {631, {wxDC, deviceToLogicalY, 1}},
- {632, {wxDC, deviceToLogicalYRel, 1}},
- {633, {wxDC, drawArc, 3}},
- {634, {wxDC, drawBitmap, 3}},
- {635, {wxDC, drawCheckMark, 1}},
- {636, {wxDC, drawCircle, 2}},
- {638, {wxDC, drawEllipse_2, 2}},
- {639, {wxDC, drawEllipse_1, 1}},
- {640, {wxDC, drawEllipticArc, 4}},
- {641, {wxDC, drawIcon, 2}},
- {642, {wxDC, drawLabel, 3}},
- {643, {wxDC, drawLine, 2}},
- {644, {wxDC, drawLines, 3}},
- {646, {wxDC, drawPolygon, 3}},
- {648, {wxDC, drawPoint, 1}},
- {650, {wxDC, drawRectangle_2, 2}},
- {651, {wxDC, drawRectangle_1, 1}},
- {652, {wxDC, drawRotatedText, 3}},
- {654, {wxDC, drawRoundedRectangle_3, 3}},
- {655, {wxDC, drawRoundedRectangle_2, 2}},
- {656, {wxDC, drawText, 2}},
- {657, {wxDC, endDoc, 0}},
- {658, {wxDC, endPage, 0}},
- {659, {wxDC, floodFill, 3}},
- {660, {wxDC, getBackground, 0}},
- {661, {wxDC, getBackgroundMode, 0}},
- {662, {wxDC, getBrush, 0}},
- {663, {wxDC, getCharHeight, 0}},
- {664, {wxDC, getCharWidth, 0}},
- {665, {wxDC, getClippingBox, 4}},
- {667, {wxDC, getFont, 0}},
- {668, {wxDC, getLayoutDirection, 0}},
- {669, {wxDC, getLogicalFunction, 0}},
- {670, {wxDC, getMapMode, 0}},
- {671, {wxDC, getMultiLineTextExtent_4, 4}},
- {672, {wxDC, getMultiLineTextExtent_1, 1}},
- {673, {wxDC, getPartialTextExtents, 2}},
- {674, {wxDC, getPen, 0}},
- {675, {wxDC, getPixel, 2}},
- {676, {wxDC, getPPI, 0}},
- {678, {wxDC, getSize, 0}},
- {680, {wxDC, getSizeMM, 0}},
- {681, {wxDC, getTextBackground, 0}},
- {682, {wxDC, getTextExtent_4, 4}},
- {683, {wxDC, getTextExtent_1, 1}},
- {685, {wxDC, getTextForeground, 0}},
- {686, {wxDC, getUserScale, 2}},
- {687, {wxDC, gradientFillConcentric_3, 3}},
- {688, {wxDC, gradientFillConcentric_4, 4}},
- {689, {wxDC, gradientFillLinear, 4}},
- {690, {wxDC, logicalToDeviceX, 1}},
- {691, {wxDC, logicalToDeviceXRel, 1}},
- {692, {wxDC, logicalToDeviceY, 1}},
- {693, {wxDC, logicalToDeviceYRel, 1}},
- {694, {wxDC, maxX, 0}},
- {695, {wxDC, maxY, 0}},
- {696, {wxDC, minX, 0}},
- {697, {wxDC, minY, 0}},
- {698, {wxDC, isOk, 0}},
- {699, {wxDC, resetBoundingBox, 0}},
- {700, {wxDC, setAxisOrientation, 2}},
- {701, {wxDC, setBackground, 1}},
- {702, {wxDC, setBackgroundMode, 1}},
- {703, {wxDC, setBrush, 1}},
- {705, {wxDC, setClippingRegion_2, 2}},
- {706, {wxDC, setClippingRegion_1_1, 1}},
- {707, {wxDC, setClippingRegion_1_0, 1}},
- {708, {wxDC, setDeviceOrigin, 2}},
- {709, {wxDC, setFont, 1}},
- {710, {wxDC, setLayoutDirection, 1}},
- {711, {wxDC, setLogicalFunction, 1}},
- {712, {wxDC, setMapMode, 1}},
- {713, {wxDC, setPalette, 1}},
- {714, {wxDC, setPen, 1}},
- {715, {wxDC, setTextBackground, 1}},
- {716, {wxDC, setTextForeground, 1}},
- {717, {wxDC, setUserScale, 2}},
- {718, {wxDC, startDoc, 1}},
- {719, {wxDC, startPage, 0}},
- {720, {wxMirrorDC, new, 2}},
- {721, {wxMirrorDC, 'Destroy', undefined}},
- {722, {wxScreenDC, new, 0}},
- {723, {wxScreenDC, destruct, 0}},
- {724, {wxPostScriptDC, new_0, 0}},
- {725, {wxPostScriptDC, new_1, 1}},
- {726, {wxPostScriptDC, destruct, 0}},
- {727, {wxPostScriptDC, setResolution, 1}},
- {728, {wxPostScriptDC, getResolution, 0}},
- {729, {wxWindowDC, new_0, 0}},
- {730, {wxWindowDC, new_1, 1}},
- {731, {wxWindowDC, destruct, 0}},
- {732, {wxClientDC, new_0, 0}},
- {733, {wxClientDC, new_1, 1}},
- {734, {wxClientDC, 'Destroy', undefined}},
- {735, {wxPaintDC, new_0, 0}},
- {736, {wxPaintDC, new_1, 1}},
- {737, {wxPaintDC, 'Destroy', undefined}},
- {739, {wxMemoryDC, new_1_0, 1}},
- {740, {wxMemoryDC, new_1_1, 1}},
- {741, {wxMemoryDC, new_0, 0}},
- {743, {wxMemoryDC, destruct, 0}},
- {744, {wxMemoryDC, selectObject, 1}},
- {745, {wxMemoryDC, selectObjectAsSource, 1}},
- {746, {wxBufferedDC, new_0, 0}},
- {747, {wxBufferedDC, new_2, 2}},
- {748, {wxBufferedDC, new_3, 3}},
- {749, {wxBufferedDC, destruct, 0}},
- {750, {wxBufferedDC, init_2, 2}},
- {751, {wxBufferedDC, init_3, 3}},
- {752, {wxBufferedPaintDC, new_3, 3}},
- {753, {wxBufferedPaintDC, new_2, 2}},
- {754, {wxBufferedPaintDC, destruct, 0}},
- {755, {wxGraphicsObject, destruct, 0}},
- {756, {wxGraphicsObject, getRenderer, 0}},
- {757, {wxGraphicsObject, isNull, 0}},
- {758, {wxGraphicsContext, destruct, 0}},
- {759, {wxGraphicsContext, create_1_1, 1}},
- {760, {wxGraphicsContext, create_1_0, 1}},
- {761, {wxGraphicsContext, create_0, 0}},
- {762, {wxGraphicsContext, createPen, 1}},
- {763, {wxGraphicsContext, createBrush, 1}},
- {764, {wxGraphicsContext, createRadialGradientBrush, 7}},
- {765, {wxGraphicsContext, createLinearGradientBrush, 6}},
- {766, {wxGraphicsContext, createFont, 2}},
- {767, {wxGraphicsContext, createMatrix, 1}},
- {768, {wxGraphicsContext, createPath, 0}},
- {769, {wxGraphicsContext, clip_1, 1}},
- {770, {wxGraphicsContext, clip_4, 4}},
- {771, {wxGraphicsContext, resetClip, 0}},
- {772, {wxGraphicsContext, drawBitmap, 5}},
- {773, {wxGraphicsContext, drawEllipse, 4}},
- {774, {wxGraphicsContext, drawIcon, 5}},
- {775, {wxGraphicsContext, drawLines, 3}},
- {776, {wxGraphicsContext, drawPath, 2}},
- {777, {wxGraphicsContext, drawRectangle, 4}},
- {778, {wxGraphicsContext, drawRoundedRectangle, 5}},
- {779, {wxGraphicsContext, drawText_3, 3}},
- {780, {wxGraphicsContext, drawText_4_0, 4}},
- {781, {wxGraphicsContext, drawText_4_1, 4}},
- {782, {wxGraphicsContext, drawText_5, 5}},
- {783, {wxGraphicsContext, fillPath, 2}},
- {784, {wxGraphicsContext, strokePath, 1}},
- {785, {wxGraphicsContext, getPartialTextExtents, 2}},
- {786, {wxGraphicsContext, getTextExtent, 5}},
- {787, {wxGraphicsContext, rotate, 1}},
- {788, {wxGraphicsContext, scale, 2}},
- {789, {wxGraphicsContext, translate, 2}},
- {790, {wxGraphicsContext, getTransform, 0}},
- {791, {wxGraphicsContext, setTransform, 1}},
- {792, {wxGraphicsContext, concatTransform, 1}},
- {793, {wxGraphicsContext, setBrush_1_1, 1}},
- {794, {wxGraphicsContext, setBrush_1_0, 1}},
- {795, {wxGraphicsContext, setFont_1, 1}},
- {796, {wxGraphicsContext, setFont_2, 2}},
- {797, {wxGraphicsContext, setPen_1_0, 1}},
- {798, {wxGraphicsContext, setPen_1_1, 1}},
- {799, {wxGraphicsContext, strokeLine, 4}},
- {800, {wxGraphicsContext, strokeLines, 2}},
- {802, {wxGraphicsMatrix, concat, 1}},
- {804, {wxGraphicsMatrix, get, 1}},
- {805, {wxGraphicsMatrix, invert, 0}},
- {806, {wxGraphicsMatrix, isEqual, 1}},
- {808, {wxGraphicsMatrix, isIdentity, 0}},
- {809, {wxGraphicsMatrix, rotate, 1}},
- {810, {wxGraphicsMatrix, scale, 2}},
- {811, {wxGraphicsMatrix, translate, 2}},
- {812, {wxGraphicsMatrix, set, 1}},
- {813, {wxGraphicsMatrix, transformPoint, 2}},
- {814, {wxGraphicsMatrix, transformDistance, 2}},
- {815, {wxGraphicsPath, moveToPoint_2, 2}},
- {816, {wxGraphicsPath, moveToPoint_1, 1}},
- {817, {wxGraphicsPath, addArc_6, 6}},
- {818, {wxGraphicsPath, addArc_5, 5}},
- {819, {wxGraphicsPath, addArcToPoint, 5}},
- {820, {wxGraphicsPath, addCircle, 3}},
- {821, {wxGraphicsPath, addCurveToPoint_6, 6}},
- {822, {wxGraphicsPath, addCurveToPoint_3, 3}},
- {823, {wxGraphicsPath, addEllipse, 4}},
- {824, {wxGraphicsPath, addLineToPoint_2, 2}},
- {825, {wxGraphicsPath, addLineToPoint_1, 1}},
- {826, {wxGraphicsPath, addPath, 1}},
- {827, {wxGraphicsPath, addQuadCurveToPoint, 4}},
- {828, {wxGraphicsPath, addRectangle, 4}},
- {829, {wxGraphicsPath, addRoundedRectangle, 5}},
- {830, {wxGraphicsPath, closeSubpath, 0}},
- {831, {wxGraphicsPath, contains_3, 3}},
- {832, {wxGraphicsPath, contains_2, 2}},
- {834, {wxGraphicsPath, getBox, 0}},
- {836, {wxGraphicsPath, getCurrentPoint, 0}},
- {837, {wxGraphicsPath, transform, 1}},
- {838, {wxGraphicsRenderer, getDefaultRenderer, 0}},
- {839, {wxGraphicsRenderer, createContext_1_1, 1}},
- {840, {wxGraphicsRenderer, createContext_1_0, 1}},
- {841, {wxGraphicsRenderer, createPen, 1}},
- {842, {wxGraphicsRenderer, createBrush, 1}},
- {843, {wxGraphicsRenderer, createLinearGradientBrush, 6}},
- {844, {wxGraphicsRenderer, createRadialGradientBrush, 7}},
- {845, {wxGraphicsRenderer, createFont, 2}},
- {846, {wxGraphicsRenderer, createMatrix, 1}},
- {847, {wxGraphicsRenderer, createPath, 0}},
- {849, {wxMenuBar, new_1, 1}},
- {851, {wxMenuBar, new_0, 0}},
- {853, {wxMenuBar, destruct, 0}},
- {854, {wxMenuBar, append, 2}},
- {855, {wxMenuBar, check, 2}},
- {856, {wxMenuBar, enable_2, 2}},
- {857, {wxMenuBar, enable_1, 1}},
- {858, {wxMenuBar, enableTop, 2}},
- {859, {wxMenuBar, findMenu, 1}},
- {860, {wxMenuBar, findMenuItem, 2}},
- {861, {wxMenuBar, findItem, 2}},
- {862, {wxMenuBar, getHelpString, 1}},
- {863, {wxMenuBar, getLabel_1, 1}},
- {864, {wxMenuBar, getLabel_0, 0}},
- {865, {wxMenuBar, getLabelTop, 1}},
- {866, {wxMenuBar, getMenu, 1}},
- {867, {wxMenuBar, getMenuCount, 0}},
- {868, {wxMenuBar, insert, 3}},
- {869, {wxMenuBar, isChecked, 1}},
- {870, {wxMenuBar, isEnabled_1, 1}},
- {871, {wxMenuBar, isEnabled_0, 0}},
- {872, {wxMenuBar, remove, 1}},
- {873, {wxMenuBar, replace, 3}},
- {874, {wxMenuBar, setHelpString, 2}},
- {875, {wxMenuBar, setLabel_2, 2}},
- {876, {wxMenuBar, setLabel_1, 1}},
- {877, {wxMenuBar, setLabelTop, 2}},
- {878, {wxControl, getLabel, 0}},
- {879, {wxControl, setLabel, 1}},
- {880, {wxControlWithItems, append_1, 1}},
- {881, {wxControlWithItems, append_2, 2}},
- {882, {wxControlWithItems, appendStrings_1, 1}},
- {883, {wxControlWithItems, clear, 0}},
- {884, {wxControlWithItems, delete, 1}},
- {885, {wxControlWithItems, findString, 2}},
- {886, {wxControlWithItems, getClientData, 1}},
- {887, {wxControlWithItems, setClientData, 2}},
- {888, {wxControlWithItems, getCount, 0}},
- {889, {wxControlWithItems, getSelection, 0}},
- {890, {wxControlWithItems, getString, 1}},
- {891, {wxControlWithItems, getStringSelection, 0}},
- {892, {wxControlWithItems, insert_2, 2}},
- {893, {wxControlWithItems, insert_3, 3}},
- {894, {wxControlWithItems, isEmpty, 0}},
- {895, {wxControlWithItems, select, 1}},
- {896, {wxControlWithItems, setSelection, 1}},
- {897, {wxControlWithItems, setString, 2}},
- {898, {wxControlWithItems, setStringSelection, 1}},
- {901, {wxMenu, new_2, 2}},
- {902, {wxMenu, new_1, 1}},
- {904, {wxMenu, destruct, 0}},
- {905, {wxMenu, append_3, 3}},
- {906, {wxMenu, append_1, 1}},
- {907, {wxMenu, append_4_0, 4}},
- {908, {wxMenu, append_4_1, 4}},
- {909, {wxMenu, appendCheckItem, 3}},
- {910, {wxMenu, appendRadioItem, 3}},
- {911, {wxMenu, appendSeparator, 0}},
- {912, {wxMenu, break, 0}},
- {913, {wxMenu, check, 2}},
- {914, {wxMenu, delete_1_0, 1}},
- {915, {wxMenu, delete_1_1, 1}},
- {916, {wxMenu, destroy_1_0, 1}},
- {917, {wxMenu, destroy_1_1, 1}},
- {918, {wxMenu, enable, 2}},
- {919, {wxMenu, findItem_1, 1}},
- {920, {wxMenu, findItem_2, 2}},
- {921, {wxMenu, findItemByPosition, 1}},
- {922, {wxMenu, getHelpString, 1}},
- {923, {wxMenu, getLabel, 1}},
- {924, {wxMenu, getMenuItemCount, 0}},
- {925, {wxMenu, getMenuItems, 0}},
- {927, {wxMenu, getTitle, 0}},
- {928, {wxMenu, insert_2, 2}},
- {929, {wxMenu, insert_3, 3}},
- {930, {wxMenu, insert_5_1, 5}},
- {931, {wxMenu, insert_5_0, 5}},
- {932, {wxMenu, insertCheckItem, 4}},
- {933, {wxMenu, insertRadioItem, 4}},
- {934, {wxMenu, insertSeparator, 1}},
- {935, {wxMenu, isChecked, 1}},
- {936, {wxMenu, isEnabled, 1}},
- {937, {wxMenu, prepend_1, 1}},
- {938, {wxMenu, prepend_2, 2}},
- {939, {wxMenu, prepend_4_1, 4}},
- {940, {wxMenu, prepend_4_0, 4}},
- {941, {wxMenu, prependCheckItem, 3}},
- {942, {wxMenu, prependRadioItem, 3}},
- {943, {wxMenu, prependSeparator, 0}},
- {944, {wxMenu, remove_1_0, 1}},
- {945, {wxMenu, remove_1_1, 1}},
- {946, {wxMenu, setHelpString, 2}},
- {947, {wxMenu, setLabel, 2}},
- {948, {wxMenu, setTitle, 1}},
- {949, {wxMenuItem, new, 1}},
- {951, {wxMenuItem, destruct, 0}},
- {952, {wxMenuItem, check, 1}},
- {953, {wxMenuItem, enable, 1}},
- {954, {wxMenuItem, getBitmap, 0}},
- {955, {wxMenuItem, getHelp, 0}},
- {956, {wxMenuItem, getId, 0}},
- {957, {wxMenuItem, getKind, 0}},
- {958, {wxMenuItem, getLabel, 0}},
- {959, {wxMenuItem, getLabelFromText, 1}},
- {960, {wxMenuItem, getMenu, 0}},
- {961, {wxMenuItem, getText, 0}},
- {962, {wxMenuItem, getSubMenu, 0}},
- {963, {wxMenuItem, isCheckable, 0}},
- {964, {wxMenuItem, isChecked, 0}},
- {965, {wxMenuItem, isEnabled, 0}},
- {966, {wxMenuItem, isSeparator, 0}},
- {967, {wxMenuItem, isSubMenu, 0}},
- {968, {wxMenuItem, setBitmap, 1}},
- {969, {wxMenuItem, setHelp, 1}},
- {970, {wxMenuItem, setMenu, 1}},
- {971, {wxMenuItem, setSubMenu, 1}},
- {972, {wxMenuItem, setText, 1}},
- {973, {wxToolBar, addControl, 1}},
- {974, {wxToolBar, addSeparator, 0}},
- {975, {wxToolBar, addTool_5, 5}},
- {976, {wxToolBar, addTool_4_0, 4}},
- {977, {wxToolBar, addTool_1, 1}},
- {978, {wxToolBar, addTool_4_1, 4}},
- {979, {wxToolBar, addTool_3, 3}},
- {980, {wxToolBar, addTool_6, 6}},
- {981, {wxToolBar, addCheckTool, 4}},
- {982, {wxToolBar, addRadioTool, 4}},
- {983, {wxToolBar, deleteTool, 1}},
- {984, {wxToolBar, deleteToolByPos, 1}},
- {985, {wxToolBar, enableTool, 2}},
- {986, {wxToolBar, findById, 1}},
- {987, {wxToolBar, findControl, 1}},
- {988, {wxToolBar, findToolForPosition, 2}},
- {989, {wxToolBar, getToolSize, 0}},
- {990, {wxToolBar, getToolBitmapSize, 0}},
- {991, {wxToolBar, getMargins, 0}},
- {992, {wxToolBar, getToolEnabled, 1}},
- {993, {wxToolBar, getToolLongHelp, 1}},
- {994, {wxToolBar, getToolPacking, 0}},
- {995, {wxToolBar, getToolPos, 1}},
- {996, {wxToolBar, getToolSeparation, 0}},
- {997, {wxToolBar, getToolShortHelp, 1}},
- {998, {wxToolBar, getToolState, 1}},
- {999, {wxToolBar, insertControl, 2}},
- {1000, {wxToolBar, insertSeparator, 1}},
- {1001, {wxToolBar, insertTool_5, 5}},
- {1002, {wxToolBar, insertTool_2, 2}},
- {1003, {wxToolBar, insertTool_4, 4}},
- {1004, {wxToolBar, realize, 0}},
- {1005, {wxToolBar, removeTool, 1}},
- {1006, {wxToolBar, setMargins, 2}},
- {1007, {wxToolBar, setToolBitmapSize, 1}},
- {1008, {wxToolBar, setToolLongHelp, 2}},
- {1009, {wxToolBar, setToolPacking, 1}},
- {1010, {wxToolBar, setToolShortHelp, 2}},
- {1011, {wxToolBar, setToolSeparation, 1}},
- {1012, {wxToolBar, toggleTool, 2}},
- {1014, {wxStatusBar, new_0, 0}},
- {1015, {wxStatusBar, new_2, 2}},
- {1017, {wxStatusBar, destruct, 0}},
- {1018, {wxStatusBar, create, 2}},
- {1019, {wxStatusBar, getFieldRect, 2}},
- {1020, {wxStatusBar, getFieldsCount, 0}},
- {1021, {wxStatusBar, getStatusText, 1}},
- {1022, {wxStatusBar, popStatusText, 1}},
- {1023, {wxStatusBar, pushStatusText, 2}},
- {1024, {wxStatusBar, setFieldsCount, 2}},
- {1025, {wxStatusBar, setMinHeight, 1}},
- {1026, {wxStatusBar, setStatusText, 2}},
- {1027, {wxStatusBar, setStatusWidths, 2}},
- {1028, {wxStatusBar, setStatusStyles, 2}},
- {1029, {wxBitmap, new_0, 0}},
- {1030, {wxBitmap, new_3, 3}},
- {1031, {wxBitmap, new_4, 4}},
- {1032, {wxBitmap, new_2_0, 2}},
- {1033, {wxBitmap, new_2_1, 2}},
- {1034, {wxBitmap, destruct, 0}},
- {1035, {wxBitmap, convertToImage, 0}},
- {1036, {wxBitmap, copyFromIcon, 1}},
- {1037, {wxBitmap, create, 3}},
- {1038, {wxBitmap, getDepth, 0}},
- {1039, {wxBitmap, getHeight, 0}},
- {1040, {wxBitmap, getPalette, 0}},
- {1041, {wxBitmap, getMask, 0}},
- {1042, {wxBitmap, getWidth, 0}},
- {1043, {wxBitmap, getSubBitmap, 1}},
- {1044, {wxBitmap, loadFile, 2}},
- {1045, {wxBitmap, ok, 0}},
- {1046, {wxBitmap, saveFile, 3}},
- {1047, {wxBitmap, setDepth, 1}},
- {1048, {wxBitmap, setHeight, 1}},
- {1049, {wxBitmap, setMask, 1}},
- {1050, {wxBitmap, setPalette, 1}},
- {1051, {wxBitmap, setWidth, 1}},
- {1052, {wxIcon, new_0, 0}},
- {1053, {wxIcon, new_2, 2}},
- {1054, {wxIcon, new_1, 1}},
- {1055, {wxIcon, copyFromBitmap, 1}},
- {1056, {wxIcon, 'Destroy', undefined}},
- {1057, {wxIconBundle, new_0, 0}},
- {1058, {wxIconBundle, new_2, 2}},
- {1059, {wxIconBundle, new_1_0, 1}},
- {1060, {wxIconBundle, new_1_1, 1}},
- {1061, {wxIconBundle, destruct, 0}},
- {1062, {wxIconBundle, addIcon_2, 2}},
- {1063, {wxIconBundle, addIcon_1, 1}},
- {1064, {wxIconBundle, getIcon_1_1, 1}},
- {1065, {wxIconBundle, getIcon_1_0, 1}},
- {1066, {wxCursor, new_0, 0}},
- {1067, {wxCursor, new_1_0, 1}},
- {1068, {wxCursor, new_1_1, 1}},
- {1069, {wxCursor, new_4, 4}},
- {1070, {wxCursor, destruct, 0}},
- {1071, {wxCursor, ok, 0}},
- {1072, {wxMask, new_0, 0}},
- {1073, {wxMask, new_2_1, 2}},
- {1074, {wxMask, new_2_0, 2}},
- {1075, {wxMask, new_1, 1}},
- {1076, {wxMask, destruct, 0}},
- {1077, {wxMask, create_2_1, 2}},
- {1078, {wxMask, create_2_0, 2}},
- {1079, {wxMask, create_1, 1}},
- {1080, {wxImage, new_0, 0}},
- {1081, {wxImage, new_3_0, 3}},
- {1082, {wxImage, new_4, 4}},
- {1083, {wxImage, new_5, 5}},
- {1084, {wxImage, new_2, 2}},
- {1085, {wxImage, new_3_1, 3}},
- {1086, {wxImage, blur, 1}},
- {1087, {wxImage, blurHorizontal, 1}},
- {1088, {wxImage, blurVertical, 1}},
- {1089, {wxImage, convertAlphaToMask, 1}},
- {1090, {wxImage, convertToGreyscale, 1}},
- {1091, {wxImage, convertToMono, 3}},
- {1092, {wxImage, copy, 0}},
- {1093, {wxImage, create_3, 3}},
- {1094, {wxImage, create_4, 4}},
- {1095, {wxImage, create_5, 5}},
- {1096, {wxImage, 'Destroy', 0}},
- {1097, {wxImage, findFirstUnusedColour, 4}},
- {1098, {wxImage, getImageExtWildcard, 0}},
- {1099, {wxImage, getAlpha_2, 2}},
- {1100, {wxImage, getAlpha_0, 0}},
- {1101, {wxImage, getBlue, 2}},
- {1102, {wxImage, getData, 0}},
- {1103, {wxImage, getGreen, 2}},
- {1104, {wxImage, getImageCount, 2}},
- {1105, {wxImage, getHeight, 0}},
- {1106, {wxImage, getMaskBlue, 0}},
- {1107, {wxImage, getMaskGreen, 0}},
- {1108, {wxImage, getMaskRed, 0}},
- {1109, {wxImage, getOrFindMaskColour, 3}},
- {1110, {wxImage, getPalette, 0}},
- {1111, {wxImage, getRed, 2}},
- {1112, {wxImage, getSubImage, 1}},
- {1113, {wxImage, getWidth, 0}},
- {1114, {wxImage, hasAlpha, 0}},
- {1115, {wxImage, hasMask, 0}},
- {1116, {wxImage, getOption, 1}},
- {1117, {wxImage, getOptionInt, 1}},
- {1118, {wxImage, hasOption, 1}},
- {1119, {wxImage, initAlpha, 0}},
- {1120, {wxImage, initStandardHandlers, 0}},
- {1121, {wxImage, isTransparent, 3}},
- {1122, {wxImage, loadFile_2, 2}},
- {1123, {wxImage, loadFile_3, 3}},
- {1124, {wxImage, ok, 0}},
- {1125, {wxImage, removeHandler, 1}},
- {1126, {wxImage, mirror, 1}},
- {1127, {wxImage, replace, 6}},
- {1128, {wxImage, rescale, 3}},
- {1129, {wxImage, resize, 3}},
- {1130, {wxImage, rotate, 3}},
- {1131, {wxImage, rotateHue, 1}},
- {1132, {wxImage, rotate90, 1}},
- {1133, {wxImage, saveFile_1, 1}},
- {1134, {wxImage, saveFile_2_0, 2}},
- {1135, {wxImage, saveFile_2_1, 2}},
- {1136, {wxImage, scale, 3}},
- {1137, {wxImage, size, 3}},
- {1138, {wxImage, setAlpha_3, 3}},
- {1139, {wxImage, setAlpha_2, 2}},
- {1140, {wxImage, setData_2, 2}},
- {1141, {wxImage, setData_4, 4}},
- {1142, {wxImage, setMask, 1}},
- {1143, {wxImage, setMaskColour, 3}},
- {1144, {wxImage, setMaskFromImage, 4}},
- {1145, {wxImage, setOption_2_1, 2}},
- {1146, {wxImage, setOption_2_0, 2}},
- {1147, {wxImage, setPalette, 1}},
- {1148, {wxImage, setRGB_5, 5}},
- {1149, {wxImage, setRGB_4, 4}},
- {1150, {wxImage, 'Destroy', undefined}},
- {1151, {wxBrush, new_0, 0}},
- {1152, {wxBrush, new_2, 2}},
- {1153, {wxBrush, new_1, 1}},
- {1155, {wxBrush, destruct, 0}},
- {1156, {wxBrush, getColour, 0}},
- {1157, {wxBrush, getStipple, 0}},
- {1158, {wxBrush, getStyle, 0}},
- {1159, {wxBrush, isHatch, 0}},
- {1160, {wxBrush, isOk, 0}},
- {1161, {wxBrush, setColour_1, 1}},
- {1162, {wxBrush, setColour_3, 3}},
- {1163, {wxBrush, setStipple, 1}},
- {1164, {wxBrush, setStyle, 1}},
- {1165, {wxPen, new_0, 0}},
- {1166, {wxPen, new_2, 2}},
- {1167, {wxPen, destruct, 0}},
- {1168, {wxPen, getCap, 0}},
- {1169, {wxPen, getColour, 0}},
- {1170, {wxPen, getJoin, 0}},
- {1171, {wxPen, getStyle, 0}},
- {1172, {wxPen, getWidth, 0}},
- {1173, {wxPen, isOk, 0}},
- {1174, {wxPen, setCap, 1}},
- {1175, {wxPen, setColour_1, 1}},
- {1176, {wxPen, setColour_3, 3}},
- {1177, {wxPen, setJoin, 1}},
- {1178, {wxPen, setStyle, 1}},
- {1179, {wxPen, setWidth, 1}},
- {1180, {wxRegion, new_0, 0}},
- {1181, {wxRegion, new_4, 4}},
- {1182, {wxRegion, new_2, 2}},
- {1183, {wxRegion, new_1_1, 1}},
- {1185, {wxRegion, new_1_0, 1}},
- {1187, {wxRegion, destruct, 0}},
- {1188, {wxRegion, clear, 0}},
- {1189, {wxRegion, contains_2, 2}},
- {1190, {wxRegion, contains_1_0, 1}},
- {1191, {wxRegion, contains_4, 4}},
- {1192, {wxRegion, contains_1_1, 1}},
- {1193, {wxRegion, convertToBitmap, 0}},
- {1194, {wxRegion, getBox, 0}},
- {1195, {wxRegion, intersect_4, 4}},
- {1196, {wxRegion, intersect_1_1, 1}},
- {1197, {wxRegion, intersect_1_0, 1}},
- {1198, {wxRegion, isEmpty, 0}},
- {1199, {wxRegion, subtract_4, 4}},
- {1200, {wxRegion, subtract_1_1, 1}},
- {1201, {wxRegion, subtract_1_0, 1}},
- {1202, {wxRegion, offset_2, 2}},
- {1203, {wxRegion, offset_1, 1}},
- {1204, {wxRegion, union_4, 4}},
- {1205, {wxRegion, union_1_2, 1}},
- {1206, {wxRegion, union_1_1, 1}},
- {1207, {wxRegion, union_1_0, 1}},
- {1208, {wxRegion, union_3, 3}},
- {1209, {wxRegion, xor_4, 4}},
- {1210, {wxRegion, xor_1_1, 1}},
- {1211, {wxRegion, xor_1_0, 1}},
- {1212, {wxAcceleratorTable, new_0, 0}},
- {1213, {wxAcceleratorTable, new_2, 2}},
- {1214, {wxAcceleratorTable, destruct, 0}},
- {1215, {wxAcceleratorTable, ok, 0}},
- {1216, {wxAcceleratorEntry, new_1_0, 1}},
- {1217, {wxAcceleratorEntry, new_1_1, 1}},
- {1218, {wxAcceleratorEntry, getCommand, 0}},
- {1219, {wxAcceleratorEntry, getFlags, 0}},
- {1220, {wxAcceleratorEntry, getKeyCode, 0}},
- {1221, {wxAcceleratorEntry, set, 4}},
- {1222, {wxAcceleratorEntry, 'Destroy', undefined}},
- {1227, {wxCaret, new_3, 3}},
- {1228, {wxCaret, new_2, 2}},
- {1230, {wxCaret, destruct, 0}},
- {1231, {wxCaret, create_3, 3}},
- {1232, {wxCaret, create_2, 2}},
- {1233, {wxCaret, getBlinkTime, 0}},
- {1235, {wxCaret, getPosition, 0}},
- {1237, {wxCaret, getSize, 0}},
- {1238, {wxCaret, getWindow, 0}},
- {1239, {wxCaret, hide, 0}},
- {1240, {wxCaret, isOk, 0}},
- {1241, {wxCaret, isVisible, 0}},
- {1242, {wxCaret, move_2, 2}},
- {1243, {wxCaret, move_1, 1}},
- {1244, {wxCaret, setBlinkTime, 1}},
- {1245, {wxCaret, setSize_2, 2}},
- {1246, {wxCaret, setSize_1, 1}},
- {1247, {wxCaret, show, 1}},
- {1248, {wxSizer, add_2_1, 2}},
- {1249, {wxSizer, add_2_0, 2}},
- {1250, {wxSizer, add_3, 3}},
- {1251, {wxSizer, add_2_3, 2}},
- {1252, {wxSizer, add_2_2, 2}},
- {1253, {wxSizer, addSpacer, 1}},
- {1254, {wxSizer, addStretchSpacer, 1}},
- {1255, {wxSizer, calcMin, 0}},
- {1256, {wxSizer, clear, 1}},
- {1257, {wxSizer, detach_1_2, 1}},
- {1258, {wxSizer, detach_1_1, 1}},
- {1259, {wxSizer, detach_1_0, 1}},
- {1260, {wxSizer, fit, 1}},
- {1261, {wxSizer, fitInside, 1}},
- {1262, {wxSizer, getChildren, 0}},
- {1263, {wxSizer, getItem_2_1, 2}},
- {1264, {wxSizer, getItem_2_0, 2}},
- {1265, {wxSizer, getItem_1, 1}},
- {1266, {wxSizer, getSize, 0}},
- {1267, {wxSizer, getPosition, 0}},
- {1268, {wxSizer, getMinSize, 0}},
- {1269, {wxSizer, hide_2_0, 2}},
- {1270, {wxSizer, hide_2_1, 2}},
- {1271, {wxSizer, hide_1, 1}},
- {1272, {wxSizer, insert_3_1, 3}},
- {1273, {wxSizer, insert_3_0, 3}},
- {1274, {wxSizer, insert_4, 4}},
- {1275, {wxSizer, insert_3_3, 3}},
- {1276, {wxSizer, insert_3_2, 3}},
- {1277, {wxSizer, insert_2, 2}},
- {1278, {wxSizer, insertSpacer, 2}},
- {1279, {wxSizer, insertStretchSpacer, 2}},
- {1280, {wxSizer, isShown_1_2, 1}},
- {1281, {wxSizer, isShown_1_1, 1}},
- {1282, {wxSizer, isShown_1_0, 1}},
- {1283, {wxSizer, layout, 0}},
- {1284, {wxSizer, prepend_2_1, 2}},
- {1285, {wxSizer, prepend_2_0, 2}},
- {1286, {wxSizer, prepend_3, 3}},
- {1287, {wxSizer, prepend_2_3, 2}},
- {1288, {wxSizer, prepend_2_2, 2}},
- {1289, {wxSizer, prepend_1, 1}},
- {1290, {wxSizer, prependSpacer, 1}},
- {1291, {wxSizer, prependStretchSpacer, 1}},
- {1292, {wxSizer, recalcSizes, 0}},
- {1293, {wxSizer, remove_1_1, 1}},
- {1294, {wxSizer, remove_1_0, 1}},
- {1295, {wxSizer, replace_3_1, 3}},
- {1296, {wxSizer, replace_3_0, 3}},
- {1297, {wxSizer, replace_2, 2}},
- {1298, {wxSizer, setDimension, 4}},
- {1299, {wxSizer, setMinSize_2, 2}},
- {1300, {wxSizer, setMinSize_1, 1}},
- {1301, {wxSizer, setItemMinSize_3_2, 3}},
- {1302, {wxSizer, setItemMinSize_2_2, 2}},
- {1303, {wxSizer, setItemMinSize_3_1, 3}},
- {1304, {wxSizer, setItemMinSize_2_1, 2}},
- {1305, {wxSizer, setItemMinSize_3_0, 3}},
- {1306, {wxSizer, setItemMinSize_2_0, 2}},
- {1307, {wxSizer, setSizeHints, 1}},
- {1308, {wxSizer, setVirtualSizeHints, 1}},
- {1309, {wxSizer, show_2_2, 2}},
- {1310, {wxSizer, show_2_1, 2}},
- {1311, {wxSizer, show_2_0, 2}},
- {1312, {wxSizer, show_1, 1}},
- {1313, {wxSizerFlags, new, 1}},
- {1314, {wxSizerFlags, align, 1}},
- {1315, {wxSizerFlags, border_2, 2}},
- {1316, {wxSizerFlags, border_1, 1}},
- {1317, {wxSizerFlags, center, 0}},
- {1318, {wxSizerFlags, centre, 0}},
- {1319, {wxSizerFlags, expand, 0}},
- {1320, {wxSizerFlags, left, 0}},
- {1321, {wxSizerFlags, proportion, 1}},
- {1322, {wxSizerFlags, right, 0}},
- {1323, {wxSizerFlags, 'Destroy', undefined}},
- {1324, {wxSizerItem, new_5_1, 5}},
- {1325, {wxSizerItem, new_2_1, 2}},
- {1326, {wxSizerItem, new_5_0, 5}},
- {1327, {wxSizerItem, new_2_0, 2}},
- {1328, {wxSizerItem, new_6, 6}},
- {1329, {wxSizerItem, new_3, 3}},
- {1330, {wxSizerItem, new_0, 0}},
- {1331, {wxSizerItem, destruct, 0}},
- {1332, {wxSizerItem, calcMin, 0}},
- {1333, {wxSizerItem, deleteWindows, 0}},
- {1334, {wxSizerItem, detachSizer, 0}},
- {1335, {wxSizerItem, getBorder, 0}},
- {1336, {wxSizerItem, getFlag, 0}},
- {1337, {wxSizerItem, getMinSize, 0}},
- {1338, {wxSizerItem, getPosition, 0}},
- {1339, {wxSizerItem, getProportion, 0}},
- {1340, {wxSizerItem, getRatio, 0}},
- {1341, {wxSizerItem, getRect, 0}},
- {1342, {wxSizerItem, getSize, 0}},
- {1343, {wxSizerItem, getSizer, 0}},
- {1344, {wxSizerItem, getSpacer, 0}},
- {1345, {wxSizerItem, getUserData, 0}},
- {1346, {wxSizerItem, getWindow, 0}},
- {1347, {wxSizerItem, isSizer, 0}},
- {1348, {wxSizerItem, isShown, 0}},
- {1349, {wxSizerItem, isSpacer, 0}},
- {1350, {wxSizerItem, isWindow, 0}},
- {1351, {wxSizerItem, setBorder, 1}},
- {1352, {wxSizerItem, setDimension, 2}},
- {1353, {wxSizerItem, setFlag, 1}},
- {1354, {wxSizerItem, setInitSize, 2}},
- {1355, {wxSizerItem, setMinSize_1, 1}},
- {1356, {wxSizerItem, setMinSize_2, 2}},
- {1357, {wxSizerItem, setProportion, 1}},
- {1358, {wxSizerItem, setRatio_2, 2}},
- {1359, {wxSizerItem, setRatio_1_1, 1}},
- {1360, {wxSizerItem, setRatio_1_0, 1}},
- {1361, {wxSizerItem, setSizer, 1}},
- {1362, {wxSizerItem, setSpacer_1, 1}},
- {1363, {wxSizerItem, setSpacer_2, 2}},
- {1364, {wxSizerItem, setWindow, 1}},
- {1365, {wxSizerItem, show, 1}},
- {1366, {wxBoxSizer, new, 1}},
- {1367, {wxBoxSizer, getOrientation, 0}},
- {1368, {wxBoxSizer, 'Destroy', undefined}},
- {1369, {wxStaticBoxSizer, new_2, 2}},
- {1370, {wxStaticBoxSizer, new_3, 3}},
- {1371, {wxStaticBoxSizer, getStaticBox, 0}},
- {1372, {wxStaticBoxSizer, 'Destroy', undefined}},
- {1373, {wxGridSizer, new_4, 4}},
- {1374, {wxGridSizer, new_2, 2}},
- {1375, {wxGridSizer, getCols, 0}},
- {1376, {wxGridSizer, getHGap, 0}},
- {1377, {wxGridSizer, getRows, 0}},
- {1378, {wxGridSizer, getVGap, 0}},
- {1379, {wxGridSizer, setCols, 1}},
- {1380, {wxGridSizer, setHGap, 1}},
- {1381, {wxGridSizer, setRows, 1}},
- {1382, {wxGridSizer, setVGap, 1}},
- {1383, {wxGridSizer, 'Destroy', undefined}},
- {1384, {wxFlexGridSizer, new_4, 4}},
- {1385, {wxFlexGridSizer, new_2, 2}},
- {1386, {wxFlexGridSizer, addGrowableCol, 2}},
- {1387, {wxFlexGridSizer, addGrowableRow, 2}},
- {1388, {wxFlexGridSizer, getFlexibleDirection, 0}},
- {1389, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}},
- {1390, {wxFlexGridSizer, removeGrowableCol, 1}},
- {1391, {wxFlexGridSizer, removeGrowableRow, 1}},
- {1392, {wxFlexGridSizer, setFlexibleDirection, 1}},
- {1393, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}},
- {1394, {wxFlexGridSizer, 'Destroy', undefined}},
- {1395, {wxGridBagSizer, new, 1}},
- {1396, {wxGridBagSizer, add_3_2, 3}},
- {1397, {wxGridBagSizer, add_3_1, 3}},
- {1398, {wxGridBagSizer, add_4, 4}},
- {1399, {wxGridBagSizer, add_1_0, 1}},
- {1400, {wxGridBagSizer, add_2_1, 2}},
- {1401, {wxGridBagSizer, add_2_0, 2}},
- {1402, {wxGridBagSizer, add_3_0, 3}},
- {1403, {wxGridBagSizer, add_1_1, 1}},
- {1404, {wxGridBagSizer, calcMin, 0}},
- {1405, {wxGridBagSizer, checkForIntersection_2, 2}},
- {1406, {wxGridBagSizer, checkForIntersection_3, 3}},
- {1407, {wxGridBagSizer, findItem_1_1, 1}},
- {1408, {wxGridBagSizer, findItem_1_0, 1}},
- {1409, {wxGridBagSizer, findItemAtPoint, 1}},
- {1410, {wxGridBagSizer, findItemAtPosition, 1}},
- {1411, {wxGridBagSizer, findItemWithData, 1}},
- {1412, {wxGridBagSizer, getCellSize, 2}},
- {1413, {wxGridBagSizer, getEmptyCellSize, 0}},
- {1414, {wxGridBagSizer, getItemPosition_1_2, 1}},
- {1415, {wxGridBagSizer, getItemPosition_1_1, 1}},
- {1416, {wxGridBagSizer, getItemPosition_1_0, 1}},
- {1417, {wxGridBagSizer, getItemSpan_1_2, 1}},
- {1418, {wxGridBagSizer, getItemSpan_1_1, 1}},
- {1419, {wxGridBagSizer, getItemSpan_1_0, 1}},
- {1420, {wxGridBagSizer, setEmptyCellSize, 1}},
- {1421, {wxGridBagSizer, setItemPosition_2_2, 2}},
- {1422, {wxGridBagSizer, setItemPosition_2_1, 2}},
- {1423, {wxGridBagSizer, setItemPosition_2_0, 2}},
- {1424, {wxGridBagSizer, setItemSpan_2_2, 2}},
- {1425, {wxGridBagSizer, setItemSpan_2_1, 2}},
- {1426, {wxGridBagSizer, setItemSpan_2_0, 2}},
- {1427, {wxGridBagSizer, 'Destroy', undefined}},
- {1428, {wxStdDialogButtonSizer, new, 0}},
- {1429, {wxStdDialogButtonSizer, addButton, 1}},
- {1430, {wxStdDialogButtonSizer, realize, 0}},
- {1431, {wxStdDialogButtonSizer, setAffirmativeButton, 1}},
- {1432, {wxStdDialogButtonSizer, setCancelButton, 1}},
- {1433, {wxStdDialogButtonSizer, setNegativeButton, 1}},
- {1434, {wxStdDialogButtonSizer, 'Destroy', undefined}},
- {1435, {wxFont, new_0, 0}},
- {1436, {wxFont, new_1, 1}},
- {1437, {wxFont, new_5, 5}},
- {1439, {wxFont, destruct, 0}},
- {1440, {wxFont, isFixedWidth, 0}},
- {1441, {wxFont, getDefaultEncoding, 0}},
- {1442, {wxFont, getFaceName, 0}},
- {1443, {wxFont, getFamily, 0}},
- {1444, {wxFont, getNativeFontInfoDesc, 0}},
- {1445, {wxFont, getNativeFontInfoUserDesc, 0}},
- {1446, {wxFont, getPointSize, 0}},
- {1447, {wxFont, getStyle, 0}},
- {1448, {wxFont, getUnderlined, 0}},
- {1449, {wxFont, getWeight, 0}},
- {1450, {wxFont, ok, 0}},
- {1451, {wxFont, setDefaultEncoding, 1}},
- {1452, {wxFont, setFaceName, 1}},
- {1453, {wxFont, setFamily, 1}},
- {1454, {wxFont, setPointSize, 1}},
- {1455, {wxFont, setStyle, 1}},
- {1456, {wxFont, setUnderlined, 1}},
- {1457, {wxFont, setWeight, 1}},
- {1458, {wxToolTip, enable, 1}},
- {1459, {wxToolTip, setDelay, 1}},
- {1460, {wxToolTip, new, 1}},
- {1461, {wxToolTip, setTip, 1}},
- {1462, {wxToolTip, getTip, 0}},
- {1463, {wxToolTip, getWindow, 0}},
- {1464, {wxToolTip, 'Destroy', undefined}},
- {1466, {wxButton, new_3, 3}},
- {1467, {wxButton, new_0, 0}},
- {1468, {wxButton, destruct, 0}},
- {1469, {wxButton, create, 3}},
- {1470, {wxButton, getDefaultSize, 0}},
- {1471, {wxButton, setDefault, 0}},
- {1472, {wxButton, setLabel, 1}},
- {1474, {wxBitmapButton, new_4, 4}},
- {1475, {wxBitmapButton, new_0, 0}},
- {1476, {wxBitmapButton, create, 4}},
- {1477, {wxBitmapButton, getBitmapDisabled, 0}},
- {1479, {wxBitmapButton, getBitmapFocus, 0}},
- {1481, {wxBitmapButton, getBitmapLabel, 0}},
- {1483, {wxBitmapButton, getBitmapSelected, 0}},
- {1485, {wxBitmapButton, setBitmapDisabled, 1}},
- {1486, {wxBitmapButton, setBitmapFocus, 1}},
- {1487, {wxBitmapButton, setBitmapLabel, 1}},
- {1488, {wxBitmapButton, setBitmapSelected, 1}},
- {1489, {wxBitmapButton, 'Destroy', undefined}},
- {1490, {wxToggleButton, new_0, 0}},
- {1491, {wxToggleButton, new_4, 4}},
- {1492, {wxToggleButton, create, 4}},
- {1493, {wxToggleButton, getValue, 0}},
- {1494, {wxToggleButton, setValue, 1}},
- {1495, {wxToggleButton, 'Destroy', undefined}},
- {1496, {wxCalendarCtrl, new_0, 0}},
- {1497, {wxCalendarCtrl, new_3, 3}},
- {1498, {wxCalendarCtrl, create, 3}},
- {1499, {wxCalendarCtrl, destruct, 0}},
- {1500, {wxCalendarCtrl, setDate, 1}},
- {1501, {wxCalendarCtrl, getDate, 0}},
- {1502, {wxCalendarCtrl, enableYearChange, 1}},
- {1503, {wxCalendarCtrl, enableMonthChange, 1}},
- {1504, {wxCalendarCtrl, enableHolidayDisplay, 1}},
- {1505, {wxCalendarCtrl, setHeaderColours, 2}},
- {1506, {wxCalendarCtrl, getHeaderColourFg, 0}},
- {1507, {wxCalendarCtrl, getHeaderColourBg, 0}},
- {1508, {wxCalendarCtrl, setHighlightColours, 2}},
- {1509, {wxCalendarCtrl, getHighlightColourFg, 0}},
- {1510, {wxCalendarCtrl, getHighlightColourBg, 0}},
- {1511, {wxCalendarCtrl, setHolidayColours, 2}},
- {1512, {wxCalendarCtrl, getHolidayColourFg, 0}},
- {1513, {wxCalendarCtrl, getHolidayColourBg, 0}},
- {1514, {wxCalendarCtrl, getAttr, 1}},
- {1515, {wxCalendarCtrl, setAttr, 2}},
- {1516, {wxCalendarCtrl, setHoliday, 1}},
- {1517, {wxCalendarCtrl, resetAttr, 1}},
- {1518, {wxCalendarCtrl, hitTest, 2}},
- {1519, {wxCalendarDateAttr, new_0, 0}},
- {1520, {wxCalendarDateAttr, new_2_1, 2}},
- {1521, {wxCalendarDateAttr, new_2_0, 2}},
- {1522, {wxCalendarDateAttr, setTextColour, 1}},
- {1523, {wxCalendarDateAttr, setBackgroundColour, 1}},
- {1524, {wxCalendarDateAttr, setBorderColour, 1}},
- {1525, {wxCalendarDateAttr, setFont, 1}},
- {1526, {wxCalendarDateAttr, setBorder, 1}},
- {1527, {wxCalendarDateAttr, setHoliday, 1}},
- {1528, {wxCalendarDateAttr, hasTextColour, 0}},
- {1529, {wxCalendarDateAttr, hasBackgroundColour, 0}},
- {1530, {wxCalendarDateAttr, hasBorderColour, 0}},
- {1531, {wxCalendarDateAttr, hasFont, 0}},
- {1532, {wxCalendarDateAttr, hasBorder, 0}},
- {1533, {wxCalendarDateAttr, isHoliday, 0}},
- {1534, {wxCalendarDateAttr, getTextColour, 0}},
- {1535, {wxCalendarDateAttr, getBackgroundColour, 0}},
- {1536, {wxCalendarDateAttr, getBorderColour, 0}},
- {1537, {wxCalendarDateAttr, getFont, 0}},
- {1538, {wxCalendarDateAttr, getBorder, 0}},
- {1539, {wxCalendarDateAttr, 'Destroy', undefined}},
- {1541, {wxCheckBox, new_4, 4}},
- {1542, {wxCheckBox, new_0, 0}},
- {1543, {wxCheckBox, create, 4}},
- {1544, {wxCheckBox, getValue, 0}},
- {1545, {wxCheckBox, get3StateValue, 0}},
- {1546, {wxCheckBox, is3rdStateAllowedForUser, 0}},
- {1547, {wxCheckBox, is3State, 0}},
- {1548, {wxCheckBox, isChecked, 0}},
- {1549, {wxCheckBox, setValue, 1}},
- {1550, {wxCheckBox, set3StateValue, 1}},
- {1551, {wxCheckBox, 'Destroy', undefined}},
- {1552, {wxCheckListBox, new_0, 0}},
- {1554, {wxCheckListBox, new_3, 3}},
- {1555, {wxCheckListBox, check, 2}},
- {1556, {wxCheckListBox, isChecked, 1}},
- {1557, {wxCheckListBox, 'Destroy', undefined}},
- {1560, {wxChoice, new_3, 3}},
- {1561, {wxChoice, new_0, 0}},
- {1563, {wxChoice, destruct, 0}},
- {1565, {wxChoice, create, 6}},
- {1566, {wxChoice, delete, 1}},
- {1567, {wxChoice, getColumns, 0}},
- {1568, {wxChoice, setColumns, 1}},
- {1569, {wxComboBox, new_0, 0}},
- {1571, {wxComboBox, new_3, 3}},
- {1572, {wxComboBox, destruct, 0}},
- {1574, {wxComboBox, create, 7}},
- {1575, {wxComboBox, canCopy, 0}},
- {1576, {wxComboBox, canCut, 0}},
- {1577, {wxComboBox, canPaste, 0}},
- {1578, {wxComboBox, canRedo, 0}},
- {1579, {wxComboBox, canUndo, 0}},
- {1580, {wxComboBox, copy, 0}},
- {1581, {wxComboBox, cut, 0}},
- {1582, {wxComboBox, getInsertionPoint, 0}},
- {1583, {wxComboBox, getLastPosition, 0}},
- {1584, {wxComboBox, getValue, 0}},
- {1585, {wxComboBox, paste, 0}},
- {1586, {wxComboBox, redo, 0}},
- {1587, {wxComboBox, replace, 3}},
- {1588, {wxComboBox, remove, 2}},
- {1589, {wxComboBox, setInsertionPoint, 1}},
- {1590, {wxComboBox, setInsertionPointEnd, 0}},
- {1591, {wxComboBox, setSelection_1, 1}},
- {1592, {wxComboBox, setSelection_2, 2}},
- {1593, {wxComboBox, setValue, 1}},
- {1594, {wxComboBox, undo, 0}},
- {1595, {wxGauge, new_0, 0}},
- {1596, {wxGauge, new_4, 4}},
- {1597, {wxGauge, create, 4}},
- {1598, {wxGauge, getBezelFace, 0}},
- {1599, {wxGauge, getRange, 0}},
- {1600, {wxGauge, getShadowWidth, 0}},
- {1601, {wxGauge, getValue, 0}},
- {1602, {wxGauge, isVertical, 0}},
- {1603, {wxGauge, setBezelFace, 1}},
- {1604, {wxGauge, setRange, 1}},
- {1605, {wxGauge, setShadowWidth, 1}},
- {1606, {wxGauge, setValue, 1}},
- {1607, {wxGauge, pulse, 0}},
- {1608, {wxGauge, 'Destroy', undefined}},
- {1609, {wxGenericDirCtrl, new_0, 0}},
- {1610, {wxGenericDirCtrl, new_2, 2}},
- {1611, {wxGenericDirCtrl, destruct, 0}},
- {1612, {wxGenericDirCtrl, create, 2}},
- {1613, {wxGenericDirCtrl, init, 0}},
- {1614, {wxGenericDirCtrl, collapseTree, 0}},
- {1615, {wxGenericDirCtrl, expandPath, 1}},
- {1616, {wxGenericDirCtrl, getDefaultPath, 0}},
- {1617, {wxGenericDirCtrl, getPath, 0}},
- {1618, {wxGenericDirCtrl, getFilePath, 0}},
- {1619, {wxGenericDirCtrl, getFilter, 0}},
- {1620, {wxGenericDirCtrl, getFilterIndex, 0}},
- {1621, {wxGenericDirCtrl, getRootId, 0}},
- {1622, {wxGenericDirCtrl, getTreeCtrl, 0}},
- {1623, {wxGenericDirCtrl, reCreateTree, 0}},
- {1624, {wxGenericDirCtrl, setDefaultPath, 1}},
- {1625, {wxGenericDirCtrl, setFilter, 1}},
- {1626, {wxGenericDirCtrl, setFilterIndex, 1}},
- {1627, {wxGenericDirCtrl, setPath, 1}},
- {1629, {wxStaticBox, new_4, 4}},
- {1630, {wxStaticBox, new_0, 0}},
- {1631, {wxStaticBox, create, 4}},
- {1632, {wxStaticBox, 'Destroy', undefined}},
- {1634, {wxStaticLine, new_2, 2}},
- {1635, {wxStaticLine, new_0, 0}},
- {1636, {wxStaticLine, create, 2}},
- {1637, {wxStaticLine, isVertical, 0}},
- {1638, {wxStaticLine, getDefaultSize, 0}},
- {1639, {wxStaticLine, 'Destroy', undefined}},
- {1642, {wxListBox, new_3, 3}},
- {1643, {wxListBox, new_0, 0}},
- {1645, {wxListBox, destruct, 0}},
- {1647, {wxListBox, create, 6}},
- {1648, {wxListBox, deselect, 1}},
- {1649, {wxListBox, getSelections, 1}},
- {1650, {wxListBox, insertItems, 2}},
- {1651, {wxListBox, isSelected, 1}},
- {1653, {wxListBox, set, 2}},
- {1654, {wxListBox, hitTest, 1}},
- {1655, {wxListBox, setFirstItem_1_0, 1}},
- {1656, {wxListBox, setFirstItem_1_1, 1}},
- {1657, {wxListCtrl, new_0, 0}},
- {1658, {wxListCtrl, new_2, 2}},
- {1659, {wxListCtrl, arrange, 1}},
- {1660, {wxListCtrl, assignImageList, 2}},
- {1661, {wxListCtrl, clearAll, 0}},
- {1662, {wxListCtrl, create, 2}},
- {1663, {wxListCtrl, deleteAllItems, 0}},
- {1664, {wxListCtrl, deleteColumn, 1}},
- {1665, {wxListCtrl, deleteItem, 1}},
- {1666, {wxListCtrl, editLabel, 1}},
- {1667, {wxListCtrl, ensureVisible, 1}},
- {1668, {wxListCtrl, findItem_3_0, 3}},
- {1669, {wxListCtrl, findItem_3_1, 3}},
- {1670, {wxListCtrl, getColumn, 2}},
- {1671, {wxListCtrl, getColumnCount, 0}},
- {1672, {wxListCtrl, getColumnWidth, 1}},
- {1673, {wxListCtrl, getCountPerPage, 0}},
- {1674, {wxListCtrl, getEditControl, 0}},
- {1675, {wxListCtrl, getImageList, 1}},
- {1676, {wxListCtrl, getItem, 1}},
- {1677, {wxListCtrl, getItemBackgroundColour, 1}},
- {1678, {wxListCtrl, getItemCount, 0}},
- {1679, {wxListCtrl, getItemData, 1}},
- {1680, {wxListCtrl, getItemFont, 1}},
- {1681, {wxListCtrl, getItemPosition, 2}},
- {1682, {wxListCtrl, getItemRect, 3}},
- {1683, {wxListCtrl, getItemSpacing, 0}},
- {1684, {wxListCtrl, getItemState, 2}},
- {1685, {wxListCtrl, getItemText, 1}},
- {1686, {wxListCtrl, getItemTextColour, 1}},
- {1687, {wxListCtrl, getNextItem, 2}},
- {1688, {wxListCtrl, getSelectedItemCount, 0}},
- {1689, {wxListCtrl, getTextColour, 0}},
- {1690, {wxListCtrl, getTopItem, 0}},
- {1691, {wxListCtrl, getViewRect, 0}},
- {1692, {wxListCtrl, hitTest, 2}},
- {1693, {wxListCtrl, insertColumn_2, 2}},
- {1694, {wxListCtrl, insertColumn_3, 3}},
- {1695, {wxListCtrl, insertItem_1, 1}},
- {1696, {wxListCtrl, insertItem_2_1, 2}},
- {1697, {wxListCtrl, insertItem_2_0, 2}},
- {1698, {wxListCtrl, insertItem_3, 3}},
- {1699, {wxListCtrl, refreshItem, 1}},
- {1700, {wxListCtrl, refreshItems, 2}},
- {1701, {wxListCtrl, scrollList, 2}},
- {1702, {wxListCtrl, setBackgroundColour, 1}},
- {1703, {wxListCtrl, setColumn, 2}},
- {1704, {wxListCtrl, setColumnWidth, 2}},
- {1705, {wxListCtrl, setImageList, 2}},
- {1706, {wxListCtrl, setItem_1, 1}},
- {1707, {wxListCtrl, setItem_4, 4}},
- {1708, {wxListCtrl, setItemBackgroundColour, 2}},
- {1709, {wxListCtrl, setItemCount, 1}},
- {1710, {wxListCtrl, setItemData, 2}},
- {1711, {wxListCtrl, setItemFont, 2}},
- {1712, {wxListCtrl, setItemImage, 3}},
- {1713, {wxListCtrl, setItemColumnImage, 3}},
- {1714, {wxListCtrl, setItemPosition, 2}},
- {1715, {wxListCtrl, setItemState, 3}},
- {1716, {wxListCtrl, setItemText, 2}},
- {1717, {wxListCtrl, setItemTextColour, 2}},
- {1718, {wxListCtrl, setSingleStyle, 2}},
- {1719, {wxListCtrl, setTextColour, 1}},
- {1720, {wxListCtrl, setWindowStyleFlag, 1}},
- {1721, {wxListCtrl, sortItems, 2}},
- {1722, {wxListCtrl, 'Destroy', undefined}},
- {1723, {wxListView, clearColumnImage, 1}},
- {1724, {wxListView, focus, 1}},
- {1725, {wxListView, getFirstSelected, 0}},
- {1726, {wxListView, getFocusedItem, 0}},
- {1727, {wxListView, getNextSelected, 1}},
- {1728, {wxListView, isSelected, 1}},
- {1729, {wxListView, select, 2}},
- {1730, {wxListView, setColumnImage, 2}},
- {1731, {wxListItem, new_0, 0}},
- {1732, {wxListItem, new_1, 1}},
- {1733, {wxListItem, destruct, 0}},
- {1734, {wxListItem, clear, 0}},
- {1735, {wxListItem, getAlign, 0}},
- {1736, {wxListItem, getBackgroundColour, 0}},
- {1737, {wxListItem, getColumn, 0}},
- {1738, {wxListItem, getFont, 0}},
- {1739, {wxListItem, getId, 0}},
- {1740, {wxListItem, getImage, 0}},
- {1741, {wxListItem, getMask, 0}},
- {1742, {wxListItem, getState, 0}},
- {1743, {wxListItem, getText, 0}},
- {1744, {wxListItem, getTextColour, 0}},
- {1745, {wxListItem, getWidth, 0}},
- {1746, {wxListItem, setAlign, 1}},
- {1747, {wxListItem, setBackgroundColour, 1}},
- {1748, {wxListItem, setColumn, 1}},
- {1749, {wxListItem, setFont, 1}},
- {1750, {wxListItem, setId, 1}},
- {1751, {wxListItem, setImage, 1}},
- {1752, {wxListItem, setMask, 1}},
- {1753, {wxListItem, setState, 1}},
- {1754, {wxListItem, setStateMask, 1}},
- {1755, {wxListItem, setText, 1}},
- {1756, {wxListItem, setTextColour, 1}},
- {1757, {wxListItem, setWidth, 1}},
- {1758, {wxListItemAttr, new_0, 0}},
- {1759, {wxListItemAttr, new_3, 3}},
- {1760, {wxListItemAttr, getBackgroundColour, 0}},
- {1761, {wxListItemAttr, getFont, 0}},
- {1762, {wxListItemAttr, getTextColour, 0}},
- {1763, {wxListItemAttr, hasBackgroundColour, 0}},
- {1764, {wxListItemAttr, hasFont, 0}},
- {1765, {wxListItemAttr, hasTextColour, 0}},
- {1766, {wxListItemAttr, setBackgroundColour, 1}},
- {1767, {wxListItemAttr, setFont, 1}},
- {1768, {wxListItemAttr, setTextColour, 1}},
- {1769, {wxListItemAttr, 'Destroy', undefined}},
- {1770, {wxImageList, new_0, 0}},
- {1771, {wxImageList, new_3, 3}},
- {1772, {wxImageList, add_1, 1}},
- {1773, {wxImageList, add_2_0, 2}},
- {1774, {wxImageList, add_2_1, 2}},
- {1775, {wxImageList, create, 3}},
- {1777, {wxImageList, draw, 5}},
- {1778, {wxImageList, getBitmap, 1}},
- {1779, {wxImageList, getIcon, 1}},
- {1780, {wxImageList, getImageCount, 0}},
- {1781, {wxImageList, getSize, 3}},
- {1782, {wxImageList, remove, 1}},
- {1783, {wxImageList, removeAll, 0}},
- {1784, {wxImageList, replace_2, 2}},
- {1785, {wxImageList, replace_3, 3}},
- {1786, {wxImageList, 'Destroy', undefined}},
- {1787, {wxTextAttr, new_0, 0}},
- {1788, {wxTextAttr, new_2, 2}},
- {1789, {wxTextAttr, getAlignment, 0}},
- {1790, {wxTextAttr, getBackgroundColour, 0}},
- {1791, {wxTextAttr, getFont, 0}},
- {1792, {wxTextAttr, getLeftIndent, 0}},
- {1793, {wxTextAttr, getLeftSubIndent, 0}},
- {1794, {wxTextAttr, getRightIndent, 0}},
- {1795, {wxTextAttr, getTabs, 0}},
- {1796, {wxTextAttr, getTextColour, 0}},
- {1797, {wxTextAttr, hasBackgroundColour, 0}},
- {1798, {wxTextAttr, hasFont, 0}},
- {1799, {wxTextAttr, hasTextColour, 0}},
- {1800, {wxTextAttr, getFlags, 0}},
- {1801, {wxTextAttr, isDefault, 0}},
- {1802, {wxTextAttr, setAlignment, 1}},
- {1803, {wxTextAttr, setBackgroundColour, 1}},
- {1804, {wxTextAttr, setFlags, 1}},
- {1805, {wxTextAttr, setFont, 2}},
- {1806, {wxTextAttr, setLeftIndent, 2}},
- {1807, {wxTextAttr, setRightIndent, 1}},
- {1808, {wxTextAttr, setTabs, 1}},
- {1809, {wxTextAttr, setTextColour, 1}},
- {1810, {wxTextAttr, 'Destroy', undefined}},
- {1812, {wxTextCtrl, new_3, 3}},
- {1813, {wxTextCtrl, new_0, 0}},
- {1815, {wxTextCtrl, destruct, 0}},
- {1816, {wxTextCtrl, appendText, 1}},
- {1817, {wxTextCtrl, canCopy, 0}},
- {1818, {wxTextCtrl, canCut, 0}},
- {1819, {wxTextCtrl, canPaste, 0}},
- {1820, {wxTextCtrl, canRedo, 0}},
- {1821, {wxTextCtrl, canUndo, 0}},
- {1822, {wxTextCtrl, clear, 0}},
- {1823, {wxTextCtrl, copy, 0}},
- {1824, {wxTextCtrl, create, 3}},
- {1825, {wxTextCtrl, cut, 0}},
- {1826, {wxTextCtrl, discardEdits, 0}},
- {1827, {wxTextCtrl, emulateKeyPress, 1}},
- {1828, {wxTextCtrl, getDefaultStyle, 0}},
- {1829, {wxTextCtrl, getInsertionPoint, 0}},
- {1830, {wxTextCtrl, getLastPosition, 0}},
- {1831, {wxTextCtrl, getLineLength, 1}},
- {1832, {wxTextCtrl, getLineText, 1}},
- {1833, {wxTextCtrl, getNumberOfLines, 0}},
- {1834, {wxTextCtrl, getRange, 2}},
- {1835, {wxTextCtrl, getSelection, 2}},
- {1836, {wxTextCtrl, getStringSelection, 0}},
- {1837, {wxTextCtrl, getStyle, 2}},
- {1838, {wxTextCtrl, getValue, 0}},
- {1839, {wxTextCtrl, isEditable, 0}},
- {1840, {wxTextCtrl, isModified, 0}},
- {1841, {wxTextCtrl, isMultiLine, 0}},
- {1842, {wxTextCtrl, isSingleLine, 0}},
- {1843, {wxTextCtrl, loadFile, 2}},
- {1844, {wxTextCtrl, markDirty, 0}},
- {1845, {wxTextCtrl, paste, 0}},
- {1846, {wxTextCtrl, positionToXY, 3}},
- {1847, {wxTextCtrl, redo, 0}},
- {1848, {wxTextCtrl, remove, 2}},
- {1849, {wxTextCtrl, replace, 3}},
- {1850, {wxTextCtrl, saveFile, 1}},
- {1851, {wxTextCtrl, setDefaultStyle, 1}},
- {1852, {wxTextCtrl, setEditable, 1}},
- {1853, {wxTextCtrl, setInsertionPoint, 1}},
- {1854, {wxTextCtrl, setInsertionPointEnd, 0}},
- {1856, {wxTextCtrl, setMaxLength, 1}},
- {1857, {wxTextCtrl, setSelection, 2}},
- {1858, {wxTextCtrl, setStyle, 3}},
- {1859, {wxTextCtrl, setValue, 1}},
- {1860, {wxTextCtrl, showPosition, 1}},
- {1861, {wxTextCtrl, undo, 0}},
- {1862, {wxTextCtrl, writeText, 1}},
- {1863, {wxTextCtrl, xYToPosition, 2}},
- {1866, {wxNotebook, new_0, 0}},
- {1867, {wxNotebook, new_3, 3}},
- {1868, {wxNotebook, destruct, 0}},
- {1869, {wxNotebook, addPage, 3}},
- {1870, {wxNotebook, advanceSelection, 1}},
- {1871, {wxNotebook, assignImageList, 1}},
- {1872, {wxNotebook, create, 3}},
- {1873, {wxNotebook, deleteAllPages, 0}},
- {1874, {wxNotebook, deletePage, 1}},
- {1875, {wxNotebook, removePage, 1}},
- {1876, {wxNotebook, getCurrentPage, 0}},
- {1877, {wxNotebook, getImageList, 0}},
- {1879, {wxNotebook, getPage, 1}},
- {1880, {wxNotebook, getPageCount, 0}},
- {1881, {wxNotebook, getPageImage, 1}},
- {1882, {wxNotebook, getPageText, 1}},
- {1883, {wxNotebook, getRowCount, 0}},
- {1884, {wxNotebook, getSelection, 0}},
- {1885, {wxNotebook, getThemeBackgroundColour, 0}},
- {1887, {wxNotebook, hitTest, 2}},
- {1889, {wxNotebook, insertPage, 4}},
- {1890, {wxNotebook, setImageList, 1}},
- {1891, {wxNotebook, setPadding, 1}},
- {1892, {wxNotebook, setPageSize, 1}},
- {1893, {wxNotebook, setPageImage, 2}},
- {1894, {wxNotebook, setPageText, 2}},
- {1895, {wxNotebook, setSelection, 1}},
- {1896, {wxNotebook, changeSelection, 1}},
- {1897, {wxChoicebook, new_0, 0}},
- {1898, {wxChoicebook, new_3, 3}},
- {1899, {wxChoicebook, addPage, 3}},
- {1900, {wxChoicebook, advanceSelection, 1}},
- {1901, {wxChoicebook, assignImageList, 1}},
- {1902, {wxChoicebook, create, 3}},
- {1903, {wxChoicebook, deleteAllPages, 0}},
- {1904, {wxChoicebook, deletePage, 1}},
- {1905, {wxChoicebook, removePage, 1}},
- {1906, {wxChoicebook, getCurrentPage, 0}},
- {1907, {wxChoicebook, getImageList, 0}},
- {1909, {wxChoicebook, getPage, 1}},
- {1910, {wxChoicebook, getPageCount, 0}},
- {1911, {wxChoicebook, getPageImage, 1}},
- {1912, {wxChoicebook, getPageText, 1}},
- {1913, {wxChoicebook, getSelection, 0}},
- {1914, {wxChoicebook, hitTest, 2}},
- {1915, {wxChoicebook, insertPage, 4}},
- {1916, {wxChoicebook, setImageList, 1}},
- {1917, {wxChoicebook, setPageSize, 1}},
- {1918, {wxChoicebook, setPageImage, 2}},
- {1919, {wxChoicebook, setPageText, 2}},
- {1920, {wxChoicebook, setSelection, 1}},
- {1921, {wxChoicebook, changeSelection, 1}},
- {1922, {wxChoicebook, 'Destroy', undefined}},
- {1923, {wxToolbook, new_0, 0}},
- {1924, {wxToolbook, new_3, 3}},
- {1925, {wxToolbook, addPage, 3}},
- {1926, {wxToolbook, advanceSelection, 1}},
- {1927, {wxToolbook, assignImageList, 1}},
- {1928, {wxToolbook, create, 3}},
- {1929, {wxToolbook, deleteAllPages, 0}},
- {1930, {wxToolbook, deletePage, 1}},
- {1931, {wxToolbook, removePage, 1}},
- {1932, {wxToolbook, getCurrentPage, 0}},
- {1933, {wxToolbook, getImageList, 0}},
- {1935, {wxToolbook, getPage, 1}},
- {1936, {wxToolbook, getPageCount, 0}},
- {1937, {wxToolbook, getPageImage, 1}},
- {1938, {wxToolbook, getPageText, 1}},
- {1939, {wxToolbook, getSelection, 0}},
- {1941, {wxToolbook, hitTest, 2}},
- {1942, {wxToolbook, insertPage, 4}},
- {1943, {wxToolbook, setImageList, 1}},
- {1944, {wxToolbook, setPageSize, 1}},
- {1945, {wxToolbook, setPageImage, 2}},
- {1946, {wxToolbook, setPageText, 2}},
- {1947, {wxToolbook, setSelection, 1}},
- {1948, {wxToolbook, changeSelection, 1}},
- {1949, {wxToolbook, 'Destroy', undefined}},
- {1950, {wxListbook, new_0, 0}},
- {1951, {wxListbook, new_3, 3}},
- {1952, {wxListbook, addPage, 3}},
- {1953, {wxListbook, advanceSelection, 1}},
- {1954, {wxListbook, assignImageList, 1}},
- {1955, {wxListbook, create, 3}},
- {1956, {wxListbook, deleteAllPages, 0}},
- {1957, {wxListbook, deletePage, 1}},
- {1958, {wxListbook, removePage, 1}},
- {1959, {wxListbook, getCurrentPage, 0}},
- {1960, {wxListbook, getImageList, 0}},
- {1962, {wxListbook, getPage, 1}},
- {1963, {wxListbook, getPageCount, 0}},
- {1964, {wxListbook, getPageImage, 1}},
- {1965, {wxListbook, getPageText, 1}},
- {1966, {wxListbook, getSelection, 0}},
- {1968, {wxListbook, hitTest, 2}},
- {1969, {wxListbook, insertPage, 4}},
- {1970, {wxListbook, setImageList, 1}},
- {1971, {wxListbook, setPageSize, 1}},
- {1972, {wxListbook, setPageImage, 2}},
- {1973, {wxListbook, setPageText, 2}},
- {1974, {wxListbook, setSelection, 1}},
- {1975, {wxListbook, changeSelection, 1}},
- {1976, {wxListbook, 'Destroy', undefined}},
- {1977, {wxTreebook, new_0, 0}},
- {1978, {wxTreebook, new_3, 3}},
- {1979, {wxTreebook, addPage, 3}},
- {1980, {wxTreebook, advanceSelection, 1}},
- {1981, {wxTreebook, assignImageList, 1}},
- {1982, {wxTreebook, create, 3}},
- {1983, {wxTreebook, deleteAllPages, 0}},
- {1984, {wxTreebook, deletePage, 1}},
- {1985, {wxTreebook, removePage, 1}},
- {1986, {wxTreebook, getCurrentPage, 0}},
- {1987, {wxTreebook, getImageList, 0}},
- {1989, {wxTreebook, getPage, 1}},
- {1990, {wxTreebook, getPageCount, 0}},
- {1991, {wxTreebook, getPageImage, 1}},
- {1992, {wxTreebook, getPageText, 1}},
- {1993, {wxTreebook, getSelection, 0}},
- {1994, {wxTreebook, expandNode, 2}},
- {1995, {wxTreebook, isNodeExpanded, 1}},
- {1997, {wxTreebook, hitTest, 2}},
- {1998, {wxTreebook, insertPage, 4}},
- {1999, {wxTreebook, insertSubPage, 4}},
- {2000, {wxTreebook, setImageList, 1}},
- {2001, {wxTreebook, setPageSize, 1}},
- {2002, {wxTreebook, setPageImage, 2}},
- {2003, {wxTreebook, setPageText, 2}},
- {2004, {wxTreebook, setSelection, 1}},
- {2005, {wxTreebook, changeSelection, 1}},
- {2006, {wxTreebook, 'Destroy', undefined}},
- {2009, {wxTreeCtrl, new_2, 2}},
- {2010, {wxTreeCtrl, new_0, 0}},
- {2012, {wxTreeCtrl, destruct, 0}},
- {2013, {wxTreeCtrl, addRoot, 2}},
- {2014, {wxTreeCtrl, appendItem, 3}},
- {2015, {wxTreeCtrl, assignImageList, 1}},
- {2016, {wxTreeCtrl, assignStateImageList, 1}},
- {2017, {wxTreeCtrl, collapse, 1}},
- {2018, {wxTreeCtrl, collapseAndReset, 1}},
- {2019, {wxTreeCtrl, create, 2}},
- {2020, {wxTreeCtrl, delete, 1}},
- {2021, {wxTreeCtrl, deleteAllItems, 0}},
- {2022, {wxTreeCtrl, deleteChildren, 1}},
- {2023, {wxTreeCtrl, editLabel, 1}},
- {2024, {wxTreeCtrl, ensureVisible, 1}},
- {2025, {wxTreeCtrl, expand, 1}},
- {2026, {wxTreeCtrl, getBoundingRect, 3}},
- {2028, {wxTreeCtrl, getChildrenCount, 2}},
- {2029, {wxTreeCtrl, getCount, 0}},
- {2030, {wxTreeCtrl, getEditControl, 0}},
- {2031, {wxTreeCtrl, getFirstChild, 2}},
- {2032, {wxTreeCtrl, getNextChild, 2}},
- {2033, {wxTreeCtrl, getFirstVisibleItem, 0}},
- {2034, {wxTreeCtrl, getImageList, 0}},
- {2035, {wxTreeCtrl, getIndent, 0}},
- {2036, {wxTreeCtrl, getItemBackgroundColour, 1}},
- {2037, {wxTreeCtrl, getItemData, 1}},
- {2038, {wxTreeCtrl, getItemFont, 1}},
- {2039, {wxTreeCtrl, getItemImage_1, 1}},
- {2040, {wxTreeCtrl, getItemImage_2, 2}},
- {2041, {wxTreeCtrl, getItemText, 1}},
- {2042, {wxTreeCtrl, getItemTextColour, 1}},
- {2043, {wxTreeCtrl, getLastChild, 1}},
- {2044, {wxTreeCtrl, getNextSibling, 1}},
- {2045, {wxTreeCtrl, getNextVisible, 1}},
- {2046, {wxTreeCtrl, getItemParent, 1}},
- {2047, {wxTreeCtrl, getPrevSibling, 1}},
- {2048, {wxTreeCtrl, getPrevVisible, 1}},
- {2049, {wxTreeCtrl, getRootItem, 0}},
- {2050, {wxTreeCtrl, getSelection, 0}},
- {2051, {wxTreeCtrl, getSelections, 1}},
- {2052, {wxTreeCtrl, getStateImageList, 0}},
- {2053, {wxTreeCtrl, hitTest, 2}},
- {2055, {wxTreeCtrl, insertItem, 4}},
- {2056, {wxTreeCtrl, isBold, 1}},
- {2057, {wxTreeCtrl, isExpanded, 1}},
- {2058, {wxTreeCtrl, isSelected, 1}},
- {2059, {wxTreeCtrl, isVisible, 1}},
- {2060, {wxTreeCtrl, itemHasChildren, 1}},
- {2061, {wxTreeCtrl, isTreeItemIdOk, 1}},
- {2062, {wxTreeCtrl, prependItem, 3}},
- {2063, {wxTreeCtrl, scrollTo, 1}},
- {2064, {wxTreeCtrl, selectItem_1, 1}},
- {2065, {wxTreeCtrl, selectItem_2, 2}},
- {2066, {wxTreeCtrl, setIndent, 1}},
- {2067, {wxTreeCtrl, setImageList, 1}},
- {2068, {wxTreeCtrl, setItemBackgroundColour, 2}},
- {2069, {wxTreeCtrl, setItemBold, 2}},
- {2070, {wxTreeCtrl, setItemData, 2}},
- {2071, {wxTreeCtrl, setItemDropHighlight, 2}},
- {2072, {wxTreeCtrl, setItemFont, 2}},
- {2073, {wxTreeCtrl, setItemHasChildren, 2}},
- {2074, {wxTreeCtrl, setItemImage_2, 2}},
- {2075, {wxTreeCtrl, setItemImage_3, 3}},
- {2076, {wxTreeCtrl, setItemText, 2}},
- {2077, {wxTreeCtrl, setItemTextColour, 2}},
- {2078, {wxTreeCtrl, setStateImageList, 1}},
- {2079, {wxTreeCtrl, setWindowStyle, 1}},
- {2080, {wxTreeCtrl, sortChildren, 1}},
- {2081, {wxTreeCtrl, toggle, 1}},
- {2082, {wxTreeCtrl, toggleItemSelection, 1}},
- {2083, {wxTreeCtrl, unselect, 0}},
- {2084, {wxTreeCtrl, unselectAll, 0}},
- {2085, {wxTreeCtrl, unselectItem, 1}},
- {2086, {wxScrollBar, new_0, 0}},
- {2087, {wxScrollBar, new_3, 3}},
- {2088, {wxScrollBar, destruct, 0}},
- {2089, {wxScrollBar, create, 3}},
- {2090, {wxScrollBar, getRange, 0}},
- {2091, {wxScrollBar, getPageSize, 0}},
- {2092, {wxScrollBar, getThumbPosition, 0}},
- {2093, {wxScrollBar, getThumbSize, 0}},
- {2094, {wxScrollBar, setThumbPosition, 1}},
- {2095, {wxScrollBar, setScrollbar, 5}},
- {2097, {wxSpinButton, new_2, 2}},
- {2098, {wxSpinButton, new_0, 0}},
- {2099, {wxSpinButton, create, 2}},
- {2100, {wxSpinButton, getMax, 0}},
- {2101, {wxSpinButton, getMin, 0}},
- {2102, {wxSpinButton, getValue, 0}},
- {2103, {wxSpinButton, setRange, 2}},
- {2104, {wxSpinButton, setValue, 1}},
- {2105, {wxSpinButton, 'Destroy', undefined}},
- {2106, {wxSpinCtrl, new_0, 0}},
- {2107, {wxSpinCtrl, new_2, 2}},
- {2109, {wxSpinCtrl, create, 2}},
- {2112, {wxSpinCtrl, setValue_1_1, 1}},
- {2113, {wxSpinCtrl, setValue_1_0, 1}},
- {2115, {wxSpinCtrl, getValue, 0}},
- {2117, {wxSpinCtrl, setRange, 2}},
- {2118, {wxSpinCtrl, setSelection, 2}},
- {2120, {wxSpinCtrl, getMin, 0}},
- {2122, {wxSpinCtrl, getMax, 0}},
- {2123, {wxSpinCtrl, 'Destroy', undefined}},
- {2124, {wxStaticText, new_0, 0}},
- {2125, {wxStaticText, new_4, 4}},
- {2126, {wxStaticText, create, 4}},
- {2127, {wxStaticText, getLabel, 0}},
- {2128, {wxStaticText, setLabel, 1}},
- {2129, {wxStaticText, wrap, 1}},
- {2130, {wxStaticText, 'Destroy', undefined}},
- {2131, {wxStaticBitmap, new_0, 0}},
- {2132, {wxStaticBitmap, new_4, 4}},
- {2133, {wxStaticBitmap, create, 4}},
- {2134, {wxStaticBitmap, getBitmap, 0}},
- {2135, {wxStaticBitmap, setBitmap, 1}},
- {2136, {wxStaticBitmap, 'Destroy', undefined}},
- {2137, {wxRadioBox, new, 7}},
- {2139, {wxRadioBox, destruct, 0}},
- {2140, {wxRadioBox, create, 7}},
- {2141, {wxRadioBox, enable_2, 2}},
- {2142, {wxRadioBox, enable_1, 1}},
- {2143, {wxRadioBox, getSelection, 0}},
- {2144, {wxRadioBox, getString, 1}},
- {2145, {wxRadioBox, setSelection, 1}},
- {2146, {wxRadioBox, show_2, 2}},
- {2147, {wxRadioBox, show_1, 1}},
- {2148, {wxRadioBox, getColumnCount, 0}},
- {2149, {wxRadioBox, getItemHelpText, 1}},
- {2150, {wxRadioBox, getItemToolTip, 1}},
- {2152, {wxRadioBox, getItemFromPoint, 1}},
- {2153, {wxRadioBox, getRowCount, 0}},
- {2154, {wxRadioBox, isItemEnabled, 1}},
- {2155, {wxRadioBox, isItemShown, 1}},
- {2156, {wxRadioBox, setItemHelpText, 2}},
- {2157, {wxRadioBox, setItemToolTip, 2}},
- {2158, {wxRadioButton, new_0, 0}},
- {2159, {wxRadioButton, new_4, 4}},
- {2160, {wxRadioButton, create, 4}},
- {2161, {wxRadioButton, getValue, 0}},
- {2162, {wxRadioButton, setValue, 1}},
- {2163, {wxRadioButton, 'Destroy', undefined}},
- {2165, {wxSlider, new_6, 6}},
- {2166, {wxSlider, new_0, 0}},
- {2167, {wxSlider, create, 6}},
- {2168, {wxSlider, getLineSize, 0}},
- {2169, {wxSlider, getMax, 0}},
- {2170, {wxSlider, getMin, 0}},
- {2171, {wxSlider, getPageSize, 0}},
- {2172, {wxSlider, getThumbLength, 0}},
- {2173, {wxSlider, getValue, 0}},
- {2174, {wxSlider, setLineSize, 1}},
- {2175, {wxSlider, setPageSize, 1}},
- {2176, {wxSlider, setRange, 2}},
- {2177, {wxSlider, setThumbLength, 1}},
- {2178, {wxSlider, setValue, 1}},
- {2179, {wxSlider, 'Destroy', undefined}},
- {2181, {wxDialog, new_4, 4}},
- {2182, {wxDialog, new_0, 0}},
- {2184, {wxDialog, destruct, 0}},
- {2185, {wxDialog, create, 4}},
- {2186, {wxDialog, createButtonSizer, 1}},
- {2187, {wxDialog, createStdDialogButtonSizer, 1}},
- {2188, {wxDialog, endModal, 1}},
- {2189, {wxDialog, getAffirmativeId, 0}},
- {2190, {wxDialog, getReturnCode, 0}},
- {2191, {wxDialog, isModal, 0}},
- {2192, {wxDialog, setAffirmativeId, 1}},
- {2193, {wxDialog, setReturnCode, 1}},
- {2194, {wxDialog, show, 1}},
- {2195, {wxDialog, showModal, 0}},
- {2196, {wxColourDialog, new_0, 0}},
- {2197, {wxColourDialog, new_2, 2}},
- {2198, {wxColourDialog, destruct, 0}},
- {2199, {wxColourDialog, create, 2}},
- {2200, {wxColourDialog, getColourData, 0}},
- {2201, {wxColourData, new_0, 0}},
- {2202, {wxColourData, new_1, 1}},
- {2203, {wxColourData, destruct, 0}},
- {2204, {wxColourData, getChooseFull, 0}},
- {2205, {wxColourData, getColour, 0}},
- {2207, {wxColourData, getCustomColour, 1}},
- {2208, {wxColourData, setChooseFull, 1}},
- {2209, {wxColourData, setColour, 1}},
- {2210, {wxColourData, setCustomColour, 2}},
- {2211, {wxPalette, new_0, 0}},
- {2212, {wxPalette, new_4, 4}},
- {2214, {wxPalette, destruct, 0}},
- {2215, {wxPalette, create, 4}},
- {2216, {wxPalette, getColoursCount, 0}},
- {2217, {wxPalette, getPixel, 3}},
- {2218, {wxPalette, getRGB, 4}},
- {2219, {wxPalette, isOk, 0}},
- {2223, {wxDirDialog, new, 2}},
- {2224, {wxDirDialog, destruct, 0}},
- {2225, {wxDirDialog, getPath, 0}},
- {2226, {wxDirDialog, getMessage, 0}},
- {2227, {wxDirDialog, setMessage, 1}},
- {2228, {wxDirDialog, setPath, 1}},
- {2232, {wxFileDialog, new, 2}},
- {2233, {wxFileDialog, destruct, 0}},
- {2234, {wxFileDialog, getDirectory, 0}},
- {2235, {wxFileDialog, getFilename, 0}},
- {2236, {wxFileDialog, getFilenames, 1}},
- {2237, {wxFileDialog, getFilterIndex, 0}},
- {2238, {wxFileDialog, getMessage, 0}},
- {2239, {wxFileDialog, getPath, 0}},
- {2240, {wxFileDialog, getPaths, 1}},
- {2241, {wxFileDialog, getWildcard, 0}},
- {2242, {wxFileDialog, setDirectory, 1}},
- {2243, {wxFileDialog, setFilename, 1}},
- {2244, {wxFileDialog, setFilterIndex, 1}},
- {2245, {wxFileDialog, setMessage, 1}},
- {2246, {wxFileDialog, setPath, 1}},
- {2247, {wxFileDialog, setWildcard, 1}},
- {2248, {wxPickerBase, setInternalMargin, 1}},
- {2249, {wxPickerBase, getInternalMargin, 0}},
- {2250, {wxPickerBase, setTextCtrlProportion, 1}},
- {2251, {wxPickerBase, setPickerCtrlProportion, 1}},
- {2252, {wxPickerBase, getTextCtrlProportion, 0}},
- {2253, {wxPickerBase, getPickerCtrlProportion, 0}},
- {2254, {wxPickerBase, hasTextCtrl, 0}},
- {2255, {wxPickerBase, getTextCtrl, 0}},
- {2256, {wxPickerBase, isTextCtrlGrowable, 0}},
- {2257, {wxPickerBase, setPickerCtrlGrowable, 1}},
- {2258, {wxPickerBase, setTextCtrlGrowable, 1}},
- {2259, {wxPickerBase, isPickerCtrlGrowable, 0}},
- {2260, {wxFilePickerCtrl, new_0, 0}},
- {2261, {wxFilePickerCtrl, new_3, 3}},
- {2262, {wxFilePickerCtrl, create, 3}},
- {2263, {wxFilePickerCtrl, getPath, 0}},
- {2264, {wxFilePickerCtrl, setPath, 1}},
- {2265, {wxFilePickerCtrl, 'Destroy', undefined}},
- {2266, {wxDirPickerCtrl, new_0, 0}},
- {2267, {wxDirPickerCtrl, new_3, 3}},
- {2268, {wxDirPickerCtrl, create, 3}},
- {2269, {wxDirPickerCtrl, getPath, 0}},
- {2270, {wxDirPickerCtrl, setPath, 1}},
- {2271, {wxDirPickerCtrl, 'Destroy', undefined}},
- {2272, {wxColourPickerCtrl, new_0, 0}},
- {2273, {wxColourPickerCtrl, new_3, 3}},
- {2274, {wxColourPickerCtrl, create, 3}},
- {2275, {wxColourPickerCtrl, getColour, 0}},
- {2276, {wxColourPickerCtrl, setColour_1_1, 1}},
- {2277, {wxColourPickerCtrl, setColour_1_0, 1}},
- {2278, {wxColourPickerCtrl, 'Destroy', undefined}},
- {2279, {wxDatePickerCtrl, new_0, 0}},
- {2280, {wxDatePickerCtrl, new_3, 3}},
- {2281, {wxDatePickerCtrl, getRange, 2}},
- {2282, {wxDatePickerCtrl, getValue, 0}},
- {2283, {wxDatePickerCtrl, setRange, 2}},
- {2284, {wxDatePickerCtrl, setValue, 1}},
- {2285, {wxDatePickerCtrl, 'Destroy', undefined}},
- {2286, {wxFontPickerCtrl, new_0, 0}},
- {2287, {wxFontPickerCtrl, new_3, 3}},
- {2288, {wxFontPickerCtrl, create, 3}},
- {2289, {wxFontPickerCtrl, getSelectedFont, 0}},
- {2290, {wxFontPickerCtrl, setSelectedFont, 1}},
- {2291, {wxFontPickerCtrl, getMaxPointSize, 0}},
- {2292, {wxFontPickerCtrl, setMaxPointSize, 1}},
- {2293, {wxFontPickerCtrl, 'Destroy', undefined}},
- {2296, {wxFindReplaceDialog, new_0, 0}},
- {2297, {wxFindReplaceDialog, new_4, 4}},
- {2298, {wxFindReplaceDialog, destruct, 0}},
- {2299, {wxFindReplaceDialog, create, 4}},
- {2300, {wxFindReplaceDialog, getData, 0}},
- {2301, {wxFindReplaceData, new_0, 0}},
- {2302, {wxFindReplaceData, new_1, 1}},
- {2303, {wxFindReplaceData, getFindString, 0}},
- {2304, {wxFindReplaceData, getReplaceString, 0}},
- {2305, {wxFindReplaceData, getFlags, 0}},
- {2306, {wxFindReplaceData, setFlags, 1}},
- {2307, {wxFindReplaceData, setFindString, 1}},
- {2308, {wxFindReplaceData, setReplaceString, 1}},
- {2309, {wxFindReplaceData, 'Destroy', undefined}},
- {2310, {wxMultiChoiceDialog, new_0, 0}},
- {2312, {wxMultiChoiceDialog, new_5, 5}},
- {2313, {wxMultiChoiceDialog, getSelections, 0}},
- {2314, {wxMultiChoiceDialog, setSelections, 1}},
- {2315, {wxMultiChoiceDialog, 'Destroy', undefined}},
- {2316, {wxSingleChoiceDialog, new_0, 0}},
- {2318, {wxSingleChoiceDialog, new_5, 5}},
- {2319, {wxSingleChoiceDialog, getSelection, 0}},
- {2320, {wxSingleChoiceDialog, getStringSelection, 0}},
- {2321, {wxSingleChoiceDialog, setSelection, 1}},
- {2322, {wxSingleChoiceDialog, 'Destroy', undefined}},
- {2323, {wxTextEntryDialog, new, 3}},
- {2324, {wxTextEntryDialog, getValue, 0}},
- {2325, {wxTextEntryDialog, setValue, 1}},
- {2326, {wxTextEntryDialog, 'Destroy', undefined}},
- {2327, {wxPasswordEntryDialog, new, 3}},
- {2328, {wxPasswordEntryDialog, 'Destroy', undefined}},
- {2329, {wxFontData, new_0, 0}},
- {2330, {wxFontData, new_1, 1}},
- {2331, {wxFontData, destruct, 0}},
- {2332, {wxFontData, enableEffects, 1}},
- {2333, {wxFontData, getAllowSymbols, 0}},
- {2334, {wxFontData, getColour, 0}},
- {2335, {wxFontData, getChosenFont, 0}},
- {2336, {wxFontData, getEnableEffects, 0}},
- {2337, {wxFontData, getInitialFont, 0}},
- {2338, {wxFontData, getShowHelp, 0}},
- {2339, {wxFontData, setAllowSymbols, 1}},
- {2340, {wxFontData, setChosenFont, 1}},
- {2341, {wxFontData, setColour, 1}},
- {2342, {wxFontData, setInitialFont, 1}},
- {2343, {wxFontData, setRange, 2}},
- {2344, {wxFontData, setShowHelp, 1}},
- {2348, {wxFontDialog, new_0, 0}},
- {2350, {wxFontDialog, new_2, 2}},
- {2352, {wxFontDialog, create, 2}},
- {2353, {wxFontDialog, getFontData, 0}},
- {2355, {wxFontDialog, 'Destroy', undefined}},
- {2356, {wxProgressDialog, new, 3}},
- {2357, {wxProgressDialog, destruct, 0}},
- {2358, {wxProgressDialog, resume, 0}},
- {2359, {wxProgressDialog, update_2, 2}},
- {2360, {wxProgressDialog, update_0, 0}},
- {2361, {wxMessageDialog, new, 3}},
- {2362, {wxMessageDialog, destruct, 0}},
- {2363, {wxPageSetupDialog, new, 2}},
- {2364, {wxPageSetupDialog, destruct, 0}},
- {2365, {wxPageSetupDialog, getPageSetupData, 0}},
- {2366, {wxPageSetupDialog, showModal, 0}},
- {2367, {wxPageSetupDialogData, new_0, 0}},
- {2368, {wxPageSetupDialogData, new_1_0, 1}},
- {2369, {wxPageSetupDialogData, new_1_1, 1}},
- {2370, {wxPageSetupDialogData, destruct, 0}},
- {2371, {wxPageSetupDialogData, enableHelp, 1}},
- {2372, {wxPageSetupDialogData, enableMargins, 1}},
- {2373, {wxPageSetupDialogData, enableOrientation, 1}},
- {2374, {wxPageSetupDialogData, enablePaper, 1}},
- {2375, {wxPageSetupDialogData, enablePrinter, 1}},
- {2376, {wxPageSetupDialogData, getDefaultMinMargins, 0}},
- {2377, {wxPageSetupDialogData, getEnableMargins, 0}},
- {2378, {wxPageSetupDialogData, getEnableOrientation, 0}},
- {2379, {wxPageSetupDialogData, getEnablePaper, 0}},
- {2380, {wxPageSetupDialogData, getEnablePrinter, 0}},
- {2381, {wxPageSetupDialogData, getEnableHelp, 0}},
- {2382, {wxPageSetupDialogData, getDefaultInfo, 0}},
- {2383, {wxPageSetupDialogData, getMarginTopLeft, 0}},
- {2384, {wxPageSetupDialogData, getMarginBottomRight, 0}},
- {2385, {wxPageSetupDialogData, getMinMarginTopLeft, 0}},
- {2386, {wxPageSetupDialogData, getMinMarginBottomRight, 0}},
- {2387, {wxPageSetupDialogData, getPaperId, 0}},
- {2388, {wxPageSetupDialogData, getPaperSize, 0}},
- {2390, {wxPageSetupDialogData, getPrintData, 0}},
- {2391, {wxPageSetupDialogData, isOk, 0}},
- {2392, {wxPageSetupDialogData, setDefaultInfo, 1}},
- {2393, {wxPageSetupDialogData, setDefaultMinMargins, 1}},
- {2394, {wxPageSetupDialogData, setMarginTopLeft, 1}},
- {2395, {wxPageSetupDialogData, setMarginBottomRight, 1}},
- {2396, {wxPageSetupDialogData, setMinMarginTopLeft, 1}},
- {2397, {wxPageSetupDialogData, setMinMarginBottomRight, 1}},
- {2398, {wxPageSetupDialogData, setPaperId, 1}},
- {2399, {wxPageSetupDialogData, setPaperSize_1_1, 1}},
- {2400, {wxPageSetupDialogData, setPaperSize_1_0, 1}},
- {2401, {wxPageSetupDialogData, setPrintData, 1}},
- {2402, {wxPrintDialog, new_2_0, 2}},
- {2403, {wxPrintDialog, new_2_1, 2}},
- {2404, {wxPrintDialog, destruct, 0}},
- {2405, {wxPrintDialog, getPrintDialogData, 0}},
- {2406, {wxPrintDialog, getPrintDC, 0}},
- {2407, {wxPrintDialogData, new_0, 0}},
- {2408, {wxPrintDialogData, new_1_1, 1}},
- {2409, {wxPrintDialogData, new_1_0, 1}},
- {2410, {wxPrintDialogData, destruct, 0}},
- {2411, {wxPrintDialogData, enableHelp, 1}},
- {2412, {wxPrintDialogData, enablePageNumbers, 1}},
- {2413, {wxPrintDialogData, enablePrintToFile, 1}},
- {2414, {wxPrintDialogData, enableSelection, 1}},
- {2415, {wxPrintDialogData, getAllPages, 0}},
- {2416, {wxPrintDialogData, getCollate, 0}},
- {2417, {wxPrintDialogData, getFromPage, 0}},
- {2418, {wxPrintDialogData, getMaxPage, 0}},
- {2419, {wxPrintDialogData, getMinPage, 0}},
- {2420, {wxPrintDialogData, getNoCopies, 0}},
- {2421, {wxPrintDialogData, getPrintData, 0}},
- {2422, {wxPrintDialogData, getPrintToFile, 0}},
- {2423, {wxPrintDialogData, getSelection, 0}},
- {2424, {wxPrintDialogData, getToPage, 0}},
- {2425, {wxPrintDialogData, isOk, 0}},
- {2426, {wxPrintDialogData, setCollate, 1}},
- {2427, {wxPrintDialogData, setFromPage, 1}},
- {2428, {wxPrintDialogData, setMaxPage, 1}},
- {2429, {wxPrintDialogData, setMinPage, 1}},
- {2430, {wxPrintDialogData, setNoCopies, 1}},
- {2431, {wxPrintDialogData, setPrintData, 1}},
- {2432, {wxPrintDialogData, setPrintToFile, 1}},
- {2433, {wxPrintDialogData, setSelection, 1}},
- {2434, {wxPrintDialogData, setToPage, 1}},
- {2435, {wxPrintData, new_0, 0}},
- {2436, {wxPrintData, new_1, 1}},
- {2437, {wxPrintData, destruct, 0}},
- {2438, {wxPrintData, getCollate, 0}},
- {2439, {wxPrintData, getBin, 0}},
- {2440, {wxPrintData, getColour, 0}},
- {2441, {wxPrintData, getDuplex, 0}},
- {2442, {wxPrintData, getNoCopies, 0}},
- {2443, {wxPrintData, getOrientation, 0}},
- {2444, {wxPrintData, getPaperId, 0}},
- {2445, {wxPrintData, getPrinterName, 0}},
- {2446, {wxPrintData, getQuality, 0}},
- {2447, {wxPrintData, isOk, 0}},
- {2448, {wxPrintData, setBin, 1}},
- {2449, {wxPrintData, setCollate, 1}},
- {2450, {wxPrintData, setColour, 1}},
- {2451, {wxPrintData, setDuplex, 1}},
- {2452, {wxPrintData, setNoCopies, 1}},
- {2453, {wxPrintData, setOrientation, 1}},
- {2454, {wxPrintData, setPaperId, 1}},
- {2455, {wxPrintData, setPrinterName, 1}},
- {2456, {wxPrintData, setQuality, 1}},
- {2459, {wxPrintPreview, new_2, 2}},
- {2460, {wxPrintPreview, new_3, 3}},
- {2462, {wxPrintPreview, destruct, 0}},
- {2463, {wxPrintPreview, getCanvas, 0}},
- {2464, {wxPrintPreview, getCurrentPage, 0}},
- {2465, {wxPrintPreview, getFrame, 0}},
- {2466, {wxPrintPreview, getMaxPage, 0}},
- {2467, {wxPrintPreview, getMinPage, 0}},
- {2468, {wxPrintPreview, getPrintout, 0}},
- {2469, {wxPrintPreview, getPrintoutForPrinting, 0}},
- {2470, {wxPrintPreview, isOk, 0}},
- {2471, {wxPrintPreview, paintPage, 2}},
- {2472, {wxPrintPreview, print, 1}},
- {2473, {wxPrintPreview, renderPage, 1}},
- {2474, {wxPrintPreview, setCanvas, 1}},
- {2475, {wxPrintPreview, setCurrentPage, 1}},
- {2476, {wxPrintPreview, setFrame, 1}},
- {2477, {wxPrintPreview, setPrintout, 1}},
- {2478, {wxPrintPreview, setZoom, 1}},
- {2479, {wxPreviewFrame, new, 3}},
- {2480, {wxPreviewFrame, destruct, 0}},
- {2481, {wxPreviewFrame, createControlBar, 0}},
- {2482, {wxPreviewFrame, createCanvas, 0}},
- {2483, {wxPreviewFrame, initialize, 0}},
- {2484, {wxPreviewFrame, onCloseWindow, 1}},
- {2485, {wxPreviewControlBar, new, 4}},
- {2486, {wxPreviewControlBar, destruct, 0}},
- {2487, {wxPreviewControlBar, createButtons, 0}},
- {2488, {wxPreviewControlBar, getPrintPreview, 0}},
- {2489, {wxPreviewControlBar, getZoomControl, 0}},
- {2490, {wxPreviewControlBar, setZoomControl, 1}},
- {2492, {wxPrinter, new, 1}},
- {2493, {wxPrinter, createAbortWindow, 2}},
- {2494, {wxPrinter, getAbort, 0}},
- {2495, {wxPrinter, getLastError, 0}},
- {2496, {wxPrinter, getPrintDialogData, 0}},
- {2497, {wxPrinter, print, 3}},
- {2498, {wxPrinter, printDialog, 1}},
- {2499, {wxPrinter, reportError, 3}},
- {2500, {wxPrinter, setup, 1}},
- {2501, {wxPrinter, 'Destroy', undefined}},
- {2502, {wxXmlResource, new_1, 1}},
- {2503, {wxXmlResource, new_2, 2}},
- {2504, {wxXmlResource, destruct, 0}},
- {2505, {wxXmlResource, attachUnknownControl, 3}},
- {2506, {wxXmlResource, clearHandlers, 0}},
- {2507, {wxXmlResource, compareVersion, 4}},
- {2508, {wxXmlResource, get, 0}},
- {2509, {wxXmlResource, getFlags, 0}},
- {2510, {wxXmlResource, getVersion, 0}},
- {2511, {wxXmlResource, getXRCID, 2}},
- {2512, {wxXmlResource, initAllHandlers, 0}},
- {2513, {wxXmlResource, load, 1}},
- {2514, {wxXmlResource, loadBitmap, 1}},
- {2515, {wxXmlResource, loadDialog_2, 2}},
- {2516, {wxXmlResource, loadDialog_3, 3}},
- {2517, {wxXmlResource, loadFrame_2, 2}},
- {2518, {wxXmlResource, loadFrame_3, 3}},
- {2519, {wxXmlResource, loadIcon, 1}},
- {2520, {wxXmlResource, loadMenu, 1}},
- {2521, {wxXmlResource, loadMenuBar_2, 2}},
- {2522, {wxXmlResource, loadMenuBar_1, 1}},
- {2523, {wxXmlResource, loadPanel_2, 2}},
- {2524, {wxXmlResource, loadPanel_3, 3}},
- {2525, {wxXmlResource, loadToolBar, 2}},
- {2526, {wxXmlResource, set, 1}},
- {2527, {wxXmlResource, setFlags, 1}},
- {2528, {wxXmlResource, unload, 1}},
- {2529, {wxXmlResource, xrcctrl, 3}},
- {2530, {wxHtmlEasyPrinting, new, 1}},
- {2531, {wxHtmlEasyPrinting, destruct, 0}},
- {2532, {wxHtmlEasyPrinting, getPrintData, 0}},
- {2533, {wxHtmlEasyPrinting, getPageSetupData, 0}},
- {2534, {wxHtmlEasyPrinting, previewFile, 1}},
- {2535, {wxHtmlEasyPrinting, previewText, 2}},
- {2536, {wxHtmlEasyPrinting, printFile, 1}},
- {2537, {wxHtmlEasyPrinting, printText, 2}},
- {2538, {wxHtmlEasyPrinting, pageSetup, 0}},
- {2539, {wxHtmlEasyPrinting, setFonts, 3}},
- {2540, {wxHtmlEasyPrinting, setHeader, 2}},
- {2541, {wxHtmlEasyPrinting, setFooter, 2}},
- {2543, {wxGLCanvas, new_2, 2}},
- {2544, {wxGLCanvas, new_3_1, 3}},
- {2545, {wxGLCanvas, new_3_0, 3}},
- {2546, {wxGLCanvas, getContext, 0}},
- {2548, {wxGLCanvas, setCurrent, 0}},
- {2549, {wxGLCanvas, swapBuffers, 0}},
- {2550, {wxGLCanvas, 'Destroy', undefined}},
- {2551, {wxAuiManager, new, 1}},
- {2552, {wxAuiManager, destruct, 0}},
- {2553, {wxAuiManager, addPane_2_1, 2}},
- {2554, {wxAuiManager, addPane_3, 3}},
- {2555, {wxAuiManager, addPane_2_0, 2}},
- {2556, {wxAuiManager, detachPane, 1}},
- {2557, {wxAuiManager, getAllPanes, 0}},
- {2558, {wxAuiManager, getArtProvider, 0}},
- {2559, {wxAuiManager, getDockSizeConstraint, 2}},
- {2560, {wxAuiManager, getFlags, 0}},
- {2561, {wxAuiManager, getManagedWindow, 0}},
- {2562, {wxAuiManager, getManager, 1}},
- {2563, {wxAuiManager, getPane_1_1, 1}},
- {2564, {wxAuiManager, getPane_1_0, 1}},
- {2565, {wxAuiManager, hideHint, 0}},
- {2566, {wxAuiManager, insertPane, 3}},
- {2567, {wxAuiManager, loadPaneInfo, 2}},
- {2568, {wxAuiManager, loadPerspective, 2}},
- {2569, {wxAuiManager, savePaneInfo, 1}},
- {2570, {wxAuiManager, savePerspective, 0}},
- {2571, {wxAuiManager, setArtProvider, 1}},
- {2572, {wxAuiManager, setDockSizeConstraint, 2}},
- {2573, {wxAuiManager, setFlags, 1}},
- {2574, {wxAuiManager, setManagedWindow, 1}},
- {2575, {wxAuiManager, showHint, 1}},
- {2576, {wxAuiManager, unInit, 0}},
- {2577, {wxAuiManager, update, 0}},
- {2578, {wxAuiPaneInfo, new_0, 0}},
- {2579, {wxAuiPaneInfo, new_1, 1}},
- {2580, {wxAuiPaneInfo, destruct, 0}},
- {2581, {wxAuiPaneInfo, bestSize_1, 1}},
- {2582, {wxAuiPaneInfo, bestSize_2, 2}},
- {2583, {wxAuiPaneInfo, bottom, 0}},
- {2584, {wxAuiPaneInfo, bottomDockable, 1}},
- {2585, {wxAuiPaneInfo, caption, 1}},
- {2586, {wxAuiPaneInfo, captionVisible, 1}},
- {2587, {wxAuiPaneInfo, centre, 0}},
- {2588, {wxAuiPaneInfo, centrePane, 0}},
- {2589, {wxAuiPaneInfo, closeButton, 1}},
- {2590, {wxAuiPaneInfo, defaultPane, 0}},
- {2591, {wxAuiPaneInfo, destroyOnClose, 1}},
- {2592, {wxAuiPaneInfo, direction, 1}},
- {2593, {wxAuiPaneInfo, dock, 0}},
- {2594, {wxAuiPaneInfo, dockable, 1}},
- {2595, {wxAuiPaneInfo, fixed, 0}},
- {2596, {wxAuiPaneInfo, float, 0}},
- {2597, {wxAuiPaneInfo, floatable, 1}},
- {2598, {wxAuiPaneInfo, floatingPosition_1, 1}},
- {2599, {wxAuiPaneInfo, floatingPosition_2, 2}},
- {2600, {wxAuiPaneInfo, floatingSize_1, 1}},
- {2601, {wxAuiPaneInfo, floatingSize_2, 2}},
- {2602, {wxAuiPaneInfo, gripper, 1}},
- {2603, {wxAuiPaneInfo, gripperTop, 1}},
- {2604, {wxAuiPaneInfo, hasBorder, 0}},
- {2605, {wxAuiPaneInfo, hasCaption, 0}},
- {2606, {wxAuiPaneInfo, hasCloseButton, 0}},
- {2607, {wxAuiPaneInfo, hasFlag, 1}},
- {2608, {wxAuiPaneInfo, hasGripper, 0}},
- {2609, {wxAuiPaneInfo, hasGripperTop, 0}},
- {2610, {wxAuiPaneInfo, hasMaximizeButton, 0}},
- {2611, {wxAuiPaneInfo, hasMinimizeButton, 0}},
- {2612, {wxAuiPaneInfo, hasPinButton, 0}},
- {2613, {wxAuiPaneInfo, hide, 0}},
- {2614, {wxAuiPaneInfo, isBottomDockable, 0}},
- {2615, {wxAuiPaneInfo, isDocked, 0}},
- {2616, {wxAuiPaneInfo, isFixed, 0}},
- {2617, {wxAuiPaneInfo, isFloatable, 0}},
- {2618, {wxAuiPaneInfo, isFloating, 0}},
- {2619, {wxAuiPaneInfo, isLeftDockable, 0}},
- {2620, {wxAuiPaneInfo, isMovable, 0}},
- {2621, {wxAuiPaneInfo, isOk, 0}},
- {2622, {wxAuiPaneInfo, isResizable, 0}},
- {2623, {wxAuiPaneInfo, isRightDockable, 0}},
- {2624, {wxAuiPaneInfo, isShown, 0}},
- {2625, {wxAuiPaneInfo, isToolbar, 0}},
- {2626, {wxAuiPaneInfo, isTopDockable, 0}},
- {2627, {wxAuiPaneInfo, layer, 1}},
- {2628, {wxAuiPaneInfo, left, 0}},
- {2629, {wxAuiPaneInfo, leftDockable, 1}},
- {2630, {wxAuiPaneInfo, maxSize_1, 1}},
- {2631, {wxAuiPaneInfo, maxSize_2, 2}},
- {2632, {wxAuiPaneInfo, maximizeButton, 1}},
- {2633, {wxAuiPaneInfo, minSize_1, 1}},
- {2634, {wxAuiPaneInfo, minSize_2, 2}},
- {2635, {wxAuiPaneInfo, minimizeButton, 1}},
- {2636, {wxAuiPaneInfo, movable, 1}},
- {2637, {wxAuiPaneInfo, name, 1}},
- {2638, {wxAuiPaneInfo, paneBorder, 1}},
- {2639, {wxAuiPaneInfo, pinButton, 1}},
- {2640, {wxAuiPaneInfo, position, 1}},
- {2641, {wxAuiPaneInfo, resizable, 1}},
- {2642, {wxAuiPaneInfo, right, 0}},
- {2643, {wxAuiPaneInfo, rightDockable, 1}},
- {2644, {wxAuiPaneInfo, row, 1}},
- {2645, {wxAuiPaneInfo, safeSet, 1}},
- {2646, {wxAuiPaneInfo, setFlag, 2}},
- {2647, {wxAuiPaneInfo, show, 1}},
- {2648, {wxAuiPaneInfo, toolbarPane, 0}},
- {2649, {wxAuiPaneInfo, top, 0}},
- {2650, {wxAuiPaneInfo, topDockable, 1}},
- {2651, {wxAuiPaneInfo, window, 1}},
- {2652, {wxAuiNotebook, new_0, 0}},
- {2653, {wxAuiNotebook, new_2, 2}},
- {2654, {wxAuiNotebook, addPage, 3}},
- {2655, {wxAuiNotebook, create, 2}},
- {2656, {wxAuiNotebook, deletePage, 1}},
- {2657, {wxAuiNotebook, getArtProvider, 0}},
- {2658, {wxAuiNotebook, getPage, 1}},
- {2659, {wxAuiNotebook, getPageBitmap, 1}},
- {2660, {wxAuiNotebook, getPageCount, 0}},
- {2661, {wxAuiNotebook, getPageIndex, 1}},
- {2662, {wxAuiNotebook, getPageText, 1}},
- {2663, {wxAuiNotebook, getSelection, 0}},
- {2664, {wxAuiNotebook, insertPage, 4}},
- {2665, {wxAuiNotebook, removePage, 1}},
- {2666, {wxAuiNotebook, setArtProvider, 1}},
- {2667, {wxAuiNotebook, setFont, 1}},
- {2668, {wxAuiNotebook, setPageBitmap, 2}},
- {2669, {wxAuiNotebook, setPageText, 2}},
- {2670, {wxAuiNotebook, setSelection, 1}},
- {2671, {wxAuiNotebook, setTabCtrlHeight, 1}},
- {2672, {wxAuiNotebook, setUniformBitmapSize, 1}},
- {2673, {wxAuiNotebook, 'Destroy', undefined}},
- {2674, {wxMDIParentFrame, new_0, 0}},
- {2675, {wxMDIParentFrame, new_4, 4}},
- {2676, {wxMDIParentFrame, destruct, 0}},
- {2677, {wxMDIParentFrame, activateNext, 0}},
- {2678, {wxMDIParentFrame, activatePrevious, 0}},
- {2679, {wxMDIParentFrame, arrangeIcons, 0}},
- {2680, {wxMDIParentFrame, cascade, 0}},
- {2681, {wxMDIParentFrame, create, 4}},
- {2682, {wxMDIParentFrame, getActiveChild, 0}},
- {2683, {wxMDIParentFrame, getClientWindow, 0}},
- {2684, {wxMDIParentFrame, tile, 1}},
- {2685, {wxMDIChildFrame, new_0, 0}},
- {2686, {wxMDIChildFrame, new_4, 4}},
- {2687, {wxMDIChildFrame, destruct, 0}},
- {2688, {wxMDIChildFrame, activate, 0}},
- {2689, {wxMDIChildFrame, create, 4}},
- {2690, {wxMDIChildFrame, maximize, 1}},
- {2691, {wxMDIChildFrame, restore, 0}},
- {2692, {wxMDIClientWindow, new_0, 0}},
- {2693, {wxMDIClientWindow, new_2, 2}},
- {2694, {wxMDIClientWindow, destruct, 0}},
- {2695, {wxMDIClientWindow, createClient, 2}},
- {2696, {wxLayoutAlgorithm, new, 0}},
- {2697, {wxLayoutAlgorithm, layoutFrame, 2}},
- {2698, {wxLayoutAlgorithm, layoutMDIFrame, 2}},
- {2699, {wxLayoutAlgorithm, layoutWindow, 2}},
- {2700, {wxLayoutAlgorithm, 'Destroy', undefined}},
- {2701, {wxEvent, getId, 0}},
- {2702, {wxEvent, getSkipped, 0}},
- {2703, {wxEvent, getTimestamp, 0}},
- {2704, {wxEvent, isCommandEvent, 0}},
- {2705, {wxEvent, resumePropagation, 1}},
- {2706, {wxEvent, shouldPropagate, 0}},
- {2707, {wxEvent, skip, 1}},
- {2708, {wxEvent, stopPropagation, 0}},
- {2709, {wxCommandEvent, getClientData, 0}},
- {2710, {wxCommandEvent, getExtraLong, 0}},
- {2711, {wxCommandEvent, getInt, 0}},
- {2712, {wxCommandEvent, getSelection, 0}},
- {2713, {wxCommandEvent, getString, 0}},
- {2714, {wxCommandEvent, isChecked, 0}},
- {2715, {wxCommandEvent, isSelection, 0}},
- {2716, {wxCommandEvent, setInt, 1}},
- {2717, {wxCommandEvent, setString, 1}},
- {2718, {wxScrollEvent, getOrientation, 0}},
- {2719, {wxScrollEvent, getPosition, 0}},
- {2720, {wxScrollWinEvent, getOrientation, 0}},
- {2721, {wxScrollWinEvent, getPosition, 0}},
- {2722, {wxMouseEvent, altDown, 0}},
- {2723, {wxMouseEvent, button, 1}},
- {2724, {wxMouseEvent, buttonDClick, 1}},
- {2725, {wxMouseEvent, buttonDown, 1}},
- {2726, {wxMouseEvent, buttonUp, 1}},
- {2727, {wxMouseEvent, cmdDown, 0}},
- {2728, {wxMouseEvent, controlDown, 0}},
- {2729, {wxMouseEvent, dragging, 0}},
- {2730, {wxMouseEvent, entering, 0}},
- {2731, {wxMouseEvent, getButton, 0}},
- {2734, {wxMouseEvent, getPosition, 0}},
- {2735, {wxMouseEvent, getLogicalPosition, 1}},
- {2736, {wxMouseEvent, getLinesPerAction, 0}},
- {2737, {wxMouseEvent, getWheelRotation, 0}},
- {2738, {wxMouseEvent, getWheelDelta, 0}},
- {2739, {wxMouseEvent, getX, 0}},
- {2740, {wxMouseEvent, getY, 0}},
- {2741, {wxMouseEvent, isButton, 0}},
- {2742, {wxMouseEvent, isPageScroll, 0}},
- {2743, {wxMouseEvent, leaving, 0}},
- {2744, {wxMouseEvent, leftDClick, 0}},
- {2745, {wxMouseEvent, leftDown, 0}},
- {2746, {wxMouseEvent, leftIsDown, 0}},
- {2747, {wxMouseEvent, leftUp, 0}},
- {2748, {wxMouseEvent, metaDown, 0}},
- {2749, {wxMouseEvent, middleDClick, 0}},
- {2750, {wxMouseEvent, middleDown, 0}},
- {2751, {wxMouseEvent, middleIsDown, 0}},
- {2752, {wxMouseEvent, middleUp, 0}},
- {2753, {wxMouseEvent, moving, 0}},
- {2754, {wxMouseEvent, rightDClick, 0}},
- {2755, {wxMouseEvent, rightDown, 0}},
- {2756, {wxMouseEvent, rightIsDown, 0}},
- {2757, {wxMouseEvent, rightUp, 0}},
- {2758, {wxMouseEvent, shiftDown, 0}},
- {2759, {wxSetCursorEvent, getCursor, 0}},
- {2760, {wxSetCursorEvent, getX, 0}},
- {2761, {wxSetCursorEvent, getY, 0}},
- {2762, {wxSetCursorEvent, hasCursor, 0}},
- {2763, {wxSetCursorEvent, setCursor, 1}},
- {2764, {wxKeyEvent, altDown, 0}},
- {2765, {wxKeyEvent, cmdDown, 0}},
- {2766, {wxKeyEvent, controlDown, 0}},
- {2767, {wxKeyEvent, getKeyCode, 0}},
- {2768, {wxKeyEvent, getModifiers, 0}},
- {2771, {wxKeyEvent, getPosition, 0}},
- {2772, {wxKeyEvent, getRawKeyCode, 0}},
- {2773, {wxKeyEvent, getRawKeyFlags, 0}},
- {2774, {wxKeyEvent, getUnicodeKey, 0}},
- {2775, {wxKeyEvent, getX, 0}},
- {2776, {wxKeyEvent, getY, 0}},
- {2777, {wxKeyEvent, hasModifiers, 0}},
- {2778, {wxKeyEvent, metaDown, 0}},
- {2779, {wxKeyEvent, shiftDown, 0}},
- {2780, {wxSizeEvent, getSize, 0}},
- {2781, {wxMoveEvent, getPosition, 0}},
- {2782, {wxEraseEvent, getDC, 0}},
- {2783, {wxFocusEvent, getWindow, 0}},
- {2784, {wxChildFocusEvent, getWindow, 0}},
- {2785, {wxMenuEvent, getMenu, 0}},
- {2786, {wxMenuEvent, getMenuId, 0}},
- {2787, {wxMenuEvent, isPopup, 0}},
- {2788, {wxCloseEvent, canVeto, 0}},
- {2789, {wxCloseEvent, getLoggingOff, 0}},
- {2790, {wxCloseEvent, setCanVeto, 1}},
- {2791, {wxCloseEvent, setLoggingOff, 1}},
- {2792, {wxCloseEvent, veto, 1}},
- {2793, {wxShowEvent, setShow, 1}},
- {2794, {wxShowEvent, getShow, 0}},
- {2795, {wxIconizeEvent, iconized, 0}},
- {2796, {wxJoystickEvent, buttonDown, 1}},
- {2797, {wxJoystickEvent, buttonIsDown, 1}},
- {2798, {wxJoystickEvent, buttonUp, 1}},
- {2799, {wxJoystickEvent, getButtonChange, 0}},
- {2800, {wxJoystickEvent, getButtonState, 0}},
- {2801, {wxJoystickEvent, getJoystick, 0}},
- {2802, {wxJoystickEvent, getPosition, 0}},
- {2803, {wxJoystickEvent, getZPosition, 0}},
- {2804, {wxJoystickEvent, isButton, 0}},
- {2805, {wxJoystickEvent, isMove, 0}},
- {2806, {wxJoystickEvent, isZMove, 0}},
- {2807, {wxUpdateUIEvent, canUpdate, 1}},
- {2808, {wxUpdateUIEvent, check, 1}},
- {2809, {wxUpdateUIEvent, enable, 1}},
- {2810, {wxUpdateUIEvent, show, 1}},
- {2811, {wxUpdateUIEvent, getChecked, 0}},
- {2812, {wxUpdateUIEvent, getEnabled, 0}},
- {2813, {wxUpdateUIEvent, getShown, 0}},
- {2814, {wxUpdateUIEvent, getSetChecked, 0}},
- {2815, {wxUpdateUIEvent, getSetEnabled, 0}},
- {2816, {wxUpdateUIEvent, getSetShown, 0}},
- {2817, {wxUpdateUIEvent, getSetText, 0}},
- {2818, {wxUpdateUIEvent, getText, 0}},
- {2819, {wxUpdateUIEvent, getMode, 0}},
- {2820, {wxUpdateUIEvent, getUpdateInterval, 0}},
- {2821, {wxUpdateUIEvent, resetUpdateTime, 0}},
- {2822, {wxUpdateUIEvent, setMode, 1}},
- {2823, {wxUpdateUIEvent, setText, 1}},
- {2824, {wxUpdateUIEvent, setUpdateInterval, 1}},
- {2825, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}},
- {2826, {wxPaletteChangedEvent, setChangedWindow, 1}},
- {2827, {wxPaletteChangedEvent, getChangedWindow, 0}},
- {2828, {wxQueryNewPaletteEvent, setPaletteRealized, 1}},
- {2829, {wxQueryNewPaletteEvent, getPaletteRealized, 0}},
- {2830, {wxNavigationKeyEvent, getDirection, 0}},
- {2831, {wxNavigationKeyEvent, setDirection, 1}},
- {2832, {wxNavigationKeyEvent, isWindowChange, 0}},
- {2833, {wxNavigationKeyEvent, setWindowChange, 1}},
- {2834, {wxNavigationKeyEvent, isFromTab, 0}},
- {2835, {wxNavigationKeyEvent, setFromTab, 1}},
- {2836, {wxNavigationKeyEvent, getCurrentFocus, 0}},
- {2837, {wxNavigationKeyEvent, setCurrentFocus, 1}},
- {2838, {wxHelpEvent, getOrigin, 0}},
- {2839, {wxHelpEvent, getPosition, 0}},
- {2840, {wxHelpEvent, setOrigin, 1}},
- {2841, {wxHelpEvent, setPosition, 1}},
- {2842, {wxContextMenuEvent, getPosition, 0}},
- {2843, {wxContextMenuEvent, setPosition, 1}},
- {2844, {wxIdleEvent, canSend, 1}},
- {2845, {wxIdleEvent, getMode, 0}},
- {2846, {wxIdleEvent, requestMore, 1}},
- {2847, {wxIdleEvent, moreRequested, 0}},
- {2848, {wxIdleEvent, setMode, 1}},
- {2849, {wxGridEvent, altDown, 0}},
- {2850, {wxGridEvent, controlDown, 0}},
- {2851, {wxGridEvent, getCol, 0}},
- {2852, {wxGridEvent, getPosition, 0}},
- {2853, {wxGridEvent, getRow, 0}},
- {2854, {wxGridEvent, metaDown, 0}},
- {2855, {wxGridEvent, selecting, 0}},
- {2856, {wxGridEvent, shiftDown, 0}},
- {2857, {wxNotifyEvent, allow, 0}},
- {2858, {wxNotifyEvent, isAllowed, 0}},
- {2859, {wxNotifyEvent, veto, 0}},
- {2860, {wxSashEvent, getEdge, 0}},
- {2861, {wxSashEvent, getDragRect, 0}},
- {2862, {wxSashEvent, getDragStatus, 0}},
- {2863, {wxListEvent, getCacheFrom, 0}},
- {2864, {wxListEvent, getCacheTo, 0}},
- {2865, {wxListEvent, getKeyCode, 0}},
- {2866, {wxListEvent, getIndex, 0}},
- {2867, {wxListEvent, getColumn, 0}},
- {2868, {wxListEvent, getPoint, 0}},
- {2869, {wxListEvent, getLabel, 0}},
- {2870, {wxListEvent, getText, 0}},
- {2871, {wxListEvent, getImage, 0}},
- {2872, {wxListEvent, getData, 0}},
- {2873, {wxListEvent, getMask, 0}},
- {2874, {wxListEvent, getItem, 0}},
- {2875, {wxListEvent, isEditCancelled, 0}},
- {2876, {wxDateEvent, getDate, 0}},
- {2877, {wxCalendarEvent, getWeekDay, 0}},
- {2878, {wxFileDirPickerEvent, getPath, 0}},
- {2879, {wxColourPickerEvent, getColour, 0}},
- {2880, {wxFontPickerEvent, getFont, 0}},
- {2881, {wxStyledTextEvent, getPosition, 0}},
- {2882, {wxStyledTextEvent, getKey, 0}},
- {2883, {wxStyledTextEvent, getModifiers, 0}},
- {2884, {wxStyledTextEvent, getModificationType, 0}},
- {2885, {wxStyledTextEvent, getText, 0}},
- {2886, {wxStyledTextEvent, getLength, 0}},
- {2887, {wxStyledTextEvent, getLinesAdded, 0}},
- {2888, {wxStyledTextEvent, getLine, 0}},
- {2889, {wxStyledTextEvent, getFoldLevelNow, 0}},
- {2890, {wxStyledTextEvent, getFoldLevelPrev, 0}},
- {2891, {wxStyledTextEvent, getMargin, 0}},
- {2892, {wxStyledTextEvent, getMessage, 0}},
- {2893, {wxStyledTextEvent, getWParam, 0}},
- {2894, {wxStyledTextEvent, getLParam, 0}},
- {2895, {wxStyledTextEvent, getListType, 0}},
- {2896, {wxStyledTextEvent, getX, 0}},
- {2897, {wxStyledTextEvent, getY, 0}},
- {2898, {wxStyledTextEvent, getDragText, 0}},
- {2899, {wxStyledTextEvent, getDragAllowMove, 0}},
- {2900, {wxStyledTextEvent, getDragResult, 0}},
- {2901, {wxStyledTextEvent, getShift, 0}},
- {2902, {wxStyledTextEvent, getControl, 0}},
- {2903, {wxStyledTextEvent, getAlt, 0}},
- {2904, {utils, getKeyState, 1}},
- {2905, {utils, getMousePosition, 2}},
- {2906, {utils, getMouseState, 0}},
- {2907, {utils, setDetectableAutoRepeat, 1}},
- {2908, {utils, bell, 0}},
- {2909, {utils, findMenuItemId, 3}},
- {2910, {utils, genericFindWindowAtPoint, 1}},
- {2911, {utils, findWindowAtPoint, 1}},
- {2912, {utils, beginBusyCursor, 1}},
- {2913, {utils, endBusyCursor, 0}},
- {2914, {utils, isBusy, 0}},
- {2915, {utils, shutdown, 1}},
- {2916, {utils, shell, 1}},
- {2917, {utils, launchDefaultBrowser, 2}},
- {2918, {utils, getEmailAddress, 0}},
- {2919, {utils, getUserId, 0}},
- {2920, {utils, getHomeDir, 0}},
- {2921, {utils, newId, 0}},
- {2922, {utils, registerId, 1}},
- {2923, {utils, getCurrentId, 0}},
- {2924, {utils, getOsDescription, 0}},
- {2925, {utils, isPlatformLittleEndian, 0}},
- {2926, {utils, isPlatform64Bit, 0}},
- {2927, {wxPrintout, new, 1}},
- {2928, {wxPrintout, destruct, 0}},
- {2929, {wxPrintout, getDC, 0}},
- {2930, {wxPrintout, getPageSizeMM, 2}},
- {2931, {wxPrintout, getPageSizePixels, 2}},
- {2932, {wxPrintout, getPaperRectPixels, 0}},
- {2933, {wxPrintout, getPPIPrinter, 2}},
- {2934, {wxPrintout, getPPIScreen, 2}},
- {2935, {wxPrintout, getTitle, 0}},
- {2936, {wxPrintout, isPreview, 0}},
- {2937, {wxPrintout, fitThisSizeToPaper, 1}},
- {2938, {wxPrintout, fitThisSizeToPage, 1}},
- {2939, {wxPrintout, fitThisSizeToPageMargins, 2}},
- {2940, {wxPrintout, mapScreenSizeToPaper, 0}},
- {2941, {wxPrintout, mapScreenSizeToPage, 0}},
- {2942, {wxPrintout, mapScreenSizeToPageMargins, 1}},
- {2943, {wxPrintout, mapScreenSizeToDevice, 0}},
- {2944, {wxPrintout, getLogicalPaperRect, 0}},
- {2945, {wxPrintout, getLogicalPageRect, 0}},
- {2946, {wxPrintout, getLogicalPageMarginsRect, 1}},
- {2947, {wxPrintout, setLogicalOrigin, 2}},
- {2948, {wxPrintout, offsetLogicalOrigin, 2}},
- {2949, {wxStyledTextCtrl, new_2, 2}},
- {2950, {wxStyledTextCtrl, new_0, 0}},
- {2951, {wxStyledTextCtrl, destruct, 0}},
- {2952, {wxStyledTextCtrl, create, 2}},
- {2953, {wxStyledTextCtrl, addText, 1}},
- {2954, {wxStyledTextCtrl, addStyledText, 1}},
- {2955, {wxStyledTextCtrl, insertText, 2}},
- {2956, {wxStyledTextCtrl, clearAll, 0}},
- {2957, {wxStyledTextCtrl, clearDocumentStyle, 0}},
- {2958, {wxStyledTextCtrl, getLength, 0}},
- {2959, {wxStyledTextCtrl, getCharAt, 1}},
- {2960, {wxStyledTextCtrl, getCurrentPos, 0}},
- {2961, {wxStyledTextCtrl, getAnchor, 0}},
- {2962, {wxStyledTextCtrl, getStyleAt, 1}},
- {2963, {wxStyledTextCtrl, redo, 0}},
- {2964, {wxStyledTextCtrl, setUndoCollection, 1}},
- {2965, {wxStyledTextCtrl, selectAll, 0}},
- {2966, {wxStyledTextCtrl, setSavePoint, 0}},
- {2967, {wxStyledTextCtrl, getStyledText, 2}},
- {2968, {wxStyledTextCtrl, canRedo, 0}},
- {2969, {wxStyledTextCtrl, markerLineFromHandle, 1}},
- {2970, {wxStyledTextCtrl, markerDeleteHandle, 1}},
- {2971, {wxStyledTextCtrl, getUndoCollection, 0}},
- {2972, {wxStyledTextCtrl, getViewWhiteSpace, 0}},
- {2973, {wxStyledTextCtrl, setViewWhiteSpace, 1}},
- {2974, {wxStyledTextCtrl, positionFromPoint, 1}},
- {2975, {wxStyledTextCtrl, positionFromPointClose, 2}},
- {2976, {wxStyledTextCtrl, gotoLine, 1}},
- {2977, {wxStyledTextCtrl, gotoPos, 1}},
- {2978, {wxStyledTextCtrl, setAnchor, 1}},
- {2979, {wxStyledTextCtrl, getCurLine, 1}},
- {2980, {wxStyledTextCtrl, getEndStyled, 0}},
- {2981, {wxStyledTextCtrl, convertEOLs, 1}},
- {2982, {wxStyledTextCtrl, getEOLMode, 0}},
- {2983, {wxStyledTextCtrl, setEOLMode, 1}},
- {2984, {wxStyledTextCtrl, startStyling, 2}},
- {2985, {wxStyledTextCtrl, setStyling, 2}},
- {2986, {wxStyledTextCtrl, getBufferedDraw, 0}},
- {2987, {wxStyledTextCtrl, setBufferedDraw, 1}},
- {2988, {wxStyledTextCtrl, setTabWidth, 1}},
- {2989, {wxStyledTextCtrl, getTabWidth, 0}},
- {2990, {wxStyledTextCtrl, setCodePage, 1}},
- {2991, {wxStyledTextCtrl, markerDefine, 3}},
- {2992, {wxStyledTextCtrl, markerSetForeground, 2}},
- {2993, {wxStyledTextCtrl, markerSetBackground, 2}},
- {2994, {wxStyledTextCtrl, markerAdd, 2}},
- {2995, {wxStyledTextCtrl, markerDelete, 2}},
- {2996, {wxStyledTextCtrl, markerDeleteAll, 1}},
- {2997, {wxStyledTextCtrl, markerGet, 1}},
- {2998, {wxStyledTextCtrl, markerNext, 2}},
- {2999, {wxStyledTextCtrl, markerPrevious, 2}},
- {3000, {wxStyledTextCtrl, markerDefineBitmap, 2}},
- {3001, {wxStyledTextCtrl, markerAddSet, 2}},
- {3002, {wxStyledTextCtrl, markerSetAlpha, 2}},
- {3003, {wxStyledTextCtrl, setMarginType, 2}},
- {3004, {wxStyledTextCtrl, getMarginType, 1}},
- {3005, {wxStyledTextCtrl, setMarginWidth, 2}},
- {3006, {wxStyledTextCtrl, getMarginWidth, 1}},
- {3007, {wxStyledTextCtrl, setMarginMask, 2}},
- {3008, {wxStyledTextCtrl, getMarginMask, 1}},
- {3009, {wxStyledTextCtrl, setMarginSensitive, 2}},
- {3010, {wxStyledTextCtrl, getMarginSensitive, 1}},
- {3011, {wxStyledTextCtrl, styleClearAll, 0}},
- {3012, {wxStyledTextCtrl, styleSetForeground, 2}},
- {3013, {wxStyledTextCtrl, styleSetBackground, 2}},
- {3014, {wxStyledTextCtrl, styleSetBold, 2}},
- {3015, {wxStyledTextCtrl, styleSetItalic, 2}},
- {3016, {wxStyledTextCtrl, styleSetSize, 2}},
- {3017, {wxStyledTextCtrl, styleSetFaceName, 2}},
- {3018, {wxStyledTextCtrl, styleSetEOLFilled, 2}},
- {3019, {wxStyledTextCtrl, styleResetDefault, 0}},
- {3020, {wxStyledTextCtrl, styleSetUnderline, 2}},
- {3021, {wxStyledTextCtrl, styleSetCase, 2}},
- {3022, {wxStyledTextCtrl, styleSetHotSpot, 2}},
- {3023, {wxStyledTextCtrl, setSelForeground, 2}},
- {3024, {wxStyledTextCtrl, setSelBackground, 2}},
- {3025, {wxStyledTextCtrl, getSelAlpha, 0}},
- {3026, {wxStyledTextCtrl, setSelAlpha, 1}},
- {3027, {wxStyledTextCtrl, setCaretForeground, 1}},
- {3028, {wxStyledTextCtrl, cmdKeyAssign, 3}},
- {3029, {wxStyledTextCtrl, cmdKeyClear, 2}},
- {3030, {wxStyledTextCtrl, cmdKeyClearAll, 0}},
- {3031, {wxStyledTextCtrl, setStyleBytes, 2}},
- {3032, {wxStyledTextCtrl, styleSetVisible, 2}},
- {3033, {wxStyledTextCtrl, getCaretPeriod, 0}},
- {3034, {wxStyledTextCtrl, setCaretPeriod, 1}},
- {3035, {wxStyledTextCtrl, setWordChars, 1}},
- {3036, {wxStyledTextCtrl, beginUndoAction, 0}},
- {3037, {wxStyledTextCtrl, endUndoAction, 0}},
- {3038, {wxStyledTextCtrl, indicatorSetStyle, 2}},
- {3039, {wxStyledTextCtrl, indicatorGetStyle, 1}},
- {3040, {wxStyledTextCtrl, indicatorSetForeground, 2}},
- {3041, {wxStyledTextCtrl, indicatorGetForeground, 1}},
- {3042, {wxStyledTextCtrl, setWhitespaceForeground, 2}},
- {3043, {wxStyledTextCtrl, setWhitespaceBackground, 2}},
- {3044, {wxStyledTextCtrl, getStyleBits, 0}},
- {3045, {wxStyledTextCtrl, setLineState, 2}},
- {3046, {wxStyledTextCtrl, getLineState, 1}},
- {3047, {wxStyledTextCtrl, getMaxLineState, 0}},
- {3048, {wxStyledTextCtrl, getCaretLineVisible, 0}},
- {3049, {wxStyledTextCtrl, setCaretLineVisible, 1}},
- {3050, {wxStyledTextCtrl, getCaretLineBackground, 0}},
- {3051, {wxStyledTextCtrl, setCaretLineBackground, 1}},
- {3052, {wxStyledTextCtrl, autoCompShow, 2}},
- {3053, {wxStyledTextCtrl, autoCompCancel, 0}},
- {3054, {wxStyledTextCtrl, autoCompActive, 0}},
- {3055, {wxStyledTextCtrl, autoCompPosStart, 0}},
- {3056, {wxStyledTextCtrl, autoCompComplete, 0}},
- {3057, {wxStyledTextCtrl, autoCompStops, 1}},
- {3058, {wxStyledTextCtrl, autoCompSetSeparator, 1}},
- {3059, {wxStyledTextCtrl, autoCompGetSeparator, 0}},
- {3060, {wxStyledTextCtrl, autoCompSelect, 1}},
- {3061, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}},
- {3062, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}},
- {3063, {wxStyledTextCtrl, autoCompSetFillUps, 1}},
- {3064, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}},
- {3065, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}},
- {3066, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}},
- {3067, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}},
- {3068, {wxStyledTextCtrl, userListShow, 2}},
- {3069, {wxStyledTextCtrl, autoCompSetAutoHide, 1}},
- {3070, {wxStyledTextCtrl, autoCompGetAutoHide, 0}},
- {3071, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}},
- {3072, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}},
- {3073, {wxStyledTextCtrl, registerImage, 2}},
- {3074, {wxStyledTextCtrl, clearRegisteredImages, 0}},
- {3075, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}},
- {3076, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}},
- {3077, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}},
- {3078, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}},
- {3079, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}},
- {3080, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}},
- {3081, {wxStyledTextCtrl, setIndent, 1}},
- {3082, {wxStyledTextCtrl, getIndent, 0}},
- {3083, {wxStyledTextCtrl, setUseTabs, 1}},
- {3084, {wxStyledTextCtrl, getUseTabs, 0}},
- {3085, {wxStyledTextCtrl, setLineIndentation, 2}},
- {3086, {wxStyledTextCtrl, getLineIndentation, 1}},
- {3087, {wxStyledTextCtrl, getLineIndentPosition, 1}},
- {3088, {wxStyledTextCtrl, getColumn, 1}},
- {3089, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}},
- {3090, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}},
- {3091, {wxStyledTextCtrl, setIndentationGuides, 1}},
- {3092, {wxStyledTextCtrl, getIndentationGuides, 0}},
- {3093, {wxStyledTextCtrl, setHighlightGuide, 1}},
- {3094, {wxStyledTextCtrl, getHighlightGuide, 0}},
- {3095, {wxStyledTextCtrl, getLineEndPosition, 1}},
- {3096, {wxStyledTextCtrl, getCodePage, 0}},
- {3097, {wxStyledTextCtrl, getCaretForeground, 0}},
- {3098, {wxStyledTextCtrl, getReadOnly, 0}},
- {3099, {wxStyledTextCtrl, setCurrentPos, 1}},
- {3100, {wxStyledTextCtrl, setSelectionStart, 1}},
- {3101, {wxStyledTextCtrl, getSelectionStart, 0}},
- {3102, {wxStyledTextCtrl, setSelectionEnd, 1}},
- {3103, {wxStyledTextCtrl, getSelectionEnd, 0}},
- {3104, {wxStyledTextCtrl, setPrintMagnification, 1}},
- {3105, {wxStyledTextCtrl, getPrintMagnification, 0}},
- {3106, {wxStyledTextCtrl, setPrintColourMode, 1}},
- {3107, {wxStyledTextCtrl, getPrintColourMode, 0}},
- {3108, {wxStyledTextCtrl, findText, 4}},
- {3109, {wxStyledTextCtrl, formatRange, 7}},
- {3110, {wxStyledTextCtrl, getFirstVisibleLine, 0}},
- {3111, {wxStyledTextCtrl, getLine, 1}},
- {3112, {wxStyledTextCtrl, getLineCount, 0}},
- {3113, {wxStyledTextCtrl, setMarginLeft, 1}},
- {3114, {wxStyledTextCtrl, getMarginLeft, 0}},
- {3115, {wxStyledTextCtrl, setMarginRight, 1}},
- {3116, {wxStyledTextCtrl, getMarginRight, 0}},
- {3117, {wxStyledTextCtrl, getModify, 0}},
- {3118, {wxStyledTextCtrl, setSelection, 2}},
- {3119, {wxStyledTextCtrl, getSelectedText, 0}},
- {3120, {wxStyledTextCtrl, getTextRange, 2}},
- {3121, {wxStyledTextCtrl, hideSelection, 1}},
- {3122, {wxStyledTextCtrl, lineFromPosition, 1}},
- {3123, {wxStyledTextCtrl, positionFromLine, 1}},
- {3124, {wxStyledTextCtrl, lineScroll, 2}},
- {3125, {wxStyledTextCtrl, ensureCaretVisible, 0}},
- {3126, {wxStyledTextCtrl, replaceSelection, 1}},
- {3127, {wxStyledTextCtrl, setReadOnly, 1}},
- {3128, {wxStyledTextCtrl, canPaste, 0}},
- {3129, {wxStyledTextCtrl, canUndo, 0}},
- {3130, {wxStyledTextCtrl, emptyUndoBuffer, 0}},
- {3131, {wxStyledTextCtrl, undo, 0}},
- {3132, {wxStyledTextCtrl, cut, 0}},
- {3133, {wxStyledTextCtrl, copy, 0}},
- {3134, {wxStyledTextCtrl, paste, 0}},
- {3135, {wxStyledTextCtrl, clear, 0}},
- {3136, {wxStyledTextCtrl, setText, 1}},
- {3137, {wxStyledTextCtrl, getText, 0}},
- {3138, {wxStyledTextCtrl, getTextLength, 0}},
- {3139, {wxStyledTextCtrl, getOvertype, 0}},
- {3140, {wxStyledTextCtrl, setCaretWidth, 1}},
- {3141, {wxStyledTextCtrl, getCaretWidth, 0}},
- {3142, {wxStyledTextCtrl, setTargetStart, 1}},
- {3143, {wxStyledTextCtrl, getTargetStart, 0}},
- {3144, {wxStyledTextCtrl, setTargetEnd, 1}},
- {3145, {wxStyledTextCtrl, getTargetEnd, 0}},
- {3146, {wxStyledTextCtrl, replaceTarget, 1}},
- {3147, {wxStyledTextCtrl, searchInTarget, 1}},
- {3148, {wxStyledTextCtrl, setSearchFlags, 1}},
- {3149, {wxStyledTextCtrl, getSearchFlags, 0}},
- {3150, {wxStyledTextCtrl, callTipShow, 2}},
- {3151, {wxStyledTextCtrl, callTipCancel, 0}},
- {3152, {wxStyledTextCtrl, callTipActive, 0}},
- {3153, {wxStyledTextCtrl, callTipPosAtStart, 0}},
- {3154, {wxStyledTextCtrl, callTipSetHighlight, 2}},
- {3155, {wxStyledTextCtrl, callTipSetBackground, 1}},
- {3156, {wxStyledTextCtrl, callTipSetForeground, 1}},
- {3157, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}},
- {3158, {wxStyledTextCtrl, callTipUseStyle, 1}},
- {3159, {wxStyledTextCtrl, visibleFromDocLine, 1}},
- {3160, {wxStyledTextCtrl, docLineFromVisible, 1}},
- {3161, {wxStyledTextCtrl, wrapCount, 1}},
- {3162, {wxStyledTextCtrl, setFoldLevel, 2}},
- {3163, {wxStyledTextCtrl, getFoldLevel, 1}},
- {3164, {wxStyledTextCtrl, getLastChild, 2}},
- {3165, {wxStyledTextCtrl, getFoldParent, 1}},
- {3166, {wxStyledTextCtrl, showLines, 2}},
- {3167, {wxStyledTextCtrl, hideLines, 2}},
- {3168, {wxStyledTextCtrl, getLineVisible, 1}},
- {3169, {wxStyledTextCtrl, setFoldExpanded, 2}},
- {3170, {wxStyledTextCtrl, getFoldExpanded, 1}},
- {3171, {wxStyledTextCtrl, toggleFold, 1}},
- {3172, {wxStyledTextCtrl, ensureVisible, 1}},
- {3173, {wxStyledTextCtrl, setFoldFlags, 1}},
- {3174, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}},
- {3175, {wxStyledTextCtrl, setTabIndents, 1}},
- {3176, {wxStyledTextCtrl, getTabIndents, 0}},
- {3177, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}},
- {3178, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}},
- {3179, {wxStyledTextCtrl, setMouseDwellTime, 1}},
- {3180, {wxStyledTextCtrl, getMouseDwellTime, 0}},
- {3181, {wxStyledTextCtrl, wordStartPosition, 2}},
- {3182, {wxStyledTextCtrl, wordEndPosition, 2}},
- {3183, {wxStyledTextCtrl, setWrapMode, 1}},
- {3184, {wxStyledTextCtrl, getWrapMode, 0}},
- {3185, {wxStyledTextCtrl, setWrapVisualFlags, 1}},
- {3186, {wxStyledTextCtrl, getWrapVisualFlags, 0}},
- {3187, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}},
- {3188, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}},
- {3189, {wxStyledTextCtrl, setWrapStartIndent, 1}},
- {3190, {wxStyledTextCtrl, getWrapStartIndent, 0}},
- {3191, {wxStyledTextCtrl, setLayoutCache, 1}},
- {3192, {wxStyledTextCtrl, getLayoutCache, 0}},
- {3193, {wxStyledTextCtrl, setScrollWidth, 1}},
- {3194, {wxStyledTextCtrl, getScrollWidth, 0}},
- {3195, {wxStyledTextCtrl, textWidth, 2}},
- {3196, {wxStyledTextCtrl, getEndAtLastLine, 0}},
- {3197, {wxStyledTextCtrl, textHeight, 1}},
- {3198, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}},
- {3199, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}},
- {3200, {wxStyledTextCtrl, appendText, 1}},
- {3201, {wxStyledTextCtrl, getTwoPhaseDraw, 0}},
- {3202, {wxStyledTextCtrl, setTwoPhaseDraw, 1}},
- {3203, {wxStyledTextCtrl, targetFromSelection, 0}},
- {3204, {wxStyledTextCtrl, linesJoin, 0}},
- {3205, {wxStyledTextCtrl, linesSplit, 1}},
- {3206, {wxStyledTextCtrl, setFoldMarginColour, 2}},
- {3207, {wxStyledTextCtrl, setFoldMarginHiColour, 2}},
- {3208, {wxStyledTextCtrl, lineDown, 0}},
- {3209, {wxStyledTextCtrl, lineDownExtend, 0}},
- {3210, {wxStyledTextCtrl, lineUp, 0}},
- {3211, {wxStyledTextCtrl, lineUpExtend, 0}},
- {3212, {wxStyledTextCtrl, charLeft, 0}},
- {3213, {wxStyledTextCtrl, charLeftExtend, 0}},
- {3214, {wxStyledTextCtrl, charRight, 0}},
- {3215, {wxStyledTextCtrl, charRightExtend, 0}},
- {3216, {wxStyledTextCtrl, wordLeft, 0}},
- {3217, {wxStyledTextCtrl, wordLeftExtend, 0}},
- {3218, {wxStyledTextCtrl, wordRight, 0}},
- {3219, {wxStyledTextCtrl, wordRightExtend, 0}},
- {3220, {wxStyledTextCtrl, home, 0}},
- {3221, {wxStyledTextCtrl, homeExtend, 0}},
- {3222, {wxStyledTextCtrl, lineEnd, 0}},
- {3223, {wxStyledTextCtrl, lineEndExtend, 0}},
- {3224, {wxStyledTextCtrl, documentStart, 0}},
- {3225, {wxStyledTextCtrl, documentStartExtend, 0}},
- {3226, {wxStyledTextCtrl, documentEnd, 0}},
- {3227, {wxStyledTextCtrl, documentEndExtend, 0}},
- {3228, {wxStyledTextCtrl, pageUp, 0}},
- {3229, {wxStyledTextCtrl, pageUpExtend, 0}},
- {3230, {wxStyledTextCtrl, pageDown, 0}},
- {3231, {wxStyledTextCtrl, pageDownExtend, 0}},
- {3232, {wxStyledTextCtrl, editToggleOvertype, 0}},
- {3233, {wxStyledTextCtrl, cancel, 0}},
- {3234, {wxStyledTextCtrl, deleteBack, 0}},
- {3235, {wxStyledTextCtrl, tab, 0}},
- {3236, {wxStyledTextCtrl, backTab, 0}},
- {3237, {wxStyledTextCtrl, newLine, 0}},
- {3238, {wxStyledTextCtrl, formFeed, 0}},
- {3239, {wxStyledTextCtrl, vCHome, 0}},
- {3240, {wxStyledTextCtrl, vCHomeExtend, 0}},
- {3241, {wxStyledTextCtrl, zoomIn, 0}},
- {3242, {wxStyledTextCtrl, zoomOut, 0}},
- {3243, {wxStyledTextCtrl, delWordLeft, 0}},
- {3244, {wxStyledTextCtrl, delWordRight, 0}},
- {3245, {wxStyledTextCtrl, lineCut, 0}},
- {3246, {wxStyledTextCtrl, lineDelete, 0}},
- {3247, {wxStyledTextCtrl, lineTranspose, 0}},
- {3248, {wxStyledTextCtrl, lineDuplicate, 0}},
- {3249, {wxStyledTextCtrl, lowerCase, 0}},
- {3250, {wxStyledTextCtrl, upperCase, 0}},
- {3251, {wxStyledTextCtrl, lineScrollDown, 0}},
- {3252, {wxStyledTextCtrl, lineScrollUp, 0}},
- {3253, {wxStyledTextCtrl, deleteBackNotLine, 0}},
- {3254, {wxStyledTextCtrl, homeDisplay, 0}},
- {3255, {wxStyledTextCtrl, homeDisplayExtend, 0}},
- {3256, {wxStyledTextCtrl, lineEndDisplay, 0}},
- {3257, {wxStyledTextCtrl, lineEndDisplayExtend, 0}},
- {3258, {wxStyledTextCtrl, homeWrapExtend, 0}},
- {3259, {wxStyledTextCtrl, lineEndWrap, 0}},
- {3260, {wxStyledTextCtrl, lineEndWrapExtend, 0}},
- {3261, {wxStyledTextCtrl, vCHomeWrap, 0}},
- {3262, {wxStyledTextCtrl, vCHomeWrapExtend, 0}},
- {3263, {wxStyledTextCtrl, lineCopy, 0}},
- {3264, {wxStyledTextCtrl, moveCaretInsideView, 0}},
- {3265, {wxStyledTextCtrl, lineLength, 1}},
- {3266, {wxStyledTextCtrl, braceHighlight, 2}},
- {3267, {wxStyledTextCtrl, braceBadLight, 1}},
- {3268, {wxStyledTextCtrl, braceMatch, 1}},
- {3269, {wxStyledTextCtrl, getViewEOL, 0}},
- {3270, {wxStyledTextCtrl, setViewEOL, 1}},
- {3271, {wxStyledTextCtrl, setModEventMask, 1}},
- {3272, {wxStyledTextCtrl, getEdgeColumn, 0}},
- {3273, {wxStyledTextCtrl, setEdgeColumn, 1}},
- {3274, {wxStyledTextCtrl, setEdgeMode, 1}},
- {3275, {wxStyledTextCtrl, getEdgeMode, 0}},
- {3276, {wxStyledTextCtrl, getEdgeColour, 0}},
- {3277, {wxStyledTextCtrl, setEdgeColour, 1}},
- {3278, {wxStyledTextCtrl, searchAnchor, 0}},
- {3279, {wxStyledTextCtrl, searchNext, 2}},
- {3280, {wxStyledTextCtrl, searchPrev, 2}},
- {3281, {wxStyledTextCtrl, linesOnScreen, 0}},
- {3282, {wxStyledTextCtrl, usePopUp, 1}},
- {3283, {wxStyledTextCtrl, selectionIsRectangle, 0}},
- {3284, {wxStyledTextCtrl, setZoom, 1}},
- {3285, {wxStyledTextCtrl, getZoom, 0}},
- {3286, {wxStyledTextCtrl, getModEventMask, 0}},
- {3287, {wxStyledTextCtrl, setSTCFocus, 1}},
- {3288, {wxStyledTextCtrl, getSTCFocus, 0}},
- {3289, {wxStyledTextCtrl, setStatus, 1}},
- {3290, {wxStyledTextCtrl, getStatus, 0}},
- {3291, {wxStyledTextCtrl, setMouseDownCaptures, 1}},
- {3292, {wxStyledTextCtrl, getMouseDownCaptures, 0}},
- {3293, {wxStyledTextCtrl, setSTCCursor, 1}},
- {3294, {wxStyledTextCtrl, getSTCCursor, 0}},
- {3295, {wxStyledTextCtrl, setControlCharSymbol, 1}},
- {3296, {wxStyledTextCtrl, getControlCharSymbol, 0}},
- {3297, {wxStyledTextCtrl, wordPartLeft, 0}},
- {3298, {wxStyledTextCtrl, wordPartLeftExtend, 0}},
- {3299, {wxStyledTextCtrl, wordPartRight, 0}},
- {3300, {wxStyledTextCtrl, wordPartRightExtend, 0}},
- {3301, {wxStyledTextCtrl, setVisiblePolicy, 2}},
- {3302, {wxStyledTextCtrl, delLineLeft, 0}},
- {3303, {wxStyledTextCtrl, delLineRight, 0}},
- {3304, {wxStyledTextCtrl, getXOffset, 0}},
- {3305, {wxStyledTextCtrl, chooseCaretX, 0}},
- {3306, {wxStyledTextCtrl, setXCaretPolicy, 2}},
- {3307, {wxStyledTextCtrl, setYCaretPolicy, 2}},
- {3308, {wxStyledTextCtrl, getPrintWrapMode, 0}},
- {3309, {wxStyledTextCtrl, setHotspotActiveForeground, 2}},
- {3310, {wxStyledTextCtrl, setHotspotActiveBackground, 2}},
- {3311, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}},
- {3312, {wxStyledTextCtrl, setHotspotSingleLine, 1}},
- {3313, {wxStyledTextCtrl, paraDownExtend, 0}},
- {3314, {wxStyledTextCtrl, paraUp, 0}},
- {3315, {wxStyledTextCtrl, paraUpExtend, 0}},
- {3316, {wxStyledTextCtrl, positionBefore, 1}},
- {3317, {wxStyledTextCtrl, positionAfter, 1}},
- {3318, {wxStyledTextCtrl, copyRange, 2}},
- {3319, {wxStyledTextCtrl, copyText, 2}},
- {3320, {wxStyledTextCtrl, setSelectionMode, 1}},
- {3321, {wxStyledTextCtrl, getSelectionMode, 0}},
- {3322, {wxStyledTextCtrl, lineDownRectExtend, 0}},
- {3323, {wxStyledTextCtrl, lineUpRectExtend, 0}},
- {3324, {wxStyledTextCtrl, charLeftRectExtend, 0}},
- {3325, {wxStyledTextCtrl, charRightRectExtend, 0}},
- {3326, {wxStyledTextCtrl, homeRectExtend, 0}},
- {3327, {wxStyledTextCtrl, vCHomeRectExtend, 0}},
- {3328, {wxStyledTextCtrl, lineEndRectExtend, 0}},
- {3329, {wxStyledTextCtrl, pageUpRectExtend, 0}},
- {3330, {wxStyledTextCtrl, pageDownRectExtend, 0}},
- {3331, {wxStyledTextCtrl, stutteredPageUp, 0}},
- {3332, {wxStyledTextCtrl, stutteredPageUpExtend, 0}},
- {3333, {wxStyledTextCtrl, stutteredPageDown, 0}},
- {3334, {wxStyledTextCtrl, stutteredPageDownExtend, 0}},
- {3335, {wxStyledTextCtrl, wordLeftEnd, 0}},
- {3336, {wxStyledTextCtrl, wordLeftEndExtend, 0}},
- {3337, {wxStyledTextCtrl, wordRightEnd, 0}},
- {3338, {wxStyledTextCtrl, wordRightEndExtend, 0}},
- {3339, {wxStyledTextCtrl, setWhitespaceChars, 1}},
- {3340, {wxStyledTextCtrl, setCharsDefault, 0}},
- {3341, {wxStyledTextCtrl, autoCompGetCurrent, 0}},
- {3342, {wxStyledTextCtrl, allocate, 1}},
- {3343, {wxStyledTextCtrl, findColumn, 2}},
- {3344, {wxStyledTextCtrl, getCaretSticky, 0}},
- {3345, {wxStyledTextCtrl, setCaretSticky, 1}},
- {3346, {wxStyledTextCtrl, toggleCaretSticky, 0}},
- {3347, {wxStyledTextCtrl, setPasteConvertEndings, 1}},
- {3348, {wxStyledTextCtrl, getPasteConvertEndings, 0}},
- {3349, {wxStyledTextCtrl, selectionDuplicate, 0}},
- {3350, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}},
- {3351, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}},
- {3352, {wxStyledTextCtrl, startRecord, 0}},
- {3353, {wxStyledTextCtrl, stopRecord, 0}},
- {3354, {wxStyledTextCtrl, setLexer, 1}},
- {3355, {wxStyledTextCtrl, getLexer, 0}},
- {3356, {wxStyledTextCtrl, colourise, 2}},
- {3357, {wxStyledTextCtrl, setProperty, 2}},
- {3358, {wxStyledTextCtrl, setKeyWords, 2}},
- {3359, {wxStyledTextCtrl, setLexerLanguage, 1}},
- {3360, {wxStyledTextCtrl, getProperty, 1}},
- {3361, {wxStyledTextCtrl, getStyleBitsNeeded, 0}},
- {3362, {wxStyledTextCtrl, getCurrentLine, 0}},
- {3363, {wxStyledTextCtrl, styleSetSpec, 2}},
- {3364, {wxStyledTextCtrl, styleSetFont, 2}},
- {3365, {wxStyledTextCtrl, styleSetFontAttr, 7}},
- {3366, {wxStyledTextCtrl, styleSetCharacterSet, 2}},
- {3367, {wxStyledTextCtrl, styleSetFontEncoding, 2}},
- {3368, {wxStyledTextCtrl, cmdKeyExecute, 1}},
- {3369, {wxStyledTextCtrl, setMargins, 2}},
- {3370, {wxStyledTextCtrl, getSelection, 2}},
- {3371, {wxStyledTextCtrl, pointFromPosition, 1}},
- {3372, {wxStyledTextCtrl, scrollToLine, 1}},
- {3373, {wxStyledTextCtrl, scrollToColumn, 1}},
- {3374, {wxStyledTextCtrl, setVScrollBar, 1}},
- {3375, {wxStyledTextCtrl, setHScrollBar, 1}},
- {3376, {wxStyledTextCtrl, getLastKeydownProcessed, 0}},
- {3377, {wxStyledTextCtrl, setLastKeydownProcessed, 1}},
- {3378, {wxStyledTextCtrl, saveFile, 1}},
- {3379, {wxStyledTextCtrl, loadFile, 1}},
- {3380, {wxStyledTextCtrl, doDragOver, 3}},
- {3381, {wxStyledTextCtrl, doDropText, 3}},
- {3382, {wxStyledTextCtrl, getUseAntiAliasing, 0}},
- {3383, {wxStyledTextCtrl, addTextRaw, 1}},
- {3384, {wxStyledTextCtrl, insertTextRaw, 2}},
- {3385, {wxStyledTextCtrl, getCurLineRaw, 1}},
- {3386, {wxStyledTextCtrl, getLineRaw, 1}},
- {3387, {wxStyledTextCtrl, getSelectedTextRaw, 0}},
- {3388, {wxStyledTextCtrl, getTextRangeRaw, 2}},
- {3389, {wxStyledTextCtrl, setTextRaw, 1}},
- {3390, {wxStyledTextCtrl, getTextRaw, 0}},
- {3391, {wxStyledTextCtrl, appendTextRaw, 1}},
- {3392, {wxArtProvider, getBitmap, 2}},
- {3393, {wxArtProvider, getIcon, 2}},
- {3394, {wxTreeEvent, getKeyCode, 0}},
- {3395, {wxTreeEvent, getItem, 0}},
- {3396, {wxTreeEvent, getKeyEvent, 0}},
- {3397, {wxTreeEvent, getLabel, 0}},
- {3398, {wxTreeEvent, getOldItem, 0}},
- {3399, {wxTreeEvent, getPoint, 0}},
- {3400, {wxTreeEvent, isEditCancelled, 0}},
- {3401, {wxTreeEvent, setToolTip, 1}},
- {3402, {wxNotebookEvent, getOldSelection, 0}},
- {3403, {wxNotebookEvent, getSelection, 0}},
- {3404, {wxNotebookEvent, setOldSelection, 1}},
- {3405, {wxNotebookEvent, setSelection, 1}},
- {3406, {wxFileDataObject, new, 0}},
- {3407, {wxFileDataObject, addFile, 1}},
- {3408, {wxFileDataObject, getFilenames, 0}},
- {3409, {wxFileDataObject, 'Destroy', undefined}},
- {3410, {wxTextDataObject, new, 1}},
- {3411, {wxTextDataObject, getTextLength, 0}},
- {3412, {wxTextDataObject, getText, 0}},
- {3413, {wxTextDataObject, setText, 1}},
- {3414, {wxTextDataObject, 'Destroy', undefined}},
- {3415, {wxBitmapDataObject, new_1_1, 1}},
- {3416, {wxBitmapDataObject, new_1_0, 1}},
- {3417, {wxBitmapDataObject, getBitmap, 0}},
- {3418, {wxBitmapDataObject, setBitmap, 1}},
- {3419, {wxBitmapDataObject, 'Destroy', undefined}},
- {3421, {wxClipboard, new, 0}},
- {3422, {wxClipboard, destruct, 0}},
- {3423, {wxClipboard, addData, 1}},
- {3424, {wxClipboard, clear, 0}},
- {3425, {wxClipboard, close, 0}},
- {3426, {wxClipboard, flush, 0}},
- {3427, {wxClipboard, getData, 1}},
- {3428, {wxClipboard, isOpened, 0}},
- {3429, {wxClipboard, open, 0}},
- {3430, {wxClipboard, setData, 1}},
- {3432, {wxClipboard, usePrimarySelection, 1}},
- {3433, {wxClipboard, isSupported, 1}},
- {3434, {wxClipboard, get, 0}},
- {3435, {wxSpinEvent, getPosition, 0}},
- {3436, {wxSpinEvent, setPosition, 1}},
- {3437, {wxSplitterWindow, new_0, 0}},
- {3438, {wxSplitterWindow, new_2, 2}},
- {3439, {wxSplitterWindow, destruct, 0}},
- {3440, {wxSplitterWindow, create, 2}},
- {3441, {wxSplitterWindow, getMinimumPaneSize, 0}},
- {3442, {wxSplitterWindow, getSashGravity, 0}},
- {3443, {wxSplitterWindow, getSashPosition, 0}},
- {3444, {wxSplitterWindow, getSplitMode, 0}},
- {3445, {wxSplitterWindow, getWindow1, 0}},
- {3446, {wxSplitterWindow, getWindow2, 0}},
- {3447, {wxSplitterWindow, initialize, 1}},
- {3448, {wxSplitterWindow, isSplit, 0}},
- {3449, {wxSplitterWindow, replaceWindow, 2}},
- {3450, {wxSplitterWindow, setSashGravity, 1}},
- {3451, {wxSplitterWindow, setSashPosition, 2}},
- {3452, {wxSplitterWindow, setSashSize, 1}},
- {3453, {wxSplitterWindow, setMinimumPaneSize, 1}},
- {3454, {wxSplitterWindow, setSplitMode, 1}},
- {3455, {wxSplitterWindow, splitHorizontally, 3}},
- {3456, {wxSplitterWindow, splitVertically, 3}},
- {3457, {wxSplitterWindow, unsplit, 1}},
- {3458, {wxSplitterWindow, updateSize, 0}},
- {3459, {wxSplitterEvent, getSashPosition, 0}},
- {3460, {wxSplitterEvent, getX, 0}},
- {3461, {wxSplitterEvent, getY, 0}},
- {3462, {wxSplitterEvent, getWindowBeingRemoved, 0}},
- {3463, {wxSplitterEvent, setSashPosition, 1}},
- {3464, {wxHtmlWindow, new_0, 0}},
- {3465, {wxHtmlWindow, new_2, 2}},
- {3466, {wxHtmlWindow, appendToPage, 1}},
- {3467, {wxHtmlWindow, getOpenedAnchor, 0}},
- {3468, {wxHtmlWindow, getOpenedPage, 0}},
- {3469, {wxHtmlWindow, getOpenedPageTitle, 0}},
- {3470, {wxHtmlWindow, getRelatedFrame, 0}},
- {3471, {wxHtmlWindow, historyBack, 0}},
- {3472, {wxHtmlWindow, historyCanBack, 0}},
- {3473, {wxHtmlWindow, historyCanForward, 0}},
- {3474, {wxHtmlWindow, historyClear, 0}},
- {3475, {wxHtmlWindow, historyForward, 0}},
- {3476, {wxHtmlWindow, loadFile, 1}},
- {3477, {wxHtmlWindow, loadPage, 1}},
- {3478, {wxHtmlWindow, selectAll, 0}},
- {3479, {wxHtmlWindow, selectionToText, 0}},
- {3480, {wxHtmlWindow, selectLine, 1}},
- {3481, {wxHtmlWindow, selectWord, 1}},
- {3482, {wxHtmlWindow, setBorders, 1}},
- {3483, {wxHtmlWindow, setFonts, 3}},
- {3484, {wxHtmlWindow, setPage, 1}},
- {3485, {wxHtmlWindow, setRelatedFrame, 2}},
- {3486, {wxHtmlWindow, setRelatedStatusBar, 1}},
- {3487, {wxHtmlWindow, toText, 0}},
- {3488, {wxHtmlWindow, 'Destroy', undefined}},
- {3489, {wxHtmlLinkEvent, getLinkInfo, 0}},
- {3490, {wxSystemSettings, getColour, 1}},
- {3491, {wxSystemSettings, getFont, 1}},
- {3492, {wxSystemSettings, getMetric, 2}},
- {3493, {wxSystemSettings, getScreenType, 0}},
- {3494, {wxSystemOptions, getOption, 1}},
- {3495, {wxSystemOptions, getOptionInt, 1}},
- {3496, {wxSystemOptions, hasOption, 1}},
- {3497, {wxSystemOptions, isFalse, 1}},
- {3498, {wxSystemOptions, setOption_2_1, 2}},
- {3499, {wxSystemOptions, setOption_2_0, 2}},
- {3500, {wxAuiNotebookEvent, setSelection, 1}},
- {3501, {wxAuiNotebookEvent, getSelection, 0}},
- {3502, {wxAuiNotebookEvent, setOldSelection, 1}},
- {3503, {wxAuiNotebookEvent, getOldSelection, 0}},
- {3504, {wxAuiNotebookEvent, setDragSource, 1}},
- {3505, {wxAuiNotebookEvent, getDragSource, 0}},
- {3506, {wxAuiManagerEvent, setManager, 1}},
- {3507, {wxAuiManagerEvent, getManager, 0}},
- {3508, {wxAuiManagerEvent, setPane, 1}},
- {3509, {wxAuiManagerEvent, getPane, 0}},
- {3510, {wxAuiManagerEvent, setButton, 1}},
- {3511, {wxAuiManagerEvent, getButton, 0}},
- {3512, {wxAuiManagerEvent, setDC, 1}},
- {3513, {wxAuiManagerEvent, getDC, 0}},
- {3514, {wxAuiManagerEvent, veto, 1}},
- {3515, {wxAuiManagerEvent, getVeto, 0}},
- {3516, {wxAuiManagerEvent, setCanVeto, 1}},
- {3517, {wxAuiManagerEvent, canVeto, 0}},
- {3518, {wxLogNull, new, 0}},
- {3519, {wxLogNull, 'Destroy', undefined}},
- {3520, {wxTaskBarIcon, new, 0}},
- {3521, {wxTaskBarIcon, destruct, 0}},
- {3522, {wxTaskBarIcon, popupMenu, 1}},
- {3523, {wxTaskBarIcon, removeIcon, 0}},
- {3524, {wxTaskBarIcon, setIcon, 2}},
+ {337, {wxPanel, setFocusIgnoringChildren, 0}},
+ {338, {wxScrolledWindow, new_0, 0}},
+ {339, {wxScrolledWindow, new_2, 2}},
+ {340, {wxScrolledWindow, destruct, 0}},
+ {341, {wxScrolledWindow, calcScrolledPosition_4, 4}},
+ {342, {wxScrolledWindow, calcScrolledPosition_1, 1}},
+ {343, {wxScrolledWindow, calcUnscrolledPosition_4, 4}},
+ {344, {wxScrolledWindow, calcUnscrolledPosition_1, 1}},
+ {345, {wxScrolledWindow, enableScrolling, 2}},
+ {346, {wxScrolledWindow, getScrollPixelsPerUnit, 2}},
+ {347, {wxScrolledWindow, getViewStart, 2}},
+ {348, {wxScrolledWindow, doPrepareDC, 1}},
+ {349, {wxScrolledWindow, prepareDC, 1}},
+ {350, {wxScrolledWindow, scroll, 2}},
+ {351, {wxScrolledWindow, setScrollbars, 5}},
+ {352, {wxScrolledWindow, setScrollRate, 2}},
+ {353, {wxScrolledWindow, setTargetWindow, 1}},
+ {354, {wxSashWindow, new_0, 0}},
+ {355, {wxSashWindow, new_2, 2}},
+ {356, {wxSashWindow, destruct, 0}},
+ {357, {wxSashWindow, getSashVisible, 1}},
+ {358, {wxSashWindow, getMaximumSizeX, 0}},
+ {359, {wxSashWindow, getMaximumSizeY, 0}},
+ {360, {wxSashWindow, getMinimumSizeX, 0}},
+ {361, {wxSashWindow, getMinimumSizeY, 0}},
+ {362, {wxSashWindow, setMaximumSizeX, 1}},
+ {363, {wxSashWindow, setMaximumSizeY, 1}},
+ {364, {wxSashWindow, setMinimumSizeX, 1}},
+ {365, {wxSashWindow, setMinimumSizeY, 1}},
+ {366, {wxSashWindow, setSashVisible, 2}},
+ {367, {wxSashLayoutWindow, new_0, 0}},
+ {368, {wxSashLayoutWindow, new_2, 2}},
+ {369, {wxSashLayoutWindow, create, 2}},
+ {370, {wxSashLayoutWindow, getAlignment, 0}},
+ {371, {wxSashLayoutWindow, getOrientation, 0}},
+ {372, {wxSashLayoutWindow, setAlignment, 1}},
+ {373, {wxSashLayoutWindow, setDefaultSize, 1}},
+ {374, {wxSashLayoutWindow, setOrientation, 1}},
+ {375, {wxSashLayoutWindow, 'Destroy', undefined}},
+ {376, {wxGrid, new_0, 0}},
+ {377, {wxGrid, new_3, 3}},
+ {378, {wxGrid, new_4, 4}},
+ {379, {wxGrid, destruct, 0}},
+ {380, {wxGrid, appendCols, 1}},
+ {381, {wxGrid, appendRows, 1}},
+ {382, {wxGrid, autoSize, 0}},
+ {383, {wxGrid, autoSizeColumn, 2}},
+ {384, {wxGrid, autoSizeColumns, 1}},
+ {385, {wxGrid, autoSizeRow, 2}},
+ {386, {wxGrid, autoSizeRows, 1}},
+ {387, {wxGrid, beginBatch, 0}},
+ {388, {wxGrid, blockToDeviceRect, 2}},
+ {389, {wxGrid, canDragColSize, 0}},
+ {390, {wxGrid, canDragRowSize, 0}},
+ {391, {wxGrid, canDragGridSize, 0}},
+ {392, {wxGrid, canEnableCellControl, 0}},
+ {393, {wxGrid, cellToRect_2, 2}},
+ {394, {wxGrid, cellToRect_1, 1}},
+ {395, {wxGrid, clearGrid, 0}},
+ {396, {wxGrid, clearSelection, 0}},
+ {397, {wxGrid, createGrid, 3}},
+ {398, {wxGrid, deleteCols, 1}},
+ {399, {wxGrid, deleteRows, 1}},
+ {400, {wxGrid, disableCellEditControl, 0}},
+ {401, {wxGrid, disableDragColSize, 0}},
+ {402, {wxGrid, disableDragGridSize, 0}},
+ {403, {wxGrid, disableDragRowSize, 0}},
+ {404, {wxGrid, enableCellEditControl, 1}},
+ {405, {wxGrid, enableDragColSize, 1}},
+ {406, {wxGrid, enableDragGridSize, 1}},
+ {407, {wxGrid, enableDragRowSize, 1}},
+ {408, {wxGrid, enableEditing, 1}},
+ {409, {wxGrid, enableGridLines, 1}},
+ {410, {wxGrid, endBatch, 0}},
+ {411, {wxGrid, fit, 0}},
+ {412, {wxGrid, forceRefresh, 0}},
+ {413, {wxGrid, getBatchCount, 0}},
+ {414, {wxGrid, getCellAlignment, 4}},
+ {415, {wxGrid, getCellBackgroundColour, 2}},
+ {416, {wxGrid, getCellEditor, 2}},
+ {417, {wxGrid, getCellFont, 2}},
+ {418, {wxGrid, getCellRenderer, 2}},
+ {419, {wxGrid, getCellTextColour, 2}},
+ {420, {wxGrid, getCellValue_2, 2}},
+ {421, {wxGrid, getCellValue_1, 1}},
+ {422, {wxGrid, getColLabelAlignment, 2}},
+ {423, {wxGrid, getColLabelSize, 0}},
+ {424, {wxGrid, getColLabelValue, 1}},
+ {425, {wxGrid, getColMinimalAcceptableWidth, 0}},
+ {426, {wxGrid, getDefaultCellAlignment, 2}},
+ {427, {wxGrid, getDefaultCellBackgroundColour, 0}},
+ {428, {wxGrid, getDefaultCellFont, 0}},
+ {429, {wxGrid, getDefaultCellTextColour, 0}},
+ {430, {wxGrid, getDefaultColLabelSize, 0}},
+ {431, {wxGrid, getDefaultColSize, 0}},
+ {432, {wxGrid, getDefaultEditor, 0}},
+ {433, {wxGrid, getDefaultEditorForCell_2, 2}},
+ {434, {wxGrid, getDefaultEditorForCell_1, 1}},
+ {435, {wxGrid, getDefaultEditorForType, 1}},
+ {436, {wxGrid, getDefaultRenderer, 0}},
+ {437, {wxGrid, getDefaultRendererForCell, 2}},
+ {438, {wxGrid, getDefaultRendererForType, 1}},
+ {439, {wxGrid, getDefaultRowLabelSize, 0}},
+ {440, {wxGrid, getDefaultRowSize, 0}},
+ {441, {wxGrid, getGridCursorCol, 0}},
+ {442, {wxGrid, getGridCursorRow, 0}},
+ {443, {wxGrid, getGridLineColour, 0}},
+ {444, {wxGrid, gridLinesEnabled, 0}},
+ {445, {wxGrid, getLabelBackgroundColour, 0}},
+ {446, {wxGrid, getLabelFont, 0}},
+ {447, {wxGrid, getLabelTextColour, 0}},
+ {448, {wxGrid, getNumberCols, 0}},
+ {449, {wxGrid, getNumberRows, 0}},
+ {450, {wxGrid, getOrCreateCellAttr, 2}},
+ {451, {wxGrid, getRowMinimalAcceptableHeight, 0}},
+ {452, {wxGrid, getRowLabelAlignment, 2}},
+ {453, {wxGrid, getRowLabelSize, 0}},
+ {454, {wxGrid, getRowLabelValue, 1}},
+ {455, {wxGrid, getRowSize, 1}},
+ {456, {wxGrid, getScrollLineX, 0}},
+ {457, {wxGrid, getScrollLineY, 0}},
+ {458, {wxGrid, getSelectedCells, 0}},
+ {459, {wxGrid, getSelectedCols, 0}},
+ {460, {wxGrid, getSelectedRows, 0}},
+ {461, {wxGrid, getSelectionBackground, 0}},
+ {462, {wxGrid, getSelectionBlockTopLeft, 0}},
+ {463, {wxGrid, getSelectionBlockBottomRight, 0}},
+ {464, {wxGrid, getSelectionForeground, 0}},
+ {465, {wxGrid, getViewWidth, 0}},
+ {466, {wxGrid, getGridWindow, 0}},
+ {467, {wxGrid, getGridRowLabelWindow, 0}},
+ {468, {wxGrid, getGridColLabelWindow, 0}},
+ {469, {wxGrid, getGridCornerLabelWindow, 0}},
+ {470, {wxGrid, hideCellEditControl, 0}},
+ {471, {wxGrid, insertCols, 1}},
+ {472, {wxGrid, insertRows, 1}},
+ {473, {wxGrid, isCellEditControlEnabled, 0}},
+ {474, {wxGrid, isCurrentCellReadOnly, 0}},
+ {475, {wxGrid, isEditable, 0}},
+ {476, {wxGrid, isInSelection_2, 2}},
+ {477, {wxGrid, isInSelection_1, 1}},
+ {478, {wxGrid, isReadOnly, 2}},
+ {479, {wxGrid, isSelection, 0}},
+ {480, {wxGrid, isVisible_3, 3}},
+ {481, {wxGrid, isVisible_2, 2}},
+ {482, {wxGrid, makeCellVisible_2, 2}},
+ {483, {wxGrid, makeCellVisible_1, 1}},
+ {484, {wxGrid, moveCursorDown, 1}},
+ {485, {wxGrid, moveCursorLeft, 1}},
+ {486, {wxGrid, moveCursorRight, 1}},
+ {487, {wxGrid, moveCursorUp, 1}},
+ {488, {wxGrid, moveCursorDownBlock, 1}},
+ {489, {wxGrid, moveCursorLeftBlock, 1}},
+ {490, {wxGrid, moveCursorRightBlock, 1}},
+ {491, {wxGrid, moveCursorUpBlock, 1}},
+ {492, {wxGrid, movePageDown, 0}},
+ {493, {wxGrid, movePageUp, 0}},
+ {494, {wxGrid, registerDataType, 3}},
+ {495, {wxGrid, saveEditControlValue, 0}},
+ {496, {wxGrid, selectAll, 0}},
+ {497, {wxGrid, selectBlock_5, 5}},
+ {498, {wxGrid, selectBlock_3, 3}},
+ {499, {wxGrid, selectCol, 2}},
+ {500, {wxGrid, selectRow, 2}},
+ {501, {wxGrid, setCellAlignment_4, 4}},
+ {502, {wxGrid, setCellAlignment_3, 3}},
+ {503, {wxGrid, setCellAlignment_1, 1}},
+ {504, {wxGrid, setCellBackgroundColour_3_0, 3}},
+ {505, {wxGrid, setCellBackgroundColour_1, 1}},
+ {506, {wxGrid, setCellBackgroundColour_3_1, 3}},
+ {507, {wxGrid, setCellEditor, 3}},
+ {508, {wxGrid, setCellFont, 3}},
+ {509, {wxGrid, setCellRenderer, 3}},
+ {510, {wxGrid, setCellTextColour_3_0, 3}},
+ {511, {wxGrid, setCellTextColour_3_1, 3}},
+ {512, {wxGrid, setCellTextColour_1, 1}},
+ {513, {wxGrid, setCellValue_3_0, 3}},
+ {514, {wxGrid, setCellValue_2, 2}},
+ {515, {wxGrid, setCellValue_3_1, 3}},
+ {516, {wxGrid, setColAttr, 2}},
+ {517, {wxGrid, setColFormatBool, 1}},
+ {518, {wxGrid, setColFormatNumber, 1}},
+ {519, {wxGrid, setColFormatFloat, 2}},
+ {520, {wxGrid, setColFormatCustom, 2}},
+ {521, {wxGrid, setColLabelAlignment, 2}},
+ {522, {wxGrid, setColLabelSize, 1}},
+ {523, {wxGrid, setColLabelValue, 2}},
+ {524, {wxGrid, setColMinimalWidth, 2}},
+ {525, {wxGrid, setColMinimalAcceptableWidth, 1}},
+ {526, {wxGrid, setColSize, 2}},
+ {527, {wxGrid, setDefaultCellAlignment, 2}},
+ {528, {wxGrid, setDefaultCellBackgroundColour, 1}},
+ {529, {wxGrid, setDefaultCellFont, 1}},
+ {530, {wxGrid, setDefaultCellTextColour, 1}},
+ {531, {wxGrid, setDefaultEditor, 1}},
+ {532, {wxGrid, setDefaultRenderer, 1}},
+ {533, {wxGrid, setDefaultColSize, 2}},
+ {534, {wxGrid, setDefaultRowSize, 2}},
+ {535, {wxGrid, setGridCursor, 2}},
+ {536, {wxGrid, setGridLineColour, 1}},
+ {537, {wxGrid, setLabelBackgroundColour, 1}},
+ {538, {wxGrid, setLabelFont, 1}},
+ {539, {wxGrid, setLabelTextColour, 1}},
+ {540, {wxGrid, setMargins, 2}},
+ {541, {wxGrid, setReadOnly, 3}},
+ {542, {wxGrid, setRowAttr, 2}},
+ {543, {wxGrid, setRowLabelAlignment, 2}},
+ {544, {wxGrid, setRowLabelSize, 1}},
+ {545, {wxGrid, setRowLabelValue, 2}},
+ {546, {wxGrid, setRowMinimalHeight, 2}},
+ {547, {wxGrid, setRowMinimalAcceptableHeight, 1}},
+ {548, {wxGrid, setRowSize, 2}},
+ {549, {wxGrid, setScrollLineX, 1}},
+ {550, {wxGrid, setScrollLineY, 1}},
+ {551, {wxGrid, setSelectionBackground, 1}},
+ {552, {wxGrid, setSelectionForeground, 1}},
+ {553, {wxGrid, setSelectionMode, 1}},
+ {554, {wxGrid, showCellEditControl, 0}},
+ {555, {wxGrid, xToCol, 2}},
+ {556, {wxGrid, xToEdgeOfCol, 1}},
+ {557, {wxGrid, yToEdgeOfRow, 1}},
+ {558, {wxGrid, yToRow, 1}},
+ {559, {wxGridCellRenderer, draw, 7}},
+ {560, {wxGridCellRenderer, getBestSize, 5}},
+ {561, {wxGridCellEditor, create, 3}},
+ {562, {wxGridCellEditor, isCreated, 0}},
+ {563, {wxGridCellEditor, setSize, 1}},
+ {564, {wxGridCellEditor, show, 2}},
+ {565, {wxGridCellEditor, paintBackground, 2}},
+ {566, {wxGridCellEditor, beginEdit, 3}},
+ {567, {wxGridCellEditor, endEdit, 3}},
+ {568, {wxGridCellEditor, reset, 0}},
+ {569, {wxGridCellEditor, startingKey, 1}},
+ {570, {wxGridCellEditor, startingClick, 0}},
+ {571, {wxGridCellEditor, handleReturn, 1}},
+ {572, {wxGridCellBoolRenderer, new, 0}},
+ {573, {wxGridCellBoolRenderer, 'Destroy', undefined}},
+ {574, {wxGridCellBoolEditor, new, 0}},
+ {575, {wxGridCellBoolEditor, isTrueValue, 1}},
+ {576, {wxGridCellBoolEditor, useStringValues, 1}},
+ {577, {wxGridCellBoolEditor, 'Destroy', undefined}},
+ {578, {wxGridCellFloatRenderer, new, 1}},
+ {579, {wxGridCellFloatRenderer, getPrecision, 0}},
+ {580, {wxGridCellFloatRenderer, getWidth, 0}},
+ {581, {wxGridCellFloatRenderer, setParameters, 1}},
+ {582, {wxGridCellFloatRenderer, setPrecision, 1}},
+ {583, {wxGridCellFloatRenderer, setWidth, 1}},
+ {584, {wxGridCellFloatRenderer, 'Destroy', undefined}},
+ {585, {wxGridCellFloatEditor, new, 1}},
+ {586, {wxGridCellFloatEditor, setParameters, 1}},
+ {587, {wxGridCellFloatEditor, 'Destroy', undefined}},
+ {588, {wxGridCellStringRenderer, new, 0}},
+ {589, {wxGridCellStringRenderer, 'Destroy', undefined}},
+ {590, {wxGridCellTextEditor, new, 0}},
+ {591, {wxGridCellTextEditor, setParameters, 1}},
+ {592, {wxGridCellTextEditor, 'Destroy', undefined}},
+ {594, {wxGridCellChoiceEditor, new, 2}},
+ {595, {wxGridCellChoiceEditor, setParameters, 1}},
+ {596, {wxGridCellChoiceEditor, 'Destroy', undefined}},
+ {597, {wxGridCellNumberRenderer, new, 0}},
+ {598, {wxGridCellNumberRenderer, 'Destroy', undefined}},
+ {599, {wxGridCellNumberEditor, new, 1}},
+ {600, {wxGridCellNumberEditor, getValue, 0}},
+ {601, {wxGridCellNumberEditor, setParameters, 1}},
+ {602, {wxGridCellNumberEditor, 'Destroy', undefined}},
+ {603, {wxGridCellAttr, setTextColour, 1}},
+ {604, {wxGridCellAttr, setBackgroundColour, 1}},
+ {605, {wxGridCellAttr, setFont, 1}},
+ {606, {wxGridCellAttr, setAlignment, 2}},
+ {607, {wxGridCellAttr, setReadOnly, 1}},
+ {608, {wxGridCellAttr, setRenderer, 1}},
+ {609, {wxGridCellAttr, setEditor, 1}},
+ {610, {wxGridCellAttr, hasTextColour, 0}},
+ {611, {wxGridCellAttr, hasBackgroundColour, 0}},
+ {612, {wxGridCellAttr, hasFont, 0}},
+ {613, {wxGridCellAttr, hasAlignment, 0}},
+ {614, {wxGridCellAttr, hasRenderer, 0}},
+ {615, {wxGridCellAttr, hasEditor, 0}},
+ {616, {wxGridCellAttr, getTextColour, 0}},
+ {617, {wxGridCellAttr, getBackgroundColour, 0}},
+ {618, {wxGridCellAttr, getFont, 0}},
+ {619, {wxGridCellAttr, getAlignment, 2}},
+ {620, {wxGridCellAttr, getRenderer, 3}},
+ {621, {wxGridCellAttr, getEditor, 3}},
+ {622, {wxGridCellAttr, isReadOnly, 0}},
+ {623, {wxGridCellAttr, setDefAttr, 1}},
+ {624, {wxDC, blit, 5}},
+ {625, {wxDC, calcBoundingBox, 2}},
+ {626, {wxDC, clear, 0}},
+ {627, {wxDC, computeScaleAndOrigin, 0}},
+ {628, {wxDC, crossHair, 1}},
+ {629, {wxDC, destroyClippingRegion, 0}},
+ {630, {wxDC, deviceToLogicalX, 1}},
+ {631, {wxDC, deviceToLogicalXRel, 1}},
+ {632, {wxDC, deviceToLogicalY, 1}},
+ {633, {wxDC, deviceToLogicalYRel, 1}},
+ {634, {wxDC, drawArc, 3}},
+ {635, {wxDC, drawBitmap, 3}},
+ {636, {wxDC, drawCheckMark, 1}},
+ {637, {wxDC, drawCircle, 2}},
+ {639, {wxDC, drawEllipse_2, 2}},
+ {640, {wxDC, drawEllipse_1, 1}},
+ {641, {wxDC, drawEllipticArc, 4}},
+ {642, {wxDC, drawIcon, 2}},
+ {643, {wxDC, drawLabel, 3}},
+ {644, {wxDC, drawLine, 2}},
+ {645, {wxDC, drawLines, 3}},
+ {647, {wxDC, drawPolygon, 3}},
+ {649, {wxDC, drawPoint, 1}},
+ {651, {wxDC, drawRectangle_2, 2}},
+ {652, {wxDC, drawRectangle_1, 1}},
+ {653, {wxDC, drawRotatedText, 3}},
+ {655, {wxDC, drawRoundedRectangle_3, 3}},
+ {656, {wxDC, drawRoundedRectangle_2, 2}},
+ {657, {wxDC, drawText, 2}},
+ {658, {wxDC, endDoc, 0}},
+ {659, {wxDC, endPage, 0}},
+ {660, {wxDC, floodFill, 3}},
+ {661, {wxDC, getBackground, 0}},
+ {662, {wxDC, getBackgroundMode, 0}},
+ {663, {wxDC, getBrush, 0}},
+ {664, {wxDC, getCharHeight, 0}},
+ {665, {wxDC, getCharWidth, 0}},
+ {666, {wxDC, getClippingBox, 4}},
+ {668, {wxDC, getFont, 0}},
+ {669, {wxDC, getLayoutDirection, 0}},
+ {670, {wxDC, getLogicalFunction, 0}},
+ {671, {wxDC, getMapMode, 0}},
+ {672, {wxDC, getMultiLineTextExtent_4, 4}},
+ {673, {wxDC, getMultiLineTextExtent_1, 1}},
+ {674, {wxDC, getPartialTextExtents, 2}},
+ {675, {wxDC, getPen, 0}},
+ {676, {wxDC, getPixel, 2}},
+ {677, {wxDC, getPPI, 0}},
+ {679, {wxDC, getSize, 0}},
+ {681, {wxDC, getSizeMM, 0}},
+ {682, {wxDC, getTextBackground, 0}},
+ {683, {wxDC, getTextExtent_4, 4}},
+ {684, {wxDC, getTextExtent_1, 1}},
+ {686, {wxDC, getTextForeground, 0}},
+ {687, {wxDC, getUserScale, 2}},
+ {688, {wxDC, gradientFillConcentric_3, 3}},
+ {689, {wxDC, gradientFillConcentric_4, 4}},
+ {690, {wxDC, gradientFillLinear, 4}},
+ {691, {wxDC, logicalToDeviceX, 1}},
+ {692, {wxDC, logicalToDeviceXRel, 1}},
+ {693, {wxDC, logicalToDeviceY, 1}},
+ {694, {wxDC, logicalToDeviceYRel, 1}},
+ {695, {wxDC, maxX, 0}},
+ {696, {wxDC, maxY, 0}},
+ {697, {wxDC, minX, 0}},
+ {698, {wxDC, minY, 0}},
+ {699, {wxDC, isOk, 0}},
+ {700, {wxDC, resetBoundingBox, 0}},
+ {701, {wxDC, setAxisOrientation, 2}},
+ {702, {wxDC, setBackground, 1}},
+ {703, {wxDC, setBackgroundMode, 1}},
+ {704, {wxDC, setBrush, 1}},
+ {706, {wxDC, setClippingRegion_2, 2}},
+ {707, {wxDC, setClippingRegion_1_1, 1}},
+ {708, {wxDC, setClippingRegion_1_0, 1}},
+ {709, {wxDC, setDeviceOrigin, 2}},
+ {710, {wxDC, setFont, 1}},
+ {711, {wxDC, setLayoutDirection, 1}},
+ {712, {wxDC, setLogicalFunction, 1}},
+ {713, {wxDC, setMapMode, 1}},
+ {714, {wxDC, setPalette, 1}},
+ {715, {wxDC, setPen, 1}},
+ {716, {wxDC, setTextBackground, 1}},
+ {717, {wxDC, setTextForeground, 1}},
+ {718, {wxDC, setUserScale, 2}},
+ {719, {wxDC, startDoc, 1}},
+ {720, {wxDC, startPage, 0}},
+ {721, {wxMirrorDC, new, 2}},
+ {722, {wxMirrorDC, 'Destroy', undefined}},
+ {723, {wxScreenDC, new, 0}},
+ {724, {wxScreenDC, destruct, 0}},
+ {725, {wxPostScriptDC, new_0, 0}},
+ {726, {wxPostScriptDC, new_1, 1}},
+ {727, {wxPostScriptDC, destruct, 0}},
+ {728, {wxPostScriptDC, setResolution, 1}},
+ {729, {wxPostScriptDC, getResolution, 0}},
+ {730, {wxWindowDC, new_0, 0}},
+ {731, {wxWindowDC, new_1, 1}},
+ {732, {wxWindowDC, destruct, 0}},
+ {733, {wxClientDC, new_0, 0}},
+ {734, {wxClientDC, new_1, 1}},
+ {735, {wxClientDC, 'Destroy', undefined}},
+ {736, {wxPaintDC, new_0, 0}},
+ {737, {wxPaintDC, new_1, 1}},
+ {738, {wxPaintDC, 'Destroy', undefined}},
+ {740, {wxMemoryDC, new_1_0, 1}},
+ {741, {wxMemoryDC, new_1_1, 1}},
+ {742, {wxMemoryDC, new_0, 0}},
+ {744, {wxMemoryDC, destruct, 0}},
+ {745, {wxMemoryDC, selectObject, 1}},
+ {746, {wxMemoryDC, selectObjectAsSource, 1}},
+ {747, {wxBufferedDC, new_0, 0}},
+ {748, {wxBufferedDC, new_2, 2}},
+ {749, {wxBufferedDC, new_3, 3}},
+ {750, {wxBufferedDC, destruct, 0}},
+ {751, {wxBufferedDC, init_2, 2}},
+ {752, {wxBufferedDC, init_3, 3}},
+ {753, {wxBufferedPaintDC, new_3, 3}},
+ {754, {wxBufferedPaintDC, new_2, 2}},
+ {755, {wxBufferedPaintDC, destruct, 0}},
+ {756, {wxGraphicsObject, destruct, 0}},
+ {757, {wxGraphicsObject, getRenderer, 0}},
+ {758, {wxGraphicsObject, isNull, 0}},
+ {759, {wxGraphicsContext, destruct, 0}},
+ {760, {wxGraphicsContext, create_1_1, 1}},
+ {761, {wxGraphicsContext, create_1_0, 1}},
+ {762, {wxGraphicsContext, create_0, 0}},
+ {763, {wxGraphicsContext, createPen, 1}},
+ {764, {wxGraphicsContext, createBrush, 1}},
+ {765, {wxGraphicsContext, createRadialGradientBrush, 7}},
+ {766, {wxGraphicsContext, createLinearGradientBrush, 6}},
+ {767, {wxGraphicsContext, createFont, 2}},
+ {768, {wxGraphicsContext, createMatrix, 1}},
+ {769, {wxGraphicsContext, createPath, 0}},
+ {770, {wxGraphicsContext, clip_1, 1}},
+ {771, {wxGraphicsContext, clip_4, 4}},
+ {772, {wxGraphicsContext, resetClip, 0}},
+ {773, {wxGraphicsContext, drawBitmap, 5}},
+ {774, {wxGraphicsContext, drawEllipse, 4}},
+ {775, {wxGraphicsContext, drawIcon, 5}},
+ {776, {wxGraphicsContext, drawLines, 3}},
+ {777, {wxGraphicsContext, drawPath, 2}},
+ {778, {wxGraphicsContext, drawRectangle, 4}},
+ {779, {wxGraphicsContext, drawRoundedRectangle, 5}},
+ {780, {wxGraphicsContext, drawText_3, 3}},
+ {781, {wxGraphicsContext, drawText_4_0, 4}},
+ {782, {wxGraphicsContext, drawText_4_1, 4}},
+ {783, {wxGraphicsContext, drawText_5, 5}},
+ {784, {wxGraphicsContext, fillPath, 2}},
+ {785, {wxGraphicsContext, strokePath, 1}},
+ {786, {wxGraphicsContext, getPartialTextExtents, 2}},
+ {787, {wxGraphicsContext, getTextExtent, 5}},
+ {788, {wxGraphicsContext, rotate, 1}},
+ {789, {wxGraphicsContext, scale, 2}},
+ {790, {wxGraphicsContext, translate, 2}},
+ {791, {wxGraphicsContext, getTransform, 0}},
+ {792, {wxGraphicsContext, setTransform, 1}},
+ {793, {wxGraphicsContext, concatTransform, 1}},
+ {794, {wxGraphicsContext, setBrush_1_1, 1}},
+ {795, {wxGraphicsContext, setBrush_1_0, 1}},
+ {796, {wxGraphicsContext, setFont_1, 1}},
+ {797, {wxGraphicsContext, setFont_2, 2}},
+ {798, {wxGraphicsContext, setPen_1_0, 1}},
+ {799, {wxGraphicsContext, setPen_1_1, 1}},
+ {800, {wxGraphicsContext, strokeLine, 4}},
+ {801, {wxGraphicsContext, strokeLines, 2}},
+ {803, {wxGraphicsMatrix, concat, 1}},
+ {805, {wxGraphicsMatrix, get, 1}},
+ {806, {wxGraphicsMatrix, invert, 0}},
+ {807, {wxGraphicsMatrix, isEqual, 1}},
+ {809, {wxGraphicsMatrix, isIdentity, 0}},
+ {810, {wxGraphicsMatrix, rotate, 1}},
+ {811, {wxGraphicsMatrix, scale, 2}},
+ {812, {wxGraphicsMatrix, translate, 2}},
+ {813, {wxGraphicsMatrix, set, 1}},
+ {814, {wxGraphicsMatrix, transformPoint, 2}},
+ {815, {wxGraphicsMatrix, transformDistance, 2}},
+ {816, {wxGraphicsPath, moveToPoint_2, 2}},
+ {817, {wxGraphicsPath, moveToPoint_1, 1}},
+ {818, {wxGraphicsPath, addArc_6, 6}},
+ {819, {wxGraphicsPath, addArc_5, 5}},
+ {820, {wxGraphicsPath, addArcToPoint, 5}},
+ {821, {wxGraphicsPath, addCircle, 3}},
+ {822, {wxGraphicsPath, addCurveToPoint_6, 6}},
+ {823, {wxGraphicsPath, addCurveToPoint_3, 3}},
+ {824, {wxGraphicsPath, addEllipse, 4}},
+ {825, {wxGraphicsPath, addLineToPoint_2, 2}},
+ {826, {wxGraphicsPath, addLineToPoint_1, 1}},
+ {827, {wxGraphicsPath, addPath, 1}},
+ {828, {wxGraphicsPath, addQuadCurveToPoint, 4}},
+ {829, {wxGraphicsPath, addRectangle, 4}},
+ {830, {wxGraphicsPath, addRoundedRectangle, 5}},
+ {831, {wxGraphicsPath, closeSubpath, 0}},
+ {832, {wxGraphicsPath, contains_3, 3}},
+ {833, {wxGraphicsPath, contains_2, 2}},
+ {835, {wxGraphicsPath, getBox, 0}},
+ {837, {wxGraphicsPath, getCurrentPoint, 0}},
+ {838, {wxGraphicsPath, transform, 1}},
+ {839, {wxGraphicsRenderer, getDefaultRenderer, 0}},
+ {840, {wxGraphicsRenderer, createContext_1_1, 1}},
+ {841, {wxGraphicsRenderer, createContext_1_0, 1}},
+ {842, {wxGraphicsRenderer, createPen, 1}},
+ {843, {wxGraphicsRenderer, createBrush, 1}},
+ {844, {wxGraphicsRenderer, createLinearGradientBrush, 6}},
+ {845, {wxGraphicsRenderer, createRadialGradientBrush, 7}},
+ {846, {wxGraphicsRenderer, createFont, 2}},
+ {847, {wxGraphicsRenderer, createMatrix, 1}},
+ {848, {wxGraphicsRenderer, createPath, 0}},
+ {850, {wxMenuBar, new_1, 1}},
+ {852, {wxMenuBar, new_0, 0}},
+ {854, {wxMenuBar, destruct, 0}},
+ {855, {wxMenuBar, append, 2}},
+ {856, {wxMenuBar, check, 2}},
+ {857, {wxMenuBar, enable_2, 2}},
+ {858, {wxMenuBar, enable_1, 1}},
+ {859, {wxMenuBar, enableTop, 2}},
+ {860, {wxMenuBar, findMenu, 1}},
+ {861, {wxMenuBar, findMenuItem, 2}},
+ {862, {wxMenuBar, findItem, 2}},
+ {863, {wxMenuBar, getHelpString, 1}},
+ {864, {wxMenuBar, getLabel_1, 1}},
+ {865, {wxMenuBar, getLabel_0, 0}},
+ {866, {wxMenuBar, getLabelTop, 1}},
+ {867, {wxMenuBar, getMenu, 1}},
+ {868, {wxMenuBar, getMenuCount, 0}},
+ {869, {wxMenuBar, insert, 3}},
+ {870, {wxMenuBar, isChecked, 1}},
+ {871, {wxMenuBar, isEnabled_1, 1}},
+ {872, {wxMenuBar, isEnabled_0, 0}},
+ {873, {wxMenuBar, remove, 1}},
+ {874, {wxMenuBar, replace, 3}},
+ {875, {wxMenuBar, setHelpString, 2}},
+ {876, {wxMenuBar, setLabel_2, 2}},
+ {877, {wxMenuBar, setLabel_1, 1}},
+ {878, {wxMenuBar, setLabelTop, 2}},
+ {879, {wxControl, getLabel, 0}},
+ {880, {wxControl, setLabel, 1}},
+ {881, {wxControlWithItems, append_1, 1}},
+ {882, {wxControlWithItems, append_2, 2}},
+ {883, {wxControlWithItems, appendStrings_1, 1}},
+ {884, {wxControlWithItems, clear, 0}},
+ {885, {wxControlWithItems, delete, 1}},
+ {886, {wxControlWithItems, findString, 2}},
+ {887, {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, {wxListItemAttr, new_0, 0}},
+ {1760, {wxListItemAttr, new_3, 3}},
+ {1761, {wxListItemAttr, getBackgroundColour, 0}},
+ {1762, {wxListItemAttr, getFont, 0}},
+ {1763, {wxListItemAttr, getTextColour, 0}},
+ {1764, {wxListItemAttr, hasBackgroundColour, 0}},
+ {1765, {wxListItemAttr, hasFont, 0}},
+ {1766, {wxListItemAttr, hasTextColour, 0}},
+ {1767, {wxListItemAttr, setBackgroundColour, 1}},
+ {1768, {wxListItemAttr, setFont, 1}},
+ {1769, {wxListItemAttr, setTextColour, 1}},
+ {1770, {wxListItemAttr, 'Destroy', undefined}},
+ {1771, {wxImageList, new_0, 0}},
+ {1772, {wxImageList, new_3, 3}},
+ {1773, {wxImageList, add_1, 1}},
+ {1774, {wxImageList, add_2_0, 2}},
+ {1775, {wxImageList, add_2_1, 2}},
+ {1776, {wxImageList, create, 3}},
+ {1778, {wxImageList, draw, 5}},
+ {1779, {wxImageList, getBitmap, 1}},
+ {1780, {wxImageList, getIcon, 1}},
+ {1781, {wxImageList, getImageCount, 0}},
+ {1782, {wxImageList, getSize, 3}},
+ {1783, {wxImageList, remove, 1}},
+ {1784, {wxImageList, removeAll, 0}},
+ {1785, {wxImageList, replace_2, 2}},
+ {1786, {wxImageList, replace_3, 3}},
+ {1787, {wxImageList, 'Destroy', undefined}},
+ {1788, {wxTextAttr, new_0, 0}},
+ {1789, {wxTextAttr, new_2, 2}},
+ {1790, {wxTextAttr, getAlignment, 0}},
+ {1791, {wxTextAttr, getBackgroundColour, 0}},
+ {1792, {wxTextAttr, getFont, 0}},
+ {1793, {wxTextAttr, getLeftIndent, 0}},
+ {1794, {wxTextAttr, getLeftSubIndent, 0}},
+ {1795, {wxTextAttr, getRightIndent, 0}},
+ {1796, {wxTextAttr, getTabs, 0}},
+ {1797, {wxTextAttr, getTextColour, 0}},
+ {1798, {wxTextAttr, hasBackgroundColour, 0}},
+ {1799, {wxTextAttr, hasFont, 0}},
+ {1800, {wxTextAttr, hasTextColour, 0}},
+ {1801, {wxTextAttr, getFlags, 0}},
+ {1802, {wxTextAttr, isDefault, 0}},
+ {1803, {wxTextAttr, setAlignment, 1}},
+ {1804, {wxTextAttr, setBackgroundColour, 1}},
+ {1805, {wxTextAttr, setFlags, 1}},
+ {1806, {wxTextAttr, setFont, 2}},
+ {1807, {wxTextAttr, setLeftIndent, 2}},
+ {1808, {wxTextAttr, setRightIndent, 1}},
+ {1809, {wxTextAttr, setTabs, 1}},
+ {1810, {wxTextAttr, setTextColour, 1}},
+ {1811, {wxTextAttr, 'Destroy', undefined}},
+ {1813, {wxTextCtrl, new_3, 3}},
+ {1814, {wxTextCtrl, new_0, 0}},
+ {1816, {wxTextCtrl, destruct, 0}},
+ {1817, {wxTextCtrl, appendText, 1}},
+ {1818, {wxTextCtrl, canCopy, 0}},
+ {1819, {wxTextCtrl, canCut, 0}},
+ {1820, {wxTextCtrl, canPaste, 0}},
+ {1821, {wxTextCtrl, canRedo, 0}},
+ {1822, {wxTextCtrl, canUndo, 0}},
+ {1823, {wxTextCtrl, clear, 0}},
+ {1824, {wxTextCtrl, copy, 0}},
+ {1825, {wxTextCtrl, create, 3}},
+ {1826, {wxTextCtrl, cut, 0}},
+ {1827, {wxTextCtrl, discardEdits, 0}},
+ {1828, {wxTextCtrl, emulateKeyPress, 1}},
+ {1829, {wxTextCtrl, getDefaultStyle, 0}},
+ {1830, {wxTextCtrl, getInsertionPoint, 0}},
+ {1831, {wxTextCtrl, getLastPosition, 0}},
+ {1832, {wxTextCtrl, getLineLength, 1}},
+ {1833, {wxTextCtrl, getLineText, 1}},
+ {1834, {wxTextCtrl, getNumberOfLines, 0}},
+ {1835, {wxTextCtrl, getRange, 2}},
+ {1836, {wxTextCtrl, getSelection, 2}},
+ {1837, {wxTextCtrl, getStringSelection, 0}},
+ {1838, {wxTextCtrl, getStyle, 2}},
+ {1839, {wxTextCtrl, getValue, 0}},
+ {1840, {wxTextCtrl, isEditable, 0}},
+ {1841, {wxTextCtrl, isModified, 0}},
+ {1842, {wxTextCtrl, isMultiLine, 0}},
+ {1843, {wxTextCtrl, isSingleLine, 0}},
+ {1844, {wxTextCtrl, loadFile, 2}},
+ {1845, {wxTextCtrl, markDirty, 0}},
+ {1846, {wxTextCtrl, paste, 0}},
+ {1847, {wxTextCtrl, positionToXY, 3}},
+ {1848, {wxTextCtrl, redo, 0}},
+ {1849, {wxTextCtrl, remove, 2}},
+ {1850, {wxTextCtrl, replace, 3}},
+ {1851, {wxTextCtrl, saveFile, 1}},
+ {1852, {wxTextCtrl, setDefaultStyle, 1}},
+ {1853, {wxTextCtrl, setEditable, 1}},
+ {1854, {wxTextCtrl, setInsertionPoint, 1}},
+ {1855, {wxTextCtrl, setInsertionPointEnd, 0}},
+ {1857, {wxTextCtrl, setMaxLength, 1}},
+ {1858, {wxTextCtrl, setSelection, 2}},
+ {1859, {wxTextCtrl, setStyle, 3}},
+ {1860, {wxTextCtrl, setValue, 1}},
+ {1861, {wxTextCtrl, showPosition, 1}},
+ {1862, {wxTextCtrl, undo, 0}},
+ {1863, {wxTextCtrl, writeText, 1}},
+ {1864, {wxTextCtrl, xYToPosition, 2}},
+ {1867, {wxNotebook, new_0, 0}},
+ {1868, {wxNotebook, new_3, 3}},
+ {1869, {wxNotebook, destruct, 0}},
+ {1870, {wxNotebook, addPage, 3}},
+ {1871, {wxNotebook, advanceSelection, 1}},
+ {1872, {wxNotebook, assignImageList, 1}},
+ {1873, {wxNotebook, create, 3}},
+ {1874, {wxNotebook, deleteAllPages, 0}},
+ {1875, {wxNotebook, deletePage, 1}},
+ {1876, {wxNotebook, removePage, 1}},
+ {1877, {wxNotebook, getCurrentPage, 0}},
+ {1878, {wxNotebook, getImageList, 0}},
+ {1880, {wxNotebook, getPage, 1}},
+ {1881, {wxNotebook, getPageCount, 0}},
+ {1882, {wxNotebook, getPageImage, 1}},
+ {1883, {wxNotebook, getPageText, 1}},
+ {1884, {wxNotebook, getRowCount, 0}},
+ {1885, {wxNotebook, getSelection, 0}},
+ {1886, {wxNotebook, getThemeBackgroundColour, 0}},
+ {1888, {wxNotebook, hitTest, 2}},
+ {1890, {wxNotebook, insertPage, 4}},
+ {1891, {wxNotebook, setImageList, 1}},
+ {1892, {wxNotebook, setPadding, 1}},
+ {1893, {wxNotebook, setPageSize, 1}},
+ {1894, {wxNotebook, setPageImage, 2}},
+ {1895, {wxNotebook, setPageText, 2}},
+ {1896, {wxNotebook, setSelection, 1}},
+ {1897, {wxNotebook, changeSelection, 1}},
+ {1898, {wxChoicebook, new_0, 0}},
+ {1899, {wxChoicebook, new_3, 3}},
+ {1900, {wxChoicebook, addPage, 3}},
+ {1901, {wxChoicebook, advanceSelection, 1}},
+ {1902, {wxChoicebook, assignImageList, 1}},
+ {1903, {wxChoicebook, create, 3}},
+ {1904, {wxChoicebook, deleteAllPages, 0}},
+ {1905, {wxChoicebook, deletePage, 1}},
+ {1906, {wxChoicebook, removePage, 1}},
+ {1907, {wxChoicebook, getCurrentPage, 0}},
+ {1908, {wxChoicebook, getImageList, 0}},
+ {1910, {wxChoicebook, getPage, 1}},
+ {1911, {wxChoicebook, getPageCount, 0}},
+ {1912, {wxChoicebook, getPageImage, 1}},
+ {1913, {wxChoicebook, getPageText, 1}},
+ {1914, {wxChoicebook, getSelection, 0}},
+ {1915, {wxChoicebook, hitTest, 2}},
+ {1916, {wxChoicebook, insertPage, 4}},
+ {1917, {wxChoicebook, setImageList, 1}},
+ {1918, {wxChoicebook, setPageSize, 1}},
+ {1919, {wxChoicebook, setPageImage, 2}},
+ {1920, {wxChoicebook, setPageText, 2}},
+ {1921, {wxChoicebook, setSelection, 1}},
+ {1922, {wxChoicebook, changeSelection, 1}},
+ {1923, {wxChoicebook, 'Destroy', undefined}},
+ {1924, {wxToolbook, new_0, 0}},
+ {1925, {wxToolbook, new_3, 3}},
+ {1926, {wxToolbook, addPage, 3}},
+ {1927, {wxToolbook, advanceSelection, 1}},
+ {1928, {wxToolbook, assignImageList, 1}},
+ {1929, {wxToolbook, create, 3}},
+ {1930, {wxToolbook, deleteAllPages, 0}},
+ {1931, {wxToolbook, deletePage, 1}},
+ {1932, {wxToolbook, removePage, 1}},
+ {1933, {wxToolbook, getCurrentPage, 0}},
+ {1934, {wxToolbook, getImageList, 0}},
+ {1936, {wxToolbook, getPage, 1}},
+ {1937, {wxToolbook, getPageCount, 0}},
+ {1938, {wxToolbook, getPageImage, 1}},
+ {1939, {wxToolbook, getPageText, 1}},
+ {1940, {wxToolbook, getSelection, 0}},
+ {1942, {wxToolbook, hitTest, 2}},
+ {1943, {wxToolbook, insertPage, 4}},
+ {1944, {wxToolbook, setImageList, 1}},
+ {1945, {wxToolbook, setPageSize, 1}},
+ {1946, {wxToolbook, setPageImage, 2}},
+ {1947, {wxToolbook, setPageText, 2}},
+ {1948, {wxToolbook, setSelection, 1}},
+ {1949, {wxToolbook, changeSelection, 1}},
+ {1950, {wxToolbook, 'Destroy', undefined}},
+ {1951, {wxListbook, new_0, 0}},
+ {1952, {wxListbook, new_3, 3}},
+ {1953, {wxListbook, addPage, 3}},
+ {1954, {wxListbook, advanceSelection, 1}},
+ {1955, {wxListbook, assignImageList, 1}},
+ {1956, {wxListbook, create, 3}},
+ {1957, {wxListbook, deleteAllPages, 0}},
+ {1958, {wxListbook, deletePage, 1}},
+ {1959, {wxListbook, removePage, 1}},
+ {1960, {wxListbook, getCurrentPage, 0}},
+ {1961, {wxListbook, getImageList, 0}},
+ {1963, {wxListbook, getPage, 1}},
+ {1964, {wxListbook, getPageCount, 0}},
+ {1965, {wxListbook, getPageImage, 1}},
+ {1966, {wxListbook, getPageText, 1}},
+ {1967, {wxListbook, getSelection, 0}},
+ {1969, {wxListbook, hitTest, 2}},
+ {1970, {wxListbook, insertPage, 4}},
+ {1971, {wxListbook, setImageList, 1}},
+ {1972, {wxListbook, setPageSize, 1}},
+ {1973, {wxListbook, setPageImage, 2}},
+ {1974, {wxListbook, setPageText, 2}},
+ {1975, {wxListbook, setSelection, 1}},
+ {1976, {wxListbook, changeSelection, 1}},
+ {1977, {wxListbook, 'Destroy', undefined}},
+ {1978, {wxTreebook, new_0, 0}},
+ {1979, {wxTreebook, new_3, 3}},
+ {1980, {wxTreebook, addPage, 3}},
+ {1981, {wxTreebook, advanceSelection, 1}},
+ {1982, {wxTreebook, assignImageList, 1}},
+ {1983, {wxTreebook, create, 3}},
+ {1984, {wxTreebook, deleteAllPages, 0}},
+ {1985, {wxTreebook, deletePage, 1}},
+ {1986, {wxTreebook, removePage, 1}},
+ {1987, {wxTreebook, getCurrentPage, 0}},
+ {1988, {wxTreebook, getImageList, 0}},
+ {1990, {wxTreebook, getPage, 1}},
+ {1991, {wxTreebook, getPageCount, 0}},
+ {1992, {wxTreebook, getPageImage, 1}},
+ {1993, {wxTreebook, getPageText, 1}},
+ {1994, {wxTreebook, getSelection, 0}},
+ {1995, {wxTreebook, expandNode, 2}},
+ {1996, {wxTreebook, isNodeExpanded, 1}},
+ {1998, {wxTreebook, hitTest, 2}},
+ {1999, {wxTreebook, insertPage, 4}},
+ {2000, {wxTreebook, insertSubPage, 4}},
+ {2001, {wxTreebook, setImageList, 1}},
+ {2002, {wxTreebook, setPageSize, 1}},
+ {2003, {wxTreebook, setPageImage, 2}},
+ {2004, {wxTreebook, setPageText, 2}},
+ {2005, {wxTreebook, setSelection, 1}},
+ {2006, {wxTreebook, changeSelection, 1}},
+ {2007, {wxTreebook, 'Destroy', undefined}},
+ {2010, {wxTreeCtrl, new_2, 2}},
+ {2011, {wxTreeCtrl, new_0, 0}},
+ {2013, {wxTreeCtrl, destruct, 0}},
+ {2014, {wxTreeCtrl, addRoot, 2}},
+ {2015, {wxTreeCtrl, appendItem, 3}},
+ {2016, {wxTreeCtrl, assignImageList, 1}},
+ {2017, {wxTreeCtrl, assignStateImageList, 1}},
+ {2018, {wxTreeCtrl, collapse, 1}},
+ {2019, {wxTreeCtrl, collapseAndReset, 1}},
+ {2020, {wxTreeCtrl, create, 2}},
+ {2021, {wxTreeCtrl, delete, 1}},
+ {2022, {wxTreeCtrl, deleteAllItems, 0}},
+ {2023, {wxTreeCtrl, deleteChildren, 1}},
+ {2024, {wxTreeCtrl, editLabel, 1}},
+ {2025, {wxTreeCtrl, ensureVisible, 1}},
+ {2026, {wxTreeCtrl, expand, 1}},
+ {2027, {wxTreeCtrl, getBoundingRect, 3}},
+ {2029, {wxTreeCtrl, getChildrenCount, 2}},
+ {2030, {wxTreeCtrl, getCount, 0}},
+ {2031, {wxTreeCtrl, getEditControl, 0}},
+ {2032, {wxTreeCtrl, getFirstChild, 2}},
+ {2033, {wxTreeCtrl, getNextChild, 2}},
+ {2034, {wxTreeCtrl, getFirstVisibleItem, 0}},
+ {2035, {wxTreeCtrl, getImageList, 0}},
+ {2036, {wxTreeCtrl, getIndent, 0}},
+ {2037, {wxTreeCtrl, getItemBackgroundColour, 1}},
+ {2038, {wxTreeCtrl, getItemData, 1}},
+ {2039, {wxTreeCtrl, getItemFont, 1}},
+ {2040, {wxTreeCtrl, getItemImage_1, 1}},
+ {2041, {wxTreeCtrl, getItemImage_2, 2}},
+ {2042, {wxTreeCtrl, getItemText, 1}},
+ {2043, {wxTreeCtrl, getItemTextColour, 1}},
+ {2044, {wxTreeCtrl, getLastChild, 1}},
+ {2045, {wxTreeCtrl, getNextSibling, 1}},
+ {2046, {wxTreeCtrl, getNextVisible, 1}},
+ {2047, {wxTreeCtrl, getItemParent, 1}},
+ {2048, {wxTreeCtrl, getPrevSibling, 1}},
+ {2049, {wxTreeCtrl, getPrevVisible, 1}},
+ {2050, {wxTreeCtrl, getRootItem, 0}},
+ {2051, {wxTreeCtrl, getSelection, 0}},
+ {2052, {wxTreeCtrl, getSelections, 1}},
+ {2053, {wxTreeCtrl, getStateImageList, 0}},
+ {2054, {wxTreeCtrl, hitTest, 2}},
+ {2056, {wxTreeCtrl, insertItem, 4}},
+ {2057, {wxTreeCtrl, isBold, 1}},
+ {2058, {wxTreeCtrl, isExpanded, 1}},
+ {2059, {wxTreeCtrl, isSelected, 1}},
+ {2060, {wxTreeCtrl, isVisible, 1}},
+ {2061, {wxTreeCtrl, itemHasChildren, 1}},
+ {2062, {wxTreeCtrl, isTreeItemIdOk, 1}},
+ {2063, {wxTreeCtrl, prependItem, 3}},
+ {2064, {wxTreeCtrl, scrollTo, 1}},
+ {2065, {wxTreeCtrl, selectItem_1, 1}},
+ {2066, {wxTreeCtrl, selectItem_2, 2}},
+ {2067, {wxTreeCtrl, setIndent, 1}},
+ {2068, {wxTreeCtrl, setImageList, 1}},
+ {2069, {wxTreeCtrl, setItemBackgroundColour, 2}},
+ {2070, {wxTreeCtrl, setItemBold, 2}},
+ {2071, {wxTreeCtrl, setItemData, 2}},
+ {2072, {wxTreeCtrl, setItemDropHighlight, 2}},
+ {2073, {wxTreeCtrl, setItemFont, 2}},
+ {2074, {wxTreeCtrl, setItemHasChildren, 2}},
+ {2075, {wxTreeCtrl, setItemImage_2, 2}},
+ {2076, {wxTreeCtrl, setItemImage_3, 3}},
+ {2077, {wxTreeCtrl, setItemText, 2}},
+ {2078, {wxTreeCtrl, setItemTextColour, 2}},
+ {2079, {wxTreeCtrl, setStateImageList, 1}},
+ {2080, {wxTreeCtrl, setWindowStyle, 1}},
+ {2081, {wxTreeCtrl, sortChildren, 1}},
+ {2082, {wxTreeCtrl, toggle, 1}},
+ {2083, {wxTreeCtrl, toggleItemSelection, 1}},
+ {2084, {wxTreeCtrl, unselect, 0}},
+ {2085, {wxTreeCtrl, unselectAll, 0}},
+ {2086, {wxTreeCtrl, unselectItem, 1}},
+ {2087, {wxScrollBar, new_0, 0}},
+ {2088, {wxScrollBar, new_3, 3}},
+ {2089, {wxScrollBar, destruct, 0}},
+ {2090, {wxScrollBar, create, 3}},
+ {2091, {wxScrollBar, getRange, 0}},
+ {2092, {wxScrollBar, getPageSize, 0}},
+ {2093, {wxScrollBar, getThumbPosition, 0}},
+ {2094, {wxScrollBar, getThumbSize, 0}},
+ {2095, {wxScrollBar, setThumbPosition, 1}},
+ {2096, {wxScrollBar, setScrollbar, 5}},
+ {2098, {wxSpinButton, new_2, 2}},
+ {2099, {wxSpinButton, new_0, 0}},
+ {2100, {wxSpinButton, create, 2}},
+ {2101, {wxSpinButton, getMax, 0}},
+ {2102, {wxSpinButton, getMin, 0}},
+ {2103, {wxSpinButton, getValue, 0}},
+ {2104, {wxSpinButton, setRange, 2}},
+ {2105, {wxSpinButton, setValue, 1}},
+ {2106, {wxSpinButton, 'Destroy', undefined}},
+ {2107, {wxSpinCtrl, new_0, 0}},
+ {2108, {wxSpinCtrl, new_2, 2}},
+ {2110, {wxSpinCtrl, create, 2}},
+ {2113, {wxSpinCtrl, setValue_1_1, 1}},
+ {2114, {wxSpinCtrl, setValue_1_0, 1}},
+ {2116, {wxSpinCtrl, getValue, 0}},
+ {2118, {wxSpinCtrl, setRange, 2}},
+ {2119, {wxSpinCtrl, setSelection, 2}},
+ {2121, {wxSpinCtrl, getMin, 0}},
+ {2123, {wxSpinCtrl, getMax, 0}},
+ {2124, {wxSpinCtrl, 'Destroy', undefined}},
+ {2125, {wxStaticText, new_0, 0}},
+ {2126, {wxStaticText, new_4, 4}},
+ {2127, {wxStaticText, create, 4}},
+ {2128, {wxStaticText, getLabel, 0}},
+ {2129, {wxStaticText, setLabel, 1}},
+ {2130, {wxStaticText, wrap, 1}},
+ {2131, {wxStaticText, 'Destroy', undefined}},
+ {2132, {wxStaticBitmap, new_0, 0}},
+ {2133, {wxStaticBitmap, new_4, 4}},
+ {2134, {wxStaticBitmap, create, 4}},
+ {2135, {wxStaticBitmap, getBitmap, 0}},
+ {2136, {wxStaticBitmap, setBitmap, 1}},
+ {2137, {wxStaticBitmap, 'Destroy', undefined}},
+ {2138, {wxRadioBox, new, 7}},
+ {2140, {wxRadioBox, destruct, 0}},
+ {2141, {wxRadioBox, create, 7}},
+ {2142, {wxRadioBox, enable_2, 2}},
+ {2143, {wxRadioBox, enable_1, 1}},
+ {2144, {wxRadioBox, getSelection, 0}},
+ {2145, {wxRadioBox, getString, 1}},
+ {2146, {wxRadioBox, setSelection, 1}},
+ {2147, {wxRadioBox, show_2, 2}},
+ {2148, {wxRadioBox, show_1, 1}},
+ {2149, {wxRadioBox, getColumnCount, 0}},
+ {2150, {wxRadioBox, getItemHelpText, 1}},
+ {2151, {wxRadioBox, getItemToolTip, 1}},
+ {2153, {wxRadioBox, getItemFromPoint, 1}},
+ {2154, {wxRadioBox, getRowCount, 0}},
+ {2155, {wxRadioBox, isItemEnabled, 1}},
+ {2156, {wxRadioBox, isItemShown, 1}},
+ {2157, {wxRadioBox, setItemHelpText, 2}},
+ {2158, {wxRadioBox, setItemToolTip, 2}},
+ {2159, {wxRadioButton, new_0, 0}},
+ {2160, {wxRadioButton, new_4, 4}},
+ {2161, {wxRadioButton, create, 4}},
+ {2162, {wxRadioButton, getValue, 0}},
+ {2163, {wxRadioButton, setValue, 1}},
+ {2164, {wxRadioButton, 'Destroy', undefined}},
+ {2166, {wxSlider, new_6, 6}},
+ {2167, {wxSlider, new_0, 0}},
+ {2168, {wxSlider, create, 6}},
+ {2169, {wxSlider, getLineSize, 0}},
+ {2170, {wxSlider, getMax, 0}},
+ {2171, {wxSlider, getMin, 0}},
+ {2172, {wxSlider, getPageSize, 0}},
+ {2173, {wxSlider, getThumbLength, 0}},
+ {2174, {wxSlider, getValue, 0}},
+ {2175, {wxSlider, setLineSize, 1}},
+ {2176, {wxSlider, setPageSize, 1}},
+ {2177, {wxSlider, setRange, 2}},
+ {2178, {wxSlider, setThumbLength, 1}},
+ {2179, {wxSlider, setValue, 1}},
+ {2180, {wxSlider, 'Destroy', undefined}},
+ {2182, {wxDialog, new_4, 4}},
+ {2183, {wxDialog, new_0, 0}},
+ {2185, {wxDialog, destruct, 0}},
+ {2186, {wxDialog, create, 4}},
+ {2187, {wxDialog, createButtonSizer, 1}},
+ {2188, {wxDialog, createStdDialogButtonSizer, 1}},
+ {2189, {wxDialog, endModal, 1}},
+ {2190, {wxDialog, getAffirmativeId, 0}},
+ {2191, {wxDialog, getReturnCode, 0}},
+ {2192, {wxDialog, isModal, 0}},
+ {2193, {wxDialog, setAffirmativeId, 1}},
+ {2194, {wxDialog, setReturnCode, 1}},
+ {2195, {wxDialog, show, 1}},
+ {2196, {wxDialog, showModal, 0}},
+ {2197, {wxColourDialog, new_0, 0}},
+ {2198, {wxColourDialog, new_2, 2}},
+ {2199, {wxColourDialog, destruct, 0}},
+ {2200, {wxColourDialog, create, 2}},
+ {2201, {wxColourDialog, getColourData, 0}},
+ {2202, {wxColourData, new_0, 0}},
+ {2203, {wxColourData, new_1, 1}},
+ {2204, {wxColourData, destruct, 0}},
+ {2205, {wxColourData, getChooseFull, 0}},
+ {2206, {wxColourData, getColour, 0}},
+ {2208, {wxColourData, getCustomColour, 1}},
+ {2209, {wxColourData, setChooseFull, 1}},
+ {2210, {wxColourData, setColour, 1}},
+ {2211, {wxColourData, setCustomColour, 2}},
+ {2212, {wxPalette, new_0, 0}},
+ {2213, {wxPalette, new_4, 4}},
+ {2215, {wxPalette, destruct, 0}},
+ {2216, {wxPalette, create, 4}},
+ {2217, {wxPalette, getColoursCount, 0}},
+ {2218, {wxPalette, getPixel, 3}},
+ {2219, {wxPalette, getRGB, 4}},
+ {2220, {wxPalette, isOk, 0}},
+ {2224, {wxDirDialog, new, 2}},
+ {2225, {wxDirDialog, destruct, 0}},
+ {2226, {wxDirDialog, getPath, 0}},
+ {2227, {wxDirDialog, getMessage, 0}},
+ {2228, {wxDirDialog, setMessage, 1}},
+ {2229, {wxDirDialog, setPath, 1}},
+ {2233, {wxFileDialog, new, 2}},
+ {2234, {wxFileDialog, destruct, 0}},
+ {2235, {wxFileDialog, getDirectory, 0}},
+ {2236, {wxFileDialog, getFilename, 0}},
+ {2237, {wxFileDialog, getFilenames, 1}},
+ {2238, {wxFileDialog, getFilterIndex, 0}},
+ {2239, {wxFileDialog, getMessage, 0}},
+ {2240, {wxFileDialog, getPath, 0}},
+ {2241, {wxFileDialog, getPaths, 1}},
+ {2242, {wxFileDialog, getWildcard, 0}},
+ {2243, {wxFileDialog, setDirectory, 1}},
+ {2244, {wxFileDialog, setFilename, 1}},
+ {2245, {wxFileDialog, setFilterIndex, 1}},
+ {2246, {wxFileDialog, setMessage, 1}},
+ {2247, {wxFileDialog, setPath, 1}},
+ {2248, {wxFileDialog, setWildcard, 1}},
+ {2249, {wxPickerBase, setInternalMargin, 1}},
+ {2250, {wxPickerBase, getInternalMargin, 0}},
+ {2251, {wxPickerBase, setTextCtrlProportion, 1}},
+ {2252, {wxPickerBase, setPickerCtrlProportion, 1}},
+ {2253, {wxPickerBase, getTextCtrlProportion, 0}},
+ {2254, {wxPickerBase, getPickerCtrlProportion, 0}},
+ {2255, {wxPickerBase, hasTextCtrl, 0}},
+ {2256, {wxPickerBase, getTextCtrl, 0}},
+ {2257, {wxPickerBase, isTextCtrlGrowable, 0}},
+ {2258, {wxPickerBase, setPickerCtrlGrowable, 1}},
+ {2259, {wxPickerBase, setTextCtrlGrowable, 1}},
+ {2260, {wxPickerBase, isPickerCtrlGrowable, 0}},
+ {2261, {wxFilePickerCtrl, new_0, 0}},
+ {2262, {wxFilePickerCtrl, new_3, 3}},
+ {2263, {wxFilePickerCtrl, create, 3}},
+ {2264, {wxFilePickerCtrl, getPath, 0}},
+ {2265, {wxFilePickerCtrl, setPath, 1}},
+ {2266, {wxFilePickerCtrl, 'Destroy', undefined}},
+ {2267, {wxDirPickerCtrl, new_0, 0}},
+ {2268, {wxDirPickerCtrl, new_3, 3}},
+ {2269, {wxDirPickerCtrl, create, 3}},
+ {2270, {wxDirPickerCtrl, getPath, 0}},
+ {2271, {wxDirPickerCtrl, setPath, 1}},
+ {2272, {wxDirPickerCtrl, 'Destroy', undefined}},
+ {2273, {wxColourPickerCtrl, new_0, 0}},
+ {2274, {wxColourPickerCtrl, new_3, 3}},
+ {2275, {wxColourPickerCtrl, create, 3}},
+ {2276, {wxColourPickerCtrl, getColour, 0}},
+ {2277, {wxColourPickerCtrl, setColour_1_1, 1}},
+ {2278, {wxColourPickerCtrl, setColour_1_0, 1}},
+ {2279, {wxColourPickerCtrl, 'Destroy', undefined}},
+ {2280, {wxDatePickerCtrl, new_0, 0}},
+ {2281, {wxDatePickerCtrl, new_3, 3}},
+ {2282, {wxDatePickerCtrl, getRange, 2}},
+ {2283, {wxDatePickerCtrl, getValue, 0}},
+ {2284, {wxDatePickerCtrl, setRange, 2}},
+ {2285, {wxDatePickerCtrl, setValue, 1}},
+ {2286, {wxDatePickerCtrl, 'Destroy', undefined}},
+ {2287, {wxFontPickerCtrl, new_0, 0}},
+ {2288, {wxFontPickerCtrl, new_3, 3}},
+ {2289, {wxFontPickerCtrl, create, 3}},
+ {2290, {wxFontPickerCtrl, getSelectedFont, 0}},
+ {2291, {wxFontPickerCtrl, setSelectedFont, 1}},
+ {2292, {wxFontPickerCtrl, getMaxPointSize, 0}},
+ {2293, {wxFontPickerCtrl, setMaxPointSize, 1}},
+ {2294, {wxFontPickerCtrl, 'Destroy', undefined}},
+ {2297, {wxFindReplaceDialog, new_0, 0}},
+ {2298, {wxFindReplaceDialog, new_4, 4}},
+ {2299, {wxFindReplaceDialog, destruct, 0}},
+ {2300, {wxFindReplaceDialog, create, 4}},
+ {2301, {wxFindReplaceDialog, getData, 0}},
+ {2302, {wxFindReplaceData, new_0, 0}},
+ {2303, {wxFindReplaceData, new_1, 1}},
+ {2304, {wxFindReplaceData, getFindString, 0}},
+ {2305, {wxFindReplaceData, getReplaceString, 0}},
+ {2306, {wxFindReplaceData, getFlags, 0}},
+ {2307, {wxFindReplaceData, setFlags, 1}},
+ {2308, {wxFindReplaceData, setFindString, 1}},
+ {2309, {wxFindReplaceData, setReplaceString, 1}},
+ {2310, {wxFindReplaceData, 'Destroy', undefined}},
+ {2311, {wxMultiChoiceDialog, new_0, 0}},
+ {2313, {wxMultiChoiceDialog, new_5, 5}},
+ {2314, {wxMultiChoiceDialog, getSelections, 0}},
+ {2315, {wxMultiChoiceDialog, setSelections, 1}},
+ {2316, {wxMultiChoiceDialog, 'Destroy', undefined}},
+ {2317, {wxSingleChoiceDialog, new_0, 0}},
+ {2319, {wxSingleChoiceDialog, new_5, 5}},
+ {2320, {wxSingleChoiceDialog, getSelection, 0}},
+ {2321, {wxSingleChoiceDialog, getStringSelection, 0}},
+ {2322, {wxSingleChoiceDialog, setSelection, 1}},
+ {2323, {wxSingleChoiceDialog, 'Destroy', undefined}},
+ {2324, {wxTextEntryDialog, new, 3}},
+ {2325, {wxTextEntryDialog, getValue, 0}},
+ {2326, {wxTextEntryDialog, setValue, 1}},
+ {2327, {wxTextEntryDialog, 'Destroy', undefined}},
+ {2328, {wxPasswordEntryDialog, new, 3}},
+ {2329, {wxPasswordEntryDialog, 'Destroy', undefined}},
+ {2330, {wxFontData, new_0, 0}},
+ {2331, {wxFontData, new_1, 1}},
+ {2332, {wxFontData, destruct, 0}},
+ {2333, {wxFontData, enableEffects, 1}},
+ {2334, {wxFontData, getAllowSymbols, 0}},
+ {2335, {wxFontData, getColour, 0}},
+ {2336, {wxFontData, getChosenFont, 0}},
+ {2337, {wxFontData, getEnableEffects, 0}},
+ {2338, {wxFontData, getInitialFont, 0}},
+ {2339, {wxFontData, getShowHelp, 0}},
+ {2340, {wxFontData, setAllowSymbols, 1}},
+ {2341, {wxFontData, setChosenFont, 1}},
+ {2342, {wxFontData, setColour, 1}},
+ {2343, {wxFontData, setInitialFont, 1}},
+ {2344, {wxFontData, setRange, 2}},
+ {2345, {wxFontData, setShowHelp, 1}},
+ {2349, {wxFontDialog, new_0, 0}},
+ {2351, {wxFontDialog, new_2, 2}},
+ {2353, {wxFontDialog, create, 2}},
+ {2354, {wxFontDialog, getFontData, 0}},
+ {2356, {wxFontDialog, 'Destroy', undefined}},
+ {2357, {wxProgressDialog, new, 3}},
+ {2358, {wxProgressDialog, destruct, 0}},
+ {2359, {wxProgressDialog, resume, 0}},
+ {2360, {wxProgressDialog, update_2, 2}},
+ {2361, {wxProgressDialog, update_0, 0}},
+ {2362, {wxMessageDialog, new, 3}},
+ {2363, {wxMessageDialog, destruct, 0}},
+ {2364, {wxPageSetupDialog, new, 2}},
+ {2365, {wxPageSetupDialog, destruct, 0}},
+ {2366, {wxPageSetupDialog, getPageSetupData, 0}},
+ {2367, {wxPageSetupDialog, showModal, 0}},
+ {2368, {wxPageSetupDialogData, new_0, 0}},
+ {2369, {wxPageSetupDialogData, new_1_0, 1}},
+ {2370, {wxPageSetupDialogData, new_1_1, 1}},
+ {2371, {wxPageSetupDialogData, destruct, 0}},
+ {2372, {wxPageSetupDialogData, enableHelp, 1}},
+ {2373, {wxPageSetupDialogData, enableMargins, 1}},
+ {2374, {wxPageSetupDialogData, enableOrientation, 1}},
+ {2375, {wxPageSetupDialogData, enablePaper, 1}},
+ {2376, {wxPageSetupDialogData, enablePrinter, 1}},
+ {2377, {wxPageSetupDialogData, getDefaultMinMargins, 0}},
+ {2378, {wxPageSetupDialogData, getEnableMargins, 0}},
+ {2379, {wxPageSetupDialogData, getEnableOrientation, 0}},
+ {2380, {wxPageSetupDialogData, getEnablePaper, 0}},
+ {2381, {wxPageSetupDialogData, getEnablePrinter, 0}},
+ {2382, {wxPageSetupDialogData, getEnableHelp, 0}},
+ {2383, {wxPageSetupDialogData, getDefaultInfo, 0}},
+ {2384, {wxPageSetupDialogData, getMarginTopLeft, 0}},
+ {2385, {wxPageSetupDialogData, getMarginBottomRight, 0}},
+ {2386, {wxPageSetupDialogData, getMinMarginTopLeft, 0}},
+ {2387, {wxPageSetupDialogData, getMinMarginBottomRight, 0}},
+ {2388, {wxPageSetupDialogData, getPaperId, 0}},
+ {2389, {wxPageSetupDialogData, getPaperSize, 0}},
+ {2391, {wxPageSetupDialogData, getPrintData, 0}},
+ {2392, {wxPageSetupDialogData, isOk, 0}},
+ {2393, {wxPageSetupDialogData, setDefaultInfo, 1}},
+ {2394, {wxPageSetupDialogData, setDefaultMinMargins, 1}},
+ {2395, {wxPageSetupDialogData, setMarginTopLeft, 1}},
+ {2396, {wxPageSetupDialogData, setMarginBottomRight, 1}},
+ {2397, {wxPageSetupDialogData, setMinMarginTopLeft, 1}},
+ {2398, {wxPageSetupDialogData, setMinMarginBottomRight, 1}},
+ {2399, {wxPageSetupDialogData, setPaperId, 1}},
+ {2400, {wxPageSetupDialogData, setPaperSize_1_1, 1}},
+ {2401, {wxPageSetupDialogData, setPaperSize_1_0, 1}},
+ {2402, {wxPageSetupDialogData, setPrintData, 1}},
+ {2403, {wxPrintDialog, new_2_0, 2}},
+ {2404, {wxPrintDialog, new_2_1, 2}},
+ {2405, {wxPrintDialog, destruct, 0}},
+ {2406, {wxPrintDialog, getPrintDialogData, 0}},
+ {2407, {wxPrintDialog, getPrintDC, 0}},
+ {2408, {wxPrintDialogData, new_0, 0}},
+ {2409, {wxPrintDialogData, new_1_1, 1}},
+ {2410, {wxPrintDialogData, new_1_0, 1}},
+ {2411, {wxPrintDialogData, destruct, 0}},
+ {2412, {wxPrintDialogData, enableHelp, 1}},
+ {2413, {wxPrintDialogData, enablePageNumbers, 1}},
+ {2414, {wxPrintDialogData, enablePrintToFile, 1}},
+ {2415, {wxPrintDialogData, enableSelection, 1}},
+ {2416, {wxPrintDialogData, getAllPages, 0}},
+ {2417, {wxPrintDialogData, getCollate, 0}},
+ {2418, {wxPrintDialogData, getFromPage, 0}},
+ {2419, {wxPrintDialogData, getMaxPage, 0}},
+ {2420, {wxPrintDialogData, getMinPage, 0}},
+ {2421, {wxPrintDialogData, getNoCopies, 0}},
+ {2422, {wxPrintDialogData, getPrintData, 0}},
+ {2423, {wxPrintDialogData, getPrintToFile, 0}},
+ {2424, {wxPrintDialogData, getSelection, 0}},
+ {2425, {wxPrintDialogData, getToPage, 0}},
+ {2426, {wxPrintDialogData, isOk, 0}},
+ {2427, {wxPrintDialogData, setCollate, 1}},
+ {2428, {wxPrintDialogData, setFromPage, 1}},
+ {2429, {wxPrintDialogData, setMaxPage, 1}},
+ {2430, {wxPrintDialogData, setMinPage, 1}},
+ {2431, {wxPrintDialogData, setNoCopies, 1}},
+ {2432, {wxPrintDialogData, setPrintData, 1}},
+ {2433, {wxPrintDialogData, setPrintToFile, 1}},
+ {2434, {wxPrintDialogData, setSelection, 1}},
+ {2435, {wxPrintDialogData, setToPage, 1}},
+ {2436, {wxPrintData, new_0, 0}},
+ {2437, {wxPrintData, new_1, 1}},
+ {2438, {wxPrintData, destruct, 0}},
+ {2439, {wxPrintData, getCollate, 0}},
+ {2440, {wxPrintData, getBin, 0}},
+ {2441, {wxPrintData, getColour, 0}},
+ {2442, {wxPrintData, getDuplex, 0}},
+ {2443, {wxPrintData, getNoCopies, 0}},
+ {2444, {wxPrintData, getOrientation, 0}},
+ {2445, {wxPrintData, getPaperId, 0}},
+ {2446, {wxPrintData, getPrinterName, 0}},
+ {2447, {wxPrintData, getQuality, 0}},
+ {2448, {wxPrintData, isOk, 0}},
+ {2449, {wxPrintData, setBin, 1}},
+ {2450, {wxPrintData, setCollate, 1}},
+ {2451, {wxPrintData, setColour, 1}},
+ {2452, {wxPrintData, setDuplex, 1}},
+ {2453, {wxPrintData, setNoCopies, 1}},
+ {2454, {wxPrintData, setOrientation, 1}},
+ {2455, {wxPrintData, setPaperId, 1}},
+ {2456, {wxPrintData, setPrinterName, 1}},
+ {2457, {wxPrintData, setQuality, 1}},
+ {2460, {wxPrintPreview, new_2, 2}},
+ {2461, {wxPrintPreview, new_3, 3}},
+ {2463, {wxPrintPreview, destruct, 0}},
+ {2464, {wxPrintPreview, getCanvas, 0}},
+ {2465, {wxPrintPreview, getCurrentPage, 0}},
+ {2466, {wxPrintPreview, getFrame, 0}},
+ {2467, {wxPrintPreview, getMaxPage, 0}},
+ {2468, {wxPrintPreview, getMinPage, 0}},
+ {2469, {wxPrintPreview, getPrintout, 0}},
+ {2470, {wxPrintPreview, getPrintoutForPrinting, 0}},
+ {2471, {wxPrintPreview, isOk, 0}},
+ {2472, {wxPrintPreview, paintPage, 2}},
+ {2473, {wxPrintPreview, print, 1}},
+ {2474, {wxPrintPreview, renderPage, 1}},
+ {2475, {wxPrintPreview, setCanvas, 1}},
+ {2476, {wxPrintPreview, setCurrentPage, 1}},
+ {2477, {wxPrintPreview, setFrame, 1}},
+ {2478, {wxPrintPreview, setPrintout, 1}},
+ {2479, {wxPrintPreview, setZoom, 1}},
+ {2480, {wxPreviewFrame, new, 3}},
+ {2481, {wxPreviewFrame, destruct, 0}},
+ {2482, {wxPreviewFrame, createControlBar, 0}},
+ {2483, {wxPreviewFrame, createCanvas, 0}},
+ {2484, {wxPreviewFrame, initialize, 0}},
+ {2485, {wxPreviewFrame, onCloseWindow, 1}},
+ {2486, {wxPreviewControlBar, new, 4}},
+ {2487, {wxPreviewControlBar, destruct, 0}},
+ {2488, {wxPreviewControlBar, createButtons, 0}},
+ {2489, {wxPreviewControlBar, getPrintPreview, 0}},
+ {2490, {wxPreviewControlBar, getZoomControl, 0}},
+ {2491, {wxPreviewControlBar, setZoomControl, 1}},
+ {2493, {wxPrinter, new, 1}},
+ {2494, {wxPrinter, createAbortWindow, 2}},
+ {2495, {wxPrinter, getAbort, 0}},
+ {2496, {wxPrinter, getLastError, 0}},
+ {2497, {wxPrinter, getPrintDialogData, 0}},
+ {2498, {wxPrinter, print, 3}},
+ {2499, {wxPrinter, printDialog, 1}},
+ {2500, {wxPrinter, reportError, 3}},
+ {2501, {wxPrinter, setup, 1}},
+ {2502, {wxPrinter, 'Destroy', undefined}},
+ {2503, {wxXmlResource, new_1, 1}},
+ {2504, {wxXmlResource, new_2, 2}},
+ {2505, {wxXmlResource, destruct, 0}},
+ {2506, {wxXmlResource, attachUnknownControl, 3}},
+ {2507, {wxXmlResource, clearHandlers, 0}},
+ {2508, {wxXmlResource, compareVersion, 4}},
+ {2509, {wxXmlResource, get, 0}},
+ {2510, {wxXmlResource, getFlags, 0}},
+ {2511, {wxXmlResource, getVersion, 0}},
+ {2512, {wxXmlResource, getXRCID, 2}},
+ {2513, {wxXmlResource, initAllHandlers, 0}},
+ {2514, {wxXmlResource, load, 1}},
+ {2515, {wxXmlResource, loadBitmap, 1}},
+ {2516, {wxXmlResource, loadDialog_2, 2}},
+ {2517, {wxXmlResource, loadDialog_3, 3}},
+ {2518, {wxXmlResource, loadFrame_2, 2}},
+ {2519, {wxXmlResource, loadFrame_3, 3}},
+ {2520, {wxXmlResource, loadIcon, 1}},
+ {2521, {wxXmlResource, loadMenu, 1}},
+ {2522, {wxXmlResource, loadMenuBar_2, 2}},
+ {2523, {wxXmlResource, loadMenuBar_1, 1}},
+ {2524, {wxXmlResource, loadPanel_2, 2}},
+ {2525, {wxXmlResource, loadPanel_3, 3}},
+ {2526, {wxXmlResource, loadToolBar, 2}},
+ {2527, {wxXmlResource, set, 1}},
+ {2528, {wxXmlResource, setFlags, 1}},
+ {2529, {wxXmlResource, unload, 1}},
+ {2530, {wxXmlResource, xrcctrl, 3}},
+ {2531, {wxHtmlEasyPrinting, new, 1}},
+ {2532, {wxHtmlEasyPrinting, destruct, 0}},
+ {2533, {wxHtmlEasyPrinting, getPrintData, 0}},
+ {2534, {wxHtmlEasyPrinting, getPageSetupData, 0}},
+ {2535, {wxHtmlEasyPrinting, previewFile, 1}},
+ {2536, {wxHtmlEasyPrinting, previewText, 2}},
+ {2537, {wxHtmlEasyPrinting, printFile, 1}},
+ {2538, {wxHtmlEasyPrinting, printText, 2}},
+ {2539, {wxHtmlEasyPrinting, pageSetup, 0}},
+ {2540, {wxHtmlEasyPrinting, setFonts, 3}},
+ {2541, {wxHtmlEasyPrinting, setHeader, 2}},
+ {2542, {wxHtmlEasyPrinting, setFooter, 2}},
+ {2544, {wxGLCanvas, new_2, 2}},
+ {2545, {wxGLCanvas, new_3_1, 3}},
+ {2546, {wxGLCanvas, new_3_0, 3}},
+ {2547, {wxGLCanvas, getContext, 0}},
+ {2549, {wxGLCanvas, setCurrent, 0}},
+ {2550, {wxGLCanvas, swapBuffers, 0}},
+ {2551, {wxGLCanvas, 'Destroy', undefined}},
+ {2552, {wxAuiManager, new, 1}},
+ {2553, {wxAuiManager, destruct, 0}},
+ {2554, {wxAuiManager, addPane_2_1, 2}},
+ {2555, {wxAuiManager, addPane_3, 3}},
+ {2556, {wxAuiManager, addPane_2_0, 2}},
+ {2557, {wxAuiManager, detachPane, 1}},
+ {2558, {wxAuiManager, getAllPanes, 0}},
+ {2559, {wxAuiManager, getArtProvider, 0}},
+ {2560, {wxAuiManager, getDockSizeConstraint, 2}},
+ {2561, {wxAuiManager, getFlags, 0}},
+ {2562, {wxAuiManager, getManagedWindow, 0}},
+ {2563, {wxAuiManager, getManager, 1}},
+ {2564, {wxAuiManager, getPane_1_1, 1}},
+ {2565, {wxAuiManager, getPane_1_0, 1}},
+ {2566, {wxAuiManager, hideHint, 0}},
+ {2567, {wxAuiManager, insertPane, 3}},
+ {2568, {wxAuiManager, loadPaneInfo, 2}},
+ {2569, {wxAuiManager, loadPerspective, 2}},
+ {2570, {wxAuiManager, savePaneInfo, 1}},
+ {2571, {wxAuiManager, savePerspective, 0}},
+ {2572, {wxAuiManager, setArtProvider, 1}},
+ {2573, {wxAuiManager, setDockSizeConstraint, 2}},
+ {2574, {wxAuiManager, setFlags, 1}},
+ {2575, {wxAuiManager, setManagedWindow, 1}},
+ {2576, {wxAuiManager, showHint, 1}},
+ {2577, {wxAuiManager, unInit, 0}},
+ {2578, {wxAuiManager, update, 0}},
+ {2579, {wxAuiPaneInfo, new_0, 0}},
+ {2580, {wxAuiPaneInfo, new_1, 1}},
+ {2581, {wxAuiPaneInfo, destruct, 0}},
+ {2582, {wxAuiPaneInfo, bestSize_1, 1}},
+ {2583, {wxAuiPaneInfo, bestSize_2, 2}},
+ {2584, {wxAuiPaneInfo, bottom, 0}},
+ {2585, {wxAuiPaneInfo, bottomDockable, 1}},
+ {2586, {wxAuiPaneInfo, caption, 1}},
+ {2587, {wxAuiPaneInfo, captionVisible, 1}},
+ {2588, {wxAuiPaneInfo, centre, 0}},
+ {2589, {wxAuiPaneInfo, centrePane, 0}},
+ {2590, {wxAuiPaneInfo, closeButton, 1}},
+ {2591, {wxAuiPaneInfo, defaultPane, 0}},
+ {2592, {wxAuiPaneInfo, destroyOnClose, 1}},
+ {2593, {wxAuiPaneInfo, direction, 1}},
+ {2594, {wxAuiPaneInfo, dock, 0}},
+ {2595, {wxAuiPaneInfo, dockable, 1}},
+ {2596, {wxAuiPaneInfo, fixed, 0}},
+ {2597, {wxAuiPaneInfo, float, 0}},
+ {2598, {wxAuiPaneInfo, floatable, 1}},
+ {2599, {wxAuiPaneInfo, floatingPosition_1, 1}},
+ {2600, {wxAuiPaneInfo, floatingPosition_2, 2}},
+ {2601, {wxAuiPaneInfo, floatingSize_1, 1}},
+ {2602, {wxAuiPaneInfo, floatingSize_2, 2}},
+ {2603, {wxAuiPaneInfo, gripper, 1}},
+ {2604, {wxAuiPaneInfo, gripperTop, 1}},
+ {2605, {wxAuiPaneInfo, hasBorder, 0}},
+ {2606, {wxAuiPaneInfo, hasCaption, 0}},
+ {2607, {wxAuiPaneInfo, hasCloseButton, 0}},
+ {2608, {wxAuiPaneInfo, hasFlag, 1}},
+ {2609, {wxAuiPaneInfo, hasGripper, 0}},
+ {2610, {wxAuiPaneInfo, hasGripperTop, 0}},
+ {2611, {wxAuiPaneInfo, hasMaximizeButton, 0}},
+ {2612, {wxAuiPaneInfo, hasMinimizeButton, 0}},
+ {2613, {wxAuiPaneInfo, hasPinButton, 0}},
+ {2614, {wxAuiPaneInfo, hide, 0}},
+ {2615, {wxAuiPaneInfo, isBottomDockable, 0}},
+ {2616, {wxAuiPaneInfo, isDocked, 0}},
+ {2617, {wxAuiPaneInfo, isFixed, 0}},
+ {2618, {wxAuiPaneInfo, isFloatable, 0}},
+ {2619, {wxAuiPaneInfo, isFloating, 0}},
+ {2620, {wxAuiPaneInfo, isLeftDockable, 0}},
+ {2621, {wxAuiPaneInfo, isMovable, 0}},
+ {2622, {wxAuiPaneInfo, isOk, 0}},
+ {2623, {wxAuiPaneInfo, isResizable, 0}},
+ {2624, {wxAuiPaneInfo, isRightDockable, 0}},
+ {2625, {wxAuiPaneInfo, isShown, 0}},
+ {2626, {wxAuiPaneInfo, isToolbar, 0}},
+ {2627, {wxAuiPaneInfo, isTopDockable, 0}},
+ {2628, {wxAuiPaneInfo, layer, 1}},
+ {2629, {wxAuiPaneInfo, left, 0}},
+ {2630, {wxAuiPaneInfo, leftDockable, 1}},
+ {2631, {wxAuiPaneInfo, maxSize_1, 1}},
+ {2632, {wxAuiPaneInfo, maxSize_2, 2}},
+ {2633, {wxAuiPaneInfo, maximizeButton, 1}},
+ {2634, {wxAuiPaneInfo, minSize_1, 1}},
+ {2635, {wxAuiPaneInfo, minSize_2, 2}},
+ {2636, {wxAuiPaneInfo, minimizeButton, 1}},
+ {2637, {wxAuiPaneInfo, movable, 1}},
+ {2638, {wxAuiPaneInfo, name, 1}},
+ {2639, {wxAuiPaneInfo, paneBorder, 1}},
+ {2640, {wxAuiPaneInfo, pinButton, 1}},
+ {2641, {wxAuiPaneInfo, position, 1}},
+ {2642, {wxAuiPaneInfo, resizable, 1}},
+ {2643, {wxAuiPaneInfo, right, 0}},
+ {2644, {wxAuiPaneInfo, rightDockable, 1}},
+ {2645, {wxAuiPaneInfo, row, 1}},
+ {2646, {wxAuiPaneInfo, safeSet, 1}},
+ {2647, {wxAuiPaneInfo, setFlag, 2}},
+ {2648, {wxAuiPaneInfo, show, 1}},
+ {2649, {wxAuiPaneInfo, toolbarPane, 0}},
+ {2650, {wxAuiPaneInfo, top, 0}},
+ {2651, {wxAuiPaneInfo, topDockable, 1}},
+ {2652, {wxAuiPaneInfo, window, 1}},
+ {2653, {wxAuiNotebook, new_0, 0}},
+ {2654, {wxAuiNotebook, new_2, 2}},
+ {2655, {wxAuiNotebook, addPage, 3}},
+ {2656, {wxAuiNotebook, create, 2}},
+ {2657, {wxAuiNotebook, deletePage, 1}},
+ {2658, {wxAuiNotebook, getArtProvider, 0}},
+ {2659, {wxAuiNotebook, getPage, 1}},
+ {2660, {wxAuiNotebook, getPageBitmap, 1}},
+ {2661, {wxAuiNotebook, getPageCount, 0}},
+ {2662, {wxAuiNotebook, getPageIndex, 1}},
+ {2663, {wxAuiNotebook, getPageText, 1}},
+ {2664, {wxAuiNotebook, getSelection, 0}},
+ {2665, {wxAuiNotebook, insertPage, 4}},
+ {2666, {wxAuiNotebook, removePage, 1}},
+ {2667, {wxAuiNotebook, setArtProvider, 1}},
+ {2668, {wxAuiNotebook, setFont, 1}},
+ {2669, {wxAuiNotebook, setPageBitmap, 2}},
+ {2670, {wxAuiNotebook, setPageText, 2}},
+ {2671, {wxAuiNotebook, setSelection, 1}},
+ {2672, {wxAuiNotebook, setTabCtrlHeight, 1}},
+ {2673, {wxAuiNotebook, setUniformBitmapSize, 1}},
+ {2674, {wxAuiNotebook, 'Destroy', undefined}},
+ {2675, {wxMDIParentFrame, new_0, 0}},
+ {2676, {wxMDIParentFrame, new_4, 4}},
+ {2677, {wxMDIParentFrame, destruct, 0}},
+ {2678, {wxMDIParentFrame, activateNext, 0}},
+ {2679, {wxMDIParentFrame, activatePrevious, 0}},
+ {2680, {wxMDIParentFrame, arrangeIcons, 0}},
+ {2681, {wxMDIParentFrame, cascade, 0}},
+ {2682, {wxMDIParentFrame, create, 4}},
+ {2683, {wxMDIParentFrame, getActiveChild, 0}},
+ {2684, {wxMDIParentFrame, getClientWindow, 0}},
+ {2685, {wxMDIParentFrame, tile, 1}},
+ {2686, {wxMDIChildFrame, new_0, 0}},
+ {2687, {wxMDIChildFrame, new_4, 4}},
+ {2688, {wxMDIChildFrame, destruct, 0}},
+ {2689, {wxMDIChildFrame, activate, 0}},
+ {2690, {wxMDIChildFrame, create, 4}},
+ {2691, {wxMDIChildFrame, maximize, 1}},
+ {2692, {wxMDIChildFrame, restore, 0}},
+ {2693, {wxMDIClientWindow, new_0, 0}},
+ {2694, {wxMDIClientWindow, new_2, 2}},
+ {2695, {wxMDIClientWindow, destruct, 0}},
+ {2696, {wxMDIClientWindow, createClient, 2}},
+ {2697, {wxLayoutAlgorithm, new, 0}},
+ {2698, {wxLayoutAlgorithm, layoutFrame, 2}},
+ {2699, {wxLayoutAlgorithm, layoutMDIFrame, 2}},
+ {2700, {wxLayoutAlgorithm, layoutWindow, 2}},
+ {2701, {wxLayoutAlgorithm, 'Destroy', undefined}},
+ {2702, {wxEvent, getId, 0}},
+ {2703, {wxEvent, getSkipped, 0}},
+ {2704, {wxEvent, getTimestamp, 0}},
+ {2705, {wxEvent, isCommandEvent, 0}},
+ {2706, {wxEvent, resumePropagation, 1}},
+ {2707, {wxEvent, shouldPropagate, 0}},
+ {2708, {wxEvent, skip, 1}},
+ {2709, {wxEvent, stopPropagation, 0}},
+ {2710, {wxCommandEvent, getClientData, 0}},
+ {2711, {wxCommandEvent, getExtraLong, 0}},
+ {2712, {wxCommandEvent, getInt, 0}},
+ {2713, {wxCommandEvent, getSelection, 0}},
+ {2714, {wxCommandEvent, getString, 0}},
+ {2715, {wxCommandEvent, isChecked, 0}},
+ {2716, {wxCommandEvent, isSelection, 0}},
+ {2717, {wxCommandEvent, setInt, 1}},
+ {2718, {wxCommandEvent, setString, 1}},
+ {2719, {wxScrollEvent, getOrientation, 0}},
+ {2720, {wxScrollEvent, getPosition, 0}},
+ {2721, {wxScrollWinEvent, getOrientation, 0}},
+ {2722, {wxScrollWinEvent, getPosition, 0}},
+ {2723, {wxMouseEvent, altDown, 0}},
+ {2724, {wxMouseEvent, button, 1}},
+ {2725, {wxMouseEvent, buttonDClick, 1}},
+ {2726, {wxMouseEvent, buttonDown, 1}},
+ {2727, {wxMouseEvent, buttonUp, 1}},
+ {2728, {wxMouseEvent, cmdDown, 0}},
+ {2729, {wxMouseEvent, controlDown, 0}},
+ {2730, {wxMouseEvent, dragging, 0}},
+ {2731, {wxMouseEvent, entering, 0}},
+ {2732, {wxMouseEvent, getButton, 0}},
+ {2735, {wxMouseEvent, getPosition, 0}},
+ {2736, {wxMouseEvent, getLogicalPosition, 1}},
+ {2737, {wxMouseEvent, getLinesPerAction, 0}},
+ {2738, {wxMouseEvent, getWheelRotation, 0}},
+ {2739, {wxMouseEvent, getWheelDelta, 0}},
+ {2740, {wxMouseEvent, getX, 0}},
+ {2741, {wxMouseEvent, getY, 0}},
+ {2742, {wxMouseEvent, isButton, 0}},
+ {2743, {wxMouseEvent, isPageScroll, 0}},
+ {2744, {wxMouseEvent, leaving, 0}},
+ {2745, {wxMouseEvent, leftDClick, 0}},
+ {2746, {wxMouseEvent, leftDown, 0}},
+ {2747, {wxMouseEvent, leftIsDown, 0}},
+ {2748, {wxMouseEvent, leftUp, 0}},
+ {2749, {wxMouseEvent, metaDown, 0}},
+ {2750, {wxMouseEvent, middleDClick, 0}},
+ {2751, {wxMouseEvent, middleDown, 0}},
+ {2752, {wxMouseEvent, middleIsDown, 0}},
+ {2753, {wxMouseEvent, middleUp, 0}},
+ {2754, {wxMouseEvent, moving, 0}},
+ {2755, {wxMouseEvent, rightDClick, 0}},
+ {2756, {wxMouseEvent, rightDown, 0}},
+ {2757, {wxMouseEvent, rightIsDown, 0}},
+ {2758, {wxMouseEvent, rightUp, 0}},
+ {2759, {wxMouseEvent, shiftDown, 0}},
+ {2760, {wxSetCursorEvent, getCursor, 0}},
+ {2761, {wxSetCursorEvent, getX, 0}},
+ {2762, {wxSetCursorEvent, getY, 0}},
+ {2763, {wxSetCursorEvent, hasCursor, 0}},
+ {2764, {wxSetCursorEvent, setCursor, 1}},
+ {2765, {wxKeyEvent, altDown, 0}},
+ {2766, {wxKeyEvent, cmdDown, 0}},
+ {2767, {wxKeyEvent, controlDown, 0}},
+ {2768, {wxKeyEvent, getKeyCode, 0}},
+ {2769, {wxKeyEvent, getModifiers, 0}},
+ {2772, {wxKeyEvent, getPosition, 0}},
+ {2773, {wxKeyEvent, getRawKeyCode, 0}},
+ {2774, {wxKeyEvent, getRawKeyFlags, 0}},
+ {2775, {wxKeyEvent, getUnicodeKey, 0}},
+ {2776, {wxKeyEvent, getX, 0}},
+ {2777, {wxKeyEvent, getY, 0}},
+ {2778, {wxKeyEvent, hasModifiers, 0}},
+ {2779, {wxKeyEvent, metaDown, 0}},
+ {2780, {wxKeyEvent, shiftDown, 0}},
+ {2781, {wxSizeEvent, getSize, 0}},
+ {2782, {wxMoveEvent, getPosition, 0}},
+ {2783, {wxEraseEvent, getDC, 0}},
+ {2784, {wxFocusEvent, getWindow, 0}},
+ {2785, {wxChildFocusEvent, getWindow, 0}},
+ {2786, {wxMenuEvent, getMenu, 0}},
+ {2787, {wxMenuEvent, getMenuId, 0}},
+ {2788, {wxMenuEvent, isPopup, 0}},
+ {2789, {wxCloseEvent, canVeto, 0}},
+ {2790, {wxCloseEvent, getLoggingOff, 0}},
+ {2791, {wxCloseEvent, setCanVeto, 1}},
+ {2792, {wxCloseEvent, setLoggingOff, 1}},
+ {2793, {wxCloseEvent, veto, 1}},
+ {2794, {wxShowEvent, setShow, 1}},
+ {2795, {wxShowEvent, getShow, 0}},
+ {2796, {wxIconizeEvent, iconized, 0}},
+ {2797, {wxJoystickEvent, buttonDown, 1}},
+ {2798, {wxJoystickEvent, buttonIsDown, 1}},
+ {2799, {wxJoystickEvent, buttonUp, 1}},
+ {2800, {wxJoystickEvent, getButtonChange, 0}},
+ {2801, {wxJoystickEvent, getButtonState, 0}},
+ {2802, {wxJoystickEvent, getJoystick, 0}},
+ {2803, {wxJoystickEvent, getPosition, 0}},
+ {2804, {wxJoystickEvent, getZPosition, 0}},
+ {2805, {wxJoystickEvent, isButton, 0}},
+ {2806, {wxJoystickEvent, isMove, 0}},
+ {2807, {wxJoystickEvent, isZMove, 0}},
+ {2808, {wxUpdateUIEvent, canUpdate, 1}},
+ {2809, {wxUpdateUIEvent, check, 1}},
+ {2810, {wxUpdateUIEvent, enable, 1}},
+ {2811, {wxUpdateUIEvent, show, 1}},
+ {2812, {wxUpdateUIEvent, getChecked, 0}},
+ {2813, {wxUpdateUIEvent, getEnabled, 0}},
+ {2814, {wxUpdateUIEvent, getShown, 0}},
+ {2815, {wxUpdateUIEvent, getSetChecked, 0}},
+ {2816, {wxUpdateUIEvent, getSetEnabled, 0}},
+ {2817, {wxUpdateUIEvent, getSetShown, 0}},
+ {2818, {wxUpdateUIEvent, getSetText, 0}},
+ {2819, {wxUpdateUIEvent, getText, 0}},
+ {2820, {wxUpdateUIEvent, getMode, 0}},
+ {2821, {wxUpdateUIEvent, getUpdateInterval, 0}},
+ {2822, {wxUpdateUIEvent, resetUpdateTime, 0}},
+ {2823, {wxUpdateUIEvent, setMode, 1}},
+ {2824, {wxUpdateUIEvent, setText, 1}},
+ {2825, {wxUpdateUIEvent, setUpdateInterval, 1}},
+ {2826, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}},
+ {2827, {wxPaletteChangedEvent, setChangedWindow, 1}},
+ {2828, {wxPaletteChangedEvent, getChangedWindow, 0}},
+ {2829, {wxQueryNewPaletteEvent, setPaletteRealized, 1}},
+ {2830, {wxQueryNewPaletteEvent, getPaletteRealized, 0}},
+ {2831, {wxNavigationKeyEvent, getDirection, 0}},
+ {2832, {wxNavigationKeyEvent, setDirection, 1}},
+ {2833, {wxNavigationKeyEvent, isWindowChange, 0}},
+ {2834, {wxNavigationKeyEvent, setWindowChange, 1}},
+ {2835, {wxNavigationKeyEvent, isFromTab, 0}},
+ {2836, {wxNavigationKeyEvent, setFromTab, 1}},
+ {2837, {wxNavigationKeyEvent, getCurrentFocus, 0}},
+ {2838, {wxNavigationKeyEvent, setCurrentFocus, 1}},
+ {2839, {wxHelpEvent, getOrigin, 0}},
+ {2840, {wxHelpEvent, getPosition, 0}},
+ {2841, {wxHelpEvent, setOrigin, 1}},
+ {2842, {wxHelpEvent, setPosition, 1}},
+ {2843, {wxContextMenuEvent, getPosition, 0}},
+ {2844, {wxContextMenuEvent, setPosition, 1}},
+ {2845, {wxIdleEvent, canSend, 1}},
+ {2846, {wxIdleEvent, getMode, 0}},
+ {2847, {wxIdleEvent, requestMore, 1}},
+ {2848, {wxIdleEvent, moreRequested, 0}},
+ {2849, {wxIdleEvent, setMode, 1}},
+ {2850, {wxGridEvent, altDown, 0}},
+ {2851, {wxGridEvent, controlDown, 0}},
+ {2852, {wxGridEvent, getCol, 0}},
+ {2853, {wxGridEvent, getPosition, 0}},
+ {2854, {wxGridEvent, getRow, 0}},
+ {2855, {wxGridEvent, metaDown, 0}},
+ {2856, {wxGridEvent, selecting, 0}},
+ {2857, {wxGridEvent, shiftDown, 0}},
+ {2858, {wxNotifyEvent, allow, 0}},
+ {2859, {wxNotifyEvent, isAllowed, 0}},
+ {2860, {wxNotifyEvent, veto, 0}},
+ {2861, {wxSashEvent, getEdge, 0}},
+ {2862, {wxSashEvent, getDragRect, 0}},
+ {2863, {wxSashEvent, getDragStatus, 0}},
+ {2864, {wxListEvent, getCacheFrom, 0}},
+ {2865, {wxListEvent, getCacheTo, 0}},
+ {2866, {wxListEvent, getKeyCode, 0}},
+ {2867, {wxListEvent, getIndex, 0}},
+ {2868, {wxListEvent, getColumn, 0}},
+ {2869, {wxListEvent, getPoint, 0}},
+ {2870, {wxListEvent, getLabel, 0}},
+ {2871, {wxListEvent, getText, 0}},
+ {2872, {wxListEvent, getImage, 0}},
+ {2873, {wxListEvent, getData, 0}},
+ {2874, {wxListEvent, getMask, 0}},
+ {2875, {wxListEvent, getItem, 0}},
+ {2876, {wxListEvent, isEditCancelled, 0}},
+ {2877, {wxDateEvent, getDate, 0}},
+ {2878, {wxCalendarEvent, getWeekDay, 0}},
+ {2879, {wxFileDirPickerEvent, getPath, 0}},
+ {2880, {wxColourPickerEvent, getColour, 0}},
+ {2881, {wxFontPickerEvent, getFont, 0}},
+ {2882, {wxStyledTextEvent, getPosition, 0}},
+ {2883, {wxStyledTextEvent, getKey, 0}},
+ {2884, {wxStyledTextEvent, getModifiers, 0}},
+ {2885, {wxStyledTextEvent, getModificationType, 0}},
+ {2886, {wxStyledTextEvent, getText, 0}},
+ {2887, {wxStyledTextEvent, getLength, 0}},
+ {2888, {wxStyledTextEvent, getLinesAdded, 0}},
+ {2889, {wxStyledTextEvent, getLine, 0}},
+ {2890, {wxStyledTextEvent, getFoldLevelNow, 0}},
+ {2891, {wxStyledTextEvent, getFoldLevelPrev, 0}},
+ {2892, {wxStyledTextEvent, getMargin, 0}},
+ {2893, {wxStyledTextEvent, getMessage, 0}},
+ {2894, {wxStyledTextEvent, getWParam, 0}},
+ {2895, {wxStyledTextEvent, getLParam, 0}},
+ {2896, {wxStyledTextEvent, getListType, 0}},
+ {2897, {wxStyledTextEvent, getX, 0}},
+ {2898, {wxStyledTextEvent, getY, 0}},
+ {2899, {wxStyledTextEvent, getDragText, 0}},
+ {2900, {wxStyledTextEvent, getDragAllowMove, 0}},
+ {2901, {wxStyledTextEvent, getDragResult, 0}},
+ {2902, {wxStyledTextEvent, getShift, 0}},
+ {2903, {wxStyledTextEvent, getControl, 0}},
+ {2904, {wxStyledTextEvent, getAlt, 0}},
+ {2905, {utils, getKeyState, 1}},
+ {2906, {utils, getMousePosition, 2}},
+ {2907, {utils, getMouseState, 0}},
+ {2908, {utils, setDetectableAutoRepeat, 1}},
+ {2909, {utils, bell, 0}},
+ {2910, {utils, findMenuItemId, 3}},
+ {2911, {utils, genericFindWindowAtPoint, 1}},
+ {2912, {utils, findWindowAtPoint, 1}},
+ {2913, {utils, beginBusyCursor, 1}},
+ {2914, {utils, endBusyCursor, 0}},
+ {2915, {utils, isBusy, 0}},
+ {2916, {utils, shutdown, 1}},
+ {2917, {utils, shell, 1}},
+ {2918, {utils, launchDefaultBrowser, 2}},
+ {2919, {utils, getEmailAddress, 0}},
+ {2920, {utils, getUserId, 0}},
+ {2921, {utils, getHomeDir, 0}},
+ {2922, {utils, newId, 0}},
+ {2923, {utils, registerId, 1}},
+ {2924, {utils, getCurrentId, 0}},
+ {2925, {utils, getOsDescription, 0}},
+ {2926, {utils, isPlatformLittleEndian, 0}},
+ {2927, {utils, isPlatform64Bit, 0}},
+ {2928, {wxPrintout, new, 1}},
+ {2929, {wxPrintout, destruct, 0}},
+ {2930, {wxPrintout, getDC, 0}},
+ {2931, {wxPrintout, getPageSizeMM, 2}},
+ {2932, {wxPrintout, getPageSizePixels, 2}},
+ {2933, {wxPrintout, getPaperRectPixels, 0}},
+ {2934, {wxPrintout, getPPIPrinter, 2}},
+ {2935, {wxPrintout, getPPIScreen, 2}},
+ {2936, {wxPrintout, getTitle, 0}},
+ {2937, {wxPrintout, isPreview, 0}},
+ {2938, {wxPrintout, fitThisSizeToPaper, 1}},
+ {2939, {wxPrintout, fitThisSizeToPage, 1}},
+ {2940, {wxPrintout, fitThisSizeToPageMargins, 2}},
+ {2941, {wxPrintout, mapScreenSizeToPaper, 0}},
+ {2942, {wxPrintout, mapScreenSizeToPage, 0}},
+ {2943, {wxPrintout, mapScreenSizeToPageMargins, 1}},
+ {2944, {wxPrintout, mapScreenSizeToDevice, 0}},
+ {2945, {wxPrintout, getLogicalPaperRect, 0}},
+ {2946, {wxPrintout, getLogicalPageRect, 0}},
+ {2947, {wxPrintout, getLogicalPageMarginsRect, 1}},
+ {2948, {wxPrintout, setLogicalOrigin, 2}},
+ {2949, {wxPrintout, offsetLogicalOrigin, 2}},
+ {2950, {wxStyledTextCtrl, new_2, 2}},
+ {2951, {wxStyledTextCtrl, new_0, 0}},
+ {2952, {wxStyledTextCtrl, destruct, 0}},
+ {2953, {wxStyledTextCtrl, create, 2}},
+ {2954, {wxStyledTextCtrl, addText, 1}},
+ {2955, {wxStyledTextCtrl, addStyledText, 1}},
+ {2956, {wxStyledTextCtrl, insertText, 2}},
+ {2957, {wxStyledTextCtrl, clearAll, 0}},
+ {2958, {wxStyledTextCtrl, clearDocumentStyle, 0}},
+ {2959, {wxStyledTextCtrl, getLength, 0}},
+ {2960, {wxStyledTextCtrl, getCharAt, 1}},
+ {2961, {wxStyledTextCtrl, getCurrentPos, 0}},
+ {2962, {wxStyledTextCtrl, getAnchor, 0}},
+ {2963, {wxStyledTextCtrl, getStyleAt, 1}},
+ {2964, {wxStyledTextCtrl, redo, 0}},
+ {2965, {wxStyledTextCtrl, setUndoCollection, 1}},
+ {2966, {wxStyledTextCtrl, selectAll, 0}},
+ {2967, {wxStyledTextCtrl, setSavePoint, 0}},
+ {2968, {wxStyledTextCtrl, getStyledText, 2}},
+ {2969, {wxStyledTextCtrl, canRedo, 0}},
+ {2970, {wxStyledTextCtrl, markerLineFromHandle, 1}},
+ {2971, {wxStyledTextCtrl, markerDeleteHandle, 1}},
+ {2972, {wxStyledTextCtrl, getUndoCollection, 0}},
+ {2973, {wxStyledTextCtrl, getViewWhiteSpace, 0}},
+ {2974, {wxStyledTextCtrl, setViewWhiteSpace, 1}},
+ {2975, {wxStyledTextCtrl, positionFromPoint, 1}},
+ {2976, {wxStyledTextCtrl, positionFromPointClose, 2}},
+ {2977, {wxStyledTextCtrl, gotoLine, 1}},
+ {2978, {wxStyledTextCtrl, gotoPos, 1}},
+ {2979, {wxStyledTextCtrl, setAnchor, 1}},
+ {2980, {wxStyledTextCtrl, getCurLine, 1}},
+ {2981, {wxStyledTextCtrl, getEndStyled, 0}},
+ {2982, {wxStyledTextCtrl, convertEOLs, 1}},
+ {2983, {wxStyledTextCtrl, getEOLMode, 0}},
+ {2984, {wxStyledTextCtrl, setEOLMode, 1}},
+ {2985, {wxStyledTextCtrl, startStyling, 2}},
+ {2986, {wxStyledTextCtrl, setStyling, 2}},
+ {2987, {wxStyledTextCtrl, getBufferedDraw, 0}},
+ {2988, {wxStyledTextCtrl, setBufferedDraw, 1}},
+ {2989, {wxStyledTextCtrl, setTabWidth, 1}},
+ {2990, {wxStyledTextCtrl, getTabWidth, 0}},
+ {2991, {wxStyledTextCtrl, setCodePage, 1}},
+ {2992, {wxStyledTextCtrl, markerDefine, 3}},
+ {2993, {wxStyledTextCtrl, markerSetForeground, 2}},
+ {2994, {wxStyledTextCtrl, markerSetBackground, 2}},
+ {2995, {wxStyledTextCtrl, markerAdd, 2}},
+ {2996, {wxStyledTextCtrl, markerDelete, 2}},
+ {2997, {wxStyledTextCtrl, markerDeleteAll, 1}},
+ {2998, {wxStyledTextCtrl, markerGet, 1}},
+ {2999, {wxStyledTextCtrl, markerNext, 2}},
+ {3000, {wxStyledTextCtrl, markerPrevious, 2}},
+ {3001, {wxStyledTextCtrl, markerDefineBitmap, 2}},
+ {3002, {wxStyledTextCtrl, markerAddSet, 2}},
+ {3003, {wxStyledTextCtrl, markerSetAlpha, 2}},
+ {3004, {wxStyledTextCtrl, setMarginType, 2}},
+ {3005, {wxStyledTextCtrl, getMarginType, 1}},
+ {3006, {wxStyledTextCtrl, setMarginWidth, 2}},
+ {3007, {wxStyledTextCtrl, getMarginWidth, 1}},
+ {3008, {wxStyledTextCtrl, setMarginMask, 2}},
+ {3009, {wxStyledTextCtrl, getMarginMask, 1}},
+ {3010, {wxStyledTextCtrl, setMarginSensitive, 2}},
+ {3011, {wxStyledTextCtrl, getMarginSensitive, 1}},
+ {3012, {wxStyledTextCtrl, styleClearAll, 0}},
+ {3013, {wxStyledTextCtrl, styleSetForeground, 2}},
+ {3014, {wxStyledTextCtrl, styleSetBackground, 2}},
+ {3015, {wxStyledTextCtrl, styleSetBold, 2}},
+ {3016, {wxStyledTextCtrl, styleSetItalic, 2}},
+ {3017, {wxStyledTextCtrl, styleSetSize, 2}},
+ {3018, {wxStyledTextCtrl, styleSetFaceName, 2}},
+ {3019, {wxStyledTextCtrl, styleSetEOLFilled, 2}},
+ {3020, {wxStyledTextCtrl, styleResetDefault, 0}},
+ {3021, {wxStyledTextCtrl, styleSetUnderline, 2}},
+ {3022, {wxStyledTextCtrl, styleSetCase, 2}},
+ {3023, {wxStyledTextCtrl, styleSetHotSpot, 2}},
+ {3024, {wxStyledTextCtrl, setSelForeground, 2}},
+ {3025, {wxStyledTextCtrl, setSelBackground, 2}},
+ {3026, {wxStyledTextCtrl, getSelAlpha, 0}},
+ {3027, {wxStyledTextCtrl, setSelAlpha, 1}},
+ {3028, {wxStyledTextCtrl, setCaretForeground, 1}},
+ {3029, {wxStyledTextCtrl, cmdKeyAssign, 3}},
+ {3030, {wxStyledTextCtrl, cmdKeyClear, 2}},
+ {3031, {wxStyledTextCtrl, cmdKeyClearAll, 0}},
+ {3032, {wxStyledTextCtrl, setStyleBytes, 2}},
+ {3033, {wxStyledTextCtrl, styleSetVisible, 2}},
+ {3034, {wxStyledTextCtrl, getCaretPeriod, 0}},
+ {3035, {wxStyledTextCtrl, setCaretPeriod, 1}},
+ {3036, {wxStyledTextCtrl, setWordChars, 1}},
+ {3037, {wxStyledTextCtrl, beginUndoAction, 0}},
+ {3038, {wxStyledTextCtrl, endUndoAction, 0}},
+ {3039, {wxStyledTextCtrl, indicatorSetStyle, 2}},
+ {3040, {wxStyledTextCtrl, indicatorGetStyle, 1}},
+ {3041, {wxStyledTextCtrl, indicatorSetForeground, 2}},
+ {3042, {wxStyledTextCtrl, indicatorGetForeground, 1}},
+ {3043, {wxStyledTextCtrl, setWhitespaceForeground, 2}},
+ {3044, {wxStyledTextCtrl, setWhitespaceBackground, 2}},
+ {3045, {wxStyledTextCtrl, getStyleBits, 0}},
+ {3046, {wxStyledTextCtrl, setLineState, 2}},
+ {3047, {wxStyledTextCtrl, getLineState, 1}},
+ {3048, {wxStyledTextCtrl, getMaxLineState, 0}},
+ {3049, {wxStyledTextCtrl, getCaretLineVisible, 0}},
+ {3050, {wxStyledTextCtrl, setCaretLineVisible, 1}},
+ {3051, {wxStyledTextCtrl, getCaretLineBackground, 0}},
+ {3052, {wxStyledTextCtrl, setCaretLineBackground, 1}},
+ {3053, {wxStyledTextCtrl, autoCompShow, 2}},
+ {3054, {wxStyledTextCtrl, autoCompCancel, 0}},
+ {3055, {wxStyledTextCtrl, autoCompActive, 0}},
+ {3056, {wxStyledTextCtrl, autoCompPosStart, 0}},
+ {3057, {wxStyledTextCtrl, autoCompComplete, 0}},
+ {3058, {wxStyledTextCtrl, autoCompStops, 1}},
+ {3059, {wxStyledTextCtrl, autoCompSetSeparator, 1}},
+ {3060, {wxStyledTextCtrl, autoCompGetSeparator, 0}},
+ {3061, {wxStyledTextCtrl, autoCompSelect, 1}},
+ {3062, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}},
+ {3063, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}},
+ {3064, {wxStyledTextCtrl, autoCompSetFillUps, 1}},
+ {3065, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}},
+ {3066, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}},
+ {3067, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}},
+ {3068, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}},
+ {3069, {wxStyledTextCtrl, userListShow, 2}},
+ {3070, {wxStyledTextCtrl, autoCompSetAutoHide, 1}},
+ {3071, {wxStyledTextCtrl, autoCompGetAutoHide, 0}},
+ {3072, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}},
+ {3073, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}},
+ {3074, {wxStyledTextCtrl, registerImage, 2}},
+ {3075, {wxStyledTextCtrl, clearRegisteredImages, 0}},
+ {3076, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}},
+ {3077, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}},
+ {3078, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}},
+ {3079, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}},
+ {3080, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}},
+ {3081, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}},
+ {3082, {wxStyledTextCtrl, setIndent, 1}},
+ {3083, {wxStyledTextCtrl, getIndent, 0}},
+ {3084, {wxStyledTextCtrl, setUseTabs, 1}},
+ {3085, {wxStyledTextCtrl, getUseTabs, 0}},
+ {3086, {wxStyledTextCtrl, setLineIndentation, 2}},
+ {3087, {wxStyledTextCtrl, getLineIndentation, 1}},
+ {3088, {wxStyledTextCtrl, getLineIndentPosition, 1}},
+ {3089, {wxStyledTextCtrl, getColumn, 1}},
+ {3090, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}},
+ {3091, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}},
+ {3092, {wxStyledTextCtrl, setIndentationGuides, 1}},
+ {3093, {wxStyledTextCtrl, getIndentationGuides, 0}},
+ {3094, {wxStyledTextCtrl, setHighlightGuide, 1}},
+ {3095, {wxStyledTextCtrl, getHighlightGuide, 0}},
+ {3096, {wxStyledTextCtrl, getLineEndPosition, 1}},
+ {3097, {wxStyledTextCtrl, getCodePage, 0}},
+ {3098, {wxStyledTextCtrl, getCaretForeground, 0}},
+ {3099, {wxStyledTextCtrl, getReadOnly, 0}},
+ {3100, {wxStyledTextCtrl, setCurrentPos, 1}},
+ {3101, {wxStyledTextCtrl, setSelectionStart, 1}},
+ {3102, {wxStyledTextCtrl, getSelectionStart, 0}},
+ {3103, {wxStyledTextCtrl, setSelectionEnd, 1}},
+ {3104, {wxStyledTextCtrl, getSelectionEnd, 0}},
+ {3105, {wxStyledTextCtrl, setPrintMagnification, 1}},
+ {3106, {wxStyledTextCtrl, getPrintMagnification, 0}},
+ {3107, {wxStyledTextCtrl, setPrintColourMode, 1}},
+ {3108, {wxStyledTextCtrl, getPrintColourMode, 0}},
+ {3109, {wxStyledTextCtrl, findText, 4}},
+ {3110, {wxStyledTextCtrl, formatRange, 7}},
+ {3111, {wxStyledTextCtrl, getFirstVisibleLine, 0}},
+ {3112, {wxStyledTextCtrl, getLine, 1}},
+ {3113, {wxStyledTextCtrl, getLineCount, 0}},
+ {3114, {wxStyledTextCtrl, setMarginLeft, 1}},
+ {3115, {wxStyledTextCtrl, getMarginLeft, 0}},
+ {3116, {wxStyledTextCtrl, setMarginRight, 1}},
+ {3117, {wxStyledTextCtrl, getMarginRight, 0}},
+ {3118, {wxStyledTextCtrl, getModify, 0}},
+ {3119, {wxStyledTextCtrl, setSelection, 2}},
+ {3120, {wxStyledTextCtrl, getSelectedText, 0}},
+ {3121, {wxStyledTextCtrl, getTextRange, 2}},
+ {3122, {wxStyledTextCtrl, hideSelection, 1}},
+ {3123, {wxStyledTextCtrl, lineFromPosition, 1}},
+ {3124, {wxStyledTextCtrl, positionFromLine, 1}},
+ {3125, {wxStyledTextCtrl, lineScroll, 2}},
+ {3126, {wxStyledTextCtrl, ensureCaretVisible, 0}},
+ {3127, {wxStyledTextCtrl, replaceSelection, 1}},
+ {3128, {wxStyledTextCtrl, setReadOnly, 1}},
+ {3129, {wxStyledTextCtrl, canPaste, 0}},
+ {3130, {wxStyledTextCtrl, canUndo, 0}},
+ {3131, {wxStyledTextCtrl, emptyUndoBuffer, 0}},
+ {3132, {wxStyledTextCtrl, undo, 0}},
+ {3133, {wxStyledTextCtrl, cut, 0}},
+ {3134, {wxStyledTextCtrl, copy, 0}},
+ {3135, {wxStyledTextCtrl, paste, 0}},
+ {3136, {wxStyledTextCtrl, clear, 0}},
+ {3137, {wxStyledTextCtrl, setText, 1}},
+ {3138, {wxStyledTextCtrl, getText, 0}},
+ {3139, {wxStyledTextCtrl, getTextLength, 0}},
+ {3140, {wxStyledTextCtrl, getOvertype, 0}},
+ {3141, {wxStyledTextCtrl, setCaretWidth, 1}},
+ {3142, {wxStyledTextCtrl, getCaretWidth, 0}},
+ {3143, {wxStyledTextCtrl, setTargetStart, 1}},
+ {3144, {wxStyledTextCtrl, getTargetStart, 0}},
+ {3145, {wxStyledTextCtrl, setTargetEnd, 1}},
+ {3146, {wxStyledTextCtrl, getTargetEnd, 0}},
+ {3147, {wxStyledTextCtrl, replaceTarget, 1}},
+ {3148, {wxStyledTextCtrl, searchInTarget, 1}},
+ {3149, {wxStyledTextCtrl, setSearchFlags, 1}},
+ {3150, {wxStyledTextCtrl, getSearchFlags, 0}},
+ {3151, {wxStyledTextCtrl, callTipShow, 2}},
+ {3152, {wxStyledTextCtrl, callTipCancel, 0}},
+ {3153, {wxStyledTextCtrl, callTipActive, 0}},
+ {3154, {wxStyledTextCtrl, callTipPosAtStart, 0}},
+ {3155, {wxStyledTextCtrl, callTipSetHighlight, 2}},
+ {3156, {wxStyledTextCtrl, callTipSetBackground, 1}},
+ {3157, {wxStyledTextCtrl, callTipSetForeground, 1}},
+ {3158, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}},
+ {3159, {wxStyledTextCtrl, callTipUseStyle, 1}},
+ {3160, {wxStyledTextCtrl, visibleFromDocLine, 1}},
+ {3161, {wxStyledTextCtrl, docLineFromVisible, 1}},
+ {3162, {wxStyledTextCtrl, wrapCount, 1}},
+ {3163, {wxStyledTextCtrl, setFoldLevel, 2}},
+ {3164, {wxStyledTextCtrl, getFoldLevel, 1}},
+ {3165, {wxStyledTextCtrl, getLastChild, 2}},
+ {3166, {wxStyledTextCtrl, getFoldParent, 1}},
+ {3167, {wxStyledTextCtrl, showLines, 2}},
+ {3168, {wxStyledTextCtrl, hideLines, 2}},
+ {3169, {wxStyledTextCtrl, getLineVisible, 1}},
+ {3170, {wxStyledTextCtrl, setFoldExpanded, 2}},
+ {3171, {wxStyledTextCtrl, getFoldExpanded, 1}},
+ {3172, {wxStyledTextCtrl, toggleFold, 1}},
+ {3173, {wxStyledTextCtrl, ensureVisible, 1}},
+ {3174, {wxStyledTextCtrl, setFoldFlags, 1}},
+ {3175, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}},
+ {3176, {wxStyledTextCtrl, setTabIndents, 1}},
+ {3177, {wxStyledTextCtrl, getTabIndents, 0}},
+ {3178, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}},
+ {3179, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}},
+ {3180, {wxStyledTextCtrl, setMouseDwellTime, 1}},
+ {3181, {wxStyledTextCtrl, getMouseDwellTime, 0}},
+ {3182, {wxStyledTextCtrl, wordStartPosition, 2}},
+ {3183, {wxStyledTextCtrl, wordEndPosition, 2}},
+ {3184, {wxStyledTextCtrl, setWrapMode, 1}},
+ {3185, {wxStyledTextCtrl, getWrapMode, 0}},
+ {3186, {wxStyledTextCtrl, setWrapVisualFlags, 1}},
+ {3187, {wxStyledTextCtrl, getWrapVisualFlags, 0}},
+ {3188, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}},
+ {3189, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}},
+ {3190, {wxStyledTextCtrl, setWrapStartIndent, 1}},
+ {3191, {wxStyledTextCtrl, getWrapStartIndent, 0}},
+ {3192, {wxStyledTextCtrl, setLayoutCache, 1}},
+ {3193, {wxStyledTextCtrl, getLayoutCache, 0}},
+ {3194, {wxStyledTextCtrl, setScrollWidth, 1}},
+ {3195, {wxStyledTextCtrl, getScrollWidth, 0}},
+ {3196, {wxStyledTextCtrl, textWidth, 2}},
+ {3197, {wxStyledTextCtrl, getEndAtLastLine, 0}},
+ {3198, {wxStyledTextCtrl, textHeight, 1}},
+ {3199, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}},
+ {3200, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}},
+ {3201, {wxStyledTextCtrl, appendText, 1}},
+ {3202, {wxStyledTextCtrl, getTwoPhaseDraw, 0}},
+ {3203, {wxStyledTextCtrl, setTwoPhaseDraw, 1}},
+ {3204, {wxStyledTextCtrl, targetFromSelection, 0}},
+ {3205, {wxStyledTextCtrl, linesJoin, 0}},
+ {3206, {wxStyledTextCtrl, linesSplit, 1}},
+ {3207, {wxStyledTextCtrl, setFoldMarginColour, 2}},
+ {3208, {wxStyledTextCtrl, setFoldMarginHiColour, 2}},
+ {3209, {wxStyledTextCtrl, lineDown, 0}},
+ {3210, {wxStyledTextCtrl, lineDownExtend, 0}},
+ {3211, {wxStyledTextCtrl, lineUp, 0}},
+ {3212, {wxStyledTextCtrl, lineUpExtend, 0}},
+ {3213, {wxStyledTextCtrl, charLeft, 0}},
+ {3214, {wxStyledTextCtrl, charLeftExtend, 0}},
+ {3215, {wxStyledTextCtrl, charRight, 0}},
+ {3216, {wxStyledTextCtrl, charRightExtend, 0}},
+ {3217, {wxStyledTextCtrl, wordLeft, 0}},
+ {3218, {wxStyledTextCtrl, wordLeftExtend, 0}},
+ {3219, {wxStyledTextCtrl, wordRight, 0}},
+ {3220, {wxStyledTextCtrl, wordRightExtend, 0}},
+ {3221, {wxStyledTextCtrl, home, 0}},
+ {3222, {wxStyledTextCtrl, homeExtend, 0}},
+ {3223, {wxStyledTextCtrl, lineEnd, 0}},
+ {3224, {wxStyledTextCtrl, lineEndExtend, 0}},
+ {3225, {wxStyledTextCtrl, documentStart, 0}},
+ {3226, {wxStyledTextCtrl, documentStartExtend, 0}},
+ {3227, {wxStyledTextCtrl, documentEnd, 0}},
+ {3228, {wxStyledTextCtrl, documentEndExtend, 0}},
+ {3229, {wxStyledTextCtrl, pageUp, 0}},
+ {3230, {wxStyledTextCtrl, pageUpExtend, 0}},
+ {3231, {wxStyledTextCtrl, pageDown, 0}},
+ {3232, {wxStyledTextCtrl, pageDownExtend, 0}},
+ {3233, {wxStyledTextCtrl, editToggleOvertype, 0}},
+ {3234, {wxStyledTextCtrl, cancel, 0}},
+ {3235, {wxStyledTextCtrl, deleteBack, 0}},
+ {3236, {wxStyledTextCtrl, tab, 0}},
+ {3237, {wxStyledTextCtrl, backTab, 0}},
+ {3238, {wxStyledTextCtrl, newLine, 0}},
+ {3239, {wxStyledTextCtrl, formFeed, 0}},
+ {3240, {wxStyledTextCtrl, vCHome, 0}},
+ {3241, {wxStyledTextCtrl, vCHomeExtend, 0}},
+ {3242, {wxStyledTextCtrl, zoomIn, 0}},
+ {3243, {wxStyledTextCtrl, zoomOut, 0}},
+ {3244, {wxStyledTextCtrl, delWordLeft, 0}},
+ {3245, {wxStyledTextCtrl, delWordRight, 0}},
+ {3246, {wxStyledTextCtrl, lineCut, 0}},
+ {3247, {wxStyledTextCtrl, lineDelete, 0}},
+ {3248, {wxStyledTextCtrl, lineTranspose, 0}},
+ {3249, {wxStyledTextCtrl, lineDuplicate, 0}},
+ {3250, {wxStyledTextCtrl, lowerCase, 0}},
+ {3251, {wxStyledTextCtrl, upperCase, 0}},
+ {3252, {wxStyledTextCtrl, lineScrollDown, 0}},
+ {3253, {wxStyledTextCtrl, lineScrollUp, 0}},
+ {3254, {wxStyledTextCtrl, deleteBackNotLine, 0}},
+ {3255, {wxStyledTextCtrl, homeDisplay, 0}},
+ {3256, {wxStyledTextCtrl, homeDisplayExtend, 0}},
+ {3257, {wxStyledTextCtrl, lineEndDisplay, 0}},
+ {3258, {wxStyledTextCtrl, lineEndDisplayExtend, 0}},
+ {3259, {wxStyledTextCtrl, homeWrapExtend, 0}},
+ {3260, {wxStyledTextCtrl, lineEndWrap, 0}},
+ {3261, {wxStyledTextCtrl, lineEndWrapExtend, 0}},
+ {3262, {wxStyledTextCtrl, vCHomeWrap, 0}},
+ {3263, {wxStyledTextCtrl, vCHomeWrapExtend, 0}},
+ {3264, {wxStyledTextCtrl, lineCopy, 0}},
+ {3265, {wxStyledTextCtrl, moveCaretInsideView, 0}},
+ {3266, {wxStyledTextCtrl, lineLength, 1}},
+ {3267, {wxStyledTextCtrl, braceHighlight, 2}},
+ {3268, {wxStyledTextCtrl, braceBadLight, 1}},
+ {3269, {wxStyledTextCtrl, braceMatch, 1}},
+ {3270, {wxStyledTextCtrl, getViewEOL, 0}},
+ {3271, {wxStyledTextCtrl, setViewEOL, 1}},
+ {3272, {wxStyledTextCtrl, setModEventMask, 1}},
+ {3273, {wxStyledTextCtrl, getEdgeColumn, 0}},
+ {3274, {wxStyledTextCtrl, setEdgeColumn, 1}},
+ {3275, {wxStyledTextCtrl, setEdgeMode, 1}},
+ {3276, {wxStyledTextCtrl, getEdgeMode, 0}},
+ {3277, {wxStyledTextCtrl, getEdgeColour, 0}},
+ {3278, {wxStyledTextCtrl, setEdgeColour, 1}},
+ {3279, {wxStyledTextCtrl, searchAnchor, 0}},
+ {3280, {wxStyledTextCtrl, searchNext, 2}},
+ {3281, {wxStyledTextCtrl, searchPrev, 2}},
+ {3282, {wxStyledTextCtrl, linesOnScreen, 0}},
+ {3283, {wxStyledTextCtrl, usePopUp, 1}},
+ {3284, {wxStyledTextCtrl, selectionIsRectangle, 0}},
+ {3285, {wxStyledTextCtrl, setZoom, 1}},
+ {3286, {wxStyledTextCtrl, getZoom, 0}},
+ {3287, {wxStyledTextCtrl, getModEventMask, 0}},
+ {3288, {wxStyledTextCtrl, setSTCFocus, 1}},
+ {3289, {wxStyledTextCtrl, getSTCFocus, 0}},
+ {3290, {wxStyledTextCtrl, setStatus, 1}},
+ {3291, {wxStyledTextCtrl, getStatus, 0}},
+ {3292, {wxStyledTextCtrl, setMouseDownCaptures, 1}},
+ {3293, {wxStyledTextCtrl, getMouseDownCaptures, 0}},
+ {3294, {wxStyledTextCtrl, setSTCCursor, 1}},
+ {3295, {wxStyledTextCtrl, getSTCCursor, 0}},
+ {3296, {wxStyledTextCtrl, setControlCharSymbol, 1}},
+ {3297, {wxStyledTextCtrl, getControlCharSymbol, 0}},
+ {3298, {wxStyledTextCtrl, wordPartLeft, 0}},
+ {3299, {wxStyledTextCtrl, wordPartLeftExtend, 0}},
+ {3300, {wxStyledTextCtrl, wordPartRight, 0}},
+ {3301, {wxStyledTextCtrl, wordPartRightExtend, 0}},
+ {3302, {wxStyledTextCtrl, setVisiblePolicy, 2}},
+ {3303, {wxStyledTextCtrl, delLineLeft, 0}},
+ {3304, {wxStyledTextCtrl, delLineRight, 0}},
+ {3305, {wxStyledTextCtrl, getXOffset, 0}},
+ {3306, {wxStyledTextCtrl, chooseCaretX, 0}},
+ {3307, {wxStyledTextCtrl, setXCaretPolicy, 2}},
+ {3308, {wxStyledTextCtrl, setYCaretPolicy, 2}},
+ {3309, {wxStyledTextCtrl, getPrintWrapMode, 0}},
+ {3310, {wxStyledTextCtrl, setHotspotActiveForeground, 2}},
+ {3311, {wxStyledTextCtrl, setHotspotActiveBackground, 2}},
+ {3312, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}},
+ {3313, {wxStyledTextCtrl, setHotspotSingleLine, 1}},
+ {3314, {wxStyledTextCtrl, paraDownExtend, 0}},
+ {3315, {wxStyledTextCtrl, paraUp, 0}},
+ {3316, {wxStyledTextCtrl, paraUpExtend, 0}},
+ {3317, {wxStyledTextCtrl, positionBefore, 1}},
+ {3318, {wxStyledTextCtrl, positionAfter, 1}},
+ {3319, {wxStyledTextCtrl, copyRange, 2}},
+ {3320, {wxStyledTextCtrl, copyText, 2}},
+ {3321, {wxStyledTextCtrl, setSelectionMode, 1}},
+ {3322, {wxStyledTextCtrl, getSelectionMode, 0}},
+ {3323, {wxStyledTextCtrl, lineDownRectExtend, 0}},
+ {3324, {wxStyledTextCtrl, lineUpRectExtend, 0}},
+ {3325, {wxStyledTextCtrl, charLeftRectExtend, 0}},
+ {3326, {wxStyledTextCtrl, charRightRectExtend, 0}},
+ {3327, {wxStyledTextCtrl, homeRectExtend, 0}},
+ {3328, {wxStyledTextCtrl, vCHomeRectExtend, 0}},
+ {3329, {wxStyledTextCtrl, lineEndRectExtend, 0}},
+ {3330, {wxStyledTextCtrl, pageUpRectExtend, 0}},
+ {3331, {wxStyledTextCtrl, pageDownRectExtend, 0}},
+ {3332, {wxStyledTextCtrl, stutteredPageUp, 0}},
+ {3333, {wxStyledTextCtrl, stutteredPageUpExtend, 0}},
+ {3334, {wxStyledTextCtrl, stutteredPageDown, 0}},
+ {3335, {wxStyledTextCtrl, stutteredPageDownExtend, 0}},
+ {3336, {wxStyledTextCtrl, wordLeftEnd, 0}},
+ {3337, {wxStyledTextCtrl, wordLeftEndExtend, 0}},
+ {3338, {wxStyledTextCtrl, wordRightEnd, 0}},
+ {3339, {wxStyledTextCtrl, wordRightEndExtend, 0}},
+ {3340, {wxStyledTextCtrl, setWhitespaceChars, 1}},
+ {3341, {wxStyledTextCtrl, setCharsDefault, 0}},
+ {3342, {wxStyledTextCtrl, autoCompGetCurrent, 0}},
+ {3343, {wxStyledTextCtrl, allocate, 1}},
+ {3344, {wxStyledTextCtrl, findColumn, 2}},
+ {3345, {wxStyledTextCtrl, getCaretSticky, 0}},
+ {3346, {wxStyledTextCtrl, setCaretSticky, 1}},
+ {3347, {wxStyledTextCtrl, toggleCaretSticky, 0}},
+ {3348, {wxStyledTextCtrl, setPasteConvertEndings, 1}},
+ {3349, {wxStyledTextCtrl, getPasteConvertEndings, 0}},
+ {3350, {wxStyledTextCtrl, selectionDuplicate, 0}},
+ {3351, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}},
+ {3352, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}},
+ {3353, {wxStyledTextCtrl, startRecord, 0}},
+ {3354, {wxStyledTextCtrl, stopRecord, 0}},
+ {3355, {wxStyledTextCtrl, setLexer, 1}},
+ {3356, {wxStyledTextCtrl, getLexer, 0}},
+ {3357, {wxStyledTextCtrl, colourise, 2}},
+ {3358, {wxStyledTextCtrl, setProperty, 2}},
+ {3359, {wxStyledTextCtrl, setKeyWords, 2}},
+ {3360, {wxStyledTextCtrl, setLexerLanguage, 1}},
+ {3361, {wxStyledTextCtrl, getProperty, 1}},
+ {3362, {wxStyledTextCtrl, getStyleBitsNeeded, 0}},
+ {3363, {wxStyledTextCtrl, getCurrentLine, 0}},
+ {3364, {wxStyledTextCtrl, styleSetSpec, 2}},
+ {3365, {wxStyledTextCtrl, styleSetFont, 2}},
+ {3366, {wxStyledTextCtrl, styleSetFontAttr, 7}},
+ {3367, {wxStyledTextCtrl, styleSetCharacterSet, 2}},
+ {3368, {wxStyledTextCtrl, styleSetFontEncoding, 2}},
+ {3369, {wxStyledTextCtrl, cmdKeyExecute, 1}},
+ {3370, {wxStyledTextCtrl, setMargins, 2}},
+ {3371, {wxStyledTextCtrl, getSelection, 2}},
+ {3372, {wxStyledTextCtrl, pointFromPosition, 1}},
+ {3373, {wxStyledTextCtrl, scrollToLine, 1}},
+ {3374, {wxStyledTextCtrl, scrollToColumn, 1}},
+ {3375, {wxStyledTextCtrl, setVScrollBar, 1}},
+ {3376, {wxStyledTextCtrl, setHScrollBar, 1}},
+ {3377, {wxStyledTextCtrl, getLastKeydownProcessed, 0}},
+ {3378, {wxStyledTextCtrl, setLastKeydownProcessed, 1}},
+ {3379, {wxStyledTextCtrl, saveFile, 1}},
+ {3380, {wxStyledTextCtrl, loadFile, 1}},
+ {3381, {wxStyledTextCtrl, doDragOver, 3}},
+ {3382, {wxStyledTextCtrl, doDropText, 3}},
+ {3383, {wxStyledTextCtrl, getUseAntiAliasing, 0}},
+ {3384, {wxStyledTextCtrl, addTextRaw, 1}},
+ {3385, {wxStyledTextCtrl, insertTextRaw, 2}},
+ {3386, {wxStyledTextCtrl, getCurLineRaw, 1}},
+ {3387, {wxStyledTextCtrl, getLineRaw, 1}},
+ {3388, {wxStyledTextCtrl, getSelectedTextRaw, 0}},
+ {3389, {wxStyledTextCtrl, getTextRangeRaw, 2}},
+ {3390, {wxStyledTextCtrl, setTextRaw, 1}},
+ {3391, {wxStyledTextCtrl, getTextRaw, 0}},
+ {3392, {wxStyledTextCtrl, appendTextRaw, 1}},
+ {3393, {wxArtProvider, getBitmap, 2}},
+ {3394, {wxArtProvider, getIcon, 2}},
+ {3395, {wxTreeEvent, getKeyCode, 0}},
+ {3396, {wxTreeEvent, getItem, 0}},
+ {3397, {wxTreeEvent, getKeyEvent, 0}},
+ {3398, {wxTreeEvent, getLabel, 0}},
+ {3399, {wxTreeEvent, getOldItem, 0}},
+ {3400, {wxTreeEvent, getPoint, 0}},
+ {3401, {wxTreeEvent, isEditCancelled, 0}},
+ {3402, {wxTreeEvent, setToolTip, 1}},
+ {3403, {wxNotebookEvent, getOldSelection, 0}},
+ {3404, {wxNotebookEvent, getSelection, 0}},
+ {3405, {wxNotebookEvent, setOldSelection, 1}},
+ {3406, {wxNotebookEvent, setSelection, 1}},
+ {3407, {wxFileDataObject, new, 0}},
+ {3408, {wxFileDataObject, addFile, 1}},
+ {3409, {wxFileDataObject, getFilenames, 0}},
+ {3410, {wxFileDataObject, 'Destroy', undefined}},
+ {3411, {wxTextDataObject, new, 1}},
+ {3412, {wxTextDataObject, getTextLength, 0}},
+ {3413, {wxTextDataObject, getText, 0}},
+ {3414, {wxTextDataObject, setText, 1}},
+ {3415, {wxTextDataObject, 'Destroy', undefined}},
+ {3416, {wxBitmapDataObject, new_1_1, 1}},
+ {3417, {wxBitmapDataObject, new_1_0, 1}},
+ {3418, {wxBitmapDataObject, getBitmap, 0}},
+ {3419, {wxBitmapDataObject, setBitmap, 1}},
+ {3420, {wxBitmapDataObject, 'Destroy', undefined}},
+ {3422, {wxClipboard, new, 0}},
+ {3423, {wxClipboard, destruct, 0}},
+ {3424, {wxClipboard, addData, 1}},
+ {3425, {wxClipboard, clear, 0}},
+ {3426, {wxClipboard, close, 0}},
+ {3427, {wxClipboard, flush, 0}},
+ {3428, {wxClipboard, getData, 1}},
+ {3429, {wxClipboard, isOpened, 0}},
+ {3430, {wxClipboard, open, 0}},
+ {3431, {wxClipboard, setData, 1}},
+ {3433, {wxClipboard, usePrimarySelection, 1}},
+ {3434, {wxClipboard, isSupported, 1}},
+ {3435, {wxClipboard, get, 0}},
+ {3436, {wxSpinEvent, getPosition, 0}},
+ {3437, {wxSpinEvent, setPosition, 1}},
+ {3438, {wxSplitterWindow, new_0, 0}},
+ {3439, {wxSplitterWindow, new_2, 2}},
+ {3440, {wxSplitterWindow, destruct, 0}},
+ {3441, {wxSplitterWindow, create, 2}},
+ {3442, {wxSplitterWindow, getMinimumPaneSize, 0}},
+ {3443, {wxSplitterWindow, getSashGravity, 0}},
+ {3444, {wxSplitterWindow, getSashPosition, 0}},
+ {3445, {wxSplitterWindow, getSplitMode, 0}},
+ {3446, {wxSplitterWindow, getWindow1, 0}},
+ {3447, {wxSplitterWindow, getWindow2, 0}},
+ {3448, {wxSplitterWindow, initialize, 1}},
+ {3449, {wxSplitterWindow, isSplit, 0}},
+ {3450, {wxSplitterWindow, replaceWindow, 2}},
+ {3451, {wxSplitterWindow, setSashGravity, 1}},
+ {3452, {wxSplitterWindow, setSashPosition, 2}},
+ {3453, {wxSplitterWindow, setSashSize, 1}},
+ {3454, {wxSplitterWindow, setMinimumPaneSize, 1}},
+ {3455, {wxSplitterWindow, setSplitMode, 1}},
+ {3456, {wxSplitterWindow, splitHorizontally, 3}},
+ {3457, {wxSplitterWindow, splitVertically, 3}},
+ {3458, {wxSplitterWindow, unsplit, 1}},
+ {3459, {wxSplitterWindow, updateSize, 0}},
+ {3460, {wxSplitterEvent, getSashPosition, 0}},
+ {3461, {wxSplitterEvent, getX, 0}},
+ {3462, {wxSplitterEvent, getY, 0}},
+ {3463, {wxSplitterEvent, getWindowBeingRemoved, 0}},
+ {3464, {wxSplitterEvent, setSashPosition, 1}},
+ {3465, {wxHtmlWindow, new_0, 0}},
+ {3466, {wxHtmlWindow, new_2, 2}},
+ {3467, {wxHtmlWindow, appendToPage, 1}},
+ {3468, {wxHtmlWindow, getOpenedAnchor, 0}},
+ {3469, {wxHtmlWindow, getOpenedPage, 0}},
+ {3470, {wxHtmlWindow, getOpenedPageTitle, 0}},
+ {3471, {wxHtmlWindow, getRelatedFrame, 0}},
+ {3472, {wxHtmlWindow, historyBack, 0}},
+ {3473, {wxHtmlWindow, historyCanBack, 0}},
+ {3474, {wxHtmlWindow, historyCanForward, 0}},
+ {3475, {wxHtmlWindow, historyClear, 0}},
+ {3476, {wxHtmlWindow, historyForward, 0}},
+ {3477, {wxHtmlWindow, loadFile, 1}},
+ {3478, {wxHtmlWindow, loadPage, 1}},
+ {3479, {wxHtmlWindow, selectAll, 0}},
+ {3480, {wxHtmlWindow, selectionToText, 0}},
+ {3481, {wxHtmlWindow, selectLine, 1}},
+ {3482, {wxHtmlWindow, selectWord, 1}},
+ {3483, {wxHtmlWindow, setBorders, 1}},
+ {3484, {wxHtmlWindow, setFonts, 3}},
+ {3485, {wxHtmlWindow, setPage, 1}},
+ {3486, {wxHtmlWindow, setRelatedFrame, 2}},
+ {3487, {wxHtmlWindow, setRelatedStatusBar, 1}},
+ {3488, {wxHtmlWindow, toText, 0}},
+ {3489, {wxHtmlWindow, 'Destroy', undefined}},
+ {3490, {wxHtmlLinkEvent, getLinkInfo, 0}},
+ {3491, {wxSystemSettings, getColour, 1}},
+ {3492, {wxSystemSettings, getFont, 1}},
+ {3493, {wxSystemSettings, getMetric, 2}},
+ {3494, {wxSystemSettings, getScreenType, 0}},
+ {3495, {wxSystemOptions, getOption, 1}},
+ {3496, {wxSystemOptions, getOptionInt, 1}},
+ {3497, {wxSystemOptions, hasOption, 1}},
+ {3498, {wxSystemOptions, isFalse, 1}},
+ {3499, {wxSystemOptions, setOption_2_1, 2}},
+ {3500, {wxSystemOptions, setOption_2_0, 2}},
+ {3501, {wxAuiNotebookEvent, setSelection, 1}},
+ {3502, {wxAuiNotebookEvent, getSelection, 0}},
+ {3503, {wxAuiNotebookEvent, setOldSelection, 1}},
+ {3504, {wxAuiNotebookEvent, getOldSelection, 0}},
+ {3505, {wxAuiNotebookEvent, setDragSource, 1}},
+ {3506, {wxAuiNotebookEvent, getDragSource, 0}},
+ {3507, {wxAuiManagerEvent, setManager, 1}},
+ {3508, {wxAuiManagerEvent, getManager, 0}},
+ {3509, {wxAuiManagerEvent, setPane, 1}},
+ {3510, {wxAuiManagerEvent, getPane, 0}},
+ {3511, {wxAuiManagerEvent, setButton, 1}},
+ {3512, {wxAuiManagerEvent, getButton, 0}},
+ {3513, {wxAuiManagerEvent, setDC, 1}},
+ {3514, {wxAuiManagerEvent, getDC, 0}},
+ {3515, {wxAuiManagerEvent, veto, 1}},
+ {3516, {wxAuiManagerEvent, getVeto, 0}},
+ {3517, {wxAuiManagerEvent, setCanVeto, 1}},
+ {3518, {wxAuiManagerEvent, canVeto, 0}},
+ {3519, {wxLogNull, new, 0}},
+ {3520, {wxLogNull, 'Destroy', undefined}},
+ {3521, {wxTaskBarIcon, new, 0}},
+ {3522, {wxTaskBarIcon, destruct, 0}},
+ {3523, {wxTaskBarIcon, popupMenu, 1}},
+ {3524, {wxTaskBarIcon, removeIcon, 0}},
+ {3525, {wxTaskBarIcon, setIcon, 2}},
{-1, {mod, func, -1}}
].
diff --git a/lib/wx/src/gen/wxe_funcs.hrl b/lib/wx/src/gen/wxe_funcs.hrl
index b6e507b11d..213a2e5be1 100644
--- a/lib/wx/src/gen/wxe_funcs.hrl
+++ b/lib/wx/src/gen/wxe_funcs.hrl
@@ -238,3066 +238,3067 @@
-define(wxPanel_new_2, 334).
-define(wxPanel_destruct, 335).
-define(wxPanel_InitDialog, 336).
--define(wxScrolledWindow_new_0, 337).
--define(wxScrolledWindow_new_2, 338).
--define(wxScrolledWindow_destruct, 339).
--define(wxScrolledWindow_CalcScrolledPosition_4, 340).
--define(wxScrolledWindow_CalcScrolledPosition_1, 341).
--define(wxScrolledWindow_CalcUnscrolledPosition_4, 342).
--define(wxScrolledWindow_CalcUnscrolledPosition_1, 343).
--define(wxScrolledWindow_EnableScrolling, 344).
--define(wxScrolledWindow_GetScrollPixelsPerUnit, 345).
--define(wxScrolledWindow_GetViewStart, 346).
--define(wxScrolledWindow_DoPrepareDC, 347).
--define(wxScrolledWindow_PrepareDC, 348).
--define(wxScrolledWindow_Scroll, 349).
--define(wxScrolledWindow_SetScrollbars, 350).
--define(wxScrolledWindow_SetScrollRate, 351).
--define(wxScrolledWindow_SetTargetWindow, 352).
--define(wxSashWindow_new_0, 353).
--define(wxSashWindow_new_2, 354).
--define(wxSashWindow_destruct, 355).
--define(wxSashWindow_GetSashVisible, 356).
--define(wxSashWindow_GetMaximumSizeX, 357).
--define(wxSashWindow_GetMaximumSizeY, 358).
--define(wxSashWindow_GetMinimumSizeX, 359).
--define(wxSashWindow_GetMinimumSizeY, 360).
--define(wxSashWindow_SetMaximumSizeX, 361).
--define(wxSashWindow_SetMaximumSizeY, 362).
--define(wxSashWindow_SetMinimumSizeX, 363).
--define(wxSashWindow_SetMinimumSizeY, 364).
--define(wxSashWindow_SetSashVisible, 365).
--define(wxSashLayoutWindow_new_0, 366).
--define(wxSashLayoutWindow_new_2, 367).
--define(wxSashLayoutWindow_Create, 368).
--define(wxSashLayoutWindow_GetAlignment, 369).
--define(wxSashLayoutWindow_GetOrientation, 370).
--define(wxSashLayoutWindow_SetAlignment, 371).
--define(wxSashLayoutWindow_SetDefaultSize, 372).
--define(wxSashLayoutWindow_SetOrientation, 373).
--define(wxSashLayoutWindow_destroy, 374).
--define(wxGrid_new_0, 375).
--define(wxGrid_new_3, 376).
--define(wxGrid_new_4, 377).
--define(wxGrid_destruct, 378).
--define(wxGrid_AppendCols, 379).
--define(wxGrid_AppendRows, 380).
--define(wxGrid_AutoSize, 381).
--define(wxGrid_AutoSizeColumn, 382).
--define(wxGrid_AutoSizeColumns, 383).
--define(wxGrid_AutoSizeRow, 384).
--define(wxGrid_AutoSizeRows, 385).
--define(wxGrid_BeginBatch, 386).
--define(wxGrid_BlockToDeviceRect, 387).
--define(wxGrid_CanDragColSize, 388).
--define(wxGrid_CanDragRowSize, 389).
--define(wxGrid_CanDragGridSize, 390).
--define(wxGrid_CanEnableCellControl, 391).
--define(wxGrid_CellToRect_2, 392).
--define(wxGrid_CellToRect_1, 393).
--define(wxGrid_ClearGrid, 394).
--define(wxGrid_ClearSelection, 395).
--define(wxGrid_CreateGrid, 396).
--define(wxGrid_DeleteCols, 397).
--define(wxGrid_DeleteRows, 398).
--define(wxGrid_DisableCellEditControl, 399).
--define(wxGrid_DisableDragColSize, 400).
--define(wxGrid_DisableDragGridSize, 401).
--define(wxGrid_DisableDragRowSize, 402).
--define(wxGrid_EnableCellEditControl, 403).
--define(wxGrid_EnableDragColSize, 404).
--define(wxGrid_EnableDragGridSize, 405).
--define(wxGrid_EnableDragRowSize, 406).
--define(wxGrid_EnableEditing, 407).
--define(wxGrid_EnableGridLines, 408).
--define(wxGrid_EndBatch, 409).
--define(wxGrid_Fit, 410).
--define(wxGrid_ForceRefresh, 411).
--define(wxGrid_GetBatchCount, 412).
--define(wxGrid_GetCellAlignment, 413).
--define(wxGrid_GetCellBackgroundColour, 414).
--define(wxGrid_GetCellEditor, 415).
--define(wxGrid_GetCellFont, 416).
--define(wxGrid_GetCellRenderer, 417).
--define(wxGrid_GetCellTextColour, 418).
--define(wxGrid_GetCellValue_2, 419).
--define(wxGrid_GetCellValue_1, 420).
--define(wxGrid_GetColLabelAlignment, 421).
--define(wxGrid_GetColLabelSize, 422).
--define(wxGrid_GetColLabelValue, 423).
--define(wxGrid_GetColMinimalAcceptableWidth, 424).
--define(wxGrid_GetDefaultCellAlignment, 425).
--define(wxGrid_GetDefaultCellBackgroundColour, 426).
--define(wxGrid_GetDefaultCellFont, 427).
--define(wxGrid_GetDefaultCellTextColour, 428).
--define(wxGrid_GetDefaultColLabelSize, 429).
--define(wxGrid_GetDefaultColSize, 430).
--define(wxGrid_GetDefaultEditor, 431).
--define(wxGrid_GetDefaultEditorForCell_2, 432).
--define(wxGrid_GetDefaultEditorForCell_1, 433).
--define(wxGrid_GetDefaultEditorForType, 434).
--define(wxGrid_GetDefaultRenderer, 435).
--define(wxGrid_GetDefaultRendererForCell, 436).
--define(wxGrid_GetDefaultRendererForType, 437).
--define(wxGrid_GetDefaultRowLabelSize, 438).
--define(wxGrid_GetDefaultRowSize, 439).
--define(wxGrid_GetGridCursorCol, 440).
--define(wxGrid_GetGridCursorRow, 441).
--define(wxGrid_GetGridLineColour, 442).
--define(wxGrid_GridLinesEnabled, 443).
--define(wxGrid_GetLabelBackgroundColour, 444).
--define(wxGrid_GetLabelFont, 445).
--define(wxGrid_GetLabelTextColour, 446).
--define(wxGrid_GetNumberCols, 447).
--define(wxGrid_GetNumberRows, 448).
--define(wxGrid_GetOrCreateCellAttr, 449).
--define(wxGrid_GetRowMinimalAcceptableHeight, 450).
--define(wxGrid_GetRowLabelAlignment, 451).
--define(wxGrid_GetRowLabelSize, 452).
--define(wxGrid_GetRowLabelValue, 453).
--define(wxGrid_GetRowSize, 454).
--define(wxGrid_GetScrollLineX, 455).
--define(wxGrid_GetScrollLineY, 456).
--define(wxGrid_GetSelectedCells, 457).
--define(wxGrid_GetSelectedCols, 458).
--define(wxGrid_GetSelectedRows, 459).
--define(wxGrid_GetSelectionBackground, 460).
--define(wxGrid_GetSelectionBlockTopLeft, 461).
--define(wxGrid_GetSelectionBlockBottomRight, 462).
--define(wxGrid_GetSelectionForeground, 463).
--define(wxGrid_GetViewWidth, 464).
--define(wxGrid_GetGridWindow, 465).
--define(wxGrid_GetGridRowLabelWindow, 466).
--define(wxGrid_GetGridColLabelWindow, 467).
--define(wxGrid_GetGridCornerLabelWindow, 468).
--define(wxGrid_HideCellEditControl, 469).
--define(wxGrid_InsertCols, 470).
--define(wxGrid_InsertRows, 471).
--define(wxGrid_IsCellEditControlEnabled, 472).
--define(wxGrid_IsCurrentCellReadOnly, 473).
--define(wxGrid_IsEditable, 474).
--define(wxGrid_IsInSelection_2, 475).
--define(wxGrid_IsInSelection_1, 476).
--define(wxGrid_IsReadOnly, 477).
--define(wxGrid_IsSelection, 478).
--define(wxGrid_IsVisible_3, 479).
--define(wxGrid_IsVisible_2, 480).
--define(wxGrid_MakeCellVisible_2, 481).
--define(wxGrid_MakeCellVisible_1, 482).
--define(wxGrid_MoveCursorDown, 483).
--define(wxGrid_MoveCursorLeft, 484).
--define(wxGrid_MoveCursorRight, 485).
--define(wxGrid_MoveCursorUp, 486).
--define(wxGrid_MoveCursorDownBlock, 487).
--define(wxGrid_MoveCursorLeftBlock, 488).
--define(wxGrid_MoveCursorRightBlock, 489).
--define(wxGrid_MoveCursorUpBlock, 490).
--define(wxGrid_MovePageDown, 491).
--define(wxGrid_MovePageUp, 492).
--define(wxGrid_RegisterDataType, 493).
--define(wxGrid_SaveEditControlValue, 494).
--define(wxGrid_SelectAll, 495).
--define(wxGrid_SelectBlock_5, 496).
--define(wxGrid_SelectBlock_3, 497).
--define(wxGrid_SelectCol, 498).
--define(wxGrid_SelectRow, 499).
--define(wxGrid_SetCellAlignment_4, 500).
--define(wxGrid_SetCellAlignment_3, 501).
--define(wxGrid_SetCellAlignment_1, 502).
--define(wxGrid_SetCellBackgroundColour_3_0, 503).
--define(wxGrid_SetCellBackgroundColour_1, 504).
--define(wxGrid_SetCellBackgroundColour_3_1, 505).
--define(wxGrid_SetCellEditor, 506).
--define(wxGrid_SetCellFont, 507).
--define(wxGrid_SetCellRenderer, 508).
--define(wxGrid_SetCellTextColour_3_0, 509).
--define(wxGrid_SetCellTextColour_3_1, 510).
--define(wxGrid_SetCellTextColour_1, 511).
--define(wxGrid_SetCellValue_3_0, 512).
--define(wxGrid_SetCellValue_2, 513).
--define(wxGrid_SetCellValue_3_1, 514).
--define(wxGrid_SetColAttr, 515).
--define(wxGrid_SetColFormatBool, 516).
--define(wxGrid_SetColFormatNumber, 517).
--define(wxGrid_SetColFormatFloat, 518).
--define(wxGrid_SetColFormatCustom, 519).
--define(wxGrid_SetColLabelAlignment, 520).
--define(wxGrid_SetColLabelSize, 521).
--define(wxGrid_SetColLabelValue, 522).
--define(wxGrid_SetColMinimalWidth, 523).
--define(wxGrid_SetColMinimalAcceptableWidth, 524).
--define(wxGrid_SetColSize, 525).
--define(wxGrid_SetDefaultCellAlignment, 526).
--define(wxGrid_SetDefaultCellBackgroundColour, 527).
--define(wxGrid_SetDefaultCellFont, 528).
--define(wxGrid_SetDefaultCellTextColour, 529).
--define(wxGrid_SetDefaultEditor, 530).
--define(wxGrid_SetDefaultRenderer, 531).
--define(wxGrid_SetDefaultColSize, 532).
--define(wxGrid_SetDefaultRowSize, 533).
--define(wxGrid_SetGridCursor, 534).
--define(wxGrid_SetGridLineColour, 535).
--define(wxGrid_SetLabelBackgroundColour, 536).
--define(wxGrid_SetLabelFont, 537).
--define(wxGrid_SetLabelTextColour, 538).
--define(wxGrid_SetMargins, 539).
--define(wxGrid_SetReadOnly, 540).
--define(wxGrid_SetRowAttr, 541).
--define(wxGrid_SetRowLabelAlignment, 542).
--define(wxGrid_SetRowLabelSize, 543).
--define(wxGrid_SetRowLabelValue, 544).
--define(wxGrid_SetRowMinimalHeight, 545).
--define(wxGrid_SetRowMinimalAcceptableHeight, 546).
--define(wxGrid_SetRowSize, 547).
--define(wxGrid_SetScrollLineX, 548).
--define(wxGrid_SetScrollLineY, 549).
--define(wxGrid_SetSelectionBackground, 550).
--define(wxGrid_SetSelectionForeground, 551).
--define(wxGrid_SetSelectionMode, 552).
--define(wxGrid_ShowCellEditControl, 553).
--define(wxGrid_XToCol, 554).
--define(wxGrid_XToEdgeOfCol, 555).
--define(wxGrid_YToEdgeOfRow, 556).
--define(wxGrid_YToRow, 557).
--define(wxGridCellRenderer_Draw, 558).
--define(wxGridCellRenderer_GetBestSize, 559).
--define(wxGridCellEditor_Create, 560).
--define(wxGridCellEditor_IsCreated, 561).
--define(wxGridCellEditor_SetSize, 562).
--define(wxGridCellEditor_Show, 563).
--define(wxGridCellEditor_PaintBackground, 564).
--define(wxGridCellEditor_BeginEdit, 565).
--define(wxGridCellEditor_EndEdit, 566).
--define(wxGridCellEditor_Reset, 567).
--define(wxGridCellEditor_StartingKey, 568).
--define(wxGridCellEditor_StartingClick, 569).
--define(wxGridCellEditor_HandleReturn, 570).
--define(wxGridCellBoolRenderer_new, 571).
--define(wxGridCellBoolRenderer_destroy, 572).
--define(wxGridCellBoolEditor_new, 573).
--define(wxGridCellBoolEditor_IsTrueValue, 574).
--define(wxGridCellBoolEditor_UseStringValues, 575).
--define(wxGridCellBoolEditor_destroy, 576).
--define(wxGridCellFloatRenderer_new, 577).
--define(wxGridCellFloatRenderer_GetPrecision, 578).
--define(wxGridCellFloatRenderer_GetWidth, 579).
--define(wxGridCellFloatRenderer_SetParameters, 580).
--define(wxGridCellFloatRenderer_SetPrecision, 581).
--define(wxGridCellFloatRenderer_SetWidth, 582).
--define(wxGridCellFloatRenderer_destroy, 583).
--define(wxGridCellFloatEditor_new, 584).
--define(wxGridCellFloatEditor_SetParameters, 585).
--define(wxGridCellFloatEditor_destroy, 586).
--define(wxGridCellStringRenderer_new, 587).
--define(wxGridCellStringRenderer_destroy, 588).
--define(wxGridCellTextEditor_new, 589).
--define(wxGridCellTextEditor_SetParameters, 590).
--define(wxGridCellTextEditor_destroy, 591).
--define(wxGridCellChoiceEditor_new, 593).
--define(wxGridCellChoiceEditor_SetParameters, 594).
--define(wxGridCellChoiceEditor_destroy, 595).
--define(wxGridCellNumberRenderer_new, 596).
--define(wxGridCellNumberRenderer_destroy, 597).
--define(wxGridCellNumberEditor_new, 598).
--define(wxGridCellNumberEditor_GetValue, 599).
--define(wxGridCellNumberEditor_SetParameters, 600).
--define(wxGridCellNumberEditor_destroy, 601).
--define(wxGridCellAttr_SetTextColour, 602).
--define(wxGridCellAttr_SetBackgroundColour, 603).
--define(wxGridCellAttr_SetFont, 604).
--define(wxGridCellAttr_SetAlignment, 605).
--define(wxGridCellAttr_SetReadOnly, 606).
--define(wxGridCellAttr_SetRenderer, 607).
--define(wxGridCellAttr_SetEditor, 608).
--define(wxGridCellAttr_HasTextColour, 609).
--define(wxGridCellAttr_HasBackgroundColour, 610).
--define(wxGridCellAttr_HasFont, 611).
--define(wxGridCellAttr_HasAlignment, 612).
--define(wxGridCellAttr_HasRenderer, 613).
--define(wxGridCellAttr_HasEditor, 614).
--define(wxGridCellAttr_GetTextColour, 615).
--define(wxGridCellAttr_GetBackgroundColour, 616).
--define(wxGridCellAttr_GetFont, 617).
--define(wxGridCellAttr_GetAlignment, 618).
--define(wxGridCellAttr_GetRenderer, 619).
--define(wxGridCellAttr_GetEditor, 620).
--define(wxGridCellAttr_IsReadOnly, 621).
--define(wxGridCellAttr_SetDefAttr, 622).
--define(wxDC_Blit, 623).
--define(wxDC_CalcBoundingBox, 624).
--define(wxDC_Clear, 625).
--define(wxDC_ComputeScaleAndOrigin, 626).
--define(wxDC_CrossHair, 627).
--define(wxDC_DestroyClippingRegion, 628).
--define(wxDC_DeviceToLogicalX, 629).
--define(wxDC_DeviceToLogicalXRel, 630).
--define(wxDC_DeviceToLogicalY, 631).
--define(wxDC_DeviceToLogicalYRel, 632).
--define(wxDC_DrawArc, 633).
--define(wxDC_DrawBitmap, 634).
--define(wxDC_DrawCheckMark, 635).
--define(wxDC_DrawCircle, 636).
--define(wxDC_DrawEllipse_2, 638).
--define(wxDC_DrawEllipse_1, 639).
--define(wxDC_DrawEllipticArc, 640).
--define(wxDC_DrawIcon, 641).
--define(wxDC_DrawLabel, 642).
--define(wxDC_DrawLine, 643).
--define(wxDC_DrawLines, 644).
--define(wxDC_DrawPolygon, 646).
--define(wxDC_DrawPoint, 648).
--define(wxDC_DrawRectangle_2, 650).
--define(wxDC_DrawRectangle_1, 651).
--define(wxDC_DrawRotatedText, 652).
--define(wxDC_DrawRoundedRectangle_3, 654).
--define(wxDC_DrawRoundedRectangle_2, 655).
--define(wxDC_DrawText, 656).
--define(wxDC_EndDoc, 657).
--define(wxDC_EndPage, 658).
--define(wxDC_FloodFill, 659).
--define(wxDC_GetBackground, 660).
--define(wxDC_GetBackgroundMode, 661).
--define(wxDC_GetBrush, 662).
--define(wxDC_GetCharHeight, 663).
--define(wxDC_GetCharWidth, 664).
--define(wxDC_GetClippingBox, 665).
--define(wxDC_GetFont, 667).
--define(wxDC_GetLayoutDirection, 668).
--define(wxDC_GetLogicalFunction, 669).
--define(wxDC_GetMapMode, 670).
--define(wxDC_GetMultiLineTextExtent_4, 671).
--define(wxDC_GetMultiLineTextExtent_1, 672).
--define(wxDC_GetPartialTextExtents, 673).
--define(wxDC_GetPen, 674).
--define(wxDC_GetPixel, 675).
--define(wxDC_GetPPI, 676).
--define(wxDC_GetSize, 678).
--define(wxDC_GetSizeMM, 680).
--define(wxDC_GetTextBackground, 681).
--define(wxDC_GetTextExtent_4, 682).
--define(wxDC_GetTextExtent_1, 683).
--define(wxDC_GetTextForeground, 685).
--define(wxDC_GetUserScale, 686).
--define(wxDC_GradientFillConcentric_3, 687).
--define(wxDC_GradientFillConcentric_4, 688).
--define(wxDC_GradientFillLinear, 689).
--define(wxDC_LogicalToDeviceX, 690).
--define(wxDC_LogicalToDeviceXRel, 691).
--define(wxDC_LogicalToDeviceY, 692).
--define(wxDC_LogicalToDeviceYRel, 693).
--define(wxDC_MaxX, 694).
--define(wxDC_MaxY, 695).
--define(wxDC_MinX, 696).
--define(wxDC_MinY, 697).
--define(wxDC_IsOk, 698).
--define(wxDC_ResetBoundingBox, 699).
--define(wxDC_SetAxisOrientation, 700).
--define(wxDC_SetBackground, 701).
--define(wxDC_SetBackgroundMode, 702).
--define(wxDC_SetBrush, 703).
--define(wxDC_SetClippingRegion_2, 705).
--define(wxDC_SetClippingRegion_1_1, 706).
--define(wxDC_SetClippingRegion_1_0, 707).
--define(wxDC_SetDeviceOrigin, 708).
--define(wxDC_SetFont, 709).
--define(wxDC_SetLayoutDirection, 710).
--define(wxDC_SetLogicalFunction, 711).
--define(wxDC_SetMapMode, 712).
--define(wxDC_SetPalette, 713).
--define(wxDC_SetPen, 714).
--define(wxDC_SetTextBackground, 715).
--define(wxDC_SetTextForeground, 716).
--define(wxDC_SetUserScale, 717).
--define(wxDC_StartDoc, 718).
--define(wxDC_StartPage, 719).
--define(wxMirrorDC_new, 720).
--define(wxMirrorDC_destroy, 721).
--define(wxScreenDC_new, 722).
--define(wxScreenDC_destruct, 723).
--define(wxPostScriptDC_new_0, 724).
--define(wxPostScriptDC_new_1, 725).
--define(wxPostScriptDC_destruct, 726).
--define(wxPostScriptDC_SetResolution, 727).
--define(wxPostScriptDC_GetResolution, 728).
--define(wxWindowDC_new_0, 729).
--define(wxWindowDC_new_1, 730).
--define(wxWindowDC_destruct, 731).
--define(wxClientDC_new_0, 732).
--define(wxClientDC_new_1, 733).
--define(wxClientDC_destroy, 734).
--define(wxPaintDC_new_0, 735).
--define(wxPaintDC_new_1, 736).
--define(wxPaintDC_destroy, 737).
--define(wxMemoryDC_new_1_0, 739).
--define(wxMemoryDC_new_1_1, 740).
--define(wxMemoryDC_new_0, 741).
--define(wxMemoryDC_destruct, 743).
--define(wxMemoryDC_SelectObject, 744).
--define(wxMemoryDC_SelectObjectAsSource, 745).
--define(wxBufferedDC_new_0, 746).
--define(wxBufferedDC_new_2, 747).
--define(wxBufferedDC_new_3, 748).
--define(wxBufferedDC_destruct, 749).
--define(wxBufferedDC_Init_2, 750).
--define(wxBufferedDC_Init_3, 751).
--define(wxBufferedPaintDC_new_3, 752).
--define(wxBufferedPaintDC_new_2, 753).
--define(wxBufferedPaintDC_destruct, 754).
--define(wxGraphicsObject_destruct, 755).
--define(wxGraphicsObject_GetRenderer, 756).
--define(wxGraphicsObject_IsNull, 757).
--define(wxGraphicsContext_destruct, 758).
--define(wxGraphicsContext_Create_1_1, 759).
--define(wxGraphicsContext_Create_1_0, 760).
--define(wxGraphicsContext_Create_0, 761).
--define(wxGraphicsContext_CreatePen, 762).
--define(wxGraphicsContext_CreateBrush, 763).
--define(wxGraphicsContext_CreateRadialGradientBrush, 764).
--define(wxGraphicsContext_CreateLinearGradientBrush, 765).
--define(wxGraphicsContext_CreateFont, 766).
--define(wxGraphicsContext_CreateMatrix, 767).
--define(wxGraphicsContext_CreatePath, 768).
--define(wxGraphicsContext_Clip_1, 769).
--define(wxGraphicsContext_Clip_4, 770).
--define(wxGraphicsContext_ResetClip, 771).
--define(wxGraphicsContext_DrawBitmap, 772).
--define(wxGraphicsContext_DrawEllipse, 773).
--define(wxGraphicsContext_DrawIcon, 774).
--define(wxGraphicsContext_DrawLines, 775).
--define(wxGraphicsContext_DrawPath, 776).
--define(wxGraphicsContext_DrawRectangle, 777).
--define(wxGraphicsContext_DrawRoundedRectangle, 778).
--define(wxGraphicsContext_DrawText_3, 779).
--define(wxGraphicsContext_DrawText_4_0, 780).
--define(wxGraphicsContext_DrawText_4_1, 781).
--define(wxGraphicsContext_DrawText_5, 782).
--define(wxGraphicsContext_FillPath, 783).
--define(wxGraphicsContext_StrokePath, 784).
--define(wxGraphicsContext_GetPartialTextExtents, 785).
--define(wxGraphicsContext_GetTextExtent, 786).
--define(wxGraphicsContext_Rotate, 787).
--define(wxGraphicsContext_Scale, 788).
--define(wxGraphicsContext_Translate, 789).
--define(wxGraphicsContext_GetTransform, 790).
--define(wxGraphicsContext_SetTransform, 791).
--define(wxGraphicsContext_ConcatTransform, 792).
--define(wxGraphicsContext_SetBrush_1_1, 793).
--define(wxGraphicsContext_SetBrush_1_0, 794).
--define(wxGraphicsContext_SetFont_1, 795).
--define(wxGraphicsContext_SetFont_2, 796).
--define(wxGraphicsContext_SetPen_1_0, 797).
--define(wxGraphicsContext_SetPen_1_1, 798).
--define(wxGraphicsContext_StrokeLine, 799).
--define(wxGraphicsContext_StrokeLines, 800).
--define(wxGraphicsMatrix_Concat, 802).
--define(wxGraphicsMatrix_Get, 804).
--define(wxGraphicsMatrix_Invert, 805).
--define(wxGraphicsMatrix_IsEqual, 806).
--define(wxGraphicsMatrix_IsIdentity, 808).
--define(wxGraphicsMatrix_Rotate, 809).
--define(wxGraphicsMatrix_Scale, 810).
--define(wxGraphicsMatrix_Translate, 811).
--define(wxGraphicsMatrix_Set, 812).
--define(wxGraphicsMatrix_TransformPoint, 813).
--define(wxGraphicsMatrix_TransformDistance, 814).
--define(wxGraphicsPath_MoveToPoint_2, 815).
--define(wxGraphicsPath_MoveToPoint_1, 816).
--define(wxGraphicsPath_AddArc_6, 817).
--define(wxGraphicsPath_AddArc_5, 818).
--define(wxGraphicsPath_AddArcToPoint, 819).
--define(wxGraphicsPath_AddCircle, 820).
--define(wxGraphicsPath_AddCurveToPoint_6, 821).
--define(wxGraphicsPath_AddCurveToPoint_3, 822).
--define(wxGraphicsPath_AddEllipse, 823).
--define(wxGraphicsPath_AddLineToPoint_2, 824).
--define(wxGraphicsPath_AddLineToPoint_1, 825).
--define(wxGraphicsPath_AddPath, 826).
--define(wxGraphicsPath_AddQuadCurveToPoint, 827).
--define(wxGraphicsPath_AddRectangle, 828).
--define(wxGraphicsPath_AddRoundedRectangle, 829).
--define(wxGraphicsPath_CloseSubpath, 830).
--define(wxGraphicsPath_Contains_3, 831).
--define(wxGraphicsPath_Contains_2, 832).
--define(wxGraphicsPath_GetBox, 834).
--define(wxGraphicsPath_GetCurrentPoint, 836).
--define(wxGraphicsPath_Transform, 837).
--define(wxGraphicsRenderer_GetDefaultRenderer, 838).
--define(wxGraphicsRenderer_CreateContext_1_1, 839).
--define(wxGraphicsRenderer_CreateContext_1_0, 840).
--define(wxGraphicsRenderer_CreatePen, 841).
--define(wxGraphicsRenderer_CreateBrush, 842).
--define(wxGraphicsRenderer_CreateLinearGradientBrush, 843).
--define(wxGraphicsRenderer_CreateRadialGradientBrush, 844).
--define(wxGraphicsRenderer_CreateFont, 845).
--define(wxGraphicsRenderer_CreateMatrix, 846).
--define(wxGraphicsRenderer_CreatePath, 847).
--define(wxMenuBar_new_1, 849).
--define(wxMenuBar_new_0, 851).
--define(wxMenuBar_destruct, 853).
--define(wxMenuBar_Append, 854).
--define(wxMenuBar_Check, 855).
--define(wxMenuBar_Enable_2, 856).
--define(wxMenuBar_Enable_1, 857).
--define(wxMenuBar_EnableTop, 858).
--define(wxMenuBar_FindMenu, 859).
--define(wxMenuBar_FindMenuItem, 860).
--define(wxMenuBar_FindItem, 861).
--define(wxMenuBar_GetHelpString, 862).
--define(wxMenuBar_GetLabel_1, 863).
--define(wxMenuBar_GetLabel_0, 864).
--define(wxMenuBar_GetLabelTop, 865).
--define(wxMenuBar_GetMenu, 866).
--define(wxMenuBar_GetMenuCount, 867).
--define(wxMenuBar_Insert, 868).
--define(wxMenuBar_IsChecked, 869).
--define(wxMenuBar_IsEnabled_1, 870).
--define(wxMenuBar_IsEnabled_0, 871).
--define(wxMenuBar_Remove, 872).
--define(wxMenuBar_Replace, 873).
--define(wxMenuBar_SetHelpString, 874).
--define(wxMenuBar_SetLabel_2, 875).
--define(wxMenuBar_SetLabel_1, 876).
--define(wxMenuBar_SetLabelTop, 877).
--define(wxControl_GetLabel, 878).
--define(wxControl_SetLabel, 879).
--define(wxControlWithItems_Append_1, 880).
--define(wxControlWithItems_Append_2, 881).
--define(wxControlWithItems_appendStrings_1, 882).
--define(wxControlWithItems_Clear, 883).
--define(wxControlWithItems_Delete, 884).
--define(wxControlWithItems_FindString, 885).
--define(wxControlWithItems_getClientData, 886).
--define(wxControlWithItems_setClientData, 887).
--define(wxControlWithItems_GetCount, 888).
--define(wxControlWithItems_GetSelection, 889).
--define(wxControlWithItems_GetString, 890).
--define(wxControlWithItems_GetStringSelection, 891).
--define(wxControlWithItems_Insert_2, 892).
--define(wxControlWithItems_Insert_3, 893).
--define(wxControlWithItems_IsEmpty, 894).
--define(wxControlWithItems_Select, 895).
--define(wxControlWithItems_SetSelection, 896).
--define(wxControlWithItems_SetString, 897).
--define(wxControlWithItems_SetStringSelection, 898).
--define(wxMenu_new_2, 901).
--define(wxMenu_new_1, 902).
--define(wxMenu_destruct, 904).
--define(wxMenu_Append_3, 905).
--define(wxMenu_Append_1, 906).
--define(wxMenu_Append_4_0, 907).
--define(wxMenu_Append_4_1, 908).
--define(wxMenu_AppendCheckItem, 909).
--define(wxMenu_AppendRadioItem, 910).
--define(wxMenu_AppendSeparator, 911).
--define(wxMenu_Break, 912).
--define(wxMenu_Check, 913).
--define(wxMenu_Delete_1_0, 914).
--define(wxMenu_Delete_1_1, 915).
--define(wxMenu_Destroy_1_0, 916).
--define(wxMenu_Destroy_1_1, 917).
--define(wxMenu_Enable, 918).
--define(wxMenu_FindItem_1, 919).
--define(wxMenu_FindItem_2, 920).
--define(wxMenu_FindItemByPosition, 921).
--define(wxMenu_GetHelpString, 922).
--define(wxMenu_GetLabel, 923).
--define(wxMenu_GetMenuItemCount, 924).
--define(wxMenu_GetMenuItems, 925).
--define(wxMenu_GetTitle, 927).
--define(wxMenu_Insert_2, 928).
--define(wxMenu_Insert_3, 929).
--define(wxMenu_Insert_5_1, 930).
--define(wxMenu_Insert_5_0, 931).
--define(wxMenu_InsertCheckItem, 932).
--define(wxMenu_InsertRadioItem, 933).
--define(wxMenu_InsertSeparator, 934).
--define(wxMenu_IsChecked, 935).
--define(wxMenu_IsEnabled, 936).
--define(wxMenu_Prepend_1, 937).
--define(wxMenu_Prepend_2, 938).
--define(wxMenu_Prepend_4_1, 939).
--define(wxMenu_Prepend_4_0, 940).
--define(wxMenu_PrependCheckItem, 941).
--define(wxMenu_PrependRadioItem, 942).
--define(wxMenu_PrependSeparator, 943).
--define(wxMenu_Remove_1_0, 944).
--define(wxMenu_Remove_1_1, 945).
--define(wxMenu_SetHelpString, 946).
--define(wxMenu_SetLabel, 947).
--define(wxMenu_SetTitle, 948).
--define(wxMenuItem_new, 949).
--define(wxMenuItem_destruct, 951).
--define(wxMenuItem_Check, 952).
--define(wxMenuItem_Enable, 953).
--define(wxMenuItem_GetBitmap, 954).
--define(wxMenuItem_GetHelp, 955).
--define(wxMenuItem_GetId, 956).
--define(wxMenuItem_GetKind, 957).
--define(wxMenuItem_GetLabel, 958).
--define(wxMenuItem_GetLabelFromText, 959).
--define(wxMenuItem_GetMenu, 960).
--define(wxMenuItem_GetText, 961).
--define(wxMenuItem_GetSubMenu, 962).
--define(wxMenuItem_IsCheckable, 963).
--define(wxMenuItem_IsChecked, 964).
--define(wxMenuItem_IsEnabled, 965).
--define(wxMenuItem_IsSeparator, 966).
--define(wxMenuItem_IsSubMenu, 967).
--define(wxMenuItem_SetBitmap, 968).
--define(wxMenuItem_SetHelp, 969).
--define(wxMenuItem_SetMenu, 970).
--define(wxMenuItem_SetSubMenu, 971).
--define(wxMenuItem_SetText, 972).
--define(wxToolBar_AddControl, 973).
--define(wxToolBar_AddSeparator, 974).
--define(wxToolBar_AddTool_5, 975).
--define(wxToolBar_AddTool_4_0, 976).
--define(wxToolBar_AddTool_1, 977).
--define(wxToolBar_AddTool_4_1, 978).
--define(wxToolBar_AddTool_3, 979).
--define(wxToolBar_AddTool_6, 980).
--define(wxToolBar_AddCheckTool, 981).
--define(wxToolBar_AddRadioTool, 982).
--define(wxToolBar_DeleteTool, 983).
--define(wxToolBar_DeleteToolByPos, 984).
--define(wxToolBar_EnableTool, 985).
--define(wxToolBar_FindById, 986).
--define(wxToolBar_FindControl, 987).
--define(wxToolBar_FindToolForPosition, 988).
--define(wxToolBar_GetToolSize, 989).
--define(wxToolBar_GetToolBitmapSize, 990).
--define(wxToolBar_GetMargins, 991).
--define(wxToolBar_GetToolEnabled, 992).
--define(wxToolBar_GetToolLongHelp, 993).
--define(wxToolBar_GetToolPacking, 994).
--define(wxToolBar_GetToolPos, 995).
--define(wxToolBar_GetToolSeparation, 996).
--define(wxToolBar_GetToolShortHelp, 997).
--define(wxToolBar_GetToolState, 998).
--define(wxToolBar_InsertControl, 999).
--define(wxToolBar_InsertSeparator, 1000).
--define(wxToolBar_InsertTool_5, 1001).
--define(wxToolBar_InsertTool_2, 1002).
--define(wxToolBar_InsertTool_4, 1003).
--define(wxToolBar_Realize, 1004).
--define(wxToolBar_RemoveTool, 1005).
--define(wxToolBar_SetMargins, 1006).
--define(wxToolBar_SetToolBitmapSize, 1007).
--define(wxToolBar_SetToolLongHelp, 1008).
--define(wxToolBar_SetToolPacking, 1009).
--define(wxToolBar_SetToolShortHelp, 1010).
--define(wxToolBar_SetToolSeparation, 1011).
--define(wxToolBar_ToggleTool, 1012).
--define(wxStatusBar_new_0, 1014).
--define(wxStatusBar_new_2, 1015).
--define(wxStatusBar_destruct, 1017).
--define(wxStatusBar_Create, 1018).
--define(wxStatusBar_GetFieldRect, 1019).
--define(wxStatusBar_GetFieldsCount, 1020).
--define(wxStatusBar_GetStatusText, 1021).
--define(wxStatusBar_PopStatusText, 1022).
--define(wxStatusBar_PushStatusText, 1023).
--define(wxStatusBar_SetFieldsCount, 1024).
--define(wxStatusBar_SetMinHeight, 1025).
--define(wxStatusBar_SetStatusText, 1026).
--define(wxStatusBar_SetStatusWidths, 1027).
--define(wxStatusBar_SetStatusStyles, 1028).
--define(wxBitmap_new_0, 1029).
--define(wxBitmap_new_3, 1030).
--define(wxBitmap_new_4, 1031).
--define(wxBitmap_new_2_0, 1032).
--define(wxBitmap_new_2_1, 1033).
--define(wxBitmap_destruct, 1034).
--define(wxBitmap_ConvertToImage, 1035).
--define(wxBitmap_CopyFromIcon, 1036).
--define(wxBitmap_Create, 1037).
--define(wxBitmap_GetDepth, 1038).
--define(wxBitmap_GetHeight, 1039).
--define(wxBitmap_GetPalette, 1040).
--define(wxBitmap_GetMask, 1041).
--define(wxBitmap_GetWidth, 1042).
--define(wxBitmap_GetSubBitmap, 1043).
--define(wxBitmap_LoadFile, 1044).
--define(wxBitmap_Ok, 1045).
--define(wxBitmap_SaveFile, 1046).
--define(wxBitmap_SetDepth, 1047).
--define(wxBitmap_SetHeight, 1048).
--define(wxBitmap_SetMask, 1049).
--define(wxBitmap_SetPalette, 1050).
--define(wxBitmap_SetWidth, 1051).
--define(wxIcon_new_0, 1052).
--define(wxIcon_new_2, 1053).
--define(wxIcon_new_1, 1054).
--define(wxIcon_CopyFromBitmap, 1055).
--define(wxIcon_destroy, 1056).
--define(wxIconBundle_new_0, 1057).
--define(wxIconBundle_new_2, 1058).
--define(wxIconBundle_new_1_0, 1059).
--define(wxIconBundle_new_1_1, 1060).
--define(wxIconBundle_destruct, 1061).
--define(wxIconBundle_AddIcon_2, 1062).
--define(wxIconBundle_AddIcon_1, 1063).
--define(wxIconBundle_GetIcon_1_1, 1064).
--define(wxIconBundle_GetIcon_1_0, 1065).
--define(wxCursor_new_0, 1066).
--define(wxCursor_new_1_0, 1067).
--define(wxCursor_new_1_1, 1068).
--define(wxCursor_new_4, 1069).
--define(wxCursor_destruct, 1070).
--define(wxCursor_Ok, 1071).
--define(wxMask_new_0, 1072).
--define(wxMask_new_2_1, 1073).
--define(wxMask_new_2_0, 1074).
--define(wxMask_new_1, 1075).
--define(wxMask_destruct, 1076).
--define(wxMask_Create_2_1, 1077).
--define(wxMask_Create_2_0, 1078).
--define(wxMask_Create_1, 1079).
--define(wxImage_new_0, 1080).
--define(wxImage_new_3_0, 1081).
--define(wxImage_new_4, 1082).
--define(wxImage_new_5, 1083).
--define(wxImage_new_2, 1084).
--define(wxImage_new_3_1, 1085).
--define(wxImage_Blur, 1086).
--define(wxImage_BlurHorizontal, 1087).
--define(wxImage_BlurVertical, 1088).
--define(wxImage_ConvertAlphaToMask, 1089).
--define(wxImage_ConvertToGreyscale, 1090).
--define(wxImage_ConvertToMono, 1091).
--define(wxImage_Copy, 1092).
--define(wxImage_Create_3, 1093).
--define(wxImage_Create_4, 1094).
--define(wxImage_Create_5, 1095).
--define(wxImage_Destroy, 1096).
--define(wxImage_FindFirstUnusedColour, 1097).
--define(wxImage_GetImageExtWildcard, 1098).
--define(wxImage_GetAlpha_2, 1099).
--define(wxImage_GetAlpha_0, 1100).
--define(wxImage_GetBlue, 1101).
--define(wxImage_GetData, 1102).
--define(wxImage_GetGreen, 1103).
--define(wxImage_GetImageCount, 1104).
--define(wxImage_GetHeight, 1105).
--define(wxImage_GetMaskBlue, 1106).
--define(wxImage_GetMaskGreen, 1107).
--define(wxImage_GetMaskRed, 1108).
--define(wxImage_GetOrFindMaskColour, 1109).
--define(wxImage_GetPalette, 1110).
--define(wxImage_GetRed, 1111).
--define(wxImage_GetSubImage, 1112).
--define(wxImage_GetWidth, 1113).
--define(wxImage_HasAlpha, 1114).
--define(wxImage_HasMask, 1115).
--define(wxImage_GetOption, 1116).
--define(wxImage_GetOptionInt, 1117).
--define(wxImage_HasOption, 1118).
--define(wxImage_InitAlpha, 1119).
--define(wxImage_InitStandardHandlers, 1120).
--define(wxImage_IsTransparent, 1121).
--define(wxImage_LoadFile_2, 1122).
--define(wxImage_LoadFile_3, 1123).
--define(wxImage_Ok, 1124).
--define(wxImage_RemoveHandler, 1125).
--define(wxImage_Mirror, 1126).
--define(wxImage_Replace, 1127).
--define(wxImage_Rescale, 1128).
--define(wxImage_Resize, 1129).
--define(wxImage_Rotate, 1130).
--define(wxImage_RotateHue, 1131).
--define(wxImage_Rotate90, 1132).
--define(wxImage_SaveFile_1, 1133).
--define(wxImage_SaveFile_2_0, 1134).
--define(wxImage_SaveFile_2_1, 1135).
--define(wxImage_Scale, 1136).
--define(wxImage_Size, 1137).
--define(wxImage_SetAlpha_3, 1138).
--define(wxImage_SetAlpha_2, 1139).
--define(wxImage_SetData_2, 1140).
--define(wxImage_SetData_4, 1141).
--define(wxImage_SetMask, 1142).
--define(wxImage_SetMaskColour, 1143).
--define(wxImage_SetMaskFromImage, 1144).
--define(wxImage_SetOption_2_1, 1145).
--define(wxImage_SetOption_2_0, 1146).
--define(wxImage_SetPalette, 1147).
--define(wxImage_SetRGB_5, 1148).
--define(wxImage_SetRGB_4, 1149).
--define(wxImage_destroy, 1150).
--define(wxBrush_new_0, 1151).
--define(wxBrush_new_2, 1152).
--define(wxBrush_new_1, 1153).
--define(wxBrush_destruct, 1155).
--define(wxBrush_GetColour, 1156).
--define(wxBrush_GetStipple, 1157).
--define(wxBrush_GetStyle, 1158).
--define(wxBrush_IsHatch, 1159).
--define(wxBrush_IsOk, 1160).
--define(wxBrush_SetColour_1, 1161).
--define(wxBrush_SetColour_3, 1162).
--define(wxBrush_SetStipple, 1163).
--define(wxBrush_SetStyle, 1164).
--define(wxPen_new_0, 1165).
--define(wxPen_new_2, 1166).
--define(wxPen_destruct, 1167).
--define(wxPen_GetCap, 1168).
--define(wxPen_GetColour, 1169).
--define(wxPen_GetJoin, 1170).
--define(wxPen_GetStyle, 1171).
--define(wxPen_GetWidth, 1172).
--define(wxPen_IsOk, 1173).
--define(wxPen_SetCap, 1174).
--define(wxPen_SetColour_1, 1175).
--define(wxPen_SetColour_3, 1176).
--define(wxPen_SetJoin, 1177).
--define(wxPen_SetStyle, 1178).
--define(wxPen_SetWidth, 1179).
--define(wxRegion_new_0, 1180).
--define(wxRegion_new_4, 1181).
--define(wxRegion_new_2, 1182).
--define(wxRegion_new_1_1, 1183).
--define(wxRegion_new_1_0, 1185).
--define(wxRegion_destruct, 1187).
--define(wxRegion_Clear, 1188).
--define(wxRegion_Contains_2, 1189).
--define(wxRegion_Contains_1_0, 1190).
--define(wxRegion_Contains_4, 1191).
--define(wxRegion_Contains_1_1, 1192).
--define(wxRegion_ConvertToBitmap, 1193).
--define(wxRegion_GetBox, 1194).
--define(wxRegion_Intersect_4, 1195).
--define(wxRegion_Intersect_1_1, 1196).
--define(wxRegion_Intersect_1_0, 1197).
--define(wxRegion_IsEmpty, 1198).
--define(wxRegion_Subtract_4, 1199).
--define(wxRegion_Subtract_1_1, 1200).
--define(wxRegion_Subtract_1_0, 1201).
--define(wxRegion_Offset_2, 1202).
--define(wxRegion_Offset_1, 1203).
--define(wxRegion_Union_4, 1204).
--define(wxRegion_Union_1_2, 1205).
--define(wxRegion_Union_1_1, 1206).
--define(wxRegion_Union_1_0, 1207).
--define(wxRegion_Union_3, 1208).
--define(wxRegion_Xor_4, 1209).
--define(wxRegion_Xor_1_1, 1210).
--define(wxRegion_Xor_1_0, 1211).
--define(wxAcceleratorTable_new_0, 1212).
--define(wxAcceleratorTable_new_2, 1213).
--define(wxAcceleratorTable_destruct, 1214).
--define(wxAcceleratorTable_Ok, 1215).
--define(wxAcceleratorEntry_new_1_0, 1216).
--define(wxAcceleratorEntry_new_1_1, 1217).
--define(wxAcceleratorEntry_GetCommand, 1218).
--define(wxAcceleratorEntry_GetFlags, 1219).
--define(wxAcceleratorEntry_GetKeyCode, 1220).
--define(wxAcceleratorEntry_Set, 1221).
--define(wxAcceleratorEntry_destroy, 1222).
--define(wxCaret_new_3, 1227).
--define(wxCaret_new_2, 1228).
--define(wxCaret_destruct, 1230).
--define(wxCaret_Create_3, 1231).
--define(wxCaret_Create_2, 1232).
--define(wxCaret_GetBlinkTime, 1233).
--define(wxCaret_GetPosition, 1235).
--define(wxCaret_GetSize, 1237).
--define(wxCaret_GetWindow, 1238).
--define(wxCaret_Hide, 1239).
--define(wxCaret_IsOk, 1240).
--define(wxCaret_IsVisible, 1241).
--define(wxCaret_Move_2, 1242).
--define(wxCaret_Move_1, 1243).
--define(wxCaret_SetBlinkTime, 1244).
--define(wxCaret_SetSize_2, 1245).
--define(wxCaret_SetSize_1, 1246).
--define(wxCaret_Show, 1247).
--define(wxSizer_Add_2_1, 1248).
--define(wxSizer_Add_2_0, 1249).
--define(wxSizer_Add_3, 1250).
--define(wxSizer_Add_2_3, 1251).
--define(wxSizer_Add_2_2, 1252).
--define(wxSizer_AddSpacer, 1253).
--define(wxSizer_AddStretchSpacer, 1254).
--define(wxSizer_CalcMin, 1255).
--define(wxSizer_Clear, 1256).
--define(wxSizer_Detach_1_2, 1257).
--define(wxSizer_Detach_1_1, 1258).
--define(wxSizer_Detach_1_0, 1259).
--define(wxSizer_Fit, 1260).
--define(wxSizer_FitInside, 1261).
--define(wxSizer_GetChildren, 1262).
--define(wxSizer_GetItem_2_1, 1263).
--define(wxSizer_GetItem_2_0, 1264).
--define(wxSizer_GetItem_1, 1265).
--define(wxSizer_GetSize, 1266).
--define(wxSizer_GetPosition, 1267).
--define(wxSizer_GetMinSize, 1268).
--define(wxSizer_Hide_2_0, 1269).
--define(wxSizer_Hide_2_1, 1270).
--define(wxSizer_Hide_1, 1271).
--define(wxSizer_Insert_3_1, 1272).
--define(wxSizer_Insert_3_0, 1273).
--define(wxSizer_Insert_4, 1274).
--define(wxSizer_Insert_3_3, 1275).
--define(wxSizer_Insert_3_2, 1276).
--define(wxSizer_Insert_2, 1277).
--define(wxSizer_InsertSpacer, 1278).
--define(wxSizer_InsertStretchSpacer, 1279).
--define(wxSizer_IsShown_1_2, 1280).
--define(wxSizer_IsShown_1_1, 1281).
--define(wxSizer_IsShown_1_0, 1282).
--define(wxSizer_Layout, 1283).
--define(wxSizer_Prepend_2_1, 1284).
--define(wxSizer_Prepend_2_0, 1285).
--define(wxSizer_Prepend_3, 1286).
--define(wxSizer_Prepend_2_3, 1287).
--define(wxSizer_Prepend_2_2, 1288).
--define(wxSizer_Prepend_1, 1289).
--define(wxSizer_PrependSpacer, 1290).
--define(wxSizer_PrependStretchSpacer, 1291).
--define(wxSizer_RecalcSizes, 1292).
--define(wxSizer_Remove_1_1, 1293).
--define(wxSizer_Remove_1_0, 1294).
--define(wxSizer_Replace_3_1, 1295).
--define(wxSizer_Replace_3_0, 1296).
--define(wxSizer_Replace_2, 1297).
--define(wxSizer_SetDimension, 1298).
--define(wxSizer_SetMinSize_2, 1299).
--define(wxSizer_SetMinSize_1, 1300).
--define(wxSizer_SetItemMinSize_3_2, 1301).
--define(wxSizer_SetItemMinSize_2_2, 1302).
--define(wxSizer_SetItemMinSize_3_1, 1303).
--define(wxSizer_SetItemMinSize_2_1, 1304).
--define(wxSizer_SetItemMinSize_3_0, 1305).
--define(wxSizer_SetItemMinSize_2_0, 1306).
--define(wxSizer_SetSizeHints, 1307).
--define(wxSizer_SetVirtualSizeHints, 1308).
--define(wxSizer_Show_2_2, 1309).
--define(wxSizer_Show_2_1, 1310).
--define(wxSizer_Show_2_0, 1311).
--define(wxSizer_Show_1, 1312).
--define(wxSizerFlags_new, 1313).
--define(wxSizerFlags_Align, 1314).
--define(wxSizerFlags_Border_2, 1315).
--define(wxSizerFlags_Border_1, 1316).
--define(wxSizerFlags_Center, 1317).
--define(wxSizerFlags_Centre, 1318).
--define(wxSizerFlags_Expand, 1319).
--define(wxSizerFlags_Left, 1320).
--define(wxSizerFlags_Proportion, 1321).
--define(wxSizerFlags_Right, 1322).
--define(wxSizerFlags_destroy, 1323).
--define(wxSizerItem_new_5_1, 1324).
--define(wxSizerItem_new_2_1, 1325).
--define(wxSizerItem_new_5_0, 1326).
--define(wxSizerItem_new_2_0, 1327).
--define(wxSizerItem_new_6, 1328).
--define(wxSizerItem_new_3, 1329).
--define(wxSizerItem_new_0, 1330).
--define(wxSizerItem_destruct, 1331).
--define(wxSizerItem_CalcMin, 1332).
--define(wxSizerItem_DeleteWindows, 1333).
--define(wxSizerItem_DetachSizer, 1334).
--define(wxSizerItem_GetBorder, 1335).
--define(wxSizerItem_GetFlag, 1336).
--define(wxSizerItem_GetMinSize, 1337).
--define(wxSizerItem_GetPosition, 1338).
--define(wxSizerItem_GetProportion, 1339).
--define(wxSizerItem_GetRatio, 1340).
--define(wxSizerItem_GetRect, 1341).
--define(wxSizerItem_GetSize, 1342).
--define(wxSizerItem_GetSizer, 1343).
--define(wxSizerItem_GetSpacer, 1344).
--define(wxSizerItem_GetUserData, 1345).
--define(wxSizerItem_GetWindow, 1346).
--define(wxSizerItem_IsSizer, 1347).
--define(wxSizerItem_IsShown, 1348).
--define(wxSizerItem_IsSpacer, 1349).
--define(wxSizerItem_IsWindow, 1350).
--define(wxSizerItem_SetBorder, 1351).
--define(wxSizerItem_SetDimension, 1352).
--define(wxSizerItem_SetFlag, 1353).
--define(wxSizerItem_SetInitSize, 1354).
--define(wxSizerItem_SetMinSize_1, 1355).
--define(wxSizerItem_SetMinSize_2, 1356).
--define(wxSizerItem_SetProportion, 1357).
--define(wxSizerItem_SetRatio_2, 1358).
--define(wxSizerItem_SetRatio_1_1, 1359).
--define(wxSizerItem_SetRatio_1_0, 1360).
--define(wxSizerItem_SetSizer, 1361).
--define(wxSizerItem_SetSpacer_1, 1362).
--define(wxSizerItem_SetSpacer_2, 1363).
--define(wxSizerItem_SetWindow, 1364).
--define(wxSizerItem_Show, 1365).
--define(wxBoxSizer_new, 1366).
--define(wxBoxSizer_GetOrientation, 1367).
--define(wxBoxSizer_destroy, 1368).
--define(wxStaticBoxSizer_new_2, 1369).
--define(wxStaticBoxSizer_new_3, 1370).
--define(wxStaticBoxSizer_GetStaticBox, 1371).
--define(wxStaticBoxSizer_destroy, 1372).
--define(wxGridSizer_new_4, 1373).
--define(wxGridSizer_new_2, 1374).
--define(wxGridSizer_GetCols, 1375).
--define(wxGridSizer_GetHGap, 1376).
--define(wxGridSizer_GetRows, 1377).
--define(wxGridSizer_GetVGap, 1378).
--define(wxGridSizer_SetCols, 1379).
--define(wxGridSizer_SetHGap, 1380).
--define(wxGridSizer_SetRows, 1381).
--define(wxGridSizer_SetVGap, 1382).
--define(wxGridSizer_destroy, 1383).
--define(wxFlexGridSizer_new_4, 1384).
--define(wxFlexGridSizer_new_2, 1385).
--define(wxFlexGridSizer_AddGrowableCol, 1386).
--define(wxFlexGridSizer_AddGrowableRow, 1387).
--define(wxFlexGridSizer_GetFlexibleDirection, 1388).
--define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1389).
--define(wxFlexGridSizer_RemoveGrowableCol, 1390).
--define(wxFlexGridSizer_RemoveGrowableRow, 1391).
--define(wxFlexGridSizer_SetFlexibleDirection, 1392).
--define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1393).
--define(wxFlexGridSizer_destroy, 1394).
--define(wxGridBagSizer_new, 1395).
--define(wxGridBagSizer_Add_3_2, 1396).
--define(wxGridBagSizer_Add_3_1, 1397).
--define(wxGridBagSizer_Add_4, 1398).
--define(wxGridBagSizer_Add_1_0, 1399).
--define(wxGridBagSizer_Add_2_1, 1400).
--define(wxGridBagSizer_Add_2_0, 1401).
--define(wxGridBagSizer_Add_3_0, 1402).
--define(wxGridBagSizer_Add_1_1, 1403).
--define(wxGridBagSizer_CalcMin, 1404).
--define(wxGridBagSizer_CheckForIntersection_2, 1405).
--define(wxGridBagSizer_CheckForIntersection_3, 1406).
--define(wxGridBagSizer_FindItem_1_1, 1407).
--define(wxGridBagSizer_FindItem_1_0, 1408).
--define(wxGridBagSizer_FindItemAtPoint, 1409).
--define(wxGridBagSizer_FindItemAtPosition, 1410).
--define(wxGridBagSizer_FindItemWithData, 1411).
--define(wxGridBagSizer_GetCellSize, 1412).
--define(wxGridBagSizer_GetEmptyCellSize, 1413).
--define(wxGridBagSizer_GetItemPosition_1_2, 1414).
--define(wxGridBagSizer_GetItemPosition_1_1, 1415).
--define(wxGridBagSizer_GetItemPosition_1_0, 1416).
--define(wxGridBagSizer_GetItemSpan_1_2, 1417).
--define(wxGridBagSizer_GetItemSpan_1_1, 1418).
--define(wxGridBagSizer_GetItemSpan_1_0, 1419).
--define(wxGridBagSizer_SetEmptyCellSize, 1420).
--define(wxGridBagSizer_SetItemPosition_2_2, 1421).
--define(wxGridBagSizer_SetItemPosition_2_1, 1422).
--define(wxGridBagSizer_SetItemPosition_2_0, 1423).
--define(wxGridBagSizer_SetItemSpan_2_2, 1424).
--define(wxGridBagSizer_SetItemSpan_2_1, 1425).
--define(wxGridBagSizer_SetItemSpan_2_0, 1426).
--define(wxGridBagSizer_destroy, 1427).
--define(wxStdDialogButtonSizer_new, 1428).
--define(wxStdDialogButtonSizer_AddButton, 1429).
--define(wxStdDialogButtonSizer_Realize, 1430).
--define(wxStdDialogButtonSizer_SetAffirmativeButton, 1431).
--define(wxStdDialogButtonSizer_SetCancelButton, 1432).
--define(wxStdDialogButtonSizer_SetNegativeButton, 1433).
--define(wxStdDialogButtonSizer_destroy, 1434).
--define(wxFont_new_0, 1435).
--define(wxFont_new_1, 1436).
--define(wxFont_new_5, 1437).
--define(wxFont_destruct, 1439).
--define(wxFont_IsFixedWidth, 1440).
--define(wxFont_GetDefaultEncoding, 1441).
--define(wxFont_GetFaceName, 1442).
--define(wxFont_GetFamily, 1443).
--define(wxFont_GetNativeFontInfoDesc, 1444).
--define(wxFont_GetNativeFontInfoUserDesc, 1445).
--define(wxFont_GetPointSize, 1446).
--define(wxFont_GetStyle, 1447).
--define(wxFont_GetUnderlined, 1448).
--define(wxFont_GetWeight, 1449).
--define(wxFont_Ok, 1450).
--define(wxFont_SetDefaultEncoding, 1451).
--define(wxFont_SetFaceName, 1452).
--define(wxFont_SetFamily, 1453).
--define(wxFont_SetPointSize, 1454).
--define(wxFont_SetStyle, 1455).
--define(wxFont_SetUnderlined, 1456).
--define(wxFont_SetWeight, 1457).
--define(wxToolTip_Enable, 1458).
--define(wxToolTip_SetDelay, 1459).
--define(wxToolTip_new, 1460).
--define(wxToolTip_SetTip, 1461).
--define(wxToolTip_GetTip, 1462).
--define(wxToolTip_GetWindow, 1463).
--define(wxToolTip_destroy, 1464).
--define(wxButton_new_3, 1466).
--define(wxButton_new_0, 1467).
--define(wxButton_destruct, 1468).
--define(wxButton_Create, 1469).
--define(wxButton_GetDefaultSize, 1470).
--define(wxButton_SetDefault, 1471).
--define(wxButton_SetLabel, 1472).
--define(wxBitmapButton_new_4, 1474).
--define(wxBitmapButton_new_0, 1475).
--define(wxBitmapButton_Create, 1476).
--define(wxBitmapButton_GetBitmapDisabled, 1477).
--define(wxBitmapButton_GetBitmapFocus, 1479).
--define(wxBitmapButton_GetBitmapLabel, 1481).
--define(wxBitmapButton_GetBitmapSelected, 1483).
--define(wxBitmapButton_SetBitmapDisabled, 1485).
--define(wxBitmapButton_SetBitmapFocus, 1486).
--define(wxBitmapButton_SetBitmapLabel, 1487).
--define(wxBitmapButton_SetBitmapSelected, 1488).
--define(wxBitmapButton_destroy, 1489).
--define(wxToggleButton_new_0, 1490).
--define(wxToggleButton_new_4, 1491).
--define(wxToggleButton_Create, 1492).
--define(wxToggleButton_GetValue, 1493).
--define(wxToggleButton_SetValue, 1494).
--define(wxToggleButton_destroy, 1495).
--define(wxCalendarCtrl_new_0, 1496).
--define(wxCalendarCtrl_new_3, 1497).
--define(wxCalendarCtrl_Create, 1498).
--define(wxCalendarCtrl_destruct, 1499).
--define(wxCalendarCtrl_SetDate, 1500).
--define(wxCalendarCtrl_GetDate, 1501).
--define(wxCalendarCtrl_EnableYearChange, 1502).
--define(wxCalendarCtrl_EnableMonthChange, 1503).
--define(wxCalendarCtrl_EnableHolidayDisplay, 1504).
--define(wxCalendarCtrl_SetHeaderColours, 1505).
--define(wxCalendarCtrl_GetHeaderColourFg, 1506).
--define(wxCalendarCtrl_GetHeaderColourBg, 1507).
--define(wxCalendarCtrl_SetHighlightColours, 1508).
--define(wxCalendarCtrl_GetHighlightColourFg, 1509).
--define(wxCalendarCtrl_GetHighlightColourBg, 1510).
--define(wxCalendarCtrl_SetHolidayColours, 1511).
--define(wxCalendarCtrl_GetHolidayColourFg, 1512).
--define(wxCalendarCtrl_GetHolidayColourBg, 1513).
--define(wxCalendarCtrl_GetAttr, 1514).
--define(wxCalendarCtrl_SetAttr, 1515).
--define(wxCalendarCtrl_SetHoliday, 1516).
--define(wxCalendarCtrl_ResetAttr, 1517).
--define(wxCalendarCtrl_HitTest, 1518).
--define(wxCalendarDateAttr_new_0, 1519).
--define(wxCalendarDateAttr_new_2_1, 1520).
--define(wxCalendarDateAttr_new_2_0, 1521).
--define(wxCalendarDateAttr_SetTextColour, 1522).
--define(wxCalendarDateAttr_SetBackgroundColour, 1523).
--define(wxCalendarDateAttr_SetBorderColour, 1524).
--define(wxCalendarDateAttr_SetFont, 1525).
--define(wxCalendarDateAttr_SetBorder, 1526).
--define(wxCalendarDateAttr_SetHoliday, 1527).
--define(wxCalendarDateAttr_HasTextColour, 1528).
--define(wxCalendarDateAttr_HasBackgroundColour, 1529).
--define(wxCalendarDateAttr_HasBorderColour, 1530).
--define(wxCalendarDateAttr_HasFont, 1531).
--define(wxCalendarDateAttr_HasBorder, 1532).
--define(wxCalendarDateAttr_IsHoliday, 1533).
--define(wxCalendarDateAttr_GetTextColour, 1534).
--define(wxCalendarDateAttr_GetBackgroundColour, 1535).
--define(wxCalendarDateAttr_GetBorderColour, 1536).
--define(wxCalendarDateAttr_GetFont, 1537).
--define(wxCalendarDateAttr_GetBorder, 1538).
--define(wxCalendarDateAttr_destroy, 1539).
--define(wxCheckBox_new_4, 1541).
--define(wxCheckBox_new_0, 1542).
--define(wxCheckBox_Create, 1543).
--define(wxCheckBox_GetValue, 1544).
--define(wxCheckBox_Get3StateValue, 1545).
--define(wxCheckBox_Is3rdStateAllowedForUser, 1546).
--define(wxCheckBox_Is3State, 1547).
--define(wxCheckBox_IsChecked, 1548).
--define(wxCheckBox_SetValue, 1549).
--define(wxCheckBox_Set3StateValue, 1550).
--define(wxCheckBox_destroy, 1551).
--define(wxCheckListBox_new_0, 1552).
--define(wxCheckListBox_new_3, 1554).
--define(wxCheckListBox_Check, 1555).
--define(wxCheckListBox_IsChecked, 1556).
--define(wxCheckListBox_destroy, 1557).
--define(wxChoice_new_3, 1560).
--define(wxChoice_new_0, 1561).
--define(wxChoice_destruct, 1563).
--define(wxChoice_Create, 1565).
--define(wxChoice_Delete, 1566).
--define(wxChoice_GetColumns, 1567).
--define(wxChoice_SetColumns, 1568).
--define(wxComboBox_new_0, 1569).
--define(wxComboBox_new_3, 1571).
--define(wxComboBox_destruct, 1572).
--define(wxComboBox_Create, 1574).
--define(wxComboBox_CanCopy, 1575).
--define(wxComboBox_CanCut, 1576).
--define(wxComboBox_CanPaste, 1577).
--define(wxComboBox_CanRedo, 1578).
--define(wxComboBox_CanUndo, 1579).
--define(wxComboBox_Copy, 1580).
--define(wxComboBox_Cut, 1581).
--define(wxComboBox_GetInsertionPoint, 1582).
--define(wxComboBox_GetLastPosition, 1583).
--define(wxComboBox_GetValue, 1584).
--define(wxComboBox_Paste, 1585).
--define(wxComboBox_Redo, 1586).
--define(wxComboBox_Replace, 1587).
--define(wxComboBox_Remove, 1588).
--define(wxComboBox_SetInsertionPoint, 1589).
--define(wxComboBox_SetInsertionPointEnd, 1590).
--define(wxComboBox_SetSelection_1, 1591).
--define(wxComboBox_SetSelection_2, 1592).
--define(wxComboBox_SetValue, 1593).
--define(wxComboBox_Undo, 1594).
--define(wxGauge_new_0, 1595).
--define(wxGauge_new_4, 1596).
--define(wxGauge_Create, 1597).
--define(wxGauge_GetBezelFace, 1598).
--define(wxGauge_GetRange, 1599).
--define(wxGauge_GetShadowWidth, 1600).
--define(wxGauge_GetValue, 1601).
--define(wxGauge_IsVertical, 1602).
--define(wxGauge_SetBezelFace, 1603).
--define(wxGauge_SetRange, 1604).
--define(wxGauge_SetShadowWidth, 1605).
--define(wxGauge_SetValue, 1606).
--define(wxGauge_Pulse, 1607).
--define(wxGauge_destroy, 1608).
--define(wxGenericDirCtrl_new_0, 1609).
--define(wxGenericDirCtrl_new_2, 1610).
--define(wxGenericDirCtrl_destruct, 1611).
--define(wxGenericDirCtrl_Create, 1612).
--define(wxGenericDirCtrl_Init, 1613).
--define(wxGenericDirCtrl_CollapseTree, 1614).
--define(wxGenericDirCtrl_ExpandPath, 1615).
--define(wxGenericDirCtrl_GetDefaultPath, 1616).
--define(wxGenericDirCtrl_GetPath, 1617).
--define(wxGenericDirCtrl_GetFilePath, 1618).
--define(wxGenericDirCtrl_GetFilter, 1619).
--define(wxGenericDirCtrl_GetFilterIndex, 1620).
--define(wxGenericDirCtrl_GetRootId, 1621).
--define(wxGenericDirCtrl_GetTreeCtrl, 1622).
--define(wxGenericDirCtrl_ReCreateTree, 1623).
--define(wxGenericDirCtrl_SetDefaultPath, 1624).
--define(wxGenericDirCtrl_SetFilter, 1625).
--define(wxGenericDirCtrl_SetFilterIndex, 1626).
--define(wxGenericDirCtrl_SetPath, 1627).
--define(wxStaticBox_new_4, 1629).
--define(wxStaticBox_new_0, 1630).
--define(wxStaticBox_Create, 1631).
--define(wxStaticBox_destroy, 1632).
--define(wxStaticLine_new_2, 1634).
--define(wxStaticLine_new_0, 1635).
--define(wxStaticLine_Create, 1636).
--define(wxStaticLine_IsVertical, 1637).
--define(wxStaticLine_GetDefaultSize, 1638).
--define(wxStaticLine_destroy, 1639).
--define(wxListBox_new_3, 1642).
--define(wxListBox_new_0, 1643).
--define(wxListBox_destruct, 1645).
--define(wxListBox_Create, 1647).
--define(wxListBox_Deselect, 1648).
--define(wxListBox_GetSelections, 1649).
--define(wxListBox_InsertItems, 1650).
--define(wxListBox_IsSelected, 1651).
--define(wxListBox_Set, 1653).
--define(wxListBox_HitTest, 1654).
--define(wxListBox_SetFirstItem_1_0, 1655).
--define(wxListBox_SetFirstItem_1_1, 1656).
--define(wxListCtrl_new_0, 1657).
--define(wxListCtrl_new_2, 1658).
--define(wxListCtrl_Arrange, 1659).
--define(wxListCtrl_AssignImageList, 1660).
--define(wxListCtrl_ClearAll, 1661).
--define(wxListCtrl_Create, 1662).
--define(wxListCtrl_DeleteAllItems, 1663).
--define(wxListCtrl_DeleteColumn, 1664).
--define(wxListCtrl_DeleteItem, 1665).
--define(wxListCtrl_EditLabel, 1666).
--define(wxListCtrl_EnsureVisible, 1667).
--define(wxListCtrl_FindItem_3_0, 1668).
--define(wxListCtrl_FindItem_3_1, 1669).
--define(wxListCtrl_GetColumn, 1670).
--define(wxListCtrl_GetColumnCount, 1671).
--define(wxListCtrl_GetColumnWidth, 1672).
--define(wxListCtrl_GetCountPerPage, 1673).
--define(wxListCtrl_GetEditControl, 1674).
--define(wxListCtrl_GetImageList, 1675).
--define(wxListCtrl_GetItem, 1676).
--define(wxListCtrl_GetItemBackgroundColour, 1677).
--define(wxListCtrl_GetItemCount, 1678).
--define(wxListCtrl_GetItemData, 1679).
--define(wxListCtrl_GetItemFont, 1680).
--define(wxListCtrl_GetItemPosition, 1681).
--define(wxListCtrl_GetItemRect, 1682).
--define(wxListCtrl_GetItemSpacing, 1683).
--define(wxListCtrl_GetItemState, 1684).
--define(wxListCtrl_GetItemText, 1685).
--define(wxListCtrl_GetItemTextColour, 1686).
--define(wxListCtrl_GetNextItem, 1687).
--define(wxListCtrl_GetSelectedItemCount, 1688).
--define(wxListCtrl_GetTextColour, 1689).
--define(wxListCtrl_GetTopItem, 1690).
--define(wxListCtrl_GetViewRect, 1691).
--define(wxListCtrl_HitTest, 1692).
--define(wxListCtrl_InsertColumn_2, 1693).
--define(wxListCtrl_InsertColumn_3, 1694).
--define(wxListCtrl_InsertItem_1, 1695).
--define(wxListCtrl_InsertItem_2_1, 1696).
--define(wxListCtrl_InsertItem_2_0, 1697).
--define(wxListCtrl_InsertItem_3, 1698).
--define(wxListCtrl_RefreshItem, 1699).
--define(wxListCtrl_RefreshItems, 1700).
--define(wxListCtrl_ScrollList, 1701).
--define(wxListCtrl_SetBackgroundColour, 1702).
--define(wxListCtrl_SetColumn, 1703).
--define(wxListCtrl_SetColumnWidth, 1704).
--define(wxListCtrl_SetImageList, 1705).
--define(wxListCtrl_SetItem_1, 1706).
--define(wxListCtrl_SetItem_4, 1707).
--define(wxListCtrl_SetItemBackgroundColour, 1708).
--define(wxListCtrl_SetItemCount, 1709).
--define(wxListCtrl_SetItemData, 1710).
--define(wxListCtrl_SetItemFont, 1711).
--define(wxListCtrl_SetItemImage, 1712).
--define(wxListCtrl_SetItemColumnImage, 1713).
--define(wxListCtrl_SetItemPosition, 1714).
--define(wxListCtrl_SetItemState, 1715).
--define(wxListCtrl_SetItemText, 1716).
--define(wxListCtrl_SetItemTextColour, 1717).
--define(wxListCtrl_SetSingleStyle, 1718).
--define(wxListCtrl_SetTextColour, 1719).
--define(wxListCtrl_SetWindowStyleFlag, 1720).
--define(wxListCtrl_SortItems, 1721).
--define(wxListCtrl_destroy, 1722).
--define(wxListView_ClearColumnImage, 1723).
--define(wxListView_Focus, 1724).
--define(wxListView_GetFirstSelected, 1725).
--define(wxListView_GetFocusedItem, 1726).
--define(wxListView_GetNextSelected, 1727).
--define(wxListView_IsSelected, 1728).
--define(wxListView_Select, 1729).
--define(wxListView_SetColumnImage, 1730).
--define(wxListItem_new_0, 1731).
--define(wxListItem_new_1, 1732).
--define(wxListItem_destruct, 1733).
--define(wxListItem_Clear, 1734).
--define(wxListItem_GetAlign, 1735).
--define(wxListItem_GetBackgroundColour, 1736).
--define(wxListItem_GetColumn, 1737).
--define(wxListItem_GetFont, 1738).
--define(wxListItem_GetId, 1739).
--define(wxListItem_GetImage, 1740).
--define(wxListItem_GetMask, 1741).
--define(wxListItem_GetState, 1742).
--define(wxListItem_GetText, 1743).
--define(wxListItem_GetTextColour, 1744).
--define(wxListItem_GetWidth, 1745).
--define(wxListItem_SetAlign, 1746).
--define(wxListItem_SetBackgroundColour, 1747).
--define(wxListItem_SetColumn, 1748).
--define(wxListItem_SetFont, 1749).
--define(wxListItem_SetId, 1750).
--define(wxListItem_SetImage, 1751).
--define(wxListItem_SetMask, 1752).
--define(wxListItem_SetState, 1753).
--define(wxListItem_SetStateMask, 1754).
--define(wxListItem_SetText, 1755).
--define(wxListItem_SetTextColour, 1756).
--define(wxListItem_SetWidth, 1757).
--define(wxListItemAttr_new_0, 1758).
--define(wxListItemAttr_new_3, 1759).
--define(wxListItemAttr_GetBackgroundColour, 1760).
--define(wxListItemAttr_GetFont, 1761).
--define(wxListItemAttr_GetTextColour, 1762).
--define(wxListItemAttr_HasBackgroundColour, 1763).
--define(wxListItemAttr_HasFont, 1764).
--define(wxListItemAttr_HasTextColour, 1765).
--define(wxListItemAttr_SetBackgroundColour, 1766).
--define(wxListItemAttr_SetFont, 1767).
--define(wxListItemAttr_SetTextColour, 1768).
--define(wxListItemAttr_destroy, 1769).
--define(wxImageList_new_0, 1770).
--define(wxImageList_new_3, 1771).
--define(wxImageList_Add_1, 1772).
--define(wxImageList_Add_2_0, 1773).
--define(wxImageList_Add_2_1, 1774).
--define(wxImageList_Create, 1775).
--define(wxImageList_Draw, 1777).
--define(wxImageList_GetBitmap, 1778).
--define(wxImageList_GetIcon, 1779).
--define(wxImageList_GetImageCount, 1780).
--define(wxImageList_GetSize, 1781).
--define(wxImageList_Remove, 1782).
--define(wxImageList_RemoveAll, 1783).
--define(wxImageList_Replace_2, 1784).
--define(wxImageList_Replace_3, 1785).
--define(wxImageList_destroy, 1786).
--define(wxTextAttr_new_0, 1787).
--define(wxTextAttr_new_2, 1788).
--define(wxTextAttr_GetAlignment, 1789).
--define(wxTextAttr_GetBackgroundColour, 1790).
--define(wxTextAttr_GetFont, 1791).
--define(wxTextAttr_GetLeftIndent, 1792).
--define(wxTextAttr_GetLeftSubIndent, 1793).
--define(wxTextAttr_GetRightIndent, 1794).
--define(wxTextAttr_GetTabs, 1795).
--define(wxTextAttr_GetTextColour, 1796).
--define(wxTextAttr_HasBackgroundColour, 1797).
--define(wxTextAttr_HasFont, 1798).
--define(wxTextAttr_HasTextColour, 1799).
--define(wxTextAttr_GetFlags, 1800).
--define(wxTextAttr_IsDefault, 1801).
--define(wxTextAttr_SetAlignment, 1802).
--define(wxTextAttr_SetBackgroundColour, 1803).
--define(wxTextAttr_SetFlags, 1804).
--define(wxTextAttr_SetFont, 1805).
--define(wxTextAttr_SetLeftIndent, 1806).
--define(wxTextAttr_SetRightIndent, 1807).
--define(wxTextAttr_SetTabs, 1808).
--define(wxTextAttr_SetTextColour, 1809).
--define(wxTextAttr_destroy, 1810).
--define(wxTextCtrl_new_3, 1812).
--define(wxTextCtrl_new_0, 1813).
--define(wxTextCtrl_destruct, 1815).
--define(wxTextCtrl_AppendText, 1816).
--define(wxTextCtrl_CanCopy, 1817).
--define(wxTextCtrl_CanCut, 1818).
--define(wxTextCtrl_CanPaste, 1819).
--define(wxTextCtrl_CanRedo, 1820).
--define(wxTextCtrl_CanUndo, 1821).
--define(wxTextCtrl_Clear, 1822).
--define(wxTextCtrl_Copy, 1823).
--define(wxTextCtrl_Create, 1824).
--define(wxTextCtrl_Cut, 1825).
--define(wxTextCtrl_DiscardEdits, 1826).
--define(wxTextCtrl_EmulateKeyPress, 1827).
--define(wxTextCtrl_GetDefaultStyle, 1828).
--define(wxTextCtrl_GetInsertionPoint, 1829).
--define(wxTextCtrl_GetLastPosition, 1830).
--define(wxTextCtrl_GetLineLength, 1831).
--define(wxTextCtrl_GetLineText, 1832).
--define(wxTextCtrl_GetNumberOfLines, 1833).
--define(wxTextCtrl_GetRange, 1834).
--define(wxTextCtrl_GetSelection, 1835).
--define(wxTextCtrl_GetStringSelection, 1836).
--define(wxTextCtrl_GetStyle, 1837).
--define(wxTextCtrl_GetValue, 1838).
--define(wxTextCtrl_IsEditable, 1839).
--define(wxTextCtrl_IsModified, 1840).
--define(wxTextCtrl_IsMultiLine, 1841).
--define(wxTextCtrl_IsSingleLine, 1842).
--define(wxTextCtrl_LoadFile, 1843).
--define(wxTextCtrl_MarkDirty, 1844).
--define(wxTextCtrl_Paste, 1845).
--define(wxTextCtrl_PositionToXY, 1846).
--define(wxTextCtrl_Redo, 1847).
--define(wxTextCtrl_Remove, 1848).
--define(wxTextCtrl_Replace, 1849).
--define(wxTextCtrl_SaveFile, 1850).
--define(wxTextCtrl_SetDefaultStyle, 1851).
--define(wxTextCtrl_SetEditable, 1852).
--define(wxTextCtrl_SetInsertionPoint, 1853).
--define(wxTextCtrl_SetInsertionPointEnd, 1854).
--define(wxTextCtrl_SetMaxLength, 1856).
--define(wxTextCtrl_SetSelection, 1857).
--define(wxTextCtrl_SetStyle, 1858).
--define(wxTextCtrl_SetValue, 1859).
--define(wxTextCtrl_ShowPosition, 1860).
--define(wxTextCtrl_Undo, 1861).
--define(wxTextCtrl_WriteText, 1862).
--define(wxTextCtrl_XYToPosition, 1863).
--define(wxNotebook_new_0, 1866).
--define(wxNotebook_new_3, 1867).
--define(wxNotebook_destruct, 1868).
--define(wxNotebook_AddPage, 1869).
--define(wxNotebook_AdvanceSelection, 1870).
--define(wxNotebook_AssignImageList, 1871).
--define(wxNotebook_Create, 1872).
--define(wxNotebook_DeleteAllPages, 1873).
--define(wxNotebook_DeletePage, 1874).
--define(wxNotebook_RemovePage, 1875).
--define(wxNotebook_GetCurrentPage, 1876).
--define(wxNotebook_GetImageList, 1877).
--define(wxNotebook_GetPage, 1879).
--define(wxNotebook_GetPageCount, 1880).
--define(wxNotebook_GetPageImage, 1881).
--define(wxNotebook_GetPageText, 1882).
--define(wxNotebook_GetRowCount, 1883).
--define(wxNotebook_GetSelection, 1884).
--define(wxNotebook_GetThemeBackgroundColour, 1885).
--define(wxNotebook_HitTest, 1887).
--define(wxNotebook_InsertPage, 1889).
--define(wxNotebook_SetImageList, 1890).
--define(wxNotebook_SetPadding, 1891).
--define(wxNotebook_SetPageSize, 1892).
--define(wxNotebook_SetPageImage, 1893).
--define(wxNotebook_SetPageText, 1894).
--define(wxNotebook_SetSelection, 1895).
--define(wxNotebook_ChangeSelection, 1896).
--define(wxChoicebook_new_0, 1897).
--define(wxChoicebook_new_3, 1898).
--define(wxChoicebook_AddPage, 1899).
--define(wxChoicebook_AdvanceSelection, 1900).
--define(wxChoicebook_AssignImageList, 1901).
--define(wxChoicebook_Create, 1902).
--define(wxChoicebook_DeleteAllPages, 1903).
--define(wxChoicebook_DeletePage, 1904).
--define(wxChoicebook_RemovePage, 1905).
--define(wxChoicebook_GetCurrentPage, 1906).
--define(wxChoicebook_GetImageList, 1907).
--define(wxChoicebook_GetPage, 1909).
--define(wxChoicebook_GetPageCount, 1910).
--define(wxChoicebook_GetPageImage, 1911).
--define(wxChoicebook_GetPageText, 1912).
--define(wxChoicebook_GetSelection, 1913).
--define(wxChoicebook_HitTest, 1914).
--define(wxChoicebook_InsertPage, 1915).
--define(wxChoicebook_SetImageList, 1916).
--define(wxChoicebook_SetPageSize, 1917).
--define(wxChoicebook_SetPageImage, 1918).
--define(wxChoicebook_SetPageText, 1919).
--define(wxChoicebook_SetSelection, 1920).
--define(wxChoicebook_ChangeSelection, 1921).
--define(wxChoicebook_destroy, 1922).
--define(wxToolbook_new_0, 1923).
--define(wxToolbook_new_3, 1924).
--define(wxToolbook_AddPage, 1925).
--define(wxToolbook_AdvanceSelection, 1926).
--define(wxToolbook_AssignImageList, 1927).
--define(wxToolbook_Create, 1928).
--define(wxToolbook_DeleteAllPages, 1929).
--define(wxToolbook_DeletePage, 1930).
--define(wxToolbook_RemovePage, 1931).
--define(wxToolbook_GetCurrentPage, 1932).
--define(wxToolbook_GetImageList, 1933).
--define(wxToolbook_GetPage, 1935).
--define(wxToolbook_GetPageCount, 1936).
--define(wxToolbook_GetPageImage, 1937).
--define(wxToolbook_GetPageText, 1938).
--define(wxToolbook_GetSelection, 1939).
--define(wxToolbook_HitTest, 1941).
--define(wxToolbook_InsertPage, 1942).
--define(wxToolbook_SetImageList, 1943).
--define(wxToolbook_SetPageSize, 1944).
--define(wxToolbook_SetPageImage, 1945).
--define(wxToolbook_SetPageText, 1946).
--define(wxToolbook_SetSelection, 1947).
--define(wxToolbook_ChangeSelection, 1948).
--define(wxToolbook_destroy, 1949).
--define(wxListbook_new_0, 1950).
--define(wxListbook_new_3, 1951).
--define(wxListbook_AddPage, 1952).
--define(wxListbook_AdvanceSelection, 1953).
--define(wxListbook_AssignImageList, 1954).
--define(wxListbook_Create, 1955).
--define(wxListbook_DeleteAllPages, 1956).
--define(wxListbook_DeletePage, 1957).
--define(wxListbook_RemovePage, 1958).
--define(wxListbook_GetCurrentPage, 1959).
--define(wxListbook_GetImageList, 1960).
--define(wxListbook_GetPage, 1962).
--define(wxListbook_GetPageCount, 1963).
--define(wxListbook_GetPageImage, 1964).
--define(wxListbook_GetPageText, 1965).
--define(wxListbook_GetSelection, 1966).
--define(wxListbook_HitTest, 1968).
--define(wxListbook_InsertPage, 1969).
--define(wxListbook_SetImageList, 1970).
--define(wxListbook_SetPageSize, 1971).
--define(wxListbook_SetPageImage, 1972).
--define(wxListbook_SetPageText, 1973).
--define(wxListbook_SetSelection, 1974).
--define(wxListbook_ChangeSelection, 1975).
--define(wxListbook_destroy, 1976).
--define(wxTreebook_new_0, 1977).
--define(wxTreebook_new_3, 1978).
--define(wxTreebook_AddPage, 1979).
--define(wxTreebook_AdvanceSelection, 1980).
--define(wxTreebook_AssignImageList, 1981).
--define(wxTreebook_Create, 1982).
--define(wxTreebook_DeleteAllPages, 1983).
--define(wxTreebook_DeletePage, 1984).
--define(wxTreebook_RemovePage, 1985).
--define(wxTreebook_GetCurrentPage, 1986).
--define(wxTreebook_GetImageList, 1987).
--define(wxTreebook_GetPage, 1989).
--define(wxTreebook_GetPageCount, 1990).
--define(wxTreebook_GetPageImage, 1991).
--define(wxTreebook_GetPageText, 1992).
--define(wxTreebook_GetSelection, 1993).
--define(wxTreebook_ExpandNode, 1994).
--define(wxTreebook_IsNodeExpanded, 1995).
--define(wxTreebook_HitTest, 1997).
--define(wxTreebook_InsertPage, 1998).
--define(wxTreebook_InsertSubPage, 1999).
--define(wxTreebook_SetImageList, 2000).
--define(wxTreebook_SetPageSize, 2001).
--define(wxTreebook_SetPageImage, 2002).
--define(wxTreebook_SetPageText, 2003).
--define(wxTreebook_SetSelection, 2004).
--define(wxTreebook_ChangeSelection, 2005).
--define(wxTreebook_destroy, 2006).
--define(wxTreeCtrl_new_2, 2009).
--define(wxTreeCtrl_new_0, 2010).
--define(wxTreeCtrl_destruct, 2012).
--define(wxTreeCtrl_AddRoot, 2013).
--define(wxTreeCtrl_AppendItem, 2014).
--define(wxTreeCtrl_AssignImageList, 2015).
--define(wxTreeCtrl_AssignStateImageList, 2016).
--define(wxTreeCtrl_Collapse, 2017).
--define(wxTreeCtrl_CollapseAndReset, 2018).
--define(wxTreeCtrl_Create, 2019).
--define(wxTreeCtrl_Delete, 2020).
--define(wxTreeCtrl_DeleteAllItems, 2021).
--define(wxTreeCtrl_DeleteChildren, 2022).
--define(wxTreeCtrl_EditLabel, 2023).
--define(wxTreeCtrl_EnsureVisible, 2024).
--define(wxTreeCtrl_Expand, 2025).
--define(wxTreeCtrl_GetBoundingRect, 2026).
--define(wxTreeCtrl_GetChildrenCount, 2028).
--define(wxTreeCtrl_GetCount, 2029).
--define(wxTreeCtrl_GetEditControl, 2030).
--define(wxTreeCtrl_GetFirstChild, 2031).
--define(wxTreeCtrl_GetNextChild, 2032).
--define(wxTreeCtrl_GetFirstVisibleItem, 2033).
--define(wxTreeCtrl_GetImageList, 2034).
--define(wxTreeCtrl_GetIndent, 2035).
--define(wxTreeCtrl_GetItemBackgroundColour, 2036).
--define(wxTreeCtrl_GetItemData, 2037).
--define(wxTreeCtrl_GetItemFont, 2038).
--define(wxTreeCtrl_GetItemImage_1, 2039).
--define(wxTreeCtrl_GetItemImage_2, 2040).
--define(wxTreeCtrl_GetItemText, 2041).
--define(wxTreeCtrl_GetItemTextColour, 2042).
--define(wxTreeCtrl_GetLastChild, 2043).
--define(wxTreeCtrl_GetNextSibling, 2044).
--define(wxTreeCtrl_GetNextVisible, 2045).
--define(wxTreeCtrl_GetItemParent, 2046).
--define(wxTreeCtrl_GetPrevSibling, 2047).
--define(wxTreeCtrl_GetPrevVisible, 2048).
--define(wxTreeCtrl_GetRootItem, 2049).
--define(wxTreeCtrl_GetSelection, 2050).
--define(wxTreeCtrl_GetSelections, 2051).
--define(wxTreeCtrl_GetStateImageList, 2052).
--define(wxTreeCtrl_HitTest, 2053).
--define(wxTreeCtrl_InsertItem, 2055).
--define(wxTreeCtrl_IsBold, 2056).
--define(wxTreeCtrl_IsExpanded, 2057).
--define(wxTreeCtrl_IsSelected, 2058).
--define(wxTreeCtrl_IsVisible, 2059).
--define(wxTreeCtrl_ItemHasChildren, 2060).
--define(wxTreeCtrl_IsTreeItemIdOk, 2061).
--define(wxTreeCtrl_PrependItem, 2062).
--define(wxTreeCtrl_ScrollTo, 2063).
--define(wxTreeCtrl_SelectItem_1, 2064).
--define(wxTreeCtrl_SelectItem_2, 2065).
--define(wxTreeCtrl_SetIndent, 2066).
--define(wxTreeCtrl_SetImageList, 2067).
--define(wxTreeCtrl_SetItemBackgroundColour, 2068).
--define(wxTreeCtrl_SetItemBold, 2069).
--define(wxTreeCtrl_SetItemData, 2070).
--define(wxTreeCtrl_SetItemDropHighlight, 2071).
--define(wxTreeCtrl_SetItemFont, 2072).
--define(wxTreeCtrl_SetItemHasChildren, 2073).
--define(wxTreeCtrl_SetItemImage_2, 2074).
--define(wxTreeCtrl_SetItemImage_3, 2075).
--define(wxTreeCtrl_SetItemText, 2076).
--define(wxTreeCtrl_SetItemTextColour, 2077).
--define(wxTreeCtrl_SetStateImageList, 2078).
--define(wxTreeCtrl_SetWindowStyle, 2079).
--define(wxTreeCtrl_SortChildren, 2080).
--define(wxTreeCtrl_Toggle, 2081).
--define(wxTreeCtrl_ToggleItemSelection, 2082).
--define(wxTreeCtrl_Unselect, 2083).
--define(wxTreeCtrl_UnselectAll, 2084).
--define(wxTreeCtrl_UnselectItem, 2085).
--define(wxScrollBar_new_0, 2086).
--define(wxScrollBar_new_3, 2087).
--define(wxScrollBar_destruct, 2088).
--define(wxScrollBar_Create, 2089).
--define(wxScrollBar_GetRange, 2090).
--define(wxScrollBar_GetPageSize, 2091).
--define(wxScrollBar_GetThumbPosition, 2092).
--define(wxScrollBar_GetThumbSize, 2093).
--define(wxScrollBar_SetThumbPosition, 2094).
--define(wxScrollBar_SetScrollbar, 2095).
--define(wxSpinButton_new_2, 2097).
--define(wxSpinButton_new_0, 2098).
--define(wxSpinButton_Create, 2099).
--define(wxSpinButton_GetMax, 2100).
--define(wxSpinButton_GetMin, 2101).
--define(wxSpinButton_GetValue, 2102).
--define(wxSpinButton_SetRange, 2103).
--define(wxSpinButton_SetValue, 2104).
--define(wxSpinButton_destroy, 2105).
--define(wxSpinCtrl_new_0, 2106).
--define(wxSpinCtrl_new_2, 2107).
--define(wxSpinCtrl_Create, 2109).
--define(wxSpinCtrl_SetValue_1_1, 2112).
--define(wxSpinCtrl_SetValue_1_0, 2113).
--define(wxSpinCtrl_GetValue, 2115).
--define(wxSpinCtrl_SetRange, 2117).
--define(wxSpinCtrl_SetSelection, 2118).
--define(wxSpinCtrl_GetMin, 2120).
--define(wxSpinCtrl_GetMax, 2122).
--define(wxSpinCtrl_destroy, 2123).
--define(wxStaticText_new_0, 2124).
--define(wxStaticText_new_4, 2125).
--define(wxStaticText_Create, 2126).
--define(wxStaticText_GetLabel, 2127).
--define(wxStaticText_SetLabel, 2128).
--define(wxStaticText_Wrap, 2129).
--define(wxStaticText_destroy, 2130).
--define(wxStaticBitmap_new_0, 2131).
--define(wxStaticBitmap_new_4, 2132).
--define(wxStaticBitmap_Create, 2133).
--define(wxStaticBitmap_GetBitmap, 2134).
--define(wxStaticBitmap_SetBitmap, 2135).
--define(wxStaticBitmap_destroy, 2136).
--define(wxRadioBox_new, 2137).
--define(wxRadioBox_destruct, 2139).
--define(wxRadioBox_Create, 2140).
--define(wxRadioBox_Enable_2, 2141).
--define(wxRadioBox_Enable_1, 2142).
--define(wxRadioBox_GetSelection, 2143).
--define(wxRadioBox_GetString, 2144).
--define(wxRadioBox_SetSelection, 2145).
--define(wxRadioBox_Show_2, 2146).
--define(wxRadioBox_Show_1, 2147).
--define(wxRadioBox_GetColumnCount, 2148).
--define(wxRadioBox_GetItemHelpText, 2149).
--define(wxRadioBox_GetItemToolTip, 2150).
--define(wxRadioBox_GetItemFromPoint, 2152).
--define(wxRadioBox_GetRowCount, 2153).
--define(wxRadioBox_IsItemEnabled, 2154).
--define(wxRadioBox_IsItemShown, 2155).
--define(wxRadioBox_SetItemHelpText, 2156).
--define(wxRadioBox_SetItemToolTip, 2157).
--define(wxRadioButton_new_0, 2158).
--define(wxRadioButton_new_4, 2159).
--define(wxRadioButton_Create, 2160).
--define(wxRadioButton_GetValue, 2161).
--define(wxRadioButton_SetValue, 2162).
--define(wxRadioButton_destroy, 2163).
--define(wxSlider_new_6, 2165).
--define(wxSlider_new_0, 2166).
--define(wxSlider_Create, 2167).
--define(wxSlider_GetLineSize, 2168).
--define(wxSlider_GetMax, 2169).
--define(wxSlider_GetMin, 2170).
--define(wxSlider_GetPageSize, 2171).
--define(wxSlider_GetThumbLength, 2172).
--define(wxSlider_GetValue, 2173).
--define(wxSlider_SetLineSize, 2174).
--define(wxSlider_SetPageSize, 2175).
--define(wxSlider_SetRange, 2176).
--define(wxSlider_SetThumbLength, 2177).
--define(wxSlider_SetValue, 2178).
--define(wxSlider_destroy, 2179).
--define(wxDialog_new_4, 2181).
--define(wxDialog_new_0, 2182).
--define(wxDialog_destruct, 2184).
--define(wxDialog_Create, 2185).
--define(wxDialog_CreateButtonSizer, 2186).
--define(wxDialog_CreateStdDialogButtonSizer, 2187).
--define(wxDialog_EndModal, 2188).
--define(wxDialog_GetAffirmativeId, 2189).
--define(wxDialog_GetReturnCode, 2190).
--define(wxDialog_IsModal, 2191).
--define(wxDialog_SetAffirmativeId, 2192).
--define(wxDialog_SetReturnCode, 2193).
--define(wxDialog_Show, 2194).
--define(wxDialog_ShowModal, 2195).
--define(wxColourDialog_new_0, 2196).
--define(wxColourDialog_new_2, 2197).
--define(wxColourDialog_destruct, 2198).
--define(wxColourDialog_Create, 2199).
--define(wxColourDialog_GetColourData, 2200).
--define(wxColourData_new_0, 2201).
--define(wxColourData_new_1, 2202).
--define(wxColourData_destruct, 2203).
--define(wxColourData_GetChooseFull, 2204).
--define(wxColourData_GetColour, 2205).
--define(wxColourData_GetCustomColour, 2207).
--define(wxColourData_SetChooseFull, 2208).
--define(wxColourData_SetColour, 2209).
--define(wxColourData_SetCustomColour, 2210).
--define(wxPalette_new_0, 2211).
--define(wxPalette_new_4, 2212).
--define(wxPalette_destruct, 2214).
--define(wxPalette_Create, 2215).
--define(wxPalette_GetColoursCount, 2216).
--define(wxPalette_GetPixel, 2217).
--define(wxPalette_GetRGB, 2218).
--define(wxPalette_IsOk, 2219).
--define(wxDirDialog_new, 2223).
--define(wxDirDialog_destruct, 2224).
--define(wxDirDialog_GetPath, 2225).
--define(wxDirDialog_GetMessage, 2226).
--define(wxDirDialog_SetMessage, 2227).
--define(wxDirDialog_SetPath, 2228).
--define(wxFileDialog_new, 2232).
--define(wxFileDialog_destruct, 2233).
--define(wxFileDialog_GetDirectory, 2234).
--define(wxFileDialog_GetFilename, 2235).
--define(wxFileDialog_GetFilenames, 2236).
--define(wxFileDialog_GetFilterIndex, 2237).
--define(wxFileDialog_GetMessage, 2238).
--define(wxFileDialog_GetPath, 2239).
--define(wxFileDialog_GetPaths, 2240).
--define(wxFileDialog_GetWildcard, 2241).
--define(wxFileDialog_SetDirectory, 2242).
--define(wxFileDialog_SetFilename, 2243).
--define(wxFileDialog_SetFilterIndex, 2244).
--define(wxFileDialog_SetMessage, 2245).
--define(wxFileDialog_SetPath, 2246).
--define(wxFileDialog_SetWildcard, 2247).
--define(wxPickerBase_SetInternalMargin, 2248).
--define(wxPickerBase_GetInternalMargin, 2249).
--define(wxPickerBase_SetTextCtrlProportion, 2250).
--define(wxPickerBase_SetPickerCtrlProportion, 2251).
--define(wxPickerBase_GetTextCtrlProportion, 2252).
--define(wxPickerBase_GetPickerCtrlProportion, 2253).
--define(wxPickerBase_HasTextCtrl, 2254).
--define(wxPickerBase_GetTextCtrl, 2255).
--define(wxPickerBase_IsTextCtrlGrowable, 2256).
--define(wxPickerBase_SetPickerCtrlGrowable, 2257).
--define(wxPickerBase_SetTextCtrlGrowable, 2258).
--define(wxPickerBase_IsPickerCtrlGrowable, 2259).
--define(wxFilePickerCtrl_new_0, 2260).
--define(wxFilePickerCtrl_new_3, 2261).
--define(wxFilePickerCtrl_Create, 2262).
--define(wxFilePickerCtrl_GetPath, 2263).
--define(wxFilePickerCtrl_SetPath, 2264).
--define(wxFilePickerCtrl_destroy, 2265).
--define(wxDirPickerCtrl_new_0, 2266).
--define(wxDirPickerCtrl_new_3, 2267).
--define(wxDirPickerCtrl_Create, 2268).
--define(wxDirPickerCtrl_GetPath, 2269).
--define(wxDirPickerCtrl_SetPath, 2270).
--define(wxDirPickerCtrl_destroy, 2271).
--define(wxColourPickerCtrl_new_0, 2272).
--define(wxColourPickerCtrl_new_3, 2273).
--define(wxColourPickerCtrl_Create, 2274).
--define(wxColourPickerCtrl_GetColour, 2275).
--define(wxColourPickerCtrl_SetColour_1_1, 2276).
--define(wxColourPickerCtrl_SetColour_1_0, 2277).
--define(wxColourPickerCtrl_destroy, 2278).
--define(wxDatePickerCtrl_new_0, 2279).
--define(wxDatePickerCtrl_new_3, 2280).
--define(wxDatePickerCtrl_GetRange, 2281).
--define(wxDatePickerCtrl_GetValue, 2282).
--define(wxDatePickerCtrl_SetRange, 2283).
--define(wxDatePickerCtrl_SetValue, 2284).
--define(wxDatePickerCtrl_destroy, 2285).
--define(wxFontPickerCtrl_new_0, 2286).
--define(wxFontPickerCtrl_new_3, 2287).
--define(wxFontPickerCtrl_Create, 2288).
--define(wxFontPickerCtrl_GetSelectedFont, 2289).
--define(wxFontPickerCtrl_SetSelectedFont, 2290).
--define(wxFontPickerCtrl_GetMaxPointSize, 2291).
--define(wxFontPickerCtrl_SetMaxPointSize, 2292).
--define(wxFontPickerCtrl_destroy, 2293).
--define(wxFindReplaceDialog_new_0, 2296).
--define(wxFindReplaceDialog_new_4, 2297).
--define(wxFindReplaceDialog_destruct, 2298).
--define(wxFindReplaceDialog_Create, 2299).
--define(wxFindReplaceDialog_GetData, 2300).
--define(wxFindReplaceData_new_0, 2301).
--define(wxFindReplaceData_new_1, 2302).
--define(wxFindReplaceData_GetFindString, 2303).
--define(wxFindReplaceData_GetReplaceString, 2304).
--define(wxFindReplaceData_GetFlags, 2305).
--define(wxFindReplaceData_SetFlags, 2306).
--define(wxFindReplaceData_SetFindString, 2307).
--define(wxFindReplaceData_SetReplaceString, 2308).
--define(wxFindReplaceData_destroy, 2309).
--define(wxMultiChoiceDialog_new_0, 2310).
--define(wxMultiChoiceDialog_new_5, 2312).
--define(wxMultiChoiceDialog_GetSelections, 2313).
--define(wxMultiChoiceDialog_SetSelections, 2314).
--define(wxMultiChoiceDialog_destroy, 2315).
--define(wxSingleChoiceDialog_new_0, 2316).
--define(wxSingleChoiceDialog_new_5, 2318).
--define(wxSingleChoiceDialog_GetSelection, 2319).
--define(wxSingleChoiceDialog_GetStringSelection, 2320).
--define(wxSingleChoiceDialog_SetSelection, 2321).
--define(wxSingleChoiceDialog_destroy, 2322).
--define(wxTextEntryDialog_new, 2323).
--define(wxTextEntryDialog_GetValue, 2324).
--define(wxTextEntryDialog_SetValue, 2325).
--define(wxTextEntryDialog_destroy, 2326).
--define(wxPasswordEntryDialog_new, 2327).
--define(wxPasswordEntryDialog_destroy, 2328).
--define(wxFontData_new_0, 2329).
--define(wxFontData_new_1, 2330).
--define(wxFontData_destruct, 2331).
--define(wxFontData_EnableEffects, 2332).
--define(wxFontData_GetAllowSymbols, 2333).
--define(wxFontData_GetColour, 2334).
--define(wxFontData_GetChosenFont, 2335).
--define(wxFontData_GetEnableEffects, 2336).
--define(wxFontData_GetInitialFont, 2337).
--define(wxFontData_GetShowHelp, 2338).
--define(wxFontData_SetAllowSymbols, 2339).
--define(wxFontData_SetChosenFont, 2340).
--define(wxFontData_SetColour, 2341).
--define(wxFontData_SetInitialFont, 2342).
--define(wxFontData_SetRange, 2343).
--define(wxFontData_SetShowHelp, 2344).
--define(wxFontDialog_new_0, 2348).
--define(wxFontDialog_new_2, 2350).
--define(wxFontDialog_Create, 2352).
--define(wxFontDialog_GetFontData, 2353).
--define(wxFontDialog_destroy, 2355).
--define(wxProgressDialog_new, 2356).
--define(wxProgressDialog_destruct, 2357).
--define(wxProgressDialog_Resume, 2358).
--define(wxProgressDialog_Update_2, 2359).
--define(wxProgressDialog_Update_0, 2360).
--define(wxMessageDialog_new, 2361).
--define(wxMessageDialog_destruct, 2362).
--define(wxPageSetupDialog_new, 2363).
--define(wxPageSetupDialog_destruct, 2364).
--define(wxPageSetupDialog_GetPageSetupData, 2365).
--define(wxPageSetupDialog_ShowModal, 2366).
--define(wxPageSetupDialogData_new_0, 2367).
--define(wxPageSetupDialogData_new_1_0, 2368).
--define(wxPageSetupDialogData_new_1_1, 2369).
--define(wxPageSetupDialogData_destruct, 2370).
--define(wxPageSetupDialogData_EnableHelp, 2371).
--define(wxPageSetupDialogData_EnableMargins, 2372).
--define(wxPageSetupDialogData_EnableOrientation, 2373).
--define(wxPageSetupDialogData_EnablePaper, 2374).
--define(wxPageSetupDialogData_EnablePrinter, 2375).
--define(wxPageSetupDialogData_GetDefaultMinMargins, 2376).
--define(wxPageSetupDialogData_GetEnableMargins, 2377).
--define(wxPageSetupDialogData_GetEnableOrientation, 2378).
--define(wxPageSetupDialogData_GetEnablePaper, 2379).
--define(wxPageSetupDialogData_GetEnablePrinter, 2380).
--define(wxPageSetupDialogData_GetEnableHelp, 2381).
--define(wxPageSetupDialogData_GetDefaultInfo, 2382).
--define(wxPageSetupDialogData_GetMarginTopLeft, 2383).
--define(wxPageSetupDialogData_GetMarginBottomRight, 2384).
--define(wxPageSetupDialogData_GetMinMarginTopLeft, 2385).
--define(wxPageSetupDialogData_GetMinMarginBottomRight, 2386).
--define(wxPageSetupDialogData_GetPaperId, 2387).
--define(wxPageSetupDialogData_GetPaperSize, 2388).
--define(wxPageSetupDialogData_GetPrintData, 2390).
--define(wxPageSetupDialogData_IsOk, 2391).
--define(wxPageSetupDialogData_SetDefaultInfo, 2392).
--define(wxPageSetupDialogData_SetDefaultMinMargins, 2393).
--define(wxPageSetupDialogData_SetMarginTopLeft, 2394).
--define(wxPageSetupDialogData_SetMarginBottomRight, 2395).
--define(wxPageSetupDialogData_SetMinMarginTopLeft, 2396).
--define(wxPageSetupDialogData_SetMinMarginBottomRight, 2397).
--define(wxPageSetupDialogData_SetPaperId, 2398).
--define(wxPageSetupDialogData_SetPaperSize_1_1, 2399).
--define(wxPageSetupDialogData_SetPaperSize_1_0, 2400).
--define(wxPageSetupDialogData_SetPrintData, 2401).
--define(wxPrintDialog_new_2_0, 2402).
--define(wxPrintDialog_new_2_1, 2403).
--define(wxPrintDialog_destruct, 2404).
--define(wxPrintDialog_GetPrintDialogData, 2405).
--define(wxPrintDialog_GetPrintDC, 2406).
--define(wxPrintDialogData_new_0, 2407).
--define(wxPrintDialogData_new_1_1, 2408).
--define(wxPrintDialogData_new_1_0, 2409).
--define(wxPrintDialogData_destruct, 2410).
--define(wxPrintDialogData_EnableHelp, 2411).
--define(wxPrintDialogData_EnablePageNumbers, 2412).
--define(wxPrintDialogData_EnablePrintToFile, 2413).
--define(wxPrintDialogData_EnableSelection, 2414).
--define(wxPrintDialogData_GetAllPages, 2415).
--define(wxPrintDialogData_GetCollate, 2416).
--define(wxPrintDialogData_GetFromPage, 2417).
--define(wxPrintDialogData_GetMaxPage, 2418).
--define(wxPrintDialogData_GetMinPage, 2419).
--define(wxPrintDialogData_GetNoCopies, 2420).
--define(wxPrintDialogData_GetPrintData, 2421).
--define(wxPrintDialogData_GetPrintToFile, 2422).
--define(wxPrintDialogData_GetSelection, 2423).
--define(wxPrintDialogData_GetToPage, 2424).
--define(wxPrintDialogData_IsOk, 2425).
--define(wxPrintDialogData_SetCollate, 2426).
--define(wxPrintDialogData_SetFromPage, 2427).
--define(wxPrintDialogData_SetMaxPage, 2428).
--define(wxPrintDialogData_SetMinPage, 2429).
--define(wxPrintDialogData_SetNoCopies, 2430).
--define(wxPrintDialogData_SetPrintData, 2431).
--define(wxPrintDialogData_SetPrintToFile, 2432).
--define(wxPrintDialogData_SetSelection, 2433).
--define(wxPrintDialogData_SetToPage, 2434).
--define(wxPrintData_new_0, 2435).
--define(wxPrintData_new_1, 2436).
--define(wxPrintData_destruct, 2437).
--define(wxPrintData_GetCollate, 2438).
--define(wxPrintData_GetBin, 2439).
--define(wxPrintData_GetColour, 2440).
--define(wxPrintData_GetDuplex, 2441).
--define(wxPrintData_GetNoCopies, 2442).
--define(wxPrintData_GetOrientation, 2443).
--define(wxPrintData_GetPaperId, 2444).
--define(wxPrintData_GetPrinterName, 2445).
--define(wxPrintData_GetQuality, 2446).
--define(wxPrintData_IsOk, 2447).
--define(wxPrintData_SetBin, 2448).
--define(wxPrintData_SetCollate, 2449).
--define(wxPrintData_SetColour, 2450).
--define(wxPrintData_SetDuplex, 2451).
--define(wxPrintData_SetNoCopies, 2452).
--define(wxPrintData_SetOrientation, 2453).
--define(wxPrintData_SetPaperId, 2454).
--define(wxPrintData_SetPrinterName, 2455).
--define(wxPrintData_SetQuality, 2456).
--define(wxPrintPreview_new_2, 2459).
--define(wxPrintPreview_new_3, 2460).
--define(wxPrintPreview_destruct, 2462).
--define(wxPrintPreview_GetCanvas, 2463).
--define(wxPrintPreview_GetCurrentPage, 2464).
--define(wxPrintPreview_GetFrame, 2465).
--define(wxPrintPreview_GetMaxPage, 2466).
--define(wxPrintPreview_GetMinPage, 2467).
--define(wxPrintPreview_GetPrintout, 2468).
--define(wxPrintPreview_GetPrintoutForPrinting, 2469).
--define(wxPrintPreview_IsOk, 2470).
--define(wxPrintPreview_PaintPage, 2471).
--define(wxPrintPreview_Print, 2472).
--define(wxPrintPreview_RenderPage, 2473).
--define(wxPrintPreview_SetCanvas, 2474).
--define(wxPrintPreview_SetCurrentPage, 2475).
--define(wxPrintPreview_SetFrame, 2476).
--define(wxPrintPreview_SetPrintout, 2477).
--define(wxPrintPreview_SetZoom, 2478).
--define(wxPreviewFrame_new, 2479).
--define(wxPreviewFrame_destruct, 2480).
--define(wxPreviewFrame_CreateControlBar, 2481).
--define(wxPreviewFrame_CreateCanvas, 2482).
--define(wxPreviewFrame_Initialize, 2483).
--define(wxPreviewFrame_OnCloseWindow, 2484).
--define(wxPreviewControlBar_new, 2485).
--define(wxPreviewControlBar_destruct, 2486).
--define(wxPreviewControlBar_CreateButtons, 2487).
--define(wxPreviewControlBar_GetPrintPreview, 2488).
--define(wxPreviewControlBar_GetZoomControl, 2489).
--define(wxPreviewControlBar_SetZoomControl, 2490).
--define(wxPrinter_new, 2492).
--define(wxPrinter_CreateAbortWindow, 2493).
--define(wxPrinter_GetAbort, 2494).
--define(wxPrinter_GetLastError, 2495).
--define(wxPrinter_GetPrintDialogData, 2496).
--define(wxPrinter_Print, 2497).
--define(wxPrinter_PrintDialog, 2498).
--define(wxPrinter_ReportError, 2499).
--define(wxPrinter_Setup, 2500).
--define(wxPrinter_destroy, 2501).
--define(wxXmlResource_new_1, 2502).
--define(wxXmlResource_new_2, 2503).
--define(wxXmlResource_destruct, 2504).
--define(wxXmlResource_AttachUnknownControl, 2505).
--define(wxXmlResource_ClearHandlers, 2506).
--define(wxXmlResource_CompareVersion, 2507).
--define(wxXmlResource_Get, 2508).
--define(wxXmlResource_GetFlags, 2509).
--define(wxXmlResource_GetVersion, 2510).
--define(wxXmlResource_GetXRCID, 2511).
--define(wxXmlResource_InitAllHandlers, 2512).
--define(wxXmlResource_Load, 2513).
--define(wxXmlResource_LoadBitmap, 2514).
--define(wxXmlResource_LoadDialog_2, 2515).
--define(wxXmlResource_LoadDialog_3, 2516).
--define(wxXmlResource_LoadFrame_2, 2517).
--define(wxXmlResource_LoadFrame_3, 2518).
--define(wxXmlResource_LoadIcon, 2519).
--define(wxXmlResource_LoadMenu, 2520).
--define(wxXmlResource_LoadMenuBar_2, 2521).
--define(wxXmlResource_LoadMenuBar_1, 2522).
--define(wxXmlResource_LoadPanel_2, 2523).
--define(wxXmlResource_LoadPanel_3, 2524).
--define(wxXmlResource_LoadToolBar, 2525).
--define(wxXmlResource_Set, 2526).
--define(wxXmlResource_SetFlags, 2527).
--define(wxXmlResource_Unload, 2528).
--define(wxXmlResource_xrcctrl, 2529).
--define(wxHtmlEasyPrinting_new, 2530).
--define(wxHtmlEasyPrinting_destruct, 2531).
--define(wxHtmlEasyPrinting_GetPrintData, 2532).
--define(wxHtmlEasyPrinting_GetPageSetupData, 2533).
--define(wxHtmlEasyPrinting_PreviewFile, 2534).
--define(wxHtmlEasyPrinting_PreviewText, 2535).
--define(wxHtmlEasyPrinting_PrintFile, 2536).
--define(wxHtmlEasyPrinting_PrintText, 2537).
--define(wxHtmlEasyPrinting_PageSetup, 2538).
--define(wxHtmlEasyPrinting_SetFonts, 2539).
--define(wxHtmlEasyPrinting_SetHeader, 2540).
--define(wxHtmlEasyPrinting_SetFooter, 2541).
--define(wxGLCanvas_new_2, 2543).
--define(wxGLCanvas_new_3_1, 2544).
--define(wxGLCanvas_new_3_0, 2545).
--define(wxGLCanvas_GetContext, 2546).
--define(wxGLCanvas_SetCurrent, 2548).
--define(wxGLCanvas_SwapBuffers, 2549).
--define(wxGLCanvas_destroy, 2550).
--define(wxAuiManager_new, 2551).
--define(wxAuiManager_destruct, 2552).
--define(wxAuiManager_AddPane_2_1, 2553).
--define(wxAuiManager_AddPane_3, 2554).
--define(wxAuiManager_AddPane_2_0, 2555).
--define(wxAuiManager_DetachPane, 2556).
--define(wxAuiManager_GetAllPanes, 2557).
--define(wxAuiManager_GetArtProvider, 2558).
--define(wxAuiManager_GetDockSizeConstraint, 2559).
--define(wxAuiManager_GetFlags, 2560).
--define(wxAuiManager_GetManagedWindow, 2561).
--define(wxAuiManager_GetManager, 2562).
--define(wxAuiManager_GetPane_1_1, 2563).
--define(wxAuiManager_GetPane_1_0, 2564).
--define(wxAuiManager_HideHint, 2565).
--define(wxAuiManager_InsertPane, 2566).
--define(wxAuiManager_LoadPaneInfo, 2567).
--define(wxAuiManager_LoadPerspective, 2568).
--define(wxAuiManager_SavePaneInfo, 2569).
--define(wxAuiManager_SavePerspective, 2570).
--define(wxAuiManager_SetArtProvider, 2571).
--define(wxAuiManager_SetDockSizeConstraint, 2572).
--define(wxAuiManager_SetFlags, 2573).
--define(wxAuiManager_SetManagedWindow, 2574).
--define(wxAuiManager_ShowHint, 2575).
--define(wxAuiManager_UnInit, 2576).
--define(wxAuiManager_Update, 2577).
--define(wxAuiPaneInfo_new_0, 2578).
--define(wxAuiPaneInfo_new_1, 2579).
--define(wxAuiPaneInfo_destruct, 2580).
--define(wxAuiPaneInfo_BestSize_1, 2581).
--define(wxAuiPaneInfo_BestSize_2, 2582).
--define(wxAuiPaneInfo_Bottom, 2583).
--define(wxAuiPaneInfo_BottomDockable, 2584).
--define(wxAuiPaneInfo_Caption, 2585).
--define(wxAuiPaneInfo_CaptionVisible, 2586).
--define(wxAuiPaneInfo_Centre, 2587).
--define(wxAuiPaneInfo_CentrePane, 2588).
--define(wxAuiPaneInfo_CloseButton, 2589).
--define(wxAuiPaneInfo_DefaultPane, 2590).
--define(wxAuiPaneInfo_DestroyOnClose, 2591).
--define(wxAuiPaneInfo_Direction, 2592).
--define(wxAuiPaneInfo_Dock, 2593).
--define(wxAuiPaneInfo_Dockable, 2594).
--define(wxAuiPaneInfo_Fixed, 2595).
--define(wxAuiPaneInfo_Float, 2596).
--define(wxAuiPaneInfo_Floatable, 2597).
--define(wxAuiPaneInfo_FloatingPosition_1, 2598).
--define(wxAuiPaneInfo_FloatingPosition_2, 2599).
--define(wxAuiPaneInfo_FloatingSize_1, 2600).
--define(wxAuiPaneInfo_FloatingSize_2, 2601).
--define(wxAuiPaneInfo_Gripper, 2602).
--define(wxAuiPaneInfo_GripperTop, 2603).
--define(wxAuiPaneInfo_HasBorder, 2604).
--define(wxAuiPaneInfo_HasCaption, 2605).
--define(wxAuiPaneInfo_HasCloseButton, 2606).
--define(wxAuiPaneInfo_HasFlag, 2607).
--define(wxAuiPaneInfo_HasGripper, 2608).
--define(wxAuiPaneInfo_HasGripperTop, 2609).
--define(wxAuiPaneInfo_HasMaximizeButton, 2610).
--define(wxAuiPaneInfo_HasMinimizeButton, 2611).
--define(wxAuiPaneInfo_HasPinButton, 2612).
--define(wxAuiPaneInfo_Hide, 2613).
--define(wxAuiPaneInfo_IsBottomDockable, 2614).
--define(wxAuiPaneInfo_IsDocked, 2615).
--define(wxAuiPaneInfo_IsFixed, 2616).
--define(wxAuiPaneInfo_IsFloatable, 2617).
--define(wxAuiPaneInfo_IsFloating, 2618).
--define(wxAuiPaneInfo_IsLeftDockable, 2619).
--define(wxAuiPaneInfo_IsMovable, 2620).
--define(wxAuiPaneInfo_IsOk, 2621).
--define(wxAuiPaneInfo_IsResizable, 2622).
--define(wxAuiPaneInfo_IsRightDockable, 2623).
--define(wxAuiPaneInfo_IsShown, 2624).
--define(wxAuiPaneInfo_IsToolbar, 2625).
--define(wxAuiPaneInfo_IsTopDockable, 2626).
--define(wxAuiPaneInfo_Layer, 2627).
--define(wxAuiPaneInfo_Left, 2628).
--define(wxAuiPaneInfo_LeftDockable, 2629).
--define(wxAuiPaneInfo_MaxSize_1, 2630).
--define(wxAuiPaneInfo_MaxSize_2, 2631).
--define(wxAuiPaneInfo_MaximizeButton, 2632).
--define(wxAuiPaneInfo_MinSize_1, 2633).
--define(wxAuiPaneInfo_MinSize_2, 2634).
--define(wxAuiPaneInfo_MinimizeButton, 2635).
--define(wxAuiPaneInfo_Movable, 2636).
--define(wxAuiPaneInfo_Name, 2637).
--define(wxAuiPaneInfo_PaneBorder, 2638).
--define(wxAuiPaneInfo_PinButton, 2639).
--define(wxAuiPaneInfo_Position, 2640).
--define(wxAuiPaneInfo_Resizable, 2641).
--define(wxAuiPaneInfo_Right, 2642).
--define(wxAuiPaneInfo_RightDockable, 2643).
--define(wxAuiPaneInfo_Row, 2644).
--define(wxAuiPaneInfo_SafeSet, 2645).
--define(wxAuiPaneInfo_SetFlag, 2646).
--define(wxAuiPaneInfo_Show, 2647).
--define(wxAuiPaneInfo_ToolbarPane, 2648).
--define(wxAuiPaneInfo_Top, 2649).
--define(wxAuiPaneInfo_TopDockable, 2650).
--define(wxAuiPaneInfo_Window, 2651).
--define(wxAuiNotebook_new_0, 2652).
--define(wxAuiNotebook_new_2, 2653).
--define(wxAuiNotebook_AddPage, 2654).
--define(wxAuiNotebook_Create, 2655).
--define(wxAuiNotebook_DeletePage, 2656).
--define(wxAuiNotebook_GetArtProvider, 2657).
--define(wxAuiNotebook_GetPage, 2658).
--define(wxAuiNotebook_GetPageBitmap, 2659).
--define(wxAuiNotebook_GetPageCount, 2660).
--define(wxAuiNotebook_GetPageIndex, 2661).
--define(wxAuiNotebook_GetPageText, 2662).
--define(wxAuiNotebook_GetSelection, 2663).
--define(wxAuiNotebook_InsertPage, 2664).
--define(wxAuiNotebook_RemovePage, 2665).
--define(wxAuiNotebook_SetArtProvider, 2666).
--define(wxAuiNotebook_SetFont, 2667).
--define(wxAuiNotebook_SetPageBitmap, 2668).
--define(wxAuiNotebook_SetPageText, 2669).
--define(wxAuiNotebook_SetSelection, 2670).
--define(wxAuiNotebook_SetTabCtrlHeight, 2671).
--define(wxAuiNotebook_SetUniformBitmapSize, 2672).
--define(wxAuiNotebook_destroy, 2673).
--define(wxMDIParentFrame_new_0, 2674).
--define(wxMDIParentFrame_new_4, 2675).
--define(wxMDIParentFrame_destruct, 2676).
--define(wxMDIParentFrame_ActivateNext, 2677).
--define(wxMDIParentFrame_ActivatePrevious, 2678).
--define(wxMDIParentFrame_ArrangeIcons, 2679).
--define(wxMDIParentFrame_Cascade, 2680).
--define(wxMDIParentFrame_Create, 2681).
--define(wxMDIParentFrame_GetActiveChild, 2682).
--define(wxMDIParentFrame_GetClientWindow, 2683).
--define(wxMDIParentFrame_Tile, 2684).
--define(wxMDIChildFrame_new_0, 2685).
--define(wxMDIChildFrame_new_4, 2686).
--define(wxMDIChildFrame_destruct, 2687).
--define(wxMDIChildFrame_Activate, 2688).
--define(wxMDIChildFrame_Create, 2689).
--define(wxMDIChildFrame_Maximize, 2690).
--define(wxMDIChildFrame_Restore, 2691).
--define(wxMDIClientWindow_new_0, 2692).
--define(wxMDIClientWindow_new_2, 2693).
--define(wxMDIClientWindow_destruct, 2694).
--define(wxMDIClientWindow_CreateClient, 2695).
--define(wxLayoutAlgorithm_new, 2696).
--define(wxLayoutAlgorithm_LayoutFrame, 2697).
--define(wxLayoutAlgorithm_LayoutMDIFrame, 2698).
--define(wxLayoutAlgorithm_LayoutWindow, 2699).
--define(wxLayoutAlgorithm_destroy, 2700).
--define(wxEvent_GetId, 2701).
--define(wxEvent_GetSkipped, 2702).
--define(wxEvent_GetTimestamp, 2703).
--define(wxEvent_IsCommandEvent, 2704).
--define(wxEvent_ResumePropagation, 2705).
--define(wxEvent_ShouldPropagate, 2706).
--define(wxEvent_Skip, 2707).
--define(wxEvent_StopPropagation, 2708).
--define(wxCommandEvent_getClientData, 2709).
--define(wxCommandEvent_GetExtraLong, 2710).
--define(wxCommandEvent_GetInt, 2711).
--define(wxCommandEvent_GetSelection, 2712).
--define(wxCommandEvent_GetString, 2713).
--define(wxCommandEvent_IsChecked, 2714).
--define(wxCommandEvent_IsSelection, 2715).
--define(wxCommandEvent_SetInt, 2716).
--define(wxCommandEvent_SetString, 2717).
--define(wxScrollEvent_GetOrientation, 2718).
--define(wxScrollEvent_GetPosition, 2719).
--define(wxScrollWinEvent_GetOrientation, 2720).
--define(wxScrollWinEvent_GetPosition, 2721).
--define(wxMouseEvent_AltDown, 2722).
--define(wxMouseEvent_Button, 2723).
--define(wxMouseEvent_ButtonDClick, 2724).
--define(wxMouseEvent_ButtonDown, 2725).
--define(wxMouseEvent_ButtonUp, 2726).
--define(wxMouseEvent_CmdDown, 2727).
--define(wxMouseEvent_ControlDown, 2728).
--define(wxMouseEvent_Dragging, 2729).
--define(wxMouseEvent_Entering, 2730).
--define(wxMouseEvent_GetButton, 2731).
--define(wxMouseEvent_GetPosition, 2734).
--define(wxMouseEvent_GetLogicalPosition, 2735).
--define(wxMouseEvent_GetLinesPerAction, 2736).
--define(wxMouseEvent_GetWheelRotation, 2737).
--define(wxMouseEvent_GetWheelDelta, 2738).
--define(wxMouseEvent_GetX, 2739).
--define(wxMouseEvent_GetY, 2740).
--define(wxMouseEvent_IsButton, 2741).
--define(wxMouseEvent_IsPageScroll, 2742).
--define(wxMouseEvent_Leaving, 2743).
--define(wxMouseEvent_LeftDClick, 2744).
--define(wxMouseEvent_LeftDown, 2745).
--define(wxMouseEvent_LeftIsDown, 2746).
--define(wxMouseEvent_LeftUp, 2747).
--define(wxMouseEvent_MetaDown, 2748).
--define(wxMouseEvent_MiddleDClick, 2749).
--define(wxMouseEvent_MiddleDown, 2750).
--define(wxMouseEvent_MiddleIsDown, 2751).
--define(wxMouseEvent_MiddleUp, 2752).
--define(wxMouseEvent_Moving, 2753).
--define(wxMouseEvent_RightDClick, 2754).
--define(wxMouseEvent_RightDown, 2755).
--define(wxMouseEvent_RightIsDown, 2756).
--define(wxMouseEvent_RightUp, 2757).
--define(wxMouseEvent_ShiftDown, 2758).
--define(wxSetCursorEvent_GetCursor, 2759).
--define(wxSetCursorEvent_GetX, 2760).
--define(wxSetCursorEvent_GetY, 2761).
--define(wxSetCursorEvent_HasCursor, 2762).
--define(wxSetCursorEvent_SetCursor, 2763).
--define(wxKeyEvent_AltDown, 2764).
--define(wxKeyEvent_CmdDown, 2765).
--define(wxKeyEvent_ControlDown, 2766).
--define(wxKeyEvent_GetKeyCode, 2767).
--define(wxKeyEvent_GetModifiers, 2768).
--define(wxKeyEvent_GetPosition, 2771).
--define(wxKeyEvent_GetRawKeyCode, 2772).
--define(wxKeyEvent_GetRawKeyFlags, 2773).
--define(wxKeyEvent_GetUnicodeKey, 2774).
--define(wxKeyEvent_GetX, 2775).
--define(wxKeyEvent_GetY, 2776).
--define(wxKeyEvent_HasModifiers, 2777).
--define(wxKeyEvent_MetaDown, 2778).
--define(wxKeyEvent_ShiftDown, 2779).
--define(wxSizeEvent_GetSize, 2780).
--define(wxMoveEvent_GetPosition, 2781).
--define(wxEraseEvent_GetDC, 2782).
--define(wxFocusEvent_GetWindow, 2783).
--define(wxChildFocusEvent_GetWindow, 2784).
--define(wxMenuEvent_GetMenu, 2785).
--define(wxMenuEvent_GetMenuId, 2786).
--define(wxMenuEvent_IsPopup, 2787).
--define(wxCloseEvent_CanVeto, 2788).
--define(wxCloseEvent_GetLoggingOff, 2789).
--define(wxCloseEvent_SetCanVeto, 2790).
--define(wxCloseEvent_SetLoggingOff, 2791).
--define(wxCloseEvent_Veto, 2792).
--define(wxShowEvent_SetShow, 2793).
--define(wxShowEvent_GetShow, 2794).
--define(wxIconizeEvent_Iconized, 2795).
--define(wxJoystickEvent_ButtonDown, 2796).
--define(wxJoystickEvent_ButtonIsDown, 2797).
--define(wxJoystickEvent_ButtonUp, 2798).
--define(wxJoystickEvent_GetButtonChange, 2799).
--define(wxJoystickEvent_GetButtonState, 2800).
--define(wxJoystickEvent_GetJoystick, 2801).
--define(wxJoystickEvent_GetPosition, 2802).
--define(wxJoystickEvent_GetZPosition, 2803).
--define(wxJoystickEvent_IsButton, 2804).
--define(wxJoystickEvent_IsMove, 2805).
--define(wxJoystickEvent_IsZMove, 2806).
--define(wxUpdateUIEvent_CanUpdate, 2807).
--define(wxUpdateUIEvent_Check, 2808).
--define(wxUpdateUIEvent_Enable, 2809).
--define(wxUpdateUIEvent_Show, 2810).
--define(wxUpdateUIEvent_GetChecked, 2811).
--define(wxUpdateUIEvent_GetEnabled, 2812).
--define(wxUpdateUIEvent_GetShown, 2813).
--define(wxUpdateUIEvent_GetSetChecked, 2814).
--define(wxUpdateUIEvent_GetSetEnabled, 2815).
--define(wxUpdateUIEvent_GetSetShown, 2816).
--define(wxUpdateUIEvent_GetSetText, 2817).
--define(wxUpdateUIEvent_GetText, 2818).
--define(wxUpdateUIEvent_GetMode, 2819).
--define(wxUpdateUIEvent_GetUpdateInterval, 2820).
--define(wxUpdateUIEvent_ResetUpdateTime, 2821).
--define(wxUpdateUIEvent_SetMode, 2822).
--define(wxUpdateUIEvent_SetText, 2823).
--define(wxUpdateUIEvent_SetUpdateInterval, 2824).
--define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2825).
--define(wxPaletteChangedEvent_SetChangedWindow, 2826).
--define(wxPaletteChangedEvent_GetChangedWindow, 2827).
--define(wxQueryNewPaletteEvent_SetPaletteRealized, 2828).
--define(wxQueryNewPaletteEvent_GetPaletteRealized, 2829).
--define(wxNavigationKeyEvent_GetDirection, 2830).
--define(wxNavigationKeyEvent_SetDirection, 2831).
--define(wxNavigationKeyEvent_IsWindowChange, 2832).
--define(wxNavigationKeyEvent_SetWindowChange, 2833).
--define(wxNavigationKeyEvent_IsFromTab, 2834).
--define(wxNavigationKeyEvent_SetFromTab, 2835).
--define(wxNavigationKeyEvent_GetCurrentFocus, 2836).
--define(wxNavigationKeyEvent_SetCurrentFocus, 2837).
--define(wxHelpEvent_GetOrigin, 2838).
--define(wxHelpEvent_GetPosition, 2839).
--define(wxHelpEvent_SetOrigin, 2840).
--define(wxHelpEvent_SetPosition, 2841).
--define(wxContextMenuEvent_GetPosition, 2842).
--define(wxContextMenuEvent_SetPosition, 2843).
--define(wxIdleEvent_CanSend, 2844).
--define(wxIdleEvent_GetMode, 2845).
--define(wxIdleEvent_RequestMore, 2846).
--define(wxIdleEvent_MoreRequested, 2847).
--define(wxIdleEvent_SetMode, 2848).
--define(wxGridEvent_AltDown, 2849).
--define(wxGridEvent_ControlDown, 2850).
--define(wxGridEvent_GetCol, 2851).
--define(wxGridEvent_GetPosition, 2852).
--define(wxGridEvent_GetRow, 2853).
--define(wxGridEvent_MetaDown, 2854).
--define(wxGridEvent_Selecting, 2855).
--define(wxGridEvent_ShiftDown, 2856).
--define(wxNotifyEvent_Allow, 2857).
--define(wxNotifyEvent_IsAllowed, 2858).
--define(wxNotifyEvent_Veto, 2859).
--define(wxSashEvent_GetEdge, 2860).
--define(wxSashEvent_GetDragRect, 2861).
--define(wxSashEvent_GetDragStatus, 2862).
--define(wxListEvent_GetCacheFrom, 2863).
--define(wxListEvent_GetCacheTo, 2864).
--define(wxListEvent_GetKeyCode, 2865).
--define(wxListEvent_GetIndex, 2866).
--define(wxListEvent_GetColumn, 2867).
--define(wxListEvent_GetPoint, 2868).
--define(wxListEvent_GetLabel, 2869).
--define(wxListEvent_GetText, 2870).
--define(wxListEvent_GetImage, 2871).
--define(wxListEvent_GetData, 2872).
--define(wxListEvent_GetMask, 2873).
--define(wxListEvent_GetItem, 2874).
--define(wxListEvent_IsEditCancelled, 2875).
--define(wxDateEvent_GetDate, 2876).
--define(wxCalendarEvent_GetWeekDay, 2877).
--define(wxFileDirPickerEvent_GetPath, 2878).
--define(wxColourPickerEvent_GetColour, 2879).
--define(wxFontPickerEvent_GetFont, 2880).
--define(wxStyledTextEvent_GetPosition, 2881).
--define(wxStyledTextEvent_GetKey, 2882).
--define(wxStyledTextEvent_GetModifiers, 2883).
--define(wxStyledTextEvent_GetModificationType, 2884).
--define(wxStyledTextEvent_GetText, 2885).
--define(wxStyledTextEvent_GetLength, 2886).
--define(wxStyledTextEvent_GetLinesAdded, 2887).
--define(wxStyledTextEvent_GetLine, 2888).
--define(wxStyledTextEvent_GetFoldLevelNow, 2889).
--define(wxStyledTextEvent_GetFoldLevelPrev, 2890).
--define(wxStyledTextEvent_GetMargin, 2891).
--define(wxStyledTextEvent_GetMessage, 2892).
--define(wxStyledTextEvent_GetWParam, 2893).
--define(wxStyledTextEvent_GetLParam, 2894).
--define(wxStyledTextEvent_GetListType, 2895).
--define(wxStyledTextEvent_GetX, 2896).
--define(wxStyledTextEvent_GetY, 2897).
--define(wxStyledTextEvent_GetDragText, 2898).
--define(wxStyledTextEvent_GetDragAllowMove, 2899).
--define(wxStyledTextEvent_GetDragResult, 2900).
--define(wxStyledTextEvent_GetShift, 2901).
--define(wxStyledTextEvent_GetControl, 2902).
--define(wxStyledTextEvent_GetAlt, 2903).
--define(utils_wxGetKeyState, 2904).
--define(utils_wxGetMousePosition, 2905).
--define(utils_wxGetMouseState, 2906).
--define(utils_wxSetDetectableAutoRepeat, 2907).
--define(utils_wxBell, 2908).
--define(utils_wxFindMenuItemId, 2909).
--define(utils_wxGenericFindWindowAtPoint, 2910).
--define(utils_wxFindWindowAtPoint, 2911).
--define(utils_wxBeginBusyCursor, 2912).
--define(utils_wxEndBusyCursor, 2913).
--define(utils_wxIsBusy, 2914).
--define(utils_wxShutdown, 2915).
--define(utils_wxShell, 2916).
--define(utils_wxLaunchDefaultBrowser, 2917).
--define(utils_wxGetEmailAddress, 2918).
--define(utils_wxGetUserId, 2919).
--define(utils_wxGetHomeDir, 2920).
--define(utils_wxNewId, 2921).
--define(utils_wxRegisterId, 2922).
--define(utils_wxGetCurrentId, 2923).
--define(utils_wxGetOsDescription, 2924).
--define(utils_wxIsPlatformLittleEndian, 2925).
--define(utils_wxIsPlatform64Bit, 2926).
--define(wxPrintout_new, 2927).
--define(wxPrintout_destruct, 2928).
--define(wxPrintout_GetDC, 2929).
--define(wxPrintout_GetPageSizeMM, 2930).
--define(wxPrintout_GetPageSizePixels, 2931).
--define(wxPrintout_GetPaperRectPixels, 2932).
--define(wxPrintout_GetPPIPrinter, 2933).
--define(wxPrintout_GetPPIScreen, 2934).
--define(wxPrintout_GetTitle, 2935).
--define(wxPrintout_IsPreview, 2936).
--define(wxPrintout_FitThisSizeToPaper, 2937).
--define(wxPrintout_FitThisSizeToPage, 2938).
--define(wxPrintout_FitThisSizeToPageMargins, 2939).
--define(wxPrintout_MapScreenSizeToPaper, 2940).
--define(wxPrintout_MapScreenSizeToPage, 2941).
--define(wxPrintout_MapScreenSizeToPageMargins, 2942).
--define(wxPrintout_MapScreenSizeToDevice, 2943).
--define(wxPrintout_GetLogicalPaperRect, 2944).
--define(wxPrintout_GetLogicalPageRect, 2945).
--define(wxPrintout_GetLogicalPageMarginsRect, 2946).
--define(wxPrintout_SetLogicalOrigin, 2947).
--define(wxPrintout_OffsetLogicalOrigin, 2948).
--define(wxStyledTextCtrl_new_2, 2949).
--define(wxStyledTextCtrl_new_0, 2950).
--define(wxStyledTextCtrl_destruct, 2951).
--define(wxStyledTextCtrl_Create, 2952).
--define(wxStyledTextCtrl_AddText, 2953).
--define(wxStyledTextCtrl_AddStyledText, 2954).
--define(wxStyledTextCtrl_InsertText, 2955).
--define(wxStyledTextCtrl_ClearAll, 2956).
--define(wxStyledTextCtrl_ClearDocumentStyle, 2957).
--define(wxStyledTextCtrl_GetLength, 2958).
--define(wxStyledTextCtrl_GetCharAt, 2959).
--define(wxStyledTextCtrl_GetCurrentPos, 2960).
--define(wxStyledTextCtrl_GetAnchor, 2961).
--define(wxStyledTextCtrl_GetStyleAt, 2962).
--define(wxStyledTextCtrl_Redo, 2963).
--define(wxStyledTextCtrl_SetUndoCollection, 2964).
--define(wxStyledTextCtrl_SelectAll, 2965).
--define(wxStyledTextCtrl_SetSavePoint, 2966).
--define(wxStyledTextCtrl_GetStyledText, 2967).
--define(wxStyledTextCtrl_CanRedo, 2968).
--define(wxStyledTextCtrl_MarkerLineFromHandle, 2969).
--define(wxStyledTextCtrl_MarkerDeleteHandle, 2970).
--define(wxStyledTextCtrl_GetUndoCollection, 2971).
--define(wxStyledTextCtrl_GetViewWhiteSpace, 2972).
--define(wxStyledTextCtrl_SetViewWhiteSpace, 2973).
--define(wxStyledTextCtrl_PositionFromPoint, 2974).
--define(wxStyledTextCtrl_PositionFromPointClose, 2975).
--define(wxStyledTextCtrl_GotoLine, 2976).
--define(wxStyledTextCtrl_GotoPos, 2977).
--define(wxStyledTextCtrl_SetAnchor, 2978).
--define(wxStyledTextCtrl_GetCurLine, 2979).
--define(wxStyledTextCtrl_GetEndStyled, 2980).
--define(wxStyledTextCtrl_ConvertEOLs, 2981).
--define(wxStyledTextCtrl_GetEOLMode, 2982).
--define(wxStyledTextCtrl_SetEOLMode, 2983).
--define(wxStyledTextCtrl_StartStyling, 2984).
--define(wxStyledTextCtrl_SetStyling, 2985).
--define(wxStyledTextCtrl_GetBufferedDraw, 2986).
--define(wxStyledTextCtrl_SetBufferedDraw, 2987).
--define(wxStyledTextCtrl_SetTabWidth, 2988).
--define(wxStyledTextCtrl_GetTabWidth, 2989).
--define(wxStyledTextCtrl_SetCodePage, 2990).
--define(wxStyledTextCtrl_MarkerDefine, 2991).
--define(wxStyledTextCtrl_MarkerSetForeground, 2992).
--define(wxStyledTextCtrl_MarkerSetBackground, 2993).
--define(wxStyledTextCtrl_MarkerAdd, 2994).
--define(wxStyledTextCtrl_MarkerDelete, 2995).
--define(wxStyledTextCtrl_MarkerDeleteAll, 2996).
--define(wxStyledTextCtrl_MarkerGet, 2997).
--define(wxStyledTextCtrl_MarkerNext, 2998).
--define(wxStyledTextCtrl_MarkerPrevious, 2999).
--define(wxStyledTextCtrl_MarkerDefineBitmap, 3000).
--define(wxStyledTextCtrl_MarkerAddSet, 3001).
--define(wxStyledTextCtrl_MarkerSetAlpha, 3002).
--define(wxStyledTextCtrl_SetMarginType, 3003).
--define(wxStyledTextCtrl_GetMarginType, 3004).
--define(wxStyledTextCtrl_SetMarginWidth, 3005).
--define(wxStyledTextCtrl_GetMarginWidth, 3006).
--define(wxStyledTextCtrl_SetMarginMask, 3007).
--define(wxStyledTextCtrl_GetMarginMask, 3008).
--define(wxStyledTextCtrl_SetMarginSensitive, 3009).
--define(wxStyledTextCtrl_GetMarginSensitive, 3010).
--define(wxStyledTextCtrl_StyleClearAll, 3011).
--define(wxStyledTextCtrl_StyleSetForeground, 3012).
--define(wxStyledTextCtrl_StyleSetBackground, 3013).
--define(wxStyledTextCtrl_StyleSetBold, 3014).
--define(wxStyledTextCtrl_StyleSetItalic, 3015).
--define(wxStyledTextCtrl_StyleSetSize, 3016).
--define(wxStyledTextCtrl_StyleSetFaceName, 3017).
--define(wxStyledTextCtrl_StyleSetEOLFilled, 3018).
--define(wxStyledTextCtrl_StyleResetDefault, 3019).
--define(wxStyledTextCtrl_StyleSetUnderline, 3020).
--define(wxStyledTextCtrl_StyleSetCase, 3021).
--define(wxStyledTextCtrl_StyleSetHotSpot, 3022).
--define(wxStyledTextCtrl_SetSelForeground, 3023).
--define(wxStyledTextCtrl_SetSelBackground, 3024).
--define(wxStyledTextCtrl_GetSelAlpha, 3025).
--define(wxStyledTextCtrl_SetSelAlpha, 3026).
--define(wxStyledTextCtrl_SetCaretForeground, 3027).
--define(wxStyledTextCtrl_CmdKeyAssign, 3028).
--define(wxStyledTextCtrl_CmdKeyClear, 3029).
--define(wxStyledTextCtrl_CmdKeyClearAll, 3030).
--define(wxStyledTextCtrl_SetStyleBytes, 3031).
--define(wxStyledTextCtrl_StyleSetVisible, 3032).
--define(wxStyledTextCtrl_GetCaretPeriod, 3033).
--define(wxStyledTextCtrl_SetCaretPeriod, 3034).
--define(wxStyledTextCtrl_SetWordChars, 3035).
--define(wxStyledTextCtrl_BeginUndoAction, 3036).
--define(wxStyledTextCtrl_EndUndoAction, 3037).
--define(wxStyledTextCtrl_IndicatorSetStyle, 3038).
--define(wxStyledTextCtrl_IndicatorGetStyle, 3039).
--define(wxStyledTextCtrl_IndicatorSetForeground, 3040).
--define(wxStyledTextCtrl_IndicatorGetForeground, 3041).
--define(wxStyledTextCtrl_SetWhitespaceForeground, 3042).
--define(wxStyledTextCtrl_SetWhitespaceBackground, 3043).
--define(wxStyledTextCtrl_GetStyleBits, 3044).
--define(wxStyledTextCtrl_SetLineState, 3045).
--define(wxStyledTextCtrl_GetLineState, 3046).
--define(wxStyledTextCtrl_GetMaxLineState, 3047).
--define(wxStyledTextCtrl_GetCaretLineVisible, 3048).
--define(wxStyledTextCtrl_SetCaretLineVisible, 3049).
--define(wxStyledTextCtrl_GetCaretLineBackground, 3050).
--define(wxStyledTextCtrl_SetCaretLineBackground, 3051).
--define(wxStyledTextCtrl_AutoCompShow, 3052).
--define(wxStyledTextCtrl_AutoCompCancel, 3053).
--define(wxStyledTextCtrl_AutoCompActive, 3054).
--define(wxStyledTextCtrl_AutoCompPosStart, 3055).
--define(wxStyledTextCtrl_AutoCompComplete, 3056).
--define(wxStyledTextCtrl_AutoCompStops, 3057).
--define(wxStyledTextCtrl_AutoCompSetSeparator, 3058).
--define(wxStyledTextCtrl_AutoCompGetSeparator, 3059).
--define(wxStyledTextCtrl_AutoCompSelect, 3060).
--define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3061).
--define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3062).
--define(wxStyledTextCtrl_AutoCompSetFillUps, 3063).
--define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3064).
--define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3065).
--define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3066).
--define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3067).
--define(wxStyledTextCtrl_UserListShow, 3068).
--define(wxStyledTextCtrl_AutoCompSetAutoHide, 3069).
--define(wxStyledTextCtrl_AutoCompGetAutoHide, 3070).
--define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3071).
--define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3072).
--define(wxStyledTextCtrl_RegisterImage, 3073).
--define(wxStyledTextCtrl_ClearRegisteredImages, 3074).
--define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3075).
--define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3076).
--define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3077).
--define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3078).
--define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3079).
--define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3080).
--define(wxStyledTextCtrl_SetIndent, 3081).
--define(wxStyledTextCtrl_GetIndent, 3082).
--define(wxStyledTextCtrl_SetUseTabs, 3083).
--define(wxStyledTextCtrl_GetUseTabs, 3084).
--define(wxStyledTextCtrl_SetLineIndentation, 3085).
--define(wxStyledTextCtrl_GetLineIndentation, 3086).
--define(wxStyledTextCtrl_GetLineIndentPosition, 3087).
--define(wxStyledTextCtrl_GetColumn, 3088).
--define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3089).
--define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3090).
--define(wxStyledTextCtrl_SetIndentationGuides, 3091).
--define(wxStyledTextCtrl_GetIndentationGuides, 3092).
--define(wxStyledTextCtrl_SetHighlightGuide, 3093).
--define(wxStyledTextCtrl_GetHighlightGuide, 3094).
--define(wxStyledTextCtrl_GetLineEndPosition, 3095).
--define(wxStyledTextCtrl_GetCodePage, 3096).
--define(wxStyledTextCtrl_GetCaretForeground, 3097).
--define(wxStyledTextCtrl_GetReadOnly, 3098).
--define(wxStyledTextCtrl_SetCurrentPos, 3099).
--define(wxStyledTextCtrl_SetSelectionStart, 3100).
--define(wxStyledTextCtrl_GetSelectionStart, 3101).
--define(wxStyledTextCtrl_SetSelectionEnd, 3102).
--define(wxStyledTextCtrl_GetSelectionEnd, 3103).
--define(wxStyledTextCtrl_SetPrintMagnification, 3104).
--define(wxStyledTextCtrl_GetPrintMagnification, 3105).
--define(wxStyledTextCtrl_SetPrintColourMode, 3106).
--define(wxStyledTextCtrl_GetPrintColourMode, 3107).
--define(wxStyledTextCtrl_FindText, 3108).
--define(wxStyledTextCtrl_FormatRange, 3109).
--define(wxStyledTextCtrl_GetFirstVisibleLine, 3110).
--define(wxStyledTextCtrl_GetLine, 3111).
--define(wxStyledTextCtrl_GetLineCount, 3112).
--define(wxStyledTextCtrl_SetMarginLeft, 3113).
--define(wxStyledTextCtrl_GetMarginLeft, 3114).
--define(wxStyledTextCtrl_SetMarginRight, 3115).
--define(wxStyledTextCtrl_GetMarginRight, 3116).
--define(wxStyledTextCtrl_GetModify, 3117).
--define(wxStyledTextCtrl_SetSelection, 3118).
--define(wxStyledTextCtrl_GetSelectedText, 3119).
--define(wxStyledTextCtrl_GetTextRange, 3120).
--define(wxStyledTextCtrl_HideSelection, 3121).
--define(wxStyledTextCtrl_LineFromPosition, 3122).
--define(wxStyledTextCtrl_PositionFromLine, 3123).
--define(wxStyledTextCtrl_LineScroll, 3124).
--define(wxStyledTextCtrl_EnsureCaretVisible, 3125).
--define(wxStyledTextCtrl_ReplaceSelection, 3126).
--define(wxStyledTextCtrl_SetReadOnly, 3127).
--define(wxStyledTextCtrl_CanPaste, 3128).
--define(wxStyledTextCtrl_CanUndo, 3129).
--define(wxStyledTextCtrl_EmptyUndoBuffer, 3130).
--define(wxStyledTextCtrl_Undo, 3131).
--define(wxStyledTextCtrl_Cut, 3132).
--define(wxStyledTextCtrl_Copy, 3133).
--define(wxStyledTextCtrl_Paste, 3134).
--define(wxStyledTextCtrl_Clear, 3135).
--define(wxStyledTextCtrl_SetText, 3136).
--define(wxStyledTextCtrl_GetText, 3137).
--define(wxStyledTextCtrl_GetTextLength, 3138).
--define(wxStyledTextCtrl_GetOvertype, 3139).
--define(wxStyledTextCtrl_SetCaretWidth, 3140).
--define(wxStyledTextCtrl_GetCaretWidth, 3141).
--define(wxStyledTextCtrl_SetTargetStart, 3142).
--define(wxStyledTextCtrl_GetTargetStart, 3143).
--define(wxStyledTextCtrl_SetTargetEnd, 3144).
--define(wxStyledTextCtrl_GetTargetEnd, 3145).
--define(wxStyledTextCtrl_ReplaceTarget, 3146).
--define(wxStyledTextCtrl_SearchInTarget, 3147).
--define(wxStyledTextCtrl_SetSearchFlags, 3148).
--define(wxStyledTextCtrl_GetSearchFlags, 3149).
--define(wxStyledTextCtrl_CallTipShow, 3150).
--define(wxStyledTextCtrl_CallTipCancel, 3151).
--define(wxStyledTextCtrl_CallTipActive, 3152).
--define(wxStyledTextCtrl_CallTipPosAtStart, 3153).
--define(wxStyledTextCtrl_CallTipSetHighlight, 3154).
--define(wxStyledTextCtrl_CallTipSetBackground, 3155).
--define(wxStyledTextCtrl_CallTipSetForeground, 3156).
--define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3157).
--define(wxStyledTextCtrl_CallTipUseStyle, 3158).
--define(wxStyledTextCtrl_VisibleFromDocLine, 3159).
--define(wxStyledTextCtrl_DocLineFromVisible, 3160).
--define(wxStyledTextCtrl_WrapCount, 3161).
--define(wxStyledTextCtrl_SetFoldLevel, 3162).
--define(wxStyledTextCtrl_GetFoldLevel, 3163).
--define(wxStyledTextCtrl_GetLastChild, 3164).
--define(wxStyledTextCtrl_GetFoldParent, 3165).
--define(wxStyledTextCtrl_ShowLines, 3166).
--define(wxStyledTextCtrl_HideLines, 3167).
--define(wxStyledTextCtrl_GetLineVisible, 3168).
--define(wxStyledTextCtrl_SetFoldExpanded, 3169).
--define(wxStyledTextCtrl_GetFoldExpanded, 3170).
--define(wxStyledTextCtrl_ToggleFold, 3171).
--define(wxStyledTextCtrl_EnsureVisible, 3172).
--define(wxStyledTextCtrl_SetFoldFlags, 3173).
--define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3174).
--define(wxStyledTextCtrl_SetTabIndents, 3175).
--define(wxStyledTextCtrl_GetTabIndents, 3176).
--define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3177).
--define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3178).
--define(wxStyledTextCtrl_SetMouseDwellTime, 3179).
--define(wxStyledTextCtrl_GetMouseDwellTime, 3180).
--define(wxStyledTextCtrl_WordStartPosition, 3181).
--define(wxStyledTextCtrl_WordEndPosition, 3182).
--define(wxStyledTextCtrl_SetWrapMode, 3183).
--define(wxStyledTextCtrl_GetWrapMode, 3184).
--define(wxStyledTextCtrl_SetWrapVisualFlags, 3185).
--define(wxStyledTextCtrl_GetWrapVisualFlags, 3186).
--define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3187).
--define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3188).
--define(wxStyledTextCtrl_SetWrapStartIndent, 3189).
--define(wxStyledTextCtrl_GetWrapStartIndent, 3190).
--define(wxStyledTextCtrl_SetLayoutCache, 3191).
--define(wxStyledTextCtrl_GetLayoutCache, 3192).
--define(wxStyledTextCtrl_SetScrollWidth, 3193).
--define(wxStyledTextCtrl_GetScrollWidth, 3194).
--define(wxStyledTextCtrl_TextWidth, 3195).
--define(wxStyledTextCtrl_GetEndAtLastLine, 3196).
--define(wxStyledTextCtrl_TextHeight, 3197).
--define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3198).
--define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3199).
--define(wxStyledTextCtrl_AppendText, 3200).
--define(wxStyledTextCtrl_GetTwoPhaseDraw, 3201).
--define(wxStyledTextCtrl_SetTwoPhaseDraw, 3202).
--define(wxStyledTextCtrl_TargetFromSelection, 3203).
--define(wxStyledTextCtrl_LinesJoin, 3204).
--define(wxStyledTextCtrl_LinesSplit, 3205).
--define(wxStyledTextCtrl_SetFoldMarginColour, 3206).
--define(wxStyledTextCtrl_SetFoldMarginHiColour, 3207).
--define(wxStyledTextCtrl_LineDown, 3208).
--define(wxStyledTextCtrl_LineDownExtend, 3209).
--define(wxStyledTextCtrl_LineUp, 3210).
--define(wxStyledTextCtrl_LineUpExtend, 3211).
--define(wxStyledTextCtrl_CharLeft, 3212).
--define(wxStyledTextCtrl_CharLeftExtend, 3213).
--define(wxStyledTextCtrl_CharRight, 3214).
--define(wxStyledTextCtrl_CharRightExtend, 3215).
--define(wxStyledTextCtrl_WordLeft, 3216).
--define(wxStyledTextCtrl_WordLeftExtend, 3217).
--define(wxStyledTextCtrl_WordRight, 3218).
--define(wxStyledTextCtrl_WordRightExtend, 3219).
--define(wxStyledTextCtrl_Home, 3220).
--define(wxStyledTextCtrl_HomeExtend, 3221).
--define(wxStyledTextCtrl_LineEnd, 3222).
--define(wxStyledTextCtrl_LineEndExtend, 3223).
--define(wxStyledTextCtrl_DocumentStart, 3224).
--define(wxStyledTextCtrl_DocumentStartExtend, 3225).
--define(wxStyledTextCtrl_DocumentEnd, 3226).
--define(wxStyledTextCtrl_DocumentEndExtend, 3227).
--define(wxStyledTextCtrl_PageUp, 3228).
--define(wxStyledTextCtrl_PageUpExtend, 3229).
--define(wxStyledTextCtrl_PageDown, 3230).
--define(wxStyledTextCtrl_PageDownExtend, 3231).
--define(wxStyledTextCtrl_EditToggleOvertype, 3232).
--define(wxStyledTextCtrl_Cancel, 3233).
--define(wxStyledTextCtrl_DeleteBack, 3234).
--define(wxStyledTextCtrl_Tab, 3235).
--define(wxStyledTextCtrl_BackTab, 3236).
--define(wxStyledTextCtrl_NewLine, 3237).
--define(wxStyledTextCtrl_FormFeed, 3238).
--define(wxStyledTextCtrl_VCHome, 3239).
--define(wxStyledTextCtrl_VCHomeExtend, 3240).
--define(wxStyledTextCtrl_ZoomIn, 3241).
--define(wxStyledTextCtrl_ZoomOut, 3242).
--define(wxStyledTextCtrl_DelWordLeft, 3243).
--define(wxStyledTextCtrl_DelWordRight, 3244).
--define(wxStyledTextCtrl_LineCut, 3245).
--define(wxStyledTextCtrl_LineDelete, 3246).
--define(wxStyledTextCtrl_LineTranspose, 3247).
--define(wxStyledTextCtrl_LineDuplicate, 3248).
--define(wxStyledTextCtrl_LowerCase, 3249).
--define(wxStyledTextCtrl_UpperCase, 3250).
--define(wxStyledTextCtrl_LineScrollDown, 3251).
--define(wxStyledTextCtrl_LineScrollUp, 3252).
--define(wxStyledTextCtrl_DeleteBackNotLine, 3253).
--define(wxStyledTextCtrl_HomeDisplay, 3254).
--define(wxStyledTextCtrl_HomeDisplayExtend, 3255).
--define(wxStyledTextCtrl_LineEndDisplay, 3256).
--define(wxStyledTextCtrl_LineEndDisplayExtend, 3257).
--define(wxStyledTextCtrl_HomeWrapExtend, 3258).
--define(wxStyledTextCtrl_LineEndWrap, 3259).
--define(wxStyledTextCtrl_LineEndWrapExtend, 3260).
--define(wxStyledTextCtrl_VCHomeWrap, 3261).
--define(wxStyledTextCtrl_VCHomeWrapExtend, 3262).
--define(wxStyledTextCtrl_LineCopy, 3263).
--define(wxStyledTextCtrl_MoveCaretInsideView, 3264).
--define(wxStyledTextCtrl_LineLength, 3265).
--define(wxStyledTextCtrl_BraceHighlight, 3266).
--define(wxStyledTextCtrl_BraceBadLight, 3267).
--define(wxStyledTextCtrl_BraceMatch, 3268).
--define(wxStyledTextCtrl_GetViewEOL, 3269).
--define(wxStyledTextCtrl_SetViewEOL, 3270).
--define(wxStyledTextCtrl_SetModEventMask, 3271).
--define(wxStyledTextCtrl_GetEdgeColumn, 3272).
--define(wxStyledTextCtrl_SetEdgeColumn, 3273).
--define(wxStyledTextCtrl_SetEdgeMode, 3274).
--define(wxStyledTextCtrl_GetEdgeMode, 3275).
--define(wxStyledTextCtrl_GetEdgeColour, 3276).
--define(wxStyledTextCtrl_SetEdgeColour, 3277).
--define(wxStyledTextCtrl_SearchAnchor, 3278).
--define(wxStyledTextCtrl_SearchNext, 3279).
--define(wxStyledTextCtrl_SearchPrev, 3280).
--define(wxStyledTextCtrl_LinesOnScreen, 3281).
--define(wxStyledTextCtrl_UsePopUp, 3282).
--define(wxStyledTextCtrl_SelectionIsRectangle, 3283).
--define(wxStyledTextCtrl_SetZoom, 3284).
--define(wxStyledTextCtrl_GetZoom, 3285).
--define(wxStyledTextCtrl_GetModEventMask, 3286).
--define(wxStyledTextCtrl_SetSTCFocus, 3287).
--define(wxStyledTextCtrl_GetSTCFocus, 3288).
--define(wxStyledTextCtrl_SetStatus, 3289).
--define(wxStyledTextCtrl_GetStatus, 3290).
--define(wxStyledTextCtrl_SetMouseDownCaptures, 3291).
--define(wxStyledTextCtrl_GetMouseDownCaptures, 3292).
--define(wxStyledTextCtrl_SetSTCCursor, 3293).
--define(wxStyledTextCtrl_GetSTCCursor, 3294).
--define(wxStyledTextCtrl_SetControlCharSymbol, 3295).
--define(wxStyledTextCtrl_GetControlCharSymbol, 3296).
--define(wxStyledTextCtrl_WordPartLeft, 3297).
--define(wxStyledTextCtrl_WordPartLeftExtend, 3298).
--define(wxStyledTextCtrl_WordPartRight, 3299).
--define(wxStyledTextCtrl_WordPartRightExtend, 3300).
--define(wxStyledTextCtrl_SetVisiblePolicy, 3301).
--define(wxStyledTextCtrl_DelLineLeft, 3302).
--define(wxStyledTextCtrl_DelLineRight, 3303).
--define(wxStyledTextCtrl_GetXOffset, 3304).
--define(wxStyledTextCtrl_ChooseCaretX, 3305).
--define(wxStyledTextCtrl_SetXCaretPolicy, 3306).
--define(wxStyledTextCtrl_SetYCaretPolicy, 3307).
--define(wxStyledTextCtrl_GetPrintWrapMode, 3308).
--define(wxStyledTextCtrl_SetHotspotActiveForeground, 3309).
--define(wxStyledTextCtrl_SetHotspotActiveBackground, 3310).
--define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3311).
--define(wxStyledTextCtrl_SetHotspotSingleLine, 3312).
--define(wxStyledTextCtrl_ParaDownExtend, 3313).
--define(wxStyledTextCtrl_ParaUp, 3314).
--define(wxStyledTextCtrl_ParaUpExtend, 3315).
--define(wxStyledTextCtrl_PositionBefore, 3316).
--define(wxStyledTextCtrl_PositionAfter, 3317).
--define(wxStyledTextCtrl_CopyRange, 3318).
--define(wxStyledTextCtrl_CopyText, 3319).
--define(wxStyledTextCtrl_SetSelectionMode, 3320).
--define(wxStyledTextCtrl_GetSelectionMode, 3321).
--define(wxStyledTextCtrl_LineDownRectExtend, 3322).
--define(wxStyledTextCtrl_LineUpRectExtend, 3323).
--define(wxStyledTextCtrl_CharLeftRectExtend, 3324).
--define(wxStyledTextCtrl_CharRightRectExtend, 3325).
--define(wxStyledTextCtrl_HomeRectExtend, 3326).
--define(wxStyledTextCtrl_VCHomeRectExtend, 3327).
--define(wxStyledTextCtrl_LineEndRectExtend, 3328).
--define(wxStyledTextCtrl_PageUpRectExtend, 3329).
--define(wxStyledTextCtrl_PageDownRectExtend, 3330).
--define(wxStyledTextCtrl_StutteredPageUp, 3331).
--define(wxStyledTextCtrl_StutteredPageUpExtend, 3332).
--define(wxStyledTextCtrl_StutteredPageDown, 3333).
--define(wxStyledTextCtrl_StutteredPageDownExtend, 3334).
--define(wxStyledTextCtrl_WordLeftEnd, 3335).
--define(wxStyledTextCtrl_WordLeftEndExtend, 3336).
--define(wxStyledTextCtrl_WordRightEnd, 3337).
--define(wxStyledTextCtrl_WordRightEndExtend, 3338).
--define(wxStyledTextCtrl_SetWhitespaceChars, 3339).
--define(wxStyledTextCtrl_SetCharsDefault, 3340).
--define(wxStyledTextCtrl_AutoCompGetCurrent, 3341).
--define(wxStyledTextCtrl_Allocate, 3342).
--define(wxStyledTextCtrl_FindColumn, 3343).
--define(wxStyledTextCtrl_GetCaretSticky, 3344).
--define(wxStyledTextCtrl_SetCaretSticky, 3345).
--define(wxStyledTextCtrl_ToggleCaretSticky, 3346).
--define(wxStyledTextCtrl_SetPasteConvertEndings, 3347).
--define(wxStyledTextCtrl_GetPasteConvertEndings, 3348).
--define(wxStyledTextCtrl_SelectionDuplicate, 3349).
--define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3350).
--define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3351).
--define(wxStyledTextCtrl_StartRecord, 3352).
--define(wxStyledTextCtrl_StopRecord, 3353).
--define(wxStyledTextCtrl_SetLexer, 3354).
--define(wxStyledTextCtrl_GetLexer, 3355).
--define(wxStyledTextCtrl_Colourise, 3356).
--define(wxStyledTextCtrl_SetProperty, 3357).
--define(wxStyledTextCtrl_SetKeyWords, 3358).
--define(wxStyledTextCtrl_SetLexerLanguage, 3359).
--define(wxStyledTextCtrl_GetProperty, 3360).
--define(wxStyledTextCtrl_GetStyleBitsNeeded, 3361).
--define(wxStyledTextCtrl_GetCurrentLine, 3362).
--define(wxStyledTextCtrl_StyleSetSpec, 3363).
--define(wxStyledTextCtrl_StyleSetFont, 3364).
--define(wxStyledTextCtrl_StyleSetFontAttr, 3365).
--define(wxStyledTextCtrl_StyleSetCharacterSet, 3366).
--define(wxStyledTextCtrl_StyleSetFontEncoding, 3367).
--define(wxStyledTextCtrl_CmdKeyExecute, 3368).
--define(wxStyledTextCtrl_SetMargins, 3369).
--define(wxStyledTextCtrl_GetSelection, 3370).
--define(wxStyledTextCtrl_PointFromPosition, 3371).
--define(wxStyledTextCtrl_ScrollToLine, 3372).
--define(wxStyledTextCtrl_ScrollToColumn, 3373).
--define(wxStyledTextCtrl_SetVScrollBar, 3374).
--define(wxStyledTextCtrl_SetHScrollBar, 3375).
--define(wxStyledTextCtrl_GetLastKeydownProcessed, 3376).
--define(wxStyledTextCtrl_SetLastKeydownProcessed, 3377).
--define(wxStyledTextCtrl_SaveFile, 3378).
--define(wxStyledTextCtrl_LoadFile, 3379).
--define(wxStyledTextCtrl_DoDragOver, 3380).
--define(wxStyledTextCtrl_DoDropText, 3381).
--define(wxStyledTextCtrl_GetUseAntiAliasing, 3382).
--define(wxStyledTextCtrl_AddTextRaw, 3383).
--define(wxStyledTextCtrl_InsertTextRaw, 3384).
--define(wxStyledTextCtrl_GetCurLineRaw, 3385).
--define(wxStyledTextCtrl_GetLineRaw, 3386).
--define(wxStyledTextCtrl_GetSelectedTextRaw, 3387).
--define(wxStyledTextCtrl_GetTextRangeRaw, 3388).
--define(wxStyledTextCtrl_SetTextRaw, 3389).
--define(wxStyledTextCtrl_GetTextRaw, 3390).
--define(wxStyledTextCtrl_AppendTextRaw, 3391).
--define(wxArtProvider_GetBitmap, 3392).
--define(wxArtProvider_GetIcon, 3393).
--define(wxTreeEvent_GetKeyCode, 3394).
--define(wxTreeEvent_GetItem, 3395).
--define(wxTreeEvent_GetKeyEvent, 3396).
--define(wxTreeEvent_GetLabel, 3397).
--define(wxTreeEvent_GetOldItem, 3398).
--define(wxTreeEvent_GetPoint, 3399).
--define(wxTreeEvent_IsEditCancelled, 3400).
--define(wxTreeEvent_SetToolTip, 3401).
--define(wxNotebookEvent_GetOldSelection, 3402).
--define(wxNotebookEvent_GetSelection, 3403).
--define(wxNotebookEvent_SetOldSelection, 3404).
--define(wxNotebookEvent_SetSelection, 3405).
--define(wxFileDataObject_new, 3406).
--define(wxFileDataObject_AddFile, 3407).
--define(wxFileDataObject_GetFilenames, 3408).
--define(wxFileDataObject_destroy, 3409).
--define(wxTextDataObject_new, 3410).
--define(wxTextDataObject_GetTextLength, 3411).
--define(wxTextDataObject_GetText, 3412).
--define(wxTextDataObject_SetText, 3413).
--define(wxTextDataObject_destroy, 3414).
--define(wxBitmapDataObject_new_1_1, 3415).
--define(wxBitmapDataObject_new_1_0, 3416).
--define(wxBitmapDataObject_GetBitmap, 3417).
--define(wxBitmapDataObject_SetBitmap, 3418).
--define(wxBitmapDataObject_destroy, 3419).
--define(wxClipboard_new, 3421).
--define(wxClipboard_destruct, 3422).
--define(wxClipboard_AddData, 3423).
--define(wxClipboard_Clear, 3424).
--define(wxClipboard_Close, 3425).
--define(wxClipboard_Flush, 3426).
--define(wxClipboard_GetData, 3427).
--define(wxClipboard_IsOpened, 3428).
--define(wxClipboard_Open, 3429).
--define(wxClipboard_SetData, 3430).
--define(wxClipboard_UsePrimarySelection, 3432).
--define(wxClipboard_IsSupported, 3433).
--define(wxClipboard_Get, 3434).
--define(wxSpinEvent_GetPosition, 3435).
--define(wxSpinEvent_SetPosition, 3436).
--define(wxSplitterWindow_new_0, 3437).
--define(wxSplitterWindow_new_2, 3438).
--define(wxSplitterWindow_destruct, 3439).
--define(wxSplitterWindow_Create, 3440).
--define(wxSplitterWindow_GetMinimumPaneSize, 3441).
--define(wxSplitterWindow_GetSashGravity, 3442).
--define(wxSplitterWindow_GetSashPosition, 3443).
--define(wxSplitterWindow_GetSplitMode, 3444).
--define(wxSplitterWindow_GetWindow1, 3445).
--define(wxSplitterWindow_GetWindow2, 3446).
--define(wxSplitterWindow_Initialize, 3447).
--define(wxSplitterWindow_IsSplit, 3448).
--define(wxSplitterWindow_ReplaceWindow, 3449).
--define(wxSplitterWindow_SetSashGravity, 3450).
--define(wxSplitterWindow_SetSashPosition, 3451).
--define(wxSplitterWindow_SetSashSize, 3452).
--define(wxSplitterWindow_SetMinimumPaneSize, 3453).
--define(wxSplitterWindow_SetSplitMode, 3454).
--define(wxSplitterWindow_SplitHorizontally, 3455).
--define(wxSplitterWindow_SplitVertically, 3456).
--define(wxSplitterWindow_Unsplit, 3457).
--define(wxSplitterWindow_UpdateSize, 3458).
--define(wxSplitterEvent_GetSashPosition, 3459).
--define(wxSplitterEvent_GetX, 3460).
--define(wxSplitterEvent_GetY, 3461).
--define(wxSplitterEvent_GetWindowBeingRemoved, 3462).
--define(wxSplitterEvent_SetSashPosition, 3463).
--define(wxHtmlWindow_new_0, 3464).
--define(wxHtmlWindow_new_2, 3465).
--define(wxHtmlWindow_AppendToPage, 3466).
--define(wxHtmlWindow_GetOpenedAnchor, 3467).
--define(wxHtmlWindow_GetOpenedPage, 3468).
--define(wxHtmlWindow_GetOpenedPageTitle, 3469).
--define(wxHtmlWindow_GetRelatedFrame, 3470).
--define(wxHtmlWindow_HistoryBack, 3471).
--define(wxHtmlWindow_HistoryCanBack, 3472).
--define(wxHtmlWindow_HistoryCanForward, 3473).
--define(wxHtmlWindow_HistoryClear, 3474).
--define(wxHtmlWindow_HistoryForward, 3475).
--define(wxHtmlWindow_LoadFile, 3476).
--define(wxHtmlWindow_LoadPage, 3477).
--define(wxHtmlWindow_SelectAll, 3478).
--define(wxHtmlWindow_SelectionToText, 3479).
--define(wxHtmlWindow_SelectLine, 3480).
--define(wxHtmlWindow_SelectWord, 3481).
--define(wxHtmlWindow_SetBorders, 3482).
--define(wxHtmlWindow_SetFonts, 3483).
--define(wxHtmlWindow_SetPage, 3484).
--define(wxHtmlWindow_SetRelatedFrame, 3485).
--define(wxHtmlWindow_SetRelatedStatusBar, 3486).
--define(wxHtmlWindow_ToText, 3487).
--define(wxHtmlWindow_destroy, 3488).
--define(wxHtmlLinkEvent_GetLinkInfo, 3489).
--define(wxSystemSettings_GetColour, 3490).
--define(wxSystemSettings_GetFont, 3491).
--define(wxSystemSettings_GetMetric, 3492).
--define(wxSystemSettings_GetScreenType, 3493).
--define(wxSystemOptions_GetOption, 3494).
--define(wxSystemOptions_GetOptionInt, 3495).
--define(wxSystemOptions_HasOption, 3496).
--define(wxSystemOptions_IsFalse, 3497).
--define(wxSystemOptions_SetOption_2_1, 3498).
--define(wxSystemOptions_SetOption_2_0, 3499).
--define(wxAuiNotebookEvent_SetSelection, 3500).
--define(wxAuiNotebookEvent_GetSelection, 3501).
--define(wxAuiNotebookEvent_SetOldSelection, 3502).
--define(wxAuiNotebookEvent_GetOldSelection, 3503).
--define(wxAuiNotebookEvent_SetDragSource, 3504).
--define(wxAuiNotebookEvent_GetDragSource, 3505).
--define(wxAuiManagerEvent_SetManager, 3506).
--define(wxAuiManagerEvent_GetManager, 3507).
--define(wxAuiManagerEvent_SetPane, 3508).
--define(wxAuiManagerEvent_GetPane, 3509).
--define(wxAuiManagerEvent_SetButton, 3510).
--define(wxAuiManagerEvent_GetButton, 3511).
--define(wxAuiManagerEvent_SetDC, 3512).
--define(wxAuiManagerEvent_GetDC, 3513).
--define(wxAuiManagerEvent_Veto, 3514).
--define(wxAuiManagerEvent_GetVeto, 3515).
--define(wxAuiManagerEvent_SetCanVeto, 3516).
--define(wxAuiManagerEvent_CanVeto, 3517).
--define(wxLogNull_new, 3518).
--define(wxLogNull_destroy, 3519).
--define(wxTaskBarIcon_new, 3520).
--define(wxTaskBarIcon_destruct, 3521).
--define(wxTaskBarIcon_PopupMenu, 3522).
--define(wxTaskBarIcon_RemoveIcon, 3523).
--define(wxTaskBarIcon_SetIcon, 3524).
+-define(wxPanel_SetFocusIgnoringChildren, 337).
+-define(wxScrolledWindow_new_0, 338).
+-define(wxScrolledWindow_new_2, 339).
+-define(wxScrolledWindow_destruct, 340).
+-define(wxScrolledWindow_CalcScrolledPosition_4, 341).
+-define(wxScrolledWindow_CalcScrolledPosition_1, 342).
+-define(wxScrolledWindow_CalcUnscrolledPosition_4, 343).
+-define(wxScrolledWindow_CalcUnscrolledPosition_1, 344).
+-define(wxScrolledWindow_EnableScrolling, 345).
+-define(wxScrolledWindow_GetScrollPixelsPerUnit, 346).
+-define(wxScrolledWindow_GetViewStart, 347).
+-define(wxScrolledWindow_DoPrepareDC, 348).
+-define(wxScrolledWindow_PrepareDC, 349).
+-define(wxScrolledWindow_Scroll, 350).
+-define(wxScrolledWindow_SetScrollbars, 351).
+-define(wxScrolledWindow_SetScrollRate, 352).
+-define(wxScrolledWindow_SetTargetWindow, 353).
+-define(wxSashWindow_new_0, 354).
+-define(wxSashWindow_new_2, 355).
+-define(wxSashWindow_destruct, 356).
+-define(wxSashWindow_GetSashVisible, 357).
+-define(wxSashWindow_GetMaximumSizeX, 358).
+-define(wxSashWindow_GetMaximumSizeY, 359).
+-define(wxSashWindow_GetMinimumSizeX, 360).
+-define(wxSashWindow_GetMinimumSizeY, 361).
+-define(wxSashWindow_SetMaximumSizeX, 362).
+-define(wxSashWindow_SetMaximumSizeY, 363).
+-define(wxSashWindow_SetMinimumSizeX, 364).
+-define(wxSashWindow_SetMinimumSizeY, 365).
+-define(wxSashWindow_SetSashVisible, 366).
+-define(wxSashLayoutWindow_new_0, 367).
+-define(wxSashLayoutWindow_new_2, 368).
+-define(wxSashLayoutWindow_Create, 369).
+-define(wxSashLayoutWindow_GetAlignment, 370).
+-define(wxSashLayoutWindow_GetOrientation, 371).
+-define(wxSashLayoutWindow_SetAlignment, 372).
+-define(wxSashLayoutWindow_SetDefaultSize, 373).
+-define(wxSashLayoutWindow_SetOrientation, 374).
+-define(wxSashLayoutWindow_destroy, 375).
+-define(wxGrid_new_0, 376).
+-define(wxGrid_new_3, 377).
+-define(wxGrid_new_4, 378).
+-define(wxGrid_destruct, 379).
+-define(wxGrid_AppendCols, 380).
+-define(wxGrid_AppendRows, 381).
+-define(wxGrid_AutoSize, 382).
+-define(wxGrid_AutoSizeColumn, 383).
+-define(wxGrid_AutoSizeColumns, 384).
+-define(wxGrid_AutoSizeRow, 385).
+-define(wxGrid_AutoSizeRows, 386).
+-define(wxGrid_BeginBatch, 387).
+-define(wxGrid_BlockToDeviceRect, 388).
+-define(wxGrid_CanDragColSize, 389).
+-define(wxGrid_CanDragRowSize, 390).
+-define(wxGrid_CanDragGridSize, 391).
+-define(wxGrid_CanEnableCellControl, 392).
+-define(wxGrid_CellToRect_2, 393).
+-define(wxGrid_CellToRect_1, 394).
+-define(wxGrid_ClearGrid, 395).
+-define(wxGrid_ClearSelection, 396).
+-define(wxGrid_CreateGrid, 397).
+-define(wxGrid_DeleteCols, 398).
+-define(wxGrid_DeleteRows, 399).
+-define(wxGrid_DisableCellEditControl, 400).
+-define(wxGrid_DisableDragColSize, 401).
+-define(wxGrid_DisableDragGridSize, 402).
+-define(wxGrid_DisableDragRowSize, 403).
+-define(wxGrid_EnableCellEditControl, 404).
+-define(wxGrid_EnableDragColSize, 405).
+-define(wxGrid_EnableDragGridSize, 406).
+-define(wxGrid_EnableDragRowSize, 407).
+-define(wxGrid_EnableEditing, 408).
+-define(wxGrid_EnableGridLines, 409).
+-define(wxGrid_EndBatch, 410).
+-define(wxGrid_Fit, 411).
+-define(wxGrid_ForceRefresh, 412).
+-define(wxGrid_GetBatchCount, 413).
+-define(wxGrid_GetCellAlignment, 414).
+-define(wxGrid_GetCellBackgroundColour, 415).
+-define(wxGrid_GetCellEditor, 416).
+-define(wxGrid_GetCellFont, 417).
+-define(wxGrid_GetCellRenderer, 418).
+-define(wxGrid_GetCellTextColour, 419).
+-define(wxGrid_GetCellValue_2, 420).
+-define(wxGrid_GetCellValue_1, 421).
+-define(wxGrid_GetColLabelAlignment, 422).
+-define(wxGrid_GetColLabelSize, 423).
+-define(wxGrid_GetColLabelValue, 424).
+-define(wxGrid_GetColMinimalAcceptableWidth, 425).
+-define(wxGrid_GetDefaultCellAlignment, 426).
+-define(wxGrid_GetDefaultCellBackgroundColour, 427).
+-define(wxGrid_GetDefaultCellFont, 428).
+-define(wxGrid_GetDefaultCellTextColour, 429).
+-define(wxGrid_GetDefaultColLabelSize, 430).
+-define(wxGrid_GetDefaultColSize, 431).
+-define(wxGrid_GetDefaultEditor, 432).
+-define(wxGrid_GetDefaultEditorForCell_2, 433).
+-define(wxGrid_GetDefaultEditorForCell_1, 434).
+-define(wxGrid_GetDefaultEditorForType, 435).
+-define(wxGrid_GetDefaultRenderer, 436).
+-define(wxGrid_GetDefaultRendererForCell, 437).
+-define(wxGrid_GetDefaultRendererForType, 438).
+-define(wxGrid_GetDefaultRowLabelSize, 439).
+-define(wxGrid_GetDefaultRowSize, 440).
+-define(wxGrid_GetGridCursorCol, 441).
+-define(wxGrid_GetGridCursorRow, 442).
+-define(wxGrid_GetGridLineColour, 443).
+-define(wxGrid_GridLinesEnabled, 444).
+-define(wxGrid_GetLabelBackgroundColour, 445).
+-define(wxGrid_GetLabelFont, 446).
+-define(wxGrid_GetLabelTextColour, 447).
+-define(wxGrid_GetNumberCols, 448).
+-define(wxGrid_GetNumberRows, 449).
+-define(wxGrid_GetOrCreateCellAttr, 450).
+-define(wxGrid_GetRowMinimalAcceptableHeight, 451).
+-define(wxGrid_GetRowLabelAlignment, 452).
+-define(wxGrid_GetRowLabelSize, 453).
+-define(wxGrid_GetRowLabelValue, 454).
+-define(wxGrid_GetRowSize, 455).
+-define(wxGrid_GetScrollLineX, 456).
+-define(wxGrid_GetScrollLineY, 457).
+-define(wxGrid_GetSelectedCells, 458).
+-define(wxGrid_GetSelectedCols, 459).
+-define(wxGrid_GetSelectedRows, 460).
+-define(wxGrid_GetSelectionBackground, 461).
+-define(wxGrid_GetSelectionBlockTopLeft, 462).
+-define(wxGrid_GetSelectionBlockBottomRight, 463).
+-define(wxGrid_GetSelectionForeground, 464).
+-define(wxGrid_GetViewWidth, 465).
+-define(wxGrid_GetGridWindow, 466).
+-define(wxGrid_GetGridRowLabelWindow, 467).
+-define(wxGrid_GetGridColLabelWindow, 468).
+-define(wxGrid_GetGridCornerLabelWindow, 469).
+-define(wxGrid_HideCellEditControl, 470).
+-define(wxGrid_InsertCols, 471).
+-define(wxGrid_InsertRows, 472).
+-define(wxGrid_IsCellEditControlEnabled, 473).
+-define(wxGrid_IsCurrentCellReadOnly, 474).
+-define(wxGrid_IsEditable, 475).
+-define(wxGrid_IsInSelection_2, 476).
+-define(wxGrid_IsInSelection_1, 477).
+-define(wxGrid_IsReadOnly, 478).
+-define(wxGrid_IsSelection, 479).
+-define(wxGrid_IsVisible_3, 480).
+-define(wxGrid_IsVisible_2, 481).
+-define(wxGrid_MakeCellVisible_2, 482).
+-define(wxGrid_MakeCellVisible_1, 483).
+-define(wxGrid_MoveCursorDown, 484).
+-define(wxGrid_MoveCursorLeft, 485).
+-define(wxGrid_MoveCursorRight, 486).
+-define(wxGrid_MoveCursorUp, 487).
+-define(wxGrid_MoveCursorDownBlock, 488).
+-define(wxGrid_MoveCursorLeftBlock, 489).
+-define(wxGrid_MoveCursorRightBlock, 490).
+-define(wxGrid_MoveCursorUpBlock, 491).
+-define(wxGrid_MovePageDown, 492).
+-define(wxGrid_MovePageUp, 493).
+-define(wxGrid_RegisterDataType, 494).
+-define(wxGrid_SaveEditControlValue, 495).
+-define(wxGrid_SelectAll, 496).
+-define(wxGrid_SelectBlock_5, 497).
+-define(wxGrid_SelectBlock_3, 498).
+-define(wxGrid_SelectCol, 499).
+-define(wxGrid_SelectRow, 500).
+-define(wxGrid_SetCellAlignment_4, 501).
+-define(wxGrid_SetCellAlignment_3, 502).
+-define(wxGrid_SetCellAlignment_1, 503).
+-define(wxGrid_SetCellBackgroundColour_3_0, 504).
+-define(wxGrid_SetCellBackgroundColour_1, 505).
+-define(wxGrid_SetCellBackgroundColour_3_1, 506).
+-define(wxGrid_SetCellEditor, 507).
+-define(wxGrid_SetCellFont, 508).
+-define(wxGrid_SetCellRenderer, 509).
+-define(wxGrid_SetCellTextColour_3_0, 510).
+-define(wxGrid_SetCellTextColour_3_1, 511).
+-define(wxGrid_SetCellTextColour_1, 512).
+-define(wxGrid_SetCellValue_3_0, 513).
+-define(wxGrid_SetCellValue_2, 514).
+-define(wxGrid_SetCellValue_3_1, 515).
+-define(wxGrid_SetColAttr, 516).
+-define(wxGrid_SetColFormatBool, 517).
+-define(wxGrid_SetColFormatNumber, 518).
+-define(wxGrid_SetColFormatFloat, 519).
+-define(wxGrid_SetColFormatCustom, 520).
+-define(wxGrid_SetColLabelAlignment, 521).
+-define(wxGrid_SetColLabelSize, 522).
+-define(wxGrid_SetColLabelValue, 523).
+-define(wxGrid_SetColMinimalWidth, 524).
+-define(wxGrid_SetColMinimalAcceptableWidth, 525).
+-define(wxGrid_SetColSize, 526).
+-define(wxGrid_SetDefaultCellAlignment, 527).
+-define(wxGrid_SetDefaultCellBackgroundColour, 528).
+-define(wxGrid_SetDefaultCellFont, 529).
+-define(wxGrid_SetDefaultCellTextColour, 530).
+-define(wxGrid_SetDefaultEditor, 531).
+-define(wxGrid_SetDefaultRenderer, 532).
+-define(wxGrid_SetDefaultColSize, 533).
+-define(wxGrid_SetDefaultRowSize, 534).
+-define(wxGrid_SetGridCursor, 535).
+-define(wxGrid_SetGridLineColour, 536).
+-define(wxGrid_SetLabelBackgroundColour, 537).
+-define(wxGrid_SetLabelFont, 538).
+-define(wxGrid_SetLabelTextColour, 539).
+-define(wxGrid_SetMargins, 540).
+-define(wxGrid_SetReadOnly, 541).
+-define(wxGrid_SetRowAttr, 542).
+-define(wxGrid_SetRowLabelAlignment, 543).
+-define(wxGrid_SetRowLabelSize, 544).
+-define(wxGrid_SetRowLabelValue, 545).
+-define(wxGrid_SetRowMinimalHeight, 546).
+-define(wxGrid_SetRowMinimalAcceptableHeight, 547).
+-define(wxGrid_SetRowSize, 548).
+-define(wxGrid_SetScrollLineX, 549).
+-define(wxGrid_SetScrollLineY, 550).
+-define(wxGrid_SetSelectionBackground, 551).
+-define(wxGrid_SetSelectionForeground, 552).
+-define(wxGrid_SetSelectionMode, 553).
+-define(wxGrid_ShowCellEditControl, 554).
+-define(wxGrid_XToCol, 555).
+-define(wxGrid_XToEdgeOfCol, 556).
+-define(wxGrid_YToEdgeOfRow, 557).
+-define(wxGrid_YToRow, 558).
+-define(wxGridCellRenderer_Draw, 559).
+-define(wxGridCellRenderer_GetBestSize, 560).
+-define(wxGridCellEditor_Create, 561).
+-define(wxGridCellEditor_IsCreated, 562).
+-define(wxGridCellEditor_SetSize, 563).
+-define(wxGridCellEditor_Show, 564).
+-define(wxGridCellEditor_PaintBackground, 565).
+-define(wxGridCellEditor_BeginEdit, 566).
+-define(wxGridCellEditor_EndEdit, 567).
+-define(wxGridCellEditor_Reset, 568).
+-define(wxGridCellEditor_StartingKey, 569).
+-define(wxGridCellEditor_StartingClick, 570).
+-define(wxGridCellEditor_HandleReturn, 571).
+-define(wxGridCellBoolRenderer_new, 572).
+-define(wxGridCellBoolRenderer_destroy, 573).
+-define(wxGridCellBoolEditor_new, 574).
+-define(wxGridCellBoolEditor_IsTrueValue, 575).
+-define(wxGridCellBoolEditor_UseStringValues, 576).
+-define(wxGridCellBoolEditor_destroy, 577).
+-define(wxGridCellFloatRenderer_new, 578).
+-define(wxGridCellFloatRenderer_GetPrecision, 579).
+-define(wxGridCellFloatRenderer_GetWidth, 580).
+-define(wxGridCellFloatRenderer_SetParameters, 581).
+-define(wxGridCellFloatRenderer_SetPrecision, 582).
+-define(wxGridCellFloatRenderer_SetWidth, 583).
+-define(wxGridCellFloatRenderer_destroy, 584).
+-define(wxGridCellFloatEditor_new, 585).
+-define(wxGridCellFloatEditor_SetParameters, 586).
+-define(wxGridCellFloatEditor_destroy, 587).
+-define(wxGridCellStringRenderer_new, 588).
+-define(wxGridCellStringRenderer_destroy, 589).
+-define(wxGridCellTextEditor_new, 590).
+-define(wxGridCellTextEditor_SetParameters, 591).
+-define(wxGridCellTextEditor_destroy, 592).
+-define(wxGridCellChoiceEditor_new, 594).
+-define(wxGridCellChoiceEditor_SetParameters, 595).
+-define(wxGridCellChoiceEditor_destroy, 596).
+-define(wxGridCellNumberRenderer_new, 597).
+-define(wxGridCellNumberRenderer_destroy, 598).
+-define(wxGridCellNumberEditor_new, 599).
+-define(wxGridCellNumberEditor_GetValue, 600).
+-define(wxGridCellNumberEditor_SetParameters, 601).
+-define(wxGridCellNumberEditor_destroy, 602).
+-define(wxGridCellAttr_SetTextColour, 603).
+-define(wxGridCellAttr_SetBackgroundColour, 604).
+-define(wxGridCellAttr_SetFont, 605).
+-define(wxGridCellAttr_SetAlignment, 606).
+-define(wxGridCellAttr_SetReadOnly, 607).
+-define(wxGridCellAttr_SetRenderer, 608).
+-define(wxGridCellAttr_SetEditor, 609).
+-define(wxGridCellAttr_HasTextColour, 610).
+-define(wxGridCellAttr_HasBackgroundColour, 611).
+-define(wxGridCellAttr_HasFont, 612).
+-define(wxGridCellAttr_HasAlignment, 613).
+-define(wxGridCellAttr_HasRenderer, 614).
+-define(wxGridCellAttr_HasEditor, 615).
+-define(wxGridCellAttr_GetTextColour, 616).
+-define(wxGridCellAttr_GetBackgroundColour, 617).
+-define(wxGridCellAttr_GetFont, 618).
+-define(wxGridCellAttr_GetAlignment, 619).
+-define(wxGridCellAttr_GetRenderer, 620).
+-define(wxGridCellAttr_GetEditor, 621).
+-define(wxGridCellAttr_IsReadOnly, 622).
+-define(wxGridCellAttr_SetDefAttr, 623).
+-define(wxDC_Blit, 624).
+-define(wxDC_CalcBoundingBox, 625).
+-define(wxDC_Clear, 626).
+-define(wxDC_ComputeScaleAndOrigin, 627).
+-define(wxDC_CrossHair, 628).
+-define(wxDC_DestroyClippingRegion, 629).
+-define(wxDC_DeviceToLogicalX, 630).
+-define(wxDC_DeviceToLogicalXRel, 631).
+-define(wxDC_DeviceToLogicalY, 632).
+-define(wxDC_DeviceToLogicalYRel, 633).
+-define(wxDC_DrawArc, 634).
+-define(wxDC_DrawBitmap, 635).
+-define(wxDC_DrawCheckMark, 636).
+-define(wxDC_DrawCircle, 637).
+-define(wxDC_DrawEllipse_2, 639).
+-define(wxDC_DrawEllipse_1, 640).
+-define(wxDC_DrawEllipticArc, 641).
+-define(wxDC_DrawIcon, 642).
+-define(wxDC_DrawLabel, 643).
+-define(wxDC_DrawLine, 644).
+-define(wxDC_DrawLines, 645).
+-define(wxDC_DrawPolygon, 647).
+-define(wxDC_DrawPoint, 649).
+-define(wxDC_DrawRectangle_2, 651).
+-define(wxDC_DrawRectangle_1, 652).
+-define(wxDC_DrawRotatedText, 653).
+-define(wxDC_DrawRoundedRectangle_3, 655).
+-define(wxDC_DrawRoundedRectangle_2, 656).
+-define(wxDC_DrawText, 657).
+-define(wxDC_EndDoc, 658).
+-define(wxDC_EndPage, 659).
+-define(wxDC_FloodFill, 660).
+-define(wxDC_GetBackground, 661).
+-define(wxDC_GetBackgroundMode, 662).
+-define(wxDC_GetBrush, 663).
+-define(wxDC_GetCharHeight, 664).
+-define(wxDC_GetCharWidth, 665).
+-define(wxDC_GetClippingBox, 666).
+-define(wxDC_GetFont, 668).
+-define(wxDC_GetLayoutDirection, 669).
+-define(wxDC_GetLogicalFunction, 670).
+-define(wxDC_GetMapMode, 671).
+-define(wxDC_GetMultiLineTextExtent_4, 672).
+-define(wxDC_GetMultiLineTextExtent_1, 673).
+-define(wxDC_GetPartialTextExtents, 674).
+-define(wxDC_GetPen, 675).
+-define(wxDC_GetPixel, 676).
+-define(wxDC_GetPPI, 677).
+-define(wxDC_GetSize, 679).
+-define(wxDC_GetSizeMM, 681).
+-define(wxDC_GetTextBackground, 682).
+-define(wxDC_GetTextExtent_4, 683).
+-define(wxDC_GetTextExtent_1, 684).
+-define(wxDC_GetTextForeground, 686).
+-define(wxDC_GetUserScale, 687).
+-define(wxDC_GradientFillConcentric_3, 688).
+-define(wxDC_GradientFillConcentric_4, 689).
+-define(wxDC_GradientFillLinear, 690).
+-define(wxDC_LogicalToDeviceX, 691).
+-define(wxDC_LogicalToDeviceXRel, 692).
+-define(wxDC_LogicalToDeviceY, 693).
+-define(wxDC_LogicalToDeviceYRel, 694).
+-define(wxDC_MaxX, 695).
+-define(wxDC_MaxY, 696).
+-define(wxDC_MinX, 697).
+-define(wxDC_MinY, 698).
+-define(wxDC_IsOk, 699).
+-define(wxDC_ResetBoundingBox, 700).
+-define(wxDC_SetAxisOrientation, 701).
+-define(wxDC_SetBackground, 702).
+-define(wxDC_SetBackgroundMode, 703).
+-define(wxDC_SetBrush, 704).
+-define(wxDC_SetClippingRegion_2, 706).
+-define(wxDC_SetClippingRegion_1_1, 707).
+-define(wxDC_SetClippingRegion_1_0, 708).
+-define(wxDC_SetDeviceOrigin, 709).
+-define(wxDC_SetFont, 710).
+-define(wxDC_SetLayoutDirection, 711).
+-define(wxDC_SetLogicalFunction, 712).
+-define(wxDC_SetMapMode, 713).
+-define(wxDC_SetPalette, 714).
+-define(wxDC_SetPen, 715).
+-define(wxDC_SetTextBackground, 716).
+-define(wxDC_SetTextForeground, 717).
+-define(wxDC_SetUserScale, 718).
+-define(wxDC_StartDoc, 719).
+-define(wxDC_StartPage, 720).
+-define(wxMirrorDC_new, 721).
+-define(wxMirrorDC_destroy, 722).
+-define(wxScreenDC_new, 723).
+-define(wxScreenDC_destruct, 724).
+-define(wxPostScriptDC_new_0, 725).
+-define(wxPostScriptDC_new_1, 726).
+-define(wxPostScriptDC_destruct, 727).
+-define(wxPostScriptDC_SetResolution, 728).
+-define(wxPostScriptDC_GetResolution, 729).
+-define(wxWindowDC_new_0, 730).
+-define(wxWindowDC_new_1, 731).
+-define(wxWindowDC_destruct, 732).
+-define(wxClientDC_new_0, 733).
+-define(wxClientDC_new_1, 734).
+-define(wxClientDC_destroy, 735).
+-define(wxPaintDC_new_0, 736).
+-define(wxPaintDC_new_1, 737).
+-define(wxPaintDC_destroy, 738).
+-define(wxMemoryDC_new_1_0, 740).
+-define(wxMemoryDC_new_1_1, 741).
+-define(wxMemoryDC_new_0, 742).
+-define(wxMemoryDC_destruct, 744).
+-define(wxMemoryDC_SelectObject, 745).
+-define(wxMemoryDC_SelectObjectAsSource, 746).
+-define(wxBufferedDC_new_0, 747).
+-define(wxBufferedDC_new_2, 748).
+-define(wxBufferedDC_new_3, 749).
+-define(wxBufferedDC_destruct, 750).
+-define(wxBufferedDC_Init_2, 751).
+-define(wxBufferedDC_Init_3, 752).
+-define(wxBufferedPaintDC_new_3, 753).
+-define(wxBufferedPaintDC_new_2, 754).
+-define(wxBufferedPaintDC_destruct, 755).
+-define(wxGraphicsObject_destruct, 756).
+-define(wxGraphicsObject_GetRenderer, 757).
+-define(wxGraphicsObject_IsNull, 758).
+-define(wxGraphicsContext_destruct, 759).
+-define(wxGraphicsContext_Create_1_1, 760).
+-define(wxGraphicsContext_Create_1_0, 761).
+-define(wxGraphicsContext_Create_0, 762).
+-define(wxGraphicsContext_CreatePen, 763).
+-define(wxGraphicsContext_CreateBrush, 764).
+-define(wxGraphicsContext_CreateRadialGradientBrush, 765).
+-define(wxGraphicsContext_CreateLinearGradientBrush, 766).
+-define(wxGraphicsContext_CreateFont, 767).
+-define(wxGraphicsContext_CreateMatrix, 768).
+-define(wxGraphicsContext_CreatePath, 769).
+-define(wxGraphicsContext_Clip_1, 770).
+-define(wxGraphicsContext_Clip_4, 771).
+-define(wxGraphicsContext_ResetClip, 772).
+-define(wxGraphicsContext_DrawBitmap, 773).
+-define(wxGraphicsContext_DrawEllipse, 774).
+-define(wxGraphicsContext_DrawIcon, 775).
+-define(wxGraphicsContext_DrawLines, 776).
+-define(wxGraphicsContext_DrawPath, 777).
+-define(wxGraphicsContext_DrawRectangle, 778).
+-define(wxGraphicsContext_DrawRoundedRectangle, 779).
+-define(wxGraphicsContext_DrawText_3, 780).
+-define(wxGraphicsContext_DrawText_4_0, 781).
+-define(wxGraphicsContext_DrawText_4_1, 782).
+-define(wxGraphicsContext_DrawText_5, 783).
+-define(wxGraphicsContext_FillPath, 784).
+-define(wxGraphicsContext_StrokePath, 785).
+-define(wxGraphicsContext_GetPartialTextExtents, 786).
+-define(wxGraphicsContext_GetTextExtent, 787).
+-define(wxGraphicsContext_Rotate, 788).
+-define(wxGraphicsContext_Scale, 789).
+-define(wxGraphicsContext_Translate, 790).
+-define(wxGraphicsContext_GetTransform, 791).
+-define(wxGraphicsContext_SetTransform, 792).
+-define(wxGraphicsContext_ConcatTransform, 793).
+-define(wxGraphicsContext_SetBrush_1_1, 794).
+-define(wxGraphicsContext_SetBrush_1_0, 795).
+-define(wxGraphicsContext_SetFont_1, 796).
+-define(wxGraphicsContext_SetFont_2, 797).
+-define(wxGraphicsContext_SetPen_1_0, 798).
+-define(wxGraphicsContext_SetPen_1_1, 799).
+-define(wxGraphicsContext_StrokeLine, 800).
+-define(wxGraphicsContext_StrokeLines, 801).
+-define(wxGraphicsMatrix_Concat, 803).
+-define(wxGraphicsMatrix_Get, 805).
+-define(wxGraphicsMatrix_Invert, 806).
+-define(wxGraphicsMatrix_IsEqual, 807).
+-define(wxGraphicsMatrix_IsIdentity, 809).
+-define(wxGraphicsMatrix_Rotate, 810).
+-define(wxGraphicsMatrix_Scale, 811).
+-define(wxGraphicsMatrix_Translate, 812).
+-define(wxGraphicsMatrix_Set, 813).
+-define(wxGraphicsMatrix_TransformPoint, 814).
+-define(wxGraphicsMatrix_TransformDistance, 815).
+-define(wxGraphicsPath_MoveToPoint_2, 816).
+-define(wxGraphicsPath_MoveToPoint_1, 817).
+-define(wxGraphicsPath_AddArc_6, 818).
+-define(wxGraphicsPath_AddArc_5, 819).
+-define(wxGraphicsPath_AddArcToPoint, 820).
+-define(wxGraphicsPath_AddCircle, 821).
+-define(wxGraphicsPath_AddCurveToPoint_6, 822).
+-define(wxGraphicsPath_AddCurveToPoint_3, 823).
+-define(wxGraphicsPath_AddEllipse, 824).
+-define(wxGraphicsPath_AddLineToPoint_2, 825).
+-define(wxGraphicsPath_AddLineToPoint_1, 826).
+-define(wxGraphicsPath_AddPath, 827).
+-define(wxGraphicsPath_AddQuadCurveToPoint, 828).
+-define(wxGraphicsPath_AddRectangle, 829).
+-define(wxGraphicsPath_AddRoundedRectangle, 830).
+-define(wxGraphicsPath_CloseSubpath, 831).
+-define(wxGraphicsPath_Contains_3, 832).
+-define(wxGraphicsPath_Contains_2, 833).
+-define(wxGraphicsPath_GetBox, 835).
+-define(wxGraphicsPath_GetCurrentPoint, 837).
+-define(wxGraphicsPath_Transform, 838).
+-define(wxGraphicsRenderer_GetDefaultRenderer, 839).
+-define(wxGraphicsRenderer_CreateContext_1_1, 840).
+-define(wxGraphicsRenderer_CreateContext_1_0, 841).
+-define(wxGraphicsRenderer_CreatePen, 842).
+-define(wxGraphicsRenderer_CreateBrush, 843).
+-define(wxGraphicsRenderer_CreateLinearGradientBrush, 844).
+-define(wxGraphicsRenderer_CreateRadialGradientBrush, 845).
+-define(wxGraphicsRenderer_CreateFont, 846).
+-define(wxGraphicsRenderer_CreateMatrix, 847).
+-define(wxGraphicsRenderer_CreatePath, 848).
+-define(wxMenuBar_new_1, 850).
+-define(wxMenuBar_new_0, 852).
+-define(wxMenuBar_destruct, 854).
+-define(wxMenuBar_Append, 855).
+-define(wxMenuBar_Check, 856).
+-define(wxMenuBar_Enable_2, 857).
+-define(wxMenuBar_Enable_1, 858).
+-define(wxMenuBar_EnableTop, 859).
+-define(wxMenuBar_FindMenu, 860).
+-define(wxMenuBar_FindMenuItem, 861).
+-define(wxMenuBar_FindItem, 862).
+-define(wxMenuBar_GetHelpString, 863).
+-define(wxMenuBar_GetLabel_1, 864).
+-define(wxMenuBar_GetLabel_0, 865).
+-define(wxMenuBar_GetLabelTop, 866).
+-define(wxMenuBar_GetMenu, 867).
+-define(wxMenuBar_GetMenuCount, 868).
+-define(wxMenuBar_Insert, 869).
+-define(wxMenuBar_IsChecked, 870).
+-define(wxMenuBar_IsEnabled_1, 871).
+-define(wxMenuBar_IsEnabled_0, 872).
+-define(wxMenuBar_Remove, 873).
+-define(wxMenuBar_Replace, 874).
+-define(wxMenuBar_SetHelpString, 875).
+-define(wxMenuBar_SetLabel_2, 876).
+-define(wxMenuBar_SetLabel_1, 877).
+-define(wxMenuBar_SetLabelTop, 878).
+-define(wxControl_GetLabel, 879).
+-define(wxControl_SetLabel, 880).
+-define(wxControlWithItems_Append_1, 881).
+-define(wxControlWithItems_Append_2, 882).
+-define(wxControlWithItems_appendStrings_1, 883).
+-define(wxControlWithItems_Clear, 884).
+-define(wxControlWithItems_Delete, 885).
+-define(wxControlWithItems_FindString, 886).
+-define(wxControlWithItems_getClientData, 887).
+-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(wxListItemAttr_new_0, 1759).
+-define(wxListItemAttr_new_3, 1760).
+-define(wxListItemAttr_GetBackgroundColour, 1761).
+-define(wxListItemAttr_GetFont, 1762).
+-define(wxListItemAttr_GetTextColour, 1763).
+-define(wxListItemAttr_HasBackgroundColour, 1764).
+-define(wxListItemAttr_HasFont, 1765).
+-define(wxListItemAttr_HasTextColour, 1766).
+-define(wxListItemAttr_SetBackgroundColour, 1767).
+-define(wxListItemAttr_SetFont, 1768).
+-define(wxListItemAttr_SetTextColour, 1769).
+-define(wxListItemAttr_destroy, 1770).
+-define(wxImageList_new_0, 1771).
+-define(wxImageList_new_3, 1772).
+-define(wxImageList_Add_1, 1773).
+-define(wxImageList_Add_2_0, 1774).
+-define(wxImageList_Add_2_1, 1775).
+-define(wxImageList_Create, 1776).
+-define(wxImageList_Draw, 1778).
+-define(wxImageList_GetBitmap, 1779).
+-define(wxImageList_GetIcon, 1780).
+-define(wxImageList_GetImageCount, 1781).
+-define(wxImageList_GetSize, 1782).
+-define(wxImageList_Remove, 1783).
+-define(wxImageList_RemoveAll, 1784).
+-define(wxImageList_Replace_2, 1785).
+-define(wxImageList_Replace_3, 1786).
+-define(wxImageList_destroy, 1787).
+-define(wxTextAttr_new_0, 1788).
+-define(wxTextAttr_new_2, 1789).
+-define(wxTextAttr_GetAlignment, 1790).
+-define(wxTextAttr_GetBackgroundColour, 1791).
+-define(wxTextAttr_GetFont, 1792).
+-define(wxTextAttr_GetLeftIndent, 1793).
+-define(wxTextAttr_GetLeftSubIndent, 1794).
+-define(wxTextAttr_GetRightIndent, 1795).
+-define(wxTextAttr_GetTabs, 1796).
+-define(wxTextAttr_GetTextColour, 1797).
+-define(wxTextAttr_HasBackgroundColour, 1798).
+-define(wxTextAttr_HasFont, 1799).
+-define(wxTextAttr_HasTextColour, 1800).
+-define(wxTextAttr_GetFlags, 1801).
+-define(wxTextAttr_IsDefault, 1802).
+-define(wxTextAttr_SetAlignment, 1803).
+-define(wxTextAttr_SetBackgroundColour, 1804).
+-define(wxTextAttr_SetFlags, 1805).
+-define(wxTextAttr_SetFont, 1806).
+-define(wxTextAttr_SetLeftIndent, 1807).
+-define(wxTextAttr_SetRightIndent, 1808).
+-define(wxTextAttr_SetTabs, 1809).
+-define(wxTextAttr_SetTextColour, 1810).
+-define(wxTextAttr_destroy, 1811).
+-define(wxTextCtrl_new_3, 1813).
+-define(wxTextCtrl_new_0, 1814).
+-define(wxTextCtrl_destruct, 1816).
+-define(wxTextCtrl_AppendText, 1817).
+-define(wxTextCtrl_CanCopy, 1818).
+-define(wxTextCtrl_CanCut, 1819).
+-define(wxTextCtrl_CanPaste, 1820).
+-define(wxTextCtrl_CanRedo, 1821).
+-define(wxTextCtrl_CanUndo, 1822).
+-define(wxTextCtrl_Clear, 1823).
+-define(wxTextCtrl_Copy, 1824).
+-define(wxTextCtrl_Create, 1825).
+-define(wxTextCtrl_Cut, 1826).
+-define(wxTextCtrl_DiscardEdits, 1827).
+-define(wxTextCtrl_EmulateKeyPress, 1828).
+-define(wxTextCtrl_GetDefaultStyle, 1829).
+-define(wxTextCtrl_GetInsertionPoint, 1830).
+-define(wxTextCtrl_GetLastPosition, 1831).
+-define(wxTextCtrl_GetLineLength, 1832).
+-define(wxTextCtrl_GetLineText, 1833).
+-define(wxTextCtrl_GetNumberOfLines, 1834).
+-define(wxTextCtrl_GetRange, 1835).
+-define(wxTextCtrl_GetSelection, 1836).
+-define(wxTextCtrl_GetStringSelection, 1837).
+-define(wxTextCtrl_GetStyle, 1838).
+-define(wxTextCtrl_GetValue, 1839).
+-define(wxTextCtrl_IsEditable, 1840).
+-define(wxTextCtrl_IsModified, 1841).
+-define(wxTextCtrl_IsMultiLine, 1842).
+-define(wxTextCtrl_IsSingleLine, 1843).
+-define(wxTextCtrl_LoadFile, 1844).
+-define(wxTextCtrl_MarkDirty, 1845).
+-define(wxTextCtrl_Paste, 1846).
+-define(wxTextCtrl_PositionToXY, 1847).
+-define(wxTextCtrl_Redo, 1848).
+-define(wxTextCtrl_Remove, 1849).
+-define(wxTextCtrl_Replace, 1850).
+-define(wxTextCtrl_SaveFile, 1851).
+-define(wxTextCtrl_SetDefaultStyle, 1852).
+-define(wxTextCtrl_SetEditable, 1853).
+-define(wxTextCtrl_SetInsertionPoint, 1854).
+-define(wxTextCtrl_SetInsertionPointEnd, 1855).
+-define(wxTextCtrl_SetMaxLength, 1857).
+-define(wxTextCtrl_SetSelection, 1858).
+-define(wxTextCtrl_SetStyle, 1859).
+-define(wxTextCtrl_SetValue, 1860).
+-define(wxTextCtrl_ShowPosition, 1861).
+-define(wxTextCtrl_Undo, 1862).
+-define(wxTextCtrl_WriteText, 1863).
+-define(wxTextCtrl_XYToPosition, 1864).
+-define(wxNotebook_new_0, 1867).
+-define(wxNotebook_new_3, 1868).
+-define(wxNotebook_destruct, 1869).
+-define(wxNotebook_AddPage, 1870).
+-define(wxNotebook_AdvanceSelection, 1871).
+-define(wxNotebook_AssignImageList, 1872).
+-define(wxNotebook_Create, 1873).
+-define(wxNotebook_DeleteAllPages, 1874).
+-define(wxNotebook_DeletePage, 1875).
+-define(wxNotebook_RemovePage, 1876).
+-define(wxNotebook_GetCurrentPage, 1877).
+-define(wxNotebook_GetImageList, 1878).
+-define(wxNotebook_GetPage, 1880).
+-define(wxNotebook_GetPageCount, 1881).
+-define(wxNotebook_GetPageImage, 1882).
+-define(wxNotebook_GetPageText, 1883).
+-define(wxNotebook_GetRowCount, 1884).
+-define(wxNotebook_GetSelection, 1885).
+-define(wxNotebook_GetThemeBackgroundColour, 1886).
+-define(wxNotebook_HitTest, 1888).
+-define(wxNotebook_InsertPage, 1890).
+-define(wxNotebook_SetImageList, 1891).
+-define(wxNotebook_SetPadding, 1892).
+-define(wxNotebook_SetPageSize, 1893).
+-define(wxNotebook_SetPageImage, 1894).
+-define(wxNotebook_SetPageText, 1895).
+-define(wxNotebook_SetSelection, 1896).
+-define(wxNotebook_ChangeSelection, 1897).
+-define(wxChoicebook_new_0, 1898).
+-define(wxChoicebook_new_3, 1899).
+-define(wxChoicebook_AddPage, 1900).
+-define(wxChoicebook_AdvanceSelection, 1901).
+-define(wxChoicebook_AssignImageList, 1902).
+-define(wxChoicebook_Create, 1903).
+-define(wxChoicebook_DeleteAllPages, 1904).
+-define(wxChoicebook_DeletePage, 1905).
+-define(wxChoicebook_RemovePage, 1906).
+-define(wxChoicebook_GetCurrentPage, 1907).
+-define(wxChoicebook_GetImageList, 1908).
+-define(wxChoicebook_GetPage, 1910).
+-define(wxChoicebook_GetPageCount, 1911).
+-define(wxChoicebook_GetPageImage, 1912).
+-define(wxChoicebook_GetPageText, 1913).
+-define(wxChoicebook_GetSelection, 1914).
+-define(wxChoicebook_HitTest, 1915).
+-define(wxChoicebook_InsertPage, 1916).
+-define(wxChoicebook_SetImageList, 1917).
+-define(wxChoicebook_SetPageSize, 1918).
+-define(wxChoicebook_SetPageImage, 1919).
+-define(wxChoicebook_SetPageText, 1920).
+-define(wxChoicebook_SetSelection, 1921).
+-define(wxChoicebook_ChangeSelection, 1922).
+-define(wxChoicebook_destroy, 1923).
+-define(wxToolbook_new_0, 1924).
+-define(wxToolbook_new_3, 1925).
+-define(wxToolbook_AddPage, 1926).
+-define(wxToolbook_AdvanceSelection, 1927).
+-define(wxToolbook_AssignImageList, 1928).
+-define(wxToolbook_Create, 1929).
+-define(wxToolbook_DeleteAllPages, 1930).
+-define(wxToolbook_DeletePage, 1931).
+-define(wxToolbook_RemovePage, 1932).
+-define(wxToolbook_GetCurrentPage, 1933).
+-define(wxToolbook_GetImageList, 1934).
+-define(wxToolbook_GetPage, 1936).
+-define(wxToolbook_GetPageCount, 1937).
+-define(wxToolbook_GetPageImage, 1938).
+-define(wxToolbook_GetPageText, 1939).
+-define(wxToolbook_GetSelection, 1940).
+-define(wxToolbook_HitTest, 1942).
+-define(wxToolbook_InsertPage, 1943).
+-define(wxToolbook_SetImageList, 1944).
+-define(wxToolbook_SetPageSize, 1945).
+-define(wxToolbook_SetPageImage, 1946).
+-define(wxToolbook_SetPageText, 1947).
+-define(wxToolbook_SetSelection, 1948).
+-define(wxToolbook_ChangeSelection, 1949).
+-define(wxToolbook_destroy, 1950).
+-define(wxListbook_new_0, 1951).
+-define(wxListbook_new_3, 1952).
+-define(wxListbook_AddPage, 1953).
+-define(wxListbook_AdvanceSelection, 1954).
+-define(wxListbook_AssignImageList, 1955).
+-define(wxListbook_Create, 1956).
+-define(wxListbook_DeleteAllPages, 1957).
+-define(wxListbook_DeletePage, 1958).
+-define(wxListbook_RemovePage, 1959).
+-define(wxListbook_GetCurrentPage, 1960).
+-define(wxListbook_GetImageList, 1961).
+-define(wxListbook_GetPage, 1963).
+-define(wxListbook_GetPageCount, 1964).
+-define(wxListbook_GetPageImage, 1965).
+-define(wxListbook_GetPageText, 1966).
+-define(wxListbook_GetSelection, 1967).
+-define(wxListbook_HitTest, 1969).
+-define(wxListbook_InsertPage, 1970).
+-define(wxListbook_SetImageList, 1971).
+-define(wxListbook_SetPageSize, 1972).
+-define(wxListbook_SetPageImage, 1973).
+-define(wxListbook_SetPageText, 1974).
+-define(wxListbook_SetSelection, 1975).
+-define(wxListbook_ChangeSelection, 1976).
+-define(wxListbook_destroy, 1977).
+-define(wxTreebook_new_0, 1978).
+-define(wxTreebook_new_3, 1979).
+-define(wxTreebook_AddPage, 1980).
+-define(wxTreebook_AdvanceSelection, 1981).
+-define(wxTreebook_AssignImageList, 1982).
+-define(wxTreebook_Create, 1983).
+-define(wxTreebook_DeleteAllPages, 1984).
+-define(wxTreebook_DeletePage, 1985).
+-define(wxTreebook_RemovePage, 1986).
+-define(wxTreebook_GetCurrentPage, 1987).
+-define(wxTreebook_GetImageList, 1988).
+-define(wxTreebook_GetPage, 1990).
+-define(wxTreebook_GetPageCount, 1991).
+-define(wxTreebook_GetPageImage, 1992).
+-define(wxTreebook_GetPageText, 1993).
+-define(wxTreebook_GetSelection, 1994).
+-define(wxTreebook_ExpandNode, 1995).
+-define(wxTreebook_IsNodeExpanded, 1996).
+-define(wxTreebook_HitTest, 1998).
+-define(wxTreebook_InsertPage, 1999).
+-define(wxTreebook_InsertSubPage, 2000).
+-define(wxTreebook_SetImageList, 2001).
+-define(wxTreebook_SetPageSize, 2002).
+-define(wxTreebook_SetPageImage, 2003).
+-define(wxTreebook_SetPageText, 2004).
+-define(wxTreebook_SetSelection, 2005).
+-define(wxTreebook_ChangeSelection, 2006).
+-define(wxTreebook_destroy, 2007).
+-define(wxTreeCtrl_new_2, 2010).
+-define(wxTreeCtrl_new_0, 2011).
+-define(wxTreeCtrl_destruct, 2013).
+-define(wxTreeCtrl_AddRoot, 2014).
+-define(wxTreeCtrl_AppendItem, 2015).
+-define(wxTreeCtrl_AssignImageList, 2016).
+-define(wxTreeCtrl_AssignStateImageList, 2017).
+-define(wxTreeCtrl_Collapse, 2018).
+-define(wxTreeCtrl_CollapseAndReset, 2019).
+-define(wxTreeCtrl_Create, 2020).
+-define(wxTreeCtrl_Delete, 2021).
+-define(wxTreeCtrl_DeleteAllItems, 2022).
+-define(wxTreeCtrl_DeleteChildren, 2023).
+-define(wxTreeCtrl_EditLabel, 2024).
+-define(wxTreeCtrl_EnsureVisible, 2025).
+-define(wxTreeCtrl_Expand, 2026).
+-define(wxTreeCtrl_GetBoundingRect, 2027).
+-define(wxTreeCtrl_GetChildrenCount, 2029).
+-define(wxTreeCtrl_GetCount, 2030).
+-define(wxTreeCtrl_GetEditControl, 2031).
+-define(wxTreeCtrl_GetFirstChild, 2032).
+-define(wxTreeCtrl_GetNextChild, 2033).
+-define(wxTreeCtrl_GetFirstVisibleItem, 2034).
+-define(wxTreeCtrl_GetImageList, 2035).
+-define(wxTreeCtrl_GetIndent, 2036).
+-define(wxTreeCtrl_GetItemBackgroundColour, 2037).
+-define(wxTreeCtrl_GetItemData, 2038).
+-define(wxTreeCtrl_GetItemFont, 2039).
+-define(wxTreeCtrl_GetItemImage_1, 2040).
+-define(wxTreeCtrl_GetItemImage_2, 2041).
+-define(wxTreeCtrl_GetItemText, 2042).
+-define(wxTreeCtrl_GetItemTextColour, 2043).
+-define(wxTreeCtrl_GetLastChild, 2044).
+-define(wxTreeCtrl_GetNextSibling, 2045).
+-define(wxTreeCtrl_GetNextVisible, 2046).
+-define(wxTreeCtrl_GetItemParent, 2047).
+-define(wxTreeCtrl_GetPrevSibling, 2048).
+-define(wxTreeCtrl_GetPrevVisible, 2049).
+-define(wxTreeCtrl_GetRootItem, 2050).
+-define(wxTreeCtrl_GetSelection, 2051).
+-define(wxTreeCtrl_GetSelections, 2052).
+-define(wxTreeCtrl_GetStateImageList, 2053).
+-define(wxTreeCtrl_HitTest, 2054).
+-define(wxTreeCtrl_InsertItem, 2056).
+-define(wxTreeCtrl_IsBold, 2057).
+-define(wxTreeCtrl_IsExpanded, 2058).
+-define(wxTreeCtrl_IsSelected, 2059).
+-define(wxTreeCtrl_IsVisible, 2060).
+-define(wxTreeCtrl_ItemHasChildren, 2061).
+-define(wxTreeCtrl_IsTreeItemIdOk, 2062).
+-define(wxTreeCtrl_PrependItem, 2063).
+-define(wxTreeCtrl_ScrollTo, 2064).
+-define(wxTreeCtrl_SelectItem_1, 2065).
+-define(wxTreeCtrl_SelectItem_2, 2066).
+-define(wxTreeCtrl_SetIndent, 2067).
+-define(wxTreeCtrl_SetImageList, 2068).
+-define(wxTreeCtrl_SetItemBackgroundColour, 2069).
+-define(wxTreeCtrl_SetItemBold, 2070).
+-define(wxTreeCtrl_SetItemData, 2071).
+-define(wxTreeCtrl_SetItemDropHighlight, 2072).
+-define(wxTreeCtrl_SetItemFont, 2073).
+-define(wxTreeCtrl_SetItemHasChildren, 2074).
+-define(wxTreeCtrl_SetItemImage_2, 2075).
+-define(wxTreeCtrl_SetItemImage_3, 2076).
+-define(wxTreeCtrl_SetItemText, 2077).
+-define(wxTreeCtrl_SetItemTextColour, 2078).
+-define(wxTreeCtrl_SetStateImageList, 2079).
+-define(wxTreeCtrl_SetWindowStyle, 2080).
+-define(wxTreeCtrl_SortChildren, 2081).
+-define(wxTreeCtrl_Toggle, 2082).
+-define(wxTreeCtrl_ToggleItemSelection, 2083).
+-define(wxTreeCtrl_Unselect, 2084).
+-define(wxTreeCtrl_UnselectAll, 2085).
+-define(wxTreeCtrl_UnselectItem, 2086).
+-define(wxScrollBar_new_0, 2087).
+-define(wxScrollBar_new_3, 2088).
+-define(wxScrollBar_destruct, 2089).
+-define(wxScrollBar_Create, 2090).
+-define(wxScrollBar_GetRange, 2091).
+-define(wxScrollBar_GetPageSize, 2092).
+-define(wxScrollBar_GetThumbPosition, 2093).
+-define(wxScrollBar_GetThumbSize, 2094).
+-define(wxScrollBar_SetThumbPosition, 2095).
+-define(wxScrollBar_SetScrollbar, 2096).
+-define(wxSpinButton_new_2, 2098).
+-define(wxSpinButton_new_0, 2099).
+-define(wxSpinButton_Create, 2100).
+-define(wxSpinButton_GetMax, 2101).
+-define(wxSpinButton_GetMin, 2102).
+-define(wxSpinButton_GetValue, 2103).
+-define(wxSpinButton_SetRange, 2104).
+-define(wxSpinButton_SetValue, 2105).
+-define(wxSpinButton_destroy, 2106).
+-define(wxSpinCtrl_new_0, 2107).
+-define(wxSpinCtrl_new_2, 2108).
+-define(wxSpinCtrl_Create, 2110).
+-define(wxSpinCtrl_SetValue_1_1, 2113).
+-define(wxSpinCtrl_SetValue_1_0, 2114).
+-define(wxSpinCtrl_GetValue, 2116).
+-define(wxSpinCtrl_SetRange, 2118).
+-define(wxSpinCtrl_SetSelection, 2119).
+-define(wxSpinCtrl_GetMin, 2121).
+-define(wxSpinCtrl_GetMax, 2123).
+-define(wxSpinCtrl_destroy, 2124).
+-define(wxStaticText_new_0, 2125).
+-define(wxStaticText_new_4, 2126).
+-define(wxStaticText_Create, 2127).
+-define(wxStaticText_GetLabel, 2128).
+-define(wxStaticText_SetLabel, 2129).
+-define(wxStaticText_Wrap, 2130).
+-define(wxStaticText_destroy, 2131).
+-define(wxStaticBitmap_new_0, 2132).
+-define(wxStaticBitmap_new_4, 2133).
+-define(wxStaticBitmap_Create, 2134).
+-define(wxStaticBitmap_GetBitmap, 2135).
+-define(wxStaticBitmap_SetBitmap, 2136).
+-define(wxStaticBitmap_destroy, 2137).
+-define(wxRadioBox_new, 2138).
+-define(wxRadioBox_destruct, 2140).
+-define(wxRadioBox_Create, 2141).
+-define(wxRadioBox_Enable_2, 2142).
+-define(wxRadioBox_Enable_1, 2143).
+-define(wxRadioBox_GetSelection, 2144).
+-define(wxRadioBox_GetString, 2145).
+-define(wxRadioBox_SetSelection, 2146).
+-define(wxRadioBox_Show_2, 2147).
+-define(wxRadioBox_Show_1, 2148).
+-define(wxRadioBox_GetColumnCount, 2149).
+-define(wxRadioBox_GetItemHelpText, 2150).
+-define(wxRadioBox_GetItemToolTip, 2151).
+-define(wxRadioBox_GetItemFromPoint, 2153).
+-define(wxRadioBox_GetRowCount, 2154).
+-define(wxRadioBox_IsItemEnabled, 2155).
+-define(wxRadioBox_IsItemShown, 2156).
+-define(wxRadioBox_SetItemHelpText, 2157).
+-define(wxRadioBox_SetItemToolTip, 2158).
+-define(wxRadioButton_new_0, 2159).
+-define(wxRadioButton_new_4, 2160).
+-define(wxRadioButton_Create, 2161).
+-define(wxRadioButton_GetValue, 2162).
+-define(wxRadioButton_SetValue, 2163).
+-define(wxRadioButton_destroy, 2164).
+-define(wxSlider_new_6, 2166).
+-define(wxSlider_new_0, 2167).
+-define(wxSlider_Create, 2168).
+-define(wxSlider_GetLineSize, 2169).
+-define(wxSlider_GetMax, 2170).
+-define(wxSlider_GetMin, 2171).
+-define(wxSlider_GetPageSize, 2172).
+-define(wxSlider_GetThumbLength, 2173).
+-define(wxSlider_GetValue, 2174).
+-define(wxSlider_SetLineSize, 2175).
+-define(wxSlider_SetPageSize, 2176).
+-define(wxSlider_SetRange, 2177).
+-define(wxSlider_SetThumbLength, 2178).
+-define(wxSlider_SetValue, 2179).
+-define(wxSlider_destroy, 2180).
+-define(wxDialog_new_4, 2182).
+-define(wxDialog_new_0, 2183).
+-define(wxDialog_destruct, 2185).
+-define(wxDialog_Create, 2186).
+-define(wxDialog_CreateButtonSizer, 2187).
+-define(wxDialog_CreateStdDialogButtonSizer, 2188).
+-define(wxDialog_EndModal, 2189).
+-define(wxDialog_GetAffirmativeId, 2190).
+-define(wxDialog_GetReturnCode, 2191).
+-define(wxDialog_IsModal, 2192).
+-define(wxDialog_SetAffirmativeId, 2193).
+-define(wxDialog_SetReturnCode, 2194).
+-define(wxDialog_Show, 2195).
+-define(wxDialog_ShowModal, 2196).
+-define(wxColourDialog_new_0, 2197).
+-define(wxColourDialog_new_2, 2198).
+-define(wxColourDialog_destruct, 2199).
+-define(wxColourDialog_Create, 2200).
+-define(wxColourDialog_GetColourData, 2201).
+-define(wxColourData_new_0, 2202).
+-define(wxColourData_new_1, 2203).
+-define(wxColourData_destruct, 2204).
+-define(wxColourData_GetChooseFull, 2205).
+-define(wxColourData_GetColour, 2206).
+-define(wxColourData_GetCustomColour, 2208).
+-define(wxColourData_SetChooseFull, 2209).
+-define(wxColourData_SetColour, 2210).
+-define(wxColourData_SetCustomColour, 2211).
+-define(wxPalette_new_0, 2212).
+-define(wxPalette_new_4, 2213).
+-define(wxPalette_destruct, 2215).
+-define(wxPalette_Create, 2216).
+-define(wxPalette_GetColoursCount, 2217).
+-define(wxPalette_GetPixel, 2218).
+-define(wxPalette_GetRGB, 2219).
+-define(wxPalette_IsOk, 2220).
+-define(wxDirDialog_new, 2224).
+-define(wxDirDialog_destruct, 2225).
+-define(wxDirDialog_GetPath, 2226).
+-define(wxDirDialog_GetMessage, 2227).
+-define(wxDirDialog_SetMessage, 2228).
+-define(wxDirDialog_SetPath, 2229).
+-define(wxFileDialog_new, 2233).
+-define(wxFileDialog_destruct, 2234).
+-define(wxFileDialog_GetDirectory, 2235).
+-define(wxFileDialog_GetFilename, 2236).
+-define(wxFileDialog_GetFilenames, 2237).
+-define(wxFileDialog_GetFilterIndex, 2238).
+-define(wxFileDialog_GetMessage, 2239).
+-define(wxFileDialog_GetPath, 2240).
+-define(wxFileDialog_GetPaths, 2241).
+-define(wxFileDialog_GetWildcard, 2242).
+-define(wxFileDialog_SetDirectory, 2243).
+-define(wxFileDialog_SetFilename, 2244).
+-define(wxFileDialog_SetFilterIndex, 2245).
+-define(wxFileDialog_SetMessage, 2246).
+-define(wxFileDialog_SetPath, 2247).
+-define(wxFileDialog_SetWildcard, 2248).
+-define(wxPickerBase_SetInternalMargin, 2249).
+-define(wxPickerBase_GetInternalMargin, 2250).
+-define(wxPickerBase_SetTextCtrlProportion, 2251).
+-define(wxPickerBase_SetPickerCtrlProportion, 2252).
+-define(wxPickerBase_GetTextCtrlProportion, 2253).
+-define(wxPickerBase_GetPickerCtrlProportion, 2254).
+-define(wxPickerBase_HasTextCtrl, 2255).
+-define(wxPickerBase_GetTextCtrl, 2256).
+-define(wxPickerBase_IsTextCtrlGrowable, 2257).
+-define(wxPickerBase_SetPickerCtrlGrowable, 2258).
+-define(wxPickerBase_SetTextCtrlGrowable, 2259).
+-define(wxPickerBase_IsPickerCtrlGrowable, 2260).
+-define(wxFilePickerCtrl_new_0, 2261).
+-define(wxFilePickerCtrl_new_3, 2262).
+-define(wxFilePickerCtrl_Create, 2263).
+-define(wxFilePickerCtrl_GetPath, 2264).
+-define(wxFilePickerCtrl_SetPath, 2265).
+-define(wxFilePickerCtrl_destroy, 2266).
+-define(wxDirPickerCtrl_new_0, 2267).
+-define(wxDirPickerCtrl_new_3, 2268).
+-define(wxDirPickerCtrl_Create, 2269).
+-define(wxDirPickerCtrl_GetPath, 2270).
+-define(wxDirPickerCtrl_SetPath, 2271).
+-define(wxDirPickerCtrl_destroy, 2272).
+-define(wxColourPickerCtrl_new_0, 2273).
+-define(wxColourPickerCtrl_new_3, 2274).
+-define(wxColourPickerCtrl_Create, 2275).
+-define(wxColourPickerCtrl_GetColour, 2276).
+-define(wxColourPickerCtrl_SetColour_1_1, 2277).
+-define(wxColourPickerCtrl_SetColour_1_0, 2278).
+-define(wxColourPickerCtrl_destroy, 2279).
+-define(wxDatePickerCtrl_new_0, 2280).
+-define(wxDatePickerCtrl_new_3, 2281).
+-define(wxDatePickerCtrl_GetRange, 2282).
+-define(wxDatePickerCtrl_GetValue, 2283).
+-define(wxDatePickerCtrl_SetRange, 2284).
+-define(wxDatePickerCtrl_SetValue, 2285).
+-define(wxDatePickerCtrl_destroy, 2286).
+-define(wxFontPickerCtrl_new_0, 2287).
+-define(wxFontPickerCtrl_new_3, 2288).
+-define(wxFontPickerCtrl_Create, 2289).
+-define(wxFontPickerCtrl_GetSelectedFont, 2290).
+-define(wxFontPickerCtrl_SetSelectedFont, 2291).
+-define(wxFontPickerCtrl_GetMaxPointSize, 2292).
+-define(wxFontPickerCtrl_SetMaxPointSize, 2293).
+-define(wxFontPickerCtrl_destroy, 2294).
+-define(wxFindReplaceDialog_new_0, 2297).
+-define(wxFindReplaceDialog_new_4, 2298).
+-define(wxFindReplaceDialog_destruct, 2299).
+-define(wxFindReplaceDialog_Create, 2300).
+-define(wxFindReplaceDialog_GetData, 2301).
+-define(wxFindReplaceData_new_0, 2302).
+-define(wxFindReplaceData_new_1, 2303).
+-define(wxFindReplaceData_GetFindString, 2304).
+-define(wxFindReplaceData_GetReplaceString, 2305).
+-define(wxFindReplaceData_GetFlags, 2306).
+-define(wxFindReplaceData_SetFlags, 2307).
+-define(wxFindReplaceData_SetFindString, 2308).
+-define(wxFindReplaceData_SetReplaceString, 2309).
+-define(wxFindReplaceData_destroy, 2310).
+-define(wxMultiChoiceDialog_new_0, 2311).
+-define(wxMultiChoiceDialog_new_5, 2313).
+-define(wxMultiChoiceDialog_GetSelections, 2314).
+-define(wxMultiChoiceDialog_SetSelections, 2315).
+-define(wxMultiChoiceDialog_destroy, 2316).
+-define(wxSingleChoiceDialog_new_0, 2317).
+-define(wxSingleChoiceDialog_new_5, 2319).
+-define(wxSingleChoiceDialog_GetSelection, 2320).
+-define(wxSingleChoiceDialog_GetStringSelection, 2321).
+-define(wxSingleChoiceDialog_SetSelection, 2322).
+-define(wxSingleChoiceDialog_destroy, 2323).
+-define(wxTextEntryDialog_new, 2324).
+-define(wxTextEntryDialog_GetValue, 2325).
+-define(wxTextEntryDialog_SetValue, 2326).
+-define(wxTextEntryDialog_destroy, 2327).
+-define(wxPasswordEntryDialog_new, 2328).
+-define(wxPasswordEntryDialog_destroy, 2329).
+-define(wxFontData_new_0, 2330).
+-define(wxFontData_new_1, 2331).
+-define(wxFontData_destruct, 2332).
+-define(wxFontData_EnableEffects, 2333).
+-define(wxFontData_GetAllowSymbols, 2334).
+-define(wxFontData_GetColour, 2335).
+-define(wxFontData_GetChosenFont, 2336).
+-define(wxFontData_GetEnableEffects, 2337).
+-define(wxFontData_GetInitialFont, 2338).
+-define(wxFontData_GetShowHelp, 2339).
+-define(wxFontData_SetAllowSymbols, 2340).
+-define(wxFontData_SetChosenFont, 2341).
+-define(wxFontData_SetColour, 2342).
+-define(wxFontData_SetInitialFont, 2343).
+-define(wxFontData_SetRange, 2344).
+-define(wxFontData_SetShowHelp, 2345).
+-define(wxFontDialog_new_0, 2349).
+-define(wxFontDialog_new_2, 2351).
+-define(wxFontDialog_Create, 2353).
+-define(wxFontDialog_GetFontData, 2354).
+-define(wxFontDialog_destroy, 2356).
+-define(wxProgressDialog_new, 2357).
+-define(wxProgressDialog_destruct, 2358).
+-define(wxProgressDialog_Resume, 2359).
+-define(wxProgressDialog_Update_2, 2360).
+-define(wxProgressDialog_Update_0, 2361).
+-define(wxMessageDialog_new, 2362).
+-define(wxMessageDialog_destruct, 2363).
+-define(wxPageSetupDialog_new, 2364).
+-define(wxPageSetupDialog_destruct, 2365).
+-define(wxPageSetupDialog_GetPageSetupData, 2366).
+-define(wxPageSetupDialog_ShowModal, 2367).
+-define(wxPageSetupDialogData_new_0, 2368).
+-define(wxPageSetupDialogData_new_1_0, 2369).
+-define(wxPageSetupDialogData_new_1_1, 2370).
+-define(wxPageSetupDialogData_destruct, 2371).
+-define(wxPageSetupDialogData_EnableHelp, 2372).
+-define(wxPageSetupDialogData_EnableMargins, 2373).
+-define(wxPageSetupDialogData_EnableOrientation, 2374).
+-define(wxPageSetupDialogData_EnablePaper, 2375).
+-define(wxPageSetupDialogData_EnablePrinter, 2376).
+-define(wxPageSetupDialogData_GetDefaultMinMargins, 2377).
+-define(wxPageSetupDialogData_GetEnableMargins, 2378).
+-define(wxPageSetupDialogData_GetEnableOrientation, 2379).
+-define(wxPageSetupDialogData_GetEnablePaper, 2380).
+-define(wxPageSetupDialogData_GetEnablePrinter, 2381).
+-define(wxPageSetupDialogData_GetEnableHelp, 2382).
+-define(wxPageSetupDialogData_GetDefaultInfo, 2383).
+-define(wxPageSetupDialogData_GetMarginTopLeft, 2384).
+-define(wxPageSetupDialogData_GetMarginBottomRight, 2385).
+-define(wxPageSetupDialogData_GetMinMarginTopLeft, 2386).
+-define(wxPageSetupDialogData_GetMinMarginBottomRight, 2387).
+-define(wxPageSetupDialogData_GetPaperId, 2388).
+-define(wxPageSetupDialogData_GetPaperSize, 2389).
+-define(wxPageSetupDialogData_GetPrintData, 2391).
+-define(wxPageSetupDialogData_IsOk, 2392).
+-define(wxPageSetupDialogData_SetDefaultInfo, 2393).
+-define(wxPageSetupDialogData_SetDefaultMinMargins, 2394).
+-define(wxPageSetupDialogData_SetMarginTopLeft, 2395).
+-define(wxPageSetupDialogData_SetMarginBottomRight, 2396).
+-define(wxPageSetupDialogData_SetMinMarginTopLeft, 2397).
+-define(wxPageSetupDialogData_SetMinMarginBottomRight, 2398).
+-define(wxPageSetupDialogData_SetPaperId, 2399).
+-define(wxPageSetupDialogData_SetPaperSize_1_1, 2400).
+-define(wxPageSetupDialogData_SetPaperSize_1_0, 2401).
+-define(wxPageSetupDialogData_SetPrintData, 2402).
+-define(wxPrintDialog_new_2_0, 2403).
+-define(wxPrintDialog_new_2_1, 2404).
+-define(wxPrintDialog_destruct, 2405).
+-define(wxPrintDialog_GetPrintDialogData, 2406).
+-define(wxPrintDialog_GetPrintDC, 2407).
+-define(wxPrintDialogData_new_0, 2408).
+-define(wxPrintDialogData_new_1_1, 2409).
+-define(wxPrintDialogData_new_1_0, 2410).
+-define(wxPrintDialogData_destruct, 2411).
+-define(wxPrintDialogData_EnableHelp, 2412).
+-define(wxPrintDialogData_EnablePageNumbers, 2413).
+-define(wxPrintDialogData_EnablePrintToFile, 2414).
+-define(wxPrintDialogData_EnableSelection, 2415).
+-define(wxPrintDialogData_GetAllPages, 2416).
+-define(wxPrintDialogData_GetCollate, 2417).
+-define(wxPrintDialogData_GetFromPage, 2418).
+-define(wxPrintDialogData_GetMaxPage, 2419).
+-define(wxPrintDialogData_GetMinPage, 2420).
+-define(wxPrintDialogData_GetNoCopies, 2421).
+-define(wxPrintDialogData_GetPrintData, 2422).
+-define(wxPrintDialogData_GetPrintToFile, 2423).
+-define(wxPrintDialogData_GetSelection, 2424).
+-define(wxPrintDialogData_GetToPage, 2425).
+-define(wxPrintDialogData_IsOk, 2426).
+-define(wxPrintDialogData_SetCollate, 2427).
+-define(wxPrintDialogData_SetFromPage, 2428).
+-define(wxPrintDialogData_SetMaxPage, 2429).
+-define(wxPrintDialogData_SetMinPage, 2430).
+-define(wxPrintDialogData_SetNoCopies, 2431).
+-define(wxPrintDialogData_SetPrintData, 2432).
+-define(wxPrintDialogData_SetPrintToFile, 2433).
+-define(wxPrintDialogData_SetSelection, 2434).
+-define(wxPrintDialogData_SetToPage, 2435).
+-define(wxPrintData_new_0, 2436).
+-define(wxPrintData_new_1, 2437).
+-define(wxPrintData_destruct, 2438).
+-define(wxPrintData_GetCollate, 2439).
+-define(wxPrintData_GetBin, 2440).
+-define(wxPrintData_GetColour, 2441).
+-define(wxPrintData_GetDuplex, 2442).
+-define(wxPrintData_GetNoCopies, 2443).
+-define(wxPrintData_GetOrientation, 2444).
+-define(wxPrintData_GetPaperId, 2445).
+-define(wxPrintData_GetPrinterName, 2446).
+-define(wxPrintData_GetQuality, 2447).
+-define(wxPrintData_IsOk, 2448).
+-define(wxPrintData_SetBin, 2449).
+-define(wxPrintData_SetCollate, 2450).
+-define(wxPrintData_SetColour, 2451).
+-define(wxPrintData_SetDuplex, 2452).
+-define(wxPrintData_SetNoCopies, 2453).
+-define(wxPrintData_SetOrientation, 2454).
+-define(wxPrintData_SetPaperId, 2455).
+-define(wxPrintData_SetPrinterName, 2456).
+-define(wxPrintData_SetQuality, 2457).
+-define(wxPrintPreview_new_2, 2460).
+-define(wxPrintPreview_new_3, 2461).
+-define(wxPrintPreview_destruct, 2463).
+-define(wxPrintPreview_GetCanvas, 2464).
+-define(wxPrintPreview_GetCurrentPage, 2465).
+-define(wxPrintPreview_GetFrame, 2466).
+-define(wxPrintPreview_GetMaxPage, 2467).
+-define(wxPrintPreview_GetMinPage, 2468).
+-define(wxPrintPreview_GetPrintout, 2469).
+-define(wxPrintPreview_GetPrintoutForPrinting, 2470).
+-define(wxPrintPreview_IsOk, 2471).
+-define(wxPrintPreview_PaintPage, 2472).
+-define(wxPrintPreview_Print, 2473).
+-define(wxPrintPreview_RenderPage, 2474).
+-define(wxPrintPreview_SetCanvas, 2475).
+-define(wxPrintPreview_SetCurrentPage, 2476).
+-define(wxPrintPreview_SetFrame, 2477).
+-define(wxPrintPreview_SetPrintout, 2478).
+-define(wxPrintPreview_SetZoom, 2479).
+-define(wxPreviewFrame_new, 2480).
+-define(wxPreviewFrame_destruct, 2481).
+-define(wxPreviewFrame_CreateControlBar, 2482).
+-define(wxPreviewFrame_CreateCanvas, 2483).
+-define(wxPreviewFrame_Initialize, 2484).
+-define(wxPreviewFrame_OnCloseWindow, 2485).
+-define(wxPreviewControlBar_new, 2486).
+-define(wxPreviewControlBar_destruct, 2487).
+-define(wxPreviewControlBar_CreateButtons, 2488).
+-define(wxPreviewControlBar_GetPrintPreview, 2489).
+-define(wxPreviewControlBar_GetZoomControl, 2490).
+-define(wxPreviewControlBar_SetZoomControl, 2491).
+-define(wxPrinter_new, 2493).
+-define(wxPrinter_CreateAbortWindow, 2494).
+-define(wxPrinter_GetAbort, 2495).
+-define(wxPrinter_GetLastError, 2496).
+-define(wxPrinter_GetPrintDialogData, 2497).
+-define(wxPrinter_Print, 2498).
+-define(wxPrinter_PrintDialog, 2499).
+-define(wxPrinter_ReportError, 2500).
+-define(wxPrinter_Setup, 2501).
+-define(wxPrinter_destroy, 2502).
+-define(wxXmlResource_new_1, 2503).
+-define(wxXmlResource_new_2, 2504).
+-define(wxXmlResource_destruct, 2505).
+-define(wxXmlResource_AttachUnknownControl, 2506).
+-define(wxXmlResource_ClearHandlers, 2507).
+-define(wxXmlResource_CompareVersion, 2508).
+-define(wxXmlResource_Get, 2509).
+-define(wxXmlResource_GetFlags, 2510).
+-define(wxXmlResource_GetVersion, 2511).
+-define(wxXmlResource_GetXRCID, 2512).
+-define(wxXmlResource_InitAllHandlers, 2513).
+-define(wxXmlResource_Load, 2514).
+-define(wxXmlResource_LoadBitmap, 2515).
+-define(wxXmlResource_LoadDialog_2, 2516).
+-define(wxXmlResource_LoadDialog_3, 2517).
+-define(wxXmlResource_LoadFrame_2, 2518).
+-define(wxXmlResource_LoadFrame_3, 2519).
+-define(wxXmlResource_LoadIcon, 2520).
+-define(wxXmlResource_LoadMenu, 2521).
+-define(wxXmlResource_LoadMenuBar_2, 2522).
+-define(wxXmlResource_LoadMenuBar_1, 2523).
+-define(wxXmlResource_LoadPanel_2, 2524).
+-define(wxXmlResource_LoadPanel_3, 2525).
+-define(wxXmlResource_LoadToolBar, 2526).
+-define(wxXmlResource_Set, 2527).
+-define(wxXmlResource_SetFlags, 2528).
+-define(wxXmlResource_Unload, 2529).
+-define(wxXmlResource_xrcctrl, 2530).
+-define(wxHtmlEasyPrinting_new, 2531).
+-define(wxHtmlEasyPrinting_destruct, 2532).
+-define(wxHtmlEasyPrinting_GetPrintData, 2533).
+-define(wxHtmlEasyPrinting_GetPageSetupData, 2534).
+-define(wxHtmlEasyPrinting_PreviewFile, 2535).
+-define(wxHtmlEasyPrinting_PreviewText, 2536).
+-define(wxHtmlEasyPrinting_PrintFile, 2537).
+-define(wxHtmlEasyPrinting_PrintText, 2538).
+-define(wxHtmlEasyPrinting_PageSetup, 2539).
+-define(wxHtmlEasyPrinting_SetFonts, 2540).
+-define(wxHtmlEasyPrinting_SetHeader, 2541).
+-define(wxHtmlEasyPrinting_SetFooter, 2542).
+-define(wxGLCanvas_new_2, 2544).
+-define(wxGLCanvas_new_3_1, 2545).
+-define(wxGLCanvas_new_3_0, 2546).
+-define(wxGLCanvas_GetContext, 2547).
+-define(wxGLCanvas_SetCurrent, 2549).
+-define(wxGLCanvas_SwapBuffers, 2550).
+-define(wxGLCanvas_destroy, 2551).
+-define(wxAuiManager_new, 2552).
+-define(wxAuiManager_destruct, 2553).
+-define(wxAuiManager_AddPane_2_1, 2554).
+-define(wxAuiManager_AddPane_3, 2555).
+-define(wxAuiManager_AddPane_2_0, 2556).
+-define(wxAuiManager_DetachPane, 2557).
+-define(wxAuiManager_GetAllPanes, 2558).
+-define(wxAuiManager_GetArtProvider, 2559).
+-define(wxAuiManager_GetDockSizeConstraint, 2560).
+-define(wxAuiManager_GetFlags, 2561).
+-define(wxAuiManager_GetManagedWindow, 2562).
+-define(wxAuiManager_GetManager, 2563).
+-define(wxAuiManager_GetPane_1_1, 2564).
+-define(wxAuiManager_GetPane_1_0, 2565).
+-define(wxAuiManager_HideHint, 2566).
+-define(wxAuiManager_InsertPane, 2567).
+-define(wxAuiManager_LoadPaneInfo, 2568).
+-define(wxAuiManager_LoadPerspective, 2569).
+-define(wxAuiManager_SavePaneInfo, 2570).
+-define(wxAuiManager_SavePerspective, 2571).
+-define(wxAuiManager_SetArtProvider, 2572).
+-define(wxAuiManager_SetDockSizeConstraint, 2573).
+-define(wxAuiManager_SetFlags, 2574).
+-define(wxAuiManager_SetManagedWindow, 2575).
+-define(wxAuiManager_ShowHint, 2576).
+-define(wxAuiManager_UnInit, 2577).
+-define(wxAuiManager_Update, 2578).
+-define(wxAuiPaneInfo_new_0, 2579).
+-define(wxAuiPaneInfo_new_1, 2580).
+-define(wxAuiPaneInfo_destruct, 2581).
+-define(wxAuiPaneInfo_BestSize_1, 2582).
+-define(wxAuiPaneInfo_BestSize_2, 2583).
+-define(wxAuiPaneInfo_Bottom, 2584).
+-define(wxAuiPaneInfo_BottomDockable, 2585).
+-define(wxAuiPaneInfo_Caption, 2586).
+-define(wxAuiPaneInfo_CaptionVisible, 2587).
+-define(wxAuiPaneInfo_Centre, 2588).
+-define(wxAuiPaneInfo_CentrePane, 2589).
+-define(wxAuiPaneInfo_CloseButton, 2590).
+-define(wxAuiPaneInfo_DefaultPane, 2591).
+-define(wxAuiPaneInfo_DestroyOnClose, 2592).
+-define(wxAuiPaneInfo_Direction, 2593).
+-define(wxAuiPaneInfo_Dock, 2594).
+-define(wxAuiPaneInfo_Dockable, 2595).
+-define(wxAuiPaneInfo_Fixed, 2596).
+-define(wxAuiPaneInfo_Float, 2597).
+-define(wxAuiPaneInfo_Floatable, 2598).
+-define(wxAuiPaneInfo_FloatingPosition_1, 2599).
+-define(wxAuiPaneInfo_FloatingPosition_2, 2600).
+-define(wxAuiPaneInfo_FloatingSize_1, 2601).
+-define(wxAuiPaneInfo_FloatingSize_2, 2602).
+-define(wxAuiPaneInfo_Gripper, 2603).
+-define(wxAuiPaneInfo_GripperTop, 2604).
+-define(wxAuiPaneInfo_HasBorder, 2605).
+-define(wxAuiPaneInfo_HasCaption, 2606).
+-define(wxAuiPaneInfo_HasCloseButton, 2607).
+-define(wxAuiPaneInfo_HasFlag, 2608).
+-define(wxAuiPaneInfo_HasGripper, 2609).
+-define(wxAuiPaneInfo_HasGripperTop, 2610).
+-define(wxAuiPaneInfo_HasMaximizeButton, 2611).
+-define(wxAuiPaneInfo_HasMinimizeButton, 2612).
+-define(wxAuiPaneInfo_HasPinButton, 2613).
+-define(wxAuiPaneInfo_Hide, 2614).
+-define(wxAuiPaneInfo_IsBottomDockable, 2615).
+-define(wxAuiPaneInfo_IsDocked, 2616).
+-define(wxAuiPaneInfo_IsFixed, 2617).
+-define(wxAuiPaneInfo_IsFloatable, 2618).
+-define(wxAuiPaneInfo_IsFloating, 2619).
+-define(wxAuiPaneInfo_IsLeftDockable, 2620).
+-define(wxAuiPaneInfo_IsMovable, 2621).
+-define(wxAuiPaneInfo_IsOk, 2622).
+-define(wxAuiPaneInfo_IsResizable, 2623).
+-define(wxAuiPaneInfo_IsRightDockable, 2624).
+-define(wxAuiPaneInfo_IsShown, 2625).
+-define(wxAuiPaneInfo_IsToolbar, 2626).
+-define(wxAuiPaneInfo_IsTopDockable, 2627).
+-define(wxAuiPaneInfo_Layer, 2628).
+-define(wxAuiPaneInfo_Left, 2629).
+-define(wxAuiPaneInfo_LeftDockable, 2630).
+-define(wxAuiPaneInfo_MaxSize_1, 2631).
+-define(wxAuiPaneInfo_MaxSize_2, 2632).
+-define(wxAuiPaneInfo_MaximizeButton, 2633).
+-define(wxAuiPaneInfo_MinSize_1, 2634).
+-define(wxAuiPaneInfo_MinSize_2, 2635).
+-define(wxAuiPaneInfo_MinimizeButton, 2636).
+-define(wxAuiPaneInfo_Movable, 2637).
+-define(wxAuiPaneInfo_Name, 2638).
+-define(wxAuiPaneInfo_PaneBorder, 2639).
+-define(wxAuiPaneInfo_PinButton, 2640).
+-define(wxAuiPaneInfo_Position, 2641).
+-define(wxAuiPaneInfo_Resizable, 2642).
+-define(wxAuiPaneInfo_Right, 2643).
+-define(wxAuiPaneInfo_RightDockable, 2644).
+-define(wxAuiPaneInfo_Row, 2645).
+-define(wxAuiPaneInfo_SafeSet, 2646).
+-define(wxAuiPaneInfo_SetFlag, 2647).
+-define(wxAuiPaneInfo_Show, 2648).
+-define(wxAuiPaneInfo_ToolbarPane, 2649).
+-define(wxAuiPaneInfo_Top, 2650).
+-define(wxAuiPaneInfo_TopDockable, 2651).
+-define(wxAuiPaneInfo_Window, 2652).
+-define(wxAuiNotebook_new_0, 2653).
+-define(wxAuiNotebook_new_2, 2654).
+-define(wxAuiNotebook_AddPage, 2655).
+-define(wxAuiNotebook_Create, 2656).
+-define(wxAuiNotebook_DeletePage, 2657).
+-define(wxAuiNotebook_GetArtProvider, 2658).
+-define(wxAuiNotebook_GetPage, 2659).
+-define(wxAuiNotebook_GetPageBitmap, 2660).
+-define(wxAuiNotebook_GetPageCount, 2661).
+-define(wxAuiNotebook_GetPageIndex, 2662).
+-define(wxAuiNotebook_GetPageText, 2663).
+-define(wxAuiNotebook_GetSelection, 2664).
+-define(wxAuiNotebook_InsertPage, 2665).
+-define(wxAuiNotebook_RemovePage, 2666).
+-define(wxAuiNotebook_SetArtProvider, 2667).
+-define(wxAuiNotebook_SetFont, 2668).
+-define(wxAuiNotebook_SetPageBitmap, 2669).
+-define(wxAuiNotebook_SetPageText, 2670).
+-define(wxAuiNotebook_SetSelection, 2671).
+-define(wxAuiNotebook_SetTabCtrlHeight, 2672).
+-define(wxAuiNotebook_SetUniformBitmapSize, 2673).
+-define(wxAuiNotebook_destroy, 2674).
+-define(wxMDIParentFrame_new_0, 2675).
+-define(wxMDIParentFrame_new_4, 2676).
+-define(wxMDIParentFrame_destruct, 2677).
+-define(wxMDIParentFrame_ActivateNext, 2678).
+-define(wxMDIParentFrame_ActivatePrevious, 2679).
+-define(wxMDIParentFrame_ArrangeIcons, 2680).
+-define(wxMDIParentFrame_Cascade, 2681).
+-define(wxMDIParentFrame_Create, 2682).
+-define(wxMDIParentFrame_GetActiveChild, 2683).
+-define(wxMDIParentFrame_GetClientWindow, 2684).
+-define(wxMDIParentFrame_Tile, 2685).
+-define(wxMDIChildFrame_new_0, 2686).
+-define(wxMDIChildFrame_new_4, 2687).
+-define(wxMDIChildFrame_destruct, 2688).
+-define(wxMDIChildFrame_Activate, 2689).
+-define(wxMDIChildFrame_Create, 2690).
+-define(wxMDIChildFrame_Maximize, 2691).
+-define(wxMDIChildFrame_Restore, 2692).
+-define(wxMDIClientWindow_new_0, 2693).
+-define(wxMDIClientWindow_new_2, 2694).
+-define(wxMDIClientWindow_destruct, 2695).
+-define(wxMDIClientWindow_CreateClient, 2696).
+-define(wxLayoutAlgorithm_new, 2697).
+-define(wxLayoutAlgorithm_LayoutFrame, 2698).
+-define(wxLayoutAlgorithm_LayoutMDIFrame, 2699).
+-define(wxLayoutAlgorithm_LayoutWindow, 2700).
+-define(wxLayoutAlgorithm_destroy, 2701).
+-define(wxEvent_GetId, 2702).
+-define(wxEvent_GetSkipped, 2703).
+-define(wxEvent_GetTimestamp, 2704).
+-define(wxEvent_IsCommandEvent, 2705).
+-define(wxEvent_ResumePropagation, 2706).
+-define(wxEvent_ShouldPropagate, 2707).
+-define(wxEvent_Skip, 2708).
+-define(wxEvent_StopPropagation, 2709).
+-define(wxCommandEvent_getClientData, 2710).
+-define(wxCommandEvent_GetExtraLong, 2711).
+-define(wxCommandEvent_GetInt, 2712).
+-define(wxCommandEvent_GetSelection, 2713).
+-define(wxCommandEvent_GetString, 2714).
+-define(wxCommandEvent_IsChecked, 2715).
+-define(wxCommandEvent_IsSelection, 2716).
+-define(wxCommandEvent_SetInt, 2717).
+-define(wxCommandEvent_SetString, 2718).
+-define(wxScrollEvent_GetOrientation, 2719).
+-define(wxScrollEvent_GetPosition, 2720).
+-define(wxScrollWinEvent_GetOrientation, 2721).
+-define(wxScrollWinEvent_GetPosition, 2722).
+-define(wxMouseEvent_AltDown, 2723).
+-define(wxMouseEvent_Button, 2724).
+-define(wxMouseEvent_ButtonDClick, 2725).
+-define(wxMouseEvent_ButtonDown, 2726).
+-define(wxMouseEvent_ButtonUp, 2727).
+-define(wxMouseEvent_CmdDown, 2728).
+-define(wxMouseEvent_ControlDown, 2729).
+-define(wxMouseEvent_Dragging, 2730).
+-define(wxMouseEvent_Entering, 2731).
+-define(wxMouseEvent_GetButton, 2732).
+-define(wxMouseEvent_GetPosition, 2735).
+-define(wxMouseEvent_GetLogicalPosition, 2736).
+-define(wxMouseEvent_GetLinesPerAction, 2737).
+-define(wxMouseEvent_GetWheelRotation, 2738).
+-define(wxMouseEvent_GetWheelDelta, 2739).
+-define(wxMouseEvent_GetX, 2740).
+-define(wxMouseEvent_GetY, 2741).
+-define(wxMouseEvent_IsButton, 2742).
+-define(wxMouseEvent_IsPageScroll, 2743).
+-define(wxMouseEvent_Leaving, 2744).
+-define(wxMouseEvent_LeftDClick, 2745).
+-define(wxMouseEvent_LeftDown, 2746).
+-define(wxMouseEvent_LeftIsDown, 2747).
+-define(wxMouseEvent_LeftUp, 2748).
+-define(wxMouseEvent_MetaDown, 2749).
+-define(wxMouseEvent_MiddleDClick, 2750).
+-define(wxMouseEvent_MiddleDown, 2751).
+-define(wxMouseEvent_MiddleIsDown, 2752).
+-define(wxMouseEvent_MiddleUp, 2753).
+-define(wxMouseEvent_Moving, 2754).
+-define(wxMouseEvent_RightDClick, 2755).
+-define(wxMouseEvent_RightDown, 2756).
+-define(wxMouseEvent_RightIsDown, 2757).
+-define(wxMouseEvent_RightUp, 2758).
+-define(wxMouseEvent_ShiftDown, 2759).
+-define(wxSetCursorEvent_GetCursor, 2760).
+-define(wxSetCursorEvent_GetX, 2761).
+-define(wxSetCursorEvent_GetY, 2762).
+-define(wxSetCursorEvent_HasCursor, 2763).
+-define(wxSetCursorEvent_SetCursor, 2764).
+-define(wxKeyEvent_AltDown, 2765).
+-define(wxKeyEvent_CmdDown, 2766).
+-define(wxKeyEvent_ControlDown, 2767).
+-define(wxKeyEvent_GetKeyCode, 2768).
+-define(wxKeyEvent_GetModifiers, 2769).
+-define(wxKeyEvent_GetPosition, 2772).
+-define(wxKeyEvent_GetRawKeyCode, 2773).
+-define(wxKeyEvent_GetRawKeyFlags, 2774).
+-define(wxKeyEvent_GetUnicodeKey, 2775).
+-define(wxKeyEvent_GetX, 2776).
+-define(wxKeyEvent_GetY, 2777).
+-define(wxKeyEvent_HasModifiers, 2778).
+-define(wxKeyEvent_MetaDown, 2779).
+-define(wxKeyEvent_ShiftDown, 2780).
+-define(wxSizeEvent_GetSize, 2781).
+-define(wxMoveEvent_GetPosition, 2782).
+-define(wxEraseEvent_GetDC, 2783).
+-define(wxFocusEvent_GetWindow, 2784).
+-define(wxChildFocusEvent_GetWindow, 2785).
+-define(wxMenuEvent_GetMenu, 2786).
+-define(wxMenuEvent_GetMenuId, 2787).
+-define(wxMenuEvent_IsPopup, 2788).
+-define(wxCloseEvent_CanVeto, 2789).
+-define(wxCloseEvent_GetLoggingOff, 2790).
+-define(wxCloseEvent_SetCanVeto, 2791).
+-define(wxCloseEvent_SetLoggingOff, 2792).
+-define(wxCloseEvent_Veto, 2793).
+-define(wxShowEvent_SetShow, 2794).
+-define(wxShowEvent_GetShow, 2795).
+-define(wxIconizeEvent_Iconized, 2796).
+-define(wxJoystickEvent_ButtonDown, 2797).
+-define(wxJoystickEvent_ButtonIsDown, 2798).
+-define(wxJoystickEvent_ButtonUp, 2799).
+-define(wxJoystickEvent_GetButtonChange, 2800).
+-define(wxJoystickEvent_GetButtonState, 2801).
+-define(wxJoystickEvent_GetJoystick, 2802).
+-define(wxJoystickEvent_GetPosition, 2803).
+-define(wxJoystickEvent_GetZPosition, 2804).
+-define(wxJoystickEvent_IsButton, 2805).
+-define(wxJoystickEvent_IsMove, 2806).
+-define(wxJoystickEvent_IsZMove, 2807).
+-define(wxUpdateUIEvent_CanUpdate, 2808).
+-define(wxUpdateUIEvent_Check, 2809).
+-define(wxUpdateUIEvent_Enable, 2810).
+-define(wxUpdateUIEvent_Show, 2811).
+-define(wxUpdateUIEvent_GetChecked, 2812).
+-define(wxUpdateUIEvent_GetEnabled, 2813).
+-define(wxUpdateUIEvent_GetShown, 2814).
+-define(wxUpdateUIEvent_GetSetChecked, 2815).
+-define(wxUpdateUIEvent_GetSetEnabled, 2816).
+-define(wxUpdateUIEvent_GetSetShown, 2817).
+-define(wxUpdateUIEvent_GetSetText, 2818).
+-define(wxUpdateUIEvent_GetText, 2819).
+-define(wxUpdateUIEvent_GetMode, 2820).
+-define(wxUpdateUIEvent_GetUpdateInterval, 2821).
+-define(wxUpdateUIEvent_ResetUpdateTime, 2822).
+-define(wxUpdateUIEvent_SetMode, 2823).
+-define(wxUpdateUIEvent_SetText, 2824).
+-define(wxUpdateUIEvent_SetUpdateInterval, 2825).
+-define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2826).
+-define(wxPaletteChangedEvent_SetChangedWindow, 2827).
+-define(wxPaletteChangedEvent_GetChangedWindow, 2828).
+-define(wxQueryNewPaletteEvent_SetPaletteRealized, 2829).
+-define(wxQueryNewPaletteEvent_GetPaletteRealized, 2830).
+-define(wxNavigationKeyEvent_GetDirection, 2831).
+-define(wxNavigationKeyEvent_SetDirection, 2832).
+-define(wxNavigationKeyEvent_IsWindowChange, 2833).
+-define(wxNavigationKeyEvent_SetWindowChange, 2834).
+-define(wxNavigationKeyEvent_IsFromTab, 2835).
+-define(wxNavigationKeyEvent_SetFromTab, 2836).
+-define(wxNavigationKeyEvent_GetCurrentFocus, 2837).
+-define(wxNavigationKeyEvent_SetCurrentFocus, 2838).
+-define(wxHelpEvent_GetOrigin, 2839).
+-define(wxHelpEvent_GetPosition, 2840).
+-define(wxHelpEvent_SetOrigin, 2841).
+-define(wxHelpEvent_SetPosition, 2842).
+-define(wxContextMenuEvent_GetPosition, 2843).
+-define(wxContextMenuEvent_SetPosition, 2844).
+-define(wxIdleEvent_CanSend, 2845).
+-define(wxIdleEvent_GetMode, 2846).
+-define(wxIdleEvent_RequestMore, 2847).
+-define(wxIdleEvent_MoreRequested, 2848).
+-define(wxIdleEvent_SetMode, 2849).
+-define(wxGridEvent_AltDown, 2850).
+-define(wxGridEvent_ControlDown, 2851).
+-define(wxGridEvent_GetCol, 2852).
+-define(wxGridEvent_GetPosition, 2853).
+-define(wxGridEvent_GetRow, 2854).
+-define(wxGridEvent_MetaDown, 2855).
+-define(wxGridEvent_Selecting, 2856).
+-define(wxGridEvent_ShiftDown, 2857).
+-define(wxNotifyEvent_Allow, 2858).
+-define(wxNotifyEvent_IsAllowed, 2859).
+-define(wxNotifyEvent_Veto, 2860).
+-define(wxSashEvent_GetEdge, 2861).
+-define(wxSashEvent_GetDragRect, 2862).
+-define(wxSashEvent_GetDragStatus, 2863).
+-define(wxListEvent_GetCacheFrom, 2864).
+-define(wxListEvent_GetCacheTo, 2865).
+-define(wxListEvent_GetKeyCode, 2866).
+-define(wxListEvent_GetIndex, 2867).
+-define(wxListEvent_GetColumn, 2868).
+-define(wxListEvent_GetPoint, 2869).
+-define(wxListEvent_GetLabel, 2870).
+-define(wxListEvent_GetText, 2871).
+-define(wxListEvent_GetImage, 2872).
+-define(wxListEvent_GetData, 2873).
+-define(wxListEvent_GetMask, 2874).
+-define(wxListEvent_GetItem, 2875).
+-define(wxListEvent_IsEditCancelled, 2876).
+-define(wxDateEvent_GetDate, 2877).
+-define(wxCalendarEvent_GetWeekDay, 2878).
+-define(wxFileDirPickerEvent_GetPath, 2879).
+-define(wxColourPickerEvent_GetColour, 2880).
+-define(wxFontPickerEvent_GetFont, 2881).
+-define(wxStyledTextEvent_GetPosition, 2882).
+-define(wxStyledTextEvent_GetKey, 2883).
+-define(wxStyledTextEvent_GetModifiers, 2884).
+-define(wxStyledTextEvent_GetModificationType, 2885).
+-define(wxStyledTextEvent_GetText, 2886).
+-define(wxStyledTextEvent_GetLength, 2887).
+-define(wxStyledTextEvent_GetLinesAdded, 2888).
+-define(wxStyledTextEvent_GetLine, 2889).
+-define(wxStyledTextEvent_GetFoldLevelNow, 2890).
+-define(wxStyledTextEvent_GetFoldLevelPrev, 2891).
+-define(wxStyledTextEvent_GetMargin, 2892).
+-define(wxStyledTextEvent_GetMessage, 2893).
+-define(wxStyledTextEvent_GetWParam, 2894).
+-define(wxStyledTextEvent_GetLParam, 2895).
+-define(wxStyledTextEvent_GetListType, 2896).
+-define(wxStyledTextEvent_GetX, 2897).
+-define(wxStyledTextEvent_GetY, 2898).
+-define(wxStyledTextEvent_GetDragText, 2899).
+-define(wxStyledTextEvent_GetDragAllowMove, 2900).
+-define(wxStyledTextEvent_GetDragResult, 2901).
+-define(wxStyledTextEvent_GetShift, 2902).
+-define(wxStyledTextEvent_GetControl, 2903).
+-define(wxStyledTextEvent_GetAlt, 2904).
+-define(utils_wxGetKeyState, 2905).
+-define(utils_wxGetMousePosition, 2906).
+-define(utils_wxGetMouseState, 2907).
+-define(utils_wxSetDetectableAutoRepeat, 2908).
+-define(utils_wxBell, 2909).
+-define(utils_wxFindMenuItemId, 2910).
+-define(utils_wxGenericFindWindowAtPoint, 2911).
+-define(utils_wxFindWindowAtPoint, 2912).
+-define(utils_wxBeginBusyCursor, 2913).
+-define(utils_wxEndBusyCursor, 2914).
+-define(utils_wxIsBusy, 2915).
+-define(utils_wxShutdown, 2916).
+-define(utils_wxShell, 2917).
+-define(utils_wxLaunchDefaultBrowser, 2918).
+-define(utils_wxGetEmailAddress, 2919).
+-define(utils_wxGetUserId, 2920).
+-define(utils_wxGetHomeDir, 2921).
+-define(utils_wxNewId, 2922).
+-define(utils_wxRegisterId, 2923).
+-define(utils_wxGetCurrentId, 2924).
+-define(utils_wxGetOsDescription, 2925).
+-define(utils_wxIsPlatformLittleEndian, 2926).
+-define(utils_wxIsPlatform64Bit, 2927).
+-define(wxPrintout_new, 2928).
+-define(wxPrintout_destruct, 2929).
+-define(wxPrintout_GetDC, 2930).
+-define(wxPrintout_GetPageSizeMM, 2931).
+-define(wxPrintout_GetPageSizePixels, 2932).
+-define(wxPrintout_GetPaperRectPixels, 2933).
+-define(wxPrintout_GetPPIPrinter, 2934).
+-define(wxPrintout_GetPPIScreen, 2935).
+-define(wxPrintout_GetTitle, 2936).
+-define(wxPrintout_IsPreview, 2937).
+-define(wxPrintout_FitThisSizeToPaper, 2938).
+-define(wxPrintout_FitThisSizeToPage, 2939).
+-define(wxPrintout_FitThisSizeToPageMargins, 2940).
+-define(wxPrintout_MapScreenSizeToPaper, 2941).
+-define(wxPrintout_MapScreenSizeToPage, 2942).
+-define(wxPrintout_MapScreenSizeToPageMargins, 2943).
+-define(wxPrintout_MapScreenSizeToDevice, 2944).
+-define(wxPrintout_GetLogicalPaperRect, 2945).
+-define(wxPrintout_GetLogicalPageRect, 2946).
+-define(wxPrintout_GetLogicalPageMarginsRect, 2947).
+-define(wxPrintout_SetLogicalOrigin, 2948).
+-define(wxPrintout_OffsetLogicalOrigin, 2949).
+-define(wxStyledTextCtrl_new_2, 2950).
+-define(wxStyledTextCtrl_new_0, 2951).
+-define(wxStyledTextCtrl_destruct, 2952).
+-define(wxStyledTextCtrl_Create, 2953).
+-define(wxStyledTextCtrl_AddText, 2954).
+-define(wxStyledTextCtrl_AddStyledText, 2955).
+-define(wxStyledTextCtrl_InsertText, 2956).
+-define(wxStyledTextCtrl_ClearAll, 2957).
+-define(wxStyledTextCtrl_ClearDocumentStyle, 2958).
+-define(wxStyledTextCtrl_GetLength, 2959).
+-define(wxStyledTextCtrl_GetCharAt, 2960).
+-define(wxStyledTextCtrl_GetCurrentPos, 2961).
+-define(wxStyledTextCtrl_GetAnchor, 2962).
+-define(wxStyledTextCtrl_GetStyleAt, 2963).
+-define(wxStyledTextCtrl_Redo, 2964).
+-define(wxStyledTextCtrl_SetUndoCollection, 2965).
+-define(wxStyledTextCtrl_SelectAll, 2966).
+-define(wxStyledTextCtrl_SetSavePoint, 2967).
+-define(wxStyledTextCtrl_GetStyledText, 2968).
+-define(wxStyledTextCtrl_CanRedo, 2969).
+-define(wxStyledTextCtrl_MarkerLineFromHandle, 2970).
+-define(wxStyledTextCtrl_MarkerDeleteHandle, 2971).
+-define(wxStyledTextCtrl_GetUndoCollection, 2972).
+-define(wxStyledTextCtrl_GetViewWhiteSpace, 2973).
+-define(wxStyledTextCtrl_SetViewWhiteSpace, 2974).
+-define(wxStyledTextCtrl_PositionFromPoint, 2975).
+-define(wxStyledTextCtrl_PositionFromPointClose, 2976).
+-define(wxStyledTextCtrl_GotoLine, 2977).
+-define(wxStyledTextCtrl_GotoPos, 2978).
+-define(wxStyledTextCtrl_SetAnchor, 2979).
+-define(wxStyledTextCtrl_GetCurLine, 2980).
+-define(wxStyledTextCtrl_GetEndStyled, 2981).
+-define(wxStyledTextCtrl_ConvertEOLs, 2982).
+-define(wxStyledTextCtrl_GetEOLMode, 2983).
+-define(wxStyledTextCtrl_SetEOLMode, 2984).
+-define(wxStyledTextCtrl_StartStyling, 2985).
+-define(wxStyledTextCtrl_SetStyling, 2986).
+-define(wxStyledTextCtrl_GetBufferedDraw, 2987).
+-define(wxStyledTextCtrl_SetBufferedDraw, 2988).
+-define(wxStyledTextCtrl_SetTabWidth, 2989).
+-define(wxStyledTextCtrl_GetTabWidth, 2990).
+-define(wxStyledTextCtrl_SetCodePage, 2991).
+-define(wxStyledTextCtrl_MarkerDefine, 2992).
+-define(wxStyledTextCtrl_MarkerSetForeground, 2993).
+-define(wxStyledTextCtrl_MarkerSetBackground, 2994).
+-define(wxStyledTextCtrl_MarkerAdd, 2995).
+-define(wxStyledTextCtrl_MarkerDelete, 2996).
+-define(wxStyledTextCtrl_MarkerDeleteAll, 2997).
+-define(wxStyledTextCtrl_MarkerGet, 2998).
+-define(wxStyledTextCtrl_MarkerNext, 2999).
+-define(wxStyledTextCtrl_MarkerPrevious, 3000).
+-define(wxStyledTextCtrl_MarkerDefineBitmap, 3001).
+-define(wxStyledTextCtrl_MarkerAddSet, 3002).
+-define(wxStyledTextCtrl_MarkerSetAlpha, 3003).
+-define(wxStyledTextCtrl_SetMarginType, 3004).
+-define(wxStyledTextCtrl_GetMarginType, 3005).
+-define(wxStyledTextCtrl_SetMarginWidth, 3006).
+-define(wxStyledTextCtrl_GetMarginWidth, 3007).
+-define(wxStyledTextCtrl_SetMarginMask, 3008).
+-define(wxStyledTextCtrl_GetMarginMask, 3009).
+-define(wxStyledTextCtrl_SetMarginSensitive, 3010).
+-define(wxStyledTextCtrl_GetMarginSensitive, 3011).
+-define(wxStyledTextCtrl_StyleClearAll, 3012).
+-define(wxStyledTextCtrl_StyleSetForeground, 3013).
+-define(wxStyledTextCtrl_StyleSetBackground, 3014).
+-define(wxStyledTextCtrl_StyleSetBold, 3015).
+-define(wxStyledTextCtrl_StyleSetItalic, 3016).
+-define(wxStyledTextCtrl_StyleSetSize, 3017).
+-define(wxStyledTextCtrl_StyleSetFaceName, 3018).
+-define(wxStyledTextCtrl_StyleSetEOLFilled, 3019).
+-define(wxStyledTextCtrl_StyleResetDefault, 3020).
+-define(wxStyledTextCtrl_StyleSetUnderline, 3021).
+-define(wxStyledTextCtrl_StyleSetCase, 3022).
+-define(wxStyledTextCtrl_StyleSetHotSpot, 3023).
+-define(wxStyledTextCtrl_SetSelForeground, 3024).
+-define(wxStyledTextCtrl_SetSelBackground, 3025).
+-define(wxStyledTextCtrl_GetSelAlpha, 3026).
+-define(wxStyledTextCtrl_SetSelAlpha, 3027).
+-define(wxStyledTextCtrl_SetCaretForeground, 3028).
+-define(wxStyledTextCtrl_CmdKeyAssign, 3029).
+-define(wxStyledTextCtrl_CmdKeyClear, 3030).
+-define(wxStyledTextCtrl_CmdKeyClearAll, 3031).
+-define(wxStyledTextCtrl_SetStyleBytes, 3032).
+-define(wxStyledTextCtrl_StyleSetVisible, 3033).
+-define(wxStyledTextCtrl_GetCaretPeriod, 3034).
+-define(wxStyledTextCtrl_SetCaretPeriod, 3035).
+-define(wxStyledTextCtrl_SetWordChars, 3036).
+-define(wxStyledTextCtrl_BeginUndoAction, 3037).
+-define(wxStyledTextCtrl_EndUndoAction, 3038).
+-define(wxStyledTextCtrl_IndicatorSetStyle, 3039).
+-define(wxStyledTextCtrl_IndicatorGetStyle, 3040).
+-define(wxStyledTextCtrl_IndicatorSetForeground, 3041).
+-define(wxStyledTextCtrl_IndicatorGetForeground, 3042).
+-define(wxStyledTextCtrl_SetWhitespaceForeground, 3043).
+-define(wxStyledTextCtrl_SetWhitespaceBackground, 3044).
+-define(wxStyledTextCtrl_GetStyleBits, 3045).
+-define(wxStyledTextCtrl_SetLineState, 3046).
+-define(wxStyledTextCtrl_GetLineState, 3047).
+-define(wxStyledTextCtrl_GetMaxLineState, 3048).
+-define(wxStyledTextCtrl_GetCaretLineVisible, 3049).
+-define(wxStyledTextCtrl_SetCaretLineVisible, 3050).
+-define(wxStyledTextCtrl_GetCaretLineBackground, 3051).
+-define(wxStyledTextCtrl_SetCaretLineBackground, 3052).
+-define(wxStyledTextCtrl_AutoCompShow, 3053).
+-define(wxStyledTextCtrl_AutoCompCancel, 3054).
+-define(wxStyledTextCtrl_AutoCompActive, 3055).
+-define(wxStyledTextCtrl_AutoCompPosStart, 3056).
+-define(wxStyledTextCtrl_AutoCompComplete, 3057).
+-define(wxStyledTextCtrl_AutoCompStops, 3058).
+-define(wxStyledTextCtrl_AutoCompSetSeparator, 3059).
+-define(wxStyledTextCtrl_AutoCompGetSeparator, 3060).
+-define(wxStyledTextCtrl_AutoCompSelect, 3061).
+-define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3062).
+-define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3063).
+-define(wxStyledTextCtrl_AutoCompSetFillUps, 3064).
+-define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3065).
+-define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3066).
+-define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3067).
+-define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3068).
+-define(wxStyledTextCtrl_UserListShow, 3069).
+-define(wxStyledTextCtrl_AutoCompSetAutoHide, 3070).
+-define(wxStyledTextCtrl_AutoCompGetAutoHide, 3071).
+-define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3072).
+-define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3073).
+-define(wxStyledTextCtrl_RegisterImage, 3074).
+-define(wxStyledTextCtrl_ClearRegisteredImages, 3075).
+-define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3076).
+-define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3077).
+-define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3078).
+-define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3079).
+-define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3080).
+-define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3081).
+-define(wxStyledTextCtrl_SetIndent, 3082).
+-define(wxStyledTextCtrl_GetIndent, 3083).
+-define(wxStyledTextCtrl_SetUseTabs, 3084).
+-define(wxStyledTextCtrl_GetUseTabs, 3085).
+-define(wxStyledTextCtrl_SetLineIndentation, 3086).
+-define(wxStyledTextCtrl_GetLineIndentation, 3087).
+-define(wxStyledTextCtrl_GetLineIndentPosition, 3088).
+-define(wxStyledTextCtrl_GetColumn, 3089).
+-define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3090).
+-define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3091).
+-define(wxStyledTextCtrl_SetIndentationGuides, 3092).
+-define(wxStyledTextCtrl_GetIndentationGuides, 3093).
+-define(wxStyledTextCtrl_SetHighlightGuide, 3094).
+-define(wxStyledTextCtrl_GetHighlightGuide, 3095).
+-define(wxStyledTextCtrl_GetLineEndPosition, 3096).
+-define(wxStyledTextCtrl_GetCodePage, 3097).
+-define(wxStyledTextCtrl_GetCaretForeground, 3098).
+-define(wxStyledTextCtrl_GetReadOnly, 3099).
+-define(wxStyledTextCtrl_SetCurrentPos, 3100).
+-define(wxStyledTextCtrl_SetSelectionStart, 3101).
+-define(wxStyledTextCtrl_GetSelectionStart, 3102).
+-define(wxStyledTextCtrl_SetSelectionEnd, 3103).
+-define(wxStyledTextCtrl_GetSelectionEnd, 3104).
+-define(wxStyledTextCtrl_SetPrintMagnification, 3105).
+-define(wxStyledTextCtrl_GetPrintMagnification, 3106).
+-define(wxStyledTextCtrl_SetPrintColourMode, 3107).
+-define(wxStyledTextCtrl_GetPrintColourMode, 3108).
+-define(wxStyledTextCtrl_FindText, 3109).
+-define(wxStyledTextCtrl_FormatRange, 3110).
+-define(wxStyledTextCtrl_GetFirstVisibleLine, 3111).
+-define(wxStyledTextCtrl_GetLine, 3112).
+-define(wxStyledTextCtrl_GetLineCount, 3113).
+-define(wxStyledTextCtrl_SetMarginLeft, 3114).
+-define(wxStyledTextCtrl_GetMarginLeft, 3115).
+-define(wxStyledTextCtrl_SetMarginRight, 3116).
+-define(wxStyledTextCtrl_GetMarginRight, 3117).
+-define(wxStyledTextCtrl_GetModify, 3118).
+-define(wxStyledTextCtrl_SetSelection, 3119).
+-define(wxStyledTextCtrl_GetSelectedText, 3120).
+-define(wxStyledTextCtrl_GetTextRange, 3121).
+-define(wxStyledTextCtrl_HideSelection, 3122).
+-define(wxStyledTextCtrl_LineFromPosition, 3123).
+-define(wxStyledTextCtrl_PositionFromLine, 3124).
+-define(wxStyledTextCtrl_LineScroll, 3125).
+-define(wxStyledTextCtrl_EnsureCaretVisible, 3126).
+-define(wxStyledTextCtrl_ReplaceSelection, 3127).
+-define(wxStyledTextCtrl_SetReadOnly, 3128).
+-define(wxStyledTextCtrl_CanPaste, 3129).
+-define(wxStyledTextCtrl_CanUndo, 3130).
+-define(wxStyledTextCtrl_EmptyUndoBuffer, 3131).
+-define(wxStyledTextCtrl_Undo, 3132).
+-define(wxStyledTextCtrl_Cut, 3133).
+-define(wxStyledTextCtrl_Copy, 3134).
+-define(wxStyledTextCtrl_Paste, 3135).
+-define(wxStyledTextCtrl_Clear, 3136).
+-define(wxStyledTextCtrl_SetText, 3137).
+-define(wxStyledTextCtrl_GetText, 3138).
+-define(wxStyledTextCtrl_GetTextLength, 3139).
+-define(wxStyledTextCtrl_GetOvertype, 3140).
+-define(wxStyledTextCtrl_SetCaretWidth, 3141).
+-define(wxStyledTextCtrl_GetCaretWidth, 3142).
+-define(wxStyledTextCtrl_SetTargetStart, 3143).
+-define(wxStyledTextCtrl_GetTargetStart, 3144).
+-define(wxStyledTextCtrl_SetTargetEnd, 3145).
+-define(wxStyledTextCtrl_GetTargetEnd, 3146).
+-define(wxStyledTextCtrl_ReplaceTarget, 3147).
+-define(wxStyledTextCtrl_SearchInTarget, 3148).
+-define(wxStyledTextCtrl_SetSearchFlags, 3149).
+-define(wxStyledTextCtrl_GetSearchFlags, 3150).
+-define(wxStyledTextCtrl_CallTipShow, 3151).
+-define(wxStyledTextCtrl_CallTipCancel, 3152).
+-define(wxStyledTextCtrl_CallTipActive, 3153).
+-define(wxStyledTextCtrl_CallTipPosAtStart, 3154).
+-define(wxStyledTextCtrl_CallTipSetHighlight, 3155).
+-define(wxStyledTextCtrl_CallTipSetBackground, 3156).
+-define(wxStyledTextCtrl_CallTipSetForeground, 3157).
+-define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3158).
+-define(wxStyledTextCtrl_CallTipUseStyle, 3159).
+-define(wxStyledTextCtrl_VisibleFromDocLine, 3160).
+-define(wxStyledTextCtrl_DocLineFromVisible, 3161).
+-define(wxStyledTextCtrl_WrapCount, 3162).
+-define(wxStyledTextCtrl_SetFoldLevel, 3163).
+-define(wxStyledTextCtrl_GetFoldLevel, 3164).
+-define(wxStyledTextCtrl_GetLastChild, 3165).
+-define(wxStyledTextCtrl_GetFoldParent, 3166).
+-define(wxStyledTextCtrl_ShowLines, 3167).
+-define(wxStyledTextCtrl_HideLines, 3168).
+-define(wxStyledTextCtrl_GetLineVisible, 3169).
+-define(wxStyledTextCtrl_SetFoldExpanded, 3170).
+-define(wxStyledTextCtrl_GetFoldExpanded, 3171).
+-define(wxStyledTextCtrl_ToggleFold, 3172).
+-define(wxStyledTextCtrl_EnsureVisible, 3173).
+-define(wxStyledTextCtrl_SetFoldFlags, 3174).
+-define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3175).
+-define(wxStyledTextCtrl_SetTabIndents, 3176).
+-define(wxStyledTextCtrl_GetTabIndents, 3177).
+-define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3178).
+-define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3179).
+-define(wxStyledTextCtrl_SetMouseDwellTime, 3180).
+-define(wxStyledTextCtrl_GetMouseDwellTime, 3181).
+-define(wxStyledTextCtrl_WordStartPosition, 3182).
+-define(wxStyledTextCtrl_WordEndPosition, 3183).
+-define(wxStyledTextCtrl_SetWrapMode, 3184).
+-define(wxStyledTextCtrl_GetWrapMode, 3185).
+-define(wxStyledTextCtrl_SetWrapVisualFlags, 3186).
+-define(wxStyledTextCtrl_GetWrapVisualFlags, 3187).
+-define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3188).
+-define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3189).
+-define(wxStyledTextCtrl_SetWrapStartIndent, 3190).
+-define(wxStyledTextCtrl_GetWrapStartIndent, 3191).
+-define(wxStyledTextCtrl_SetLayoutCache, 3192).
+-define(wxStyledTextCtrl_GetLayoutCache, 3193).
+-define(wxStyledTextCtrl_SetScrollWidth, 3194).
+-define(wxStyledTextCtrl_GetScrollWidth, 3195).
+-define(wxStyledTextCtrl_TextWidth, 3196).
+-define(wxStyledTextCtrl_GetEndAtLastLine, 3197).
+-define(wxStyledTextCtrl_TextHeight, 3198).
+-define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3199).
+-define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3200).
+-define(wxStyledTextCtrl_AppendText, 3201).
+-define(wxStyledTextCtrl_GetTwoPhaseDraw, 3202).
+-define(wxStyledTextCtrl_SetTwoPhaseDraw, 3203).
+-define(wxStyledTextCtrl_TargetFromSelection, 3204).
+-define(wxStyledTextCtrl_LinesJoin, 3205).
+-define(wxStyledTextCtrl_LinesSplit, 3206).
+-define(wxStyledTextCtrl_SetFoldMarginColour, 3207).
+-define(wxStyledTextCtrl_SetFoldMarginHiColour, 3208).
+-define(wxStyledTextCtrl_LineDown, 3209).
+-define(wxStyledTextCtrl_LineDownExtend, 3210).
+-define(wxStyledTextCtrl_LineUp, 3211).
+-define(wxStyledTextCtrl_LineUpExtend, 3212).
+-define(wxStyledTextCtrl_CharLeft, 3213).
+-define(wxStyledTextCtrl_CharLeftExtend, 3214).
+-define(wxStyledTextCtrl_CharRight, 3215).
+-define(wxStyledTextCtrl_CharRightExtend, 3216).
+-define(wxStyledTextCtrl_WordLeft, 3217).
+-define(wxStyledTextCtrl_WordLeftExtend, 3218).
+-define(wxStyledTextCtrl_WordRight, 3219).
+-define(wxStyledTextCtrl_WordRightExtend, 3220).
+-define(wxStyledTextCtrl_Home, 3221).
+-define(wxStyledTextCtrl_HomeExtend, 3222).
+-define(wxStyledTextCtrl_LineEnd, 3223).
+-define(wxStyledTextCtrl_LineEndExtend, 3224).
+-define(wxStyledTextCtrl_DocumentStart, 3225).
+-define(wxStyledTextCtrl_DocumentStartExtend, 3226).
+-define(wxStyledTextCtrl_DocumentEnd, 3227).
+-define(wxStyledTextCtrl_DocumentEndExtend, 3228).
+-define(wxStyledTextCtrl_PageUp, 3229).
+-define(wxStyledTextCtrl_PageUpExtend, 3230).
+-define(wxStyledTextCtrl_PageDown, 3231).
+-define(wxStyledTextCtrl_PageDownExtend, 3232).
+-define(wxStyledTextCtrl_EditToggleOvertype, 3233).
+-define(wxStyledTextCtrl_Cancel, 3234).
+-define(wxStyledTextCtrl_DeleteBack, 3235).
+-define(wxStyledTextCtrl_Tab, 3236).
+-define(wxStyledTextCtrl_BackTab, 3237).
+-define(wxStyledTextCtrl_NewLine, 3238).
+-define(wxStyledTextCtrl_FormFeed, 3239).
+-define(wxStyledTextCtrl_VCHome, 3240).
+-define(wxStyledTextCtrl_VCHomeExtend, 3241).
+-define(wxStyledTextCtrl_ZoomIn, 3242).
+-define(wxStyledTextCtrl_ZoomOut, 3243).
+-define(wxStyledTextCtrl_DelWordLeft, 3244).
+-define(wxStyledTextCtrl_DelWordRight, 3245).
+-define(wxStyledTextCtrl_LineCut, 3246).
+-define(wxStyledTextCtrl_LineDelete, 3247).
+-define(wxStyledTextCtrl_LineTranspose, 3248).
+-define(wxStyledTextCtrl_LineDuplicate, 3249).
+-define(wxStyledTextCtrl_LowerCase, 3250).
+-define(wxStyledTextCtrl_UpperCase, 3251).
+-define(wxStyledTextCtrl_LineScrollDown, 3252).
+-define(wxStyledTextCtrl_LineScrollUp, 3253).
+-define(wxStyledTextCtrl_DeleteBackNotLine, 3254).
+-define(wxStyledTextCtrl_HomeDisplay, 3255).
+-define(wxStyledTextCtrl_HomeDisplayExtend, 3256).
+-define(wxStyledTextCtrl_LineEndDisplay, 3257).
+-define(wxStyledTextCtrl_LineEndDisplayExtend, 3258).
+-define(wxStyledTextCtrl_HomeWrapExtend, 3259).
+-define(wxStyledTextCtrl_LineEndWrap, 3260).
+-define(wxStyledTextCtrl_LineEndWrapExtend, 3261).
+-define(wxStyledTextCtrl_VCHomeWrap, 3262).
+-define(wxStyledTextCtrl_VCHomeWrapExtend, 3263).
+-define(wxStyledTextCtrl_LineCopy, 3264).
+-define(wxStyledTextCtrl_MoveCaretInsideView, 3265).
+-define(wxStyledTextCtrl_LineLength, 3266).
+-define(wxStyledTextCtrl_BraceHighlight, 3267).
+-define(wxStyledTextCtrl_BraceBadLight, 3268).
+-define(wxStyledTextCtrl_BraceMatch, 3269).
+-define(wxStyledTextCtrl_GetViewEOL, 3270).
+-define(wxStyledTextCtrl_SetViewEOL, 3271).
+-define(wxStyledTextCtrl_SetModEventMask, 3272).
+-define(wxStyledTextCtrl_GetEdgeColumn, 3273).
+-define(wxStyledTextCtrl_SetEdgeColumn, 3274).
+-define(wxStyledTextCtrl_SetEdgeMode, 3275).
+-define(wxStyledTextCtrl_GetEdgeMode, 3276).
+-define(wxStyledTextCtrl_GetEdgeColour, 3277).
+-define(wxStyledTextCtrl_SetEdgeColour, 3278).
+-define(wxStyledTextCtrl_SearchAnchor, 3279).
+-define(wxStyledTextCtrl_SearchNext, 3280).
+-define(wxStyledTextCtrl_SearchPrev, 3281).
+-define(wxStyledTextCtrl_LinesOnScreen, 3282).
+-define(wxStyledTextCtrl_UsePopUp, 3283).
+-define(wxStyledTextCtrl_SelectionIsRectangle, 3284).
+-define(wxStyledTextCtrl_SetZoom, 3285).
+-define(wxStyledTextCtrl_GetZoom, 3286).
+-define(wxStyledTextCtrl_GetModEventMask, 3287).
+-define(wxStyledTextCtrl_SetSTCFocus, 3288).
+-define(wxStyledTextCtrl_GetSTCFocus, 3289).
+-define(wxStyledTextCtrl_SetStatus, 3290).
+-define(wxStyledTextCtrl_GetStatus, 3291).
+-define(wxStyledTextCtrl_SetMouseDownCaptures, 3292).
+-define(wxStyledTextCtrl_GetMouseDownCaptures, 3293).
+-define(wxStyledTextCtrl_SetSTCCursor, 3294).
+-define(wxStyledTextCtrl_GetSTCCursor, 3295).
+-define(wxStyledTextCtrl_SetControlCharSymbol, 3296).
+-define(wxStyledTextCtrl_GetControlCharSymbol, 3297).
+-define(wxStyledTextCtrl_WordPartLeft, 3298).
+-define(wxStyledTextCtrl_WordPartLeftExtend, 3299).
+-define(wxStyledTextCtrl_WordPartRight, 3300).
+-define(wxStyledTextCtrl_WordPartRightExtend, 3301).
+-define(wxStyledTextCtrl_SetVisiblePolicy, 3302).
+-define(wxStyledTextCtrl_DelLineLeft, 3303).
+-define(wxStyledTextCtrl_DelLineRight, 3304).
+-define(wxStyledTextCtrl_GetXOffset, 3305).
+-define(wxStyledTextCtrl_ChooseCaretX, 3306).
+-define(wxStyledTextCtrl_SetXCaretPolicy, 3307).
+-define(wxStyledTextCtrl_SetYCaretPolicy, 3308).
+-define(wxStyledTextCtrl_GetPrintWrapMode, 3309).
+-define(wxStyledTextCtrl_SetHotspotActiveForeground, 3310).
+-define(wxStyledTextCtrl_SetHotspotActiveBackground, 3311).
+-define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3312).
+-define(wxStyledTextCtrl_SetHotspotSingleLine, 3313).
+-define(wxStyledTextCtrl_ParaDownExtend, 3314).
+-define(wxStyledTextCtrl_ParaUp, 3315).
+-define(wxStyledTextCtrl_ParaUpExtend, 3316).
+-define(wxStyledTextCtrl_PositionBefore, 3317).
+-define(wxStyledTextCtrl_PositionAfter, 3318).
+-define(wxStyledTextCtrl_CopyRange, 3319).
+-define(wxStyledTextCtrl_CopyText, 3320).
+-define(wxStyledTextCtrl_SetSelectionMode, 3321).
+-define(wxStyledTextCtrl_GetSelectionMode, 3322).
+-define(wxStyledTextCtrl_LineDownRectExtend, 3323).
+-define(wxStyledTextCtrl_LineUpRectExtend, 3324).
+-define(wxStyledTextCtrl_CharLeftRectExtend, 3325).
+-define(wxStyledTextCtrl_CharRightRectExtend, 3326).
+-define(wxStyledTextCtrl_HomeRectExtend, 3327).
+-define(wxStyledTextCtrl_VCHomeRectExtend, 3328).
+-define(wxStyledTextCtrl_LineEndRectExtend, 3329).
+-define(wxStyledTextCtrl_PageUpRectExtend, 3330).
+-define(wxStyledTextCtrl_PageDownRectExtend, 3331).
+-define(wxStyledTextCtrl_StutteredPageUp, 3332).
+-define(wxStyledTextCtrl_StutteredPageUpExtend, 3333).
+-define(wxStyledTextCtrl_StutteredPageDown, 3334).
+-define(wxStyledTextCtrl_StutteredPageDownExtend, 3335).
+-define(wxStyledTextCtrl_WordLeftEnd, 3336).
+-define(wxStyledTextCtrl_WordLeftEndExtend, 3337).
+-define(wxStyledTextCtrl_WordRightEnd, 3338).
+-define(wxStyledTextCtrl_WordRightEndExtend, 3339).
+-define(wxStyledTextCtrl_SetWhitespaceChars, 3340).
+-define(wxStyledTextCtrl_SetCharsDefault, 3341).
+-define(wxStyledTextCtrl_AutoCompGetCurrent, 3342).
+-define(wxStyledTextCtrl_Allocate, 3343).
+-define(wxStyledTextCtrl_FindColumn, 3344).
+-define(wxStyledTextCtrl_GetCaretSticky, 3345).
+-define(wxStyledTextCtrl_SetCaretSticky, 3346).
+-define(wxStyledTextCtrl_ToggleCaretSticky, 3347).
+-define(wxStyledTextCtrl_SetPasteConvertEndings, 3348).
+-define(wxStyledTextCtrl_GetPasteConvertEndings, 3349).
+-define(wxStyledTextCtrl_SelectionDuplicate, 3350).
+-define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3351).
+-define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3352).
+-define(wxStyledTextCtrl_StartRecord, 3353).
+-define(wxStyledTextCtrl_StopRecord, 3354).
+-define(wxStyledTextCtrl_SetLexer, 3355).
+-define(wxStyledTextCtrl_GetLexer, 3356).
+-define(wxStyledTextCtrl_Colourise, 3357).
+-define(wxStyledTextCtrl_SetProperty, 3358).
+-define(wxStyledTextCtrl_SetKeyWords, 3359).
+-define(wxStyledTextCtrl_SetLexerLanguage, 3360).
+-define(wxStyledTextCtrl_GetProperty, 3361).
+-define(wxStyledTextCtrl_GetStyleBitsNeeded, 3362).
+-define(wxStyledTextCtrl_GetCurrentLine, 3363).
+-define(wxStyledTextCtrl_StyleSetSpec, 3364).
+-define(wxStyledTextCtrl_StyleSetFont, 3365).
+-define(wxStyledTextCtrl_StyleSetFontAttr, 3366).
+-define(wxStyledTextCtrl_StyleSetCharacterSet, 3367).
+-define(wxStyledTextCtrl_StyleSetFontEncoding, 3368).
+-define(wxStyledTextCtrl_CmdKeyExecute, 3369).
+-define(wxStyledTextCtrl_SetMargins, 3370).
+-define(wxStyledTextCtrl_GetSelection, 3371).
+-define(wxStyledTextCtrl_PointFromPosition, 3372).
+-define(wxStyledTextCtrl_ScrollToLine, 3373).
+-define(wxStyledTextCtrl_ScrollToColumn, 3374).
+-define(wxStyledTextCtrl_SetVScrollBar, 3375).
+-define(wxStyledTextCtrl_SetHScrollBar, 3376).
+-define(wxStyledTextCtrl_GetLastKeydownProcessed, 3377).
+-define(wxStyledTextCtrl_SetLastKeydownProcessed, 3378).
+-define(wxStyledTextCtrl_SaveFile, 3379).
+-define(wxStyledTextCtrl_LoadFile, 3380).
+-define(wxStyledTextCtrl_DoDragOver, 3381).
+-define(wxStyledTextCtrl_DoDropText, 3382).
+-define(wxStyledTextCtrl_GetUseAntiAliasing, 3383).
+-define(wxStyledTextCtrl_AddTextRaw, 3384).
+-define(wxStyledTextCtrl_InsertTextRaw, 3385).
+-define(wxStyledTextCtrl_GetCurLineRaw, 3386).
+-define(wxStyledTextCtrl_GetLineRaw, 3387).
+-define(wxStyledTextCtrl_GetSelectedTextRaw, 3388).
+-define(wxStyledTextCtrl_GetTextRangeRaw, 3389).
+-define(wxStyledTextCtrl_SetTextRaw, 3390).
+-define(wxStyledTextCtrl_GetTextRaw, 3391).
+-define(wxStyledTextCtrl_AppendTextRaw, 3392).
+-define(wxArtProvider_GetBitmap, 3393).
+-define(wxArtProvider_GetIcon, 3394).
+-define(wxTreeEvent_GetKeyCode, 3395).
+-define(wxTreeEvent_GetItem, 3396).
+-define(wxTreeEvent_GetKeyEvent, 3397).
+-define(wxTreeEvent_GetLabel, 3398).
+-define(wxTreeEvent_GetOldItem, 3399).
+-define(wxTreeEvent_GetPoint, 3400).
+-define(wxTreeEvent_IsEditCancelled, 3401).
+-define(wxTreeEvent_SetToolTip, 3402).
+-define(wxNotebookEvent_GetOldSelection, 3403).
+-define(wxNotebookEvent_GetSelection, 3404).
+-define(wxNotebookEvent_SetOldSelection, 3405).
+-define(wxNotebookEvent_SetSelection, 3406).
+-define(wxFileDataObject_new, 3407).
+-define(wxFileDataObject_AddFile, 3408).
+-define(wxFileDataObject_GetFilenames, 3409).
+-define(wxFileDataObject_destroy, 3410).
+-define(wxTextDataObject_new, 3411).
+-define(wxTextDataObject_GetTextLength, 3412).
+-define(wxTextDataObject_GetText, 3413).
+-define(wxTextDataObject_SetText, 3414).
+-define(wxTextDataObject_destroy, 3415).
+-define(wxBitmapDataObject_new_1_1, 3416).
+-define(wxBitmapDataObject_new_1_0, 3417).
+-define(wxBitmapDataObject_GetBitmap, 3418).
+-define(wxBitmapDataObject_SetBitmap, 3419).
+-define(wxBitmapDataObject_destroy, 3420).
+-define(wxClipboard_new, 3422).
+-define(wxClipboard_destruct, 3423).
+-define(wxClipboard_AddData, 3424).
+-define(wxClipboard_Clear, 3425).
+-define(wxClipboard_Close, 3426).
+-define(wxClipboard_Flush, 3427).
+-define(wxClipboard_GetData, 3428).
+-define(wxClipboard_IsOpened, 3429).
+-define(wxClipboard_Open, 3430).
+-define(wxClipboard_SetData, 3431).
+-define(wxClipboard_UsePrimarySelection, 3433).
+-define(wxClipboard_IsSupported, 3434).
+-define(wxClipboard_Get, 3435).
+-define(wxSpinEvent_GetPosition, 3436).
+-define(wxSpinEvent_SetPosition, 3437).
+-define(wxSplitterWindow_new_0, 3438).
+-define(wxSplitterWindow_new_2, 3439).
+-define(wxSplitterWindow_destruct, 3440).
+-define(wxSplitterWindow_Create, 3441).
+-define(wxSplitterWindow_GetMinimumPaneSize, 3442).
+-define(wxSplitterWindow_GetSashGravity, 3443).
+-define(wxSplitterWindow_GetSashPosition, 3444).
+-define(wxSplitterWindow_GetSplitMode, 3445).
+-define(wxSplitterWindow_GetWindow1, 3446).
+-define(wxSplitterWindow_GetWindow2, 3447).
+-define(wxSplitterWindow_Initialize, 3448).
+-define(wxSplitterWindow_IsSplit, 3449).
+-define(wxSplitterWindow_ReplaceWindow, 3450).
+-define(wxSplitterWindow_SetSashGravity, 3451).
+-define(wxSplitterWindow_SetSashPosition, 3452).
+-define(wxSplitterWindow_SetSashSize, 3453).
+-define(wxSplitterWindow_SetMinimumPaneSize, 3454).
+-define(wxSplitterWindow_SetSplitMode, 3455).
+-define(wxSplitterWindow_SplitHorizontally, 3456).
+-define(wxSplitterWindow_SplitVertically, 3457).
+-define(wxSplitterWindow_Unsplit, 3458).
+-define(wxSplitterWindow_UpdateSize, 3459).
+-define(wxSplitterEvent_GetSashPosition, 3460).
+-define(wxSplitterEvent_GetX, 3461).
+-define(wxSplitterEvent_GetY, 3462).
+-define(wxSplitterEvent_GetWindowBeingRemoved, 3463).
+-define(wxSplitterEvent_SetSashPosition, 3464).
+-define(wxHtmlWindow_new_0, 3465).
+-define(wxHtmlWindow_new_2, 3466).
+-define(wxHtmlWindow_AppendToPage, 3467).
+-define(wxHtmlWindow_GetOpenedAnchor, 3468).
+-define(wxHtmlWindow_GetOpenedPage, 3469).
+-define(wxHtmlWindow_GetOpenedPageTitle, 3470).
+-define(wxHtmlWindow_GetRelatedFrame, 3471).
+-define(wxHtmlWindow_HistoryBack, 3472).
+-define(wxHtmlWindow_HistoryCanBack, 3473).
+-define(wxHtmlWindow_HistoryCanForward, 3474).
+-define(wxHtmlWindow_HistoryClear, 3475).
+-define(wxHtmlWindow_HistoryForward, 3476).
+-define(wxHtmlWindow_LoadFile, 3477).
+-define(wxHtmlWindow_LoadPage, 3478).
+-define(wxHtmlWindow_SelectAll, 3479).
+-define(wxHtmlWindow_SelectionToText, 3480).
+-define(wxHtmlWindow_SelectLine, 3481).
+-define(wxHtmlWindow_SelectWord, 3482).
+-define(wxHtmlWindow_SetBorders, 3483).
+-define(wxHtmlWindow_SetFonts, 3484).
+-define(wxHtmlWindow_SetPage, 3485).
+-define(wxHtmlWindow_SetRelatedFrame, 3486).
+-define(wxHtmlWindow_SetRelatedStatusBar, 3487).
+-define(wxHtmlWindow_ToText, 3488).
+-define(wxHtmlWindow_destroy, 3489).
+-define(wxHtmlLinkEvent_GetLinkInfo, 3490).
+-define(wxSystemSettings_GetColour, 3491).
+-define(wxSystemSettings_GetFont, 3492).
+-define(wxSystemSettings_GetMetric, 3493).
+-define(wxSystemSettings_GetScreenType, 3494).
+-define(wxSystemOptions_GetOption, 3495).
+-define(wxSystemOptions_GetOptionInt, 3496).
+-define(wxSystemOptions_HasOption, 3497).
+-define(wxSystemOptions_IsFalse, 3498).
+-define(wxSystemOptions_SetOption_2_1, 3499).
+-define(wxSystemOptions_SetOption_2_0, 3500).
+-define(wxAuiNotebookEvent_SetSelection, 3501).
+-define(wxAuiNotebookEvent_GetSelection, 3502).
+-define(wxAuiNotebookEvent_SetOldSelection, 3503).
+-define(wxAuiNotebookEvent_GetOldSelection, 3504).
+-define(wxAuiNotebookEvent_SetDragSource, 3505).
+-define(wxAuiNotebookEvent_GetDragSource, 3506).
+-define(wxAuiManagerEvent_SetManager, 3507).
+-define(wxAuiManagerEvent_GetManager, 3508).
+-define(wxAuiManagerEvent_SetPane, 3509).
+-define(wxAuiManagerEvent_GetPane, 3510).
+-define(wxAuiManagerEvent_SetButton, 3511).
+-define(wxAuiManagerEvent_GetButton, 3512).
+-define(wxAuiManagerEvent_SetDC, 3513).
+-define(wxAuiManagerEvent_GetDC, 3514).
+-define(wxAuiManagerEvent_Veto, 3515).
+-define(wxAuiManagerEvent_GetVeto, 3516).
+-define(wxAuiManagerEvent_SetCanVeto, 3517).
+-define(wxAuiManagerEvent_CanVeto, 3518).
+-define(wxLogNull_new, 3519).
+-define(wxLogNull_destroy, 3520).
+-define(wxTaskBarIcon_new, 3521).
+-define(wxTaskBarIcon_destruct, 3522).
+-define(wxTaskBarIcon_PopupMenu, 3523).
+-define(wxTaskBarIcon_RemoveIcon, 3524).
+-define(wxTaskBarIcon_SetIcon, 3525).
diff --git a/lib/wx/test/wx_class_SUITE.erl b/lib/wx/test/wx_class_SUITE.erl
index 7c3eda0be1..0e151ccc9b 100644
--- a/lib/wx/test/wx_class_SUITE.erl
+++ b/lib/wx/test/wx_class_SUITE.erl
@@ -50,7 +50,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[calendarCtrl, treeCtrl, notebook, staticBoxSizer,
clipboard, helpFrame, htmlWindow, listCtrlSort, listCtrlVirtual,
- radioBox, systemSettings, taskBarIcon].
+ radioBox, systemSettings, taskBarIcon, toolbar].
groups() ->
[].
@@ -493,3 +493,20 @@ taskBarIcon(Config) ->
wxTaskBarIcon:connect(TBI, taskbar_left_down, [{callback, fun(Ev,_) -> io:format("Left clicked: ~p~n",[Ev]) end}]),
wxTaskBarIcon:connect(TBI, taskbar_right_down, [{callback,fun(Ev,_) -> io:format("Right clicked: ~p~n",[Ev]) end}]),
wx_test_lib:wx_destroy(Frame,Config).
+
+toolbar(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+toolbar(Config) ->
+ Wx = wx:new(),
+ Frame = wxFrame:new(Wx, ?wxID_ANY, "Frame"),
+ TB = wxFrame:createToolBar(Frame),
+ wxToolBar:addTool(TB, 747, "PressMe", wxArtProvider:getBitmap("wxART_COPY", [{size, {16,16}}]),
+ [{shortHelp, "Press Me"}]),
+
+ Add = fun(#wx{}, _) ->
+ wxToolBar:addTool(TB, -1, "Added", wxArtProvider:getBitmap("wxART_TICK_MARK", [{size, {16,16}}]),
+ [{shortHelp, "Test 2 popup text"}])
+ end,
+
+ wxFrame:connect(Frame, command_menu_selected, [{callback, Add}, {id, 747}]),
+ wxFrame:show(Frame),
+ wx_test_lib:wx_destroy(Frame,Config).
diff --git a/lib/wx/test/wx_event_SUITE.erl b/lib/wx/test/wx_event_SUITE.erl
index 53a2ee7d7b..f19adb430d 100644
--- a/lib/wx/test/wx_event_SUITE.erl
+++ b/lib/wx/test/wx_event_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -47,7 +47,9 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[connect, disconnect, connect_msg_20, connect_cb_20,
- mouse_on_grid, spin_event, connect_in_callback, recursive].
+ mouse_on_grid, spin_event, connect_in_callback, recursive,
+ char_events
+ ].
groups() ->
[].
@@ -398,3 +400,23 @@ recursive(Config) ->
wx_test_lib:flush(),
wx_test_lib:wx_destroy(Frame, Config).
+
+
+char_events(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+char_events(Config) ->
+ Wx = wx:new(),
+ Frame = wxFrame:new(Wx, ?wxID_ANY, "Press any key"),
+ Panel = wxPanel:new(Frame, []),
+ wxFrame:connect(Frame, enter_window, [{callback, fun(_,_) ->
+ io:format("Set focus~n"),
+ wxWindow:setFocus(Panel)
+ end}]),
+ KeyEvent = fun(Ev,Obj) -> io:format("Got ~p~n",[Ev]), wxEvent:skip(Obj) end,
+ [wxWindow:connect(Panel, Types, [{callback,KeyEvent}])
+ || Types <- [key_down, key_up, char]],
+ wxWindow:connect(Frame, char_hook, [{callback,KeyEvent}]),
+
+ wxFrame:show(Frame),
+ wx_test_lib:flush(),
+
+ wx_test_lib:wx_destroy(Frame, Config).
diff --git a/lib/wx/vsn.mk b/lib/wx/vsn.mk
index 1c406ccec6..869ed99f16 100644
--- a/lib/wx/vsn.mk
+++ b/lib/wx/vsn.mk
@@ -1 +1 @@
-WX_VSN = 1.0
+WX_VSN = 1.1
diff --git a/lib/xmerl/doc/src/notes.xml b/lib/xmerl/doc/src/notes.xml
index 90b633d1eb..a126f476bb 100644
--- a/lib/xmerl/doc/src/notes.xml
+++ b/lib/xmerl/doc/src/notes.xml
@@ -31,6 +31,22 @@
<p>This document describes the changes made to the Xmerl application.</p>
+<section><title>Xmerl 1.3.4</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fixed various typos in xmerl documentation. Thanks to
+ David Welton.</p>
+ <p>
+ Own Id: OTP-11224</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Xmerl 1.3.3</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/xmerl/doc/src/xmerl_ug.xmlsrc b/lib/xmerl/doc/src/xmerl_ug.xmlsrc
index 92d843bc72..aa60c65417 100644
--- a/lib/xmerl/doc/src/xmerl_ug.xmlsrc
+++ b/lib/xmerl/doc/src/xmerl_ug.xmlsrc
@@ -409,9 +409,9 @@ Data =
specification but the basic functionality. For all details see
the <seealso marker="xmerl_xs">reference manual</seealso></p>
<p>First, some words about the xmerl_xs functionality:</p>
- <p>You need to wright template functions to be able to control
+ <p>You need to write template functions to be able to control
what kind of output you want. Thus if you want to encapsulate a
- <c>bike</c> element in &lt;p&gt; tags you simply wright a
+ <c>bike</c> element in &lt;p&gt; tags you simply write a
function:</p>
<pre>
template(E = #xmlElement{name='bike'}) ->
diff --git a/lib/xmerl/vsn.mk b/lib/xmerl/vsn.mk
index de809e8ce0..af372d8248 100644
--- a/lib/xmerl/vsn.mk
+++ b/lib/xmerl/vsn.mk
@@ -1 +1 @@
-XMERL_VSN = 1.3.3
+XMERL_VSN = 1.3.4