From b79ce5534aff3b0f3f68f1b340f3edd40cc3b4db Mon Sep 17 00:00:00 2001 From: Rickard Green Date: Tue, 14 Feb 2023 22:41:59 +0100 Subject: [PATCH] [erts] Introduce erl_drv_command_error() --- erts/doc/src/erl_driver.xml | 33 ++++ erts/doc/src/erlang.xml | 14 ++ erts/emulator/beam/erl_bif_port.c | 17 +- erts/emulator/beam/erl_driver.h | 5 +- erts/emulator/beam/erl_port.h | 3 + erts/emulator/beam/io.c | 66 +++++++- erts/emulator/sys/win32/erl_win_dyn_driver.h | 5 + erts/emulator/test/driver_SUITE.erl | 54 ++++++- .../test/driver_SUITE_data/Makefile.src | 4 +- .../driver_SUITE_data/command_error_drv.c | 150 ++++++++++++++++++ .../command_error_output_drv.c | 22 +++ .../command_error_outputv_drv.c | 22 +++ erts/preloaded/ebin/erlang.beam | Bin 132640 -> 132800 bytes erts/preloaded/src/erlang.erl | 7 +- 14 files changed, 390 insertions(+), 12 deletions(-) create mode 100644 erts/emulator/test/driver_SUITE_data/command_error_drv.c create mode 100644 erts/emulator/test/driver_SUITE_data/command_error_output_drv.c create mode 100644 erts/emulator/test/driver_SUITE_data/command_error_outputv_drv.c diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml index 2547b6e952cf..d3e93c15c5b4 100644 --- a/erts/doc/src/erl_driver.xml +++ b/erts/doc/src/erl_driver.xml @@ -2049,6 +2049,39 @@ r = driver_async(myPort, &myKey, myData, myFunc); ]]> + + int + erl_drv_command_error(ErlDrvPort port, + char *error_reason) + Generate an error exception in a port_command() call + +

+ Generate an error exception, with the reason + error_reason as an atom, in a call to the + + erlang:port_command/2 BIF or the + + erlang:port_command/3 BIF. The error can only be + generated from the drivers + outputv() or + output() callbacks, which implements port command, + when the port command has been initiated via one of the synchronous + port_command() BIFs. When the port command has been + initiated by the asynchronous Port ! {Owner, {command, Data}} + construct, this call will fail and no exception will be + generated. +

+

+ error_reason needs to be a null terminated latin1 string. If + the string is longer than 255 characters (excluding the null + termination character), it will be truncated to 255 characters. +

+

+ Returns zero on success and a non-zero integer on failure. +

+
+
+ voiderl_drv_cond_broadcast(ErlDrvCond *cnd) diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml index ceb85415c1c1..45730952d293 100644 --- a/erts/doc/src/erlang.xml +++ b/erts/doc/src/erlang.xml @@ -5655,7 +5655,16 @@ receive_replies(ReqId, N, Acc) ->

If Data is an invalid I/O list.

+ Error + +

Where Error is an atom defined by the driver code + executed by the port.

+
+

Note that the Port ! {PortOwner, {command, Data}} + construct only can fail with a badarg error + exception if Port is an atom which is not registered as a port + or a process.

Do not send data to an unknown port. Any undefined behavior is possible (including node crash) depending on how the port driver @@ -5719,6 +5728,11 @@ receive_replies(ReqId, N, Acc) -> driver of the port does not allow forcing through a busy port. + Error + +

Where Error is an atom defined by the driver code + executed by the port.

+

