diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 6ada72b7654..06b40b50b13 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1906,30 +1906,88 @@ struct HostFuncImpl_test : public beast::unit_test::suite } } + // env test logs don't check severity, so we add it. + class SuiteJournalSink2 : public SuiteJournalSink + { + public: + SuiteJournalSink2( + std::string const& partition, + beast::severities::Severity threshold, + beast::unit_test::suite& suite) + : SuiteJournalSink(partition, threshold, suite) + { + } + inline bool + active(beast::severities::Severity level) const override + { + return level >= threshold(); + } + }; + + class SuiteLogs2 : public Logs + { + beast::unit_test::suite& suite_; + + public: + explicit SuiteLogs2(beast::unit_test::suite& suite) + : Logs(beast::severities::kError), suite_(suite) + { + } + ~SuiteLogs2() override = default; + std::unique_ptr + makeSink( + std::string const& partition, + beast::severities::Severity threshold) override + { + return std::make_unique( + partition, threshold, suite_); + } + }; + void testTrace() { testcase("trace"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); + { + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - std::string msg = "test trace"; - std::string data = "abc"; - auto const slice = Slice(data.data(), data.size()); - auto const result = hfs.trace(msg, slice, false); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == msg.size() + data.size()); + std::string msg = "test trace"; + std::string data = "abc"; + auto const slice = Slice(data.data(), data.size()); + auto const result = hfs.trace(msg, slice, false); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == msg.size() + data.size()); + + auto const resultHex = hfs.trace(msg, slice, true); + BEAST_EXPECT(resultHex.has_value()); + BEAST_EXPECT(resultHex.value() == msg.size() + data.size() * 2); + } - auto const resultHex = hfs.trace(msg, slice, true); - BEAST_EXPECT(resultHex.has_value()); - BEAST_EXPECT(resultHex.value() == msg.size() + data.size() * 2); + { + // logs disabled (trace < error) + auto logs = std::make_unique(*this); + Env env(*this, envconfig(), std::move(logs)); + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "test trace"; + std::string data = "abc"; + auto const slice = Slice(data.data(), data.size()); + auto const result = hfs.trace(msg, slice, false); + BEAST_EXPECT(result && *result == msg.size() + data.size()); + } } void @@ -1938,19 +1996,38 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("traceNum"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); + { + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - std::string msg = "trace number"; - int64_t num = 123456789; - auto const result = hfs.traceNum(msg, num); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == msg.size() + sizeof(num)); + std::string msg = "trace number"; + int64_t num = 123456789; + auto const result = hfs.traceNum(msg, num); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == msg.size() + sizeof(num)); + } + + { + // logs disabled + auto logs = std::make_unique(*this); + Env env(*this, envconfig(), std::move(logs)); + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace number"; + int64_t num = 123456789; + auto const result = hfs.traceNum(msg, num); + BEAST_EXPECT(result && *result == msg.size() + sizeof(int64_t)); + } } void @@ -1959,22 +2036,39 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("traceAccount"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); + { + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace account"; + // Valid account + { + auto const result = hfs.traceAccount(msg, env.master.id()); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT( + result.value() == msg.size() + env.master.id().size()); + } + } - std::string msg = "trace account"; - // Valid account { + // logs disabled + auto logs = std::make_unique(*this); + Env env(*this, envconfig(), std::move(logs)); + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + std::string msg = "trace account"; auto const result = hfs.traceAccount(msg, env.master.id()); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == - msg.size() + toBase58(env.master.id()).size()); + BEAST_EXPECT( + result && *result == msg.size() + env.master.id().size()); } } @@ -1984,46 +2078,60 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("traceAmount"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); + { + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - std::string msg = "trace amount"; - STAmount amount = XRP(12345); - { - auto const result = hfs.traceAmount(msg, amount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == msg.size() + amount.getFullText().size()); - } + std::string msg = "trace amount"; + STAmount amount = XRP(12345); + { + auto const result = hfs.traceAmount(msg, amount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(*result == msg.size()); + } - // IOU amount - Account const alice("alice"); - env.fund(XRP(1000), alice); - env.close(); - STAmount iouAmount = env.master["USD"](100); - { - auto const result = hfs.traceAmount(msg, iouAmount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == - msg.size() + iouAmount.getFullText().size()); + // IOU amount + Account const alice("alice"); + env.fund(XRP(1000), alice); + env.close(); + STAmount iouAmount = env.master["USD"](100); + { + auto const result = hfs.traceAmount(msg, iouAmount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(*result == msg.size()); + } + + // MPT amount + { + auto const mptId = makeMptID(42, env.master.id()); + Asset mptAsset = Asset(mptId); + STAmount mptAmount(mptAsset, 123456); + auto const result = hfs.traceAmount(msg, mptAmount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(*result == msg.size()); + } } - // MPT amount { - auto const mptId = makeMptID(42, env.master.id()); - Asset mptAsset = Asset(mptId); - STAmount mptAmount(mptAsset, 123456); - auto const result = hfs.traceAmount(msg, mptAmount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == - msg.size() + mptAmount.getFullText().size()); + // logs disabled + auto logs = std::make_unique(*this); + Env env(*this, envconfig(), std::move(logs)); + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace amount"; + STAmount amount = XRP(12345); + auto const result = hfs.traceAmount(msg, amount); + BEAST_EXPECT(result && *result == msg.size()); } } @@ -2058,28 +2166,51 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("FloatTrace"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); + { + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - std::string msg = "trace float"; + std::string msg = "trace float"; - { - auto const result = hfs.traceFloat(msg, makeSlice(invalid)); - BEAST_EXPECT( - result && - *result == - msg.size() + 14 /* error msg size*/ + invalid.size() * 2); + { + auto const result = hfs.traceFloat(msg, makeSlice(invalid)); + BEAST_EXPECT( + result && + *result == msg.size() + makeSlice(invalid).size()); + } + + { + auto const result = hfs.traceFloat(msg, makeSlice(floatMaxExp)); + BEAST_EXPECT( + result && + *result == msg.size() + makeSlice(floatMaxExp).size()); + } } { - auto const result = hfs.traceFloat(msg, makeSlice(floatMaxExp)); - BEAST_EXPECT( - result && *result == msg.size() + 19 /* string represenation*/); + // logs disabled + auto logs = std::make_unique(*this); + Env env(*this, envconfig(), std::move(logs)); + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace float"; + + { + auto const result = hfs.traceFloat(msg, makeSlice(invalid)); + BEAST_EXPECT( + result && + *result == msg.size() + makeSlice(invalid).size()); + } } } diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 128bfa446f9..de825658d12 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -383,9 +383,12 @@ struct TestHostFunctions : public HostFunctions Expected trace(std::string_view const& msg, Slice const& data, bool asHex) override { + auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif if (!asHex) @@ -407,15 +410,18 @@ struct TestHostFunctions : public HostFunctions j << std::endl; #endif - return msg.size() + data.size() * (asHex ? 2 : 1); + return ret; } Expected traceNum(std::string_view const& msg, int64_t data) override { + auto const ret = msg.size() + sizeof(data); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif j << "WASM TRACE NUM: " << msg << " " << data; @@ -423,15 +429,18 @@ struct TestHostFunctions : public HostFunctions #ifdef DEBUG_OUTPUT j << std::endl; #endif - return msg.size() + sizeof(data); + return ret; } Expected traceAccount(std::string_view const& msg, AccountID const& account) override { + auto const ret = msg.size() + account.size(); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif if (!account) @@ -440,15 +449,23 @@ struct TestHostFunctions : public HostFunctions auto const accountStr = toBase58(account); j << "WASM TRACE ACCOUNT: " << msg << " " << accountStr; - return msg.size() + accountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected traceFloat(std::string_view const& msg, Slice const& data) override { + auto const ret = msg.size() + data.size(); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const s = floatToString(data); @@ -457,20 +474,29 @@ struct TestHostFunctions : public HostFunctions #ifdef DEBUG_OUTPUT j << std::endl; #endif - return msg.size() + s.size(); + + return ret; } Expected traceAmount(std::string_view const& msg, STAmount const& amount) override { + auto const ret = msg.size(); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const amountStr = amount.getFullText(); j << "WASM TRACE AMOUNT: " << msg << " " << amountStr; - return msg.size() + amountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index b7ad172f2f6..10a5f99e21e 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -672,7 +672,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 153'534; + auto const allowance = 151'512; auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); if (BEAST_EXPECT(re.has_value())) diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index a5624b1df01..3183fc845cf 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -248,7 +248,7 @@ pub extern "C" fn finish() -> i32 { account.0.len(), ) }, - 47, + (message.len() + 20) as i32, "trace_account", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP @@ -261,7 +261,7 @@ pub extern "C" fn finish() -> i32 { amount.len(), ) }, - 19, + message.len() as i32, "trace_amount", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; // 0 drops of XRP @@ -274,7 +274,7 @@ pub extern "C" fn finish() -> i32 { amount.len(), ) }, - 18, + message.len() as i32, "trace_amount_zero", ); @@ -307,32 +307,6 @@ pub extern "C" fn finish() -> i32 { "get_parent_ledger_hash_len_too_long", ) }); - let message = "testing trace"; - check_result( - unsafe { - host::trace_account( - message.as_ptr(), - message.len(), - account.0.as_ptr(), - account.0.len(), - ) - }, - 47, - "trace_account", - ); - let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP - check_result( - unsafe { - host::trace_amount( - message.as_ptr(), - message.len(), - amount.as_ptr(), - amount.len(), - ) - }, - 19, - "trace_amount", - ); // ######################################## // Step #3: Test getData[Type] edge cases diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 160a4549fa0..c7151e384b5 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -662,249 +662,250 @@ extern std::string const codecovTestsWasmHex = "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" "8f9ec0000b7f0041909ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020a892702460002402000200147" - "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" - "0220032000ac10011a0f0b418b80c000410b2000ac1001000bbf26020a7f017e230041f001" - "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" - "0341b2920441c780c0004116103c200041f0006a22054200370300200041e8006a22064200" - "370300200041e0006a2203420037030020004200370358200041d8006a2201412010044120" - "41be8cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" - "8001370300200041106a2208428182848890a0c08001370300200041086a22094281828488" - "90a0c080013703002000428182848890a0c0800137030041e980c000410e1006410141f780" - "c0004111103c200041201006410141f780c0004111103c4181802020014114100722024114" - "4604400240200041266a200041da006a2d00003a00002000200029005f3703c80120002000" - "41e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01242000" - "200028005b360027200020002903c80137002b200542003703002006420037030020034200" - "37030020004200370358200041246a2205411420014120100822024120470d002000413a6a" - "20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7006a20" - "0a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a2d0000" - "3a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20004138" - "6a4120410010094101418881c0004110103c20064100360200200342003703002000420037" - "03584181802020014114100a411441d48cc000411c103c2006410036020020034200370300" - "2000420037035841014181802020014114100b411441f08cc0004114103c20004104360298" - "01200041818020360258200041d8016a2203410036020020024200370300200042003703c8" - "0120014104200041c8016a22064114100c411441848dc0004113103c200341003602002002" - "4200370300200042003703c801200120002802980120064114100d411441978dc000412310" - "3c2003410036020020024200370300200042003703c8014101200120002802980120064114" - "100e411441ba8dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" - "2041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028029801" - "1012412041e081c0004117103c20012000280298011013412041f781c0004127103c410120" - "0120002802980110144120419e82c000411f103c200541141015411441bd82c000410b103c" - "200041e0016a220442003703002003420037030020024200370300200042003703c8012001" - "200028029801200641201016412041d58dc0004113103c41c882c000410c41d482c000410b" - "41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300200041" - "b0016a2008290300370300200041a8016a2009290300370300200020002903003703a00120" - "0341003b010020024200370300200042003703c80120054114200041a0016a220741202006" - "41121018411241e88dc0004107103c2003410036020020024200370300200042003703c801" - "20074120200641141019411441ef8dc000410e103c200041003602c8012007412020064104" - "101a410441fd8dc000410d103c20074120101b410841f682c000410d103c20074120101c41" - "0a418383c0004114103c200041003602c8012007412020064104101d4104418a8ec000410e" - "103c419783c000410d20054114101e412f41a483c000410d103c419783c000410d41b183c0" - "004108101f411341b983c000410c103c419783c000410d41c583c0004108101f411241cd83" - "c0004111103c417f41041004417141de83c000411e103c200041003602c8012006417f1004" - "417141988ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" - "7d41b68ec0004124103c200041003602c8012006418094ebdc031004417341da8ec0004123" - "103c419783c000410d20054114101e412f41a483c000410d103c419783c000410d41b183c0" - "004108101f411341b983c000410c103c200442003703002003420037030020024200370300" - "200042003703c801200041d894ebdc036a220741082006412041001020417341fd8ec00041" - "17103c200442003703002003420037030020024200370300200042003703c8012001200028" - "0298012006412041001020417141948fc0004119103c4102100f416f41fc83c000411f103c" - "417f20002802980110124171419b84c000411f103c2001417f1012417141ba84c000411f10" - "3c20014181201012417441d984c0004120103c20072000280298011012417341f984c00041" - "1f103c2007200028029801410110094173419885c0004118103c2001200028029801410110" - "09417141b085c000411a103c20044200370300200342003703002002420037030020004200" - "3703c8012007200028029801200641201008417341ad8fc0004116103c2004420037030020" - "03420037030020024200370300200042003703c80120012000280298012006412010084171" - "41c38fc0004118103c200442003703002003420037030020024200370300200042003703c8" - "0120054114200541142007200028029801200641201021417341db8fc000411c103c200442" - "003703002003420037030020024200370300200042003703c8012005411420054114200120" - "0028029801200641201021417141f78fc000411e103c200442003703002003420037030020" - "024200370300200042003703c80141fb9dc000411420072000280298012006412010224173" - "419590c0004119103c200442003703002003420037030020024200370300200042003703c8" - "0141fb9dc00041142001200028029801200641201022417141ae90c000411f103c20044200" - "3703002003420037030020024200370300200042003703c80141fb9dc000411441ca85c000" - "4114200641201022417141cd90c0004129103c200442003703002003420037030020024200" - "370300200042003703c80141de85c000412841fb9dc0004114200641201022417141f690c0" - "004125103c200041dc016a200041346a280100360200200041d4016a2000412c6a29010037" - "0200200020002901243702cc01200041808080083602c801200041003b01c0012006411841" - "fb9dc0004114200041c0016a2203410210224171419b91c000410e103c2007200028029801" - "422a10014173418686c0004111103c200041003b01c0014102200341021007416f41a991c0" - "00411b103c200041003b01c001410220034102100a416f41c491c000412b103c200041003b" - "01c0014101410220034102100b416f41ef91c0004123103c4102100f416f41fc83c000411f" - "103c41021010416f419786c000412f103c410141021011416f41c686c0004127103c41e980" - "c0004181201006417441ed86c000411f103c41e980c00041c10010064174418c87c000411a" - "103c200041003b01c001200141812020034102100c4174419292c0004121103c200041003b" - "01c001200141812020034102100d417441b392c0004131103c200041003b01c00141012001" - "41812020034102100e417441e492c0004129103c20014181201012417441a687c000412510" - "3c20014181201013417441cb87c0004135103c4101200141812010144174418088c000412d" - "103c20014181201015417441ad88c0004119103c419783c00041812041d482c000410b41df" - "82c000410e1017417441ed82c0004109103c419783c000410d41d482c00041812041df82c0" - "00410e1017417441ed82c0004109103c419783c000410d41d482c000410b41df82c0004181" - "201017417441ed82c0004109103c200041003b01c00120014181202003410210164174418d" - "93c0004121103c200041003b01c00141fb9dc00041812041fb9dc000411420034102102241" - "7441ae93c0004118103c200041003b01c00120054114200541142001418120200341021023" - "417441c693c000411f103c200041003b01c001200641812020054114200341021024417441" - "e593c0004122103c419783c000410d200720002802980141001000417341c688c000410f10" - "3c200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22044108" - "1025417341d588c000411c103c419783c000410d2007200028029801101f417341f188c000" - "4116103c200441082003410810264173418789c0004118103c200341082004410810264173" - "419f89c0004118103c200041003b01ec012004410820034108200041ec016a220241024100" - "10274173418794c0004114103c200041003b01ec0120034108200441082002410241001027" - "4173419b94c0004114103c200041003b01ec01200441082003410820024102410010284173" - "41af94c0004119103c200041003b01ec0120034108200441082002410241001028417341c8" - "94c0004119103c200041003b01ec0120044108200341082002410241001029417341e194c0" - "004119103c200041003b01ec0120034108200441082002410241001029417341fa94c00041" - "19103c200041003b01ec012004410820034108200241024100102a4173419395c000411710" - "3c200041003b01ec012003410820044108200241024100102a417341aa95c0004117103c20" - "0041003b01ec01200441084103200241024100102b417341c195c0004114103c200041003b" - "01ec01200441084103200241024100102c417341d595c0004113103c200041003b01ec0120" - "044108200241024100102d417341e895c0004113103c200120002802980141001009417141" - "b789c0004123103c200041003b01ec01200541142001200028029801200241021018417141" - "fb95c000411a103c200041003b01ec0120012000280298012002410210194171419596c000" - "4121103c200041003b01ec01200120002802980120024102101a417141b696c0004120103c" - "2001200028029801101b417141da89c0004120103c2001200028029801101c417141fa89c0" - "004127103c200041003602ec01200120002802980120024104101d417141d696c000412110" - "3c200041003b01ec012001200028029801200241021008417141f796c0004123103c200041" - "003b01ec012001200028029801410120024102102e4171419a97c0004121103c200041003b" - "01ec01200120002802980122042005411420012004200241021023417141bb97c000412710" - "3c200041003b01ec01200541142001200028029801220420012004200241021023417141e2" - "97c0004127103c200041003b01ec0120012000280298012005411420024102102f41714189" - "98c0004125103c200041003b01ec0120054114200120002802980120024102102f417141ae" - "98c0004125103c200041003b01ec01200120002802980120054114200241021030417141d3" - "98c000412c103c200041003b01ec01200541142001200028029801200241021030417141ff" - "98c000412c103c200041003b01ec012001200028029801200241021031417141ab99c00041" - "1f103c200041003b01ec0120012000280298014101200241021032417141ca99c000412210" - "3c200041003b01ec0120012000280298012005411441ca85c0004114200241021021417141" - "ec99c0004121103c200041003b01ec0120054114200120002802980141ca85c00041142002" - "410210214171418d9ac0004121103c200041003b01ec012001200028029801410120024102" - "1033417141ae9ac0004128103c200041003b01ec0120064118200120002802980120024102" - "1024417141d69ac0004123103c200041003b01ec0120012000280298014101200241021034" - "417141f99ac0004125103c200041003b01ec01200120002802980141012002410210354171" - "419e9bc0004121103c200041003b01ec0120012000280298014101200241021036417141bf" - "9bc0004122103c200041003b01ec0120012000280298012005411441012002410210374171" - "41e19bc0004124103c200041003b01ec012005411420012000280298014101200241021037" - "417141859cc0004124103c200041003b01ec01200120002802980141012002410210384171" - "41a99cc000412f103c200041003b01ec012001200028029801200241021039417141d89cc0" - "004123103c200041003b01ec012001200028029801410120024102103a417141fb9cc00041" - "22103c200041003b01ec012001200028029801410120024102103b4171419d9dc000412110" - "3c200041003b01ec01200120002802980141a18ac0004120200241021018417141be9dc000" - "411c103c419783c000410d2001200028029801101e417141c18ac0004122103c419797abdd" - "03410d41a18ac000412041001000417341e38ac0004110103c419797abdd03410d20034108" - "1025417341f38ac000411d103c419797abdd03410d20054114101e417341908bc000411810" - "3c419797abdd03410d41b183c0004108101f417341a88bc0004117103c2001200028029801" - "200141812041001000417441bf8bc000410e103c200141812042011001417441cd8bc00041" - "12103c419783c000418120200341081025417441df8bc000411b103c419783c00041812020" - "054114101e417441fa8bc0004116103c419783c00041812041b183c0004108101f41744190" - "8cc0004115103c419783c000410d2001200028029801101f417141a58cc0004119103c2000" - "41003b01ec01200120002802980120054114200241021024417141da9dc0004121103c2000" - "41f0016a240041010f0b0b418080c000410b417f20022002417f4e1bac1001000b0be61d02" - "00418080c0000bde056572726f725f636f64653d54455354204641494c4544242424242420" - "5354415254494e47205741534d20455845435554494f4e2024242424246765745f6c656467" - "65725f73716e6765745f706172656e745f6c65646765725f74696d656765745f626173655f" - "666565746573745f616d656e646d656e74616d656e646d656e745f656e61626c6564636163" - "68655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272" - "656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f62" - "6a5f61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e676574" - "5f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e67" - "65745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e7570646174655f" - "6461746174657374206d65737361676574657374207075626b657974657374207369676e61" - "74757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f747261" - "6e736665725f66656574657374696e6720747261636574726163655f6163636f756e744000" - "00000000005f74726163655f616d6f756e74400000000000000074726163655f616d6f756e" - "745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f70747267" - "65745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f" - "6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e6573746564" - "5f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f6172726179" - "5f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f" - "7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f" - "6c65646765725f6f626a5f77726f6e675f6c656e5553443030303030303030303030303030" - "30303000418686c0000bf51774726163655f6e756d5f6f6f625f7374726765745f63757272" - "656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f73666965" - "6c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f7366" - "69656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d" - "656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c" - "65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c" - "6963656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f" - "6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c69636574" - "726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f" - "736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d70" - "6172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c696365" - "3263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e7432353667" - "65745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66" - "745f7472616e736665725f6665655f77726f6e675f73697a655f75696e7432353630303030" - "3030303030303030303030303030303030303030303030303030303174726163655f616363" - "6f756e745f77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f7374" - "72696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e6774726163" - "655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f" - "737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e" - "6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f616363" - "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e67747261" - "63655f616d6f756e745f77726f6e675f6c656e6774686765745f706172656e745f6c656467" - "65725f686173686765745f63757272656e745f6c65646765725f6f626a5f6669656c646765" - "745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c64" - "6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765" - "745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f73686135" - "31325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f74" - "61786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f68" - "6173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f627566" - "5f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f" - "746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f" - "66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e" - "5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c" - "65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f" - "6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432" - "616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65" - "796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d" - "6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d" - "6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f73666965" - "6c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69" - "645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f" - "736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c69" - "63656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64" - "5f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f66" - "69656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c66" - "5f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c6963" - "6563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b" - "656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164" - "645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f6174" - "5f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f" - "625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61" - "745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f62" - "5f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f72" - "6f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f6174" - "5f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75696e74" - "3235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e7432353667" - "65745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66" - "745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e746964326465706f7369745f70726561" - "7574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f73" - "69745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" - "64326469645f6b65796c65745f77726f6e675f73697a655f6163636f756e74696465736372" - "6f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e746964316c696e655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e746964326d70745f69737375616e63655f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e" - "675f73697a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f6e675f" - "73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f616363" - "6f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e67" - "7468004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" - "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" - "2d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d657874"; + "646174615f656e6403010b5f5f686561705f6261736503020c01020ad62602460002402000" + "20014704402002200341004100410010001a20004100480d01418b80c000410b2000ad1001" + "000b200220032000ac10011a0f0b418b80c000410b2000ac1001000b8c26020a7f017e2300" + "41f0016b22002400419680c000412341004100410010001a100241b9e00041b980c000410e" + "103c100341b2920441c780c0004116103c200041f0006a22064200370300200041e8006a22" + "054200370300200041e0006a2203420037030020004200370358200041d8006a2201412010" + "04412041be8cc0004116103c1005410a41dd80c000410c103c200041186a22074281828488" + "90a0c08001370300200041106a2208428182848890a0c08001370300200041086a22094281" + "82848890a0c080013703002000428182848890a0c0800137030041e980c000410e10064101" + "41f780c0004111103c200041201006410141f780c0004111103c4181802020014114100722" + "0241144604400240200041266a200041da006a2d00003a00002000200029005f3703c80120" + "00200041e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01" + "242000200028005b360027200020002903c80137002b200642003703002005420037030020" + "03420037030020004200370358200041246a2206411420014120100822024120470d002000" + "413a6a20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7" + "006a200a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a" + "2d00003a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20" + "0041386a4120410010094101418881c0004110103c20054100360200200342003703002000" + "42003703584181802020014114100a411441d48cc000411c103c2005410036020020034200" + "3703002000420037035841014181802020014114100b411441f08cc0004114103c20004104" + "36029801200041818020360258200041d8016a220341003602002002420037030020004200" + "3703c80120014104200041c8016a22054114100c411441848dc0004113103c200341003602" + "0020024200370300200042003703c801200120002802980120054114100d411441978dc000" + "4123103c2003410036020020024200370300200042003703c8014101200120002802980120" + "054114100e411441ba8dc000411b103c4189803c100f4120419881c0004110103c4189803c" + "1010412041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028" + "0298011012412041e081c0004117103c20012000280298011013412041f781c0004127103c" + "4101200120002802980110144120419e82c000411f103c200641141015411441bd82c00041" + "0b103c200041e0016a220442003703002003420037030020024200370300200042003703c8" + "012001200028029801200541201016412041d58dc0004113103c41c882c000410c41d482c0" + "00410b41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300" + "200041b0016a2008290300370300200041a8016a2009290300370300200020002903003703" + "a001200341003b010020024200370300200042003703c80120064114200041a0016a220741" + "20200541121018411241e88dc0004107103c20034100360200200242003703002000420037" + "03c80120074120200541141019411441ef8dc000410e103c200041003602c8012007412020" + "054104101a410441fd8dc000410d103c20074120101b410841f682c000410d103c20074120" + "101c410a418383c0004114103c200041003602c8012007412020054104101d4104418a8ec0" + "00410e103c419783c000410d20064114101e412141a483c000410d103c419783c000410d41" + "b183c0004108101f410d41b983c000410c103c419783c000410d41c583c0004108101f410d" + "41cd83c0004111103c417f41041004417141de83c000411e103c200041003602c801200541" + "7f1004417141988ec000411e103c200041ca016a41003a0000200041003b01c80120054103" + "1004417d41b68ec0004124103c200041003602c8012005418094ebdc031004417341da8ec0" + "004123103c200442003703002003420037030020024200370300200042003703c801200041" + "d894ebdc036a220741082005412041001020417341fd8ec0004117103c2004420037030020" + "03420037030020024200370300200042003703c80120012000280298012005412041001020" + "417141948fc0004119103c4102100f416f41fc83c000411f103c417f200028029801101241" + "71419b84c000411f103c2001417f1012417141ba84c000411f103c20014181201012417441" + "d984c0004120103c20072000280298011012417341f984c000411f103c2007200028029801" + "410110094173419885c0004118103c200120002802980141011009417141b085c000411a10" + "3c200442003703002003420037030020024200370300200042003703c80120072000280298" + "01200541201008417341ad8fc0004116103c20044200370300200342003703002002420037" + "0300200042003703c8012001200028029801200541201008417141c38fc0004118103c2004" + "42003703002003420037030020024200370300200042003703c80120064114200641142007" + "200028029801200541201021417341db8fc000411c103c2004420037030020034200370300" + "20024200370300200042003703c80120064114200641142001200028029801200541201021" + "417141f78fc000411e103c2004420037030020034200370300200242003703002000420037" + "03c80141fb9dc000411420072000280298012005412010224173419590c0004119103c2004" + "42003703002003420037030020024200370300200042003703c80141fb9dc0004114200120" + "0028029801200541201022417141ae90c000411f103c200442003703002003420037030020" + "024200370300200042003703c80141fb9dc000411441ca85c0004114200541201022417141" + "cd90c0004129103c200442003703002003420037030020024200370300200042003703c801" + "41de85c000412841fb9dc0004114200541201022417141f690c0004125103c200041dc016a" + "200041346a280100360200200041d4016a2000412c6a290100370200200020002901243702" + "cc01200041808080083602c801200041003b01c0012005411841fb9dc0004114200041c001" + "6a2203410210224171419b91c000410e103c2007200028029801422a10014173418686c000" + "4111103c200041003b01c0014102200341021007416f41a991c000411b103c200041003b01" + "c001410220034102100a416f41c491c000412b103c200041003b01c0014101410220034102" + "100b416f41ef91c0004123103c4102100f416f41fc83c000411f103c41021010416f419786" + "c000412f103c410141021011416f41c686c0004127103c41e980c0004181201006417441ed" + "86c000411f103c41e980c00041c10010064174418c87c000411a103c200041003b01c00120" + "0141812020034102100c4174419292c0004121103c200041003b01c0012001418120200341" + "02100d417441b392c0004131103c200041003b01c0014101200141812020034102100e4174" + "41e492c0004129103c20014181201012417441a687c0004125103c20014181201013417441" + "cb87c0004135103c4101200141812010144174418088c000412d103c200141812010154174" + "41ad88c0004119103c419783c00041812041d482c000410b41df82c000410e1017417441ed" + "82c0004109103c419783c000410d41d482c00041812041df82c000410e1017417441ed82c0" + "004109103c419783c000410d41d482c000410b41df82c0004181201017417441ed82c00041" + "09103c200041003b01c00120014181202003410210164174418d93c0004121103c20004100" + "3b01c00141fb9dc00041812041fb9dc0004114200341021022417441ae93c0004118103c20" + "0041003b01c00120064114200641142001418120200341021023417441c693c000411f103c" + "200041003b01c001200541812020064114200341021024417441e593c0004122103c419783" + "c000410d200720002802980141001000417341c688c000410f103c200042d487b6f4c7d4b1" + "c0003700c001419783c000410d200041c095ebdc036a220441081025417341d588c000411c" + "103c419783c000410d2007200028029801101f417341f188c0004116103c20044108200341" + "0810264173418789c0004118103c200341082004410810264173419f89c0004118103c2000" + "41003b01ec012004410820034108200041ec016a22024102410010274173418794c0004114" + "103c200041003b01ec01200341082004410820024102410010274173419b94c0004114103c" + "200041003b01ec0120044108200341082002410241001028417341af94c0004119103c2000" + "41003b01ec0120034108200441082002410241001028417341c894c0004119103c20004100" + "3b01ec0120044108200341082002410241001029417341e194c0004119103c200041003b01" + "ec0120034108200441082002410241001029417341fa94c0004119103c200041003b01ec01" + "2004410820034108200241024100102a4173419395c0004117103c200041003b01ec012003" + "410820044108200241024100102a417341aa95c0004117103c200041003b01ec0120044108" + "4103200241024100102b417341c195c0004114103c200041003b01ec012004410841032002" + "41024100102c417341d595c0004113103c200041003b01ec0120044108200241024100102d" + "417341e895c0004113103c200120002802980141001009417141b789c0004123103c200041" + "003b01ec01200641142001200028029801200241021018417141fb95c000411a103c200041" + "003b01ec0120012000280298012002410210194171419596c0004121103c200041003b01ec" + "01200120002802980120024102101a417141b696c0004120103c2001200028029801101b41" + "7141da89c0004120103c2001200028029801101c417141fa89c0004127103c200041003602" + "ec01200120002802980120024104101d417141d696c0004121103c200041003b01ec012001" + "200028029801200241021008417141f796c0004123103c200041003b01ec01200120002802" + "9801410120024102102e4171419a97c0004121103c200041003b01ec012001200028029801" + "22042006411420012004200241021023417141bb97c0004127103c200041003b01ec012006" + "41142001200028029801220420012004200241021023417141e297c0004127103c20004100" + "3b01ec0120012000280298012006411420024102102f4171418998c0004125103c20004100" + "3b01ec0120064114200120002802980120024102102f417141ae98c0004125103c20004100" + "3b01ec01200120002802980120064114200241021030417141d398c000412c103c20004100" + "3b01ec01200641142001200028029801200241021030417141ff98c000412c103c20004100" + "3b01ec012001200028029801200241021031417141ab99c000411f103c200041003b01ec01" + "20012000280298014101200241021032417141ca99c0004122103c200041003b01ec012001" + "2000280298012006411441ca85c0004114200241021021417141ec99c0004121103c200041" + "003b01ec0120064114200120002802980141ca85c00041142002410210214171418d9ac000" + "4121103c200041003b01ec0120012000280298014101200241021033417141ae9ac0004128" + "103c200041003b01ec01200541182001200028029801200241021024417141d69ac0004123" + "103c200041003b01ec0120012000280298014101200241021034417141f99ac0004125103c" + "200041003b01ec01200120002802980141012002410210354171419e9bc0004121103c2000" + "41003b01ec0120012000280298014101200241021036417141bf9bc0004122103c20004100" + "3b01ec012001200028029801200641144101200241021037417141e19bc0004124103c2000" + "41003b01ec012006411420012000280298014101200241021037417141859cc0004124103c" + "200041003b01ec0120012000280298014101200241021038417141a99cc000412f103c2000" + "41003b01ec012001200028029801200241021039417141d89cc0004123103c200041003b01" + "ec012001200028029801410120024102103a417141fb9cc0004122103c200041003b01ec01" + "2001200028029801410120024102103b4171419d9dc0004121103c200041003b01ec012001" + "20002802980141a18ac0004120200241021018417141be9dc000411c103c419783c000410d" + "2001200028029801101e417141c18ac0004122103c419797abdd03410d41a18ac000412041" + "001000417341e38ac0004110103c419797abdd03410d200341081025417341f38ac000411d" + "103c419797abdd03410d20064114101e417341908bc0004118103c419797abdd03410d41c5" + "83c0004108101f417341a88bc0004117103c20012000280298012001418120410010004174" + "41bf8bc000410e103c200141812042011001417441cd8bc0004112103c419783c000418120" + "200341081025417441df8bc000411b103c419783c00041812020064114101e417441fa8bc0" + "004116103c419783c00041812041c583c0004108101f417441908cc0004115103c419783c0" + "00410d2001200028029801101f417141a58cc0004119103c200041003b01ec012001200028" + "02980120064114200241021024417141da9dc0004121103c200041f0016a240041010f0b0b" + "418080c000410b417f20022002417f4e1bac1001000b0be61d0200418080c0000bde056572" + "726f725f636f64653d54455354204641494c45442424242424205354415254494e47205741" + "534d20455845435554494f4e2024242424246765745f6c65646765725f73716e6765745f70" + "6172656e745f6c65646765725f74696d656765745f626173655f666565746573745f616d65" + "6e646d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f" + "626a6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f" + "6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e" + "6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65" + "646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f" + "626a5f6e65737465645f61727261795f6c656e7570646174655f6461746174657374206d65" + "737361676574657374207075626b657974657374207369676e6174757265636865636b5f73" + "69676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f6665657465" + "7374696e6720747261636574726163655f6163636f756e74400000000000005f7472616365" + "5f616d6f756e74400000000000000074726163655f616d6f756e745f7a65726f6765745f70" + "6172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f6172726179" + "5f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f61727261" + "795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f" + "6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f" + "6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f6263616368" + "655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f" + "77726f6e675f6c656e555344303030303030303030303030303030303000418686c0000bf5" + "1774726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f" + "6f626a5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765" + "725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d65" + "6e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61" + "626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f" + "746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e" + "65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c696365" + "7570646174655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c" + "69636574726163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f" + "616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69" + "636531666c6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c656467" + "65725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167" + "735f77726f6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f" + "6665655f77726f6e675f73697a655f75696e74323536303030303030303030303030303030" + "303030303030303030303030303030303174726163655f6163636f756e745f77726f6e675f" + "73697a655f6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f" + "70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f" + "6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e677472616365" + "5f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f706171" + "75655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f" + "6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77" + "726f6e675f6c656e6774686765745f706172656e745f6c65646765725f686173686765745f" + "63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f62" + "6a5f6669656c646765745f74785f6e65737465645f6669656c646765745f63757272656e74" + "5f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f62" + "6a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68616c666765745f" + "6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e6674" + "5f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e" + "6765745f706172656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c67" + "65745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e67666c6f" + "61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77" + "726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e5f6f6f626163636f756e74" + "5f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e5f6f6f625f" + "63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e63" + "79616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f6b65796c65745f" + "6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f7772" + "6f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c65" + "6e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6d70" + "746765745f74785f6669656c645f696e76616c69645f736669656c646765745f6375727265" + "6e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c64676574" + "5f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f74" + "785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6375727265" + "6e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c" + "6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269" + "675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c" + "696365616d6d5f6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c" + "5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b65796c65745f74" + "6f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c696365" + "31666c6f61745f6164645f6f6f625f736c69636532666c6f61745f73756274726163745f6f" + "6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c69636532666c6f" + "61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f" + "6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c69636531666c6f61" + "745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c69" + "6365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c" + "6963656765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f" + "6973737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f" + "6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f7772" + "6f6e675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f" + "756e7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "746964317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "6964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e7469646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b" + "656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f647563" + "65727302086c616e6775616765010452757374000c70726f6365737365642d627901057275" + "7374631d312e38392e30202832393438333838336520323032352d30382d3034290094010f" + "7461726765745f6665617475726573082b0f6d757461626c652d676c6f62616c732b136e6f" + "6e7472617070696e672d6670746f696e742b0b62756c6b2d6d656d6f72792b087369676e2d" + "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c75652b0f62756c" + "6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e67"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index 59c4cbfc847..f8db73a231c 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -715,11 +715,15 @@ WasmHostFunctionsImpl::trace( Slice const& data, bool asHex) { + auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif + if (!asHex) { j << "HF TRACE (" << leKey.key << "): " << msg << " " @@ -735,19 +739,32 @@ WasmHostFunctionsImpl::trace( j << "HF DEV TRACE (" << leKey.key << "): " << msg << " " << hex; } - return msg.size() + data.size() * (asHex ? 2 : 1); +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) { + auto const ret = msg.size() + sizeof(data); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif + j << "HF TRACE NUM(" << leKey.key << "): " << msg << " " << data; - return msg.size() + sizeof(data); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected @@ -755,16 +772,24 @@ WasmHostFunctionsImpl::traceAccount( std::string_view const& msg, AccountID const& account) { + auto const ret = msg.size() + account.size(); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const accountStr = toBase58(account); j << "HF TRACE ACCOUNT(" << leKey.key << "): " << msg << " " << accountStr; - return msg.size() + accountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected @@ -772,14 +797,22 @@ WasmHostFunctionsImpl::traceFloat( std::string_view const& msg, Slice const& data) { + auto const ret = msg.size() + data.size(); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const s = floatToString(data); j << "HF TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; - return msg.size() + s.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected @@ -787,14 +820,22 @@ WasmHostFunctionsImpl::traceAmount( std::string_view const& msg, STAmount const& amount) { + auto const ret = msg.size(); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const amountStr = amount.getFullText(); j << "HF TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; - return msg.size() + amountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 6e79827060f..bc22d042727 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -20,23 +20,25 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) auto& j = std::cerr; #else auto j = jlog.warn(); + if (jlog.active(beast::severities::kWarning)) #endif + { + wasm_byte_vec_t error_message WASM_EMPTY_VEC; - wasm_byte_vec_t error_message WASM_EMPTY_VEC; + if (trap) + wasm_trap_message(trap, &error_message); - if (trap) - wasm_trap_message(trap, &error_message); + if (error_message.size) + { + j << "WASMI Error: " << msg << ", " + << std::string_view(error_message.data, error_message.size - 1); + } + else + j << "WASMI Error: " << msg; - if (error_message.size) - { - j << "WASMI Error: " << msg << ", " - << std::string_view(error_message.data, error_message.size - 1); + if (error_message.size) + wasm_byte_vec_delete(&error_message); } - else - j << "WASMI Error: " << msg; - - if (error_message.size) - wasm_byte_vec_delete(&error_message); if (trap) wasm_trap_delete(trap);