51        uint32_t 
const flags = 0,
 
   52        bool const domainOffer = 
false)
 
   54        auto offerInDir = [&](
uint256 const& directory,
 
   55                              uint64_t 
const pageIndex,
 
   62            if (
domain != (*page)[~sfDomainID])
 
   65            auto const& indexes = page->getFieldV256(sfIndexes);
 
   66            for (
auto const& index : indexes)
 
   78        if (sle->getFieldAmount(sfTakerGets) != takerGets)
 
   80        if (sle->getFieldAmount(sfTakerPays) != takerPays)
 
   82        if (sle->getFlags() != 
flags)
 
   84        if (domainOffer && !sle->isFieldPresent(sfDomainID))
 
   86        if (!domainOffer && sle->isFieldPresent(sfDomainID))
 
   89                sle->getFieldH256(sfBookDirectory),
 
   90                sle->getFieldU64(sfBookNode),
 
   96            if (!sle->isFieldPresent(sfDomainID))
 
   98            if (!sle->isFieldPresent(sfAdditionalBooks))
 
  100            if (sle->getFieldArray(sfAdditionalBooks).size() != 1)
 
  103            auto const& additionalBookDirs =
 
  104                sle->getFieldArray(sfAdditionalBooks);
 
  106            for (
auto const& bookDir : additionalBookDirs)
 
  108                auto const& dirIndex = bookDir.getFieldH256(sfBookDirectory);
 
  109                auto const& dirNode = bookDir.getFieldU64(sfBookNode);
 
  119            if (sle->isFieldPresent(sfAdditionalBooks))
 
 
  176            Env env(*
this, features - featurePermissionedDEX);
 
  177            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  193            Env env(*
this, features);
 
  194            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  201            env.
trust(USD(1000), devin);
 
  203            env(
pay(gw, devin, USD(100)));
 
  230            Env env(*
this, features);
 
  231            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  238            env.
trust(USD(1000), devin);
 
  240            env(
pay(gw, devin, USD(100)));
 
  244            uint32_t 
const t = env.
current()
 
  246                                   .parentCloseTime.time_since_epoch()
 
  248            jv[sfExpiration.jsonName] = t + 20;
 
  270            Env env(*
this, features);
 
  271            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  274                "F10D0CC9A0F9A3CBF585B80BE09A186483668FDBDD39AA7E3370F3649CE134" 
  286            Env env(*
this, features);
 
  287            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  291                domainOwner, gw, domainOwner, credType));
 
  294            auto const bobOfferSeq{env.
seq(bob)};
 
  299                checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  305            Env env(*
this, features);
 
  306            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  310                domainOwner, gw, domainOwner, credType));
 
  313            auto const bobOfferSeq{env.
seq(bob)};
 
  318                checkOffer(env, bob, bobOfferSeq, USD(10), 
XRP(10), 0, 
true));
 
  323            Env env(*
this, features);
 
  324            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  327            auto const bobOfferSeq{env.
seq(bob)};
 
  332                checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  336            env(
offer(carol, USD(10), 
XRP(10)));
 
  340                checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  342            auto const aliceOfferSeq{env.
seq(alice)};
 
  346            BEAST_EXPECT(!
offerExists(env, alice, aliceOfferSeq));
 
  353            Env env(*
this, features);
 
  354            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  360            for (
size_t i = 0; i <= 100; i++)
 
  362                auto const bobOfferSeq{env.
seq(bob)};
 
  368                    env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  371            for (
auto const offerSeq : offerSeqs)
 
 
  387            Env env(*
this, features - featurePermissionedDEX);
 
  388            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  391            env(
pay(bob, alice, USD(10)),
 
  404            env(
pay(bob, alice, USD(10)),
 
  413            Env env(*
this, features);
 
  414            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  417                "F10D0CC9A0F9A3CBF585B80BE09A186483668FDBDD39AA7E3370F3649CE134" 
  420            env(
pay(bob, alice, USD(10)),
 
  430            Env env(*
this, features);
 
  431            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  441            env.
trust(USD(1000), devin);
 
  443            env(
pay(gw, devin, USD(100)));
 
  447            env(
pay(alice, devin, USD(10)),
 
  459            env(
pay(alice, devin, USD(10)),
 
  470            env(
pay(alice, devin, USD(10)),
 
  479            Env env(*
this, features);
 
  480            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  490            env.
trust(USD(1000), devin);
 
  492            env(
pay(gw, devin, USD(100)));
 
  496            env(
pay(devin, alice, USD(10)),
 
  508            env(
pay(devin, alice, USD(10)),
 
  519            env(
pay(devin, alice, USD(10)),
 
  528            Env env(*
this, features);
 
  529            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  536            env(
pay(alice, domainOwner, USD(10)),
 
  546            env(
pay(domainOwner, alice, USD(10)),
 
 
  561            Env env(*
this, features);
 
  562            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  566            auto const regularOfferSeq{env.
seq(bob)};
 
  572            auto const regularDirKey =
 
  574            BEAST_EXPECT(regularDirKey);
 
  578            env(
pay(alice, carol, USD(10)),
 
  586            auto const domainOfferSeq{env.
seq(bob)};
 
  591                env, bob, domainOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  593            auto const domainDirKey =
 
  595            BEAST_EXPECT(domainDirKey);
 
  600            env(
pay(alice, carol, USD(10)),
 
  605            BEAST_EXPECT(!
offerExists(env, bob, domainOfferSeq));
 
  616            Env env(*
this, features);
 
  617            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  620            auto const EUR = gw[
"EUR"];
 
  621            env.
trust(EUR(1000), alice);
 
  623            env.
trust(EUR(1000), bob);
 
  625            env.
trust(EUR(1000), carol);
 
  627            env(
pay(gw, bob, EUR(100)));
 
  631            auto const usdOfferSeq{env.
seq(bob)};
 
  636                checkOffer(env, bob, usdOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  639            env(
pay(alice, carol, EUR(10)),
 
  646                checkOffer(env, bob, usdOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  649            auto const regularOfferSeq{env.
seq(bob)};
 
  650            env(
offer(bob, USD(10), EUR(10)));
 
  653                checkOffer(env, bob, regularOfferSeq, USD(10), EUR(10)));
 
  657            env(
pay(alice, carol, EUR(10)),
 
  665            auto const eurOfferSeq{env.
seq(bob)};
 
  666            env(
offer(bob, USD(10), EUR(10)), 
domain(domainID));
 
  669                checkOffer(env, bob, eurOfferSeq, USD(10), EUR(10), 0, 
true));
 
  672            env(
pay(alice, carol, EUR(5)),
 
  681                checkOffer(env, bob, eurOfferSeq, USD(5), EUR(5), 0, 
true));
 
  685            env(
pay(alice, carol, EUR(5)),
 
  696                checkOffer(env, bob, regularOfferSeq, USD(10), EUR(10)));
 
  701            Env env(*
this, features);
 
  702            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  706            Account badDomainOwner(
"badDomainOwner");
 
  708            env.
fund(
XRP(1000), badDomainOwner, devin);
 
  710            env.
trust(USD(1000), devin);
 
  712            env(
pay(gw, devin, USD(100)));
 
  715            auto const badCredType = 
"badCred";
 
  720            auto const badDomainID = objects.begin()->first;
 
  731            env(
pay(alice, carol, USD(10)),
 
  739            auto const bobOfferSeq{env.
seq(bob)};
 
  743                checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
  746            env(
pay(alice, carol, USD(10)),
 
  759            Env env(*
this, features);
 
  760            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  785            Env env(*
this, features);
 
  786            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  793            env.
trust(USD(1000), devin);
 
  795            env(
pay(gw, devin, USD(100)));
 
  799            uint32_t 
const t = env.
current()
 
  801                                   .parentCloseTime.time_since_epoch()
 
  803            jv[sfExpiration.jsonName] = t + 20;
 
  810            auto const offerSeq{env.
seq(devin)};
 
  815            env(
pay(alice, carol, USD(5)),
 
  827            env(
pay(alice, carol, USD(5)),
 
  839            Env env(*
this, features);
 
  840            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  843            auto const offerSeq{env.
seq(bob)};
 
  848            env(
pay(alice, carol, USD(5)),
 
  858                domainOwner, bob, domainOwner, credType));
 
  862            env(
pay(alice, carol, USD(5)),
 
 
  971        Env env(*
this, features);
 
  972        auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
  975        auto const aliceOfferSeq{env.
seq(alice)};
 
  979        auto const bobOfferSeq{env.
seq(bob)};
 
  984            checkOffer(env, bob, bobOfferSeq, 
XRP(20), USD(20), 0, 
true));
 
  986            checkOffer(env, alice, aliceOfferSeq, 
XRP(100), USD(100), 0, 
true));
 
  989        BEAST_EXPECT(domainDirKey);
 
  996        env(
pay(gw, carol, USD(10)),
 
 1003            checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
 1006        BEAST_EXPECT(!
offerExists(env, alice, aliceOfferSeq));
 
 
 1044            Env env(*
this, features - featurePermissionedDEX);
 
 1045            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1069            auto const offerSeq{env.
seq(bob)};
 
 1075                env, bob, offerSeq, 
XRP(10), USD(10), 
lsfHybrid, 
true));
 
 1080            Env env(*
this, features);
 
 1081            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1084            auto const bobOfferSeq{env.
seq(bob)};
 
 1091                env, bob, bobOfferSeq, 
XRP(10), USD(10), 
lsfHybrid, 
true));
 
 1095            auto const aliceOfferSeq{env.
seq(alice)};
 
 1099            BEAST_EXPECT(!
offerExists(env, alice, aliceOfferSeq));
 
 1100            BEAST_EXPECT(!
offerExists(env, bob, bobOfferSeq));
 
 1106            Env env(*
this, features);
 
 1107            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1110            auto const bobOfferSeq{env.
seq(bob)};
 
 1119                env, bob, bobOfferSeq, 
XRP(10), USD(10), 
lsfHybrid, 
true));
 
 1121            auto const aliceOfferSeq{env.
seq(alice)};
 
 1122            env(
offer(alice, USD(10), 
XRP(10)));
 
 1125            BEAST_EXPECT(!
offerExists(env, alice, aliceOfferSeq));
 
 1126            BEAST_EXPECT(!
offerExists(env, bob, bobOfferSeq));
 
 1133            Env env(*
this, features);
 
 1134            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1137            auto const bobOfferSeq{env.
seq(bob)};
 
 1142                checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
 1146            auto const aliceOfferSeq{env.
seq(alice)};
 
 1147            env(
offer(alice, USD(10), 
XRP(10)),
 
 1152            BEAST_EXPECT(!
offerExists(env, alice, aliceOfferSeq));
 
 1153            BEAST_EXPECT(!
offerExists(env, bob, bobOfferSeq));
 
 1160            Env env(*
this, features);
 
 1161            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1164            auto const bobOfferSeq{env.
seq(bob)};
 
 1169                checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
false));
 
 1173            auto const aliceOfferSeq{env.
seq(alice)};
 
 1174            env(
offer(alice, USD(10), 
XRP(10)),
 
 1179            BEAST_EXPECT(
offerExists(env, alice, aliceOfferSeq));
 
 1182                checkOffer(env, bob, bobOfferSeq, 
XRP(10), USD(10), 0, 
false));
 
 1184                env, alice, aliceOfferSeq, USD(10), 
XRP(10), 
lsfHybrid, 
true));
 
 
 1197        Env env(*
this, features);
 
 1198        auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1201        auto const hybridOfferSeq{env.
seq(bob)};
 
 1211        env(
pay(alice, carol, USD(5)),
 
 1218            env, bob, hybridOfferSeq, 
XRP(50), USD(50), 
lsfHybrid, 
true));
 
 1222        env(
pay(alice, carol, USD(5)),
 
 1228            env, bob, hybridOfferSeq, 
XRP(50), USD(50), 
lsfHybrid, 
true));
 
 1231        auto const regularOfferSeq{env.
seq(bob)};
 
 1234        BEAST_EXPECT(
offerExists(env, bob, regularOfferSeq));
 
 1235        BEAST_EXPECT(
checkOffer(env, bob, regularOfferSeq, 
XRP(10), USD(10)));
 
 1237        auto const sleHybridOffer =
 
 1239        BEAST_EXPECT(sleHybridOffer);
 
 1240        auto const openDir =
 
 1241            sleHybridOffer->getFieldArray(sfAdditionalBooks)[0].getFieldH256(
 
 1250        BEAST_EXPECT(!
offerExists(env, bob, hybridOfferSeq));
 
 1251        BEAST_EXPECT(
checkOffer(env, bob, regularOfferSeq, 
XRP(5), USD(5)));
 
 
 1262            Env env(*
this, features);
 
 1263            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1266            auto const hybridOfferSeq{env.
seq(bob)};
 
 1272            env(
pay(alice, carol, USD(5)),
 
 1278                env, bob, hybridOfferSeq, 
XRP(5), USD(5), 
lsfHybrid, 
true));
 
 1284            BEAST_EXPECT(!
offerExists(env, bob, hybridOfferSeq));
 
 1290            Env env(*
this, features);
 
 1291            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1295            Account badDomainOwner(
"badDomainOwner");
 
 1297            env.
fund(
XRP(1000), badDomainOwner, devin);
 
 1300            auto const badCredType = 
"badCred";
 
 1305            auto const badDomainID = objects.begin()->first;
 
 1312            auto const hybridOfferSeq{env.
seq(bob)};
 
 1319            env(
pay(devin, badDomainOwner, USD(5)),
 
 1326                env, bob, hybridOfferSeq, 
XRP(10), USD(10), 
lsfHybrid, 
true));
 
 1328            env(
pay(alice, carol, USD(5)),
 
 1334                env, bob, hybridOfferSeq, 
XRP(5), USD(5), 
lsfHybrid, 
true));
 
 1340            BEAST_EXPECT(!
offerExists(env, bob, hybridOfferSeq));
 
 1345            Env env(*
this, features);
 
 1346            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1349            auto const EUR = gw[
"EUR"];
 
 1350            env.
trust(EUR(1000), alice);
 
 1352            env.
trust(EUR(1000), bob);
 
 1354            env.
trust(EUR(1000), carol);
 
 1356            env(
pay(gw, bob, EUR(100)));
 
 1359            auto const usdOfferSeq{env.
seq(bob)};
 
 1364                checkOffer(env, bob, usdOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
 1367            env(
pay(alice, carol, EUR(5)),
 
 1374                checkOffer(env, bob, usdOfferSeq, 
XRP(10), USD(10), 0, 
true));
 
 1377            auto const eurOfferSeq{env.
seq(bob)};
 
 1378            env(
offer(bob, USD(10), EUR(10)),
 
 1383                env, bob, eurOfferSeq, USD(10), EUR(10), 
lsfHybrid, 
true));
 
 1386            env(
pay(alice, carol, EUR(5)),
 
 1393                checkOffer(env, bob, usdOfferSeq, 
XRP(5), USD(5), 0, 
true));
 
 1395                env, bob, eurOfferSeq, USD(5), EUR(5), 
lsfHybrid, 
true));
 
 1400            Env env(*
this, features);
 
 1401            auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] =
 
 1404            auto const EUR = gw[
"EUR"];
 
 1405            env.
trust(EUR(1000), alice);
 
 1407            env.
trust(EUR(1000), bob);
 
 1409            env.
trust(EUR(1000), carol);
 
 1411            env(
pay(gw, bob, EUR(100)));
 
 1415            auto const usdOfferSeq{env.
seq(bob)};
 
 1420                checkOffer(env, bob, usdOfferSeq, 
XRP(10), USD(10), 0, 
false));
 
 1423            auto const eurOfferSeq{env.
seq(bob)};
 
 1424            env(
offer(bob, USD(10), EUR(10)),
 
 1429                env, bob, eurOfferSeq, USD(10), EUR(10), 
lsfHybrid, 
true));
 
 1436                checkOffer(env, bob, usdOfferSeq, 
XRP(5), USD(5), 0, 
false));
 
 1438                env, bob, eurOfferSeq, USD(5), EUR(5), 
lsfHybrid, 
true));