Do not send data to an unknown port. Any undefined behavior is diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c index 737a6be15f15..4ac21b3b6f7b 100644 --- a/erts/emulator/beam/erl_bif_port.c +++ b/erts/emulator/beam/erl_bif_port.c @@ -197,6 +197,8 @@ BIF_RETTYPE erts_internal_port_command_3(BIF_ALIST_3) #ifdef DEBUG ref = NIL; #endif + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); + prt->cmd_error = ERTS_PORT_CMD_ERROR_ALLOWED; switch (erts_port_output(BIF_P, flags, prt, prt->common.id, BIF_ARG_2, &ref)) { @@ -209,6 +211,7 @@ BIF_RETTYPE erts_internal_port_command_3(BIF_ALIST_3) if (flags & ERTS_PORT_SIG_FLG_NOSUSPEND) ERTS_BIF_PREP_RET(res, am_false); else { + prt->cmd_error = ERTS_PORT_CMD_ERROR_NOT_ALLOWED; erts_suspend(BIF_P, ERTS_PROC_LOCK_MAIN, prt); ERTS_BIF_YIELD3(BIF_TRAP_EXPORT(BIF_erts_internal_port_command_3), BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3); @@ -218,19 +221,29 @@ BIF_RETTYPE erts_internal_port_command_3(BIF_ALIST_3) ASSERT(!(flags & ERTS_PORT_SIG_FLG_FORCE)); /* Fall through... */ case ERTS_PORT_OP_SCHEDULED: + prt->cmd_error = ERTS_PORT_CMD_ERROR_NOT_ALLOWED; ASSERT(is_internal_ordinary_ref(ref)); /* Signal order preserved by reply... */ BIF_RET(ref); break; - case ERTS_PORT_OP_DONE: - ERTS_BIF_PREP_RET(res, am_true); + case ERTS_PORT_OP_DONE: { + Eterm result = am_true; + if (prt->cmd_error != ERTS_PORT_CMD_ERROR_ALLOWED) { + Eterm *hp = HAlloc(BIF_P, 3); + ASSERT(is_atom(prt->cmd_error)); + result = TUPLE2(hp, am_error, prt->cmd_error); + } + ERTS_BIF_PREP_RET(res, result); break; + } default: ERTS_INTERNAL_ERROR("Unexpected erts_port_output() result"); break; } } + prt->cmd_error = ERTS_PORT_CMD_ERROR_NOT_ALLOWED; + state = erts_atomic32_read_acqb(&BIF_P->state); if (state & ERTS_PSFLG_EXITING) { KILL_CATCHES(BIF_P); /* Must exit */ diff --git a/erts/emulator/beam/erl_driver.h b/erts/emulator/beam/erl_driver.h index 69f586254541..920c5fd1c49f 100644 --- a/erts/emulator/beam/erl_driver.h +++ b/erts/emulator/beam/erl_driver.h @@ -68,7 +68,7 @@ #define ERL_DRV_EXTENDED_MARKER (0xfeeeeeed) #define ERL_DRV_EXTENDED_MAJOR_VERSION 3 -#define ERL_DRV_EXTENDED_MINOR_VERSION 3 +#define ERL_DRV_EXTENDED_MINOR_VERSION 4 /* * The emulator will refuse to load a driver with a major version @@ -622,6 +622,9 @@ EXTERN char *driver_dl_error(void); EXTERN int erl_drv_putenv(const char *key, char *value); EXTERN int erl_drv_getenv(const char *key, char *value, size_t *value_size); +/* port_command() synchronous error... */ +EXTERN int erl_drv_command_error(ErlDrvPort dprt, char *string); + /* spawn start init ack */ EXTERN void erl_drv_init_ack(ErlDrvPort ix, ErlDrvData res); diff --git a/erts/emulator/beam/erl_port.h b/erts/emulator/beam/erl_port.h index ea8a488ea7b1..6066302a2874 100644 --- a/erts/emulator/beam/erl_port.h +++ b/erts/emulator/beam/erl_port.h @@ -151,6 +151,7 @@ struct _erl_drv_port { erts_atomic_t run_queue; erts_atomic_t connected; /* A connected process */ Eterm caller; /* Current caller. */ + Eterm cmd_error; erts_atomic_t data; /* Data associated with port. */ Uint bytes_in; /* Number of bytes read */ Uint bytes_out; /* Number of bytes written */ @@ -176,6 +177,8 @@ struct _erl_drv_port { } *async_open_port; /* Reference used with async open port */ }; +#define ERTS_PORT_CMD_ERROR_NOT_ALLOWED THE_NON_VALUE +#define ERTS_PORT_CMD_ERROR_ALLOWED NIL void erts_init_port_data(Port *); void erts_cleanup_port_data(Port *); diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c index dfdbe475b319..52a41b8192db 100644 --- a/erts/emulator/beam/io.c +++ b/erts/emulator/beam/io.c @@ -651,7 +651,10 @@ erts_open_driver(erts_driver_t* driver, /* Pointer to driver. */ else ERTS_OPEN_DRIVER_RET(NULL, -3, SYSTEM_LIMIT); } - + + port->caller = NIL; + port->cmd_error = ERTS_PORT_CMD_ERROR_NOT_ALLOWED; + if (IS_TRACED_FL(port, F_TRACE_PORTS)) { trace_port_open(port, pid, @@ -1406,6 +1409,7 @@ static int port_sig_outputv(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *sigdp) { Eterm reply; + Eterm tmp_heap[3]; switch (op) { case ERTS_PROC2PORT_SIG_EXEC: @@ -1416,13 +1420,23 @@ port_sig_outputv(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *s if (state & ERTS_PORT_SFLGS_INVALID_LOOKUP) reply = am_badarg; else { - call_driver_outputv(sigdp->flags & ERTS_P2P_SIG_DATA_FLG_BANG_OP, + int bang_op = sigdp->flags & ERTS_P2P_SIG_DATA_FLG_BANG_OP; + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); + if (!bang_op) + prt->cmd_error = ERTS_PORT_CMD_ERROR_ALLOWED; + call_driver_outputv(bang_op, sigdp->caller, sigdp->u.outputv.from, prt, prt->drv_ptr, sigdp->u.outputv.evp); - reply = am_true; + if (bang_op || prt->cmd_error == ERTS_PORT_CMD_ERROR_ALLOWED) + reply = am_true; + else { + ASSERT(is_atom(prt->cmd_error)); + reply = TUPLE2(&tmp_heap[0], am_error, prt->cmd_error); + } + prt->cmd_error = ERTS_PORT_CMD_ERROR_NOT_ALLOWED; } break; case ERTS_PROC2PORT_SIG_ABORT_NOSUSPEND: @@ -1513,6 +1527,7 @@ static int port_sig_output(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *sigdp) { Eterm reply; + Eterm tmp_heap[3]; switch (op) { case ERTS_PROC2PORT_SIG_EXEC: @@ -1523,14 +1538,24 @@ port_sig_output(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *si if (state & ERTS_PORT_SFLGS_INVALID_LOOKUP) reply = am_badarg; else { - call_driver_output(sigdp->flags & ERTS_P2P_SIG_DATA_FLG_BANG_OP, + int bang_op = sigdp->flags & ERTS_P2P_SIG_DATA_FLG_BANG_OP; + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); + if (!bang_op) + prt->cmd_error = ERTS_PORT_CMD_ERROR_ALLOWED; + call_driver_output(bang_op, sigdp->caller, sigdp->u.output.from, prt, prt->drv_ptr, sigdp->u.output.bufp, sigdp->u.output.size); - reply = am_true; + if (bang_op || prt->cmd_error == ERTS_PORT_CMD_ERROR_ALLOWED) + reply = am_true; + else { + ASSERT(is_atom(prt->cmd_error)); + reply = TUPLE2(&tmp_heap[0], am_error, prt->cmd_error); + } + prt->cmd_error = ERTS_PORT_CMD_ERROR_NOT_ALLOWED; } break; case ERTS_PROC2PORT_SIG_ABORT_NOSUSPEND: @@ -2156,6 +2181,8 @@ call_deliver_port_exit(int bang_op, * behave accordingly... */ + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); + if (state & ERTS_PORT_SFLGS_INVALID_LOOKUP) return ERTS_PORT_OP_DROPPED; @@ -2315,6 +2342,8 @@ set_port_connected(int bang_op, * behave accordingly... */ + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); + if (state & ERTS_PORT_SFLGS_INVALID_LOOKUP) return ERTS_PORT_OP_DROPPED; @@ -2475,6 +2504,7 @@ erts_port_connect(Process *c_p, static void port_unlink_failure(Port *prt, Eterm port_id, ErtsSigUnlinkOp *sulnk) { + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); erts_proc_sig_send_unlink_ack(prt ? &prt->common : NULL, port_id, sulnk); } @@ -2486,6 +2516,8 @@ port_unlink(Port *prt, erts_aint32_t state, ErtsSigUnlinkOp *sulnk) } else { ErtsILink *ilnk; + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); + ilnk = (ErtsILink *) erts_link_tree_lookup(ERTS_P_LINKS(prt), sulnk->from); @@ -2573,6 +2605,7 @@ port_unlink_ack(Port *prt, erts_aint32_t state, ErtsSigUnlinkOp *sulnk) port_unlink_ack_failure(prt->common.id, sulnk); else { ErtsILink *ilnk; + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); ilnk = (ErtsILink *) erts_link_tree_lookup(ERTS_P_LINKS(prt), sulnk->from); if (ilnk && ilnk->unlinking == sulnk->id) { @@ -2640,6 +2673,7 @@ erts_port_unlink_ack(Process *c_p, Port *prt, ErtsSigUnlinkOp *sulnk) static void port_link_failure(Port *port, Eterm port_id, ErtsLink *lnk) { + ASSERT(port->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); erts_proc_sig_send_link_exit(&port->common, port_id, lnk, am_noproc, NIL); } @@ -2650,6 +2684,7 @@ port_link(Port *prt, erts_aint32_t state, ErtsLink *nlnk) port_link_failure(prt, prt->common.id, nlnk); } else { ErtsLink *lnk; + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); lnk = erts_link_tree_lookup_insert(&ERTS_P_LINKS(prt), nlnk); if (lnk) erts_link_release(nlnk); @@ -2718,6 +2753,7 @@ static void port_monitor_failure(Port *prt, Eterm port_id, ErtsMonitor *mon) { ASSERT(prt == NULL || prt->common.id == port_id); + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); erts_proc_sig_send_monitor_down(prt ? &prt->common : NULL, port_id, mon, am_noproc); } @@ -2729,6 +2765,7 @@ static void port_monitor(Port *prt, erts_aint32_t state, ErtsMonitor *mon) { ASSERT(prt); + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); if (state & ERTS_PORT_SFLGS_INVALID_LOOKUP) { port_monitor_failure(prt, prt->common.id, mon); @@ -2807,6 +2844,7 @@ port_demonitor(Port *port, erts_aint32_t state, ErtsMonitor *mon) ErtsMonitorData *mdp = erts_monitor_to_data(mon); ASSERT(port && mon); ASSERT(erts_monitor_is_origin(mon)); + ASSERT(port->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); if (!erts_monitor_is_in_table(&mdp->u.target)) erts_monitor_release(mon); else { @@ -2819,6 +2857,7 @@ static int port_sig_demonitor(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *sigdp) { + ASSERT(prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED); if (op == ERTS_PROC2PORT_SIG_EXEC) port_demonitor(prt, state, sigdp->u.demonitor.mon); else @@ -7715,6 +7754,23 @@ erl_drv_getenv(const char *key, char *value, size_t *value_size) } } +int +erl_drv_command_error(ErlDrvPort dprt, char *string) +{ + Port *prt = erts_drvport2port(dprt); + if (prt == ERTS_INVALID_ERL_DRV_PORT) + return ESRCH; + if (!string) + return EINVAL; + if (prt->cmd_error == ERTS_PORT_CMD_ERROR_NOT_ALLOWED) + return EACCES; + prt->cmd_error = erts_atom_put((byte *) string, + sys_strlen(string), + ERTS_ATOM_ENC_LATIN1, + !0); + return 0; +} + /* get heart_port * used by erl_crash_dump * - uses the fact that heart_port is registered when starting heart diff --git a/erts/emulator/sys/win32/erl_win_dyn_driver.h b/erts/emulator/sys/win32/erl_win_dyn_driver.h index 8105128f8710..75aa38cd2aa2 100644 --- a/erts/emulator/sys/win32/erl_win_dyn_driver.h +++ b/erts/emulator/sys/win32/erl_win_dyn_driver.h @@ -151,6 +151,8 @@ WDD_TYPEDEF(void, erl_drv_thread_exit, (void *resp)); WDD_TYPEDEF(int, erl_drv_thread_join, (ErlDrvTid, void **respp)); WDD_TYPEDEF(int, erl_drv_putenv, (const char *key, char *value)); WDD_TYPEDEF(int, erl_drv_getenv, (const char *key, char *value, size_t *value_size)); +WDD_TYPEDEF(int, erl_drv_command_error, (ErlDrvPort dprt, char *string)); + typedef struct { WDD_FTYPE(null_func) *null_func; @@ -259,6 +261,7 @@ typedef struct { WDD_FTYPE(erl_drv_thread_join) *erl_drv_thread_join; WDD_FTYPE(erl_drv_putenv) *erl_drv_putenv; WDD_FTYPE(erl_drv_getenv) *erl_drv_getenv; + WDD_FTYPE(erl_drv_command_error) *erl_drv_command_error; /* Add new calls here */ } TWinDynDriverCallbacks; @@ -379,6 +382,7 @@ extern TWinDynDriverCallbacks WinDynDriverCallbacks; #define erl_drv_thread_join (WinDynDriverCallbacks.erl_drv_thread_join) #define erl_drv_putenv (WinDynDriverCallbacks.erl_drv_putenv) #define erl_drv_getenv (WinDynDriverCallbacks.erl_drv_getenv) +#define erl_drv_command_error (WinDynDriverCallbacks.erl_drv_command_error) /* The only variable in the interface... */ #define driver_term_nil (driver_mk_term_nil()) @@ -510,6 +514,7 @@ do { \ ((W).erl_drv_thread_join) = erl_drv_thread_join; \ ((W).erl_drv_putenv) = erl_drv_putenv; \ ((W).erl_drv_getenv) = erl_drv_getenv; \ +((W).erl_drv_command_error) = erl_drv_command_error; \ } while (0) diff --git a/erts/emulator/test/driver_SUITE.erl b/erts/emulator/test/driver_SUITE.erl index 1a512e054490..ebf2f3cf4ca8 100644 --- a/erts/emulator/test/driver_SUITE.erl +++ b/erts/emulator/test/driver_SUITE.erl @@ -84,6 +84,7 @@ env/1, poll_pipe/1, lots_of_used_fds_on_boot/1, + command_error/1, z_test/1]). -export([bin_prefix/2]). @@ -149,6 +150,7 @@ all() -> %% Keep a_test first and z_test last... consume_timeslice, env, poll_pipe, + command_error, z_test]. groups() -> @@ -237,7 +239,7 @@ init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) -> 0 = element(1, CIOD), [{testcase, Case}|Config]. -end_per_testcase(Case, Config) -> +end_per_testcase(_Case, Config) -> %% Logs some info about the system ct_os_cmd("epmd -names"), ct_os_cmd("ps aux"), @@ -2498,6 +2500,56 @@ env_notfound_test(Port, Key) -> true = os:unsetenv(Key), [255] = env_control(Port, 1, Key, ""). +command_error(Config) when is_list(Config) -> + erl_ddll:start(), + + ODrv = command_error_output_drv, + ok = load_driver(proplists:get_value(data_dir, Config), ODrv), + Port0 = open_port({spawn, ODrv}, [{parallelism, false}]), + ok = command_error_test(Port0), + Port1 = open_port({spawn, ODrv}, [{parallelism, true}]), + ok = command_error_test(Port1), + ok = erl_ddll:unload_driver(ODrv), + + OVDrv = command_error_outputv_drv, + ok = load_driver(proplists:get_value(data_dir, Config), OVDrv), + Port2 = open_port({spawn, OVDrv}, [{parallelism, false}]), + ok = command_error_test(Port2), + Port3 = open_port({spawn, OVDrv}, [{parallelism, true}]), + ok = command_error_test(Port3), + ok = erl_ddll:unload_driver(OVDrv). + +command_error_test(Port) -> + [] = port_control(Port, 0, ""), + Port ! {self(), {command, "user_error_1"}}, + Port ! {self(), {command, "user_error_2"}}, + try + port_command(Port, "user_error_1"), + error(unexpected_return) + catch + error:user_error_1 -> ok + end, + try + port_command(Port, "user_error_2"), + error(unexpected_return) + catch + error:user_error_2 -> ok + end, + try + port_command(Port, "user_error_1", [nosuspend]), + error(unexpected_return) + catch + error:user_error_1 -> ok + end, + try + port_command(Port, "user_error_2", [nosuspend]), + error(unexpected_return) + catch + error:user_error_2 -> ok + end, + port_close(Port), + ok. + a_test(Config) when is_list(Config) -> rpc(Config, fun check_io_debug/0). diff --git a/erts/emulator/test/driver_SUITE_data/Makefile.src b/erts/emulator/test/driver_SUITE_data/Makefile.src index 77cbd34fb128..4436178a00cd 100644 --- a/erts/emulator/test/driver_SUITE_data/Makefile.src +++ b/erts/emulator/test/driver_SUITE_data/Makefile.src @@ -21,7 +21,9 @@ MISC_DRVS = outputv_drv@dll@ \ async_blast_drv@dll@ \ thr_msg_blast_drv@dll@ \ consume_timeslice_drv@dll@ \ - env_drv@dll@ + env_drv@dll@ \ + command_error_output_drv@dll@ \ + command_error_outputv_drv@dll@ SYS_INFO_DRVS = sys_info_base_drv@dll@ \ sys_info_prev_drv@dll@ \ diff --git a/erts/emulator/test/driver_SUITE_data/command_error_drv.c b/erts/emulator/test/driver_SUITE_data/command_error_drv.c new file mode 100644 index 000000000000..c1ed6dc8469c --- /dev/null +++ b/erts/emulator/test/driver_SUITE_data/command_error_drv.c @@ -0,0 +1,150 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2023. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * %CopyrightEnd% + */ + +#if defined(__WIN32__) +#include +#else +#include +#endif /* UNIX */ +#include +#include +#include "erl_driver.h" + +static ErlDrvData start(ErlDrvPort port, + char *command); +#ifndef USE_OUTPUTV +static void output(ErlDrvData drv_data, + char *buf, ErlDrvSizeT len); +#else +static void outputv(ErlDrvData drv_data, + ErlIOVec *ev); +#endif +static ErlDrvSSizeT control(ErlDrvData drv_data, + unsigned int command, char *buf, + ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen); + +static void chk_cmd_error_eacces(ErlDrvPort port); +static void chk_cmd_error_success_or_eacces(ErlDrvPort port, char *err, int len); + +static ErlDrvEntry command_error_drv_entry = { + NULL /* init */, + start, + NULL /* stop */, +#ifndef USE_OUTPUTV + output, +#else + NULL, +#endif + NULL /* ready_input */, + NULL /* ready_output */, + COMMAND_ERROR_DRV_NAME, + NULL /* finish */, + NULL /* handle */, + control, + NULL /* timeout */, +#ifdef USE_OUTPUTV + outputv, +#else + NULL, +#endif + NULL /* ready_async */, + NULL /* flush */, + NULL /* call */, + NULL /* event */, + ERL_DRV_EXTENDED_MARKER, + ERL_DRV_EXTENDED_MAJOR_VERSION, + ERL_DRV_EXTENDED_MINOR_VERSION, + ERL_DRV_FLAG_USE_PORT_LOCKING, + NULL /* handle2 */, + NULL /* handle_monitor */ +}; + +DRIVER_INIT(command_error_drv) +{ + return &command_error_drv_entry; +} + +static ErlDrvData +start(ErlDrvPort port, char *command) +{ + chk_cmd_error_eacces(port); + return (ErlDrvData) port; +} + +#ifndef USE_OUTPUTV + +static void +output(ErlDrvData drv_data, char *buf, ErlDrvSizeT len) +{ + ErlDrvPort port = (ErlDrvPort) drv_data; + chk_cmd_error_success_or_eacces(port, buf, len); +} + +#else + +static void +outputv(ErlDrvData drv_data, ErlIOVec *ev) +{ + char buf[255]; + int vix, len = 0; + ErlDrvPort port = (ErlDrvPort) drv_data; + for (vix = 0; vix < ev->vsize; vix++) { + SysIOVec *iovp = &ev->iov[vix]; + memcpy(&buf[len], iovp->iov_base, iovp->iov_len); + len += iovp->iov_len; + } + chk_cmd_error_success_or_eacces(port, buf, len); +} +#endif + +static ErlDrvSSizeT +control(ErlDrvData drv_data, + unsigned int command, char *buf, + ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen) +{ + ErlDrvPort port = (ErlDrvPort) drv_data; + chk_cmd_error_eacces(port); + *rbuf = NULL; + return 0; +} + +static void +chk_cmd_error_eacces(ErlDrvPort port) +{ + int res = erl_drv_command_error(port, "fail"); + if (res == 0) + driver_failure_atom(port, "unexpected_success"); + else if (res != EACCES) + driver_failure_atom(port, "unexpected_failure"); +} + +static void +chk_cmd_error_success_or_eacces(ErlDrvPort port, char *err, int len) +{ + int res; + char error[256]; + if (len > 255) + len = 255; + memcpy(error, err, len); + error[len] = '\0'; + res = erl_drv_command_error(port, error); + if (res != 0 && res != EACCES) + driver_failure_atom(port, "unexpected_failure"); +} diff --git a/erts/emulator/test/driver_SUITE_data/command_error_output_drv.c b/erts/emulator/test/driver_SUITE_data/command_error_output_drv.c new file mode 100644 index 000000000000..1476ee5d2541 --- /dev/null +++ b/erts/emulator/test/driver_SUITE_data/command_error_output_drv.c @@ -0,0 +1,22 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2023. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * %CopyrightEnd% + */ +#define COMMAND_ERROR_DRV_NAME "command_error_output_drv" +#undef USE_OUTPUTV +#include "command_error_drv.c" diff --git a/erts/emulator/test/driver_SUITE_data/command_error_outputv_drv.c b/erts/emulator/test/driver_SUITE_data/command_error_outputv_drv.c new file mode 100644 index 000000000000..62454ad38d48 --- /dev/null +++ b/erts/emulator/test/driver_SUITE_data/command_error_outputv_drv.c @@ -0,0 +1,22 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2023. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * %CopyrightEnd% + */ +#define COMMAND_ERROR_DRV_NAME "command_error_outputv_drv" +#define USE_OUTPUTV +#include "command_error_drv.c" diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam index 63d08c46145633321e83946228d49c6324af84e4..dde4e1fbcc6eff383b6e977be09b7292ef6d07b2 100644 GIT binary patch delta 47931 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%0A5WoJd;OllB-qM>tR|H6M}ErbO^o9F>1K zLqm*8ky3I7PSOcx@`cg-<`1K(Qr;V1qyq@*AuQ%9LU_;|aQ&?PRGtx(rlYOQB#xGM zC;#;ZQruEpDfIN@_*V4Mw$!xr(-ygzMiBHjzrs_w8}(y5f*J)M`x#q>GfHe4^gNlk z6_(5z?e*euP+S7(6>IIvTmmZ4xl*iSsWyEv${(r+vnO*|_~t^J{6 z*x-<|{9UTC_Qyu6t zJ`;9k3CUwGeCIV}7f!(?}Sbj`GfuLRo`Hd(utm1g-^#xQ32Q1Y}h z|1dRT6FF%Y!s>vXvQTM6BSUBV%AM4-^xQfKz1d2GY(+bCTHYgQZFXf=54V3 z|b$$)=io{R!2Cvv}`JqHm_q!Y9{CuSUZI)M-k>lW;q-cgCl9)Aevw z$uFy;{R*E)btOv&q>f&U|GQpE86>k&8X|3K@t33j{HpUF2P63zAL;xSM#m^B)|>d7 z5y6dEK{H9i+@>HSqk;9JVQgj;YU*EGARnma@Bf#5XMTo>Zo;lGKiKS9#`sC1_4KLN zJ1iYV0ELRT6cZUFYNhXJmcjv&nHveT3m=i}!wIw)pONfq3ABx%0Jlh?q2Y#W6^YvQ zJq7)tc`^J6n>v($bmgtEbY=diELOXDafXr+m{tq!OlskV+8O^<#Ut-k#U1M+nzwKg zCzo)zZ``zMolDO1;!v=4l1E)Xt^V?lLh&{LG_(6DIs2tHmkLt!zYGs7DI3Fzj4>mK z_7Al=I7G-yOLixNqeMm zWAzK-79JT+RH%48lv{~Q3!GOn>)3pk+7(sE2-(T_YNgEzBj)*`S`j5IgrQnD4N^~l zYo^K-*s5)1-6wj}r43lS2AJiTE!_juxh;J}1KNy2#1txFiaCOV)|;@KhzC&f(9ml8;Ijp)5sbMdS@Dd=o{<;4WOI(Bs6$o`J?>r z_y3mD#I)06meYP;uDia}GObuUwC66TRW-G2O563`_PyaaRs+z?rYWd;MVp#r$64x= z&8`D9yI#yl&O2A7{c!}!Z_MJ}n4yQVv^3KVVGA(0?Qk}fL$~NZjS%AvtpK*s$X%8^ z6cDLjj-lDGEO)Cj3Y!}~QPQF5t5LV;sjw^!XnQ5Zy2j@t_z@Oq2|={c6!=dI^t8JFtk~TL-!U44jn)rez&i^h-7MYFl-J^T2C_n8` zssUG^uTnBSG04WL;2dCV&a29yr1MYpn4ZA0))ho?>^i2VPQ2uYvU)1<1CFWWI;KfY zQ*-8+NyMf8+KIJhgzr)S9=O`))v2ZHX~UYNU0VUTT5UP!<~Yc@`@T1No@LN@tn&x} z>u3AKpDFfNJHJ!AxVWBWUJywe+s&FFCUEfSYlpbRZJ7WJL!iyC^Esmx^QLTQseoL< z&yekXDAjeIpbpYd(P0%^cwwP`v$YC43go@Pck=yu#oq|veGTh$L_%RAoo?@pT=Uj%Ww z0CSqRF30LRweD;?KM?%KuJj4ojV?%A?YLY!v7PO;FczV)!fhwc z>G>R6M#~qr=%=yX8m3&ux?DsvcmAaHEx-Tw^y>jJ!SJq^2 zd_jlq1v+&0$x%^EDTZ!W!sU0=EnkAU8ZT79mT%nY@bR>pqG60Wy3ibLkpn1?wg!^#9p_T+9q;5OI)`)r^NL9WAsK`W5OP2eqPxL1 zP~WcEU*EP>ngIRfIbRc8=XOO3bA&`_p=OdA@4s-HEJbWD47gqs_7E=lB)>C?c==sn zi82fNy}@@#LeLQN)aDXQb^@|<61}rI$nLn)K_yQUt;Sk+obOmKw9vQ;dwH){ps>2Ev-imyS&&K6eM zi=ne1$S0d&kfOy<%WVSJW|$B-5Gb}MHZBL5vK=;onXU+?uhV*t1&~d6c2!5ry&9X> z52W?)n~ zP*?a?mz`&UmaEfdoe6zKp!yD#kUrTkHI8lz^vL7ns~O!6_RyG_TmzO!E6I~bG5{e} zpT#(M>(t=BGXB)PI9&&r1xG?4K=!7fu6 z{G)<<#~CzTyvK5J=FzTIP*s*|Y zyhaI=D56*@&r`;R!D)1XE?u)S7==}b%v@o{hJ_Jy0XhZL+%Ap@^#6)IgAdAOUIwnc z-C6h_R5^T^5$JBF(yVFAh%n^cP*|k2fB#|~{xH%qN=;UPzq-%=Fmjv#jFOQJxPO7? z*$w>toqyLw5O-n(-1TW?^zMg9#n~+HLQR3fOu(7VVW|3i#>gSHxgV*W0~zj5Qz_({ytvQyRI@704mUU~iogtDa4-IPoN`yDiC$o>PyhW&>C z6T1n^9|kK+(U0sG@eigVz!$CKyWpvPUiQp$yKF$7=skOXHzMRo=j?xPKd~!rEd59~ zmHpqL&Nu#+JN1Ip)?({U%-heU@;VPkHBz9ekp_!S&Tp(41f$3B5KiAgWrg8(9W@%M zrr(DY#$mo9)21u0riWFiWR9-VstvrLVbyq!-Yg?Ed{24#{XiH%1+jC=IT#Lz6i&YH zM2`TQ<-3W_e7J!Ft2W$c0n-p)c8;&Sl%1!D(gd#g%q|xMeKq{1>R)~m)eJAtf$G)6 zJiEK4F0P(RLJl`bSI};mc{`Y||CC1lI-P%flxFAcJno;g3cmW7`mRZ~o->gI1WbZr zY5~-tw`pN{fSu?&H@?rkHbx1B!0%(Ra)2Ag`HrFBI}gv_uPunw-cGfDofC}!8bJn* zsf|$6u^EkU9|QNg?H1Ol4ZZLryaS>jwr$hcyZ9O0n>LVR8R0F5j&kuyJUov(#)+#8 z5fk)syUFd0H+oj3(*FkY-Rli z4>3SDay}4#0uYn--MgnjnD!kJEc%fMH-zF5^jcs*8ZZV${=J?sSf^x6$Nr^kL*G>7 zJu^O9Nc6<^2YH&kx9Cb0g$*vDcSL1Q1i3?!9*3*C7A{)^>}fuqMz2gI)Z;C*W`X97 z-#@snc&UUQJD)R-`aeJPrWETB4BeLFdQ?Ek5>8TKXI^Nlz9NZ-_cuv?ewXc2MVoUT zJ;DoJ&wl)c^!gr^V3ApB*}TZ46}Kh!O(Sa~U5j@f6cpscU((b%I7917bD=YZzLPTB zlGHcELni@<+P6XrB~=}r7RpqgDvtQKU$~1Bi46lrsw60URgxNPNeYkNqbmsqbQaAjCa*IX?j>#T_`AppGzW+ScDLb@wemC zalcqM3C$4!y567ftiM0s>%ZP!OuGOc^z0vd`7x3s5&hm;plwPOdtkUfCXdduGU;;Fe z{tfwezd4nTv)v0lb^2if3?a6u8LTj2tCCl$*ol#Gbd^HA)R)j+YlEQ@y%hzgWzXk z@ak@Zz~&Vw-QTT01kj;yjjiNUta21hi6EiR`*6!cMns7cgIsU1;Li>v$O`Y)$0Nk~ z*Jz7V1_9nz|1DMh=f`hqq#5T|uS1=uy!(l9UtsO=Oqw_2cz;%XwmpNrwJ{9giNkZr z%zx(TlH#Z%-w{2xrNv3sX*FEo=;ehJZ_%{H^`A!)$`!ns+Om?7n7FRHhK?)(N>XBb zRd%1z7Ot1aLR%HV9y3^&quvvxb>a2?yvJXr+(>{sN~ycAH$yJ5=Go&IU2X>V8JfGc zh15-XHS0H%tPEQ6(~?|d$HcRjQ>0kOAtdtrA*84N<;}KkPJl0eu~-M`ln`IJIe9S; z;nXh%R5_D(?^`nx9+v$?Mo&!1q@&@%;2vV!M-THr31_s`kHmgmyH$plMsMq}SlFTC z!hApiy+}OxzXCLvqtGJB>`U52b)=L98-_nayPnaA^D4XN0gs7L(l)Loc@L};hZjr)ojqr$Z7Ys7}C1-P{guzK%6?Eg(<(}z=``XcS_VZKVe^G{Tpbz3%8TvgZ)d$R9QiOgVvnjhx^gj^PY)~!PgLF9@-x>(Z8 z_DQGXLub{mUyJW&ETrR#IVl1B*#k6{T7jlJ0i72^^P`3U7#YKSU=y@Wda6bSctZ`z zfbGn4}KeZxKY}{0fkQ0uw^8QmTyWYO& z2uy#F2k%B?V#quMv#675qTi85VY;=5c%a`B7^OP5yFOYIU1X zcf6=-d~}-uAIXy;Pau{;X+zOdgC)b8E}+gDS2~%2oyKgw4nH2D7=n^?G{Bj-G_8(R zF`+pWAFZ%tBQ_ey`oKB%&z=>l!G22nSdxtkI;(LH_3S~JlLRBg)eP`TU!jMR8LS+w z*&S76@5>IewO*SC2_08|L1VfK*XC>Fm^p*{^!ANBm}ppZ|b87sy<-1f|E+WGmdi7zcJP_sYW=M)8qj=2lvG*f=n zx2@yhzE&Bj8_*;;jgPcadMY>aesHkTx!X>e2uZjp&5X5CClvs4n+kFV3-osA?60t| zP1+x0ih?OtVUSEnI0J3%`>zBkaI@9SFvsS?{~kaO;Pp4aFHI$AAjvPJ*_)q45Nt3C zU-(rLA4~Xp9voJml{68BYP%vkMbI>-ES$_AU*ib`d5T)|(KVqkYfV;SeIQDqJ_2v} z86J#WV)hu{On(8yN-3LhXTTvk_ZIor^&uO!&PoPt1R&#A(Q}}<)g(H=e+3<_XR!3? zIYX|&4_uPyN@3N057ER@As)FNwbqWBi*tgW|*PZ}^QFNFK-B*9j4j z8-rFrm(hOc>y6~5Bn`0Ha@7D~`P22zPl8Jv4PxBx0EJ*%Z*FXM|FMj;TZ`5Y^WsoK z8N|8`mhG{kQ@{iz8Je#6=M~?}dKt9-TMF*^5pd zd445gZ_OcTz@?aU3%F(urquikv$tY`UDl57(}AABoHeR+%mB6oW~bz4qaG`u!F;V4 zwV65Ld;+_^jdm8!>6!G*TQYX^A7i=(Ub|qSAv-`7$EpeCt`!HGDJ&np2X@DrczlR^ zI?SE0^Z**+*MCb(=?lWF%2r7{tcq?^@=>hfs7H*#9%Y&0yAKS{>O!K}tA$ zKrr1X_=urv>H*$%HQrGZUb6?Dmg*6(g;~Z{rL>pF(J~F@Q(Qya*=&NWUmeu4nJN!> zy4zG=GbJVAgi|KJ_lMDDPkF^g$_*i~)pA6}PsjMVeNZqX>cc4VX{%aeS&IyCkI=OS z=PqmZdGa#7z-uxzTG3YN1eq%L_+kO9aW&!2!c$|z=q<4)_Ee+xmv=?=W7sd`*Ew1k zxM1ly#@Nfa3x6|&{6y^iNlv91d=UcsA48P}+(=$Mf2yd&e(b2Mpf21I3>I;ZZ&;%$S@9|ieBed z-(tvi0)J^N(ybIjx;hQF0UwX;!R0QY93;cVtJFX(n^_zV#d7F#?nopTJjL>lJ85wh z$ZV-t0-W|X7d7jTsr(u#^d!cC!va1V2)2>97{4|bw1W|;JCwrR@X~%8#&+0Y9^*18 zQKh#g4XPeP%$(|b%bJ07Kr_4X^7<=K`*>16lf@3Jry8o~@L7~;+wFg?V9};`^sI0T zr%nnPPTSO~Fdy7XcBZc6QQCbN>C=nOG*O~cW;dQ(FaW-JZBRc3%THiMaEgHbi3shMSz zLNz1W@C3SEHRE_xDz#)aBb*bF^r$D&nJ|q5KEu3~+-!Qmmd?o})fhS69`%$Lnm|i0 zZ2Xl&I{}Uj*k%knm?7AVI`l8PzP)w=g(TXrwREdUl?;EpY=68d<|9YO1$BnBunH{p zB&I>vft<0lpb|hG(--?%j8R%lEqi8{Vbb`dC5Y~H(k8zqT!%r4@$U?i{l;Q0j4Ttb zm@9s2X(3(lG`LZ{#6=%(xH5!iIJjI3)0Ht5k{!CwPRwbCJHy!D$7XV0M&boVg=4)6 z86TZP3SUNMFHX#AhdWfH-={A0VrS~qkSrc>{R&blfD`rMg?7%1GgUHgI;`MySF-Yk z_Yy_epYY=W6K4`<2v`AD5MAhLtHzv1hVB zv=I+ro<0~SY}&{iArmTjOQV*}`lshnVVwG-WD*23j4yPRQ`d-nMrD7fRD2y;^#gcn zuG-sVe4YHoj6%6M2FwZmWMIn8R=j)elF z@^b5P)YIr&q5|Aye|Ajtt#2$;_u>f?D1bG)M3W&_HEek0@)-OZE=JQBh;Pp*?JT66 zV;$qF1Mw>cj%#3*QKJA*zCnt@pY$)j*eNOuSpS;T(^ME59+lo8%tf`$_+JF+3$zQ( zOeE{k$JG;68RF8Fs21h(wbDcN@gB|Fo;6&EklWPpn$elCsEf3N3(PQ(8A9X$``k5% zrF5`{na%c?bRJatbr`30=$?|bptrz~x>BVrMjp?x@;%wnmj%>}RTy)CBnt@tX*_U( zNJ{w=pGCS`$!0gGyhUQ4~EFxeI>T@$~c78JyitwhX~tT4eE zBCDv@hXS8MWl5*13I^Q40_JRCfp)^Xw!Dq%Dswt8 z=BpOwl4w2np-Lfi=Ypd^pLnenC$44wj8W`c3%L=au&_DCLckHdUwvB2U#&jXd+eWK zmlznXaps5J((J>_ZHf(C(R3})2@DjijO58?an2VeNSz+_(!Cz_(6Z3XrX_gFyivvw zQ_+|N-y>{meI_{uE0Cb>!zt#03q1Sa-8{V#q73|kvha5#vmR*=&nW=ykK-ldGiiaC>gn1y@| z(%UgS24~c#IP1UVeN#JrY;hX=tR6p!dOR}wcYW4>u9io#JGifH_pX*twa8gXOP%;m z_m;tyNnxG*hNqjGI_COom_B>8$o#iqo%o7uHhZ<Bpq`igE$Xe4ANi9GRx*fN;|p{mPNnJ zHD#&*DWf~9I1b9TNWIN8L>1@&!LZgM#@Rh1xT<4n;A0J z83`)bO0a5mlX(AAk>_|GlkCL zFTe@xg(4Jx)PM$@%dG4tj0BLJc8=2n__<=Qgb+k1kxTk`=#mY$88*1Tx_uJKx0eX z-8w-GcK@&D!Y`SVF2|rkM-6eL)*y|v?mZo5`1TEneua|JE0e2n26ut1^?Gr?i|fSJ z>v-pjLgrPXwZe(^tuBhjY>TU#zC*y~SyO{V+GkjEKW{I*T8^K)mzsYCN4ZMwGbdF!EQizA8ovig7*=`KhQ zXa_}$9V}*(EL(>=$aIvBpwWI3n)q z4=WXo4Z4Oq5<`yp9r#RHebWz%J@`hf$T&Z=+-)CnZAq}0@fqH6`9gl*o*lvlc?~7P zA(??4+KodZ)t3;D{?&b&k5ahsIOYG-Pv{1!H#h#e?rMozP0?OFg$3XP-S3GZ8~+Kfpuc@zf(H2e&Dy4qlZ1MH%vz06eXn=irIHV)D>C~v~m(6$QupD(GET_6z1{eL#9!$>j;-97F zPqGTGNV5gAcg?9cu>tTlK7Rbe_}AZC@UI5$^Pt_v8%rvYX_}Y_ss9h{X@Ug&cMn}S_vwI0XsO`q z%)PoWxB}h*Mh)u@g_&uOjHu}C=Wj~IThcUZt4fEpK{tY*C@R@jg2e4irwn2Et#DCcuBxC*MD@6oQ416X6kI*hYy0@+8-jZCzE~eO z?6$?*Fq1!G3no-7wv|7l`W-*MpAX}MyiS@sNfA#O2}JukDPC(L3Br-2JEmYGo5V-p zD64@bG{87vboll10M*5o*Es60@C-drDE>M?x{JFw1#8d3<&gwseUhPFs5M!htL`e3 zDqg8Aw|3o=H`n@=quqVPGm>ANCi_#aeR(;>{f)*&<9J~Nd#^QlSrRej)m3<$TwTR% zrVyB;QdpRyVsuYqqxDS_G|3wvG@lU(#gRt_1+XH}O4Ayrvdjak*rlh73290OuG-Mi zy(2=BW=|RxAJT2$k0U=p9el4^^04m zEA0{)WmjOc&&whRhvNtT?TKKZ$O&}31iQkNDCSY$pA$-7snc6cd@;VuH3ybM{HSk%C(=mA}o`u~L zF>T`VwGc(1$J%@phX^D`;#n#$U(Lqi`_)s4yndq|Ir6AoYp=PqhEY6w|JXTz?vb$^ z6~f+S@%aH5NBSs9BpRf$BF(vM0Iy*4r`AIs630v4izl zaUCJyEdj9t{;f{?4lh%F)9ih>9)c!~6Tz`#L0C8GXD;EDe$s-OC*tf2p$rBE*t^Va z1pNw*?!Q*PBG!s@G{Rf&X<_d)fb8qM*Cammn7>adlQIE)$8V(8gay;DiX^(i_r~_6 zfPTfed6lwJnm3(Ubo6OR^zYVZaP_R^qnCy+q~yOP!!C)X!wnk0NiKF0mFIBDY1nUP z=5S760BjF7Vg+$4*jO0i34Jx zO;IV4Vl8Y;ii>xB0tkh7Fy8Srl~J%$@}#i-jV5-_Igg=o>o{R6zGYB3A0!-^pnFQC$SbaV+@$s_;Bde7TTDn> z%gDI3P1^HH1kPNbLFymn7{!Ah_#C#6nsCsV7{(J`tP1IV`f%Xh=Xde1mV%`ZJ`OE9 zk{^Ef(ENokKk~wtH0V10;KMcbp?J_r&dLhbXZpV|A5sx78J`;Y00NfB#RPA9eU3GL z)D+KpO<9F%r|hnIbE8$lAxlkUFLo3@h?w| zx&g=*%G71$#QWvM$!bEODo({rD0ssXoMk7d8Bg4pC_%MyD)MUY!9~wuvFkYAXi(p2 zXz%2Tl+$F-P|!0>fJpzK*7RMc=w;LRWmCMGL0NykD%p`M){>q<=5vAA#q`{C@>eRE zTLrv+78ivD&$QUBba#bbcZaj|wvw~a99Uapm&KlBwRif@SVbFou}g-I665xkM~2P$ zWW(t&Mtx(qrk=F9H~d*~0@aaoJKvQ(JHN-3;H8zZ;a&1!K=bU1Sh_0}?|bfKsXghM z@y^=R@J->dnYI=uN@Zp8oY)nl#Hqj(+cF~XhE(gXW1>GyJQYvISow{^Dc~mL>xKMn z2jXoS%)dN${P;=^$?`2|CuB=OIPpMu-OLGqqLWbg+yZOK7&JhgS*n{GJoisx@pP(N zlZXQ^0QGMOAV9PwbZI_s=c7Lo(e~m4)t%D)8$zG4u;u}xJYe!6TO_}Vjm7YyUc}Sk zX!Nx?bqePbvxzk0Ye?NV0Gw5y;{CkN%Zckv0RwKzMx5K4irhlLFhDG zW=FnnOvBo(Y_|8svTMJMBqbw-nD(?=i{(xJJeHLJY+HYg>|oiBK|fC_6MwTWa4|~D zl$v@=yGn_SHzn+IyPJlLtsEX(Cnnw8r*r1Z_|7H=Y%I-AB#X8IoWkAH4eb}Uc_0)z zxwTe#t&@h?3;(iT#ldpN?ST?f82(>RUmaD|^Sv!Cb?>DaP(oTjx)G&AxPX*&NDG(l zxRTP{rKGfUhjd9R4RYy{5^40u=libpp7re6d!IS8*32KX&L2CTH>zmGPQJrzF>-Gg z37<|c#*coVJW^-nbEd-*P*}?C@2WzU+eP~MYbe^LYagqcWQc0nrAr>{rP?rLLGnrA z{D#@m)yX7hn2{^G9E{CcbIM8jA)_Tryqq!!$w&=Ey5!lr46)4=@MMV7+Oq6NRz%G4 zz^SdkMVvm0j;py4ZFYnF%+|RqgriYUcvBmnxl!+OxPrW8$yV~-i_@p4NA`7=$a3qg zhNtAM+S*VUaHg-?;wJqRw-1bh^=iLrOD4*b6}`S+D;2MgtBYXLY))3&)b4)TNUV%t zYTMKf9In6|z@<7CDmnemx}KPT+}Z{n;z9GOkCxO3PnSi^}b@S$4;rNsD$5#SVOMEznB*BrE=Klzxdw-2B%&QEZZpFT0FL z6_(2k<$?r%Sr-1)C8Y5r+fH}UFJdw8QTjPt0vEy?c%0@l)1SKi9emnieVuHF*^-pr zt1IciJNu-U%jJ8fbR{1-nmYGUlol7}x7NWl4@vl7pBUSVu5(W%-ZC`jA-%w+sKXwH zS{Y4rZ{b zm#bsq13f&-eHm7lrH9#hE4_4)W4=nOA znSrHnHW_)|JV-*G2i6oS!p74-SMCm6BvdpR<DxwdVIq{UHg!G+jBZfDP-cYPt2e4q9 zi5B-tWAx}D&8u%Fi>mor*DR^T@O%Yeb&sl?Z!g*l?sIV<1r_bmMHIKGk~I&hWFjik zv5n4#_#0w;o$DS$eljN~4dRQZaUPp|#G-kmziRD6PIc2ppXVbO?7s}-KvGEx&xn!Y zcUhvroL)S7eBM-SbyVELYLorpLyTFHUg(G9rebDVWQ;c5`;u*%Jx6Y|Oz9a?WXYJT z)O-FR3WPBEp?aeY=3)_%#3DcX3~wa)L+g+k7{#Q}Z9= zCl50-;qSow^!hiY-00h5qgIQ}ev^q%X{sQrEnc!%GOV#T*A{Pi%A`ny*UQnjtqJf7 zRVfIrhnKY}S%|kMC29D|W99yFY!kA|ZjCm%n{Vq0^^h7O;orzBu6#X5}R+cJ}G~orl$J8~C_tPMk#*~Di;lj9I&Jm%L#%6BBhcH5a`rx9u zJz@?Pe!?dGN=w6)EI&GbjV_-*=B&T?xwb0ux3Ru`7oELMEa_8Q5j!)H=VNyrH-|pk z{v*w)FMc*(WN+U1{qz`nKH_0Xz0c9?Yl%VD6+K2Cv)>fnUQvg~R?(fAr!^R?ZJn$2 zFmLzG)_0u=UilkNybg)<$VS)&j$>1Zux?3LcF&#&3&G)|Hh~l!cZgu1mOErcjVGrA zDJDA;B0^c@TVF%5Q~6|CvDKIcj^kzUX2XH>3A{zYaZ0vVkv(8>`Jz~Zvs;0zJIRj- zdrm)Dfn9ghN_VvJ>gLMyuRq#|gJf~1@u%w>toxYJsV@QM4^AU8j|R(`Vhp4Yfd|Ld zHO7oId14tIU6)o;vY3L9`nQ&Fv#J9cG}sLnjD)kt(ct#QHe-@2O`&hea*+i z%y%J-Gy$28ttQ(UuQ>`Njp_TAjB@IOLMY!M#5wI=%Bd@yu9lkwOHouyQAp-SxabD+ zeJog&rQAsHiIhFQD@$!lOKzi7YG{t^tI~N--bon|e}LraAJl7>-XTyT&3r~=hiqY7 z`&t$Z;Nh0jO!R{7!4~zHHEVn=ueh`9i4Jm^b{S-A^&@Ca5P}JloPAL4$Vtw8xkhEd z7K?8?DYE=67UcQ*%+$-ywyqb&x2Rl4dT+~@h3atE9W=+bepiUmG zjbgqP`SC}9zrC~gxD4fT3Fl%_+}2tDRwcVl`&sl~Q~B>$zHFp;-q;JonQdv?yvpOf8{v(jM`Vru@%5MN~S_3T;$MXESbg(k1WuO#oh zFmNH2xPEqKK`Gtp*^eyWlB11x*4Ng%B%Y5CF~d(R^4#XfwPj^zHOLIP%67bq^7a`@ zcf2DbDpR#wF|;NL^CE1WSH9L+1m)#XGmCrHHzaqKIBBYzi91$KST+1-&I#-&yZjJHhQ3jQ*63b@a_0=o5s= zPQ*~=1a+aSaPvfU@aJ@hO_X7((3I+)FzZfaHhmKE3M`sF%_Nm{7=G9i$_ypzYsBTE z)b88nJ`o}6+a6qVVLTD3xqM{kYf*DKJV?(gluMyg#oLyjK9Wa(G|YS&>C7B?8dk$P zJ``90)!cSr@4Z^WTlk9iNb=q9W~Y5$1e0gzVR{Mr7p#TQ043d(WH_|6GI`7}p+(!f z{Rug7`CBGAfBICNmJ(^1crEYW&re!#k`Vb3?$lcMgu=pQJN6NA=)x*qVK)M0j#zFy zDv#E5qDVDI&x)u@k))(;YRUq7!W5DM=jf-E6IAIM(F1I$@`UiqK5H}D>aSFq8gB2d z$Y(k@;};rbZGMu!y0MilD=r)@`xCnqp{>6CF4&q3_e&>%Z9v0gQTh?Fu4T_|$Mxn? zMm20-*Q5u)x-1B{kX_kCr`UO6SlIs0txj>b!{`-P2GeqWE0WB$FU_BnIk(X)wMQ;O z-^D6O;aWz6H1M@J{nI{@?^+T8m9I4-3bfd!K9PE*TP6!JCZ1f^3DpiGrr&#nXn($Q znc<%ow|`fxwm?!*B4uM0x1l#ZVeeML&aT?mz)W1v|BnZTF7m5tD2acNEO&Ts>g)GH zG#Q!TxI0qZ+xy!tBlO-1*X<#p@MefxA++CeZsH7G-Ga(-dGsAs&ot|rP0|U!ttXX8 zjvP>B7-K-E$@rrXqRcQ?9r8_3&Qf27cabvPK7P<{deBbef2fVOAs*r%GSA@WRmoCL zR4&3DDxgefPFB`=X4t$mMPA;H4t-I*S&-;q@o>P_5dN2#@47pi{N%Ov4NiXTsZH)1^~I87M{3`uO3Q zNj>zNoSx~}0Xvc3q;pnQgFR%%2lZ<|@{B#l9`VEGI_1Y;r9$5L6el4K5|ZmRmf-Cq zNQ&FHGEjGK{DGp7!~1d)-zqlt$OBH9__2v zq}amyl4TnTUk;ENfa%+MEJht7IfY|^+^6O!3YmAu*9^iCy@isBU_Ck zl(w+^ZffCNla2ov^wMrxb`~$Ve?BwDA>hJGU#~yR#*?(-JCXdB1oi3fgTGTyYWtTetn_eoEkkA&-g^XEFOk3)x~ z$;CCtWQxwWo5(%qwQ|1O_X$Ee&qp>U1sNzf2hf{M6$=)f+ZUf#It`RjuUC5-hP~@2W&!r6)c;kVkVYTO5~yAK;`r4k$WPvxU37@V&KK$`Zlt zq-`YGnoc#9Un8z0yvYtvJ>EbgLz+p~ZKR|kc_W5BS=fj&% zvtq*L8%P|Ib4iOTCpAjDNBr2-4fP{IcF~ug8svP{bQvUea3J(SsUNEc3y_Ee(l6sG zp_dsaMc@4PyLSkL-@Mw-x{Xd2o~>|=cG5d*6Ty#XqQ{Bcn=p*N|!E`!7nb7;vh8s5T!XXe7L>a z@X#Fb(d1zi2Bsd{(aOOO%JoEXO8XyhclmR}5BWCRrlr{*WPg3Xd~CVkMJa-E&=7&X z(x-&3qgJH)ueq(AwWXYgzHl#nfh}2{e0e`Py=FXA^1zS#W&iQGAo9jjt2$N(>&8iiEy{_YM33mJR^y4UfS3AZ_Gx86GD{Vgg6%dg%;d7Sl_EQ z$qi$>7Nq9nU4Gypk~Ug6M|jxvUvV4tWpNGlC9AR@e#AAi&UYaTSwE6-L{A5*Wseld zw}q!J^6<2Wqvg5^STxS9xN&4;(B#{C9~AWy4WwnzNQ)KuIK-NICY;n26OnbVEWYJt z>XkkIBB~+Wmd+t08_O$GcXrVPX*hH5uK$pj(v52*6A&N! zaom&}+Ds5*#qjV_pJ>!7kDO-QhTbymZe!S40^*TZV}dnc+C<4Z4C{8fd|D^>@-l=H z4MkD@SFWh@t5$iGdHdl@!7P$*j&K>iERyez@TDZ=i!Op~Ov)JN*Bh8)ow1*>VoKuR z5m_&>OB0dE4<#tE1gea_P6m5=f0oY~XI(HwufL;~okvg4Zz@eXkL1qIj(BhUDC9-N zF(+H+>c{%x4mSdBH$4-m=M^Uh;du#CV@reZVL5kRYxC@;=UJrD2aHtdx=E9#i6-VA zGfYpZY}bLy>eb)Zb+yJd%#>Gui4P9OJf~-5cq_J$H|#t=jptAA$W{!JhA7Zcc=Lbt zzMaoD*de1QwFQN~m$}_Vr|mk}rLX-eUFNM(=@mGywTTh=+|)IO}}= zB2|}vXyG3BcjUtvX5R-Px4<=N?`V+%%{1i2ocW(S=>v}6Ha2TS5m2XE96_}#ue;}& zUddb-A1De(aXKl?RB(P?s_vf$zX+?{MjorYnmM0VUR0HzIG@(F|J?k?!Ugp?{YWI5 z?_e!(*``gDkx}Z>=8e-~JTCs>wLS~*cs;z(L))Hzc>k+8olc?o%Zhgt>nS*Fz+Q+v zy$KsSVpy`lbaHSmRH99xHN8k7M9^?tGECIlb-nKSyJ163jwX-yT5sepW5a=}9a&n# z!P}XdScZFLts84M(zb^c`Hxb9r{b4bP^(Q)h>ckJcv$u@XbVW?I`}C0;myNon(NUA zR#`;KiQ~d=6<&?MA5RpxB491?&kaZ3_?k74507Qm`tPLLAw5$*AVk^anj|7Gh$&7L z3u|GEpA#491-=&rHA0(X51FNeN4oX0`l`qy@X`vSN??r_*?-9UzX{>jkTKP#D__U| zlRDbg$=>@aqK-4hCh9mg9nd%5Ra$_tjrmx3z;!jN5@XxOY%kdUu6WKaR z%e`2z_p@|sN2$);%UK2G$2W~;SriRsSyuWyWBd0azYyWHG8Ym5?zfl4&8F9Jf^YO+ zacsrWu;jY+@o!~!U~g&Km~+gVGnWe4zrL-OB@%o|`r=}@^!W1%77d!0-!Qi3M=5TB z{reYcmc3di)okAnd&fxQN6u&h1z#y9$Wv=d(~wbG{!s>XU1P>~hb$(` z$Wg+-=)3=ZEsd$%@D1>fmvdcx!=L$B_Qz^<5y7>w-~JKgJFLgphTZ0{)_z-uN`scUK_z8Rt4@ugB#}x~+H6oGU%#EnbY!)LEA{?G54M!PUM2BRR=fz_wjF%pAp-5orQ+ejlzX*GKhtg|3a}V9BFHoxJKmV zxqRj`pSsTvkz}n{L^7#*?5S&LBHG2dNysEMPdK>Md7hw>i)NwYstOYW_{gk zKSn4^+cmGyk?r06wmOc8?ypb2qwpd!>QNDmUricN5z{)i$QP29I>)xQik3PiY($G+ zj}4Pg3^y+;y)VNgj7L#?BtA}l9TA_Mi>;a>ZkEzmD@B96uB0*54f^y+-ds6mDCc>R z-Bv37rpou?L?3;}JNhnbOCWx$oszYip z-zH<&KxZrXi;qip=)+1E&X#AQ0sEh14{Ad8DVr1Bvu8~Ulw09#%jtYghXkATkNWrd zmCH#eRZxr>qI%^dVQopw@MD=`*R9!HzRn60=DS&bb<)}@Ugv>7kAF3F^i<6i$`p3I zr4Q{0>OxwCc_VR7u_qJ0`|#g2yu1w$)*Cqk%Iw97A`q>+O?&_hqVA>LSdi`JT!f@>gkt zu~R(pw5F%OV$3K?dDi7yhH@Gw@}I;J+XoK&)xP-n$ywt=mB2G0rz+2c9zX6R_>*QE zhBw)A$l#Kan=#D%=CgVJkFn0{e&djZ=nD@W(cMx{UhQ3#7d>`L()J5k48un8hn8zG z&s&q3sP;@vjXD%pd=#54S9}I5)5q%zFb+j^QR8V_f9EE5ci7e3ErpILXHTj2hSwDT z&Wf)C>F<-fsbb!;|8`^MS^{a6Sh8)8C>eEgkV9=6*%5_Q!>b?BTVm$JwKCdo+LxKY z&qu2L%O~p5&TF5oSdInV;k^gm5skvFCFyKBZs@~)A=#Zy(}R6qk5hQjHYJ?J;=~NS z%omxo&6Prsf8nLFR-!E-q!b1gi0EL-ciRUgLKzxdGdW{$WQq@0#q;c3F^I0To3Zl; zq@JP1rk2wjZldy}nBWoxvjrJLv43_pPDmu$(gxe7r{1Z8PGYgsnyw>BLuLk$ZT<(9s~okI;zBqRpobehVh zNz8jQR#fb~g{(#Q^_Mopf4XJ=X4KHsh3*EM9*tfzLJ@c1gd@b{(h{BL;S zmxFo3L-sq@*Qtk=#=!Rul6&R(lW$jgxffA0*J}05q}x4=Ib*hX(Cl!S*L|r{Z!sIMXC><1|X+s zFJ`XS7cIxme$dV7pY{JPQ|gR>j`}BeJ_s6h71xz-9a!OR`kiwukHGoS%n@H4E%v8| zYY(Giu$b@1uEdm7P3B(duzj^u#sb;v?Lj;bA!9zb>A?)PwnDGdRvt?)zdu`P?(6wC zcy>d9sL`#xYtNAG$}jzuJ>Pcm+B%TJ3)-tFY3jBPN@lgdS&GJ=;m6nAThe0UZ7vJt z{Drfs1+!4g1<>xl`byLL4$J!vwEq=t|BE`imd_JJ|^welcylkj0}8(Qfm;RL6{ z%cjlcpcI`?HLddI9dy%kck65`HUzRyL&-c9-3MQvW&CTWUH5mKmc zlWf@}#A|Hp%GumK!;ZX1iqM>`mo%ogG-W%zXgfXXEL0{>Nb~5o<=}DX0*8Zj+9shE zr$aHqOS*^CA#HYhbYd=?;&E$9!X{y@-il+uvSUA@X$;{h+=_~yi&mQ-eNEsH9K9UI z?arX-&fx0K&^;e5<6f)Tilk<%`42W0LP{n=5!KX%wbW!|2u()!d;#~yrRWtdoiEmGxtTn;d&Jxke}~DL>jlAw1HX>`O5>_YpbyVllKk$Q@4Y3U1AUlieVCzU zfiY%M!V$RfYNW-i{UfY+cC2{aYNT^&q``S##fn@6@>ywM>f$D{JnAob;&aoA^V29} z%*+@`6FIbz^w+hDf~1MvxATl7SU!RZ1Hp}w`aI9msww*lpR=~q;mD?*fBI3VLcXeE zdCa_j%>1Dz^AYX}Y2@SZ85~4%blW7?w#7VHikKbk^=sA6iq&Xk0$CY1sHTT=pT<24@&wb;d zs=-53_SRkW*4?OO*X-ppNB3!lY9AR3A-Ls5SoAW3=>bi3l}~T~VZ2&TX25a3&9PpR+$}`ktYE5qA{RTg7 zAv0B(0%O;DlhxgZkJaN*`D?vD@@K-!=FxlRqfmC)r~}8)S_U2tP0-?&2*?*G$wPTK z>h8hIL0~0}1E{n<6Kse54{yL28ReJ-!S)`(b|_yKbvQ~q*;Kbw+fsPE-_eM&$4fBu zcR9g!2w(53fzeWpP}wIvPvViL@yRIP0F-aPW5<}Izi`i0Jms@0ZslPDiaE+>58pO@ z?RN}FMg=;C##&G^3xvjo6VQ?X2}_GN9NZk11d(o`eJFxR1|EZAK4sQ>K2OSL1aF%r z`Wa7a$*3ps{{wqZA9_z;6v`|cwRS&sf2c`HcO-|)9=mxMlP5(KIuY#x z-5TKzRWGqHOTH9Gz+>PZ_UeJzr^BQ*;`lYcQajx|d}M2^Tt{D%rsork14+!5@q5$xS;m0>bY zh45;L+=F$bp-p~M!t0HH9gFC;OozwyfqI((yruGz6~tB|Iu%-#&7)hiGrlOhR906cSK{ik8wR~AqR_()>u3*psKM2g|FB<+U2`DODU+=$>`WaDP<<@5aBw zw_Tc8Eb9kpr9_Dq+`60)<}$uCb0nPrdK?vYfgH|j5=a3vah#spiB*%`>-vVik9tlg zpCj4J%)j}L{K@txT>C>-9pU-Z(D3Me6I-U zd|)lf(EOu?Wd%5V<-@ZM#@Zh{@ecFK(HQ!Q|13dllIkrRg|l?T50eC>T96G#reX#G zHT{m(fM%P!3t@%3DZDnVw_%8Q5u12F4K8SoMeZBZSobq!?lpsXa}Rg2fq=Uw3&!R_ zPOwXTTJ}Lkj&}Kx&E$1X3WQ#Q@UOmNdHlOS9`kxbIqoc;3urqPZx>6awW{~7OFe6- zx~aFvzMb|TkV0b)gB?zgaP~F$@Mw;>({uZQZgZya5tIbwE3BGnfaB#+AQH80|1%s1 zqH7kAv~yl-7?EM{CuHz}z}YSViQR-Q{|(BqHe%(#)#83Qqsw!^#(C=f&(bmX+YOG9 z<8vFGSUi)}?3cBC5$@=ttNKyQ!-p2BUqT;aOsdgk2M)F=jh`To0^Q?>H*KrgT~x(X z+^CauF#iR#R0K+y3(X`DN_|YUkDSi@o{QC^5D7293LR>+8laVt)i?2JD9+=gls8hF zBwXZ*qTS5n}1X!wp3|b#bm~^ z2U3PM^u4A}Q-7~gR{Po|blfy<`aRzn!?6>^WtQ-FUx?^q^|WzR01{TD>=ny>xzdCE z)90+~f`-z!Ea_r(Lbh~{M!cF%ZKWsAwpp=Tw_oSc1#sZn`3->=rN%esh}6fp30>Ya3zr9IV% z;8=}{<-DcEJo#`MhiSI|H|ri=lXD?qg*RkEE4MG-B&m21 zH1_oa>Gur3v3!B_I#09O)N_(;Z5b~y=2VBWIp>kNz)~5*wohGbWy<|!_)p8GvBJ-0 zO0d+X11pA_F4%P9l*~4M>6bMw@#y@y-D$`kuZAKQL*XJW@u<^w75#{{AxDB zQ&*bl^xgXUnjtz813(A>gb+YT0E8Ss9s>vs zfUp6`QveYH5Mcn30T5XLc?}>M0Ad9o)&P}w~{05LS0QrLi&<6mD4WKvx3IR|U zfKmV`C4fE#P#OSb22d6N9Kzjl78-VTu=mCHp0_Yup{sS;H0DA~v zcmPHWU?c!W0bq0h_5{G50vI=d@d219fQbW`B!Ec)m;`{m05DkqQv)z{07Je8Fhu}U z0f>`K#{|5utD&_zH delta 47617 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�^30)nP2&&tXG48^~HP>kxtlKKE zVZU+)Nq?0>;98fNB**Wu8arS3GoQ7z5>-*DOB{ob#gXv*1GAAw`ZGU5t9X$!S(K3e zbk?jSJ* zGXFeGrY>3*Swo@;t7q7?c~TReaXc0e9!jqYz^5fMk2OC3P)svi5|km5jzp_U(l|w+ zsBD@)G;e}y@7;u}RyfNMZl}5N1DEJt#ciWJEi;iS@Zc?29>)e^Q=Q@;WBXXC6tO{+ z_n-3ePIVH5_pb-k=m9Hir=+)&*@Z`NsX$ND6flp{b1dcH4 z&sUhgp~@4DW*>K~m#m8Ef4_45`9_J3nR)(|W9K_fqTwi2hf2iDpk*iOWA#UrHC7WI z6GKccYbe*#4)S1doo$_8kkj=O&>~qI1jfz{p=8UbM4uNkhpjKa-?|D1o)ma)n0M#;pZYbIv~k?w{+xDk z`YRC6|F^i!g~tBM&s7{Bp-3>Nbo9`(!5}9!WkQ^u60(`6+9#~XkdOl-fbN;xJ8+c} zW1Zu7-aZQvH%%s>W~8qz`r6BrF16LmG9^d}p&3OU$|%MfLD&sDq*5KmEXFDXO{6+~ z^Ui1iZA=>nzrB47pA6j=AgclY8bdFU@$ii{8K+3YC{E2&R4)1d1V;yH6y-Q(0u6#} zK#1{pogZtefrUp1x4qmqdntQEB`l5fs_KcjwZ!r(AX-1&LNs?K2`ej&O{Na>vsFk- ztRpfato$W!elSE9ZVouIj#J$ciJPI{m`0ruDvumVbn||o;lMCLmJm+RHaRzum=NqI z=}#-!j+^jjrTpTpNVZl_TBILgp$2z3b0Ag(xemY&i(#=LSU8o5IN3UqR==FMfiA4q zlkov4ENk<0b%NP0EYY7K;Ggm6biEIvP;^O)Z5I%Bx?bCGED;;%|(gL1)W z^!^?c`P2c5So_0tINVyn!+$W>GMLe1v8Yg{WbndR9jb13hv|l+HE&P~cA$%Utr>KK z_cCkMu~ZU;E}+7hD+Aayx~sIF8}yDQYzV+w6W+RvcNWe4sf)d-8^mS9zhXYy5a4?f zK@85CH0F0(Hgm|Ic)of;!;fP(U`DZ08>tAQARpbJBh>9wNn;dAY%1jP(id9}$VE_e zD|AKdSDP=fPVDs!X>9*Yb*mUs2FFb!b#xiRlkwrJrO@a(6{;3IK1Ijpzwbf0Xv3-n zwtBTQbo%B3o$}-%IeV=t4sz3CfUDCDmuQ{0=(VcJx=bc>Ee}V$BXv5pd6e9Gmugab zBNYoA$xGMKQadhy%=}z~wCee>>e&@3WWth?Su*(h5v;TZ;AZS9jMdNoj1+9lCdpwhx@O@z+>Stk0 zQs_=L?q7|nPj)O+Ua3mH4vT~RaJ9i0o=^2Bj;oqkrDI2Cy_pYr=qWM9E+e=(Td6y)0Yf9f!C-{C~GA@ z77N8zQB?(#&CvJ%3^LVuQc#z1{jb(9k3th#+mDJ}VnVYItB-UMzb!y$7>coh)A`%8 zYXYaUq+^0Zv;hFYsTMrdLC&K{`9VK}V19dov%1`v=B-yeTB_OLtruMULyZI%vH^a+ z?YlZ$Gdva~MS!MEN1VwJ(?94;qz~lcq`s1Co5}*wR>Vk&>e{NjZpq}OHKxv| zbj-YNSmWiZ8CmUe@#@;UL!+3dP|1r5YSr$t6^k_Gmdg3n1x0$*autgjYSl*xauf^y zb3)4|mn70)RfX_SCTmuT`r+*zHkiAyNTh-)$=qofu5GHYDbP-AC~c_}wIDU==ggzY z6_-Zm0COajm@K#sXqmQ;gLyhD_KjM_hHAaQ?-Kz6x@KCL- zQ!oaQ-?dI@|7GNbDQZzhTyv7zoknZ_#Tz)nE416juX1C_WZc0^hMIRPRu&^@0e4PfZ7By`3Cf|x{_4QW)lWR=!)QZ} z^@6G}2jHl0v>_YGhlYFVX)ti3T+SBz>UMDXhG?<^CLJr9nbA;PPfbUnhMOPgRR?Y+aEkV?SoX39G!}DnUN<5Znf>jOvJv#mx+w+#*+7n4eXRb zF37wdTK1!_sv71*mFg#_zO|_`s|4ziZNHjNos4=_6`l~B)!8lBc?vFlBYN?wn%~Pj zBkeA)8EMa}Y$84jAnxa`MM%sXe9(c>MUxV-J#%8zkF~uiDW|ck9r^+>pSo;mUY9iJ z#ZFl-$NjtM)toyre4Kk=?)T@Dw6Wi=-D1?O-I5dReuH;ElSa>+G>%mT(+DVrR2qz| zp>q70#AsGlyP$Njg0!rq`YZ#zR)*=YLYic^-YeH)KO^5_@8_XZIO(QoBW3@kgd(*v zY-1Z0u^1O;+!p6g!WycA$`6^%97TVw*Fw z{Olw0-X;$Mh#m^o1y*BC)Wxv3@Za>KIk5<9bAqeoJIdt?+(bJ2L zc5Zl(n*8lQq$2PZZQQy{BAD@UK3KKPsInjhTBt+IYM4aofma>f#Dh1Y6TF17RW{1! zpIr#S+S7mH_dN5(aWGu?_G(yC=IqW5q;4rTJoXG6Y>YM4`-Hp~R9~Ne+m72dK_*|1 z+xBm%&IL{L?7!y(qXWLVNT8x1F|)@^1F9uJc{?&xHACk=K^F9mhBV2SCtM5@@a-?y z@P$kRQT<<$6F0x2MwDwnulKLUuteOL+CsxkJt*)eWxH&j(|c@fbotCZ({fgC8wx3v zOtAoR>&?t-^o7+X*7%R5XKj0Uz1jG$g7)Yq))-q2*;pDWEP$0@@sBMivCi)4olKS; zwts`O_uqq`MV<84Fr&UB zvHM^ZYG7)-#ja$%L3cf6>bAvB=|^OOXA52tEptL0-ZtR9u=r{T0y(nF!bJtND?_{G zLN55gm%V<$?8s(B+s2mi*3TOJ9sFq#+}O{C|Ad$@`MKnh{EzH&NoJm2{Lh6Z=&!#xFoFGHdP(Q{A5gx`_p+gOl9+G*%e$_w zFDD+P038tu!S;n;@1+Dh2g>;b!OT`4=sy`tVX?G(%V0*JNCufUX_EDYN}zkwhy@fC zR#M`Td=`U-r!QRl9dbtCCf^bQP3Ae=$1x8aFKc-xFr308xKC>de6`TAM^YwP_5Fbq zW2O@0GV`eAKG%swLZ@o=iyn7}&Hl&GE0jWreejM@vWY%>4p}0*ejuyHwB0vh)}myd zTa?DvER+HN$mm`YWbw$PUXtPQ5HkP78`G490gq7KJ2c|Hb}f$Sd`(hciAs^TFqLB9 z0Zps;0j*2!jH2!xuIvNW?ShTDM3v8%61Ufvhh=CAvk+rt6eA+mIwu~+gqGqoS@`Rt zw;7`SOfUeY=y{!eSnQ3M!Zu8;XVN_~*zXaMquZhv#&_Ku0*tJK$2#O^j@}Ly$s1Hzv4t zDLiq*NnHqofmr{n=zfXw``&3q4UGq7IY80StUYssu0!=|8r@Kwd$VNk&9jXaAN+#qe}?96N&13 zf^sKoiqxjg#_rKasJs(u))F20RR1$*a~)1ZbqiABdR1y$T2kVBSK3HwYr0vv)|a&< z50Ule{n-$Wy4H{P}Y+Lo>ScLl|?|Lmq{LXJK8MnTK6p4ZSR$3*)o9S2{N z(7+=@PaBz?lF$GIeK9Xw1#tq&;?~l>6@_&HkG*$w>JydY^r;$hC@Fsh_f@AK@P6`Y z6DIUWf3<=DGKr1k-BV$%4IOqm*m@E0z7Rb(68Gl1L5`4}fGkOG8+R;@wvZ;Xi|MA< zJ0ydD6DYiSnORe4XcCr6KDif;5{LuyVi{$eN|a;an>ykqgg6+#BqV?*nXt?76rf7_ zl@y;_%W|YEiYU;6jsNn&WTcDBedEk{qzj+_QghYm$7oC+TQU*&nsgjzL*gZ1Jce0^ zXHODkhq>Lqr>tQ=5_<=@{qjN0eJvb(j?2UfxobY+L&jfH9?`fj6hHnXtI_>uI_9;= zd({V>|FW@eUnrXBDG~^~Ohw)NVKVa0<^E>-yhX=Q_o8|yXU4V6fU^A&Q~L&H)k^o2 z4JuI#+H_lV>l0hTXrt8?+l=Vx54UhA;kFj)PD8>&K|wXXFr0gU)_NQ4v6kk3TRN4q z9_GGA8>{o?Ipaf9M12feB=D1j^p@1q8+nq^y&T?^3y}wr5CA>W+dRQ3$K=EB7f%5( zH**m2M7?PPV?!ccIL~tz+iiz2`;q{e`icMlqfq?H>O7k5s12 z#b@;BAL`LKs+e~PO5o9{0!e+k5Inxxc)0RYyu~hZ!wK@9w52Sg(6Z=+wD086KOQUG z{HbRJ5`Cdt3@%`vnngWuVgBSMTnH{hv>;t%FV}{dwAjkfm*h-6&YOubCXj-x29bVdO{u6hyqSk8YI-JCbHr!XQxj45PQ+ zj5xEvbyV|Jtc*QN2p?rYqokjhBRwa-I#hd;Q9MdEWfZ6$vpIujMk>4g7MlRFr*Al#{|%wNrAF=a6ky@cQw2mF z_E=R6^;~!7e479u(i6vME5ObgJxQwX=($@my2NY|;JK_E=Dw=m`Ol!^jD;f1=2{*b z@K~8oFplc=54`%?eu+5-Q?SX-M!<@;$1k{#5-Xpn*?)RcXSPM%RhpFhkDSHbwT8gL z6Q>&3(kNnwo3QVPIaE&{qvEPAoBQ?*C?NHGW}=CU^MT6NcxN)ulni>V-ti$Rd?Y}qV54{fKkUM)Bur5%>cm%2UCNl zZ}q=cyK%3C_Xm>9w&&ckw$E^}A`n)Ig{-RwL94Xb?=G;<9|@$FdKSYQ+D;f zrn(5vW}fwR6Bdm7q{6nk5H)%eCEATCu~2Yu=@g{s)l0YW*G_pWKi2SWrS7;tYEZFe zq#cX<$Hr2L;C|SdpB%$#=>pPYSg%DCeJp(;LijHk=Y-Ppw}u}Hh37I?G+}h!>x(nv zb0X~kfN4AHg!4*6=p9y^b<*nUnW8ZHUxL;btCN z7tx9W(Hn6v8^x=-%7{F_`5Mf3bN%x>0vWZ5rU2mU{6dB41fr>S51>G>>xx_KSa5QR z8Btx8N3C-|YD_j(jg2JPwpf6ctX~p5%4p>@&d46-t4LA0!6r`G_HD|p8DDi4?L)_? zT8h}2p6~$ln`0+qBfv<~q1lRIoYAUff|0%8|Mhg1QCWQ7+gDQRzHgcX0@5HzcPov6 zbVzq2-Ed2HiF62pfOL0vcQ*(E(v6gVe&6-1XV$gPo;YjGc{49&=Gvc4dKdL=nH`a< z!L)JHaflOB23Pq$jTp5HIn#m?joG5+1@n|V5}dG_NQ~0dA9MR@J-g{|Bb+as2TRPt zm#t`rO3VtEt@56Z)Ej0Z2TIIV9g9GM_K2vRjKDM#5hX_HOC|g5tR}YFJh@)Jw<-qN zJ-9na4g&IGO)&MBzr@FtI4QNaHq^2?h3I#JS!JcavyGfGM&@NVi9#BaUmpe<4!WpB`RtRN*vZbP8>>6$w|Riu90YvPW|vvtoP&V&-1Ll z|HdzB!ZR>m6UvU%E7;5`OvHB_NY(Zh!5_^vr0Lr7szhAbmzVnM>%xSqHI#==J_Uec zyZfcUpl~A&x9q++EzYISp%bmy^6pMia53$_B#V;!40&C#7h;Q@12KIe)j!nYvm^vx zj8HBU2$~#PFQU*5=}##-q`_5q^`J3=6!XGx?Q) z_W;REANO;3hq@Iw|JRXV1j4Pbo8|CM>MsdDhGbGDKtqjUIW=k(_;J+ZE)E@~bb z7qxB?cAH;UY*bvkY|etV)i46#e;XstUFt^Wgv2XqnY2`tU&}3srB{a74wBv2cXb90 zNVse#&`i2rjrd87^cvhHB>TTw>*u-CT%IrLWLThBaBI2)V#3K=^Rc;j9=IavNCFZ*-j_Z%pUfGs5W#yD5ZP@EL5wZ;qSZw;hMS zl-BkNlw-MJ@iE1oPQugXz-r!&x3mF&w=4u+wnk-$=(V8aFI)p`899l_8B&O+nX?WvE)z&Fkri?iNFwo3*%_s*(dvjgyQsw|YeFhzH-u>DWYgvKh=o7YR)ztP0el*l!^m#Zp=D#7mT~l;>tTB$eS*>sk5{ zd66&lg}5>Xy{Q(wso;jf){4f|H#kuSlYIEq=F&t3IU})j_8%1qL;q&Jk(}`UF!kYl(6o(I|PA2Vi9PM<7 z1{6?M#0Qh?)_Ti>Z?vq7Y~pbiISIOel+S!%l!Mq+0+y2#w9lVck>FC-JHA4EE^;_a zRBK_()Wn67n77fKRhZm)kns5Z=ETt3qtC$i+1fH2QSmhQHD2%zL+OYR@)N|RKhvMQ zBUWhppN4DRTV=SK76O5UiBk4_oR1oP1PCaIEQ;G8wl+r!0iWw7H(NScShCybP?E=*){)oa z@SWc3w)alD*P8BV56SDZy(SeC-Q+04K@CPPKhF`ijOsi1_Qo=2dtQftV&1L#<0$>&ozC|-#t7C&a91bJha5^ zc*9g0!yi$iooOZ`71X(*{5QLl6(%*r!88#>xMi%w|jnawj| za9gIi*+%At|J}JJczfOUicoJMw=K4t${zO!??6W-Jcx6bF*kW>sLHh*W<0Vz)rn$? z7eoymL6@X=#%6TJ#w+AalHfg;LDvg>%iK_>iL}<{InYzQWkkR5n>pOD?Ae=EqVTwb zHX>t_l4S;GlnDGZJ*N4K%}~U$o?&|eYwi}_?!2UOcyXery0@eoT5wec)XPHV)?(ry zaT7H;Ey~3C{VC$Gku%NouB=H8qoJe*&cv=PlcWYEi7o?Iqw>Tqr_~QRjQ99Cj0usY zs@#prO%rd7gO~%}Jsi#~P$n5(xG8V3FPE}@E9_)fMAlkLVq9$18Nb@buJPepqOE$_ z+CXiq506$sZ>$xO$+37FUTJYbZP)otWkpeJ>WO6Ah9DereC7DX*%x^fQ`^~>X6A1~ zZ~h{uWPO};Zhl%sD%FpS4}nE2}~ujOGpe+F4|YSG z`s9B|$JLI}cqpv;L^6M{gz}2utpN8r9}&|yQq}VumhCAwRIh}rfi5n_ReB6hD#8oN z597`seRC*xqrls_@vV*TH{6@ZU4=K?Y^S#2^sVxhH{3FtOVkmc;+b2MnOceX#DCLX z{6;6}5=d=eGTL2K)v__GoPViAkmgkRY7ZVT^H)bIeayuIk@V$T>+^=~*}u!Y?!jK{ zD#&^m)mVrQTB{EEbZT?;Q}31M>gO1ZC_4Ci+0HN;nkVH+X~UV0My{#=L7Ce8;@u$IrwjMcL6 z->TaVgWF0$xV~(u^BPR$=rgJ-A6tWJKE2PqvQ=8F>zQn|ns{Akd0zNHRrg(O`i7X| zqeRA>K1z+~5=577s42SXl)o!#r%*YBeLW|KKi037Uo+o1$YmbCF#Qk6_Z))9B?p%FF^5Fq?K_#n1Eg=MRq*_kIYVV9M0HIO8)fAgh)ZNE@V{=Z z%2mBijUNyfTTIh3t+Q-zdRJ6;yHjjg>9IJgm|c=-A&aVAM4*GN7p z%7ybE>MJD2MZ1?RA_ z@XRh?m(g)MPwhR)6&GXxA7s1YH{F%lGx0{L5Xe$5ErR6G59Z&|j`ZhJeUaf{-;*|( zBu=S*M_Uprv((QSVUlXfK0=&grjVyaI~8f794S{No5vS8%q?lAEzZ6~lwup#Z!^_z zqw=4s;ue^{EHK9}l*TP6P{K3o(Zp`(O$59jwM?1=2HZnl{}SyLu)jtsI)dnY-9T7~ zdoaR5I{Qi=n{VPL805sj=6i6-5Q;`|At6xWGch$zm=Yq`(t&mynweNUZp}vQwc2lgE)-fD97H4G6Wy>pv9RWCOsl0l2e==h`j7bm|2#`(wH)5Hjp-sw> zF>=>pwQ&Wy)^wawVr_7IkMTlrYZ+!qA-p&o<86^xdyKI#gdgpH|Fkyb-Q-Qm+DvZ} zJ=f^QfRHiLoohaXG^P{}hcH%CD#>U*0ip%i-7>fNdUyEj5zjmlckD&%T2#{7&ylF_ zd{$TMM6d3WlNLf0w1<7kk7{BOAjy)k4bf@*3qA&tLLBCf5BpvLjte1mUjuZc9kVHn zCJS8it_};X;H3_9g>^JWVYl_7C8QcMD_^$I?st^vBAJ?@AB4eaGcUadS($xkMX+Fu z6LnUd+jvjRPKMv8?e{BJlbWQ2R(&QPk&md1-Xcd{V|aG7Q2PwUpB~TM^Hx^RzujPS zS!}QnJ;#>6XSu;m^)u45KZ<>Q=}#z_$}^_I6Kd8ZpP~QoNykW+0ij&v2;auE0EBpP0#o28{I9(Ls|7u{&S^e|8l5DOMsZAUBhWfOhR_YGMmV(%GL|8X9kQ zhMySjHr2x((e5+38$FaJQV5YVJmPjEYiWK-_ zat39K2fx&2g!R-8esS56mklV~)};I7W}LzKpQiZv*som>+x1S!uhVn*w`U)pkaX_a{%tb3xr2? z@$-~|AUem7p}QFEZHn%_P_f2UCiV!4YR??cCB2+WjM*k}l5g&(@lm)lF?~ zu-WOS_u8Rrqd#eVSml&6;Z+OA0^tv>RP)CI*g_8i!@g@BN)YJV3y5op6Pztqz~dF1 zFLP7URhF|-r64z!gQrrZGA;w1Sc}jOnlDZz5F}|vU|M~TN3^hV8Fl)*QM~u1dutos z;XzU{nq+Gml0cI{Mb1yQ6!r6mgyiEgo4=3fpO^=?F#PO;Y~XLq?yR+I+j=b+6GpJC zbm3HHw6cvg>oNgG#`EZv%>_70&?ws^Ee4pyrY);BQ@2=D> zDAKa=nBS)x^Y+Yg!ObBr*$xN(#Gs5BT{VtejR(k%K2VSHg_-NhC3q;ZR&&|S#5J=@~)v z^xq61ck$mu^o-)m?H=*6sl0uB?wW{P&3XEw2ep0yk%WG<`7v{(c`(VZD`N6@z#2wH zUcjgOd>5}y^6rIm5%^6WjrASKJ2a=XxJxOnom#%FYB=E-zE1A|t_~eXn0ll*I28Ao z#k|+UfyizTCGm2+45o)0F{?^$k+hJ%mhYi(yr63-K@!u_1m(Xz{ae=*N1XokJPpb} zphM6KuOSp3D8W6&?#Eh#pN82*iwGP5(U@XkAOO8 zL(DBUMY=KE@Xe^9CWZv^urgU_#M0fU2Zr(Qw4jCXFN=cjZsY#FJKoXA_|xv8ggVN| zZ@)U__hX@>Fc)zLnUr_TdA+$5amR;L(JqAdcu&-9tg#;dmvQ4$m@@YEb*e|kEIh?! z2@$z=oskZ#)=0-dn~iz*Da04U9XjU27zMLGieLZMx1X8SkQ)&Chu=g_MQB@ouF-afrg^RJ6woGm3m0&6oO+yw zvyE`1VS80EZhZ4v2d8dH$G<~6-zar{Zf(Jk7Q$-IBTnZb zWB(;7IlehpVBkFk={Al1m-00!@oOLjzfK7~;t-W0xdD=|7)!H%`ocs?BfdpYKIq`= z?SMEGylp4*&&#na?qaPc#P5<4PYE_lh3^bf^bI6rEsgZc68uuVH!gNYnwYqcE2o=> zQhvul_A5C)S07Z?=?>T|n0oZBmVFjVW$?S7M3qrS{rTrMq5qsQY)6AHQ_{NiY(1q6 ztGjHyn>$r_`j2s29wKPInIEFxRcbX$DqolApWZ_|yd`dXYDc*Ff_b28L4dGOFlexlZ}1?2j>L6#lMwp zpQMDfGzjZ=sqjs6=ydtm$>GhVXE)y)`qP(gl%N%R^UBjsG^6-x{P4(_XeRUf?UM4_ zMd7?r`rI>^wgjW)WRw3SYTc;RICjh^RkJ-#r;lVQoI{^tYl2hW)Q;Y%lc$-_Pz;Hu zo?r!*(T+7v>AKK~6}c?a1Ro_~RnF6;TRj>E%l5(NAEVb@h$&{#BJ(WROTsu#a#r()7{MC`)#e&-dC^9Vg;g*_mP^04uvdbuR$a`Lo1y_^}$NS%jA69l^8 zw(h4)E_Vx+H7g+NSlV^w2TEAleWz6X(GXVHy{%%RlzLn+=}q@~#7)k!H6n|1Ell=Y zSKTuA`N%bE)<)IKMYg!(9*1AoL}8sGv^eSBH>+SPD1uvm3}u>7Qs`e=lt7p4zcfw$ zRk9Itug744C0WZ&1Gu{LNpk-`%RX^m#ptm6S7f+<-wM;71vtxXp(cCpe>`}{Wp;1D z;}JoM-+)|*Yw7=oAQ&MRSGDe>+xoeWOM&;7Ux^&)@{}u%QHisbss*X52!t87%s$*B zJ2}hl-`vt%fBCe%rfZ>zi&XQN8e>hH)Jfvr39Zz~ZAz&(e)4~8M~z^Wv$CvFAGhS{ za2yMn%nh4sZwizD8c1Ir&72$9J783FHRCxUnmbF~AHtP+ob!q@$BVmj7d_g=f5;aw z+K2ekXE+zO7{{7;(4H%}yiT-Y4uLy5uQD#km~nVrdo^jZE2T)&E}tqzId0M&Lr%C| z6}k`3y0z0+ribBQi};^!w|0)M)mv^E8Mwbs`RqvEK-#}jDp+}l!^lo^^sO!4Y9b}t zj-m%yBSD)AjkxIUKC_-R?l|w->~QY@)1={gc5wrmX6`+@9@onjmtu@^lDu7POV=t1zk_PWLn%Ij?A2xX)*HswhnBlvx=@ z!-HSTKW1B8^nL<$^*}}v|YjZXPlr?lqo?uUt&Kh{*De;^Al7V$x;4oe_D3hzt3J zQ?j?`izK^-Fu{ZDG+t@DPtayE4pi=B6~C`j?qVz>7h!K{6mNg&eS~}84X3mcBY8#W zx%;Z^X`E&+l${Y8l&2_A?^|BaW1zUL;y(5tW*xnTf3hil&x=*bGKi>eGM)0rIkP(U zAg{5|(W^K#&oyM4ud?&7 zl1HtOa^y3f+^$<_`-MPlPi_s8MbY%gmwo9v_Yu>ehbJeamQ|Bq_4MQP^ph>kFK+!= zl=d!h;k%c{7q@#Cw?R|;gkgH{nKN{J_Xpd=Ig#PB+oHrd{krDIjYOVjZ^{%+c|=Wk zM5~*hs}GUTmy`6*V@)q$VVd(iS=HV)Zd;z9EHHgiOy0&)e)B2T&Lg1n&9U&RrkSE~8w;(jIa}`= zkC-u?p7TMTY$DIJl}8tnYZpZ@wi7M-@|AC!K0YRl-B23`bxL4?_qK!|V|!?di71!==imuhtCO9YeRJ zNAJ4V$`11vBKdCIxs+9sOg5+)xj9LOqq`{f{k>QJpGjJ@6IwR+cxQKbeCLLIIMS!e zo@jCRc-s@&kd8DPKb{4YPmc7>AspO!?OvLJ*X1vc4H=uIklbTf-D7r7$k0NrrK#Oj zRNaHvn;E#>RXW$@E85eH0(g**4av2&~*=D4NlToBPDwW5Q0zsyfq{+tWtZ z<>xl!p&>j%IL&=C3`Opj++gijEkjXXS6(q$pM^z=8gBTm0}cF|F?F)4$@{68ka65PQOhL{mHm=VR85uIT3$1k%P zhAuwJ|D+!5gdFSyx*GVq8a6O@B#n5-I$0Sw(#?%|St2(CNxD4LgU>s`=oqV<6()Qq z0`q^;2Fx%bW&=#ZT};A24jow7#=8u|oKE}fsEtn6U<_MK!jFI%)4aalc)oyLhx$L6 zm})YyGMQmUxCHlXU`9}}=@hda=p1o&n}$Z5G7}+F3Rl1FCK=}njo3(!M0a32=r0%3 zL4YB;?Nb0(iN(?npQvR<+AD{m2~n{bO;n2w5Y>}T*9%U28CC*xxmf1L5}6jFfN+tskWc1oTtsMK;zy ziaKXyH8wsn1cw`cK)L&HljE=;g_Ao|ulO-*)V`F!*0QEvv2n3cu~G6_U9g{aPJlKp z#7>^t-dfH6?_c)%8g6^*uJ#hOj*=O|hB->!<2WQcQvV^fWPfeC|74D=LHn7}czw{> z-gIMqkkU^ZUIuwRbK38@l;!9%pXDgTF9V;57kX(|8d{l;Y`Fh}#9q-7MBBiC9Sk*r zq&Q$O3ZW}1azip>qt`x|goPjFpk8PRp=i27Rcjq#U7S zoISl52Gm2)TmJiF#dvPwj(Gr7>||i@9*7l(Wex2H&swyh+BfXCICJiNmIa z5}&YXP{|%3gQ86H?5B}vq4O)X4bei%=Reg6;gW;2YPQ<D%>-@qJcuGCZsvj>-^)=Bjr}&U7hc@1p0o*O~u&pFB1|l%BT%6 zStBRbM4Fb2R&uACzA+!rUU^nRmTn=l&U52#rUIuz zi^e%G;bdkb@=ZzAHQ4H_M}bP#;X-?RRvNaO z3>q&wxeSlapG!ss(0LJOWGm3!-oBWH`Hq(i>?P6|Wugz}#=qu#tN;2%37YX@;w!9M z6NBHa<|3Fi)Qz;}n7F#}9DXkf(4y-GWoMB(v@hCqkIqA?@TsLLy=81Ja|leVYt(oj z>fs3)zRQK*e3#Kt^N!Hye=63Mly9t*rO7euW#s3$#v{SMq9IWce;UNd0Z+fEmaQ^E z+dI_cXVC#+A3UAo64kNg*8EktJaGSar?lvz2W1qf~&j$ z{{9lf$2EmL*rvkCnygWjPEp&?tn5{FQ~MO;-6zr|y^K|yBD?u7(&}RFzm`+9R+Du% zJ0^5b-mIERbjma=#M71LAL@K9rgY$2M*a0u)RhnS)$u52i1+H1uKRi{4S{T!oyZd0 z_7S4tL%}YJ<-^~FMB+^F#+P@w_{^&=j^I>r%2Z6|) zZhSK`J3|!Xh9D=b(re+c$Z$uL6Hhw-6?@sF(|uF6Zmwg)$Ai)3DFu}klobK;M?@EG z+~I)3rk3GPk#35Jxa@}@LYL(nKarj+#jg(Dy#W^(U@8W zypmPb`jbKXZ!c#7<=R=L#p0HYF2P?kf0d+4D|%}A&+L0$%`}d_kv{ylm|{zCqo1&0 z`u4mLt)F~d=4}0z?cf&srXIsv{iT&KMn*LKu=#1b$P1OcW(^|mW7B}+mfLkN7R*+) zK`)10N;MmnOidX5v8htca&8>Xc1srh>+P1&ZrGq##!sfc5YDH(xAFCw|Gi1?-Dig~ zN4g{GBFz3l!c*bX2zT<#$8oq)Ee8D(7<45yZTif9LZsvGOW`qzxj1a0dsMo0wH%^8m&BYU?BlF4en~4 zj^XRD>^cFpxm9k3yZ5>-9)`A*3$XQ8YZzmJSTo0n)LqRxfN10z>cVEczE85fchC=`vdI2 z8earm1UM#uU;zj*fRF$PEr8Gg2q%DW0mxebc?TdL07MZ$OaR0bK#~C@1wiruBp*PE z0i*;#>Hwr3Kw1H$4M2JUqz^!b0b~R~rU7IIK$ZYx89=rHCcmRqIpu_-50-#g?N)4b40Qwq0pGw>L0hA9wMFCU{K&1gx z96%KTR0TlQ08|q|0|7J$Ky3ij7C;>U)Db{E0Mrvey#Uk#KrI0@3_zdm@)HHb0ki=?I{&%n!i)0W1)}LIErsz@h-`3xFj6SR#NW16VeIeFv~~0BZ)YVgRcI zuqpt{2e1MF>jJPI0P6>^F#wxvjWfGq>q3V^Kv*d~B&0oXo(9Rk=HfL#ID z1%TZE*aN^u1lULb8wFrv0Bmf4jgthB5txu(18l}58Ds=SUNwNN4zM)=widwF0ob|# sTOVK>0BmD`Z33{(0Jb^6wgTAJ0NV~=e*)MJ0NV**`#wvWMMn7Zf16cN2mk;8 diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index 41471e51e28f..7508b371c958 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -3584,7 +3584,7 @@ port_command(Port, Data) -> Res -> Res end of true -> true; - Error -> error_with_info(Error, [Port, Data]) + Error -> error_with_info(unwrap_err_tpl(Error), [Port, Data]) end. -spec port_command(Port, Data, OptionList) -> boolean() when @@ -3600,9 +3600,12 @@ port_command(Port, Data, Flags) -> end of badopt -> badarg_with_cause([Port, Data, Flags], badopt); Bool when erlang:is_boolean(Bool) -> Bool; - Error -> error_with_info(Error, [Port, Data, Flags]) + Error -> error_with_info(unwrap_err_tpl(Error), [Port, Data, Flags]) end. +unwrap_err_tpl({error, Error}) -> Error; +unwrap_err_tpl(Error) -> Error. + -spec port_connect(Port, Pid) -> 'true' when Port :: port() | atom(), Pid :: pid().