{"version":3,"sources":["../src/addresses.ts","../src/bytecodes.ts","../src/utils.ts","../src/deploy/deployContracts.ts","../src/deploy/fundAccounts.ts","../src/toBundler.ts","../node_modules/is-plain-obj/index.js","../node_modules/execa/lib/arguments/file-url.js","../node_modules/execa/lib/methods/parameters.js","../node_modules/execa/lib/utils/uint-array.js","../node_modules/execa/lib/methods/template.js","../node_modules/execa/lib/utils/standard-stream.js","../node_modules/execa/lib/arguments/specific.js","../node_modules/execa/lib/verbose/values.js","../node_modules/execa/lib/arguments/escape.js","../node_modules/is-unicode-supported/index.js","../node_modules/figures/index.js","../node_modules/yoctocolors/base.js","../node_modules/execa/lib/verbose/default.js","../node_modules/execa/lib/verbose/custom.js","../node_modules/execa/lib/verbose/log.js","../node_modules/execa/lib/verbose/start.js","../node_modules/execa/lib/verbose/info.js","../node_modules/execa/lib/return/duration.js","../node_modules/execa/lib/arguments/command.js","../node_modules/npm-run-path/node_modules/path-key/index.js","../node_modules/unicorn-magic/node.js","../node_modules/npm-run-path/index.js","../node_modules/execa/lib/return/final-error.js","../node_modules/human-signals/build/src/realtime.js","../node_modules/human-signals/build/src/core.js","../node_modules/human-signals/build/src/signals.js","../node_modules/human-signals/build/src/main.js","../node_modules/execa/lib/terminate/signal.js","../node_modules/execa/lib/terminate/kill.js","../node_modules/execa/lib/utils/abort-signal.js","../node_modules/execa/lib/terminate/cancel.js","../node_modules/execa/lib/ipc/validation.js","../node_modules/execa/lib/utils/deferred.js","../node_modules/execa/lib/arguments/fd-options.js","../node_modules/execa/lib/utils/max-listeners.js","../node_modules/execa/lib/ipc/reference.js","../node_modules/execa/lib/ipc/incoming.js","../node_modules/execa/lib/ipc/forward.js","../node_modules/execa/lib/ipc/strict.js","../node_modules/execa/lib/ipc/outgoing.js","../node_modules/execa/lib/ipc/send.js","../node_modules/execa/lib/ipc/graceful.js","../node_modules/execa/lib/terminate/graceful.js","../node_modules/execa/lib/terminate/timeout.js","../node_modules/execa/lib/methods/node.js","../node_modules/execa/lib/ipc/ipc-input.js","../node_modules/execa/lib/arguments/encoding-option.js","../node_modules/execa/lib/arguments/cwd.js","../node_modules/execa/lib/arguments/options.js","../node_modules/strip-final-newline/index.js","../node_modules/is-stream/index.js","../node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js","../node_modules/get-stream/source/stream.js","../node_modules/get-stream/source/contents.js","../node_modules/get-stream/source/utils.js","../node_modules/get-stream/source/array.js","../node_modules/get-stream/source/array-buffer.js","../node_modules/get-stream/source/string.js","../node_modules/get-stream/source/index.js","../node_modules/execa/lib/io/max-buffer.js","../node_modules/execa/lib/return/message.js","../node_modules/execa/lib/return/result.js","../node_modules/parse-ms/index.js","../node_modules/pretty-ms/index.js","../node_modules/execa/lib/verbose/error.js","../node_modules/execa/lib/verbose/complete.js","../node_modules/execa/lib/return/reject.js","../node_modules/execa/lib/stdio/type.js","../node_modules/execa/lib/transform/object-mode.js","../node_modules/execa/lib/transform/normalize.js","../node_modules/execa/lib/stdio/direction.js","../node_modules/execa/lib/ipc/array.js","../node_modules/execa/lib/stdio/stdio-option.js","../node_modules/execa/lib/stdio/native.js","../node_modules/execa/lib/stdio/input-option.js","../node_modules/execa/lib/stdio/duplicate.js","../node_modules/execa/lib/stdio/handle.js","../node_modules/execa/lib/stdio/handle-sync.js","../node_modules/execa/lib/io/strip-newline.js","../node_modules/execa/lib/transform/split.js","../node_modules/execa/lib/transform/validate.js","../node_modules/execa/lib/transform/encoding-transform.js","../node_modules/execa/lib/transform/run-async.js","../node_modules/execa/lib/transform/run-sync.js","../node_modules/execa/lib/transform/generator.js","../node_modules/execa/lib/io/input-sync.js","../node_modules/execa/lib/verbose/output.js","../node_modules/execa/lib/io/output-sync.js","../node_modules/execa/lib/resolve/all-sync.js","../node_modules/execa/lib/resolve/exit-async.js","../node_modules/execa/lib/resolve/exit-sync.js","../node_modules/execa/lib/methods/main-sync.js","../node_modules/execa/lib/ipc/get-one.js","../node_modules/execa/lib/ipc/get-each.js","../node_modules/execa/lib/ipc/methods.js","../node_modules/execa/lib/return/early-error.js","../node_modules/execa/lib/stdio/handle-async.js","../node_modules/@sindresorhus/merge-streams/index.js","../node_modules/execa/lib/io/pipeline.js","../node_modules/execa/lib/io/output-async.js","../node_modules/signal-exit/src/signals.ts","../node_modules/signal-exit/src/index.ts","../node_modules/execa/lib/terminate/cleanup.js","../node_modules/execa/lib/pipe/pipe-arguments.js","../node_modules/execa/lib/pipe/throw.js","../node_modules/execa/lib/pipe/sequence.js","../node_modules/execa/lib/pipe/streaming.js","../node_modules/execa/lib/pipe/abort.js","../node_modules/execa/lib/pipe/setup.js","../node_modules/execa/lib/io/iterate.js","../node_modules/execa/lib/io/contents.js","../node_modules/execa/lib/resolve/wait-stream.js","../node_modules/execa/lib/resolve/stdio.js","../node_modules/execa/lib/resolve/all-async.js","../node_modules/execa/lib/verbose/ipc.js","../node_modules/execa/lib/ipc/buffer-messages.js","../node_modules/execa/lib/resolve/wait-subprocess.js","../node_modules/execa/lib/convert/concurrent.js","../node_modules/execa/lib/convert/shared.js","../node_modules/execa/lib/convert/readable.js","../node_modules/execa/lib/convert/writable.js","../node_modules/execa/lib/convert/duplex.js","../node_modules/execa/lib/convert/iterable.js","../node_modules/execa/lib/convert/add.js","../node_modules/execa/lib/methods/promise.js","../node_modules/execa/lib/methods/main-async.js","../node_modules/execa/lib/methods/bind.js","../node_modules/execa/lib/methods/create.js","../node_modules/execa/lib/methods/command.js","../node_modules/execa/lib/methods/script.js","../node_modules/execa/index.js","../src/toMeeNode.ts","../src/toNetwork.ts","../src/toEcosystem.ts"],"names":["path","i","account","parseEther","fileURLToPath","expression","process","platform","execFileCallback","execPath","signals","constants","normalizeSignal","setTimeout","isConnected","once","promisify","scheduler","correctEncoding","objectToString","identity","textEncoder","textDecoder","inspect","count","milliseconds","isReadableStream","isWritableStream","addDefaultValue","tty","addProperties","optionName","value","readFileSync","stripFinalNewline","LF","Buffer","StringDecoder","identityGenerator","encoding","generators","throwOnDisconnect","on","ChildProcess","Duplex","Readable","Writable","getDefaultHighWaterMark","PassThroughStream","finished","aborted","noop","increment","global","a","addAbortListener","getStreamContents","isVerbose","readable","callbackify","writable","duplex","mapArguments","boundOptions","setBoundExeca","sendMessage","getOneMessage","getEachMessage","getCancelSignal","logError"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Address } from \"viem\"\nimport { baseSepolia, sepolia } from \"viem/chains\"\n// Setup\nexport const DETERMINISTIC_DEPLOYER: Address =\n  \"0x4e59b44847b379578588920ca78fbf26c0b4956c\"\nexport const CREATE2_FACTORY_DEPLOYER_ADDRESS: Address =\n  \"0x3fAB184622Dc19b6109349B94811493BF2a45362\"\nexport const ENTRYPOINT_V07_ADDRESS: Address =\n  \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\"\nexport const ENTRY_POINT_SIMULATIONS_ADDRESS: Address =\n  \"0x74Cb5e4eE81b86e70f9045036a1C5477de69eE87\"\n\n// Nexus v1.2.0\nexport const NEXUS_IMPLEMENTATION_ADDRESS: Address =\n  \"0x000000004F43C49e93C970E84001853a70923B03\"\nexport const NEXUS_BOOTSTRAP_ADDRESS: Address =\n  \"0x00000000D3254452a909E4eeD47455Af7E27C289\"\nexport const NEXUS_ACCOUNT_FACTORY_ADDRESS: Address =\n  \"0x000000001D1D5004a02bAfAb9de2D6CE5b7B13de\"\nexport const MEE_VALIDATOR_ADDRESS: Address =\n  \"0x00000000d12897DDAdC2044614A9677B191A2d95\"\nexport const COMPOSABLE_MODULE_ADDRESS: Address =\n  \"0x00000004430bB055dB66eBef6Fe5Ee1DA9668B10\"\n\n// Smart Sessions\nexport const SMART_SESSION_ADDRESS: Address =\n  \"0x00000000002B0eCfbD0496EE71e01257dA0E37DE\"\nexport const SUDO_POLICY_ADDRESS: Address =\n  \"0x0000003111cD8e92337C100F22B7A9dbf8DEE301\"\nexport const SPENDING_LIMITS_POLICY_ADDRESS: Address =\n  \"0x00000088D48cF102A8Cdb0137A9b173f957c6343\"\nexport const UNIVERSAL_ACTION_POLICY_ADDRESS: Address =\n  \"0x0000006DDA6c463511C4e9B05CFc34C1247fCF1F\"\nexport const TIME_FRAME_POLICY_ADDRESS: Address =\n  \"0x8177451511dE0577b911C254E9551D981C26dc72\"\nexport const VALUE_LIMIT_POLICY_ADDRESS: Address =\n  \"0x730DA93267E7E513e932301B47F2ac7D062abC83\"\n\n// Ownables\nexport const OWNABLE_VALIDATOR_ADDRESS: Address =\n  \"0x2483DA3A338895199E5e538530213157e931Bf06\"\nexport const OWNABLE_EXECUTOR_ADDRESS: Address =\n  \"0x4Fd8d57b94966982B62e9588C27B4171B55E8354\"\n\n// Test contracts\nexport const MINTABLE_ADDRESS: Address =\n  \"0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e\"\nexport const COUNTER_ADDRESS: Address =\n  \"0x14e4829E655F0b3a1793838dDd47273D5341d416\"\nexport const TOKEN_WITH_PERMIT: Address =\n  \"0x51fdb803fD49f0f5bd03de0400a8F17dA2Aa6999\"\nexport const MOCK_SIGNATURE_VALIDATOR: Address =\n  \"0x0d0C730F50a6da2725d4CD4eb91Bc678Bd377F7D\"\nexport const MOCK_CALLEE: Address = \"0x29FdD9D9A9f8CD8dCa0F4764bf0F959183DF4139\"\nexport const MOCK_TOKEN: Address = \"0x0006be192b4E06770eaa624AE7648DBF9051221c\"\nexport const FREE_MINT_ERC20: Address =\n  \"0x4a9829524f4879700A8BA8524769F4b2C1CbA264\"\n\nexport const MEE_ENTRYPOINT: Address =\n  \"0xE854C84cD68fC434cB3B0042c29235D452cAD977\"\n\nexport const ALL_ADDRESSES: Record<\n  string,\n  { address: Address; chainId: number }\n> = {\n  DETERMINISTIC_DEPLOYER: {\n    address: DETERMINISTIC_DEPLOYER,\n    chainId: sepolia.id\n  },\n  ENTRYPOINT_V07_ADDRESS: {\n    address: ENTRYPOINT_V07_ADDRESS,\n    chainId: sepolia.id\n  },\n  NEXUS_IMPLEMENTATION_ADDRESS: {\n    address: NEXUS_IMPLEMENTATION_ADDRESS,\n    chainId: sepolia.id\n  },\n  NEXUS_ACCOUNT_FACTORY_ADDRESS: {\n    address: NEXUS_ACCOUNT_FACTORY_ADDRESS,\n    chainId: sepolia.id\n  },\n  CREATE2_FACTORY_DEPLOYER_ADDRESS: {\n    address: CREATE2_FACTORY_DEPLOYER_ADDRESS,\n    chainId: sepolia.id\n  },\n  ENTRY_POINT_SIMULATIONS_ADDRESS: {\n    address: ENTRY_POINT_SIMULATIONS_ADDRESS,\n    chainId: sepolia.id\n  },\n  MEE_VALIDATOR_ADDRESS: {\n    address: MEE_VALIDATOR_ADDRESS,\n    chainId: sepolia.id\n  },\n  SMART_SESSION_ADDRESS: {\n    address: SMART_SESSION_ADDRESS,\n    chainId: sepolia.id\n  },\n  SUDO_POLICY_ADDRESS: { address: SUDO_POLICY_ADDRESS, chainId: sepolia.id },\n  SPENDING_LIMITS_POLICY_ADDRESS: {\n    address: SPENDING_LIMITS_POLICY_ADDRESS,\n    chainId: sepolia.id\n  },\n  UNIVERSAL_ACTION_POLICY_ADDRESS: {\n    address: UNIVERSAL_ACTION_POLICY_ADDRESS,\n    chainId: sepolia.id\n  },\n  TIME_FRAME_POLICY_ADDRESS: {\n    address: TIME_FRAME_POLICY_ADDRESS,\n    chainId: sepolia.id\n  },\n  OWNABLE_VALIDATOR_ADDRESS: {\n    address: OWNABLE_VALIDATOR_ADDRESS,\n    chainId: sepolia.id\n  },\n  OWNABLE_EXECUTOR_ADDRESS: {\n    address: OWNABLE_EXECUTOR_ADDRESS,\n    chainId: sepolia.id\n  },\n  VALUE_LIMIT_POLICY_ADDRESS: {\n    address: VALUE_LIMIT_POLICY_ADDRESS,\n    chainId: sepolia.id\n  },\n  MINTABLE_ADDRESS: { address: MINTABLE_ADDRESS, chainId: sepolia.id },\n  COMPOSABLE_MODULE_ADDRESS: {\n    address: COMPOSABLE_MODULE_ADDRESS,\n    chainId: sepolia.id\n  },\n  // Base sepolia\n  MEE_ENTRYPOINT: { address: MEE_ENTRYPOINT, chainId: baseSepolia.id },\n  NEXUS_BOOTSTRAP_ADDRESS: {\n    address: NEXUS_BOOTSTRAP_ADDRESS,\n    chainId: baseSepolia.id\n  },\n  COUNTER_ADDRESS: { address: COUNTER_ADDRESS, chainId: baseSepolia.id },\n  TOKEN_WITH_PERMIT: { address: TOKEN_WITH_PERMIT, chainId: baseSepolia.id },\n  MOCK_SIGNATURE_VALIDATOR: {\n    address: MOCK_SIGNATURE_VALIDATOR,\n    chainId: baseSepolia.id\n  },\n  MOCK_CALLEE: { address: MOCK_CALLEE, chainId: baseSepolia.id },\n  MOCK_TOKEN: { address: MOCK_TOKEN, chainId: baseSepolia.id },\n  FREE_MINT_ERC20: { address: FREE_MINT_ERC20, chainId: baseSepolia.id }\n}\n","import type { Address, Hex } from \"viem\"\n\nexport const BYTECODES: Record<\n  Address,\n  { address: Address; bytecode: Hex; name: string }\n> = {\n  \"0x4e59b44847b379578588920ca78fbf26c0b4956c\": {\n    name: \"DETERMINISTIC_DEPLOYER\",\n    address: \"0x4e59b44847b379578588920ca78fbf26c0b4956c\",\n    bytecode:\n      \"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\"\n  },\n  \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\": {\n    name: \"ENTRYPOINT_V07_ADDRESS\",\n    address: \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\n    bytecode:\n      \"0x60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c1690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c63430008170033\"\n  },\n  \"0x000000004F43C49e93C970E84001853a70923B03\": {\n    name: \"NEXUS_IMPLEMENTATION_ADDRESS\",\n    address: \"0x000000004F43C49e93C970E84001853a70923B03\",\n    bytecode:\n      \"0x60806040526004361015610015575b366128e757005b5f3560e01c80630a664dba14610204578063112d3a7d146101ff5780631626ba7e146101fa57806319822f7c146101f5578063392e53cd146101f0578063481ddd23146101eb5780634a58db19146101e65780634b6a1419146101e15780634d44560d146101dc5780634f1ef286146101d757806352d1902d146101d25780635ab1bd53146101cd5780635bfeadbb146101c85780635faac46b146101c357806384b0196e146101be5780638dd7712f146101b95780639517e29f146101b45780639cfd7cff146101af578063a71763a8146101aa578063aaf10f42146101a5578063b0d691fe146101a0578063b46b61a91461019b578063c399ec8814610196578063d03c791414610191578063d691c9641461018c578063d86f2b3c14610187578063e9ae5c5314610182578063ea5a6d911461017d578063ea5f61d014610178578063eab77e17146101735763f2dc691d0361000e57611b79565b611a11565b611915565b61181d565b611716565b611655565b611526565b61141a565b6113c4565b6113ab565b611368565b61130a565b611221565b6111c2565b610fb0565b610ebc565b610e1e565b610c54565b61094c565b61091a565b6108ac565b610783565b6106e8565b610675565b61063b565b6105aa565b61057e565b61036f565b610334565b6102de565b610217565b5f91031261021357565b5f80fd5b34610213575f3660031901126102135760206001600160a01b035f516020615b305f395f51905f5254166001600160a01b0360405191168152f35b6001600160a01b0381160361021357565b359061026e82610252565b565b9181601f840112156102135782359167ffffffffffffffff8311610213576020838186019501011161021357565b606060031982011261021357600435916024356102ba81610252565b916044359067ffffffffffffffff8211610213576102da91600401610270565b9091565b346102135760206102fa6102f13661029e565b92919091612b40565b6040519015158152f35b90604060031983011261021357600435916024359067ffffffffffffffff8211610213576102da91600401610270565b3461021357602061034d61034736610304565b91611cfd565b6040516001600160e01b03199091168152f35b90816101209103126102135790565b346102135760603660031901126102135760043567ffffffffffffffff8111610213576103a3610458913690600401610360565b602061042060243561042b60443580956103e76001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032163314611dd4565b6104256103f43683611e76565b958692888101359061040a8260031a60f81b1590565b156104d1575b5060401c6001600160a01b031690565b612c08565b93612fee565b61010084929401525f6001600160a01b03604051809881968295639700320360e01b845260048401612041565b0393165af19081156104cc57610487925f9261049b575b508061048b575b506040519081529081906020820190565b0390f35b5f9081803892335af1505f610476565b8192506104bf9060203d6020116104c5575b6104b78183611c93565b810190611f9f565b9161046f565b503d6104ad565b611cf2565b600382901a60f81b600160f81b03610513576104ff6104f882610100610506940190611f6c565b908a612f0a565b3691611e25565b6101008501525b5f610410565b600382901a60f81b600160f91b1461052c575b5061050d565b61056d61056161055b6105789361055061054b610547612075565b1590565b611f56565b610100810190611f6c565b90612d50565b93919290923691611e25565b610100880152612e63565b5f610526565b34610213575f3660031901126102135760206102fa612075565b6001600160e01b031981160361021357565b3461021357602036600319011261021357604060206106046004356105ce81610598565b63ffffffff60e01b165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260405f2090565b82519061061082611c72565b54906001600160a01b0382169182825260ff60f81b9060581b16928391015282519182526020820152f35b5f366003190112610213575f388180347f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0325af11561021357005b60203660031901126102135760043567ffffffffffffffff8111610213576106a1903690600401610270565b3033036106b4575b6106b291612e63565b005b7f90b772c2cb8a51aa7a8a65fc23543c6d022d5b3f8e2b92eed79fba7eef8293005c6106a9575b63aed595955f526004601cfd5b60403660031901126102135760043561070081610252565b5f7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032602435336001600160a01b03831614801561077a575b61074190611dd4565b604051936014526034526f205c28780000000000000000000000008252604460108338935af115610772575f603452005b3d5f823e3d90fd5b50333014610738565b60403660031901126102135760043561079b81610252565b60243567ffffffffffffffff8111610213576107bb903690600401610270565b906001600160a01b036107e26001600160a01b035f516020615b305f395f51905f52541690565b16806107f257506106b2926121e3565b60405163d68f602560e01b81529290915f848061081436343360048501612196565b038183875af19384156104cc575f94610884575b506108349293946121e3565b803b1561021357604051630b9dfbed60e11b8152915f91839182908490829061086090600483016121bc565b03925af180156104cc5761087057005b8061087e5f6106b293611c93565b80610209565b6108349394506108a5903d805f833e61089d8183611c93565b810190612150565b9392610828565b34610213575f36600319011261021357307f000000000000000000000000000000004f43c49e93c970e84001853a70923b030361090d5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b639f03a0265f526004601cfd5b34610213575f3660031901126102135760206001600160a01b035f516020615b505f395f51905f525416604051908152f35b60403660031901126102135760043567ffffffffffffffff8111610213578060040190608060031982360301126102135760243567ffffffffffffffff8111610213576109a06109a7913690600401610270565b908461313a565b6109c360248201359260446109bb8261234a565b930190611f6c565b9290600482148015610be7575b828115610bdc575b6109e191612354565b6109f783836109f287858484612b40565b61236e565b610a31836001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b5480610ac2575050507f2841d18703faaff388732165e48fe431468531b1b1e626b1b7cbcbfc0d79c7409150610abd9042610a9c826001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b55604080516001600160a01b03909216825242602083015290918291820190565b0390a1005b610acf6203f480826123a7565b4210610b3a575050507fcbd44a75f6935b5837022648b6c8487db984701200c5381c7c0f8c2b1d69b9da9150610abd9042610a9c826001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b610b4390612397565b4210610bcd577f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93610bb2915f610baa866001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b55838561329b565b604080519182526001600160a01b03929092166020820152a1005b6303f9796960e11b5f5260045ffd5b6009811491506109d8565b50600882146109d0565b90602080835192838152019201905f5b818110610c0e5750505090565b82516001600160a01b0316845260209384019390920191600101610c01565b906001600160a01b03610c4d602092959495604085526040850190610bf1565b9416910152565b3461021357604036600319011261021357600435610c7181610252565b6024359060016001600160a01b038216141580610de8575b610dcd578115610dbe5790610c9d816143da565b610cd5610cc85f946001600160a01b03165f525f516020615b105f395f51905f5260205260405f2090565b546001600160a01b031690565b6001600160a01b0381168015159081610db2575b5080610da9575b15610d4a57610d3e610cc882610d1b610d4494610d0d8988613d0e565b906001600160a01b03169052565b6001600160a01b03165f525f516020615b105f395f51905f5260205260405f2090565b9361440c565b92610cd5565b908360016001600160a01b038416141580610da0575b610d76575b815261048760405192839283610c2d565b9150610d9a610d8d610d878461441a565b83613d0e565b516001600160a01b031690565b91610d65565b50801515610d60565b50828410610cf0565b6001915014155f610ce9565b63f725081760e01b5f5260045ffd5b637c84ecfb60e01b5f526001600160a01b031660045260245ffd5b50610df5610547826139cf565b610c89565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610213575f36600319011261021357610e5d610e6b610e3c61339c565b604092919251938493600f60f81b855260e0602086015260e0850190610dfa565b908382036040850152610dfa565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610ea3575050500390f35b8251845285945060209384019390920191600101610e95565b60403660031901126102135760043567ffffffffffffffff811161021357610ee8903690600401610360565b610f1c6001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032163314611dd4565b6001600160a01b03610f426001600160a01b035f516020615b305f395f51905f52541690565b1680610f5257506106b2906123f0565b60405163d68f602560e01b8152915f8380610f7236343360048501612196565b038183865af19283156104cc575f93610f90575b50610834906123f0565b610834919350610fa9903d805f833e61089d8183611c93565b9290610f86565b610fb93661029e565b906001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da03216331480156111b9575b610ff690611dd4565b61100161054761307e565b6111ac575b6001600160a01b0383161561119d576001840361106b577fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123939161104a9184614d63565b604080519182526001600160a01b0390921660208201529081908101610abd565b600284036110a5577fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393916110a09184614c5a565b61104a565b600384036110da577fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393916110a09184614983565b6004840361110f577fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393916110a09184614826565b600884148015611193575b1561114d5783916110a091847fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12396614661565b8361117f577fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393916110a09184614544565b6304c1896960e11b5f52600484905260245ffd5b506009841461111a565b635316c18d60e01b5f5260045ffd5b6111b4614428565b611006565b50333014610fed565b34610213575f366003190112610213576104876040516111e3604082611c93565b601481527f6269636f6e6f6d792e6e657875732e312e322e300000000000000000000000006020820152604051918291602083526020830190610dfa565b61122a3661029e565b916001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0321633148015611301575b61126790611dd4565b6001600160a01b0361128d6001600160a01b035f516020615b305f395f51905f52541690565b168061129d57506106b29361244c565b60405163d68f602560e01b815293909290915f85806112c136343360048501612196565b038183885af19485156104cc575f956112e1575b5061083493949561244c565b6108349495506112fa903d805f833e61089d8183611c93565b94936112d5565b5033301461125e565b34610213575f366003190112610213577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b03811615611360575b6020906001600160a01b0360405191168152f35b50305461134c565b34610213575f3660031901126102135760206040516001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032168152f35b3461021357602061034d6113be36610304565b9161252a565b34610213575f36600319011261021357306020526370a082315f52602080806024601c7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0325afa601f3d1116815102604051908152f35b34610213576020366003190112610213576104876004358060081b60ff60f81b8216159182156114af575b821561149a575b5081611466575b5060405190151581529081906020820190565b6001600160f81b031981161591508115611482575b505f611453565b6001600160f81b031916600160f81b1490505f61147b565b6001600160f81b03199081161491505f61144c565b6001600160f81b03198116600160f81b149250611445565b602081016020825282518091526040820191602060408360051b8301019401925f915b8383106114f957505050505090565b9091929394602080611517600193603f198682030187528951610dfa565b970193019301919392906114ea565b61152f36610304565b9161153933613a0f565b15611642576001600160a01b036115646001600160a01b035f516020615b305f395f51905f52541690565b168061158557509161157991610487936125fc565b604051918291826114c7565b90926040519263d68f602560e01b84525f84806115a736343360048501612196565b038183875af19384156104cc575f94611622575b506115c79293946125fc565b90803b1561021357604051630b9dfbed60e11b8152925f9184918290849082906115f490600483016121bc565b03925af19182156104cc576104879261160e575b50611579565b8061087e5f61161c93611c93565b5f611608565b6115c793945061163b903d805f833e61089d8183611c93565b93926115bb565b635c93ff2f60e11b5f523360045260245ffd5b346102135760203660031901126102135760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168091036102135760405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032165afa80156104cc57610487915f916116f757506040519081529081906020820190565b611710915060203d6020116104c5576104b78183611c93565b5f610476565b61171f36610304565b906117546001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032163314611dd4565b6001600160a01b0361177a6001600160a01b035f516020615b305f395f51905f52541690565b168061178a57506106b29261274b565b60405163d68f602560e01b81529290915f84806117ac36343360048501612196565b038183875af19384156104cc575f946117cc575b5061083492939461274b565b6108349394506117e5903d805f833e61089d8183611c93565b93926117c0565b9181601f840112156102135782359167ffffffffffffffff8311610213576020808501948460051b01011161021357565b60203660031901126102135760043567ffffffffffffffff8111610213576118499036906004016117ec565b61187d6001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032163314611dd4565b6001600160a01b036118a36001600160a01b035f516020615b305f395f51905f52541690565b16806118b357506106b291614030565b906040519263d68f602560e01b84525f84806118d436343360048501612196565b038183875af19384156104cc575f946118f3575b509061083491614030565b6108349291945061190d903d805f833e61089d8183611c93565b9390916118e8565b346102135760403660031901126102135760043561193281610252565b6024359060016001600160a01b0382161415806119ff575b610dcd578115610dbe579061195e816143da565b611989610cc85f946001600160a01b03165f525f516020615b705f395f51905f5260205260405f2090565b6001600160a01b03811680151590816119f3575b50806119ea575b15610d4a57610d3e610cc8826119c16119e494610d0d8988613d0e565b6001600160a01b03165f525f516020615b705f395f51905f5260205260405f2090565b92611989565b508284106119a4565b6001915014155f61199d565b50611a0c61054782613a0f565b61194a565b606036600319011261021357600435611a2981610252565b60243567ffffffffffffffff811161021357611a499036906004016117ec565b90916044359260ff8416840361021357611a64303314611dd4565b611a6d83612852565b92611a7b6040519485611c93565b808452602084019060051b82019136831161021357905b828210611b5f575050506001600160a01b031691611ade836001600160a01b03166001600160a01b03195f516020615b505f395f51905f525416175f516020615b505f395f51905f5255565b82611b0b575b827ff98c8404c5b1bfef2e6ba9233c6e88845aedfd36eea8b192725d8c199571cf325f80a2005b823b156102135760405163f05c04e160e01b8152915f9183918291611b349190600484016140e5565b038183865af180156104cc57611b4b575b80611ae4565b8061087e5f611b5993611c93565b5f611b45565b602080918335611b6e81610252565b815201910190611a92565b346102135760203660031901126102135760206102fa60043561286a565b634e487b7160e01b5f52601160045260245ffd5b906177398202918083046177391490151715611bc357565b611b97565b906014116102135790601490565b909291928360141161021357831161021357601401916013190190565b906004116102135790600490565b909291928360051161021357831161021357600501916004190190565b356bffffffffffffffffffffffff19811692919060148210611c3e575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117611c8e57604052565b611c5e565b90601f8019910116810190811067ffffffffffffffff821117611c8e57604052565b908160209103126102135751611cca81610598565b90565b611cca93926001600160a01b0360609316825260208201528160408201520190610dfa565b6040513d5f823e3d90fd5b918015611db6575b90611d3f611d6693611d398480611d33610420611d2d611d2760209a8a611bc8565b90611c1e565b60601c90565b95611bd6565b91612cb4565b91906001600160a01b03604051809681958294637aa8f17760e11b84523360048501611ccd565b0392165afa5f9181611d85575b50611cca57506001600160e01b031990565b611da891925060203d602011611daf575b611da08183611c93565b810190611cb5565b905f611d73565b503d611d96565b611dc461ffff821904611bab565b8303611d055790611cca9261252a565b15611ddb57565b635629665f60e11b5f5260045ffd5b6040519061026e61012083611c93565b6040519061026e604083611c93565b67ffffffffffffffff8111611c8e57601f01601f191660200190565b929192611e3182611e09565b91611e3f6040519384611c93565b829481845281830111610213578281602093845f960137010152565b9080601f8301121561021357816020611cca93359101611e25565b9190916101208184031261021357611e8c611dea565b92611e9682610263565b845260208201356020850152604082013567ffffffffffffffff81116102135781611ec2918401611e5b565b6040850152606082013567ffffffffffffffff81116102135781611ee7918401611e5b565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e082013567ffffffffffffffff81116102135781611f2a918401611e5b565b60e085015261010082013567ffffffffffffffff811161021357611f4e9201611e5b565b610100830152565b15611f5d57565b63ae4edb1b60e01b5f5260045ffd5b903590601e1981360301821215610213570180359067ffffffffffffffff82116102135760200191813603831361021357565b90816020910312610213575190565b80516001600160a01b03168252611cca916020820151602082015261010061202f611fff611fed60408601516101206040870152610120860190610dfa565b60608601518582036060870152610dfa565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610dfa565b92015190610100818403910152610dfa565b929190612058602091604086526040860190611fae565b930152565b90816020910312610213575180151581036102135790565b60405163d60b347f60e01b81523060048201526020816024817f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d956001600160a01b03165afa9081156104cc575f916120db575b5080156120d25790565b50611cca61307e565b6120fd915060203d602011612103575b6120f58183611c93565b81019061205d565b5f6120c8565b503d6120eb565b81601f820112156102135780519061212182611e09565b9261212f6040519485611c93565b8284526020838301011161021357815f9260208093018386015e8301015290565b9060208282031261021357815167ffffffffffffffff811161021357611cca920161210a565b908060209392818452848401375f828201840152601f01601f1916010190565b611cca93926001600160a01b03606093168252602082015281604082015201905f612176565b906020611cca928181520190610dfa565b156121d457565b63325c055b60e21b5f5260045ffd5b9190916001600160a01b038116906121fc8215156121cd565b612208813b15156121cd565b3055612233307f000000000000000000000000000000004f43c49e93c970e84001853a70923b031490565b61090d576001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0321633148015612341575b61227390611dd4565b61227b6141ad565b612332573d5f526352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc602060016004601d855afa510361232457807fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5561230e57505050565b815f926040519485378338925af4156107725750565b6355299b496001526004601dfd5b63dc3b837960e01b5f5260045ffd5b5033301461226a565b35611cca81610252565b1561235c5750565b63041c38b360e41b5f5260045260245ffd5b15612377575050565b6001600160a01b039250635f300b3960e11b5f526004521660245260445ffd5b90620151808201809211611bc357565b91908201809211611bc357565b908092918237015f815290565b3d156123eb573d906123d282611e09565b916123e06040519384611c93565b82523d5f602084013e565b606090565b6123fe906060810190611f6c565b80600411610213576040515f9283929060031982019060040183378101826003198201528160031991030190305af46124356123c1565b501561243d57565b632b3f6d1160e21b5f5260045ffd5b90917f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e9361248184846109f284868484612b40565b600183036124bd576124939184613655565b61249b61374f565b604080519182526001600160a01b03909216602082015290819081015b0390a1565b600283036124d4576124cf91846134e0565b61249b565b600383036124e6576124cf91846133e0565b600483148015612520575b8015612516575b612504575b505061249b565b61250f91838561329b565b5f806124fd565b50600983146124f8565b50600883146124f1565b60015f9081525f516020615b105f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7546001600160a01b031694939291905b6001600160a01b03861680151590816125f0575b50156125a85761259c8484846125a2948a6138d4565b9561398a565b94612572565b6125d49495507f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d956138d4565b6001600160e01b03198116611cca57506001600160e01b031990565b6001915014155f612586565b919061260733613a4f565b600883901b926001600160f81b03198116612628575090611cca9291613e11565b6001600160f81b03198116600160f81b03612649575090611cca9291613d48565b6001600160f81b03198082160361273357509061266591614eab565b909161266f613c65565b936001600160f81b031981166126a157509161268a92614eea565b61269382613cfc565b5261269d81613cfc565b5090565b6001600160f81b03198116600160f81b03612717575081836126c292614ec5565b6126cb85613cfc565b52156126d657505090565b7f5bd4c60b4b38b664d8fb5944eb974e3d85083d79afe5ce934ccabcc913707c109161271161270485613cfc565b5160405193849384613d22565b0390a190565b6308c3ee0360e11b5f526001600160f81b03191660045260245ffd5b632e5bf3f960e21b5f5260ff60f81b1660045260245ffd5b600881901b9291906001600160f81b0319811661276e57509061026e9291613f44565b6001600160f81b03198116600160f81b0361278f57509061026e9291613ebb565b6001600160f81b0319808216036127335750906127ab91614eab565b929091906001600160f81b031981166127d957505f9083604051938437838338925af4156107725701604052565b9192916001600160f81b03198116600160f81b0361283a575081836127fd92614ec5565b92901561280957505050565b6124b87f5bd4c60b4b38b664d8fb5944eb974e3d85083d79afe5ce934ccabcc913707c109360405193849384613d22565b6308c3ee0360e11b5f5260ff60f81b1660045260245ffd5b67ffffffffffffffff8111611c8e5760051b60200190565b600181149081156128dc575b81156128d1575b81156128c6575b81156128bb575b81156128b0575b81156128a7575b506128a2575f90565b600190565b9050155f612899565b600981149150612892565b60088114915061288b565b600481149150612884565b60038114915061287d565b600281149150612876565b5f80356001600160e01b031981168083527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f026020526040909220546129406001600160a01b0382169160581b6001600160f81b03191690565b906001600160a01b03811661299657505060e01c9063bc197c81821463f23a6e6183141763150b7a0283141761298c576308c63e2760e01b5f526001600160e01b03191660045260245ffd5b506020526020603cf35b5f516020615b305f395f51905f52546001600160a01b0316801515926060929084612ab3575b6001600160f81b03198116607f60f91b03612a6157505f80916129dd6152bf565b90602082519201905afa926129f06123c1565b935b15612a5957612a04575b825160208401f35b803b1561021357604051630b9dfbed60e11b8152915f918391829084908290612a3090600483016121bc565b03925af180156104cc57612a45575b806129fc565b8061087e5f612a5393611c93565b81612a3f565b835160208501fd5b6001600160f81b03198116612a9757505f8091612a7c6152bf565b906020825192019034905af192612a916123c1565b936129f2565b632e5bf3f960e21b5f526001600160f81b03191660045260245ffd5b60405163d68f602560e01b81529093505f8180612ad536343360048501612196565b038183875af19081156104cc575f91612af0575b50926129bc565b612b0491503d805f833e61089d8183611c93565b85612ae9565b356001600160e01b0319811692919060048210612b25575050565b6001600160e01b031960049290920360031b82901b16169150565b92909160018403612b57575050611cca91506139cf565b60028403612b6b575050611cca9150613a0f565b60038403612ba057611cca935060048210612b9857612b9391612b8d91611bf3565b90612b0a565b614162565b50505f614162565b505090600481145f14612bce57505f516020615b305f395f51905f52546001600160a01b0391821691161490565b600881148015612bfe575b15612bf8576001600160a01b03612bf081926140ff565b921691161490565b50505f90565b5060098114612bd9565b6001600160a01b03811680612c3d5750507f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d9590565b612c46826139cf565b15612c4f575090565b63342cf00f60e11b5f5260045260245ffd5b91909160408184031261021357805192602082015167ffffffffffffffff811161021357611cca920161210a565b611cca94926001600160a01b0360609316825260208201528160408201520191612176565b7f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f06549293926001600160a01b031680612cf5575090611cca91933691611e25565b604051637a0468b760e01b8152945f93869384928392612d19923360048601612c8f565b03915afa9182156104cc575f905f93612d3157509190565b90506102da9192503d805f833e612d488183611c93565b810190612c61565b9060f9116106db578035906020810135810190602082019135906040810135019360208501943593612d83368486611e25565b602081519101205f528060a01c6020526001600160a01b0360405f201690815f526001600160a01b0360205f2091608060205216601f526305d78094600b52601960272090604051915f52601b602052826040526060526020604060805f60015afa505f606052612e126105473d6060185183604052612e0a30916001600160a01b031690565b143015151690565b612e5b575b8115612e4c579081527f4f058962bce244bca6c9be42f256083afc66f1f63a1f9a04e31a3042311af38d9080602081016124b8565b63e483bbcb60e01b5f5260045ffd5b5f9150612e17565b90601811612ed6575f8160208083940135820180358060405193849301833781018481520391355af4612e946123c1565b5015612ec757612ea26141ad565b15612ea957565b612eb1612075565b15612eb857565b633aab01a760e11b5f5260045ffd5b63315927c560e01b5f5260045ffd5b6307ce216360e51b5f5260045ffd5b6001600160a01b03611cca959360609383521660208201528160408201520191612176565b92909192823560601c601484013590603485013560e01c91603886019383870196603888013560e01c976038828a603c840193010301998060048c011161021357612f9393612f8e88612f848b948f6004906105479901019f6003199103019d80612f7e610420611d2d611d27848c611bc8565b97611bd6565b949093898b6141cf565b614243565b612fdf57303b1561021357612fbe5f936040519586948594639517e29f60e01b865260048601612ee5565b038183305af180156104cc57612fd15750565b8061087e5f61026e93611c93565b6346fdc33360e01b5f5260045ffd5b92916001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f05541680155f1461302d575050610100015190565b60405f809482979497519788958694859363e24f8f9360e01b855261305e6004860191606083526060830190611fae565b936020820152015203925af19182156104cc575f905f93612d3157509190565b60015f525f516020615b105f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7546001600160a01b03161515806130c85790565b5060015f525f516020615b705f395f51905f526020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13546001600160a01b0316151590565b1561311557565b633ab3447f60e11b5f5260045ffd5b1561312b57565b63bf6b584360e01b5f5260045ffd5b6020916001600160a01b039161321b61323c9580613161610420611d2d611d278489611bc8565b946132166132096131956131748861234a565b60608c8a0135996131886040820182611f6c565b92909101359a8b936142c8565b966131dc6131d76105476131d0845f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0760205260405f2090565b5460ff1690565b61310e565b5f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0760205260405f2090565b805460ff19166001179055565b611bd6565b604051637aa8f17760e11b8152968795869490938593913060048601612c8f565b0392165afa80156104cc5761026e915f9161326b575b506001600160e01b031916630b135d3f60e11b14613124565b613284915060203d602011611daf57611da08183611c93565b5f613252565b916020611cca938181520191612176565b6132fe9392916004810361330257505f516020615b305f395f51905f5280546001600160a01b03191690555b6132f95a926132eb604051958692638a91b0e360e01b60208501526024840161328a565b03601f198101855284611c93565b614382565b5050565b60088114808015613392575b61331a575b50506132c7565b1561335757507f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0680546001600160a01b03191690555b5f80613313565b600903613350577f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0580546001600160a01b0319169055613350565b506009821461330e565b6040516133aa604082611c93565b60058152644e6578757360d81b6020820152906040516133cb604082611c93565b60058152640312e322e360dc1b602082015290565b91909161346a6040516133f281611c72565b5f81525f602082015261340b6105ce612b8d8688611bf3565b8151815460209093015174ff000000000000000000000000000000000000000060589190911c167fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0390911617919091179055565b5a9082600411610213576132f960046132fe950193600319016132eb604051958692638a91b0e360e01b60208501526020602485018181520191612176565b9190916040818403126102135780356134c181610252565b92602082013567ffffffffffffffff811161021357611cca9201611e5b565b906134f6906001600160a01b03938101906134a9565b92166001600160a01b0382168015801561364b575b613638576001600160a01b0361353f835f516020615b705f395f51905f52906001600160a01b03165f5260205260405f2090565b54160361361c5791816135c06132fe946135a5613580610cc86132eb975f516020615b705f395f51905f52906001600160a01b03165f5260205260405f2090565b915f516020615b705f395f51905f52906001600160a01b03165f5260205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b6135fb6135eb825f516020615b705f395f51905f52906001600160a01b03165f5260205260405f2090565b6001600160a01b03198154169055565b6132f95a92604051948591638a91b0e360e01b6020840152602483016121bc565b637c84ecfb60e01b5f526001600160a01b03821660045260245ffd5b50637c84ecfb60e01b5f5260045260245ffd5b506001811461350b565b9061366b906001600160a01b03938101906134a9565b92166001600160a01b03821680158015613745575b613638576001600160a01b036136b4835f516020615b105f395f51905f52906001600160a01b03165f5260205260405f2090565b54160361361c57918161371a6132fe946135a56136f5610cc86132eb975f516020615b105f395f51905f52906001600160a01b03165f5260205260405f2090565b915f516020615b105f395f51905f52906001600160a01b03165f5260205260405f2090565b6135fb6135eb825f516020615b105f395f51905f52906001600160a01b03165f5260205260405f2090565b5060018114613680565b61375a6105476141ad565b8061385a575b61376657565b60015f525f516020615b105f395f51905f526020526137a47ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7610cc8565b6001600160a01b0381168015158061384f575b1561383e5760405163d60b347f60e01b815230600482015290602090829060249082905afa9081156104cc575f91613820575b506137fd576137f89061398a565b6137a4565b6001600160a01b036001915b161461381157565b63330c676160e21b5f5260045ffd5b613838915060203d8111612103576120f58183611c93565b5f6137ea565b506001600160a01b03600191613809565b5060018114156137b7565b5060405163d60b347f60e01b81523060048201526020816024817f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d956001600160a01b03165afa9081156104cc575f916138b5575b5015613760565b6138ce915060203d602011612103576120f58183611c93565b5f6138ae565b613904936001600160a01b0360209496939660405196879586948593637aa8f17760e11b85523360048601612c8f565b0392165afa9081156104cc575f9161396b575b507fffff000000000000000000000000000000000000000000000000000000000000811661773960f01b1480613955575b613950575090565b905090565b506001600160e01b031982811690821611613948565b613984915060203d602011611daf57611da08183611c93565b5f613917565b6001600160a01b031680156139bd575f525f516020615b105f395f51905f526020526001600160a01b0360405f20541690565b637c84ecfb60e01b5f5260045260245ffd5b6001600160a01b0316806001141590816139e7575090565b90505f525f516020615b105f395f51905f526020526001600160a01b0360405f205416151590565b6001600160a01b031680600114159081613a27575090565b90505f525f516020615b705f395f51905f526020526001600160a01b0360405f205416151590565b6001600160a01b035f516020615b505f395f51905f5254169081613a71575050565b813b15610213576040516396fb721760e01b81526001600160a01b03909116600482015260026024820152905f90829060449082905afa80156104cc57613ab6575b50565b80613ac25f8093611c93565b80031261021357565b6001600160a01b035f516020615b505f395f51905f5254169081613aed575050565b813b15610213576040516396fb721760e01b81526001600160a01b039091166004808301919091526024820152905f90829060449082905afa80156104cc57613ab65750565b6001600160a01b035f516020615b505f395f51905f5254169081613b55575050565b813b15610213576040516396fb721760e01b81526001600160a01b03909116600482015260036024820152905f90829060449082905afa80156104cc57613ab65750565b6001600160a01b035f516020615b505f395f51905f5254169081613bbb575050565b813b15610213576040516396fb721760e01b81526001600160a01b03909116600482015260016024820152905f90829060449082905afa80156104cc57613ab65750565b6001600160a01b035f516020615b505f395f51905f5254169182613c2257505050565b823b15610213576040516396fb721760e01b81526001600160a01b039290921660048301526024820152905f90829060449082905afa80156104cc57613ab65750565b60408051909190613c768382611c93565b6001815291601f1901825f5b828110613c8e57505050565b806060602080938501015201613c82565b90613ca982612852565b613cb66040519182611c93565b8281528092613cc7601f1991612852565b01905f5b828110613cd757505050565b806060602080938501015201613ccb565b634e487b7160e01b5f52603260045260245ffd5b805115613d095760200190565b613ce8565b8051821015613d095760209160051b010190565b91611cca9391613d3a91604085526040850191612176565b916020818403910152610dfa565b90613d5291614f1d565b916001600160f81b03198116613dcf5750613d6c82613c9f565b915f5b818110613d7c5750505090565b80613db3613d8d6001938587614f9d565b8035613d9881610252565b613dab6020830135926040810190611f6c565b9290916150be565b613dbd8287613d0e565b52613dc88186613d0e565b5001613d6f565b9291906001600160f81b03198416600160f81b03613df257611cca929350614fbf565b6308c3ee0360e11b5f9081526001600160f81b03198516600452602490fd5b90613e1e9193929361506f565b919092613e29613c65565b956001600160f81b03198116613e58575090613e4593916150be565b613e4e83613cfc565b52613ab382613cfc565b6001600160f81b03198116600160f81b0361283a575083613e7a928492615097565b613e8386613cfc565b5215613e8d575050565b7fb5282692b8c578af7fb880895d599035496b5e64d1f14bf428a1ed3bc406f662916124b861270486613cfc565b90613ec591614f1d565b90916001600160f81b03198116613f2257505f5b818110613ee557505050565b80613f1c613ef66001938587614f9d565b8035613f0181610252565b613f146020830135926040810190611f6c565b9290916150eb565b01613ed9565b92916001600160f81b03198416600160f81b03613df257613ab3929350614fbf565b90613f4e9161506f565b90939092906001600160f81b03191680613f6e57509061026e93916150eb565b600160f81b8103613fc3575083613f86928492615097565b929015613f9257505050565b6124b87fb5282692b8c578af7fb880895d599035496b5e64d1f14bf428a1ed3bc406f6629360405193849384613d22565b6308c3ee0360e11b5f5260045260245ffd5b903590601e1981360301821215610213570180359067ffffffffffffffff821161021357602001918160051b3603831361021357565b35611cca81610598565b60405190614024602083611c93565b5f808352366020840137565b915f5b828110156140df578060051b84013590609e1985360301821215610213576140c7600192860161407b6140696060830183613fd5565b6140756040850161400b565b91615119565b6140936140878361234a565b6001600160a01b031690565b156140cd576140b36140bf916140a88461234a565b6020850135906157e9565b915b6080810190613fd5565b3092916151bf565b01614033565b506140bf6140d9614015565b916140b5565b50915050565b60409060ff611cca94931681528160208201520190610bf1565b600803614134576001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f06541690565b6001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f05541690565b6001600160a01b036141a5819263ffffffff60e01b165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260405f2090565b541691161490565b5f906017303b146141ba57565b905060035f80303c5f5160e81c62ef01001490565b93926141dd91933691611e25565b6020815191012090604051926001600160a01b0360208501957ff6c866c1cd985ce61f030431e576c0e82887de0643dfa8a2e6efc3463e638ed087521660408501526060840152608083015260a082015260a0815261423d60c082611c93565b51902090565b92602092916001600160a01b0361425c61427a966152ec565b604051637aa8f17760e11b8152968795869485933060048601612c8f565b0392165afa5f91816142a7575b5061429157505f90565b6001600160e01b031916630b135d3f60e11b1490565b6142c191925060203d602011611daf57611da08183611c93565b905f614287565b92611cca9491926142da913691611e25565b60208151910120604051926001600160a01b0360208501957fd3ddfc12654178cc44d4a7b6b969cfdce7ffe6342326ba37825314cffa0fba9c87521660408501526060840152608083015260a082015260a0815261433960c082611c93565b5190206152ec565b6001600160a01b0361026e91166001600160a01b03166001600160a01b03195f516020615b305f395f51905f525416175f516020615b305f395f51905f5255565b92915f919082918261439381611e09565b966143a16040519889611c93565b818852601f196143b083611e09565b013660208a013760208451940192f13d806143d3575b8084525f602085013e9190565b505f6143c6565b906143e482612852565b6143f16040519182611c93565b8281528092614402601f1991612852565b0190602036910137565b5f198114611bc35760010190565b5f19810191908211611bc357565b60015f525f516020615b705f395f51905f526020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13546001600160a01b031661450e5760015f525f516020615b705f395f51905f5260205261449b60405f2060016001600160a01b0319825416179055565b60015f525f516020615b105f395f51905f526020526001600160a01b037ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7541661450e5760015f525f516020615b105f395f51905f5260205261026e60405f2060016001600160a01b0319825416179055565b6329e42f3360e11b5f5260045ffd5b9190811015613d095760051b0190565b90821015613d09576102da9160051b810190611f6c565b9150614566908035810191602083019235916020810135019060208201913590565b929391808403614652575f5b81811061458157505050505050565b8061458f600192848961451d565b358281036145b357506145ad6145a682888761452d565b9087614d63565b01614572565b600281036145d657506145d16145ca82888761452d565b9087614c5a565b6145ad565b600381036145f457506145d16145ed82888761452d565b9087614983565b6004810361461257506145d161460b82888761452d565b9087614826565b85600882148015614648575b61462a575b50506145ad565b61464191614639848a8961452d565b929091614661565b5f85614623565b506009821461461e565b63b4fa3fb360e01b5f5260045ffd5b9291906001600160a01b0361468a6001600160a01b035f516020615b305f395f51905f52541690565b168061469a575061026e9361473b565b60405163d68f602560e01b815293909290915f85806146be36343360048501612196565b038183885af19485156104cc575f9561471b575b506146de93949561473b565b803b1561021357604051630b9dfbed60e11b8152915f91839182908490829061470a90600483016121bc565b03925af180156104cc57612fd15750565b6146de949550614734903d805f833e61089d8183611c93565b94936146d2565b9290926147488185613bff565b60405163ecd0596160e01b8152600481018290526001600160a01b0385169490602081602481895afa9081156104cc575f916147e3575b50156147d457816147a56147956147aa946140ff565b6001600160a01b03811615614802565b6153fe565b823b156102135761470a925f92836040518096819582946306d61fe760e41b84526004840161328a565b631c4f83bb60e31b5f5260045ffd5b6147fc915060203d602011612103576120f58183611c93565b5f61477f565b1561480a5750565b6001600160a01b039063c689cd9760e01b5f521660045260245ffd5b91906001600160a01b0361484e6001600160a01b035f516020615b305f395f51905f52541690565b168061485e575061026e926148c0565b60405163d68f602560e01b81529290915f848061488036343360048501612196565b038183875af19384156104cc575f946148a0575b506146de9293946148c0565b6146de9394506148b9903d805f833e61089d8183611c93565b9392614894565b916148ca83613acb565b60405163ecd0596160e01b81526004808201526001600160a01b0384169390602081602481885afa9081156104cc575f91614940575b50156147d4576147aa9061493b61492b6001600160a01b035f516020615b305f395f51905f52541690565b6001600160a01b0381161561495f565b614341565b614959915060203d602011612103576120f58183611c93565b5f614900565b156149675750565b6001600160a01b039063741cbe0360e01b5f521660045260245ffd5b91906001600160a01b036149ab6001600160a01b035f516020615b305f395f51905f52541690565b16806149bb575061026e92614a1d565b60405163d68f602560e01b81529290915f84806149dd36343360048501612196565b038183875af19384156104cc575f946149fd575b506146de929394614a1d565b6146de939450614a16903d805f833e61089d8183611c93565b93926149f1565b9091614a2882613b33565b60405163ecd0596160e01b8152600360048201526001600160a01b0383169290602081602481875afa9081156104cc575f91614bdd575b50156147d45761340b846105ce614ad16104ff8680614aaf614aa2614a9483614a8e612b8d614b809e8c611bf3565b99614bfc565b356001600160f81b03191690565b6001600160f81b03191690565b9a6001600160f81b03198c16158015614bc6575b614acc90614c0b565b611c01565b96614b006001600160e01b031984166306d61fe760e41b8114908115614bb5575b8115614bac575b5015614c21565b614b5583614b50610547826001600160e01b0319165f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260409020546001600160a01b0316151590565b614c37565b614b6f614b60611dfa565b6001600160a01b039096168652565b6001600160f81b0319166020850152565b803b15610213576040516306d61fe760e41b8152915f91839182908490829061470a90600483016121bc565b9050155f614af9565b638a91b0e360e01b81149150614af2565b50607f60f91b6001600160f81b03198d1614614ac3565b614bf6915060203d602011612103576120f58183611c93565b5f614a5f565b9060041015613d095760040190565b15614c1257565b63867a1dcf60e01b5f5260045ffd5b15614c2857565b63c001660b60e01b5f5260045ffd5b15614c3f5750565b63a56a04dd60e01b5f5263ffffffff60e01b1660045260245ffd5b91906001600160a01b03614c826001600160a01b035f516020615b305f395f51905f52541690565b1680614c92575061026e92614cf4565b60405163d68f602560e01b81529290915f8480614cb436343360048501612196565b038183875af19384156104cc575f94614cd4575b506146de929394614cf4565b6146de939450614ced903d805f833e61089d8183611c93565b9392614cc8565b91614cfe83613a4f565b60405163ecd0596160e01b8152600260048201526001600160a01b0384169390602081602481885afa9081156104cc575f91614d44575b50156147d4576147aa906154df565b614d5d915060203d602011612103576120f58183611c93565b5f614d35565b91906001600160a01b03614d8b6001600160a01b035f516020615b305f395f51905f52541690565b1680614d9b575061026e92614dfd565b60405163d68f602560e01b81529290915f8480614dbd36343360048501612196565b038183875af19384156104cc575f94614ddd575b506146de929394614dfd565b6146de939450614df6903d805f833e61089d8183611c93565b9392614dd1565b91614e0783613b99565b60405163ecd0596160e01b8152600160048201526001600160a01b0384169390602081602481885afa9081156104cc575f91614e8c575b50156147d4576001600160a01b037f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d95168414614e7d576147aa906155ea565b63abc3af7960e01b5f5260045ffd5b614ea5915060203d602011612103576120f58183611c93565b5f614e3e565b918160141161021357823560601c92601401916013190190565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b5f919392806040519586378438925af415614f14573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b909181359182810193601f199101016020840193803593828560051b8301119060401c17614f905783614f4e575050565b835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c17614f905780614f5057505050565b63ba597e7e5f526004601cfd5b9190811015613d095760051b81013590605e1981360301821215610213570190565b919091614fcb83613c9f565b925f5b818110614fda57505050565b80614fe86001928486614f9d565b803590614ff482610252565b6150136020820135604083019361500b8585611f6c565b929091615097565b61501d858b613d0e565b521561502c575b505001614fce565b7fb5282692b8c578af7fb880895d599035496b5e64d1f14bf428a1ed3bc406f6629161505791611f6c565b90615065612704858b613d0e565b0390a15f80615024565b908060141161021357813560601c926034821061021357601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115614f14573d82523d5f602084013e60203d830101604052565b8380935f93604051958692833738935af1156107725701604052565b805191908290602001825e015f815290565b6040516001600160e01b03199093166020840152600483529161513d602482611c93565b915f915b80831061514e5750505090565b90919261518061519460019261518661517061516b89888a614f9d565b61570a565b6040519485936020850190615107565b90615107565b03601f198101835282611c93565b93019190615141565b9190811015613d095760051b81013590603e1981360301821215610213570190565b91905f5b8181106151d1575050505050565b6151dc81838661519d565b90856151e7836156fd565b6151f0816156ee565b6152225761521c906152088460206001960190611f6c565b506040810135908760208201359135615a54565b016151c3565b5090600161522f826156fd565b615238816156ee565b036152b05780602061524b920190611f6c565b50905f8061526b60408501358501604051918282602082943591016123b4565b039060208601355afa61527c6123c1565b90156152a1578661529c9184608060019601359160608201359135615a54565b61521c565b636e47f61960e01b5f5260045ffd5b631c42432f60e31b5f5260045ffd5b60405190602036830101604052816014360181525f602036920137604051601481016040523360601b9052565b7f4699dba8218b1aac6243d5dab52e369d3957ba9201f5a21f9bc085fe223133b57f000000000000000000000000000000004f43c49e93c970e84001853a70923b0330147f0000000000000000000000000000000000000000000000000000000000aa36a746141615615377575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527ff3fbaf4e62ef217b8151b366cdaba8fa578e78940637d6c1ec320d10a718877260208201527fe374587661e69268352d25204d81b23ce801573f4b09f3545e69536dc085a37a60408201524660608201523060808201522061535a565b6008810361546e57506001600160a01b0361026e91166001600160a01b03166001600160a01b03197f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f065416177f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0655565b6009146154785750565b6001600160a01b0361026e91166001600160a01b03166001600160a01b03197f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f055416177f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0555565b6001600160a01b038116801580156155e0575b6139bd575f9081525f516020615b705f395f51905f5260205260409020546001600160a01b03166155c55760015f525f516020615b705f395f51905f5260205261026e9061558a6155627fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13610cc8565b6135a5835f516020615b705f395f51905f52906001600160a01b03165f5260205260405f2090565b60015f525f516020615b705f395f51905f526020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a136135a5565b631034f46960e21b5f526001600160a01b031660045260245ffd5b50600181146154f2565b6001600160a01b038116801580156156d0575b6139bd575f9081525f516020615b105f395f51905f5260205260409020546001600160a01b03166155c55760015f525f516020615b105f395f51905f5260205261026e9061569561566d7ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7610cc8565b6135a5835f516020615b105f395f51905f52906001600160a01b03165f5260205260405f2090565b60015f525f516020615b105f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c76135a5565b50600181146155fd565b634e487b7160e01b5f52602160045260245ffd5b600211156156f857565b6156da565b3560028110156102135790565b615713816156fd565b61571c816156ee565b61575d576104ff816020611cca9301906157586157398383611f6c565b6157536157496040860186613fd5565b9390923691611e25565b615911565b611f6c565b6001615768826156fd565b615771816156ee565b036157da575f806157856020840184611f6c565b506040518061579f816020858101358601803591016123b4565b0391355afa906157ad6123c1565b91156157cb576157c4816040611cca930190613fd5565b9083615911565b636533cc8d60e01b5f5260045ffd5b639485795560e01b5f5260045ffd5b9291905f91604051943892602083519301915af115614f14573d82523d5f602084013e60203d830101604052565b604081360312610213576040519061582e82611c72565b8035600481101561021357825260208101359067ffffffffffffffff82116102135761585c91369101611e5b565b602082015290565b600411156156f857565b9190826040910312610213576020825192015190565b1561588b57565b630a31844b60e41b5f52600360045260245ffd5b156158a657565b630a31844b60e41b5f52600260045260245ffd5b156158c157565b630a31844b60e41b5f52600160045260245ffd5b156158dc57565b630a31844b60e41b5f525f60045260245ffd5b602081519101519060208110615903575090565b5f199060200360031b1b1690565b918061591c57505050565b5f5b81811061592b5750505050565b61593e61593982848661519d565b615817565b9060208160051b8601015191805161595581615864565b61595e81615864565b61598157600192615975602061597b9301516158ef565b146158d5565b0161591e565b6001815161598e81615864565b61599781615864565b036159bb576001926159af60206159b69301516158ef565b11156158ba565b61597b565b600281516159c881615864565b6159d181615864565b036159f0576001926159e960206159b69301516158ef565b101561589f565b600381516159fd81615864565b615a0681615864565b03615a4557600192615a2860206159b69301516020808251830101910161586e565b908210159182615a3a575b5050615884565b111590505f80615a33565b631628622f60e11b5f5260045ffd5b929193905f5b848110615a6957505050505050565b60208160051b83010151906001600160a01b038716916040516020810190615aa181615186868b869091604092825260208201520190565b519020833b156102135760405163a39e078760e01b8152600481019190915260248101919091526001600160a01b0385166044820152915f908390606490829084905af19182156104cc57600192615afb575b5001615a5a565b8061087e5f615b0993611c93565b5f615af456fe0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f000bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f030bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f080bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f01a164736f6c634300081b000a\"\n  },\n  \"0x000000001D1D5004a02bAfAb9de2D6CE5b7B13de\": {\n    name: \"NEXUS_ACCOUNT_FACTORY_ADDRESS\",\n    address: \"0x000000001D1D5004a02bAfAb9de2D6CE5b7B13de\",\n    bytecode:\n      \"0x60806040526004361015610011575f80fd5b5f5f3560e01c8063256929621461060d578063290ab984146105ca578063451711591461052c5780634a1ce599146104ca57806354d1f13d14610484578063715018a6146104395780638da5cb5b1461040e578063b36f97051461035e578063ea6d13ac146101c4578063f04e283e14610176578063f2fde38b14610137578063fafa2b42146100de5763fee81cf4146100a9575f80fd5b346100db5760203660031901126100db576100c2610656565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b50346100db5760206101266100ff6100f53661066c565b9291903691610713565b907f000000000000000000000000000000004f43c49e93c970e84001853a70923b036107ea565b6001600160a01b0360405191168152f35b5060203660031901126100db5761014c610656565b610154610749565b8060601b156101695761016690610765565b80f35b637448fbae82526004601cfd5b5060203660031901126100db5761018b610656565b610193610749565b63389a75e1600c528082526020600c20805442116101b75790826101669255610765565b636f5e881883526004601cfd5b506101ce3661066c565b90917f000000000000000000000000000000004f43c49e93c970e84001853a70923b03926101fd368284610713565b6001600160a01b036102108286886107ea565b1694853b159182156103075761025561024791604051928391634b6a141960e01b60208401526020602484015260448301906107a3565b03601f1981018352826106c1565b604051916102aa8084019084821067ffffffffffffffff8311176102f35792849392610288928a96946108d486396107c7565b039034f5156102e857918491602096935b6102a8575b8683604051908152f35b7f47e5b5fc3bda028416e26dcf66ca5186488c0717e8ab55bb01806113f1839d589181604051928392833781018581520390209280a45f8082818061029e565b6040513d87823e3d90fd5b634e487b7160e01b8b52604160045260248bfd5b50508580808034895af13d15610359573d610321816106f7565b9061032f60405192836106c1565b81528760203d92013e5b1561034a5791849160209693610299565b630db2c7f160e31b8652600486fd5b610339565b50346100db5760403660031901126100db57610378610656565b90602435916001600160a01b03831680930361040a576001600160a01b039061039f610749565b1680156103fb578192813b156103f757829160248392604051948593849263611d2e7560e11b845260048401525af180156103ec576103db5750f35b816103e5916106c1565b6100db5780f35b6040513d84823e3d90fd5b5050fd5b6391fdf19160e01b8252600482fd5b5080fd5b50346100db57806003193601126100db576020638b78c6d819546001600160a01b0360405191168152f35b50806003193601126100db5761044d610749565b80638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380638b78c6d8195580f35b50806003193601126100db5763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b50346100db5760203660031901126100db576001600160a01b036104ec610656565b6104f4610749565b1680156103fb578082913b156105295781809160046040518094819363bb9fe6bf60e01b83525af180156103ec576103db5750f35b50fd5b5060403660031901126105b757610541610656565b6024359063ffffffff82168092036105b7576001600160a01b0390610564610749565b169081156105bb57813b156105b7575f90602460405180948193621cb65b60e51b8352600483015234905af180156105ac5761059e575080f35b6105aa91505f906106c1565b005b6040513d5f823e3d90fd5b5f80fd5b6391fdf19160e01b5f5260045ffd5b346105b7575f3660031901126105b75760206040516001600160a01b037f000000000000000000000000000000004f43c49e93c970e84001853a70923b03168152f35b5f3660031901126105b75763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b600435906001600160a01b03821682036105b757565b9060406003198301126105b75760043567ffffffffffffffff81116105b757826023820112156105b75780600401359267ffffffffffffffff84116105b757602484830101116105b757602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176106e357604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff81116106e357601f01601f191660200190565b92919261071f826106f7565b9161072d60405193846106c1565b8294818452818301116105b7578281602093845f960137010152565b638b78c6d81954330361075857565b6382b429005f526004601cfd5b6001600160a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6040906001600160a01b036107e7949316815281602082015201906107a3565b90565b916108586108976001600160a01b039460206102aa91610866610247610848604051986108198688018b6106c1565b868a52858a01966108d48839604051634b6a141960e01b878201526024810187905292839160448301906107a3565b60405196879185830194856107c7565b03601f1981018752866106c1565b60405194859383850197518091895e840190838201905f8252519283915e01015f815203601f1981018352826106c1565b51902060405190602082019260ff60f81b84523060601b602184015260358301526055820152605581526108cc6075826106c1565b519020169056fe60806040526102aa803803806100148161018c565b92833981016040828203126101885781516001600160a01b03811692909190838303610188576020810151906001600160401b03821161018857019281601f8501121561018857835161006e610069826101c5565b61018c565b9481865260208601936020838301011161018857815f926020809301865e8601015260017f90b772c2cb8a51aa7a8a65fc23543c6d022d5b3f8e2b92eed79fba7eef8293005d823b15610176577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561015e575f8091610146945190845af43d15610156573d91610137610069846101c5565b9283523d5f602085013e6101e0565b505b604051606b908161023f8239f35b6060916101e0565b50505034156101485763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b157604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116101b157601f01601f191660200190565b9061020457508051156101f557805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610235575b610215575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561020d56fe60806040523615605c575f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156058573d5ff35b3d5ffd5b00fea164736f6c634300081b000aa164736f6c634300081b000a\"\n  },\n  \"0x3fAB184622Dc19b6109349B94811493BF2a45362\": {\n    name: \"CREATE2_FACTORY_DEPLOYER_ADDRESS\",\n    address: \"0x3fAB184622Dc19b6109349B94811493BF2a45362\",\n    bytecode: \"0x\"\n  },\n  \"0x74Cb5e4eE81b86e70f9045036a1C5477de69eE87\": {\n    name: \"ENTRY_POINT_SIMULATIONS_ADDRESS\",\n    address: \"0x74Cb5e4eE81b86e70f9045036a1C5477de69eE87\",\n    bytecode:\n      \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c18f522614610030575b600080fd5b61004361003e366004610230565b610059565b60405161005091906103b0565b60405180910390f35b60606000825167ffffffffffffffff811115610077576100776101e9565b6040519080825280602002602001820160405280156100aa57816020015b60608152602001906001900390816100955790505b50905060005b835181101561019d57606060007f850aaf621a3721219c57b79d6077e318862cf95113b5637afaddb124884a5eb060008054906101000a90046001600160a01b031687858151811061010457610104610414565b602002602001015160405160240161011d92919061042a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050600061015f8882845a6101a5565b905080610174576101716000196101bd565b92505b8285858151811061018757610187610414565b60209081029190910101525050506001016100b0565b509392505050565b6000806000845160208601878987f195945050505050565b60603d828111156101cb5750815b604051602082018101604052818152816000602083013e9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610228576102286101e9565b604052919050565b600080604080848603121561024457600080fd5b83356001600160a01b038116811461025b57600080fd5b925060208481013567ffffffffffffffff8082111561027957600080fd5b8187019150601f88601f84011261028f57600080fd5b8235828111156102a1576102a16101e9565b8060051b6102b08682016101ff565b918252848101860191868101908c8411156102ca57600080fd5b87870192505b83831015610357578235868111156102e85760008081fd5b8701603f81018e136102fa5760008081fd5b888101358781111561030e5761030e6101e9565b61031f818801601f19168b016101ff565b8181528f8c8385010111156103345760008081fd5b818c84018c83013760009181018b019190915283525091870191908701906102d0565b8099505050505050505050509250929050565b6000815180845260005b8181101561039057602081850181015186830182015201610374565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561040757603f198886030184526103f585835161036a565b945092850192908501906001016103d9565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038316815260406020820181905260009061044e9083018461036a565b94935050505056fea26469706673582212207ddd3776bce2d23a4710581621f90634e5e2f38c35b4ba3416ba605ac54ef07b64736f6c63430008170033\"\n  },\n  \"0x00000000d12897DDAdC2044614A9677B191A2d95\": {\n    name: \"MEE_VALIDATOR_ADDRESS\",\n    address: \"0x00000000d12897DDAdC2044614A9677B191A2d95\",\n    bytecode:\n      \"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146101145780630807dbc11461010f5780632e5b63a61461010a57806354fd4d50146101055780635c81ca68146101005780636d61fe70146100fb5780638a91b0e3146100f6578063940d3840146100f157806397003203146100ec578063d60b347f146100e7578063d620c85a146100e2578063e824b568146100dd578063ecd05961146100d8578063f2fde38b146100d3578063f551e2ee146100ce5763fa544161146100c9575f80fd5b610813565b6107b3565b61071d565b6106e5565b6106b6565b61067c565b61062e565b6105e2565b610531565b610487565b610356565b6102c8565b610271565b61022d565b6101ca565b610151565b5f91031261012357565b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b34610123575f366003190112610123576101a8604051610172604082610880565b600e81527f4b314d656556616c696461746f72000000000000000000000000000000000000602082015260405191829182610127565b0390f35b6001600160a01b0381160361012357565b35906101c8826101ac565b565b346101235760403660031901126101235760206102226004356101ec816101ac565b6001600160a01b0360243591610201836101ac565b165f526002835260405f20906001600160a01b03165f5260205260405f2090565b541515604051908152f35b34610123576020366003190112610123576001600160a01b03600435610252816101ac565b165f525f60205260206001600160a01b0360405f205416604051908152f35b34610123575f366003190112610123576101a8604051610292604082610880565b600581527f312e302e31000000000000000000000000000000000000000000000000000000602082015260405191829182610127565b34610123576020366003190112610123576102f76001600160a01b036004356102f0816101ac565b1633611771565b005b9181601f840112156101235782359167ffffffffffffffff8311610123576020838186019501011161012357565b6020600319820112610123576004359067ffffffffffffffff821161012357610352916004016102f9565b9091565b346101235761036436610327565b90811561045f57610391336001600160a01b03165f525f6020526001600160a01b0360405f205416151590565b6104375781601411610123576104196103b46103ae60148461099b565b60601c90565b6103c86001600160a01b03821615156109db565b6103d7813b15610a0a565b1590565b6103f1336001600160a01b03165f525f60205260405f2090565b906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b6014821161042357005b816102f7926104319261091f565b90610dee565b7fe72ce85e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1f2a381c000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101235761049536610327565b5050335f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff198154169055335f52600160205260405f20546001905b808211156104d857005b8181039181831161052c57335f52600160205260405f20805484101561051b5761050f90600161051594950160051b015433612041565b50611858565b906104ce565b83638277484f5f526020526024601cfd5b610d4a565b346101235760603660031901126101235760043560243567ffffffffffffffff8111610123576105659036906004016102f9565b60443567ffffffffffffffff8111610123576105859036906004016102f9565b601481949294106105ba57601411610123576101a8936105a8933560601c610e80565b60405190151581529081906020820190565b7fdfe93090000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101235760403660031901126101235760043567ffffffffffffffff81116101235761012060031982360301126101235761062660209160243590600401610ae5565b604051908152f35b34610123576020366003190112610123576020610672600435610650816101ac565b6001600160a01b03165f525f6020526001600160a01b0360405f205416151590565b6040519015158152f35b34610123575f3660031901126101235760206040517fd620c85a000000000000000000000000000000000000000000000000000000008152f35b34610123576020366003190112610123576102f76001600160a01b036004356106de816101ac565b1633612041565b3461012357602036600319011261012357602060043560018114908115610712575b506040519015158152f35b60079150145f610707565b346101235760203660031901126101235760043561073a816101ac565b6001600160a01b0381161561078b57806107586102f7923b15610a0a565b335f525f60205260405f20906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b7f8579befe000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610123576060366003190112610123576004356107d0816101ac565b60443560243567ffffffffffffffff8211610123576020926107f96108019336906004016102f9565b929091610c16565b6001600160e01b031960405191168152f35b3461012357602036600319011261012357602061083a600435610835816101ac565b610d06565b6001600160a01b0360405191168152f35b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761087b57604052565b61084b565b90601f8019910116810190811067ffffffffffffffff82111761087b57604052565b604051906101c86101a083610880565b604051906101c861012083610880565b604051906101c860e083610880565b604051906101c8604083610880565b604051906101c8608083610880565b67ffffffffffffffff811161087b57601f01601f191660200190565b6040519061091a602083610880565b5f8252565b909291928360141161012357831161012357601401916013190190565b906004116101235790600490565b909291928360041161012357831161012357600401916003190190565b909291928360011161012357831161012357600101915f190190565b90939293848311610123578411610123578101920390565b356bffffffffffffffffffffffff198116929190601482106109bb575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b156109e257565b7fc81abf60000000000000000000000000000000000000000000000000000000005f5260045ffd5b15610a1157565b7f83e6a1cb000000000000000000000000000000000000000000000000000000005f5260045ffd5b903590601e1981360301821215610123570180359067ffffffffffffffff82116101235760200191813603831361012357565b919091356001600160e01b031981169260048110610a88575050565b6001600160e01b0319929350829060040360031b1b161690565b35610aac816101ac565b90565b929192610abb826108ef565b91610ac96040519384610880565b829481845281830111610123578281602093845f960137010152565b610100810191610b07610b01610afb8585610a39565b9061093c565b90610a6c565b916001600160e01b0319610b1d61083583610aa2565b9316620bbf7760e91b8103610b4b5750610b3d610aac94610b4492610a39565b809161094a565b5090611505565b63177eee0160e01b8103610b705750610b3d610aac94610b6a92610a39565b9161144b565b630bbf770160e11b03610b9357610b3d610aac94610b8d92610a39565b916110ea565b610ba3610aac94610baa92610a39565b3691610aaf565b90610f21565b919091357fffffff000000000000000000000000000000000000000000000000000000000081169260038110610be4575050565b7fffffff0000000000000000000000000000000000000000000000000000000000929350829060030360031b1b161690565b90918360031161012357620bbf7760e91b7fffffff0000000000000000000000000000000000000000000000000000000000610c53600384610bb0565b1614610c6e57610aac93610c66916115ad565b9290916115df565b919050610cc9610cd193610c8133610d06565b60408051602081019586523360601b6bffffffffffffffffffffffff191691810191909152909390610cc081605481015b03601f198101835282610880565b519020936115ad565b929091610e80565b15610cfa577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b6001600160e01b031990565b6001600160a01b0381165f525f6020526001600160a01b0360405f20541680155f14610d30575090565b905090565b6001600160a01b03610aac92169060016117f8565b634e487b7160e01b5f52601160045260245ffd5b8115610d68570490565b634e487b7160e01b5f52601260045260245ffd5b908160051b918083046020149015171561052c57565b908160081b91808304610100149015171561052c57565b906001820180921161052c57565b90601b820180921161052c57565b90601f820180921161052c57565b906037820180921161052c57565b9190820180921161052c57565b9060148106610e58575f5b601482048110610e0857505050565b806014029060148204810361052c57610e2081610da9565b8060140290601482040361052c57610e4b6103ae610e45610e5193600196888a610983565b9061099b565b33610d35565b5001610df9565b7f1c6b73d6000000000000000000000000000000000000000000000000000000005f5260045ffd5b919290926001600160e01b0319610e9a610b01848461093c565b16620bbf7760e91b8103610ebf575081610aac9492610eb89261094a565b5091611bd7565b63177eee0160e01b8103610ee6575081610aac949392610ede9261094a565b929091611a68565b630bbf770160e11b03610f0b5781610aac949392610f039261094a565b9290916119b0565b610f1b90610aac94923691610aaf565b91611c2b565b610f2a92611c2b565b15610f33575f90565b600190565b3590811515820361012357565b359065ffffffffffff8216820361012357565b60ff81160361012357565b35906101c882610f58565b67ffffffffffffffff811161087b5760051b60200190565b929190610f9281610f6e565b93610fa06040519586610880565b602085838152019160051b810192831161012357905b828210610fc257505050565b8135815260209182019101610fb6565b9080601f8301121561012357816020610aac93359101610f86565b6101a081360312610123576110006108a2565b9061100a816101bd565b8252611018602082016101bd565b602083015260408101356040830152606081013560608301526080810135608083015261104760a08201610f38565b60a083015260c081013560c083015261106260e08201610f45565b60e08301526110746101008201610f45565b6101008301526110876101208201610f63565b6101208301526101408101356101408301526101608101356101608301526101808101359067ffffffffffffffff8211610123576110c791369101610fd2565b61018082015290565b6040513d5f823e3d90fd5b90816020910312610123575190565b9291506110f990602001610fed565b60e0810191611138611111845165ffffffffffff1690565b61010084019565ffffffffffff8061112f895165ffffffffffff1690565b16921690611c96565b6111428383611cdd565b9261014081018051906111b26103d36101608501978851906111ac61012088019661119e611171895160ff1690565b6040519586936020850191926041936001600160f81b0319928452602084015260f81b1660408201520190565b03601f198101845283610880565b88611c2b565b61143e576111d06103d36101808501519560c0860196875190611da3565b61143e5760a0830151611228575b5050505050506112076111fa610aac935165ffffffffffff1690565b915165ffffffffffff1690565b6001600160d01b031965ffffffffffff60a01b9160d01b169160a01b161790565b61124861123c84516001600160a01b031690565b6001600160a01b031690565b93602084019461125f86516001600160a01b031690565b60608601986112738a519451965160ff1690565b9451905190833b15610123576112f65f96928b9288946040519a8b998a9889977fd505accf000000000000000000000000000000000000000000000000000000008952600489019360c09591989796936001600160a01b0360ff948160e089019c1688521660208701526040860152606085015216608083015260a08201520152565b03925af19081611424575b50611411579160209161133961132b61123c61123c61123c6113869998516001600160a01b031690565b91516001600160a01b031690565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152921660248301529093849190829081906044820190565b03915afa91821561140c575f926113db575b5051116113b3576112076111fa610aac935b935f80806111de565b7fb78cb0dd000000000000000000000000000000000000000000000000000000005f5260045ffd5b6113fe91925060203d602011611405575b6113f68183610880565b8101906110db565b905f611398565b503d6113ec565b6110d0565b505050506112076111fa610aac936113aa565b806114325f61143893610880565b80610119565b5f611301565b5050505050505050600190565b929161145691611eae565b9060e08201916114bf6103d3611493611475865165ffffffffffff1690565b61010085019765ffffffffffff8061112f8b5165ffffffffffff1690565b936040840151906114b460608601519261119e611171602089015160ff1690565b608085015190611c2b565b6114fc576114db918160a060c06103d394015191015190611da3565b6114f5576112076111fa610aac935165ffffffffffff1690565b5050600190565b50505050600190565b90918235916020840135926040850135946060810135019261155b84359183610f1b61154a8560051b89019765ffffffffffff8c169065ffffffffffff8c1690611c96565b963690604060208201359101610aaf565b156115a25761157793611572916020369201610f86565b611da3565b156114f557610aac91906001600160d01b031965ffffffffffff60a01b9160d01b169160a01b161790565b505050505050600190565b9182828101601f19013561649261ffff30801c190402146115cb5750565b604091935080925001350160208135910191565b929190821561170c575b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a06020830135116116e4576001600160a01b035f94166dd9ecebf3c23529de49815dac1c4c81149081156116da575b81156116aa575b5061168a575b8315611677575b8315611665575b505050155f03631626ba7e1760e01b90565b61166f935061251e565b5f8080611653565b925061168482828561224d565b9261164c565b92506116a461169833610d06565b84610f1b368686610aaf565b92611645565b90505f5260026020526116d13360405f20906001600160a01b03165f5260205260405f2090565b5415155f61163f565b3381149150611638565b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b61773961ffff8419040281036115e957505050507f773900010000000000000000000000000000000000000000000000000000000090565b60019061176b935f520160205260405f20906001600160a01b03165f5260205260405f2090565b54151590565b815f52600180016020526117998160405f20906001600160a01b03165f5260205260405f2090565b546117f257806117ec915f52600160205260405f20600181540190848260051b82015555805f52600160205260405f2054925f52600260205260405f20906001600160a01b03165f5260205260405f2090565b55600190565b50505f90565b90611804838284611744565b611851575f81815260208390526040902080546001908101600581901b8301869055918290556117ec939091945f520160205260405f20906001600160a01b03165f5260205260405f2090565b5050505f90565b5f19811461052c5760010190565b5f1981019190821161052c57565b60051981019190821161052c57565b60221981019190821161052c57565b601f1981019190821161052c57565b60bf1981019190821161052c57565b607f1981019190821161052c57565b602003906020821161052c57565b9190820391821161052c57565b91909161012081840312610123576118f06108b2565b926118fa826101bd565b84526020820135602085015260408201356040850152606082013560608501526080820135608085015261193060a08301610f63565b60a085015260c082013560c085015260e082013560e085015261010082013567ffffffffffffffff8111610123576119689201610fd2565b610100830152565b35610aac81610f58565b903590601e1981360301821215610123570180359067ffffffffffffffff821161012357602001918160051b3603831361012357565b919250611a2f6103d360208501936119d16119cb36876118da565b826125d1565b61010087013591611a2a60e0890135611a1c6119ef60c08c01611970565b6040519687936020850191926041936001600160f81b0319928452602084015260f81b1660408201520190565b03601f198101855284610880565b611c2b565b6118515760a061157284611a4e6103d395610120611a5b98019061197a565b9390910135923691610f86565b611a6457600190565b5f90565b611a70612658565b50611a7b8484611e5e565b3560f81c92611a8985611866565b611a94908683611e6c565b3560f81c611aa181610d7c565b611aaa90610da9565b611ab490876118cd565b611abf908784610967565b909290611acd368286610aaf565b611ad690612761565b91611ae08361278e565b611aea90896128a9565b93888551611af7906129cd565b9360208701978851986040890191825198611b1190613116565b9190508a5192519351943690611b2692610aaf565b611b2f95612a77565b9460600151611b3d90612bf8565b99611b4792612e56565b96611b506108c2565b60ff918216815291166020820181905260408201859052606082018390526080820193845260a0820198895260c090910196875260408051602081019590955284019190915260f81b6001600160f81b031916606083015260418252611bb7606183610880565b51611bc192611c2b565b1561185157611a5b926103d39251905190611da3565b9180359060208101350192611c0284359183610f1b8460051b88013690604060208201359101610aaf565b15611c2357611c1993611572916020369201610f86565b15611a6457600190565b505050505f90565b906001600160a01b03929183611c41848461269f565b911693168314611c8e576001600160a01b0391611c84916020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042061269f565b1614610f33575f90565b505050600190565b9160405191602083019384526040830152606082015260608152611cbb608082610880565b5190206040516020810191825260208152611cd7604082610880565b51902090565b90604060429260c0830151611d676001600160a01b03602086015116610cb26060870151936080880151875195869460208601988991926001600160a01b0360a09497969592978160c08601997f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98752166020860152166040840152606083015260808201520152565b51902091015190604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b929091905f915b8451831015611dec57611dbd8386612735565b519081811015611ddb575f52602052600160405f205b920191611daa565b905f52602052600160405f20611dd3565b915092501490565b60405190610120820182811067ffffffffffffffff82111761087b576040525f610100838281528260208201528260408201528260608201528260808201528260a0820152606060c08201528260e08201520152565b634e487b7160e01b5f52603260045260245ffd5b9015611e675790565b611e4a565b90821015611e67570190565b919091356001600160d01b031981169260068110611e94575050565b6001600160d01b0319929350829060060360031b1b161690565b611eb6611df4565b50611ec18282611e5e565b3560f81c91600c91611ed383836118cd565b611edc83611874565b611ee7918484610983565b611ef091611e78565b60d01c9180611efe81611874565b90611f0a918185610983565b611f1391611e78565b60d01c93611f2181836118cd565b611f2a90611866565b611f35908385611e6c565b3560f81c90611f4382610d7c565b611f4c90610da9565b90611f5691610de1565b611f6090836118cd565b611f6b908385610967565b9390611f78368683610aaf565b611f8190612761565b91611f8b8361278e565b611f95908a6128a9565b93898551611fa2906129cd565b9760208701948551956040890191825198611fbc90613116565b9190508a5192519351943690611fd192610aaf565b611fda95612a77565b9460600151611fe890612bf8565b95611ff292612d05565b94611ffb6108b2565b60ff909916895260ff16602089015260408801526060870152608086015260a085015260c084015265ffffffffffff1660e083015265ffffffffffff1661010082015290565b90805f5260026020526120688260405f20906001600160a01b03165f5260205260405f2090565b54918215611851575f1983019183831161052c575f828152600160205260409020545f1981019190821161052c575f948484846120c7956117ec98036120dd575b5090506120b89150600161345b565b6002905f5260205260405f2090565b906001600160a01b03165f5260205260405f2090565b6120fd926120b86120f36120c79385600161340e565b809285600161343d565b555f8084816120a9565b81601f820112156101235780519061211e826108ef565b9261212c6040519485610880565b8284526020838301011161012357815f9260208093018386015e8301015290565b51906101c8826101ac565b9080601f8301121561012357815161216f81610f6e565b9261217d6040519485610880565b81845260208085019260051b82010192831161012357602001905b8282106121a55750505090565b8151815260209182019101612198565b9060e0828203126101235781516001600160f81b0319811681036101235792602083015167ffffffffffffffff811161012357826121f4918501612107565b92604081015167ffffffffffffffff81116101235783612215918301612107565b926060820151926122286080840161214d565b9260a08101519260c082015167ffffffffffffffff811161012357610aac9201612158565b9092309330612476575b60405190600119858201013560f01c94600e830196869187810384016041198101976119015f5260408960203789158a604201841017816042601e20181761243657507f5479706564446174615369676e2800000000000000000000000000000000000086526001198101999889818c82378188016028600e8201526029600d8201515f1a036123e0575b506f07fffffe000000000000010000000000919250999899515f1a1c5b88515f1a602881146123205790651201000000016001921c179801976122ff565b50929496999086986040610aac9b83605c96989a957f20636f6e74656e74732c737472696e67206e616d652c737472696e670000000085527f2076657273696f6e2c75696e7432353620636861696e49642c61646472657373601c8601527f20766572696679696e67436f6e74726163742c627974657333322073616c7429603c8601528785013788370103018620835260e08320604052600116604201601e2092604119910301935b604052612d82576123db9033612d93565b612d82565b60015f5b016029600d82840301515f1a148482101115612402576001906123e4565b6028915080806040600e936f07fffffe000000000000010000000000970397886041199101010185378a01015382916122e2565b949699505095505050610aac94505f907f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de5f5260205260405f20916123ca565b6040516342580cb760e11b815294505f85600481335afa801561140c575f955f5f905f925f946124e5575b50906001600160a01b039291604051996020815191012060408b01526020815191012060608a015260808901521660a087015260c086015260e08501604052612257565b925050506001600160a01b03965061250f91503d805f833e6125078183610880565b8101906121b5565b509399939450929091906124a1565b92915f933a1561252d57505050565b90919293503a3a5260203a3a386d378edcd5b5b0a24f5342d8c1048561fffffa503a511561256e575b610f1b610aac9361256633610d06565b933691610aaf565b60405192631626ba7e3a526d378edcd5b5b0a24f5342d8c1048560205260408052454561ffff011790815a106d378edcd5b5b0a24f5342d8c104858414176125cf57610aac94610f1b923a906064601c3a923090fa50604052935050612556565bfe5b9060206042926080830151611d676001600160a01b03855116610cb26040870151936060880151604051958694898601988991926001600160a01b0360a09497969592978160c08601997f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98752166020860152166040840152606083015260808201520152565b6040519060e0820182811067ffffffffffffffff82111761087b57604052606060c0835f81525f60208201525f60408201525f838201525f60808201525f60a08201520152565b9190915f92604051918151806040146126f7576041146126be57505050565b602092945060608201515f1a835260408201516060525b5f5201516040526020604060805f60015afa505f6060523d6060185191604052565b5060209294507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040830151601b8160ff1c018552166060526126d5565b8051821015611e675760209160051b010190565b604051906127568261085f565b5f6020838281520152565b612769612749565b5060208151916040519261277c8461085f565b835201602082015290565b1561012357565b9061279882612ebf565b15610123576127a682612edf565b916127b083610f6e565b906127be6040519283610880565b838252601f196127cd85610f6e565b015f5b81811061285d575050602081016127f181516127eb81612f40565b90610de1565b945f905b808210612817575050610aac92939461280f9151906118cd565b905114612787565b909561285581612828600193612fab565b906128316108d1565b8281528160208201526128448b8a612735565b5261284f8a89612735565b50610de1565b9601906127f5565b602090612868612749565b828287010152016127d0565b604051906080820182811067ffffffffffffffff82111761087b57604052606080835f81525f60208201525f60408201520152565b60ff906128b4612874565b50168061292e5750600560069061291061290a60079460ff6129026128ec826128fa6128ec826128f26128ec8260089e5b168a612735565b51613029565b9c1687612735565b981684612735565b941690612735565b516130da565b916129196108e0565b93845260208401526040830152606082015290565b60020361296257600760099061291061290a600a9460ff6129026128ec826128fa6128ec826128f26128ec82600b9e6128e5565b60405162461bcd60e51b815260206004820152602860248201527f547856616c696461746f724c69623a3a20756e737570706f727465642065766d60448201527f20747820747970650000000000000000000000000000000000000000000000006064820152608490fd5b60258110612a2e576129de81613104565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116810361052c57612a23612a1e610aac93612a289360011b906118cd565b611883565b610db7565b60ff1690565b60018111612a2857601b810180911161052c5760ff1690565b805191908290602001825e015f815290565b6001906001600160f81b0319610aac949360f81b1681520190612a47565b94612ad19192612ac7612abf612ab3612ad694612aac612aa0612aa5612aa0612adc9c9d6135e8565b613664565b51926135e8565b5190610de1565b612aac612aa08a6135e8565b9185516118cd565b92839185516118cd565b6118cd565b91613246565b9060ff831660028103612b14575050611cd7612b03610cb292612afd61090b565b906132ca565b604051928391602083019586612a59565b91925090612b8e5760258110612b8157612b7791612b72612b3f612b3a612b6c94613104565b613142565b61119e612b4d612aa0613543565b612b6c612b5b612aa0613543565b916040519788956020870190612a47565b90612a47565b6132ca565b6020815191012090565b50612b7790612afd61090b565b60405162461bcd60e51b8152602060048201526024808201527f547856616c696461746f724c69623a3a20756e737570706f727465642074782060448201527f74797065000000000000000000000000000000000000000000000000000000006064820152608490fd5b6020815110612c3a578051601f19810190811161052c57612c18916131e4565b602081519101519060208110612c2c575090565b5f199060200360031b1b1690565b608460405162461bcd60e51b815260206004820152602560248201527f54784465636f6465723a3a2063616c6c44617461206c656e67746820746f6f2060448201527f73686f72740000000000000000000000000000000000000000000000000000006064820152fd5b90612cae82610f6e565b612cbb6040519182610880565b8281528092612ccc601f1991610f6e565b0190602036910137565b60ff16801561052c575f190190565b359060208110612c2c575090565b60ff5f199116019060ff821161052c57565b929190612d1460ff8316612ca4565b93600b19820182811161052c575f19810190811161052c579291925b60ff8316612d3e5750505050565b612d7681612d62612d5c82612d55612d7c96611892565b8988610983565b90612ce5565b612d7060ff6128e588612cf3565b52611892565b92612cd6565b91612d30565b610f1b610aac939261256633610d06565b5f6001600160a01b03916004604051809481936342580cb760e11b8352165afa90811561140c5760a0915f915f5f915f93612e31575b50604051937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f855260208151910120602085015260208151910120604084015260608301526080820152206719010000000000005f52601a52603a526042601820905f603a52565b92505050612e4991503d805f833e6125078183610880565b509394509250905f612dc9565b9291612e6460ff8216612ca4565b935f19830183811161052c575b60ff8316612e7f5750505050565b601f19810181811161052c57612e9d612d5c612eb993838887610983565b612eb260ff612eab87612cf3565b1689612735565b5292612cd6565b91612e71565b805115612eda57602060c0910151515f1a10611a6457600190565b505f90565b805115612eda575f9060208101908151612ef881612f40565b810180911161052c5791519051810180911161052c5791905b828110612f1e5750905090565b612f2781612fab565b810180911161052c57612f3a9091611858565b90612f11565b515f1a6080811015612f5157505f90565b60b881108015612f95575b15612f675750600190565b60c0811015612f8657610aac90612f819060b75b906118cd565b610da9565b610aac90612f819060f7612f7b565b5060c08110158015612f5c575060f88110612f5c565b80515f1a906080821015612fc0575050600190565b60b8821015612fd65750612f81610aac916118b0565b60c0821015612ff95760010151602082900360b7016101000a90040160b5190190565b60f882101561300f5750612f81610aac916118a1565b60010151602082900360f7016101000a90040160f5190190565b8051801515908161305f575b50156101235761304490613116565b90519060208110613053575090565b6020036101000a900490565b6021915011155f613035565b6040805190919061307c8382610880565b60208152918290601f190190369060200137565b604080519091906130a18382610880565b6001815291601f1901366020840137565b906130bc826108ef565b6130c96040519182610880565b8281528092612ccc601f19916108ef565b805115610123576130ed610aac91613116565b6130f9819392936130b2565b9283602001906134b2565b602219810190811161052c5760011c90565b9060208201916131268351612f40565b92519083820180921161052c575192830392831161052c579190565b612aa0610aac916135e8565b1561315557565b606460405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152fd5b156131a057565b606460405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152fd5b906131ef600161314e565b61320682516131ff602084610de1565b1115613199565b6040519160208084019260408501920101905b80831061323357505060208252601f01601f191660405290565b9091602080918451815201920190613219565b9161325b8161325481610dc5565b101561314e565b61326a83516131ff8385610de1565b80613282575050506040515f81526020810160405290565b60405192601f821692831560051b80858701019484860193010101905b8084106132b75750508252601f01601f191660405290565b909260208091855181520193019061329f565b6132e590610cb2612b6c936040519485936020850190612a47565b805190603882101561333957612b6c91610cb2610aac926001600160f81b031961331860c0613312613090565b95610de1565b60f81b165f1a61332784613525565b535b6040519485936020850190612a47565b916001915f5b6133498483610d5e565b156133665761335a61336091611858565b93610d92565b9261333f565b90925092909261337d61337882610da9565b6130b2565b926001600160f81b031961339a61339560c085610de1565b610dd3565b60f81b165f1a6133a985613525565b5360015b828111156133c857505050612b6c91610cb2610aac92613329565b806001600160f81b03196133f3612a286133ed6133e861340996896118cd565b6134a3565b86610d5e565b60f81b165f1a6134038288613532565b53611858565b6133ad565b905f5260205260405f2090815481101561342d5760010160051b015490565b638277484f5f526020526024601cfd5b905f5260205260405f2090815481101561342d5760010160051b0155565b905f5260205260405f20805490811561349f575f1982019180831161052c57815483101561348e575f9060051b82015555565b82638277484f5f526020526024601cfd5b5050565b601f811161052c576101000a90565b90918015613520575b60208110156134f057806134ce57505050565b6134dd6133e86134e2926118bf565b611866565b905182518216911916179052565b9190805182526020810180911161052c57906020810180911161052c5791601f198101908111156134bb57610d4a565b505050565b805115611e675760200190565b908151811015611e67570160200190565b61354b61306b565b905f60208301525f915b602083106135b7575b61356a613378846118bf565b905f5b82518110156135b05760019061359d61358f61358888611858565b9785613532565b516001600160f81b03191690565b5f1a6135a98286613532565b530161356d565b5090925050565b916135d56135c861358f8386613532565b6001600160f81b03191690565b6135e25760010191613555565b9161355e565b906135f161306b565b9160208301525f915b60208310613640575b61360f613378846118bf565b905f5b82518110156135b05760019061362d61358f61358888611858565b5f1a6136398286613532565b5301613612565b916136516135c861358f8386613532565b61365e57600101916135fa565b91613603565b80516001811490816136fe575b501561367a5790565b6136848151613716565b6040519181518084526020840190840191602083019160208501905b8381106136ee5750508051809286518201875293019260208085019201905b8281106136de5750509251603f91011590910101601f19166040525090565b81518152602091820191016136bf565b81518152602091820191016136a0565b905015611e67576080602082015160f81c105f613671565b603881101561374e576001600160f81b031961373b6080613735613090565b93610de1565b60f81b165f1a61374a82613525565b5390565b6001915f5b61375d8484610d5e565b156137745761335a61376e91611858565b92613753565b90925061378361337882610da9565b916001600160f81b031961379b613395608085610de1565b60f81b165f1a6137aa84613525565b5360015b828111156137bc5750505090565b806001600160f81b03196137dc612a286133ed6133e86137ec96896118cd565b60f81b165f1a6134038287613532565b6137ae56fea164736f6c634300081b000a\"\n  },\n  \"0x00000000002B0eCfbD0496EE71e01257dA0E37DE\": {\n    name: \"SMART_SESSION_ADDRESS\",\n    address: \"0x00000000002B0eCfbD0496EE71e01257dA0E37DE\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b5060043610610269575f3560e01c806396e7296211610157578063d0e6f608116100d2578063f5297b7711610088578063f77a7eac1161006e578063f77a7eac14610594578063f867b08e146105a7578063f9b80369146105ba575f5ffd5b8063f5297b7714610555578063f551e2ee14610568575f5ffd5b8063d60b347f116100b8578063d60b347f1461051b578063eab256671461052e578063ecd0596114610541575f5ffd5b8063d0e6f608146104e8578063d527ed6e14610508575f5ffd5b8063a9fa4b4411610127578063af29e6b21161010d578063af29e6b2146104af578063c9a5ec39146104c2578063d056b06d146104d5575f5ffd5b8063a9fa4b441461047c578063adbc532f1461049c575f5ffd5b806396e72962146104305780639700320314610443578063a67c714e14610456578063a7ef620514610469575f5ffd5b806344d1628c116101e75780636d61fe70116101b75780637373f1811161019d5780637373f181146103d7578063795f9269146103ea5780638a91b0e31461041d575f5ffd5b80636d61fe70146103b15780636e79eee0146103c4575f5ffd5b806344d1628c1461034a578063454c9d821461036a578063496c8a911461037d5780634e33ad2e1461039e575f5ffd5b80631be1fffb1161023c5780632445e73e116102225780632445e73e146103115780632dadb5e9146103245780632e644d8d14610337575f5ffd5b80631be1fffb146102de57806321712407146102f1575f5ffd5b806302a1a4cd1461026d57806305defba61461028257806309e5aef8146102a85780631097109e146102cb575b5f5ffd5b61028061027b3660046142ec565b6105cd565b005b610295610290366004614878565b610639565b6040519081526020015b60405180910390f35b6102bb6102b63660046149b9565b610671565b604051901515815260200161029f565b6102bb6102d9366004614a00565b61069d565b6102956102ec366004614a57565b6106ac565b6103046102ff366004614a8d565b6106bc565b60405161029f9190614acb565b6102bb61031f366004614a00565b6106d1565b6102bb610332366004614a00565b6106e0565b610280610345366004614b0d565b6106ef565b61035d610358366004614b3b565b610708565b60405161029f9190614b65565b610280610378366004614ba5565b610722565b61039061038b366004614b3b565b61075e565b60405161029f929190614c0c565b6102806103ac366004614c2d565b61079f565b6102806103bf366004614ca3565b6107b9565b6102806103d2366004614cd5565b610894565b6103046103e5366004614d0b565b610944565b6102956103f8366004614d26565b5f918252602082815260408084206001600160a01b0393909316845291905290205490565b61028061042b366004614ca3565b610952565b61028061043e366004614d49565b610991565b610295610451366004614d69565b610a1c565b61035d610464366004614b3b565b610b69565b6102bb610477366004614da1565b610b83565b61048f61048a366004614b3b565b610b9b565b60405161029f9190614e1a565b6102bb6104aa366004614d26565b610bb5565b6102bb6104bd366004614e2c565b610bc2565b6102bb6104d0366004614d26565b610bda565b6102806104e3366004614e5e565b610c04565b6104fb6104f6366004614b3b565b610c1f565b60405161029f9190614ea5565b61035d610516366004614e2c565b610d5f565b6102bb610529366004614d0b565b610d84565b6102bb61053c366004614f1f565b610d98565b6102bb61054f366004614f7d565b60011490565b610280610563366004614f94565b610dcb565b61057b610576366004614fd2565b610e2b565b6040516001600160e01b0319909116815260200161029f565b6102bb6105a2366004614da1565b610eac565b6102806105b5366004614f7d565b610ec4565b6102806105c8366004614f7d565b611018565b846105d9600582611092565b6105e5600533886110bd565b61060a576040516324b5a7e760e21b8152600481018790526024015b60405180910390fd5b610621610617838561501d565b60079088336110e8565b6106316002600333898989611201565b505050505050565b5f848152602081815260408083206001600160a01b0387168452909152812054610665848685846112a5565b9150505b949350505050565b5f82815260036020908152604080832086845290915281206106949086846112b3565b95945050505050565b5f6106946002858786866112e3565b5f6106b68261136f565b92915050565b60606106ca838360016113bf565b9392505050565b5f6106946001858786866112e3565b5f61069460038587868661164e565b6106fa600583611092565b6107048282611711565b5050565b5f8181526001602052604090206060906106ca9084611777565b8161072e600582611092565b61074e60018461074281611784565b611784565b6001929190868461178f565b610759600582611092565b505050565b5f8181526009602090815260408083206001600160a01b038087168552925290912080549091169060609061079560018201611917565b9150509250929050565b816107ab600582611092565b61074e600384846001611922565b6107c4600533611a30565b156107e45760405163bcf00e1d60e01b8152336004820152602401610601565b5f8190036107f0575050565b5f6107fe6001828486615029565b61080791615050565b60f81c600281111561081b5761081b615088565b905061083781600281111561083257610832615088565b611a3b565b6108545760405163a0042b1760e01b815260040160405180910390fd5b6108618260018186615029565b909350915082358301602081019035610631828261088f86600281111561088a5761088a615088565b611a73565b6113bf565b836108a0600582611092565b5f8481526003602052604090206108bc90600233888787611201565b5f84815260036020908152604080832088845290915290206108de9033611a30565b5f0361093d575f8581526004602052604090206108fc903386611a7b565b506040805186815260208101869052338183015290517ffb5966a10bbfa837a7964784b0eb92d624218037b24ae5d1aeae23157f21453f9181900360600190a15b5050505050565b60605f6106ca600584611777565b5f61095e600533611a30565b90505f5b8181101561098b575f61097760053383611a87565b905061098281610ec4565b50600101610962565b50505050565b8161099d600582611092565b5f82815260036020908152604080832086845290915290206109bf9033611a93565b5f8381526004602052604090206109d7903384611a7b565b506040805184815260208101849052338183015290517ffb5966a10bbfa837a7964784b0eb92d624218037b24ae5d1aeae23157f21453f9181900360600190a1505050565b5f8235336001600160a01b03821614610a53576040516301292ae560e21b81526001600160a01b0382166004820152602401610601565b5f803681610a6d610a686101008a018a61509c565b611a9d565b9350935093509350610a8f846002811115610a8a57610a8a615088565b611b31565b15610ade57610ad783888a85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c9250611b38915050565b9550610b5e565b610af384600281111561083257610832615088565b15610b4357610b00614222565b6060610b0c8484611e62565b60408201519193509150610b1f90611ec8565b9450610b2d82868989611ee9565b610b3a858a8c848b611b38565b97505050610b5e565b836040516325f70cf760e21b815260040161060191906150de565b505050505092915050565b5f8181526002602052604090206060906106ca9084611777565b5f8281526002602052604081206106699085846112b3565b5f8181526004602052604090206060906106ca9084611777565b5f6106ca600583856110bd565b5f8281526004602052604081206106699085846110bd565b5f8281526009602090815260408083206001600160a01b03808616855292528220541615156106ca565b82610c10600582611092565b61098b60018033878787611201565b5f81815260086020526040812060609190610c3a9085611a30565b9050806001600160401b03811115610c5457610c5461438a565b604051908082528060200260200182016040528015610c9957816020015b604080518082019091525f815260606020820152815260200190600190039081610c725790505b5091505f5b81811015610d57575f848152600860205260409020610cbe908683611a87565b838281518110610cd057610cd06150f8565b60200260200101515f018181525050610d2f8560075f015f8781526020019081526020015f205f868581518110610d0957610d096150f8565b60200260200101515f015181526020019081526020015f2061177790919063ffffffff16565b838281518110610d4157610d416150f8565b6020908102919091018101510152600101610c9e565b505092915050565b5f81815260036020908152604080832085845290915290206060906106699085611777565b5f610d90600583611a30565b151592915050565b5f61069485610dac84805160209091012090565b5f878152600760209081526040808320898452909152902091906110bd565b81610dd7600582611092565b610df6610de4838061510c565b610ded9161501d565b600790856120da565b61074e600384610e0861073d876121a4565b610e15602087018761510c565b610e1e91615151565b600293929190600161178f565b5f7f7739773977397739773977397739773977397739773977397739773977397739849003610e625750637739000160e01b610669565b306001600160a01b03861603610e8157506001600160e01b0319610669565b5f610e968686610e9187876121de565b612213565b155f03631626ba7e1760e01b9695505050505050565b5f8281526001602052604081206106699085846112b3565b80610ee5576040516324b5a7e760e21b815260048101829052602401610601565b5f818152600160205260409020610efc9033611a93565b5f818152600260205260409020610f139033611a93565b5f818152600460205260408120610f2a9033611a30565b90505f5b81811015610f7c575f838152600460205260408120610f4e903384611a87565b5f8181526003602090815260408083208884529091529020909150610f739033611a93565b50600101610f2e565b505f828152600460205260409020610f949033611a93565b610fa06009833361247b565b5f828152600a60209081526040808320338085529252909120805460ff19169055610fce9060059084611a7b565b50610fdb60078333612507565b604080518381523360208201527f1ff4377bcf87e5e9c2ec7fdc4732408c1073dd4b9f49e719d783b1e4fb0f628191015b60405180910390a15050565b5f8181526020818152604080832033845290915281208054908261103b83615171565b9091555090507fb21cd80665df6c8932e067c1fb0835dc3bc61d85bcab4c90a9992b692d8e17e2823361106f846001615189565b604080519384526001600160a01b0390921660208401529082015260600161100c565b61109d8233836110bd565b6107045760405163526d0da560e01b815260048101829052602401610601565b5f81815260018401602090815260408083206001600160a01b03861684529091528120541515610669565b82515f5b81811015610631575f858281518110611107576111076150f8565b60200260200101515f015190505f868381518110611127576111276150f8565b6020026020010151602001515190505f5b818110156111b4575f611186898681518110611156576111566150f8565b6020026020010151602001518381518110611173576111736150f8565b6020026020010151805160209091012090565b5f89815260208c8152604080832088845290915290209091506111aa908883611a7b565b5050600101611138565b505f8681526020898152604080832085845290915290206111d59086611a30565b5f036111f7575f86815260018901602052604090206111f5908684611a7b565b505b50506001016110ec565b805f5b8181101561129b575f84848381811061121f5761121f6150f8565b90506020020160208101906112349190614d0b565b5f87815260208b90526040902090915061124f908883612594565b15611292577fb2a53c8ed9d14361634fc2a7835a222e5dbec408b6cef4e06768e844613fa7548689838a604051611289949392919061519c565b60405180910390a15b50600101611204565b5050505050505050565b5f61069485853086866125a9565b6001600160a01b038181165f90815260018501602090815260408083209386168352929052908120541515610669565b6001815f8190036112f45750610694565b5f5b81811015611364575f858583818110611311576113116150f8565b905060200281019061132391906151d8565b61132c906151f6565b80515f8a815260208c9052604090209192509061134a9089836112b3565b61135a575f945050505050610694565b50506001016112f6565b505095945050505050565b5f61137d6020830183614d0b565b61138a602084018461509c565b84604001356040516020016113a29493929190615229565b604051602081830303815290604052805190602001209050919050565b6060825f8190036113e357604051635cb045db60e01b815260040160405180910390fd5b806001600160401b038111156113fb576113fb61438a565b604051908082528060200260200182016040528015611424578160200160208202803683370190505b5091505f5b818110156116455736868683818110611444576114446150f8565b9050602002810190611456919061525c565b90505f6114628261136f565b905061149560018261147381611784565b611480606087018761510c565b61148991615151565b6001939291908b61178f565b6114d76003826114a761073d856121a4565b6114b460808701876151d8565b6114c290602081019061510c565b6114cb91615151565b6002939291908b61178f565b6115036114e760808401846151d8565b6114f1908061510c565b6114fa9161501d565b600790836120da565b6115278161151460a085018561510c565b61151d91615270565b6003919089611922565b6115336005338361266a565b5061154d8161154860e0850160c0860161527c565b611711565b5f8181526009602090815260408083203384529091529020546001600160a01b03166115d1576115d1816115846020850185614d0b565b611591602086018661509c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250600995949392508c915050612676565b808584815181106115e4576115e46150f8565b6020026020010181815250507fc5c98ce9477fc2c88a84abed218cda086be8442fc2eecb9e1ce33941d28741b681336040516116339291909182526001600160a01b0316602082015260400190565b60405180910390a15050600101611429565b50509392505050565b6001815f81900361165f5750610694565b5f5b81811015611364573685858381811061167c5761167c6150f8565b905060200281019061168e9190615297565b90505f6116c06116a160208401846152ab565b6116b16040850160208601614d0b565b6001600160a01b031690612827565b90506116f789896116d4604086018661510c565b8e5f015f8781526020019081526020015f206112e390949392919063ffffffff16565b611707575f945050505050610694565b5050600101611661565b5f828152600a602090815260408083203380855290835292819020805460ff19168515159081179091558151868152928301939093528101919091527f2c479309476f30bc996bdf6bdea053f2a125e86e9f080ee5a87c1eff762209379060600161100c565b60605f6106698484612877565b5f6106b68233612883565b81515f5b8181101561129b575f8482815181106117ae576117ae6150f8565b60209081029190910101515190506117cf6001600160a01b038216896128b0565b831561183e57604051631304d58360e21b81523360048201526001600160a01b03821660248201526e69e2a187aeffb852bf3ccdc95151b290634c13560c906044015f6040518083038186803b158015611827575f5ffd5b505afa158015611839573d5f5f3e3d5ffd5b505050505b5f87815260208a90526040902061185690338361299e565b50806001600160a01b031663989c9e46338888868151811061187a5761187a6150f8565b6020026020010151602001516040518463ffffffff1660e01b81526004016118a4939291906152c6565b5f604051808303815f87803b1580156118bb575f5ffd5b505af11580156118cd573d5f5f3e3d5ffd5b505050507f1c5ea73ef804151087de6d0ce7a77287b15cfc4f51654cac5bfe6c558547f82787898333604051611906949392919061519c565b60405180910390a150600101611793565b60606106b6826129b3565b826119435760405163526d0da560e01b815260048101849052602401610601565b81515f5b81811015610631575f848281518110611962576119626150f8565b602002602001015190505f611990825f015183602001516001600160a01b031661282790919063ffffffff16565b60208301519091506001600160a01b03811615806119b657506001600160a01b03811630145b806119bf575081155b156119dd5760405163703469d160e11b815260040160405180910390fd5b50611a0b6002886119ee8185612a78565b6040808701515f87815260208f905291909120939291908a61178f565b5f8781526001890160205260409020611a2590338361266a565b505050600101611947565b5f6106ca8383612a8c565b5f6001826002811115611a5057611a50615088565b14806106b6575060025b826002811115611a6c57611a6c615088565b1492915050565b5f6001611a5a565b5f610669848484612a97565b5f610669848484612b75565b6107048282612b81565b5f803681611aae6001828789615029565b611ab791615050565b60f81c6002811115611acb57611acb615088565b9350611ae284600281111561083257610832615088565b15611afd57611af48560018189615029565b91509150611b28565b611b0b602160018789615029565b611b14916152ed565b9250611b238560218189615029565b915091505b92959194509250565b5f80611a5a565b5f611b45600583886110bd565b611b655760405163526d0da560e01b815260048101879052602401610601565b5f611b7360e086018661509c565b159050611bc8575f878152600a602090815260408083206001600160a01b038716845290915290205460ff1615611bac57506001611bc8565b60405163357727e960e21b815260048101889052602401610601565b611c1b87611bd581611784565b87604051602401611be792919061534b565b60408051601f198184030181529190526020810180516001600160e01b0316633894f6e760e11b1790526001919084612bcf565b91505f9050611c2d606086018661509c565b611c3b916004915f91615029565b611c4491615442565b9050631651a3ad60e01b6001600160e01b0319821601611d57575f80611c75611c70606089018961509c565b612c6a565b90925090506001600160f81b0319811615611ca357604051636c4872f960e01b815260040160405180910390fd5b6001600160f81b03198216600160f81b03611cd757611cd0611cc96003898c6001612c93565b8590612d55565b9350611d50565b6001600160f81b03198216611d37575f803681611d07611d02611cfd60608e018e61509c565b612e28565b612e92565b92965090945092509050611d2c611d2560038f878787876001612ed7565b8990612d55565b975050505050611d50565b604051636c4872f960e01b815260040160405180910390fd5b5050611e41565b6372288ed160e01b6001600160e01b0319821601611d8857604051636c4872f960e01b815260040160405180910390fd5b5f611dc0611d99606088018861509c565b611da7916004915f91615029565b611db091615442565b6001600160a01b03861690612827565b9050611e3d611e3689611dd38185612a78565b87805f611de360608e018e61509c565b604051602401611df896959493929190615478565b60408051601f19818403018152918152602080830180516001600160e01b03166305c0089560e01b1790525f87815260039091522091906001612bcf565b8490612d55565b9250505b5f611e50600988868b896130da565b90508061136457600192505050610694565b611e6a614222565b6060611eaa84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506131c292505050565b806020019051810190611ebd91906159ee565b909590945092505050565b5f815f0151826020015183604001516040516020016113a293929190615ae6565b5f838152602081815260408083206001600160a01b0386168452909152812080549082611f1583615171565b9091555090505f611f288685848661327e565b6060870151604051630b135d3f60e11b8082529293506001600160a01b03871691631626ba7e91611f5d918691600401615b17565b602060405180830381865afa158015611f78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c9190615b2f565b6001600160e01b03191614611fd657604051630f2a3bc360e21b81526001600160a01b038516600482015260248101829052604401610601565b5f611fec84600281111561088a5761088a615088565b9050612012600187611ffd81611784565b60408b0151606001516001939291908661178f565b6040870151608001515161202990600790886120da565b61205460038761203b61073d8a6121a4565b60408b015160800151602001516002939291908661178f565b604087015160a0015161206c90600390889084611922565b61207e86886040015160c00151611711565b5f8681526009602090815260408083206001600160a01b03808a168552925290912054166120c357604087015180516020909101516120c39160099189919085612676565b61129b6005338861266a565b805160209091012090565b81515f5b8181101561093d575f8482815181106120f9576120f96150f8565b60200260200101515f015190505f858381518110612119576121196150f8565b602002602001015160200151519050805f1461214b575f858152600188016020526040902061214990338461266a565b505b5f5b81811015612199575f61216b888681518110611156576111566150f8565b5f88815260208b81526040808320888452909152902090915061218f90338361266a565b505060010161214d565b5050506001016120de565b6040517f455243313237313a2000000000000000000000000000000000000000000000006020820152602981018290525f906049016113a2565b365f83839150915061ffff606051190461649202602082038301350361220c57506040810135016020810190355b9250929050565b5f8282823080156122cf575f5f5f5f5f336001600160a01b03166384b0196e6040518163ffffffff1660e01b81526004015f60405180830381865afa15801561225e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122859190810190615ba5565b506040805186516020978801208183015285519590960194909420606086015260808501929092526001600160a01b031660a084015260c083015260e08201905296505050505050505b6040516002870388013560f01c806042018089038a016119015f526040816020377f5479706564446174615369676e280000000000000000000000000000000000008452600e8401836040830182376040820198508397506028848201526029600185830103515f1a14612373575f6001858301035b6001820191506029828203515f1a148683101161234557508085039450808560408501018337602881830153505b6f07fffffe00000000000001000000000081515f1a1c5b602882515f1a146123b057806512010000000183515f1a1c17905060018201915061238a565b7f20636f6e74656e74732c737472696e67206e616d652c737472696e670000000082527f2076657273696f6e2c75696e7432353620636861696e49642c61646472657373601c8301527f20766572696679696e67436f6e74726163742c627974657333322073616c7429603c830152605c82019150846040840183376040838837858583010386208752602051975060e0872060405280600116604201601e209d505050508089039850505060405261246e89898989868989613361565b9998505050505050505050565b5f828152602084815260408083206001600160a01b03858116808652918452938290208054835188815295169385019390935290830152907f1b8b78a1623842b0534f626565151ce282cc88268c30bf8d525c59d0c22f21db9060600160405180910390a1805473ffffffffffffffffffffffffffffffffffffffff1916815561098b600182016134a3565b5f82815260018401602052604081206125209083611777565b80519091505f5b8181101561257a575f838281518110612542576125426150f8565b6020908102919091018101515f8881528983526040808220838352909352919091209091506125719086611a93565b50600101612527565b505f848152600186016020526040902061093d9084611a93565b5f61066984846001600160a01b038516612a97565b5f7fd44896e3cb83d70abc949a38dd6f9f75e675dc329dfe958617f066f79ff88f05856125ea8860028760028111156125e4576125e4615088565b146134c3565b88516020808b01518051908201206040808d01518151938401979097526001600160a01b03958616908301526060820193909352908316608082015260a081019190915260c0810192909252851660e082015261010081018390526101200160405160208183030381529060405280519060200120905095945050505050565b5f610669848484613583565b6001600160a01b03831615806126f0575060405163ecd0596160e01b8152600760048201526001600160a01b0384169063ecd0596190602401602060405180830381865afa1580156126ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ee9190615c75565b155b15612719576040516353f5708960e11b81526001600160a01b0384166004820152602401610601565b801561278f5760405163529562a160e01b81523360048201526001600160a01b0384166024820152600760448201526e69e2a187aeffb852bf3ccdc95151b29063529562a1906064015f6040518083038186803b158015612778575f5ffd5b505afa15801561278a573d5f5f3e3d5ffd5b505050505b5f848152602086815260408083203384529091529020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161781556127d860018201846135f7565b604080518681526001600160a01b0386166020820152338183015290517f9e1deb1dcdedd38e68d5543a9a6be8416a0e0a5627628e47780bd6ef8abc1a3c9181900360600190a1505050505050565b6040516bffffffffffffffffffffffff19606084901b1660208201526001600160e01b0319821660348201525f906038015b60405160208183030381529060405280519060200120905092915050565b60606106ca8383613652565b6040516bffffffffffffffffffffffff19606083901b166020820152603481018390525f90605401612859565b5f60018260038111156128c5576128c5615088565b036128eb576128e46001600160a01b038416633894f6e760e11b61365e565b9050612975565b60028260038111156128ff576128ff615088565b0361291e576128e46001600160a01b0384166305c0089560e01b61365e565b600382600381111561293257612932615088565b03612951576128e46001600160a01b03841663cbf3450560e01b61365e565b604051636a01dd0160e01b81526001600160a01b0384166004820152602401610601565b8061075957604051636a01dd0160e01b81526001600160a01b0384166004820152602401610601565b5f61066984846001600160a01b038516613583565b80546060905f6129c4602083615c90565b6129cf906001615189565b9050600184015f826001600160401b038111156129ee576129ee61438a565b604051908082528060200260200182016040528015612a17578160200160208202803683370190505b5090505f5b83811015612a52575f81840154905080838381518110612a3e57612a3e6150f8565b602090810291909101015250600101612a1c565b5080604051602001612a649190615caf565b604080519190529384525091949350505050565b5f6106ca612a868484613679565b33612883565b5f6106ca8383613694565b5f81815260018401602090815260408083206001600160a01b03861684529091528120548015612b6c575f612acd600183615ce4565b90505f6001612adc8888613694565b612ae69190615ce4565b9050808214612b30575f612afb8888846136a7565b9050612b09888885846136b3565b5f90815260018801602090815260408083206001600160a01b038a16845290915290208390555b612b3a87876136bf565b5050505f8281526001808601602090815260408084206001600160a01b038816855290915282209190915590506106ca565b5f9150506106ca565b5f6106698484846136a7565b5f612b8c8383612a8c565b905060015b81811161098b575f612bad8585612ba88587615ce4565b612b75565b9050612bba858583612a97565b50508080612bc790615171565b915050612b91565b5f8381526020859052604081208190612be89033611777565b805190915080841115612c1157604051631c792c0560e01b815260048101879052602401610601565b5f5b81811015612c5f57612c55611cc98888868581518110612c3557612c356150f8565b60200260200101516001600160a01b03166136c99092919063ffffffff16565b9350600101612c13565b505050949350505050565b5f8080612c7b602460048688615029565b612c84916152ed565b95600887901b95509350505050565b5f3681612cae612ca9611cfd606089018961509c565b613750565b9092509050805f819003612cd557604051632b6c9e0d60e11b815260040160405180910390fd5b5f5b81811015612d495736848483818110612cf257612cf26150f8565b9050602002810190612d049190615297565b90505f612d318b8a612d196020860186614d0b565b6020860135612d2b604088018861509c565b8e612ed7565b9050612d3d8782612d55565b96505050600101612cd7565b50505050949350505050565b5f81830160601b8260601b81148460601b8214176001600160a01b0384861816151760018114612d885760019250610d57565b7fffffffffffff000000000000000000000000000000000000000000000000000080851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b86169081612de55765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680612e03575065ffffffffffff60a01b5b808218908211021880612e1c575065ffffffffffff60a01b5b92909217949350505050565b365f6044831015612e37575f5ffd5b6024840180356001600160401b03811115612e50575f5ffd5b01915050601f198101356001600160401b03811115612e6d575f5ffd5b82840180831115612e7c575f5ffd5b808284011115612e8a575f5ffd5b509250929050565b5f803681612ea36014828789615029565b612eac91615cf7565b60601c9350612ebf603460148789615029565b612ec8916152ed565b9250611b238560348189615029565b5f806004841015612ef157506001600160e01b0319612f0a565b612efe60045f8688615029565b612f0791615442565b90505b6001600160e01b0319811663e9ae5c5360e01b148015612f3257506001600160a01b03871633145b15612f5057604051632a0399f560e11b815260040160405180910390fd5b5f196001600160a01b03881601612f7a5760405163416aebb560e11b815260040160405180910390fd5b5f306001600160a01b03891603612fb257507f986126569d6396d837d7adeb3ca726199afaf83546f38726e6f331bb92d8e9d6613066565b612fc56001600160a01b03891683612827565b905061302b89612fd58184612a78565b338b8b8b8b604051602401612fef96959493929190615478565b60408051601f19818403018152918152602080830180516001600160e01b03166305c0089560e01b1790525f868152908f9052209190876137e6565b92506350ffbaad830361305f57507fd884b6afa19f8ace90a388daca691e4e28f20cdac5aeefd46ad8bd1c074d28cf613066565b50506130cf565b6130ca896130748184612a78565b338b8b8b8b60405160240161308e96959493929190615478565b60408051601f19818403018152918152602080830180516001600160e01b03166305c0089560e01b1790525f868152908f905220919087612bcf565b925050505b979650505050505050565b5f828152602086815260408083206001600160a01b0380881685529252822054168061312b57604051630d5dd5ff60e31b8152600481018590526001600160a01b0386166024820152604401610601565b5f848152602088815260408083206001600160a01b03898116855292529091209082169063940d3840908890869061316590600101611917565b6040518463ffffffff1660e01b815260040161318393929190615d37565b602060405180830381865afa15801561319e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130cf9190615c75565b60405181516020838101938184019201015b80841015613266578351805f1a8060051c806132065750600186810151855295810160020195930190920191506131d4565b600781148360011a600701821881028218600201600185836001011a85601f1660081b0101808803602082186020831102821891505f5b818101518a820152820183811061323d579a84016002019a9883019850505050505050506131d4565b50601f198282030182525f8152602001604052919050565b60408401515f908190613293908685876112a5565b90505f8660200151875f015160ff16815181106132b2576132b26150f8565b60200260200101515f015190505f8760200151885f015160ff16815181106132dc576132dc6150f8565b602002602001015160200151905046826001600160401b03161461331e5760405163e75e237960e01b81526001600160401b0383166004820152602401610601565b828114613348576040516305846adf60e11b81526004810182905260248101849052604401610601565b6133558860200151613877565b98975050505050505050565b5f5f6133a184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506120cf92505050565b90505f6133b1602082898b615029565b6133ba916152ed565b90506133c9876020818b615029565b90985096506133da600533836110bd565b158061340657505f81815260076020908152604080832089845290915290206134049033846110bd565b155b15613415575f925050506130cf565b5f61343b338c8c8c8c8761342b61073d8a6121a4565b6002969594939291906001613910565b90508061344c5792506130cf915050565b6134948a33848c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506009969594939250506130da9050565b9b9a5050505050505050505050565b5f80825560018201905b600a811015610759575f828201556001016134ad565b5f5f5f5f6134d48660a00151613a11565b9250925092507f871289c05e426554eb0f843c9aa542f9c2bc4eba7742ada6a5c014d3568674d45f1b8383878960c001516135128b60600151613aef565b61351f8c60800151613b68565b6040805160208101989098529515159587019590955292151560608601529015156080850152151560a084015260c083015260e082015261010081018290526101200160405160208183030381529060405280519060200120935050505092915050565b5f81815260018401602090815260408083206001600160a01b03861684529091528120546135f0576135b6848484613be2565b6135c08484613694565b5f8381526001808701602090815260408084206001600160a01b03891685529091529091209190915590506106ca565b505f6106ca565b61014081511115613606575f5ffd5b606061361182613bed565b9084558051909150600184015f5b82811015610631575f84828151811061363a5761363a6150f8565b6020908102919091010151838301555060010161361f565b60606106ca8383613ca1565b5f61366883613d3a565b80156106ca57506106ca8383613d6c565b60408051602081018490529081018290525f90606001612859565b5f818152602083905260408120546106ca565b5f610669848484613def565b61098b84848484613e06565b6107048282613e1e565b5f80806136e46001600160a01b0387165f1983602088613e5a565b915091505f826137035763f42707525f5260208201516020526024601cfd5b5060208101519250826001600160a01b0381161561374657604051633b57736160e01b8152600481018790526001600160a01b0388166024820152604401610601565b5050509392505050565b365f833580850160208587010360208201945081359350808460051b8301118360401c17156137865763ba597e7e5f526004601cfd5b83156137dc578392505b6001830392508260051b850135915081850160408101358082018381358201118460408501111782861782351760401c17156137d35763ba597e7e5f526004601cfd5b50505082613790575b5050509250929050565b5f83815260208590526040812081906137ff9033611777565b80519091508084111561381a576350ffbaad92505050610669565b5f5b818110156138485761383e611cc98888868581518110612c3557612c356150f8565b935060010161381c565b506350ffbaad830361386d57604051630b4e78fd60e21b815260040160405180910390fd5b5050949350505050565b5f807f0c9d02fb89a1da34d66ea2088dc9ee6a58efee71cef6f1bb849ed74fc6003d986138a384613edf565b60408051602081019390935282015260600160408051601f1981840301815290829052805160209091012061190160f01b82527f057501e891776d1482927e5f094ae44049a4d893ba2d7b334dd7db8d38d3a0e160028301526022820181905260429091209091506106ca565b5f83815260208a9052604081208190613929908b611777565b80519091508084111561395257604051631c792c0560e01b815260048101879052602401610601565b5f5b81811015613a015782818151811061396e5761396e6150f8565b60200260200101516001600160a01b031663cbf34505878d8f8e8e8e6040518763ffffffff1660e01b81526004016139ab96959493929190615478565b602060405180830381865afa1580156139c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139ea9190615c75565b9350836139f95750505061246e565b600101613954565b5050509998505050505050505050565b5f5f5f5f845190505f613a348260408051828152600190920160051b8201905290565b90505f5b82811015613ada575f878281518110613a5357613a536150f8565b6020026020010151905060016001600160a01b031681602001516001600160a01b031603613ab4578680613a95575080516001600160e01b031916600160e01b145b96508580613ab1575080516001600160e01b031916600160e11b145b95505b613ad082613ac183613f39565b600190910160051b8501528390565b5050600101613a38565b50805160051b60208201209496939550505050565b80515f9081613b0e8260408051828152600190920160051b8201905290565b90505f5b82811015613b5857613b4f81613b40878481518110613b3357613b336150f8565b6020026020010151613fbc565b600190910160051b8401528290565b50600101613b12565b50805160051b6020820120610669565b6040805160038152608081019091527fdfd9b5718eebaa2484740b4ea6939e96189024c15848f16ccce901118114e15260208201525f90613bbf6001613bb0855f0151614017565b600190910160051b8301528190565b50613bd26002613bb08560200151613aef565b50805160051b60208201206106ca565b610759838383614071565b80516060610140821115613bff575f5ffd5b5f613c0b602084615c90565b613c16906001615189565b9050806001600160401b03811115613c3057613c3061438a565b604051908082528060200260200182016040528015613c59578160200160208202803683370190505b5091505f5b81811015613c9a575f60206001830102860151905080848381518110613c8657613c866150f8565b602090810291909101015250600101613c5e565b5050915091565b5f818152602083905260409020805460609190806001600160401b03811115613ccc57613ccc61438a565b604051908082528060200260200182016040528015613cf5578160200160208202803683370190505b5092505f5b81811015613d3157613d0c83826140af565b848281518110613d1e57613d1e6150f8565b6020908102919091010152600101613cfa565b50505092915050565b5f613d4c826301ffc9a760e01b613d6c565b80156106b65750613d65826001600160e01b0319613d6c565b1592915050565b6040516001600160e01b0319821660248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b17815282519293505f9283928392909183918a617530fa92503d91505f519050828015613ddc575060208210155b80156130cf575015159695505050505050565b5f82815260208490526040812061066990836140af565b5f83815260208590526040902061098b9083836140d2565b5f81815260208390526040812080549091819003613e3c5750505050565b613e5182613e4b600184615ce4565b5f6140d2565b5f190190555050565b5f60605f5f5f8661ffff166001600160401b03811115613e7c57613e7c61438a565b6040519080825280601f01601f191660200182016040528015613ea6576020820181803683370190505b5090505f5f8751602089018b8e8ef191503d925086831115613ec6578692505b828152825f602083013e90999098509650505050505050565b80515f9081613efe8260408051828152600190920160051b8201905290565b90505f5b82811015613b5857613f3081613b40878481518110613f2357613f236150f8565b60200260200101516140f3565b50600101613f02565b5f7f35809859dccf8877c407a59527c2f00fb81ca9c198ebcb0c832c3deaa38d35025f1b825f01518360200151613f738560400151613aef565b6040805160208101959095526001600160e01b0319909316928401929092526001600160a01b03166060830152608082015260a0016113a2565b60019190910160051b82015290565b80516020808301518051908201206040515f936113a2937fdddac12cd8b10a071bea04226e97ac9490698394e19224abc47a5cfeeeb6ee97939192019283526001600160a01b03919091166020830152604082015260600190565b80515f90816140368260408051828152600190920160051b8201905290565b90505f5b82811015613b585761406881613b4087848151811061405b5761405b6150f8565b6020026020010151614148565b5060010161403a565b5f8281526020849052604090208054607f81111561409a57638277484f5f52806020526024601cfd5b82600182018301556001810182555050505050565b5f825482106140c957638277484f5f52816020526024601cfd5b50016001015490565b825482106140eb57638277484f5f52816020526024601cfd5b910160010155565b80516020808301516040515f936113a2937f1ea7e4bc398fa0ccd68d92b5d8931a3fd93eebe1cf0391b4ba28935801af7c80939192019283526001600160401b03919091166020830152604082015260600190565b805160208201515f917e6166b2b3a1edaf1da1ce02715d02d4979a4ab93755bff9ec054b0e6a96a1da9161417b9061419a565b60408051602081019490945283019190915260608201526080016113a2565b80515f90816141b98260408051828152600190920160051b8201905290565b90505f5b82811015613b5857614219818683815181106141db576141db6150f8565b60200260200101516040516020016141f39190615d61565b6040516020818303038152906040528051906020012084613fad9092919063ffffffff16565b506001016141bd565b604080516080810182525f81526060602082015290810161424161424e565b8152602001606081525090565b6040518060e001604052805f6001600160a01b03168152602001606081526020015f815260200160608152602001614299604051806040016040528060608152602001606081525090565b8152606060208201525f60409091015290565b5f5f83601f8401126142bc575f5ffd5b5081356001600160401b038111156142d2575f5ffd5b6020830191508360208260051b850101111561220c575f5ffd5b5f5f5f5f5f60608688031215614300575f5ffd5b8535945060208601356001600160401b0381111561431c575f5ffd5b614328888289016142ac565b90955093505060408601356001600160401b03811115614346575f5ffd5b614352888289016142ac565b969995985093965092949392505050565b6001600160a01b0381168114614377575f5ffd5b50565b803561438581614363565b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156143c0576143c061438a565b60405290565b604051606081016001600160401b03811182821017156143c0576143c061438a565b60405160e081016001600160401b03811182821017156143c0576143c061438a565b604051608081016001600160401b03811182821017156143c0576143c061438a565b604051601f8201601f191681016001600160401b03811182821017156144545761445461438a565b604052919050565b5f6001600160401b038211156144745761447461438a565b50601f01601f191660200190565b5f82601f830112614491575f5ffd5b8135602083015f6144a96144a48461445c565b61442c565b90508281528583830111156144bc575f5ffd5b828260208301375f92810160200192909252509392505050565b5f6001600160401b038211156144ee576144ee61438a565b5060051b60200190565b5f60408284031215614508575f5ffd5b61451061439e565b9050813561451d81614363565b815260208201356001600160401b03811115614537575f5ffd5b61454384828501614482565b60208301525092915050565b5f61455c6144a4846144d6565b838152905060208101600584901b830185811115614578575f5ffd5b835b818110156137465780356001600160401b03811115614597575f5ffd5b6145a3888288016144f8565b8452506020928301920161457a565b5f82601f8301126145c1575f5ffd5b6106ca8383356020850161454f565b5f6145dd6144a4846144d6565b838152905060208101600584901b8301858111156145f9575f5ffd5b835b818110156137465780356001600160401b03811115614618575f5ffd5b850160408189031215614629575f5ffd5b61463161439e565b8135815260208201356001600160401b0381111561464d575f5ffd5b80830192505088601f830112614661575f5ffd5b813561466f6144a4826144d6565b8082825260208201915060208360051b86010192508b831115614690575f5ffd5b602085015b838110156146d05780356001600160401b038111156146b2575f5ffd5b6146c18e6020838a0101614482565b84525060209283019201614695565b5080602085015250505080855250506020830192506020810190506145fb565b5f60408284031215614700575f5ffd5b61470861439e565b905081356001600160401b0381111561471f575f5ffd5b8201601f8101841361472f575f5ffd5b61473e848235602084016145d0565b82525060208201356001600160401b03811115614759575f5ffd5b614543848285016145b2565b6001600160e01b031981168114614377575f5ffd5b5f6147876144a4846144d6565b838152905060208101600584901b8301858111156147a3575f5ffd5b835b818110156137465780356001600160401b038111156147c2575f5ffd5b8501606081890312156147d3575f5ffd5b6147db6143c6565b81356147e681614765565b815260208201356147f681614363565b602082015260408201356001600160401b03811115614813575f5ffd5b61481f8a8285016145b2565b604083015250845250602092830192016147a5565b5f82601f830112614843575f5ffd5b6106ca8383356020850161477a565b8015158114614377575f5ffd5b803561438581614852565b803560038110614385575f5ffd5b5f5f5f5f6080858703121561488b575f5ffd5b84359350602085013561489d81614363565b925060408501356001600160401b038111156148b7575f5ffd5b850160e081880312156148c8575f5ffd5b6148d06143e8565b6148d98261437a565b815260208201356001600160401b038111156148f3575f5ffd5b6148ff89828501614482565b6020830152506040828101359082015260608201356001600160401b03811115614927575f5ffd5b614933898285016145b2565b60608301525060808201356001600160401b03811115614951575f5ffd5b61495d898285016146f0565b60808301525060a08201356001600160401b0381111561497b575f5ffd5b61498789828501614834565b60a08301525061499960c0830161485f565b60c082015292506149ae90506060860161486a565b905092959194509250565b5f5f5f5f608085870312156149cc575f5ffd5b84356149d781614363565b9350602085013592506040850135915060608501356149f581614363565b939692955090935050565b5f5f5f5f60608587031215614a13575f5ffd5b8435614a1e81614363565b93506020850135925060408501356001600160401b03811115614a3f575f5ffd5b614a4b878288016142ac565b95989497509550505050565b5f60208284031215614a67575f5ffd5b81356001600160401b03811115614a7c575f5ffd5b820160e081850312156106ca575f5ffd5b5f5f60208385031215614a9e575f5ffd5b82356001600160401b03811115614ab3575f5ffd5b614abf858286016142ac565b90969095509350505050565b602080825282518282018190525f918401906040840190835b81811015614b02578351835260209384019390920191600101614ae4565b509095945050505050565b5f5f60408385031215614b1e575f5ffd5b823591506020830135614b3081614852565b809150509250929050565b5f5f60408385031215614b4c575f5ffd5b8235614b5781614363565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b81811015614b025783516001600160a01b0316835260209384019390920191600101614b7e565b5f5f60408385031215614bb6575f5ffd5b8235915060208301356001600160401b03811115614bd2575f5ffd5b610795858286016145b2565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0383168152604060208201525f6106696040830184614bde565b5f5f60408385031215614c3e575f5ffd5b8235915060208301356001600160401b03811115614c5a575f5ffd5b61079585828601614834565b5f5f83601f840112614c76575f5ffd5b5081356001600160401b03811115614c8c575f5ffd5b60208301915083602082850101111561220c575f5ffd5b5f5f60208385031215614cb4575f5ffd5b82356001600160401b03811115614cc9575f5ffd5b614abf85828601614c66565b5f5f5f5f60608587031215614ce8575f5ffd5b843593506020850135925060408501356001600160401b03811115614a3f575f5ffd5b5f60208284031215614d1b575f5ffd5b81356106ca81614363565b5f5f60408385031215614d37575f5ffd5b823591506020830135614b3081614363565b5f5f60408385031215614d5a575f5ffd5b50508035926020909101359150565b5f5f60408385031215614d7a575f5ffd5b82356001600160401b03811115614d8f575f5ffd5b83016101208186031215614b57575f5ffd5b5f5f5f60608486031215614db3575f5ffd5b8335614dbe81614363565b9250602084013591506040840135614dd581614363565b809150509250925092565b5f8151808452602084019350602083015f5b82811015614e10578151865260209586019590910190600101614df2565b5093949350505050565b602081525f6106ca6020830184614de0565b5f5f5f60608486031215614e3e575f5ffd5b8335614e4981614363565b95602085013595506040909401359392505050565b5f5f5f60408486031215614e70575f5ffd5b8335925060208401356001600160401b03811115614e8c575f5ffd5b614e98868287016142ac565b9497909650939450505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614f1357603f198786030184528151805186526020810151905060406020870152614efd6040870182614de0565b9550506020938401939190910190600101614ecb565b50929695505050505050565b5f5f5f5f60808587031215614f32575f5ffd5b8435614f3d81614363565b9350602085013592506040850135915060608501356001600160401b03811115614f65575f5ffd5b614f7187828801614482565b91505092959194509250565b5f60208284031215614f8d575f5ffd5b5035919050565b5f5f60408385031215614fa5575f5ffd5b8235915060208301356001600160401b03811115614fc1575f5ffd5b830160408186031215614b30575f5ffd5b5f5f5f5f60608587031215614fe5575f5ffd5b8435614ff081614363565b93506020850135925060408501356001600160401b03811115615011575f5ffd5b614a4b87828801614c66565b5f6106ca3684846145d0565b5f5f85851115615037575f5ffd5b83861115615043575f5ffd5b5050820193919092039150565b80356001600160f81b03198116906001841015615081576001600160f81b0319600185900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52602160045260245ffd5b5f5f8335601e198436030181126150b1575f5ffd5b8301803591506001600160401b038211156150ca575f5ffd5b60200191503681900382131561220c575f5ffd5b60208101600383106150f2576150f2615088565b91905290565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112615121575f5ffd5b8301803591506001600160401b0382111561513a575f5ffd5b6020019150600581901b360382131561220c575f5ffd5b5f6106ca36848461454f565b634e487b7160e01b5f52601160045260245ffd5b5f600182016151825761518261515d565b5060010190565b808201808211156106b6576106b661515d565b84815260808101600485106151b3576151b3615088565b60208201949094526001600160a01b0392831660408201529116606090910152919050565b5f8235603e198336030181126151ec575f5ffd5b9190910192915050565b5f6106b636836144f8565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385168152606060208201525f61524b606083018587615201565b905082604083015295945050505050565b5f823560de198336030181126151ec575f5ffd5b5f6106ca36848461477a565b5f6020828403121561528c575f5ffd5b81356106ca81614852565b5f8235605e198336030181126151ec575f5ffd5b5f602082840312156152bb575f5ffd5b81356106ca81614765565b6001600160a01b0384168152826020820152606060408201525f6106946060830184614bde565b803560208310156106b6575f19602084900360031b1b1692915050565b5f5f8335601e1984360301811261531f575f5ffd5b83016020810192503590506001600160401b0381111561533d575f5ffd5b80360382131561220c575f5ffd5b82815260406020820152615372604082016153658461437a565b6001600160a01b03169052565b602082013560608201525f61538a604084018461530a565b61012060808501526153a161016085018284615201565b9150506153b1606085018561530a565b848303603f190160a08601526153c8838284615201565b608087013560c08781019190915260a088013560e080890191909152908801356101008801529093506154009250860190508561530a565b848303603f1901610120860152615418838284615201565b9250505061542a61010085018561530a565b848303603f19016101408601526130cf838284615201565b80356001600160e01b03198116906004841015615081576001600160e01b031960049490940360031b84901b1690921692915050565b8681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a060808201525f61335560a083018486615201565b5f82601f8301126154c4575f5ffd5b81516154d26144a4826144d6565b8082825260208201915060208360061b8601019250858311156154f3575f5ffd5b602085015b83811015615549576040818803121561550f575f5ffd5b61551761439e565b81516001600160401b038116811461552d575f5ffd5b81526020828101518183015290845292909201916040016154f8565b5095945050505050565b805161438581614363565b5f82601f83011261556d575f5ffd5b8151602083015f6155806144a48461445c565b9050828152858383011115615593575f5ffd5b8282602083015e5f92810160200192909252509392505050565b5f82601f8301126155bc575f5ffd5b81516155ca6144a4826144d6565b8082825260208201915060208360051b8601019250858311156155eb575f5ffd5b602085015b838110156155495780516001600160401b0381111561560d575f5ffd5b86016040818903601f19011215615622575f5ffd5b61562a61439e565b602082015161563881614363565b815260408201516001600160401b03811115615652575f5ffd5b6156618a60208386010161555e565b60208301525080855250506020830192506020810190506155f0565b5f6040828403121561568d575f5ffd5b61569561439e565b905081516001600160401b038111156156ac575f5ffd5b8201601f810184136156bc575f5ffd5b80516156ca6144a4826144d6565b8082825260208201915060208360051b8501019250868311156156eb575f5ffd5b602084015b838110156157ef5780516001600160401b0381111561570d575f5ffd5b85016040818a03601f19011215615722575f5ffd5b61572a61439e565b6020820151815260408201516001600160401b03811115615749575f5ffd5b60208184010192505089601f830112615760575f5ffd5b815161576e6144a4826144d6565b8082825260208201915060208360051b86010192508c83111561578f575f5ffd5b602085015b838110156157cf5780516001600160401b038111156157b1575f5ffd5b6157c08f6020838a010161555e565b84525060209283019201615794565b5080602085015250505080855250506020830192506020810190506156f0565b50845250505060208201516001600160401b0381111561580d575f5ffd5b614543848285016155ad565b5f82601f830112615828575f5ffd5b81516158366144a4826144d6565b8082825260208201915060208360051b860101925085831115615857575f5ffd5b602085015b838110156155495780516001600160401b03811115615879575f5ffd5b86016060818903601f1901121561588e575f5ffd5b6158966143c6565b60208201516158a481614765565b815260408201516158b481614363565b602082015260608201516001600160401b038111156158d1575f5ffd5b6158e08a6020838601016155ad565b6040830152508452506020928301920161585c565b805161438581614852565b5f60e08284031215615910575f5ffd5b6159186143e8565b905061592382615553565b815260208201516001600160401b0381111561593d575f5ffd5b6159498482850161555e565b6020830152506040828101519082015260608201516001600160401b03811115615971575f5ffd5b61597d848285016155ad565b60608301525060808201516001600160401b0381111561599b575f5ffd5b6159a78482850161567d565b60808301525060a08201516001600160401b038111156159c5575f5ffd5b6159d184828501615819565b60a0830152506159e360c083016158f5565b60c082015292915050565b5f5f604083850312156159ff575f5ffd5b82516001600160401b03811115615a14575f5ffd5b830160808186031215615a25575f5ffd5b615a2d61440a565b815160ff81168114615a3d575f5ffd5b815260208201516001600160401b03811115615a57575f5ffd5b615a63878285016154b5565b60208301525060408201516001600160401b03811115615a81575f5ffd5b615a8d87828501615900565b60408301525060608201516001600160401b03811115615aab575f5ffd5b615ab78782850161555e565b606083015250809350505060208301516001600160401b03811115615ada575f5ffd5b6107958582860161555e565b6001600160a01b0384168152606060208201525f615b076060830185614bde565b9050826040830152949350505050565b828152604060208201525f6106696040830184614bde565b5f60208284031215615b3f575f5ffd5b81516106ca81614765565b5f82601f830112615b59575f5ffd5b8151615b676144a4826144d6565b8082825260208201915060208360051b860101925085831115615b88575f5ffd5b602085015b83811015615549578051835260209283019201615b8d565b5f5f5f5f5f5f5f60e0888a031215615bbb575f5ffd5b87516001600160f81b031981168114615bd2575f5ffd5b60208901519097506001600160401b03811115615bed575f5ffd5b615bf98a828b0161555e565b96505060408801516001600160401b03811115615c14575f5ffd5b615c208a828b0161555e565b60608a01519096509450615c38905060808901615553565b60a089015160c08a015191945092506001600160401b03811115615c5a575f5ffd5b615c668a828b01615b4a565b91505092959891949750929550565b5f60208284031215615c85575f5ffd5b81516106ca81614852565b5f82615caa57634e487b7160e01b5f52601260045260245ffd5b500490565b81515f90829060208501835b82811015615cd9578151845260209384019390910190600101615cbb565b509195945050505050565b818103818111156106b6576106b661515d565b80356bffffffffffffffffffffffff198116906014841015615081576bffffffffffffffffffffffff1960149490940360031b84901b1690921692915050565b838152606060208201525f615d4f6060830185614bde565b82810360408401526106658185614bde565b5f82518060208501845e5f92019182525091905056fea164736f6c634300081c000a\"\n  },\n  \"0x0000003111cD8e92337C100F22B7A9dbf8DEE301\": {\n    name: \"SUDO_POLICY_ADDRESS\",\n    address: \"0x0000003111cD8e92337C100F22B7A9dbf8DEE301\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b5060043610610064575f3560e01c80637129edce1161004d5780637129edce146100b7578063989c9e46146100cc578063cbf34505146100e1575f5ffd5b806301ffc9a71461006857806305c0089514610090575b5f5ffd5b61007b6100763660046102d4565b6100fb565b60405190151581526020015b60405180910390f35b6100a961009e36600461035b565b5f9695505050505050565b604051908152602001610087565b6100a96100c53660046103ce565b5f92915050565b6100df6100da366004610419565b610182565b005b61007b6100ef36600461035b565b60019695505050505050565b5f6001600160e01b03198216633894f6e760e11b148061012b57506001600160e01b031982166305c0089560e01b145b8061014657506001600160e01b0319821663cbf3450560e01b145b8061016157506001600160e01b031982166301ffc9a760e01b145b8061017c57506001600160e01b03198216634c4e4f2360e11b145b92915050565b335f90815260016020526040902061019b9085856101e9565b50604080518481523360208201526001600160a01b0386168183015290517f5d14f8bf6f75758495bb0b0768b81cdebc7869d1f19edacc2f483ca0c89a17159181900360600190a150505050565b5f6101f58484846101ff565b90505b9392505050565b5f81815260018401602090815260408083206001600160a01b038616845290915281205461026c57610232848484610273565b61023c8484610283565b5f8381526001808701602090815260408084206001600160a01b03891685529091529091209190915590506101f8565b505f6101f8565b61027e838383610296565b505050565b5f818152602083905260408120546101f8565b5f8281526020849052604090208054607f8111156102bf57638277484f5f52806020526024601cfd5b82600182018301556001810182555050505050565b5f602082840312156102e4575f5ffd5b81356001600160e01b0319811681146101f8575f5ffd5b80356001600160a01b0381168114610311575f5ffd5b919050565b5f5f83601f840112610326575f5ffd5b50813567ffffffffffffffff81111561033d575f5ffd5b602083019150836020828501011115610354575f5ffd5b9250929050565b5f5f5f5f5f5f60a08789031215610370575f5ffd5b86359550610380602088016102fb565b945061038e604088016102fb565b935060608701359250608087013567ffffffffffffffff8111156103b0575f5ffd5b6103bc89828a01610316565b979a9699509497509295939492505050565b5f5f604083850312156103df575f5ffd5b82359150602083013567ffffffffffffffff8111156103fc575f5ffd5b8301610120818603121561040e575f5ffd5b809150509250929050565b5f5f5f5f6060858703121561042c575f5ffd5b610435856102fb565b935060208501359250604085013567ffffffffffffffff811115610457575f5ffd5b61046387828801610316565b9598949750955050505056fea164736f6c634300081c000a\"\n  },\n  \"0x00000088D48cF102A8Cdb0137A9b173f957c6343\": {\n    name: \"SPENDING_LIMITS_POLICY_ADDRESS\",\n    address: \"0x00000088D48cF102A8Cdb0137A9b173f957c6343\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806301ffc9a71461004357806305c008951461006b578063989c9e461461008c575b5f5ffd5b610056610051366004610809565b6100a1565b60405190151581526020015b60405180910390f35b61007e61007936600461088c565b6100f2565b604051908152602001610062565b61009f61009a366004610903565b6101e4565b005b5f6001600160e01b031982166301ffc9a760e01b14806100d157506001600160e01b03198216634c4e4f2360e11b145b806100ec57506001600160e01b031982166305c0089560e01b145b92915050565b5f8315610101575060016101da565b5f5f61010e888686610393565b9150915081610122576001925050506101da565b5f61012e8a8a8a610464565b60018101548154919250905f610144858361096f565b90508281111561015d57600196505050505050506101da565b8084557f8c8443cbf8877c7ddfe6d58dd9d439df5da8eb966f6aee4edb64cdb36f6b9c658d338d8f89610190878a610982565b604080519687526001600160a01b0395861660208801529385169386019390935292166060840152608083019190915260a082015260c00160405180910390a15f96505050505050505b9695505050505050565b5f806101f283850185610a67565b5f87815260208181526040808320338452909152812092945090925061021882896104d1565b90508015610267575f5b8181101561025c575f610236848b846104e3565b90505f6102448a8c84610464565b5f600180830182905591559290920191506102229050565b5061026782896104f7565b5f5b8451811015610341575f85828151811061028557610285610b2c565b602002602001015190505f8583815181106102a2576102a2610b2c565b602002602001015190505f6001600160a01b0316826001600160a01b0316036102ee57604051637330680360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b805f036103115760405163337fcce960e21b8152600481018290526024016102e5565b5f61031d8b8d85610464565b600181018390559050610331868d85610505565b5050600190920191506102699050565b50604080518881523360208201526001600160a01b038a168183015290517f5d14f8bf6f75758495bb0b0768b81cdebc7869d1f19edacc2f483ca0c89a17159181900360600190a15050505050505050565b5f80806103a36004828688610b40565b6103ac91610b67565b905063f6a1584d60e01b6001600160e01b03198216016103ee576103d38460048188610b40565b8101906103e09190610b9f565b60019450925061045c915050565b6356fa634560e01b6001600160e01b0319821601610413576103d38460048188610b40565b63dc478d2360e01b6001600160e01b0319821601610454576104388460048188610b40565b8101906104459190610bc9565b60019550935061045c92505050565b5f5f92509250505b935093915050565b5f6001600160a01b03821661049757604051637330680360e01b81526001600160a01b03831660048201526024016102e5565b505f92835260016020908152604080852033865282528085206001600160a01b039384168652825280852093909216845291909152902090565b5f6104dc838361051a565b9392505050565b5f6104ef848484610525565b949350505050565b6105018282610531565b5050565b5f6104ef84846001600160a01b038516610585565b5f6104dc83836105f9565b5f6104ef84848461060c565b5f61053c838361051a565b905060015b81811161057f575f61055d85856105588587610982565b610525565b905061056a858583610618565b5050808061057790610c07565b915050610541565b50505050565b5f81815260018401602090815260408083206001600160a01b03861684529091528120546105f2576105b88484846106f6565b6105c284846105f9565b5f8381526001808701602090815260408084206001600160a01b03891685529091529091209190915590506104dc565b505f6104dc565b5f818152602083905260408120546104dc565b5f6104ef848484610706565b5f81815260018401602090815260408083206001600160a01b038616845290915281205480156106ed575f61064e600183610982565b90505f600161065d88886105f9565b6106679190610982565b90508082146106b1575f61067c88888461060c565b905061068a8888858461071d565b5f90815260018801602090815260408083206001600160a01b038a16845290915290208390555b6106bb8787610729565b5050505f8281526001808601602090815260408084206001600160a01b038816855290915282209190915590506104dc565b5f9150506104dc565b610701838383610733565b505050565b5f8281526020849052604081206104ef9083610771565b61057f84848484610794565b61050182826107ac565b5f8281526020849052604090208054607f81111561075c57638277484f5f52806020526024601cfd5b82600182018301556001810182555050505050565b5f8254821061078b57638277484f5f52816020526024601cfd5b50016001015490565b5f83815260208590526040902061057f9083836107e8565b5f818152602083905260408120805490918190036107ca5750505050565b6107df826107d9600184610982565b5f6107e8565b5f190190555050565b8254821061080157638277484f5f52816020526024601cfd5b910160010155565b5f60208284031215610819575f5ffd5b81356001600160e01b0319811681146104dc575f5ffd5b6001600160a01b0381168114610844575f5ffd5b50565b5f5f83601f840112610857575f5ffd5b50813567ffffffffffffffff81111561086e575f5ffd5b602083019150836020828501011115610885575f5ffd5b9250929050565b5f5f5f5f5f5f60a087890312156108a1575f5ffd5b8635955060208701356108b381610830565b945060408701356108c381610830565b935060608701359250608087013567ffffffffffffffff8111156108e5575f5ffd5b6108f189828a01610847565b979a9699509497509295939492505050565b5f5f5f5f60608587031215610916575f5ffd5b843561092181610830565b935060208501359250604085013567ffffffffffffffff811115610943575f5ffd5b61094f87828801610847565b95989497509550505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156100ec576100ec61095b565b818103818111156100ec576100ec61095b565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156109d2576109d2610995565b604052919050565b5f67ffffffffffffffff8211156109f3576109f3610995565b5060051b60200190565b5f82601f830112610a0c575f5ffd5b8135610a1f610a1a826109da565b6109a9565b8082825260208201915060208360051b860101925085831115610a40575f5ffd5b602085015b83811015610a5d578035835260209283019201610a45565b5095945050505050565b5f5f60408385031215610a78575f5ffd5b823567ffffffffffffffff811115610a8e575f5ffd5b8301601f81018513610a9e575f5ffd5b8035610aac610a1a826109da565b8082825260208201915060208360051b850101925087831115610acd575f5ffd5b6020840193505b82841015610af8578335610ae781610830565b825260209384019390910190610ad4565b9450505050602083013567ffffffffffffffff811115610b16575f5ffd5b610b22858286016109fd565b9150509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f5f85851115610b4e575f5ffd5b83861115610b5a575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610b98576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f5f60408385031215610bb0575f5ffd5b8235610bbb81610830565b946020939093013593505050565b5f5f5f60608486031215610bdb575f5ffd5b8335610be681610830565b92506020840135610bf681610830565b929592945050506040919091013590565b5f60018201610c1857610c1861095b565b506001019056fea164736f6c634300081c000a\"\n  },\n  \"0x0000006DDA6c463511C4e9B05CFc34C1247fCF1F\": {\n    name: \"UNIVERSAL_ACTION_POLICY_ADDRESS\",\n    address: \"0x0000006DDA6c463511C4e9B05CFc34C1247fCF1F\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806301ffc9a71461004e57806305c0089514610076578063989c9e4614610097578063cc39a985146100ac575b5f5ffd5b61006161005c36600461074f565b6100cd565b60405190151581526020015b60405180910390f35b6100896100843660046107d6565b61011e565b60405190815260200161006d565b6100aa6100a5366004610849565b610229565b005b6100bf6100ba36600461089f565b610283565b60405161006d9291906108ec565b5f6001600160e01b031982166301ffc9a760e01b14806100fd57506001600160e01b03198216634c4e4f2360e11b145b8061011857506001600160e01b031982166305c0089560e01b145b92915050565b5f86815260208181526040808320338085529083528184206001600160a01b038a1685529092528220600181015490918991899061018e5760405163369d19e760e11b815260048101939093526001600160a01b0391821660248401521660448201526064015b60405180910390fd5b505081548991508690808211156101c957604051638a8a722d60e01b8152600481019390935260248301919091526044820152606401610185565b50505060018101545f5b818110156102185761020086866002860184601081106101f5576101f5610993565b600402019190610393565b610210576001935050505061021f565b6001016101d3565b505f925050505b9695505050505050565b6102368333868585610604565b604080518481523360208201526001600160a01b0386168183015290517f5d14f8bf6f75758495bb0b0768b81cdebc7869d1f19edacc2f483ca0c89a17159181900360600190a150505050565b5f602081815293815260408082208552928152828120845290815281812080548351808501855260018301805482528551610200810190965291959294909391928401916002860190601090835b82821015610386576040805160a081019091526004830285018054829060ff166006811115610302576103026108d8565b6006811115610313576103136108d8565b81528154610100810467ffffffffffffffff16602080840191909152690100000000000000000090910460ff1615156040808401919091526001808501546060850152815180830190925260028501548252600390940154818301526080909201919091529183529290920191016102d1565b5050505081525050905082565b82545f908190849084906103b790610100900467ffffffffffffffff1660046109bb565b875467ffffffffffffffff91821692916103d89161010090041660046109bb565b6103e39060206109bb565b67ffffffffffffffff16926103fa939291906109db565b61040391610a02565b90505f855460ff16600681111561041c5761041c6108d8565b14801561042d575084600101548114155b1561043b575f9150506105fd565b6001855460ff166006811115610453576104536108d8565b148015610464575084600101548111155b15610472575f9150506105fd565b6002855460ff16600681111561048a5761048a6108d8565b14801561049b575084600101548110155b156104a9575f9150506105fd565b6003855460ff1660068111156104c1576104c16108d8565b1480156104d15750846001015481105b156104df575f9150506105fd565b6004855460ff1660068111156104f7576104f76108d8565b1480156105075750846001015481115b15610515575f9150506105fd565b6005855460ff16600681111561052d5761052d6108d8565b14801561053d5750846001015481145b1561054b575f9150506105fd565b6006855460ff166006811115610563576105636108d8565b036105a057600185015460801c811080610592575060018501546fffffffffffffffffffffffffffffffff1681115b156105a0575f9150506105fd565b84546901000000000000000000900460ff16156105f757600285015460038601546105cc908390610a1f565b11156105db575f9150506105fd565b6003850180548291905f906105f1908490610a1f565b90915550505b60019150505b9392505050565b5f61061182840184610ae5565b5f878152602081815260408083206001600160a01b03808b168552908352818420908916845290915290209091506106499082610651565b505050505050565b8051825560208101515160018301555f5b60208201515181101561074a57816020015160200151816010811061068957610689610993565b60200201516002840182601081106106a3576106a3610993565b600402015f820151815f015f6101000a81548160ff021916908360068111156106ce576106ce6108d8565b021790555060208281015182546040850151151569010000000000000000000269ff0000000000000000001967ffffffffffffffff909316610100029290921669ffffffffffffffffff001990911617178255606083015160018084019190915560809093015180516002840155015160039091015501610662565b505050565b5f6020828403121561075f575f5ffd5b81356001600160e01b0319811681146105fd575f5ffd5b80356001600160a01b038116811461078c575f5ffd5b919050565b5f5f83601f8401126107a1575f5ffd5b50813567ffffffffffffffff8111156107b8575f5ffd5b6020830191508360208285010111156107cf575f5ffd5b9250929050565b5f5f5f5f5f5f60a087890312156107eb575f5ffd5b863595506107fb60208801610776565b945061080960408801610776565b935060608701359250608087013567ffffffffffffffff81111561082b575f5ffd5b61083789828a01610791565b979a9699509497509295939492505050565b5f5f5f5f6060858703121561085c575f5ffd5b61086585610776565b935060208501359250604085013567ffffffffffffffff811115610887575f5ffd5b61089387828801610791565b95989497509550505050565b5f5f5f606084860312156108b1575f5ffd5b833592506108c160208501610776565b91506108cf60408501610776565b90509250925092565b634e487b7160e01b5f52602160045260245ffd5b5f610c4082019050838252825160208301526020830151604083015f5b601081101561098957825180516007811061093257634e487b7160e01b5f52602160045260245ffd5b835260208181015167ffffffffffffffff1681850152604080830151151590850152606080830151908501526080918201518051928501929092529081015160a0840152929092019160c090910190600101610909565b5050509392505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff8181168382160190811115610118576101186109a7565b5f5f858511156109e9575f5ffd5b838611156109f5575f5ffd5b5050820193919092039150565b80356020831015610118575f19602084900360031b1b1692915050565b80820180821115610118576101186109a7565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715610a6957610a69610a32565b60405290565b604051610200810167ffffffffffffffff81118282101715610a6957610a69610a32565b60405160a0810167ffffffffffffffff81118282101715610a6957610a69610a32565b5f60408284031215610ac6575f5ffd5b610ace610a46565b823581526020928301359281019290925250919050565b5f818303610c4081128015610af8575f5ffd5b50610b01610a46565b83358152610c20601f1983011215610b17575f5ffd5b610b1f610a46565b602085013581529150605f84018513610b36575f5ffd5b610b3e610a6f565b80610c40860187811115610b50575f5ffd5b604087015b81811015610be65760c0818a031215610b6c575f5ffd5b610b74610a93565b813560078110610b82575f5ffd5b8152602082013567ffffffffffffffff81168114610b9e575f5ffd5b602082015260408201358015158114610bb5575f5ffd5b604082015260608281013590820152610bd18a60808401610ab6565b6080820152845260209093019260c001610b55565b505060208481019190915282019290925294935050505056fea164736f6c634300081c000a\"\n  },\n  \"0x8177451511dE0577b911C254E9551D981C26dc72\": {\n    name: \"TIME_FRAME_POLICY_ADDRESS\",\n    address: \"0x8177451511dE0577b911C254E9551D981C26dc72\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b506004361061007a575f3560e01c80637129edce116100585780637129edce1461016d578063989c9e4614610180578063cbf3450514610195578063f4d09880146101a8575f5ffd5b806301ffc9a71461007e57806305c00895146100a657806360feedad146100c7575b5f5ffd5b61009161008c36600461073f565b61020c565b60405190151581526020015b60405180910390f35b6100b96100b43660046107eb565b610388565b60405190815260200161009d565b6101476100d536600461085e565b6040805180820182525f808252602091820181905294855284815281852073ffffffffffffffffffffffffffffffffffffffff948516865281528185209290931684529082529182902082518084019093525465ffffffffffff80821684526601000000000000909104169082015290565b60408051825165ffffffffffff908116825260209384015116928101929092520161009d565b6100b961017b366004610897565b6103a1565b61019361018e3660046108e2565b6103c0565b005b6100916101a33660046107eb565b6104da565b6101ed6101b636600461085e565b5f602081815293815260408082208552928152828120909352825290205465ffffffffffff80821691660100000000000090041682565b6040805165ffffffffffff93841681529290911660208301520161009d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061029e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f989c9e4600000000000000000000000000000000000000000000000000000000145b806102ea57507fffffffff0000000000000000000000000000000000000000000000000000000082167f05c0089500000000000000000000000000000000000000000000000000000000145b8061033657507fffffffff0000000000000000000000000000000000000000000000000000000082167fcbf3450500000000000000000000000000000000000000000000000000000000145b8061038257507fffffffff0000000000000000000000000000000000000000000000000000000082167f7129edce00000000000000000000000000000000000000000000000000000000145b92915050565b5f61039487338861060e565b90505b9695505050505050565b5f6103b983336103b46020860186610938565b61060e565b9392505050565b6103cd60105f8385610951565b6103d691610978565b5f84815260208181526040808320338452825280832073ffffffffffffffffffffffffffffffffffffffff89168452825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001660809390931c65ffffffffffff16929092179091556104509060108385610951565b61045991610978565b5f93845260208481526040808620338752825280862073ffffffffffffffffffffffffffffffffffffffff9790971686529590529390922080547fffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff16660100000000000060809590951c65ffffffffffff1694909402939093179092555050565b5f86815260208181526040808320338452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525465ffffffffffff80821680845266010000000000009092041692820192909252901515806105505750602081015165ffffffffffff1615155b8833889091926105b8576040517f6d3a33ce000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff91821660248401521660448201526064015b60405180910390fd5b5050815165ffffffffffff1642109050806105da5750805165ffffffffffff16155b80156105f25750806020015165ffffffffffff164210155b15610601576001915050610397565b505f979650505050505050565b5f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff80871685529083528184209085168452825280832081518083019092525465ffffffffffff80821680845266010000000000009092041692820192909252901515806106885750602081015165ffffffffffff1615155b8585859091926106eb576040517f6d3a33ce000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff91821660248401521660448201526064016105af565b5050506107005f825f01518360200151610709565b95945050505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b8561072f575f610732565b60015b60ff161717949350505050565b5f6020828403121561074f575f5ffd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103b9575f5ffd5b803573ffffffffffffffffffffffffffffffffffffffff811681146107a1575f5ffd5b919050565b5f5f83601f8401126107b6575f5ffd5b50813567ffffffffffffffff8111156107cd575f5ffd5b6020830191508360208285010111156107e4575f5ffd5b9250929050565b5f5f5f5f5f5f60a08789031215610800575f5ffd5b863595506108106020880161077e565b945061081e6040880161077e565b935060608701359250608087013567ffffffffffffffff811115610840575f5ffd5b61084c89828a016107a6565b979a9699509497509295939492505050565b5f5f5f60608486031215610870575f5ffd5b833592506108806020850161077e565b915061088e6040850161077e565b90509250925092565b5f5f604083850312156108a8575f5ffd5b82359150602083013567ffffffffffffffff8111156108c5575f5ffd5b830161012081860312156108d7575f5ffd5b809150509250929050565b5f5f5f5f606085870312156108f5575f5ffd5b6108fe8561077e565b935060208501359250604085013567ffffffffffffffff811115610920575f5ffd5b61092c878288016107a6565b95989497509550505050565b5f60208284031215610948575f5ffd5b6103b98261077e565b5f5f8585111561095f575f5ffd5b8386111561096b575f5ffd5b5050820193919092039150565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169060108410156109d7577fffffffffffffffffffffffffffffffff00000000000000000000000000000000808560100360031b1b82161691505b509291505056fea164736f6c634300081b000a\"\n  },\n  \"0x2483DA3A338895199E5e538530213157e931Bf06\": {\n    name: \"OWNABLE_VALIDATOR_ADDRESS\",\n    address: \"0x2483DA3A338895199E5e538530213157e931Bf06\",\n    bytecode:\n      \"0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80639700320311610093578063ecd0596111610063578063ecd059611461024d578063f551e2ee14610260578063fbe5ce0a1461028c578063fd8b84b11461029f575f80fd5b806397003203146101c4578063c86ec2bf146101e5578063ccfdec8c14610204578063d60b347f14610223575f80fd5b80637065cb48116100ce5780637065cb48146101685780638a91b0e31461017b578063940d38401461018e578063960bfe04146101b1575f80fd5b806306fdde03146100f457806354fd4d50146101325780636d61fe7014610153575b5f80fd5b60408051808201909152601081526f27bbb730b13632ab30b634b230ba37b960811b60208201525b6040516101299190611535565b60405180910390f35b6040805180820190915260058152640312e302e360dc1b602082015261011c565b610166610161366004611593565b6102bf565b005b6101666101763660046115e8565b61044b565b610166610189366004611593565b610566565b6101a161019c366004611601565b6105c3565b6040519015158152602001610129565b6101666101bf366004611675565b610704565b6101d76101d236600461168c565b6107df565b604051908152602001610129565b6101d76101f33660046115e8565b60016020525f908152604090205481565b6101d76102123660046115e8565b60026020525f908152604090205481565b6101a16102313660046115e8565b6001600160a01b03165f90815260016020526040902054151590565b6101a161025b366004611675565b610822565b61027361026e3660046116d3565b610834565b6040516001600160e01b03199091168152602001610129565b61016661029a366004611729565b61086f565b6102b26102ad3660046115e8565b610921565b604051610129919061175a565b5f806102cd838501856117ba565b915091506102da81610938565b6102f75760405163e719027360e01b815260040160405180910390fd5b815f03610317576040516306968de960e31b815260040160405180910390fd5b80518281101561033a5760405163aabd5a0960e01b815260040160405180910390fd5b335f81815260016020908152604090912085905582111561036e57604051632414149d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526002602052604081208390556103929082610942565b5f5b8281101561040f575f8482815181106103af576103af611886565b602002602001015190505f6001600160a01b0316816001600160a01b0316036103fb5760405163b20f76e360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6104065f84836109bb565b50600101610394565b506040516001600160a01b038216907f27b541a16df0902e262f34789782092ab25125513b8ed73608e802951771b928905f90a2505050505050565b335f818152600160205260409020546104825760405163f91bd6f160e01b81526001600160a01b03821660048201526024016103f2565b6001600160a01b0382166104b45760405163b20f76e360e01b81526001600160a01b03831660048201526024016103f2565b6001600160a01b0381165f90815260026020908152604090912054106104ed57604051632414149d60e01b815260040160405180910390fd5b6001600160a01b0381165f908152600260205260408120805491610510836118ae565b9091555061052190505f82846109bb565b6040516001600160a01b0383811682528216907fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a906020015b60405180910390a25050565b336105715f82610aae565b6001600160a01b0381165f8181526001602090815260408083208390556002909152808220829055517f9d00629762554452d03c3b45626436df6ca1c3795d05d04df882f6db481b1be09190a2505050565b5f80806105d2848601866117ba565b915091506105df81610938565b6105ed575f925050506106fb565b815f036105fe575f925050506106fb565b5f61066d6106308a6020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b20915050565b905061067881610e09565b61068181610e15565b80515f90815b818110156106dc575f6106bc8583815181106106a5576106a5611886565b602002602001015187610e1e90919063ffffffff16565b50905080156106d357836106cf816118ae565b9450505b50600101610687565b508482106106f2576001955050505050506106fb565b5f955050505050505b95945050505050565b335f8181526001602052604090205461073b5760405163f91bd6f160e01b81526001600160a01b03821660048201526024016103f2565b815f0361075b5760405163aabd5a0960e01b815260040160405180910390fd5b6001600160a01b0381165f908152600260205260409020548211156107935760405163aabd5a0960e01b815260040160405180910390fd5b6001600160a01b0381165f8181526001602052604090819020849055517ff7e18aa0532694077d6fc7df02e85d86b91ba964f958d1949d45c5776d36eb6e9061055a9085815260200190565b5f806108056107f160208601866115e8565b846108006101008801886118c6565b610e3f565b90508015610816575f91505061081c565b60019150505b92915050565b5f600182148061081c57505060071490565b5f8061084233868686610e3f565b9050801561085a5750630b135d3f60e11b9050610867565b506001600160e01b031990505b949350505050565b335f81815260016020908152604080832054600290925290912054036108a857604051630f368a7560e11b815260040160405180910390fd5b6108b45f828585610f64565b6001600160a01b0381165f9081526002602052604081208054916108d783611909565b90915550506040516001600160a01b0383811682528216907fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f930036799060200160405180910390a2505050565b60606109315f8360016020611059565b5092915050565b5f61081c82611219565b60015f908152602083815260408083206001600160a01b0380861685529252909120541615610984576040516329e42f3360e11b815260040160405180910390fd5b60015f818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b03811615806109da57506001600160a01b0381166001145b15610a0357604051637c84ecfb60e01b81526001600160a01b03821660048201526024016103f2565b6001600160a01b038181165f9081526020858152604080832086851684529091529020541615610a5157604051631034f46960e21b81526001600160a01b03821660048201526024016103f2565b60015f908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b60015f908152602083815260408083206001600160a01b038581168552925290912054165b6001600160a01b03811615610b1b576001600160a01b039081165f908152602084815260408083208585168452909152902080546001600160a01b0319811690915516610ad3565b505050565b60605f610b2e83604161191e565b84519091508367ffffffffffffffff811115610b4c57610b4c6117a6565b604051908082528060200260200182016040528015610b75578160200160208202803683370190505b50925081811015610b9957604051638baa579f60e01b815260040160405180910390fd5b5f5b84811015610dff575f805f80610bc88a8660410201602081015160408201516060909201515f1a92909190565b9250925092508260ff165f03610d5f579092508290610be889604161191e565b811015610c18576040516338a245ff60e11b8152600481018290525f6024820181905260448201526064016103f2565b85610c24826020611935565b1115610c53576040516338a245ff60e11b8152600481018290525f6024820152604481018790526064016103f2565b6020818b018101519087908290610c6b908590611935565b610c759190611935565b1115610ca5576040516338a245ff60e11b81526004810183905260248101829052604481018890526064016103f2565b60606020838d01019050631626ba7e60e01b6001600160e01b031916866001600160a01b0316631626ba7e8f846040518363ffffffff1660e01b8152600401610cef929190611948565b602060405180830381865afa158015610d0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2e9190611960565b6001600160e01b03191614610d58578060405163605d348960e01b81526004016103f29190611535565b5050610dc4565b601e8360ff161115610db557610dae610d9c8c6020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b610da7600486611987565b8484611251565b9350610dc4565b610dc18b848484611251565b93505b83888681518110610dd757610dd7611886565b6001600160a01b0390921660209283029190910190910152505060019092019150610b9b9050565b5050509392505050565b610e128161128b565b50565b610e128161141b565b5f80610e3484846001600160a01b03165f611464565b909590945092505050565b6001600160a01b0384165f90815260016020526040812054808203610e67575f915050610867565b5f610ed6610e99876020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250610b20915050565b9050610ee181610e09565b610eea81610e15565b80515f90815b81811015610f4157610f268a858381518110610f0e57610f0e611886565b60200260200101515f6114c59092919063ffffffff16565b15610f395782610f35816118ae565b9350505b600101610ef0565b50838210610f56576001945050505050610867565b505f98975050505050505050565b6001600160a01b0381161580610f8357506001600160a01b0381166001145b15610fac57604051637c84ecfb60e01b81526001600160a01b03831660048201526024016103f2565b6001600160a01b038281165f908152602086815260408083208785168452909152902054811690821614610ffe57604051637c84ecfb60e01b81526001600160a01b03821660048201526024016103f2565b6001600160a01b039081165f908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b60605f6001600160a01b03841660011480159061107e575061107c8686866114c5565b155b156110a757604051637c84ecfb60e01b81526001600160a01b03851660048201526024016103f2565b825f036110c75760405163f725081760e01b815260040160405180910390fd5b8267ffffffffffffffff8111156110e0576110e06117a6565b604051908082528060200260200182016040528015611109578160200160208202803683370190505b506001600160a01b038086165f908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b0382161580159061115857506001600160a01b038216600114155b801561116357508381105b156111c7578183828151811061117b5761117b611886565b6001600160a01b039283166020918202929092018101919091529281165f90815288845260408082208984168352909452929092205490911690806111bf816118ae565b915050611136565b6001600160a01b0382166001148015906111e057505f81115b1561120c57826111f16001836119a0565b8151811061120157611201611886565b602002602001015191505b8083525094509492505050565b805160019060021161124c57815160051b82016020830192505b8251602090930180519093109150808318820261123357505b919050565b5f604051855f5260ff851660205283604052826060526020604060805f60015afa505f6060523d6060185191508060405250949350505050565b611389565b610180828403116112f3576020820180518351106112b15780518351825283525b5b6020018381116112ed57805182820180518281116112d2575050506112b2565b5b6020820152830180518281116112d35750602001526112b2565b50505050565b81601f1683830160061c60051b018251815180821061130e57905b85518082106113235790818310611323579091905b865282528352518390835b5b6020018051821161132f57825b84018051831061133c5792508281101561135d57805183518252835261132e565b505083602082011461137757611377846020830184611290565b8281146112ed576112ed818484611290565b80516002811061141757601f19602083018260051b8401805b805181850151116113b45783016113a2565b8281116113c357505050505050565b50805b805181850151106113d85783016113c6565b828111611401575b8251825184528252602090920191908301908183106113e057505050505050565b505f8552611410818385611290565b5050508082525b5050565b6002815110610e12576020810160408201600183510160051b83015b815183511461144b57602083019250815183525b60208201915080820361143757505081900360051c9052565b5f805f19600186515f87870197505b81830160011c94508460051b89015187019050878114828411176114ad578088116114a2578385019150611473565b600185019250611473565b84151597148716989290930190950295509350505050565b5f60016001600160a01b038316148015906108675750506001600160a01b039081165f9081526020938452604080822093831682529290935291205416151590565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6115476020830184611507565b9392505050565b5f8083601f84011261155e575f80fd5b50813567ffffffffffffffff811115611575575f80fd5b60208301915083602082850101111561158c575f80fd5b9250929050565b5f80602083850312156115a4575f80fd5b823567ffffffffffffffff8111156115ba575f80fd5b6115c68582860161154e565b90969095509350505050565b80356001600160a01b038116811461124c575f80fd5b5f602082840312156115f8575f80fd5b611547826115d2565b5f805f805f60608688031215611615575f80fd5b85359450602086013567ffffffffffffffff80821115611633575f80fd5b61163f89838a0161154e565b90965094506040880135915080821115611657575f80fd5b506116648882890161154e565b969995985093965092949392505050565b5f60208284031215611685575f80fd5b5035919050565b5f806040838503121561169d575f80fd5b823567ffffffffffffffff8111156116b3575f80fd5b830161012081860312156116c5575f80fd5b946020939093013593505050565b5f805f80606085870312156116e6575f80fd5b6116ef856115d2565b935060208501359250604085013567ffffffffffffffff811115611711575f80fd5b61171d8782880161154e565b95989497509550505050565b5f806040838503121561173a575f80fd5b611743836115d2565b9150611751602084016115d2565b90509250929050565b602080825282518282018190525f9190848201906040850190845b8181101561179a5783516001600160a01b031683529284019291840191600101611775565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156117cb575f80fd5b8235915060208084013567ffffffffffffffff808211156117ea575f80fd5b818601915086601f8301126117fd575f80fd5b81358181111561180f5761180f6117a6565b8060051b604051601f19603f83011681018181108582111715611834576118346117a6565b604052918252848201925083810185019189831115611851575f80fd5b938501935b8285101561187657611867856115d2565b84529385019392850192611856565b8096505050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016118bf576118bf61189a565b5060010190565b5f808335601e198436030181126118db575f80fd5b83018035915067ffffffffffffffff8211156118f5575f80fd5b60200191503681900382131561158c575f80fd5b5f816119175761191761189a565b505f190190565b808202811582820484141761081c5761081c61189a565b8082018082111561081c5761081c61189a565b828152604060208201525f6108676040830184611507565b5f60208284031215611970575f80fd5b81516001600160e01b031981168114611547575f80fd5b60ff828116828216039081111561081c5761081c61189a565b8181038181111561081c5761081c61189a56fea264697066735822122089814b49ff8f7ef914b58d849a7e4e56d81b2f15fc09ec59379acbf9782bb81064736f6c63430008190033\"\n  },\n  \"0x4Fd8d57b94966982B62e9588C27B4171B55E8354\": {\n    name: \"OWNABLE_EXECUTOR_ADDRESS\",\n    address: \"0x4Fd8d57b94966982B62e9588C27B4171B55E8354\",\n    bytecode:\n      \"0x6080604052600436106100a5575f3560e01c8063d26cdce311610062578063d26cdce3146101b7578063d60b347f146101ca578063e5086003146101f9578063ecd059611461020c578063fbe5ce0a1461022c578063fd8b84b11461024b575f80fd5b806306fdde03146100a957806354fd4d50146100f25780636d61fe701461011f5780637065cb48146101405780638a91b0e31461015f578063ccfdec8c1461017e575b5f80fd5b3480156100b4575f80fd5b5060408051808201909152600f81526e27bbb730b13632a2bc32b1baba37b960891b60208201525b6040516100e99190610b67565b60405180910390f35b3480156100fd575f80fd5b506040805180820190915260058152640312e302e360dc1b60208201526100dc565b34801561012a575f80fd5b5061013e610139366004610be1565b610277565b005b34801561014b575f80fd5b5061013e61015a366004610c3b565b61036a565b34801561016a575f80fd5b5061013e610179366004610be1565b61045c565b348015610189575f80fd5b506101a9610198366004610c3b565b60016020525f908152604090205481565b6040519081526020016100e9565b61013e6101c5366004610c54565b6104ae565b3480156101d5575f80fd5b506101e96101e4366004610c3b565b61056d565b60405190151581526020016100e9565b61013e610207366004610c54565b61059c565b348015610217575f80fd5b506101e9610226366004610ca3565b60021490565b348015610237575f80fd5b5061013e610246366004610cba565b6105f2565b348015610256575f80fd5b5061026a610265366004610c3b565b610665565b6040516100e99190610ceb565b335f6102866014828587610d37565b61028f91610d5e565b60601c9050806102c25760405163b20f76e360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b0382165f9081526020819052604090206102e29061069b565b6001600160a01b0382165f90815260208190526040902061030390826106f6565b6001600160a01b0382165f8181526001602081905260409182902055517f1cd4a6da6e6a6f4dc754cedd54ead3b9cd0e2f5804cda2ba60506c2899fb29df9061035c9084906001600160a01b0391909116815260200190565b60405180910390a250505050565b336103748161056d565b61039c5760405163f91bd6f160e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b0382166103ce5760405163b20f76e360e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b0381165f9081526020819052604090206103ef90836106f6565b6001600160a01b0381165f90815260016020526040812080549161041283610da7565b90915550506040516001600160a01b0383811682528216907fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a906020015b60405180910390a25050565b335f908152602081905260409020610473906107ca565b335f81815260016020526040808220829055517f9d00629762554452d03c3b45626436df6ca1c3795d05d04df882f6db481b1be09190a25050565b6001600160a01b0383165f9081526020819052604090206104cf9033610825565b6104ec57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c9643461050461085f565b85856040518563ffffffff1660e01b815260040161052493929190610dbf565b5f6040518083038185885af115801561053f573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526105679190810190610e39565b50505050565b6001600160a01b038181165f908152602081815260408083206001845290915281205490911615155b92915050565b6001600160a01b0383165f9081526020819052604090206105bd9033610825565b6105da57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c96434610504610871565b335f90815260208190526040902061060b908383610882565b335f90815260016020526040812080549161062583610f47565b90915550506040516001600160a01b038216815233907fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f9300367990602001610450565b6001600160a01b0381165f90815260016020818152604080842054918490529092206060926106949290610955565b5092915050565b60015f908152602082905260409020546001600160a01b0316156106d2576040516329e42f3360e11b815260040160405180910390fd5b60015f818152602092909252604090912080546001600160a01b0319169091179055565b6001600160a01b038116158061071557506001600160a01b0381166001145b1561073e57604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b038181165f90815260208490526040902054161561078157604051631034f46960e21b81526001600160a01b03821660048201526024016102b9565b60015f818152602093909352604080842080546001600160a01b039485168087529286208054959091166001600160a01b03199586161790559190935280549091169091179055565b60015f908152602082905260409020546001600160a01b03165b6001600160a01b03811615610821576001600160a01b039081165f90815260208390526040902080546001600160a01b03198116909155166107e4565b5050565b5f60016001600160a01b0383161480159061085857506001600160a01b038281165f908152602085905260409020541615155b9392505050565b5f61086c81808080610afd565b905090565b5f61086c600160f81b828080610afd565b6001600160a01b03811615806108a157506001600160a01b0381166001145b156108ca57604051637c84ecfb60e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b038281165f9081526020859052604090205481169082161461091157604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b039081165f8181526020949094526040808520805494841686529085208054949093166001600160a01b0319948516179092559092528154169055565b60605f6001600160a01b03841660011480159061097957506109778585610825565b155b156109a257604051637c84ecfb60e01b81526001600160a01b03851660048201526024016102b9565b825f036109c25760405163f725081760e01b815260040160405180910390fd5b8267ffffffffffffffff8111156109db576109db610df4565b604051908082528060200260200182016040528015610a04578160200160208202803683370190505b506001600160a01b038086165f90815260208890526040812054929450911691505b6001600160a01b03821615801590610a4857506001600160a01b038216600114155b8015610a5357508381105b15610aac5781838281518110610a6b57610a6b610f5c565b6001600160a01b039283166020918202929092018101919091529281165f908152928790526040909220549091169080610aa481610da7565b915050610a26565b6001600160a01b038216600114801590610ac557505f81115b15610af15782610ad6600183610f70565b81518110610ae657610ae6610f5c565b602002602001015191505b80835250935093915050565b604080516001600160f81b03198087166020830152851660218201525f602282018190526001600160e01b03198516602683015269ffffffffffffffffffff198416602a8301529101604051602081830303815290604052610b5e90610f83565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8083601f840112610bac575f80fd5b50813567ffffffffffffffff811115610bc3575f80fd5b602083019150836020828501011115610bda575f80fd5b9250929050565b5f8060208385031215610bf2575f80fd5b823567ffffffffffffffff811115610c08575f80fd5b610c1485828601610b9c565b90969095509350505050565b80356001600160a01b0381168114610c36575f80fd5b919050565b5f60208284031215610c4b575f80fd5b61085882610c20565b5f805f60408486031215610c66575f80fd5b610c6f84610c20565b9250602084013567ffffffffffffffff811115610c8a575f80fd5b610c9686828701610b9c565b9497909650939450505050565b5f60208284031215610cb3575f80fd5b5035919050565b5f8060408385031215610ccb575f80fd5b610cd483610c20565b9150610ce260208401610c20565b90509250929050565b602080825282518282018190525f9190848201906040850190845b81811015610d2b5783516001600160a01b031683529284019291840191600101610d06565b50909695505050505050565b5f8085851115610d45575f80fd5b83861115610d51575f80fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610d8b5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610db857610db8610d93565b5060010190565b83815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e3157610e31610df4565b604052919050565b5f6020808385031215610e4a575f80fd5b825167ffffffffffffffff80821115610e61575f80fd5b8185019150601f86601f840112610e76575f80fd5b825182811115610e8857610e88610df4565b8060051b610e97868201610e08565b918252848101860191868101908a841115610eb0575f80fd5b87870192505b83831015610f3957825186811115610ecc575f80fd5b8701603f81018c13610edc575f80fd5b88810151604088821115610ef257610ef2610df4565b610f03828901601f19168c01610e08565b8281528e82848601011115610f16575f80fd5b828285018d83015e5f9281018c0192909252508352509187019190870190610eb6565b9a9950505050505050505050565b5f81610f5557610f55610d93565b505f190190565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561059657610596610d93565b80516020808301519190811015610fa3575f198160200360031b1b821691505b5091905056fea2646970667358221220fd20c30d790f9e29c7fee691f54ed598408181fcc342f8f909eaa9478dfd384a64736f6c63430008190033\"\n  },\n  \"0x730DA93267E7E513e932301B47F2ac7D062abC83\": {\n    name: \"VALUE_LIMIT_POLICY_ADDRESS\",\n    address: \"0x730DA93267E7E513e932301B47F2ac7D062abC83\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b506004361061007a575f3560e01c8063831b65a511610058578063831b65a5146100da578063856334b214610125578063989c9e461461016d5780639cbbc52714610182575f5ffd5b806301ffc9a71461007e57806305c00895146100a65780637129edce146100c7575b5f5ffd5b61009161008c366004610822565b6101cd565b60405190151581526020015b60405180910390f35b6100b96100b43660046108d5565b6102fd565b60405190815260200161009d565b6100b96100d5366004610948565b6103c7565b6100b96100e8366004610993565b5f9283526020838152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290206001015490565b6100b9610133366004610993565b5f9283526020838152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b61018061017b3660046109cc565b61070c565b005b6101b8610190366004610993565b5f60208181529381526040808220855292815282812090935282529020805460019091015482565b6040805192835260208301919091520161009d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061025f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f989c9e4600000000000000000000000000000000000000000000000000000000145b806102ab57507fffffffff0000000000000000000000000000000000000000000000000000000082167f05c0089500000000000000000000000000000000000000000000000000000000145b806102f757507fffffffff0000000000000000000000000000000000000000000000000000000082167f7129edce00000000000000000000000000000000000000000000000000000000145b92915050565b5f868152602081815260408083203380855290835281842073ffffffffffffffffffffffffffffffffffffffff8a1685529092528220805490918991899061039d576040517f6d3a33ce000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff91821660248401521660448201526064015b60405180910390fd5b5050506103aa8186610766565b6103b85760019150506103bd565b5f9150505b9695505050505050565b5f8281526020818152604080832033845282528220829182906103ec90860186610a22565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201929092526040015f2080549092501515908590339061042a90870187610a22565b90919261048a576040517f6d3a33ce000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff9182166024840152166044820152606401610394565b505f915061049d90506060850185610a3b565b6104ab916004915f91610a9c565b6104b491610ac3565b90507f1651a3ad000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610702575f6105156105106060870187610a3b565b6107a9565b5090507fff000000000000000000000000000000000000000000000000000000000000008116610595575f61056f61056a6105536060890189610a3b565b506024818101359091019081019160049091013590565b6107d2565b505091505061057e8482610766565b61058f5760019450505050506102f7565b50610700565b7fff0000000000000000000000000000000000000000000000000000000000000081167f01000000000000000000000000000000000000000000000000000000000000000361067657365f6106016105f361055360608a018a610a3b565b508035016020810191903590565b9092509050805f805b8281101561064e5784848281811061062457610624610b29565b90506020028101906106369190610b56565b610644906020013583610b92565b915060010161060a565b506106598782610766565b61066d5760019750505050505050506102f7565b50505050610700565b7fff00000000000000000000000000000000000000000000000000000000000000808216036106aa575f93505050506102f7565b6040517fb96fcfe40000000000000000000000000000000000000000000000000000000081527fff0000000000000000000000000000000000000000000000000000000000000082166004820152602401610394565b505b505f949350505050565b61071960205f8385610a9c565b61072291610bca565b5f93845260208481526040808620338752825280862073ffffffffffffffffffffffffffffffffffffffff9790971686529590529383209384555050600190910155565b5f825f015482846001015461077b9190610b92565b111561078857505f6102f7565b81836001015f82825461079b9190610b92565b909155506001949350505050565b5f80806107ba602460048688610a9c565b6107c391610bca565b95600887901b95509350505050565b5f8036816107e36014828789610a9c565b6107ec91610c06565b60601c93506107ff603460148789610a9c565b61080891610bca565b92506108178560348189610a9c565b949793965094505050565b5f60208284031215610832575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610861575f5ffd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461088b575f5ffd5b919050565b5f5f83601f8401126108a0575f5ffd5b50813567ffffffffffffffff8111156108b7575f5ffd5b6020830191508360208285010111156108ce575f5ffd5b9250929050565b5f5f5f5f5f5f60a087890312156108ea575f5ffd5b863595506108fa60208801610868565b945061090860408801610868565b935060608701359250608087013567ffffffffffffffff81111561092a575f5ffd5b61093689828a01610890565b979a9699509497509295939492505050565b5f5f60408385031215610959575f5ffd5b82359150602083013567ffffffffffffffff811115610976575f5ffd5b83016101208186031215610988575f5ffd5b809150509250929050565b5f5f5f606084860312156109a5575f5ffd5b833592506109b560208501610868565b91506109c360408501610868565b90509250925092565b5f5f5f5f606085870312156109df575f5ffd5b6109e885610868565b935060208501359250604085013567ffffffffffffffff811115610a0a575f5ffd5b610a1687828801610890565b95989497509550505050565b5f60208284031215610a32575f5ffd5b61086182610868565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610a6e575f5ffd5b83018035915067ffffffffffffffff821115610a88575f5ffd5b6020019150368190038213156108ce575f5ffd5b5f5f85851115610aaa575f5ffd5b83861115610ab6575f5ffd5b5050820193919092039150565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015610b22577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610b88575f5ffd5b9190910192915050565b808201808211156102f7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156102f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015610b22577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b8216169150509291505056fea164736f6c634300081b000a\"\n  },\n  \"0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e\": {\n    name: \"MINTABLE_ADDRESS\",\n    address: \"0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e\",\n    bytecode:\n      \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101e1578063b88d4fde146101f4578063c87b56dd14610207578063e985e9c51461021a57600080fd5b80636352211e146101a557806370a08231146101b857806395d89b41146101d957600080fd5b8063095ea7b3116100c8578063095ea7b31461015757806323b872dd1461016c57806340d097c31461017f57806342842e0e1461019257600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd3660046110ef565b610256565b60405190151581526020015b60405180910390f35b61011f6102a8565b60405161010e919061115c565b61013f61013a36600461116f565b61033a565b6040516001600160a01b03909116815260200161010e565b61016a6101653660046111a4565b610361565b005b61016a61017a3660046111ce565b61047b565b61016a61018d36600461120a565b6104f2565b61016a6101a03660046111ce565b61051b565b61013f6101b336600461116f565b610536565b6101cb6101c636600461120a565b61059b565b60405190815260200161010e565b61011f610635565b61016a6101ef366004611225565b610644565b61016a610202366004611277565b61064f565b61011f61021536600461116f565b6106cd565b610102610228366004611353565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061028757506001600160e01b03198216635b5e139f60e01b145b806102a257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102b790611386565b80601f01602080910402602001604051908101604052809291908181526020018280546102e390611386565b80156103305780601f1061030557610100808354040283529160200191610330565b820191906000526020600020905b81548152906001019060200180831161031357829003601f168201915b5050505050905090565b600061034582610741565b506000908152600460205260409020546001600160a01b031690565b600061036c82610536565b9050806001600160a01b0316836001600160a01b0316036103de5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103fa57506103fa8133610228565b61046c5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103d5565b61047683836107a8565b505050565b6104853382610823565b6104e75760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b60648201526084016103d5565b6104768383836108a2565b60006104fd60065490565b905061050d600680546001019055565b6105178282610a8f565b5050565b6104768383836040518060200160405280600081525061064f565b6000818152600260205260408120546001600160a01b0316806102a25760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016103d5565b60006001600160a01b0382166106195760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016103d5565b506001600160a01b031660009081526003602052604090205490565b6060600180546102b790611386565b610517338383610aa9565b6106593383610823565b6106bb5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b60648201526084016103d5565b6106c784848484610b77565b50505050565b60606106d882610741565b60006106ef60408051602081019091526000815290565b9050600081511161070f576040518060200160405280600081525061073a565b8061071984610bf5565b60405160200161072a9291906113c0565b6040516020818303038152906040525b9392505050565b6000818152600260205260409020546001600160a01b03166107a55760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016103d5565b50565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906107ea82610536565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061082f83610536565b9050806001600160a01b0316846001600160a01b0316148061087657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061089a5750836001600160a01b031661088f8461033a565b6001600160a01b0316145b949350505050565b826001600160a01b03166108b582610536565b6001600160a01b0316146109195760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016103d5565b6001600160a01b03821661097b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103d5565b826001600160a01b031661098e82610536565b6001600160a01b0316146109f25760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016103d5565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610517828260405180602001604052806000815250610c95565b816001600160a01b0316836001600160a01b031603610b0a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103d5565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610b828484846108a2565b610b8e84848484610d13565b6106c75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016103d5565b60606000610c0283610e5f565b600101905060008167ffffffffffffffff811115610c2257610c22611261565b6040519080825280601f01601f191660200182016040528015610c4c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610c5657509392505050565b610c9f8383610f41565b610cac6000848484610d13565b6104765760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016103d5565b60006001600160a01b0384163b15610e5457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610d579033908990889088906004016113ef565b6020604051808303816000875af1925050508015610d92575060408051601f3d908101601f19168201909252610d8f9181019061142b565b60015b610e3a573d808015610dc0576040519150601f19603f3d011682016040523d82523d6000602084013e610dc5565b606091505b508051600003610e325760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016103d5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061089a565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610ea8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610ed4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ef257662386f26fc10000830492506010015b6305f5e1008310610f0a576305f5e100830492506008015b6127108310610f1e57612710830492506004015b60648310610f30576064830492506002015b600a83106102a25760010192915050565b6001600160a01b038216610f975760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103d5565b6000818152600260205260409020546001600160a01b031615610ffc5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103d5565b6000818152600260205260409020546001600160a01b0316156110615760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103d5565b6001600160a01b0382166000818152600360209081526040808320805460010190558483526002909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b0319811681146107a557600080fd5b60006020828403121561110157600080fd5b813561073a816110d9565b60005b8381101561112757818101518382015260200161110f565b50506000910152565b6000815180845261114881602086016020860161110c565b601f01601f19169290920160200192915050565b60208152600061073a6020830184611130565b60006020828403121561118157600080fd5b5035919050565b80356001600160a01b038116811461119f57600080fd5b919050565b600080604083850312156111b757600080fd5b6111c083611188565b946020939093013593505050565b6000806000606084860312156111e357600080fd5b6111ec84611188565b92506111fa60208501611188565b9150604084013590509250925092565b60006020828403121561121c57600080fd5b61073a82611188565b6000806040838503121561123857600080fd5b61124183611188565b91506020830135801515811461125657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561128d57600080fd5b61129685611188565b93506112a460208601611188565b925060408501359150606085013567ffffffffffffffff808211156112c857600080fd5b818701915087601f8301126112dc57600080fd5b8135818111156112ee576112ee611261565b604051601f8201601f19908116603f0116810190838211818310171561131657611316611261565b816040528281528a602084870101111561132f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561136657600080fd5b61136f83611188565b915061137d60208401611188565b90509250929050565b600181811c9082168061139a57607f821691505b6020821081036113ba57634e487b7160e01b600052602260045260246000fd5b50919050565b600083516113d281846020880161110c565b8351908301906113e681836020880161110c565b01949350505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526114216080830184611130565b9695505050505050565b60006020828403121561143d57600080fd5b815161073a816110d956fea26469706673582212201b55b5d4e7d9a40d6a4bd7e19111c324f71b028aacdc662cb08c65ff8bf7109e64736f6c63430008110033\"\n  },\n  \"0x00000004430bB055dB66eBef6Fe5Ee1DA9668B10\": {\n    name: \"COMPOSABLE_MODULE_ADDRESS\",\n    address: \"0x00000004430bB055dB66eBef6Fe5Ee1DA9668B10\",\n    bytecode:\n      \"0x60806040526004361015610011575f80fd5b5f3560e01c80632825113f146100b45780634ce1f402146100af578063584465f2146100aa5780635e765374146100a55780636d61fe70146100a05780638a91b0e31461009b578063c9ce75b114610096578063d60b347f14610091578063ea5a6d911461008c5763ecd0596114610087575f80fd5b6105db565b6104b0565b610450565b610400565b6103b1565b61039a565b610273565b6101c3565b61018d565b34610135576100c236610139565b903073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000004430bb055db66ebef6fe5ee1da9668b10161461010d5761010b9130916109a4565b005b7f52cafe32000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b9060206003198301126101355760043567ffffffffffffffff811161013557826023820112156101355780600401359267ffffffffffffffff84116101355760248460051b83010111610135576024019190565b346101355761010b61019e36610139565b3391610a73565b73ffffffffffffffffffffffffffffffffffffffff81160361013557565b34610135576020600319360112610135576004356101e0816101a5565b73ffffffffffffffffffffffffffffffffffffffff81161561024b5761010b90335f525f60205260405f209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f8579befe000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101355760206003193601126101355773ffffffffffffffffffffffffffffffffffffffff6004356102a5816101a5565b16805f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f205416155f14610320575061031c7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0325b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b5f525f60205261031c73ffffffffffffffffffffffffffffffffffffffff60405f2054166102f5565b9060206003198301126101355760043567ffffffffffffffff811161013557826023820112156101355780600401359267ffffffffffffffff84116101355760248483010111610135576024019190565b346101355761010b6103ab36610349565b90610687565b34610135576103bf36610349565b5050335f525f60205260405f207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690555f80f35b5f91031261013557565b34610135575f60031936011261013557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032168152f35b346101355760206003193601126101355773ffffffffffffffffffffffffffffffffffffffff600435610482816101a5565b165f525f602052602073ffffffffffffffffffffffffffffffffffffffff60405f2054161515604051908152f35b6104b936610139565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0321681149081156105af575b81156105a5575b501561057d5734610540575b61010b913391610a73565b5f80808034335af1610550610cb9565b50610535577f361241bd000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0e4204bc000000000000000000000000000000000000000000000000000000005f5260045ffd5b905033145f610529565b9050335f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f205416811490610522565b3461013557602060031936011261013557602060043560028114908115610608575b506040519015158152f35b60039150145f6105fd565b906014116101355790601490565b919091357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169260148110610655575050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000929350829060140360031b1b161690565b906014811015610695575050565b335f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f205416610743576106d46106ce6106da9261074194610613565b90610621565b60601c90565b6107013373ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b565b6107736106ce73ffffffffffffffffffffffffffffffffffffffff92335f525f6020528360405f20541694610613565b60601c160361077e57565b7f93360fbf000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff331660045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761081057604052565b6107c0565b67ffffffffffffffff81116108105760051b60200190565b6040805190919061083e83826107ed565b6001815291601f1901825f5b82811061085657505050565b80606060208093850101520161084a565b35610871816101a5565b90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051156108ae5760200190565b610874565b91908110156108ae5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6181360301821215610135570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610135570180359067ffffffffffffffff821161013557602001918160051b3603831361013557565b357fffffffff00000000000000000000000000000000000000000000000000000000811681036101355790565b67ffffffffffffffff811161081057601f01601f191660200190565b6040519061099f6020836107ed565b5f8252565b91905f5b8181106109b55750505050565b80610a3c846109c760019486896108b3565b6109e96109d760608301836108f3565b6109e360408501610947565b91610cfa565b73ffffffffffffffffffffffffffffffffffffffff8235610a09816101a5565b1615610a4257610a2d610a21610a359284600261158a565b925b60808101906108f3565b9190926108a1565b5191610e00565b016109a8565b50610a35610a2d610a5161082d565b92610a5a610990565b610a63856108a1565b52610a6d846108a1565b50610a23565b91905f5b818110610a845750505050565b80610add84610a9660019486896108b3565b610aa66109d760608301836108f3565b73ffffffffffffffffffffffffffffffffffffffff8235610ac6816101a5565b1615610a4257610a2d610a21610a3592848961158a565b01610a77565b6020818303126101355780519067ffffffffffffffff821161013557019080601f8301121561013557815191610b1883610815565b92610b2660405194856107ed565b80845260208085019160051b830101918383116101355760208101915b838310610b5257505050505090565b825167ffffffffffffffff811161013557820185603f8201121561013557602081015191610b7f83610974565b610b8c60405191826107ed565b8381526040838501018810610135575f602085819660408397018386015e83010152815201920191610b43565b90601f6020606094601f199385526040828601528051918291826040880152018686015e5f8582860101520116010190565b6040513d5f823e3d90fd5b5f90610c4c610c8193610c3760405185602082015285602182015285602282015285602682015285602a82015260208152610c326040826107ed565b61116e565b926020610c4382610867565b91013590610f32565b9060405193849283927fd691c96400000000000000000000000000000000000000000000000000000000845260048401610bb9565b038183335af1908115610cb4575f91610c98575090565b61087191503d805f833e610cac81836107ed565b810190610ae3565b610beb565b3d15610ce3573d90610cca82610974565b91610cd860405193846107ed565b82523d5f602084013e565b606090565b805191908290602001825e015f815290565b90917fffffffff000000000000000000000000000000000000000000000000000000006040519116602082015260048152610d366024826107ed565b925f935b83851015610db9578460051b830135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18436030182121561013557610db1610d9d91610da3610d8d6001958801611056565b6040519485936020850190610ce8565b90610ce8565b03601f1981018352826107ed565b940193610d3a565b9350915050565b91908110156108ae5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610135570190565b91905f5b818110610e12575050505050565b610e1d818386610dc0565b9085610e2883610fb5565b610e3181610fa6565b610e6357610e5d90610e498460206001960190610fc2565b506040810135908760208201359135611469565b01610e04565b50906001610e7082610fb5565b610e7981610fa6565b03610f0a57806020610e8c920190610fc2565b50905f80610eac6040850135850160405191828260208294359101611013565b039060208601355afa610ebd610cb9565b9015610ee25786610edd9184608060019601359160608201359135611469565b610e5d565b7f6e47f619000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe2121978000000000000000000000000000000000000000000000000000000005f5260045ffd5b610da37fffffffffffffffffffffffffffffffffffffffff000000000000000000000000936108719360405195869460601b16602085015260348401526054830190610ce8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610fb057565b610f79565b3560028110156101355790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610135570180359067ffffffffffffffff82116101355760200191813603831361013557565b908092918237015f815290565b92919261102c82610974565b9161103a60405193846107ed565b829481845281830111610135578281602093845f960137010152565b61105f81610fb5565b61106881610fa6565b6110b0576110a98160206108719301906110a46110858383610fc2565b61109f61109560408601866108f3565b9390923691611020565b61130d565b610fc2565b3691611020565b60016110bb82610fb5565b6110c481610fa6565b03611146575f806110d86020840184610fc2565b50604051806110f281602085810135860180359101611013565b0391355afa90611100610cb9565b911561111e576111178160406108719301906108f3565b908361130d565b7f6533cc8d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f94857955000000000000000000000000000000000000000000000000000000005f5260045ffd5b602081519101519060208110611182575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b60408136031261013557604051906040820182811067ffffffffffffffff821117610810576040528035600481101561013557825260208101359067ffffffffffffffff8211610135570136601f8201121561013557611216903690602081359101611020565b602082015290565b60041115610fb057565b9190826040910312610135576020825192015190565b1561124557565b7fa31844b0000000000000000000000000000000000000000000000000000000005f52600360045260245ffd5b1561127957565b7fa31844b0000000000000000000000000000000000000000000000000000000005f52600260045260245ffd5b156112ad57565b7fa31844b0000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b156112e157565b7fa31844b0000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b918061131857505050565b5f5b8181106113275750505050565b61133a611335828486610dc0565b6111af565b9060208160051b860101519180516113518161121e565b61135a8161121e565b61137d57600192611371602061137793015161116e565b146112da565b0161131a565b6001815161138a8161121e565b6113938161121e565b036113b7576001926113ab60206113b293015161116e565b11156112a6565b611377565b600281516113c48161121e565b6113cd8161121e565b036113ec576001926113e560206113b293015161116e565b1015611272565b600381516113f98161121e565b6114028161121e565b036114415760019261142460206113b293015160208082518301019101611228565b908210159182611436575b505061123e565b111590505f8061142f565b7f2c50c45e000000000000000000000000000000000000000000000000000000005f5260045ffd5b929193905f5b84811061147e57505050505050565b60208160051b830101519073ffffffffffffffffffffffffffffffffffffffff87169160405160208101906114c381610da3868b869091604092825260208201520190565b519020833b15610135576040517fa39e07870000000000000000000000000000000000000000000000000000000081526004810191909152602481019190915273ffffffffffffffffffffffffffffffffffffffff85166044820152915f908390606490829084905af1918215610cb457600192611543575b500161146f565b806115515f611557936107ed565b806103f6565b5f61153c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b919091806002146115a55760010361155d5761087191610bf6565b50905f6115b061082d565b9260208335936115bf856101a5565b013590604051933892602083519301915af115611602573d81523d5f602083013e60203d8201016040528151156108ae5760208201526115fe816108a1565b5090565b3d5f823e3d90fdfea164736f6c634300081b000a\"\n  },\n  \"0xE854C84cD68fC434cB3B0042c29235D452cAD977\": {\n    name: \"MEE_ENTRYPOINT\",\n    address: \"0xE854C84cD68fC434cB3B0042c29235D452cAD977\",\n    bytecode:\n      \"0x6080604052600436106100ef575f3560e01c806397b2dcb911610087578063c399ec8811610057578063c399ec8814610282578063c3bce00914610296578063d0e30db0146102b6578063f2fde38b146102be575f5ffd5b806397b2dcb9146101fc578063b0d691fe1461021c578063bb9fe6bf1461024f578063c23a5cea14610263575f5ffd5b806357956b58116100c257806357956b5814610186578063715018a6146101995780637c627b21146101ad5780638da5cb5b146101cc575f5ffd5b80630396cb60146100f3578063205c28781461010857806324a29b4f1461012757806352b7512c14610159575b5f5ffd5b610106610101366004611005565b6102dd565b005b348015610113575f5ffd5b50610106610122366004611034565b61037e565b348015610132575f5ffd5b5061014661014136600461105e565b6103ee565b6040519081526020015b60405180910390f35b348015610164575f5ffd5b506101786101733660046110a4565b61043e565b60405161015092919061111c565b61010661019436600461113d565b610460565b3480156101a4575f5ffd5b50610106610667565b3480156101b8575f5ffd5b506101066101c73660046111f3565b61067a565b3480156101d7575f5ffd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610150565b61020f61020a366004611268565b610696565b60405161015091906112e1565b348015610227575f5ffd5b506101e47f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da03281565b34801561025a575f5ffd5b506101066107fc565b34801561026e575f5ffd5b5061010661027d366004611337565b610874565b34801561028d575f5ffd5b50610146610907565b6102a96102a4366004611352565b6109ad565b6040516101509190611384565b610106610adc565b3480156102c9575f5ffd5b506101066102d8366004611337565b610b3c565b6102e5610b97565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b031690630396cb609034906024015f604051808303818588803b158015610364575f5ffd5b505af1158015610376573d5f5f3e3d5ffd5b505050505050565b610386610b97565b60405163040b850f60e31b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032169063205c2878906044015b5f604051808303815f87803b158015610364575f5ffd5b5f8060646103fc848261146a565b610406908661147d565b6104109190611494565b90505f61041d868861147d565b9050808210156104345761043182826114b3565b92505b5050949350505050565b60605f610449610bdc565b610454858585610c6e565b91509150935093915050565b345f036104805760405163cece0f1760e01b815260040160405180910390fd5b60405163b760faf960e01b81523060048201527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b03169063b760faf99034906024015f604051808303818588803b1580156104e0575f5ffd5b505af11580156104f2573d5f5f3e3d5ffd5b50506040517f765e827f0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da03216935063765e827f92506105609150859085903390600401611605565b5f604051808303815f87803b158015610577575f5ffd5b505af1158015610589573d5f5f3e3d5ffd5b5050604051632943e70960e11b81523060048201527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b0316925063205c2878915033908390635287ce129060240160a060405180830381865afa1580156105f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061061d919061171f565b5160405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03909216600483015260248201526044016103d7565b61066f610b97565b6106785f610dbe565b565b610682610bdc565b61068f8585858585610e25565b5050505050565b6106cc6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f15158152602001606081525090565b345f036106ec5760405163cece0f1760e01b815260040160405180910390fd5b60405163b760faf960e01b81523060048201527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032906001600160a01b0382169063b760faf99034906024015f604051808303818588803b15801561074e575f5ffd5b505af1158015610760573d5f5f3e3d5ffd5b50506040517f97b2dcb90000000000000000000000000000000000000000000000000000000081526001600160a01b03851693506397b2dcb992506107b0915089908990899089906004016117aa565b5f604051808303815f875af11580156107cb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107f29190810190611874565b9695505050505050565b610804610b97565b7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561085c575f5ffd5b505af115801561086e573d5f5f3e3d5ffd5b50505050565b61087c610b97565b6040517fc23a5cea0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032169063c23a5cea906024015f604051808303815f87803b1580156108f5575f5ffd5b505af115801561068f573d5f5f3e3d5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b0316906370a0823190602401602060405180830381865afa158015610984573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a89190611919565b905090565b6109b5610f14565b345f036109d55760405163cece0f1760e01b815260040160405180910390fd5b60405163b760faf960e01b81523060048201527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032906001600160a01b0382169063b760faf99034906024015f604051808303818588803b158015610a37575f5ffd5b505af1158015610a49573d5f5f3e3d5ffd5b50506040517fc3bce0090000000000000000000000000000000000000000000000000000000081526001600160a01b038516935063c3bce0099250610a9391508690600401611930565b5f604051808303815f875af1158015610aae573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ad591908101906119b0565b9392505050565b60405163b760faf960e01b81523060048201527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b03169063b760faf99034906024015f604051808303818588803b1580156108f5575f5ffd5b610b44610b97565b6001600160a01b038116610b8b576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610b9481610dbe565b50565b5f546001600160a01b03163314610678576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610b82565b336001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0321614610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610b82565b604051632943e70960e11b81523060048201526060905f9083906001600160a01b037f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0321690635287ce129060240160a060405180830381865afa158015610cd7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfb919061171f565b511015610d34576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610d4360e0880188611abf565b610d51916034908290611b02565b810190610d5e9190611b29565b9092509050610d706020880188611337565b610d7988610ef5565b604080516001600160a01b039093166020840152820152606081018390526080810182905260a00160408051601f19818403018152919052975f975095505050505050565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002856002811115610e3957610e39611b49565b1461068f575f808080610e4e87890189611b5d565b93509350935093505f610e63838589856103ee565b90508015610ee95760405163040b850f60e31b81526001600160a01b038681166004830152602482018390527f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032169063205c2878906044015f604051808303815f87803b158015610ed2575f5ffd5b505af1158015610ee4573d5f5f3e3d5ffd5b505050505b50505050505050505050565b5f6fffffffffffffffffffffffffffffffff60c0830135165b92915050565b6040518060a00160405280610f4d6040518060a001604052805f81526020015f81526020015f81526020015f8152602001606081525090565b8152602001610f6d60405180604001604052805f81526020015f81525090565b8152602001610f8d60405180604001604052805f81526020015f81525090565b8152602001610fad60405180604001604052805f81526020015f81525090565b8152602001610fba610fbf565b905290565b60405180604001604052805f6001600160a01b03168152602001610fba60405180604001604052805f81526020015f81525090565b63ffffffff81168114610b94575f5ffd5b5f60208284031215611015575f5ffd5b8135610ad581610ff4565b6001600160a01b0381168114610b94575f5ffd5b5f5f60408385031215611045575f5ffd5b823561105081611020565b946020939093013593505050565b5f5f5f5f60808587031215611071575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f610120828403121561109e575f5ffd5b50919050565b5f5f5f606084860312156110b6575f5ffd5b833567ffffffffffffffff8111156110cc575f5ffd5b6110d88682870161108d565b9660208601359650604090950135949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b604081525f61112e60408301856110ee565b90508260208301529392505050565b5f5f6020838503121561114e575f5ffd5b823567ffffffffffffffff811115611164575f5ffd5b8301601f81018513611174575f5ffd5b803567ffffffffffffffff81111561118a575f5ffd5b8560208260051b840101111561119e575f5ffd5b6020919091019590945092505050565b5f5f83601f8401126111be575f5ffd5b50813567ffffffffffffffff8111156111d5575f5ffd5b6020830191508360208285010111156111ec575f5ffd5b9250929050565b5f5f5f5f5f60808688031215611207575f5ffd5b853560038110611215575f5ffd5b9450602086013567ffffffffffffffff811115611230575f5ffd5b61123c888289016111ae565b9699909850959660408101359660609091013595509350505050565b803561126381611020565b919050565b5f5f5f5f6060858703121561127b575f5ffd5b843567ffffffffffffffff811115611291575f5ffd5b61129d8782880161108d565b94505060208501356112ae81611020565b9250604085013567ffffffffffffffff8111156112c9575f5ffd5b6112d5878288016111ae565b95989497509550505050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526080820151151560a08201525f60a083015160c08084015261132f60e08401826110ee565b949350505050565b5f60208284031215611347575f5ffd5b8135610ad581611020565b5f60208284031215611362575f5ffd5b813567ffffffffffffffff811115611378575f5ffd5b61132f8482850161108d565b602080825282516101408383015280516101608401529081015161018083015260408101516101a083015260608101516101c08301526080015160a06101e08301525f906113d66102008401826110ee565b905060208401516113f4604085018280518252602090810151910152565b506040840151805160808581019190915260209182015160a08601526060860151805160c087015282015160e086015285015180516001600160a01b031661010086015280820151805161012087015290910151610140850152509392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f0e57610f0e611456565b8082028115828204841417610f0e57610f0e611456565b5f826114ae57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610f0e57610f0e611456565b5f5f8335601e198436030181126114db575f5ffd5b830160208101925035905067ffffffffffffffff8111156114fa575f5ffd5b8036038213156111ec575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b61154a8261153d83611258565b6001600160a01b03169052565b602081810135908301525f61156260408301836114c6565b610120604086015261157961012086018284611508565b91505061158960608401846114c6565b858303606087015261159c838284611508565b6080868101359088015260a0808701359088015260c0808701359088015292506115cc91505060e08401846114c6565b85830360e08701526115df838284611508565b925050506115f16101008401846114c6565b8583036101008701526107f2838284611508565b604080825281018390525f6060600585901b83018101908301868361011e1936839003015b8882101561166e57868503605f190184528235818112611648575f5ffd5b611654868c8301611530565b95505060208301925060208401935060018201915061162a565b50505050809150506001600160a01b0383166020830152949350505050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156116c4576116c461168d565b60405290565b60405160c0810167ffffffffffffffff811182821017156116c4576116c461168d565b6040805190810167ffffffffffffffff811182821017156116c4576116c461168d565b80518015158114611263575f5ffd5b5f60a0828403128015611730575f5ffd5b506117396116a1565b8251815261174960208401611710565b602082015260408301516dffffffffffffffffffffffffffff8116811461176e575f5ffd5b6040820152606083015161178181610ff4565b6060820152608083015165ffffffffffff8116811461179e575f5ffd5b60808201529392505050565b606081525f6117bc6060830187611530565b6001600160a01b038616602084015282810360408401526117de818587611508565b979650505050505050565b5f82601f8301126117f8575f5ffd5b815167ffffffffffffffff8111156118125761181261168d565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156118415761184161168d565b604052818152838201602001851015611858575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215611884575f5ffd5b815167ffffffffffffffff81111561189a575f5ffd5b820160c081850312156118ab575f5ffd5b6118b36116ca565b815181526020808301519082015260408083015190820152606080830151908201526118e160808301611710565b608082015260a082015167ffffffffffffffff8111156118ff575f5ffd5b61190b868285016117e9565b60a083015250949350505050565b5f60208284031215611929575f5ffd5b5051919050565b602081525f610ad56020830184611530565b5f60408284031215611952575f5ffd5b61195a6116ed565b825181526020928301519281019290925250919050565b5f60608284031215611981575f5ffd5b6119896116ed565b9050815161199681611020565b81526119a58360208401611942565b602082015292915050565b5f602082840312156119c0575f5ffd5b815167ffffffffffffffff8111156119d6575f5ffd5b820161014081850312156119e8575f5ffd5b6119f06116a1565b815167ffffffffffffffff811115611a06575f5ffd5b820160a08187031215611a17575f5ffd5b611a1f6116a1565b81518152602080830151908201526040808301519082015260608083015190820152608082015167ffffffffffffffff811115611a5a575f5ffd5b611a66888285016117e9565b608083015250825250611a7c8560208401611942565b6020820152611a8e8560608401611942565b6040820152611aa08560a08401611942565b6060820152611ab28560e08401611971565b6080820152949350505050565b5f5f8335601e19843603018112611ad4575f5ffd5b83018035915067ffffffffffffffff821115611aee575f5ffd5b6020019150368190038213156111ec575f5ffd5b5f5f85851115611b10575f5ffd5b83861115611b1c575f5ffd5b5050820193919092039150565b5f5f60408385031215611b3a575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f5f60808587031215611b70575f5ffd5b8435611b7b81611020565b96602086013596506040860135956060013594509250505056fea164736f6c634300081b000a\"\n  },\n  \"0x00000000D3254452a909E4eeD47455Af7E27C289\": {\n    name: \"NEXUS_BOOTSTRAP_ADDRESS\",\n    address: \"0x00000000D3254452a909E4eeD47455Af7E27C289\",\n    bytecode:\n      \"0x60806040526004361015610015575b3661173357005b5f3560e01c80630a664dba1461012f57806310b7fca91461012a578063112d3a7d14610125578063310259841461012057806341bede031461011b578063481ddd2314610116578063544d58601461011157806354ed06d51461010c5780635ab1bd53146101075780635faac46b1461010257806377182ae6146100fd57806384b0196e146100f857806386437876146100f35780638cc8ff1d146100ee5780639517e29f146100e45780639afb7c8d146100e9578063a71763a8146100e45763ea5f61d00361000e57611099565b611003565b61100c565b610f0c565b610e4d565b610d65565b610c42565b610aa5565b610a10565b610890565b6107b4565b6105bc565b6104da565b6103f2565b6103d6565b6101bc565b610142565b5f91031261013e57565b5f80fd5b3461013e575f36600319011261013e5760206001600160a01b035f5160206131775f395f51905f5254166001600160a01b0360405191168152f35b6001600160a01b0381160361013e57565b9181601f8401121561013e5782359167ffffffffffffffff831161013e576020838186019501011161013e57565b604036600319011261013e576004356101d48161017d565b60243567ffffffffffffffff811161013e576101f490369060040161018e565b610247610202939293611195565b60405161020e81610684565b5f81526020810191825260ff6001600160a01b0360408301925f8452610232612a5a565b61023a612adc565b5116925191511691611f39565b6001600160a01b0361026d6001600160a01b035f5160206131775f395f51905f52541690565b16806102b75750906102916102b2925f5160206131375f395f51905f5294836120e1565b60408051600181526001600160a01b03909216602083015290918291820190565b0390a1005b906040519363d68f602560e01b85525f85806102d836343360048501611ed3565b038183875af1948515610367575f9561036c575b50906102f891846120e1565b803b1561013e57604051630b9dfbed60e11b8152925f9184918290849082906103249060048301611f28565b03925af1908115610367575f5160206131375f395f51905f52926102b29261034d575b50610291565b8061035b5f610361936106a0565b80610134565b5f610347565b611216565b6102f89291955061038e903d805f833e61038681836106a0565b810190611e70565b9490916102ec565b606060031982011261013e57600435916024356103b28161017d565b916044359067ffffffffffffffff821161013e576103d29160040161018e565b9091565b3461013e576103e436610396565b5050505060206040515f8152f35b5f602036600319011261013e5760043567ffffffffffffffff811161013e5761041f90369060040161018e565b6001600160a01b037f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d951691823b1561013e5761047b925f92836040518096819582946306d61fe760e41b845260206004850181815201916111e2565b03925af180156103675761048d575080f35b61049991505f906106a0565b005b9181601f8401121561013e5782359167ffffffffffffffff831161013e576020808501948460051b01011161013e57565b9081604091031261013e5790565b60c036600319011261013e5760043567ffffffffffffffff811161013e5761050690369060040161018e565b60243567ffffffffffffffff811161013e5761052690369060040161049b565b60449391933567ffffffffffffffff811161013e5761054990369060040161049b565b60649291923567ffffffffffffffff811161013e5761056c9036906004016104cc565b9060843567ffffffffffffffff811161013e5761058d90369060040161049b565b94909360a4359867ffffffffffffffff8a1161013e576105b46104999a369060040161049b565b999098611221565b3461013e57602036600319011261013e576004356001600160e01b03198116810361013e576001600160e01b0319165f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f026020526040902060405190604082019082821067ffffffffffffffff831117610670576040918252546001600160a01b03811680845260589190911b6001600160f81b0319166020938401819052825190815292830152819081015b0390f35b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761067057604052565b90601f8019910116810190811067ffffffffffffffff82111761067057604052565b604051906106d16040836106a0565b565b67ffffffffffffffff81116106705760051b60200190565b359060ff8216820361013e57565b91909160608184031261013e576040519061071382610684565b819381356107208161017d565b8352602082013567ffffffffffffffff811161013e5782019080601f8301121561013e57813561074f816106d3565b9261075d60405194856106a0565b81845260208085019260051b82010192831161013e57602001905b82821061079a5750505060408092610795926020860152016106eb565b910152565b6020809183356107a98161017d565b815201910190610778565b60c036600319011261013e5760043567ffffffffffffffff811161013e576107e090369060040161049b565b9060243567ffffffffffffffff811161013e5761080190369060040161049b565b9060443567ffffffffffffffff811161013e576108229036906004016104cc565b60643567ffffffffffffffff811161013e5761084290369060040161049b565b9160843567ffffffffffffffff811161013e5761086390369060040161049b565b95909460a4359867ffffffffffffffff8a1161013e5761088a6104999a36906004016106f9565b98611c6f565b604036600319011261013e5760043567ffffffffffffffff811161013e576108bc90369060040161049b565b9060243567ffffffffffffffff811161013e576108dd9036906004016104cc565b9161093a6108e9611195565b6040516108f581610684565b5f81526020810191825261093461092a60408301925f8452610915612a5a565b61091d612adc565b516001600160a01b031690565b9251915160ff1690565b91611f39565b5f5b8181106109b657836001600160a01b0361095582611c10565b1661095c57005b6102b26109958261099061097d5f5160206131375f395f51905f5295611c10565b61098a6020840184611c1a565b916122f9565b611c10565b60408051600481526001600160a01b03909216602083015290918291820190565b806109e86109ca6109906001948688611be9565b6109e26109d8848789611be9565b6020810190611c1a565b91611ffc565b5f5160206131375f395f51905f52610a07610291610990848789611be9565b0390a10161093c565b3461013e575f36600319011261013e5760206001600160a01b035f5160206131975f395f51905f525416604051908152f35b90602080835192838152019201905f5b818110610a5f5750505090565b82516001600160a01b0316845260209384019390920191600101610a52565b906001600160a01b03610a9e602092959495604085526040850190610a42565b9416910152565b3461013e57604036600319011261013e57600435610ac28161017d565b6024359060016001600160a01b038216141580610c2c575b610c11578115610c025790610aee816111b0565b610b26610b195f946001600160a01b03165f525f5160206131575f395f51905f5260205260405f2090565b546001600160a01b031690565b6001600160a01b0381168015159081610bf6575b5080610bed575b15610b9b57610b8f610b1982610b6c610b9594610b5e89886129e4565b906001600160a01b03169052565b6001600160a01b03165f525f5160206131575f395f51905f5260205260405f2090565b93612a0c565b92610b26565b908360016001600160a01b038416141580610be4575b610bc7575b815261066c60405192839283610a7e565b9150610bde61091d610bd884612a1f565b836129e4565b91610bb6565b50801515610bb1565b50828410610b41565b6001915014155f610b3a565b63f725081760e01b5f5260045ffd5b637c84ecfb60e01b5f526001600160a01b031660045260245ffd5b50610c3d610c39826130b6565b1590565b610ada565b60e036600319011261013e5760043567ffffffffffffffff811161013e57610c6e90369060040161018e565b9060243567ffffffffffffffff811161013e57610c8f90369060040161049b565b9060443567ffffffffffffffff811161013e57610cb090369060040161049b565b9060643567ffffffffffffffff811161013e57610cd19036906004016104cc565b60843567ffffffffffffffff811161013e57610cf190369060040161049b565b93909260a43567ffffffffffffffff811161013e57610d1490369060040161049b565b97909660c4359a67ffffffffffffffff8c1161013e57610d3b6104999c36906004016106f9565b9a611956565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b3461013e575f36600319011261013e57610def6040610dfc815191610d8a81846106a0565b600e83527f4e65787573426f6f74737472617000000000000000000000000000000000000060208401528051610dc082826106a0565b6005815264312e322e3160d81b60208201528151948594600f60f81b865260e0602087015260e0860190610d41565b9184830390850152610d41565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610e34575050500390f35b8251845285945060209384019390920191600101610e26565b60a036600319011261013e5760043567ffffffffffffffff811161013e57610e7990369060040161049b565b60243567ffffffffffffffff811161013e57610e9990369060040161049b565b60449391933567ffffffffffffffff811161013e57610ebc9036906004016104cc565b9060643567ffffffffffffffff811161013e57610edd90369060040161049b565b9290916084359667ffffffffffffffff881161013e57610f0461049998369060040161049b565b979096611550565b606036600319011261013e5760043567ffffffffffffffff811161013e57610f3890369060040161049b565b9060243567ffffffffffffffff811161013e57610f599036906004016104cc565b9160443567ffffffffffffffff811161013e57610f7d610fac9136906004016106f9565b610f85612a5a565b610f8d612adc565b80516001600160a01b0316906109346040602083015192015160ff1690565b5f5b818110610fc757836001600160a01b0361095582611c10565b80610fdb6109ca6109906001948688611be9565b5f5160206131375f395f51905f52610ffa610291610990848789611be9565b0390a101610fae565b61049936610396565b606036600319011261013e576004356110248161017d565b60243567ffffffffffffffff811161013e5761104490369060040161018e565b60449291923567ffffffffffffffff811161013e5761106a6102479136906004016106f9565b611072612a5a565b61107a612adc565b6001600160a01b038151169060ff604060208301519201511691611f39565b3461013e57604036600319011261013e576004356110b68161017d565b6024359060016001600160a01b038216141580611183575b610c11578115610c0257906110e2816111b0565b61110d610b195f946001600160a01b03165f525f5160206131b75f395f51905f5260205260405f2090565b6001600160a01b0381168015159081611177575b508061116e575b15610b9b57610b8f610b198261114561116894610b5e89886129e4565b6001600160a01b03165f525f5160206131b75f395f51905f5260205260405f2090565b9261110d565b50828410611128565b6001915014155f611121565b50611190610c39826130f6565b6110ce565b604051906111a46020836106a0565b5f808352366020840137565b906111ba826106d3565b6111c760405191826106a0565b82815280926111d8601f19916106d3565b0190602036910137565b908060209392818452848401375f828201840152601f01601f1916010190565b9160206112139381815201916111e2565b90565b6040513d5f823e3d90fd5b61122c6108e9611195565b6001600160a01b037f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d951691823b1561013e57611281925f92836040518096819582946306d61fe760e41b845260048401611202565b03925af180156103675761153c575b505f5b8281106114d6575050505f5b828110611449575050506112c16112b582611c10565b6001600160a01b031690565b61141f575b505f5b828110611392575050505f5b8281106112e157505050565b806112fd6112b560206112f76001958888611c4d565b01611c10565b1561138d57611342611310828686611c4d565b3561132160206112f7858989611c4d565b9061133a611330858989611c4d565b6040810190611c1a565b929091612895565b5f5160206131375f395f51905f5261135b828686611c4d565b3561136c60206112f7858989611c4d565b604080519283526001600160a01b0391909116602083015290a15b016112d5565b611387565b806113a66112b56109906001948787611be9565b1561141a576113d06113bc610990838787611be9565b6113ca6109d8848888611be9565b91612485565b5f5160206131375f395f51905f526114106113ef610990848888611be9565b60408051600381526001600160a01b03909216602083015290918291820190565b0390a15b016112c9565b611414565b6114406109958261099061097d5f5160206131375f395f51905f5295611c10565b0390a15f6112c6565b8061145d6112b56109906001948787611be9565b156114d157611487611473610990838787611be9565b6114816109d8848888611be9565b916121f0565b5f5160206131375f395f51905f526114c76114a6610990848888611be9565b60408051600281526001600160a01b03909216602083015290918291820190565b0390a15b0161129f565b6114cb565b806114ea6112b56109906001948787611be9565b156115375761150e611500610990838787611be9565b6109e26109d8848888611be9565b5f5160206131375f395f51905f5261152d610291610990848888611be9565b0390a15b01611293565b611531565b8061035b5f61154a936106a0565b5f611290565b90959493956115606108e9611195565b5f5b8181106116f7575050505f5b82811061169f575050505f5b828110611647575050506115906112b582611c10565b61161d575b505f5b8281106115a457505050565b806115ba6112b560206112f76001958888611c4d565b15611618576115cd611310828686611c4d565b5f5160206131375f395f51905f526115e6828686611c4d565b356115f760206112f7858989611c4d565b604080519283526001600160a01b0391909116602083015290a15b01611598565b611612565b61163e6109958261099061097d5f5160206131375f395f51905f5295611c10565b0390a15f611595565b8061165b6112b56109906001948787611be9565b1561169a576116716113bc610990838787611be9565b5f5160206131375f395f51905f526116906113ef610990848888611be9565b0390a15b0161157a565b611694565b806116b36112b56109906001948787611be9565b156116f2576116c9611473610990838787611be9565b5f5160206131375f395f51905f526116e86114a6610990848888611be9565b0390a15b0161156e565b6116ec565b8061170b6109ca6109906001948688611be9565b5f5160206131375f395f51905f5261172a610291610990848789611be9565b0390a101611562565b5f80356001600160e01b031981168083527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260409092205461178c6001600160a01b0382169160581b6001600160f81b03191690565b906001600160a01b0381166117e257505060e01c9063bc197c81821463f23a6e6183141763150b7a028314176117d8576308c63e2760e01b5f526001600160e01b03191660045260245ffd5b506020526020603cf35b5f5160206131775f395f51905f52546001600160a01b03168015159260609290846118ff575b6001600160f81b03198116607f60f91b036118ad57505f8091611829612a2d565b90602082519201905afa9261183c611ef9565b935b156118a557611850575b825160208401f35b803b1561013e57604051630b9dfbed60e11b8152915f91839182908490829061187c9060048301611f28565b03925af1801561036757611891575b80611848565b8061035b5f61189f936106a0565b8161188b565b835160208501fd5b6001600160f81b031981166118e357505f80916118c8612a2d565b906020825192019034905af1926118dd611ef9565b9361183e565b632e5bf3f960e21b5f526001600160f81b03191660045260245ffd5b60405163d68f602560e01b81529093505f818061192136343360048501611ed3565b038183875af1908115610367575f9161193c575b5092611808565b61195091503d805f833e61038681836106a0565b85611935565b909192939495969798999a61196d90610f85612a5a565b6001600160a01b037f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d951691823b1561013e576119c2925f92836040518096819582946306d61fe760e41b845260048401611202565b03925af1801561036757611bc1575b505f5b828110611b69575050505f5b828110611b11575050506119f66112b582611c10565b611ae7575b505f5b828110611a8f575050505f5b828110611a1657505050565b80611a2c6112b560206112f76001958888611c4d565b15611a8a57611a3f611310828686611c4d565b5f5160206131375f395f51905f52611a58828686611c4d565b35611a6960206112f7858989611c4d565b604080519283526001600160a01b0391909116602083015290a15b01611a0a565b611a84565b80611aa36112b56109906001948787611be9565b15611ae257611ab96113bc610990838787611be9565b5f5160206131375f395f51905f52611ad86113ef610990848888611be9565b0390a15b016119fe565b611adc565b611b086109958261099061097d5f5160206131375f395f51905f5295611c10565b0390a15f6119fb565b80611b256112b56109906001948787611be9565b15611b6457611b3b611473610990838787611be9565b5f5160206131375f395f51905f52611b5a6114a6610990848888611be9565b0390a15b016119e0565b611b5e565b80611b7d6112b56109906001948787611be9565b15611bbc57611b93611500610990838787611be9565b5f5160206131375f395f51905f52611bb2610291610990848888611be9565b0390a15b016119d4565b611bb6565b8061035b5f611bcf936106a0565b5f6119d1565b634e487b7160e01b5f52603260045260245ffd5b9190811015611c0b5760051b81013590603e198136030182121561013e570190565b611bd5565b356112138161017d565b903590601e198136030182121561013e570180359067ffffffffffffffff821161013e5760200191813603831361013e57565b9190811015611c0b5760051b81013590605e198136030182121561013e570190565b919293969798611c8190610f85612a5a565b5f5b818110611e18575050505f5b828110611dc0575050505f5b828110611d6857505050611cb16112b582611c10565b611d3e575b505f5b828110611cc557505050565b80611cdb6112b560206112f76001958888611c4d565b15611d3957611cee611310828686611c4d565b5f5160206131375f395f51905f52611d07828686611c4d565b35611d1860206112f7858989611c4d565b604080519283526001600160a01b0391909116602083015290a15b01611cb9565b611d33565b611d5f6109958261099061097d5f5160206131375f395f51905f5295611c10565b0390a15f611cb6565b80611d7c6112b56109906001948787611be9565b15611dbb57611d926113bc610990838787611be9565b5f5160206131375f395f51905f52611db16113ef610990848888611be9565b0390a15b01611c9b565b611db5565b80611dd46112b56109906001948787611be9565b15611e1357611dea611473610990838787611be9565b5f5160206131375f395f51905f52611e096114a6610990848888611be9565b0390a15b01611c8f565b611e0d565b80611e2c6109ca6109906001948688611be9565b5f5160206131375f395f51905f52611e4b610291610990848789611be9565b0390a101611c83565b67ffffffffffffffff811161067057601f01601f191660200190565b60208183031261013e5780519067ffffffffffffffff821161013e570181601f8201121561013e57805190611ea482611e54565b92611eb260405194856106a0565b8284526020838301011161013e57815f9260208093018386015e8301015290565b61121393926001600160a01b03606093168252602082015281604082015201905f6111e2565b3d15611f23573d90611f0a82611e54565b91611f1860405193846106a0565b82523d5f602084013e565b606090565b906020611213928181520190610d41565b6001600160a01b031691826001600160a01b03195f5160206131975f395f51905f525416175f5160206131975f395f51905f525582611f9b575b50507ff98c8404c5b1bfef2e6ba9233c6e88845aedfd36eea8b192725d8c199571cf325f80a2565b823b1561013e5760405f91611fd18251948593849363f05c04e160e01b855260ff60048601911681528160208201520190610a42565b038183865af1801561036757611fe8575b80611f73565b8061035b5f611ff6936106a0565b5f611fe2565b91906001600160a01b036120246001600160a01b035f5160206131775f395f51905f52541690565b168061203457506106d1926120e1565b60405163d68f602560e01b81529290915f848061205636343360048501611ed3565b038183875af1938415610367575f946120c1575b506120769293946120e1565b803b1561013e57604051630b9dfbed60e11b8152915f9183918290849082906120a29060048301611f28565b03925af18015610367576120b35750565b8061035b5f6106d1936106a0565b6120769394506120da903d805f833e61038681836106a0565b939261206a565b916120eb83612b4f565b60405163ecd0596160e01b8152600160048201526001600160a01b0384169390602081602481885afa908115610367575f916121a9575b501561219a576001600160a01b037f00000000000000000000000000000000d12897ddadc2044614a9677b191a2d9516841461218b5761216190612d64565b823b1561013e576120a2925f92836040518096819582946306d61fe760e41b845260048401611202565b63abc3af7960e01b5f5260045ffd5b631c4f83bb60e31b5f5260045ffd5b6121cb915060203d6020116121d1575b6121c381836106a0565b8101906121d8565b5f612122565b503d6121b9565b9081602091031261013e5751801515810361013e5790565b91906001600160a01b036122186001600160a01b035f5160206131775f395f51905f52541690565b168061222857506106d19261228a565b60405163d68f602560e01b81529290915f848061224a36343360048501611ed3565b038183875af1938415610367575f9461226a575b5061207692939461228a565b612076939450612283903d805f833e61038681836106a0565b939261225e565b9161229483612bca565b60405163ecd0596160e01b8152600260048201526001600160a01b0384169390602081602481885afa908115610367575f916122da575b501561219a5761216190612e9c565b6122f3915060203d6020116121d1576121c381836106a0565b5f6122cb565b91906001600160a01b036123216001600160a01b035f5160206131775f395f51905f52541690565b168061233157506106d192612393565b60405163d68f602560e01b81529290915f848061235336343360048501611ed3565b038183875af1938415610367575f94612373575b50612076929394612393565b61207693945061238c903d805f833e61038681836106a0565b9392612367565b9161239d83612c30565b60405163ecd0596160e01b81526004808201526001600160a01b0384169390602081602481885afa908115610367575f91612442575b501561219a576121619061240e6123fe6001600160a01b035f5160206131775f395f51905f52541690565b6001600160a01b03811615612461565b6001600160a01b03166001600160a01b03195f5160206131775f395f51905f525416175f5160206131775f395f51905f5255565b61245b915060203d6020116121d1576121c381836106a0565b5f6123d3565b156124695750565b6001600160a01b039063741cbe0360e01b5f521660045260245ffd5b91906001600160a01b036124ad6001600160a01b035f5160206131775f395f51905f52541690565b16806124bd57506106d19261251f565b60405163d68f602560e01b81529290915f84806124df36343360048501611ed3565b038183875af1938415610367575f946124ff575b5061207692939461251f565b612076939450612518903d805f833e61038681836106a0565b93926124f3565b909161252a82612c98565b60405163ecd0596160e01b8152600360048201526001600160a01b0383169290602081602481875afa908115610367575f91612781575b501561219a576126c58461268f6125e06125d986806125b76125aa61259c836125966125906127249e8c6127a0565b906127cb565b99612801565b356001600160f81b03191690565b6001600160f81b03191690565b9a6001600160f81b03198c1615801561276a575b6125d490612810565b6127ae565b3691612826565b9661260f6001600160e01b031984166306d61fe760e41b8114908115612759575b8115612750575b501561285c565b6126648361265f610c39826001600160e01b0319165f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260409020546001600160a01b0316151590565b612872565b61267e61266f6106c2565b6001600160a01b039096168652565b6001600160f81b0319166020850152565b63ffffffff60e01b165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260405f2090565b8151815460209093015174ff000000000000000000000000000000000000000060589190911c167fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0390911617919091179055565b803b1561013e576040516306d61fe760e41b8152915f9183918290849082906120a29060048301611f28565b9050155f612608565b638a91b0e360e01b81149150612601565b50607f60f91b6001600160f81b03198d16146125cb565b61279a915060203d6020116121d1576121c381836106a0565b5f612561565b9060041161013e5790600490565b909291928360051161013e57831161013e57600501916004190190565b356001600160e01b03198116929190600482106127e6575050565b6001600160e01b031960049290920360031b82901b16169150565b9060041015611c0b5760040190565b1561281757565b63867a1dcf60e01b5f5260045ffd5b92919261283282611e54565b9161284060405193846106a0565b82948184528183011161013e578281602093845f960137010152565b1561286357565b63c001660b60e01b5f5260045ffd5b1561287a5750565b63a56a04dd60e01b5f5263ffffffff60e01b1660045260245ffd5b9291906001600160a01b036128be6001600160a01b035f5160206131775f395f51905f52541690565b16806128ce57506106d193612932565b60405163d68f602560e01b815293909290915f85806128f236343360048501611ed3565b038183885af1948515610367575f95612912575b50612076939495612932565b61207694955061292b903d805f833e61038681836106a0565b9493612906565b92909261293f8185612cfe565b60405163ecd0596160e01b8152600481018290526001600160a01b0385169490602081602481895afa908115610367575f916129a1575b501561219a578161299c61298c61216194612f8c565b6001600160a01b038116156129c0565b612fef565b6129ba915060203d6020116121d1576121c381836106a0565b5f612976565b156129c85750565b6001600160a01b039063c689cd9760e01b5f521660045260245ffd5b8051821015611c0b5760209160051b010190565b634e487b7160e01b5f52601160045260245ffd5b5f198114612a1a5760010190565b6129f8565b5f19810191908211612a1a57565b60405190602036830101604052816014360181525f602036920137604051601481016040523360601b9052565b60015f525f5160206131b75f395f51905f526020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13546001600160a01b0316612acd5760015f525f5160206131b75f395f51905f526020526106d160405f2060016001600160a01b0319825416179055565b6329e42f3360e11b5f5260045ffd5b60015f525f5160206131575f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7546001600160a01b0316612acd5760015f525f5160206131575f395f51905f526020526106d160405f2060016001600160a01b0319825416179055565b6001600160a01b035f5160206131975f395f51905f5254169081612b71575050565b813b1561013e576040516396fb721760e01b81526001600160a01b03909116600482015260016024820152905f90829060449082905afa801561036757612bb55750565b80612bc15f80936106a0565b80031261013e57565b6001600160a01b035f5160206131975f395f51905f5254169081612bec575050565b813b1561013e576040516396fb721760e01b81526001600160a01b03909116600482015260026024820152905f90829060449082905afa801561036757612bb55750565b6001600160a01b035f5160206131975f395f51905f5254169081612c52575050565b813b1561013e576040516396fb721760e01b81526001600160a01b039091166004808301919091526024820152905f90829060449082905afa801561036757612bb55750565b6001600160a01b035f5160206131975f395f51905f5254169081612cba575050565b813b1561013e576040516396fb721760e01b81526001600160a01b03909116600482015260036024820152905f90829060449082905afa801561036757612bb55750565b6001600160a01b035f5160206131975f395f51905f5254169182612d2157505050565b823b1561013e576040516396fb721760e01b81526001600160a01b039290921660048301526024820152905f90829060449082905afa801561036757612bb55750565b6001600160a01b03811680158015612e92575b612e80575f9081525f5160206131575f395f51905f5260205260409020546001600160a01b0316612e655760015f525f5160206131575f395f51905f526020526106d190612e2a612de77ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7610b19565b612e0f835f5160206131575f395f51905f52906001600160a01b03165f5260205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b60015f525f5160206131575f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7612e0f565b631034f46960e21b5f526001600160a01b031660045260245ffd5b637c84ecfb60e01b5f5260045260245ffd5b5060018114612d77565b6001600160a01b03811680158015612f82575b612e80575f9081525f5160206131b75f395f51905f5260205260409020546001600160a01b0316612e655760015f525f5160206131b75f395f51905f526020526106d190612f47612f1f7fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13610b19565b612e0f835f5160206131b75f395f51905f52906001600160a01b03165f5260205260405f2090565b60015f525f5160206131b75f395f51905f526020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13612e0f565b5060018114612eaf565b600803612fc1576001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f06541690565b6001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f05541690565b6008810361305257506001600160a01b03166001600160a01b03197f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f065416177f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0655565b60091461305c5750565b6001600160a01b03166001600160a01b03197f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f055416177f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0555565b6001600160a01b0316806001141590816130ce575090565b90505f525f5160206131575f395f51905f526020526001600160a01b0360405f205416151590565b6001600160a01b03168060011415908161310e575090565b90505f525f5160206131b75f395f51905f526020526001600160a01b0360405f20541615159056fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef1230bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f000bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f030bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f080bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f01a164736f6c634300081b000a\"\n  },\n  \"0x14e4829E655F0b3a1793838dDd47273D5341d416\": {\n    name: \"COUNTER_ADDRESS\",\n    address: \"0x14e4829E655F0b3a1793838dDd47273D5341d416\",\n    bytecode:\n      \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631246743414610051578063273ea3e31461005b578063871cc9d414610063578063f2c9ecd81461006b575b600080fd5b610059610080565b005b6100596100e6565b6100596100fc565b60005460405190815260200160405180910390f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f756e7465723a20526576657274206f7065726174696f6e00000000000000604482015260640160405180910390fd5b6000805490806100f58361013a565b9190505550565b6000805490806100f583610153565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006001820161014c5761014c61010b565b5060010190565b6000816101625761016261010b565b50600019019056fea264697066735822122017dd0683162dee18eb85e788cbf612cff170bbca6c3d8a9a6ae41dc2eede1c5164736f6c634300081b0033\"\n  },\n  \"0x51fdb803fD49f0f5bd03de0400a8F17dA2Aa6999\": {\n    name: \"TOKEN_WITH_PERMIT\",\n    address: \"0x51fdb803fD49f0f5bd03de0400a8F17dA2Aa6999\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610221578063a9059cbb14610229578063d505accf1461023c578063dd62ed3e1461024f575f5ffd5b806370a08231146101a45780637ecebe00146101cc57806384b0196e146101df578063924dc57b146101fa575f5ffd5b8063292e09e3116100ce578063292e09e314610165578063313ce5671461017a5780633644e5151461018957806340c10f1914610191575f5ffd5b806306fdde03146100ff578063095ea7b31461011d57806318160ddd1461014057806323b872dd14610152575b5f5ffd5b610107610287565b60405161011491906110b9565b60405180910390f35b61013061012b3660046110ed565b610317565b6040519015158152602001610114565b6002545b604051908152602001610114565b610130610160366004611115565b610330565b61017861017336600461114f565b610353565b005b60405160128152602001610114565b6101446105b7565b61017861019f3660046110ed565b6105c5565b6101446101b23660046111f0565b6001600160a01b03165f9081526020819052604090205490565b6101446101da3660046111f0565b6105d3565b6101e76105f0565b6040516101149796959493929190611209565b6101447f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61010761064e565b6101306102373660046110ed565b61065d565b61017861024a3660046112bb565b61066a565b61014461025d366004611328565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b60606003805461029690611359565b80601f01602080910402602001604051908101604052809291908181526020018280546102c290611359565b801561030d5780601f106102e45761010080835404028352916020019161030d565b820191905f5260205f20905b8154815290600101906020018083116102f057829003601f168201915b5050505050905090565b5f336103248185856107a0565b60019150505b92915050565b5f3361033d8582856107b2565b610348858585610846565b506001949350505050565b8242111561037c5760405163313c898160e11b8152600481018490526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98787876103c78b6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810185905260e0016040516020818303038152906040528051906020012090505f610421826108bc565b90506001600160a01b0388163b1561051957604051630b135d3f60e11b81525f906001600160a01b038a1690631626ba7e9061046590859089908990600401611391565b602060405180830381865afa158015610480573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a491906113c6565b90507fffffffff000000000000000000000000000000000000000000000000000000008116630b135d3f60e11b14610513576040517f4a912f810000000000000000000000000000000000000000000000000000000081526001600160a01b038a166004820152602401610373565b506105a2565b5f6105598286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061090392505050565b9050886001600160a01b0316816001600160a01b0316146105a0576040516325c0072360e11b81526001600160a01b0380831660048301528a166024820152604401610373565b505b6105ad8888886107a0565b5050505050505050565b5f6105c061092b565b905090565b6105cf8282610a54565b5050565b6001600160a01b0381165f9081526007602052604081205461032a565b5f6060805f5f5f6060610601610a88565b610609610ab5565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60606004805461029690611359565b5f33610324818585610846565b8342111561068e5760405163313c898160e11b815260048101859052602401610373565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106d98c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f610733826108bc565b90505f61074282878787610ae2565b9050896001600160a01b0316816001600160a01b031614610789576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610373565b6107948a8a8a6107a0565b50505050505050505050565b6107ad8383836001610b0e565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146108405781811015610832576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610373565b61084084848484035f610b0e565b50505050565b6001600160a01b038316610888576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610373565b6001600160a01b0382166108b15760405163ec442f0560e01b81525f6004820152602401610373565b6107ad838383610c12565b5f61032a6108c861092b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f5f6109118686610d51565b9250925092506109218282610d9a565b5090949350505050565b5f306001600160a01b037f00000000000000000000000051fdb803fd49f0f5bd03de0400a8f17da2aa69991614801561098357507f0000000000000000000000000000000000000000000000000000000000014a3446145b156109ad57507fa45225602ab830e2ab41f04d11016be0c2f2b959449e6cce8471e3f54334e3df90565b6105c0604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527fd61e543de204e75ad66233f57bb369228582d7c7c386ca9608d24464aa88840c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b038216610a7d5760405163ec442f0560e01b81525f6004820152602401610373565b6105cf5f8383610c12565b60606105c07f546f6b656e576974685065726d6974000000000000000000000000000000000f6005610e9d565b60606105c07f31000000000000000000000000000000000000000000000000000000000000016006610e9d565b5f5f5f5f610af288888888610f46565b925092509250610b028282610d9a565b50909695505050505050565b6001600160a01b038416610b50576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610373565b6001600160a01b038316610b92576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610373565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561084057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c0491815260200190565b60405180910390a350505050565b6001600160a01b038316610c3c578060025f828254610c319190611405565b90915550610cc59050565b6001600160a01b0383165f9081526020819052604090205481811015610ca7576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101839052606401610373565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610ce157600280548290039055610cff565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d4491815260200190565b60405180910390a3505050565b5f5f5f8351604103610d88576020840151604085015160608601515f1a610d7a88828585610f46565b955095509550505050610d93565b505081515f91506002905b9250925092565b5f826003811115610dad57610dad611424565b03610db6575050565b6001826003811115610dca57610dca611424565b03610e01576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115610e1557610e15611424565b03610e4f576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610373565b6003826003811115610e6357610e63611424565b036105cf576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610373565b606060ff8314610eb757610eb08361100e565b905061032a565b818054610ec390611359565b80601f0160208091040260200160405190810160405280929190818152602001828054610eef90611359565b8015610f3a5780601f10610f1157610100808354040283529160200191610f3a565b820191905f5260205f20905b815481529060010190602001808311610f1d57829003601f168201915b5050505050905061032a565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610f7f57505f91506003905082611004565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610fd0573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610ffb57505f925060019150829050611004565b92505f91508190505b9450945094915050565b60605f61101a8361104b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561032a576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6110cb602083018461108b565b9392505050565b80356001600160a01b03811681146110e8575f5ffd5b919050565b5f5f604083850312156110fe575f5ffd5b611107836110d2565b946020939093013593505050565b5f5f5f60608486031215611127575f5ffd5b611130846110d2565b925061113e602085016110d2565b929592945050506040919091013590565b5f5f5f5f5f5f60a08789031215611164575f5ffd5b61116d876110d2565b955061117b602088016110d2565b94506040870135935060608701359250608087013567ffffffffffffffff8111156111a4575f5ffd5b8701601f810189136111b4575f5ffd5b803567ffffffffffffffff8111156111ca575f5ffd5b8960208284010111156111db575f5ffd5b60208201935080925050509295509295509295565b5f60208284031215611200575f5ffd5b6110cb826110d2565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61124360e083018961108b565b8281036040840152611255818961108b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156112aa57835183526020938401939092019160010161128c565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a0312156112d1575f5ffd5b6112da886110d2565b96506112e8602089016110d2565b95506040880135945060608801359350608088013560ff8116811461130b575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215611339575f5ffd5b611342836110d2565b9150611350602084016110d2565b90509250929050565b600181811c9082168061136d57607f821691505b60208210810361138b57634e487b7160e01b5f52602260045260245ffd5b50919050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b5f602082840312156113d6575f5ffd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146110cb575f5ffd5b8082018082111561032a57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220069344e5d232793a6e909968572d86aef97cbc0b4988d44e7098311c0e0bb70364736f6c634300081b0033\"\n  },\n  \"0x0d0C730F50a6da2725d4CD4eb91Bc678Bd377F7D\": {\n    name: \"MOCK_SIGNATURE_VALIDATOR\",\n    address: \"0x0d0C730F50a6da2725d4CD4eb91Bc678Bd377F7D\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063823ac3731461002d575b5f5ffd5b61004061003b3660046101be565b610054565b604051901515815260200160405180910390f35b5f816001600160a01b031661006a8686866100e3565b6001600160a01b031603610080575060016100db565b816001600160a01b03166100c26100bb876020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b86866100e3565b6001600160a01b0316036100d8575060016100db565b505f5b949350505050565b5f6100db83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525088939250506101259050565b604051600190835f526020830151604052604083510361017957604083015160ff81901c601b016020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660605261019d565b60418351036101995760608301515f1a602052604083015160605261019d565b5f91505b6020604060805f855afa505f6060523d606018519150806040525092915050565b5f5f5f5f606085870312156101d1575f5ffd5b84359350602085013567ffffffffffffffff8111156101ee575f5ffd5b8501601f810187136101fe575f5ffd5b803567ffffffffffffffff811115610214575f5ffd5b876020828401011115610225575f5ffd5b6020919091019350915060408501356001600160a01b0381168114610248575f5ffd5b93969295509093505056fea2646970667358221220297cd14f41bad41d64b8772371b0367e12cbddcbe3bc6995ef32baaf8bfa7bea64736f6c634300081b0033\"\n  },\n  \"0x29FdD9D9A9f8CD8dCa0F4764bf0F959183DF4139\": {\n    name: \"MOCK_CALLEE\",\n    address: \"0x29FdD9D9A9f8CD8dCa0F4764bf0F959183DF4139\",\n    bytecode:\n      \"0x604060808152600436101561001357600080fd5b600090813560e01c8063f6cd9380146100845763fcdcc9fb1461003557600080fd5b3461008057602036600319011261008057809173ffffffffffffffffffffffffffffffffffffffff6100656100f6565b16815280602052206001815491015482519182526020820152f35b5080fd5b503461008057606036600319011261008057600173ffffffffffffffffffffffffffffffffffffffff6100b56100f6565b1691828452836020528084206100ce602435825461011e565b9055828452836020526100e860443583838720015461011e565b928452836020528320015580f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361011957565b600080fd5b9190820180921161012b57565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220c13659f20bccbe2a3f5e189aedc2675adfab5354f8ae3b9362bc34919cf5747e64736f6c63430008110033\"\n  },\n  \"0x0006be192b4E06770eaa624AE7648DBF9051221c\": {\n    name: \"MOCK_TOKEN\",\n    address: \"0x0006be192b4E06770eaa624AE7648DBF9051221c\",\n    bytecode:\n      \"0x6080604081815260048036101561001557600080fd5b600092833560e01c90816306fdde03146107fc57508063095ea7b3146107d257806318160ddd146107b357806323b872dd146106e857806326092b831461063f578063313ce5671461062357806339509351146105d45780633ccfd60b1461054957806340c10f191461051957806370a08231146104e3578063715018a61461047b5780638da5cb5b1461045357806395d89b41146103315780639b251ef914610312578063a457c2d714610252578063a9059cbb14610221578063dd62ed3e146101d45763f2fde38b146100e957600080fd5b346101d05760203660031901126101d05761010261093c565b9061010b610cd2565b6001600160a01b038092169283156101675750506005548273ffffffffffffffffffffffffffffffffffffffff19821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8280fd5b50503461021d578060031936011261021d57806020926101f261093c565b6101fa610957565b6001600160a01b0391821683526001865283832091168252845220549051908152f35b5080fd5b50503461021d578060031936011261021d5760209061024b61024161093c565b6024359033610a92565b5160018152f35b50823461030f578260031936011261030f5761026c61093c565b91836024359233815260016020528181206001600160a01b03861682526020522054908282106102a65760208561024b8585038733610990565b608490602086519162461bcd60e51b8352820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b80fd5b50503461021d578160031936011261021d576020906006549051908152f35b5091903461021d578160031936011261021d5780519082845460018160011c9060018316928315610449575b60209384841081146104365783885290811561041a57506001146103c5575b505050829003601f01601f191682019267ffffffffffffffff8411838510176103b257508291826103ae9252826108f3565b0390f35b634e487b7160e01b815260418552602490fd5b8787529192508591837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b838510610406575050505083010138808061037c565b8054888601830152930192849082016103f0565b60ff1916878501525050151560051b840101905038808061037c565b634e487b7160e01b895260228a52602489fd5b91607f169161035d565b50503461021d578160031936011261021d576020906001600160a01b03600554169051908152f35b833461030f578060031936011261030f57610494610cd2565b806001600160a01b0360055473ffffffffffffffffffffffffffffffffffffffff198116600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50503461021d57602036600319011261021d57806020926001600160a01b0361050a61093c565b16815280845220549051908152f35b50503461021d5736600319011261030f5761054661053561093c565b61053d610cd2565b60243590610c2f565b80f35b50346101d057826003193601126101d057610562610cd2565b47908115610591575082808080936001600160a01b036005541682f115610587575080f35b51903d90823e3d90fd5b606490602084519162461bcd60e51b8352820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152fd5b50503461021d578060031936011261021d5761024b60209261061c6105f761093c565b91338152600186528481206001600160a01b038416825286528460243591205461096d565b9033610990565b50503461021d578160031936011261021d576020905160128152f35b5091908160031936011261021d5734156106805750600654803402903482040361066d576105469033610c2f565b506011602492634e487b7160e01b835252fd5b5162461bcd60e51b8152602081840152602660248201527f6e617469766520616d6f756e742073686f756c6420626520677265617465722060448201527f7468616e203000000000000000000000000000000000000000000000000000006064820152608490fd5b5082903461021d57606036600319011261021d5761070461093c565b61070c610957565b9184604435946001600160a01b038416815260016020528181203382526020522054906000198203610747575b60208661024b878787610a92565b84821061077057509183916107656020969561024b95033383610990565b919394819350610739565b606490602087519162461bcd60e51b8352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b50503461021d578160031936011261021d576020906002549051908152f35b50503461021d578060031936011261021d5760209061024b6107f261093c565b6024359033610990565b84915083346101d057826003193601126101d0578260035460018160011c90600183169283156108e9575b6020938484108114610436578388529081156108cd575060011461087757505050829003601f01601f191682019267ffffffffffffffff8411838510176103b257508291826103ae9252826108f3565b600387529192508591837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8385106108b9575050505083010185808061037c565b8054888601830152930192849082016108a3565b60ff1916878501525050151560051b840101905085808061037c565b91607f1691610827565b6020808252825181830181905290939260005b82811061092857505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501610906565b600435906001600160a01b038216820361095257565b600080fd5b602435906001600160a01b038216820361095257565b9190820180921161097a57565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03809116918215610a4157169182156109f15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b6001600160a01b03809116918215610bc45716918215610b7357600082815280602052604081205491808310610b0857604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b0316908115610c8d577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082610c7160009460025461096d565b60025584845283825260408420818154019055604051908152a3565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b6001600160a01b03600554163303610ce657565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fdfea26469706673582212205ca21940bbc9ddde3d6e431ec5272dbc19ed926f306859ee01e9ecc2b418121364736f6c63430008170033\"\n  },\n  \"0x4a9829524f4879700A8BA8524769F4b2C1CbA264\": {\n    name: \"FREE_MINT_ERC20\",\n    address: \"0x4a9829524f4879700A8BA8524769F4b2C1CbA264\",\n    bytecode:\n      \"0x608060405234801561000f575f5ffd5b50600436106100cd575f3560e01c806340c10f191161008a57806395d89b411161006457806395d89b4114610225578063a9059cbb14610243578063d505accf14610273578063dd62ed3e1461028f576100cd565b806340c10f19146101a957806370a08231146101c55780637ecebe00146101f5576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d5780633644e5151461018b575b5f5ffd5b6100d96102bf565b6040516100e69190610a68565b60405180910390f35b61010960048036038101906101049190610b19565b6102fc565b6040516101169190610b71565b60405180910390f35b610127610387565b6040516101349190610b99565b60405180910390f35b61015760048036038101906101529190610bb2565b610398565b6040516101649190610b71565b60405180910390f35b61017561053e565b6040516101829190610c1d565b60405180910390f35b610193610546565b6040516101a09190610c4e565b60405180910390f35b6101c360048036038101906101be9190610b19565b6105c2565b005b6101df60048036038101906101da9190610c67565b6105d0565b6040516101ec9190610b99565b60405180910390f35b61020f600480360381019061020a9190610c67565b6105e9565b60405161021c9190610b99565b60405180910390f35b61022d610602565b60405161023a9190610a68565b60405180910390f35b61025d60048036038101906102589190610b19565b61063f565b60405161026a9190610b71565b60405180910390f35b61028d60048036038101906102889190610ce6565b6106cd565b005b6102a960048036038101906102a49190610d83565b610890565b6040516102b69190610b99565b60405180910390f35b60606040518060400160405280600e81526020017f4d6f636b4552433230546f6b656e000000000000000000000000000000000000815250905090565b5f610305610927565b15610338578119156e22d473030f116ddee9f6b43ac78ba38460601b60601c181761033757633f68539a5f526004601cfd5b5b82602052637f5e9f20600c52335f52816034600c2055815f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa36001905092915050565b5f6805345cdf77eb68f44c54905090565b5f6103a484848461092f565b6103ac610927565b1561047a578360601b6e22d473030f116ddee9f6b43ac78ba333146104055733602052637f5e9f208117600c526034600c20805480191561040257808511156103fc576313be252b5f526004601cfd5b84810382555b50505b6387a211a28117600c526020600c2080548085111561042b5763f4d678b85f526004601cfd5b8481038255855f526020600c2085815401815585602052600c5160601c8460601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350505050610528565b8360601b33602052637f5e9f208117600c526034600c2080548019156104b557808511156104af576313be252b5f526004601cfd5b84810382555b6387a211a28317600c526020600c208054808711156104db5763f4d678b85f526004601cfd5b8681038255875f526020600c2087815401815587602052600c5160601c8660601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a35050505050505b610533848484610934565b600190509392505050565b5f6012905090565b5f5f610550610939565b90505f5f1b810361056d576105636102bf565b8051906020012090505b5f61057661093d565b90506040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815282602082015281604082015246606082015230608082015260a08120935050505090565b6105cc8282610966565b5050565b5f6387a211a2600c52815f526020600c20549050919050565b5f6338377508600c52815f526020600c20549050919050565b60606040518060400160405280600481526020017f4d4f434b00000000000000000000000000000000000000000000000000000000815250905090565b5f61064b33848461092f565b6387a211a2600c52335f526020600c208054808411156106725763f4d678b85f526004601cfd5b8381038255845f526020600c2084815401815584602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a35050506106c3338484610934565b6001905092915050565b6106d5610927565b15610708578419156e22d473030f116ddee9f6b43ac78ba38760601b60601c181761070757633f68539a5f526004601cfd5b5b5f610711610939565b90505f5f1b810361072e576107246102bf565b8051906020012090505b5f61073761093d565b90508542111561074e57631a15a3cc5f526004601cfd5b6040518960601b60601c99508860601b60601c985065383775081901600e52895f526020600c2080547f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835284602084015283604084015246606084015230608084015260a08320602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983528b60208401528a60408401528960608401528060808401528860a084015260c08320604e526042602c205f528760ff16602052866040528560605260208060805f60015afa8c3d51146108365763ddafbaef5f526004601cfd5b80820183558b637f5e9f2060a01b176040528a6034602c20558b8d7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602060608801a3836040525f60605250505050505050505050505050565b5f610899610927565b15610909576e22d473030f116ddee9f6b43ac78ba373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610908577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610921565b5b81602052637f5e9f20600c52825f526034600c205490505b92915050565b5f6001905090565b505050565b505050565b5f90565b5f7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc65f1b905090565b6109715f838361092f565b6805345cdf77eb68f44c54818101818110156109945763e5cfe9575f526004601cfd5b806805345cdf77eb68f44c556387a211a2600c52835f526020600c2083815401815583602052600c5160601c5f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a35050506109f45f8383610934565b5050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610a3a826109f8565b610a448185610a02565b9350610a54818560208601610a12565b610a5d81610a20565b840191505092915050565b5f6020820190508181035f830152610a808184610a30565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ab582610a8c565b9050919050565b610ac581610aab565b8114610acf575f5ffd5b50565b5f81359050610ae081610abc565b92915050565b5f819050919050565b610af881610ae6565b8114610b02575f5ffd5b50565b5f81359050610b1381610aef565b92915050565b5f5f60408385031215610b2f57610b2e610a88565b5b5f610b3c85828601610ad2565b9250506020610b4d85828601610b05565b9150509250929050565b5f8115159050919050565b610b6b81610b57565b82525050565b5f602082019050610b845f830184610b62565b92915050565b610b9381610ae6565b82525050565b5f602082019050610bac5f830184610b8a565b92915050565b5f5f5f60608486031215610bc957610bc8610a88565b5b5f610bd686828701610ad2565b9350506020610be786828701610ad2565b9250506040610bf886828701610b05565b9150509250925092565b5f60ff82169050919050565b610c1781610c02565b82525050565b5f602082019050610c305f830184610c0e565b92915050565b5f819050919050565b610c4881610c36565b82525050565b5f602082019050610c615f830184610c3f565b92915050565b5f60208284031215610c7c57610c7b610a88565b5b5f610c8984828501610ad2565b91505092915050565b610c9b81610c02565b8114610ca5575f5ffd5b50565b5f81359050610cb681610c92565b92915050565b610cc581610c36565b8114610ccf575f5ffd5b50565b5f81359050610ce081610cbc565b92915050565b5f5f5f5f5f5f5f60e0888a031215610d0157610d00610a88565b5b5f610d0e8a828b01610ad2565b9750506020610d1f8a828b01610ad2565b9650506040610d308a828b01610b05565b9550506060610d418a828b01610b05565b9450506080610d528a828b01610ca8565b93505060a0610d638a828b01610cd2565b92505060c0610d748a828b01610cd2565b91505092959891949750929550565b5f5f60408385031215610d9957610d98610a88565b5b5f610da685828601610ad2565b9250506020610db785828601610ad2565b915050925092905056fea264697066735822122048f76a2487cc7d756a9607d4c1e99c87438e834f07f0ee446476d3044adc93b364736f6c634300081c0033\"\n  }\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport type { NexusAccount } from \"@biconomy/abstractjs\"\nimport getPort, { type Options } from \"get-port\"\nimport {\n  http,\n  type Account,\n  type Chain,\n  type Hex,\n  type LocalAccount,\n  type PublicClient,\n  type PublicRpcSchema,\n  type TestClient,\n  type Transport,\n  type WalletClient,\n  createPublicClient,\n  createTestClient,\n  createWalletClient,\n  erc20Abi,\n  isHex,\n  parseEther,\n  publicActions,\n  walletActions\n} from \"viem\"\nimport { dealActions } from \"viem-deal\"\nimport type { BundlerClient, SmartAccount } from \"viem/account-abstraction\"\nimport { mnemonicToAccount, privateKeyToAccount } from \"viem/accounts\"\nimport type { TestClientMode } from \"viem/clients/createTestClient\"\n\nexport const getPackageRoot = () => {\n  // Get the directory of the current module (utils.js in dist/)\n  const currentFileUrl = import.meta.url;\n  const distDir = path.dirname(fileURLToPath(currentFileUrl));\n  // Go up one level from dist/ to get to the package root\n  return path.dirname(distDir);\n}\n\nexport const getRandomNumber = (min = 3000, max = 9000) => {\n  return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport const sleep = (ms: number) =>\n  new Promise((resolve) => setTimeout(resolve, ms))\n\nexport type Clients = {\n  publicClient: PublicClient<Transport, Chain>\n  walletClients: WalletClient<Transport, Chain, Account>[]\n  testClient: TestClient<\n    TestClientMode,\n    Transport,\n    Chain | undefined,\n    Account | undefined,\n    true,\n    PublicRpcSchema\n  >\n  accounts: LocalAccount[]\n  account: LocalAccount\n}\nexport const toClients = async ({\n  rpcUrl,\n  chain\n}: { rpcUrl: string; chain: Chain }): Promise<Clients> => {\n  const accounts = Array.from({ length: 10 }, (_, i) =>\n    mnemonicToAccount(\n      \"test test test test test test test test test test test junk\",\n      { accountIndex: i }\n    )\n  )\n  const account = accounts[0]\n  const publicClient = createPublicClient({\n    chain,\n    transport: http(rpcUrl)\n  })\n\n  const walletClients = accounts.map((account) =>\n    createWalletClient({\n      account,\n      chain,\n      transport: http(rpcUrl)\n    })\n  )\n\n  const testClient = createTestClient({\n    transport: http(rpcUrl),\n    mode: \"anvil\",\n    chain\n  })\n    .extend(publicActions)\n    .extend(walletActions)\n    .extend(dealActions)\n\n  await testClient.setBalance({\n    address: account.address,\n    value: parseEther(\"1000000000\")\n  })\n\n  return { publicClient, walletClients, testClient, accounts, account }\n}\n\n// Declare a global variable to store excluded ports\ndeclare global {\n  var __BICONOMY_USED_PORTS__: number[]\n}\n\n// Initialize the global variable if it doesn't exist\nif (!global.__BICONOMY_USED_PORTS__) {\n  global.__BICONOMY_USED_PORTS__ = []\n}\n\n// Use the global variable in your PORT_OPTS\nexport const PORT_OPTS: Options = {\n  port: 1, // overridden later\n  host: \"127.0.0.1\",\n  exclude: global.__BICONOMY_USED_PORTS__\n}\n\nexport const getFreePort = async (\n  max: number,\n  min: number,\n  options?: Options\n) => {\n  const potentialPort = Math.floor(Math.random() * (max - min + 1)) + min\n  const mergedOptions = { ...PORT_OPTS, ...options, port: potentialPort }\n  const port = await getPort(mergedOptions)\n  // Add to the global list of used ports\n  global.__BICONOMY_USED_PORTS__.push(port)\n  return port\n}\n\nexport const getFundedAccount = (): {\n  account: Account\n  privateKey: Hex\n} => {\n  const privateKey =\n    `0x${process.env.PRIVATE_KEY || \"ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80\"}` as Hex\n  return { account: privateKeyToAccount(privateKey), privateKey }\n}\n\nexport type Url = `https://${string}` | `http://${string}`\nexport type MinimalVars = {\n  privateKey: Hex\n  chainId: number\n  bundlerUrl: Url\n}\n\nexport const getEnvVars = (prefix = \"\"): MinimalVars => {\n  const privateKey = process.env[`${prefix}PRIVATE_KEY`]!\n  if (!privateKey || !isHex(privateKey)) throw new Error(\"Invalid PRIVATE_KEY\")\n  const chainId = process.env[`${prefix}CHAIN_ID`]!\n  if (!chainId || !Number.isNaN(chainId)) throw new Error(\"Invalid CHAIN_ID\")\n  const bundlerUrl = process.env[`${prefix}BUNDLER_URL`]! as Url\n  if (!bundlerUrl || !bundlerUrl.includes(\"http\"))\n    throw new Error(\"Invalid BUNDLER_URL\")\n\n  return {\n    privateKey,\n    chainId: Number(chainId),\n    bundlerUrl\n  }\n}\n\nexport type NetworkConfig = {\n  account: LocalAccount\n  chain: Chain\n  walletClient: WalletClient<Transport, Chain, Account>\n  publicClient: PublicClient<Transport, Chain>\n  bundlerClient: BundlerClient<Transport, Chain, SmartAccount>\n  nexusAccount: NexusAccount\n}\n\nexport const validateNetwork = async ({\n  chain,\n  account,\n  nexusAccount,\n  bundlerClient,\n  publicClient,\n  walletClient\n}: NetworkConfig) => {\n  const minBalance = parseEther(\"0.01\")\n  const accountBalance = await publicClient.getBalance({\n    address: account.address\n  })\n  if (accountBalance < minBalance * 2n) {\n    throw new Error(\"Account from privateKey is not funded\")\n  }\n\n  const nexusAccountBalance = await publicClient.getBalance({\n    address: nexusAccount.address\n  })\n  if (nexusAccountBalance < minBalance) {\n    const hash = await walletClient.sendTransaction({\n      to: nexusAccount.address,\n      value: minBalance\n    })\n    const receipt = await publicClient.getTransactionReceipt({ hash })\n    if (receipt.status !== \"success\") {\n      throw new Error(\"Could not top up your account\")\n    }\n  }\n\n  const chainIdFromBundlerClient = await bundlerClient.getChainId()\n  if (chainIdFromBundlerClient !== chain.id) {\n    throw new Error(\"Bundler Client not configured correctly\")\n  }\n}\n\nexport const getBalance = async (\n  publicClient: PublicClient<Transport, Chain>,\n  owner: Hex,\n  tokenAddress?: Hex\n): Promise<bigint> => {\n  if (!tokenAddress) {\n    return await publicClient.getBalance({ address: owner })\n  }\n  return await publicClient.readContract({\n    address: tokenAddress,\n    abi: erc20Abi,\n    functionName: \"balanceOf\",\n    args: [owner]\n  })\n}\n","import type { Chain, Hex } from \"viem\"\nimport {\n  COMPOSABLE_MODULE_ADDRESS,\n  COUNTER_ADDRESS,\n  DETERMINISTIC_DEPLOYER,\n  FREE_MINT_ERC20,\n  MEE_VALIDATOR_ADDRESS,\n  MINTABLE_ADDRESS,\n  MOCK_CALLEE,\n  MOCK_SIGNATURE_VALIDATOR,\n  MOCK_TOKEN,\n  NEXUS_ACCOUNT_FACTORY_ADDRESS,\n  NEXUS_BOOTSTRAP_ADDRESS,\n  NEXUS_IMPLEMENTATION_ADDRESS,\n  OWNABLE_VALIDATOR_ADDRESS,\n  SMART_SESSION_ADDRESS,\n  SPENDING_LIMITS_POLICY_ADDRESS,\n  SUDO_POLICY_ADDRESS,\n  TIME_FRAME_POLICY_ADDRESS,\n  TOKEN_WITH_PERMIT,\n  UNIVERSAL_ACTION_POLICY_ADDRESS,\n  VALUE_LIMIT_POLICY_ADDRESS\n} from \"../addresses\"\nimport { BYTECODES } from \"../bytecodes\"\nimport { getFundedAccount, toClients } from \"../utils\"\n\nexport type DeployContractsArgs = {\n  rpcUrl: string\n  chain: Chain\n  privateKey?: Hex\n}\n\nexport const deployContracts = async ({\n  rpcUrl,\n  chain\n}: DeployContractsArgs) => {\n  const {\n    walletClients: [walletClient],\n    testClient\n  } = await toClients({\n    rpcUrl,\n    chain\n  })\n\n  await walletClient.sendTransaction({\n    to: DETERMINISTIC_DEPLOYER,\n    data: ENTRY_POINT_V07_CREATECALL,\n    gas: 15_000_000n\n  })\n\n  await walletClient.sendTransaction({\n    to: DETERMINISTIC_DEPLOYER,\n    data: ENTRY_POINT_SIMULATIONS_CREATECALL,\n    gas: 15_000_000n\n  })\n\n  // Setup nexus\n  await Promise.all([\n    testClient.setCode({\n      bytecode: BYTECODES[NEXUS_ACCOUNT_FACTORY_ADDRESS].bytecode as Hex,\n      address: NEXUS_ACCOUNT_FACTORY_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[NEXUS_IMPLEMENTATION_ADDRESS].bytecode as Hex,\n      address: NEXUS_IMPLEMENTATION_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[NEXUS_BOOTSTRAP_ADDRESS].bytecode as Hex,\n      address: NEXUS_BOOTSTRAP_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[COMPOSABLE_MODULE_ADDRESS].bytecode as Hex,\n      address: COMPOSABLE_MODULE_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[MEE_VALIDATOR_ADDRESS].bytecode as Hex,\n      address: MEE_VALIDATOR_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[SMART_SESSION_ADDRESS].bytecode as Hex,\n      address: SMART_SESSION_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[SUDO_POLICY_ADDRESS].bytecode as Hex,\n      address: SUDO_POLICY_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[SPENDING_LIMITS_POLICY_ADDRESS].bytecode as Hex,\n      address: SPENDING_LIMITS_POLICY_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[UNIVERSAL_ACTION_POLICY_ADDRESS].bytecode as Hex,\n      address: UNIVERSAL_ACTION_POLICY_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[TIME_FRAME_POLICY_ADDRESS].bytecode as Hex,\n      address: TIME_FRAME_POLICY_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[VALUE_LIMIT_POLICY_ADDRESS].bytecode as Hex,\n      address: VALUE_LIMIT_POLICY_ADDRESS\n    }),\n    // Now for ownables\n    testClient.setCode({\n      bytecode: BYTECODES[OWNABLE_VALIDATOR_ADDRESS].bytecode as Hex,\n      address: OWNABLE_VALIDATOR_ADDRESS\n    }),\n    // And add dummy contracts just for testing\n    testClient.setCode({\n      bytecode: BYTECODES[MINTABLE_ADDRESS].bytecode as Hex,\n      address: MINTABLE_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[COUNTER_ADDRESS].bytecode as Hex,\n      address: COUNTER_ADDRESS\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[TOKEN_WITH_PERMIT].bytecode as Hex,\n      address: TOKEN_WITH_PERMIT\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[MOCK_SIGNATURE_VALIDATOR].bytecode as Hex,\n      address: MOCK_SIGNATURE_VALIDATOR\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[MOCK_CALLEE].bytecode as Hex,\n      address: MOCK_CALLEE\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[MOCK_TOKEN].bytecode as Hex,\n      address: MOCK_TOKEN\n    }),\n    testClient.setCode({\n      bytecode: BYTECODES[FREE_MINT_ERC20].bytecode as Hex,\n      address: FREE_MINT_ERC20\n    })\n  ])\n}\n\n// Will deploy entryPoint to 0x0000000071727De22E5E9d8BAf0edAc6f37da032\nexport const ENTRY_POINT_V07_CREATECALL: Hex =\n  \"0x90d8084deab30c2a37c45e8d47f49f2f7965183cb6990a98943ef94940681de360a08060405234620000825760016002556101df8181016001600160401b038111838210176200006c57829162003f2b833903906000f080156200006057608052604051613ea39081620000888239608051818181610d22015261324b0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f0000000000000000000000000000000000000000000000000000000000000000165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360808060405234610016576101c3908161001c8239f35b600080fdfe6080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c63430008170033\"\n\n// Will deploy entryPointSimulations (required for V0.7) to 0x74Cb5e4eE81b86e70f9045036a1C5477de69eE87\nexport const ENTRY_POINT_SIMULATIONS_CREATECALL: Hex =\n  \"0x313233340000000000000000000000000000000000000000000000000000000060806040526040516100109061005f565b604051809103906000f08015801561002c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905534801561005957600080fd5b5061006c565b613d318061050783390190565b61048c8061007b6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c18f522614610030575b600080fd5b61004361003e366004610230565b610059565b60405161005091906103b0565b60405180910390f35b60606000825167ffffffffffffffff811115610077576100776101e9565b6040519080825280602002602001820160405280156100aa57816020015b60608152602001906001900390816100955790505b50905060005b835181101561019d57606060007f850aaf621a3721219c57b79d6077e318862cf95113b5637afaddb124884a5eb060008054906101000a90046001600160a01b031687858151811061010457610104610414565b602002602001015160405160240161011d92919061042a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050600061015f8882845a6101a5565b905080610174576101716000196101bd565b92505b8285858151811061018757610187610414565b60209081029190910101525050506001016100b0565b509392505050565b6000806000845160208601878987f195945050505050565b60603d828111156101cb5750815b604051602082018101604052818152816000602083013e9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610228576102286101e9565b604052919050565b600080604080848603121561024457600080fd5b83356001600160a01b038116811461025b57600080fd5b925060208481013567ffffffffffffffff8082111561027957600080fd5b8187019150601f88601f84011261028f57600080fd5b8235828111156102a1576102a16101e9565b8060051b6102b08682016101ff565b918252848101860191868101908c8411156102ca57600080fd5b87870192505b83831015610357578235868111156102e85760008081fd5b8701603f81018e136102fa5760008081fd5b888101358781111561030e5761030e6101e9565b61031f818801601f19168b016101ff565b8181528f8c8385010111156103345760008081fd5b818c84018c83013760009181018b019190915283525091870191908701906102d0565b8099505050505050505050509250929050565b6000815180845260005b8181101561039057602081850181015186830182015201610374565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561040757603f198886030184526103f585835161036a565b945092850192908501906001016103d9565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038316815260406020820181905260009061044e9083018461036a565b94935050505056fea26469706673582212207ddd3776bce2d23a4710581621f90634e5e2f38c35b4ba3416ba605ac54ef07b64736f6c6343000817003360a060405260405162000012906200009d565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b0390811660805260408051808201825260008082528251808401909352808352602080840191825282018390529051600380546001600160a01b031916919094161790925551600455516005553480156200009157600080fd5b506001600255620000ab565b6102138062003b1e83390190565b608051613a5a620000c460003960005050613a5a6000f3fe6080604052600436106101395760003560e01c80635287ce12116100ab578063bb9fe6bf1161006f578063bb9fe6bf14610505578063c23a5cea1461051a578063c3bce0091461053a578063c5f996e614610567578063fc7e286d14610587578063fe2171cb1461062f57600080fd5b80635287ce12146103575780635895273b1461046f57806370a082311461048f578063b760faf9146104c5578063baa22044146104d857600080fd5b80631b2e01b8116100fd5780631b2e01b814610219578063205c28781461025f57806322cdde4c1461027f578063263934db1461029f57806330ec25d1146102cc57806335567e1a146102f957600080fd5b80630396cb601461014e5780630513fbf4146101615780630bd28e3b146101975780630da82661146101b75780630dbfc6bd146101ec57600080fd5b36610149576101473361064f565b005b600080fd5b61014761015c366004612c8c565b610670565b34801561016d57600080fd5b5061018161017c366004612cfd565b610904565b60405161018e9190612e11565b60405180910390f35b3480156101a357600080fd5b506101476101b2366004612e8c565b610a24565b3480156101c357600080fd5b506101d76101d2366004612fd8565b610a5b565b6040805192835260208301919091520161018e565b3480156101f857600080fd5b5061020c610207366004613127565b610b90565b60405161018e91906131c6565b34801561022557600080fd5b5061025161023436600461321d565b600160209081526000928352604080842090915290825290205481565b60405190815260200161018e565b34801561026b57600080fd5b5061014761027a366004613252565b610c4f565b34801561028b57600080fd5b5061025161029a366004613297565b610da0565b3480156102ab57600080fd5b506102bf6102ba366004613127565b610de2565b60405161018e91906132cb565b3480156102d857600080fd5b506102ec6102e7366004613127565b610e79565b60405161018e91906133a7565b34801561030557600080fd5b5061025161031436600461321d565b6001600160a01b039190911660009081526001602090815260408083206001600160c01b0385168452909152908190205491901b67ffffffffffffffff19161790565b34801561036357600080fd5b506104146103723660046133fe565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b031660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046001600160701b031692810192909252600160781b810463ffffffff166060830152600160981b900465ffffffffffff16608082015290565b60405161018e9190600060a082019050825182526020830151151560208301526001600160701b03604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b34801561047b57600080fd5b506102bf61048a366004613297565b610f2e565b34801561049b57600080fd5b506102516104aa3660046133fe565b6001600160a01b031660009081526020819052604090205490565b6101476104d33660046133fe565b61064f565b3480156104e457600080fd5b506104f86104f3366004612cfd565b610fe9565b60405161018e919061341b565b34801561051157600080fd5b50610147611046565b34801561052657600080fd5b506101476105353660046133fe565b61117a565b34801561054657600080fd5b5061055a610555366004613297565b61139e565b60405161018e919061342e565b34801561057357600080fd5b506104f8610582366004613441565b611563565b34801561059357600080fd5b506105ec6105a23660046133fe565b6000602081905290815260409020805460019091015460ff81169061010081046001600160701b031690600160781b810463ffffffff1690600160981b900465ffffffffffff1685565b6040805195865293151560208601526001600160701b039092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a00161018e565b34801561063b57600080fd5b5061055a61064a366004613127565b61164e565b60015b600581101561066357600101610652565b61066c82611662565b5050565b33600090815260208190526040902063ffffffff82166106d75760405162461bcd60e51b815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c617900000000000060448201526064015b60405180910390fd5b600181015463ffffffff600160781b9091048116908316101561073c5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d650000000060448201526064016106ce565b600181015460009061075d90349061010090046001600160701b03166134fc565b9050600081116107a45760405162461bcd60e51b81526020600482015260126024820152711b9bc81cdd185ad9481cdc1958da599a595960721b60448201526064016106ce565b6001600160701b038111156107ec5760405162461bcd60e51b815260206004820152600e60248201526d7374616b65206f766572666c6f7760901b60448201526064016106ce565b6040805160a08101825283548152600160208083018281526001600160701b0386811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16600160981b0265ffffffffffff60981b1997909416600160781b029690961669ffffffffffffffffffff60781b1991909516610100026effffffffffffffffffffffffffff0019991515999099166effffffffffffffffffffffffffffff1990941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b60606000866001600160401b0381111561092057610920612ea7565b60405190808252806020026020018201604052801561096d57816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161093e5790505b50905060005b87811015610a185760006109ef8a8a848181106109925761099261350f565b90506020028101906109a49190613525565b8989858181106109b6576109b661350f565b90506020020160208101906109cb91906133fe565b8888868181106109dd576109dd61350f565b90506020028101906105829190613546565b905080838381518110610a0457610a0461350f565b602090810291909101015250600101610973565b50979650505050505050565b3360009081526001602090815260408083206001600160c01b03851684529091528120805491610a538361358c565b919050555050565b8251606081015160a08201516000928392909181016127100160405a603f0281610a8757610a876135a5565b041015610ad25760408051631101335b60e11b8152600060048201526024810191909152600f60448201526e41413935206f7574206f662067617360881b60648201526084016106ce565b875160009015610b66576000610aef846000015160008c866116ab565b905080610b64576000610b036108006116c3565b805190915015610b5e5784600001516001600160a01b03168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610b559291906135bb565b60405180910390a35b60019250505b505b600088608001515a8803019050610b7f828a8a846116ef565b955095505050505094509492505050565b60606000826001600160401b03811115610bac57610bac612ea7565b604051908082528060200260200182016040528015610be557816020015b610bd2612ac0565b815260200190600190039081610bca5790505b50905060005b83811015610c45576000610c1c868684818110610c0a57610c0a61350f565b905060200281019061048a9190613525565b905080838381518110610c3157610c3161350f565b602090810291909101015250600101610beb565b5090505b92915050565b3360009081526020819052604090208054821115610caf5760405162461bcd60e51b815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c617267650000000000000060448201526064016106ce565b8054610cbc9083906135d4565b8155604080516001600160a01b03851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a26000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610d4f576040519150601f19603f3d011682016040523d82523d6000602084013e610d54565b606091505b5050905080610d9a5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b60448201526064016106ce565b50505050565b6000610dab8261191b565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b610dea612ac0565b6000826001600160401b03811115610e0457610e04612ea7565b604051908082528060200260200182016040528015610e3d57816020015b610e2a612ac0565b815260200190600190039081610e225790505b509050610e4a8484610b90565b905080610e586001856135d4565b81518110610e6857610e6861350f565b602002602001015191505092915050565b60606000826001600160401b03811115610e9557610e95612ea7565b604051908082528060200260200182016040528015610ece57816020015b610ebb612b07565b815260200190600190039081610eb35790505b50905060005b83811015610c45576000610f05868684818110610ef357610ef361350f565b90506020028101906105559190613525565b905080838381518110610f1a57610f1a61350f565b602090810291909101015250600101610ed4565b610f36612ac0565b610f3e611934565b610f46612bbc565b610f4f8361195c565b6000806000610f6060008786611a29565b925092509250600080610f738887611c57565b915091506040518061010001604052808760800151815260200183815260200186815260200185815260200184815260200182815260200160001515815260200160405180604001604052806002815260200161060f60f31b8152508152509650505050505050610fe46001600255565b919050565b60408051606080820183526000808352602083018190529282015290611013888888888888610904565b9050806110216001896135d4565b815181106110315761103161350f565b60200260200101519150509695505050505050565b33600090815260208190526040812060018101549091600160781b90910463ffffffff1690036110a55760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081cdd185ad95960b21b60448201526064016106ce565b600181015460ff166110ed5760405162461bcd60e51b8152602060048201526011602482015270616c726561647920756e7374616b696e6760781b60448201526064016106ce565b600181015460009061110c90600160781b900463ffffffff16426135e7565b60018301805460ff65ffffffffffff60981b011916600160981b65ffffffffffff841690810260ff19169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046001600160701b0316806111e05760405162461bcd60e51b81526020600482015260146024820152734e6f207374616b6520746f20776974686472617760601b60448201526064016106ce565b6001820154600160981b900465ffffffffffff166112405760405162461bcd60e51b815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b65282920666972737400000060448201526064016106ce565b600182015442600160981b90910465ffffffffffff1611156112a45760405162461bcd60e51b815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f7420647565000000000060448201526064016106ce565b600182018054610100600160c81b0319169055604080516001600160a01b03851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611348576040519150601f19603f3d011682016040523d82523d6000602084013e61134d565b606091505b5050905080610d9a5760405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b65000000000000000060448201526064016106ce565b6113a6612b07565b6113ae612bbc565b6113b78361195c565b6000806113c660008685611a29565b50915091506113d9600083836000611d64565b60006113ec846000015160e00151611f00565b8451519091506000906113fe90611f00565b905061141d604051806040016040528060008152602001600081525090565b36600061142d60408b018b613546565b90925090506000601482101561144457600061145f565b61145260146000848661360d565b61145b91613637565b60601c5b905061146a81611f00565b9350505050600085905060006040518060a0016040528089608001518152602001896040015181526020018881526020018781526020016114ac8a6060015190565b90526040805180820182526003546001600160a01b0390811682528251808401909352600454835260055460208481019190915282019290925291925083161580159061150357506001836001600160a01b031614155b15611530576040518060400160405280846001600160a01b0316815260200161152b85611f00565b905290505b6040805160a081018252928352602083019590955293810192909252506060810192909252608082015295945050505050565b60408051606080820183526000808352602083015291810191909152611587612bbc565b6115908661195c565b61159c60008783611a29565b506000915060609050816001600160a01b0388161561162b5760005a9050886001600160a01b031688886040516115d492919061366c565b6000604051808303816000865af19150503d8060008114611611576040519150601f19603f3d011682016040523d82523d6000602084013e611616565b606091505b5090945092505a61162790826135d4565b9150505b604080516060810182529182529215156020820152918201529695505050505050565b611656612b07565b6000610e4a8484610e79565b600061166e8234611f52565b9050816001600160a01b03167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260405161116e91815260200190565b6000806000845160208601878987f195945050505050565b60603d828111156116d15750815b604051602082018101604052818152816000602083013e9392505050565b60008060005a86519091506000908161170782611f85565b60e08301519091506001600160a01b038116611726578251935061183e565b80935060008951111561183e57878202965060028b600281111561174c5761174c61367c565b1461183e5760005a9050816001600160a01b0316637c627b218560a001518e8d8c886040518663ffffffff1660e01b815260040161178d9493929190613692565b600060405180830381600088803b1580156117a757600080fd5b5087f1935050505080156117b9575060015b611838578a5180516020808e01519201516001600160a01b0390911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792906118046108006116c3565b6040516118129291906135bb565b60405180910390a38a608001515a870301985061183260028c8c8c6116ef565b90985096505b5a900395505b5a60a0840151606085015160808d01519288039a909a01990190890380821115611871576064600a828403020499909901985b505060408a01518883029750878110156118d75760028c60028111156118995761189961367c565b036118bc578097506118aa8b611fb7565b6118b78b60008a8c612006565b61190c565b8a608001515a87030198508a6040015197506118aa8b611fb7565b8781036118e48682611f52565b506000808e60028111156118fa576118fa61367c565b1490506119098d828c8e612006565b50505b50505050505094509492505050565b600061192682612081565b805190602001209050919050565b600280540361195657604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6119cf6040516135a560f21b60208201526bffffffffffffffffffffffff193060601b166022820152600160f81b603682015260009060370160408051808303601f190181529190528051602090910120600680546001600160a01b0319166001600160a01b0390921691909117905550565b6000611a006119e16040840184613546565b6119ee60208601866133fe565b6119fb60e0870187613546565b612139565b9050805160001461066c57600081604051631101335b60e11b81526004016106ce9291906135bb565b6000806000805a8551909150611a3f8782612215565b611a4887610da0565b6020870152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff811115611ad85760405162461bcd60e51b815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f77000000000000000060448201526064016106ce565b6000611b078460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b9050611b168b8b8b8487612323565b9750611b2a846000015185602001516124ba565b611b80578a604051631101335b60e11b81526004016106ce918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a86031115611bdc578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b606060005a60e08701519091506001600160a01b031615611c0857611c038d8d8d86612507565b995091505b60408b018390528160608c015260a08c01355a88030160808c015260645a611c3090836135d4565b611c3b9060736136dc565b611c4591906136f3565b97505050505050505093509350939050565b60008060005a90506000611c6c856060015190565b604051909150366000611c8260608a018a613546565b915091506000816003811115611c9757833591505b506372288ed160e01b6001600160e01b0319821601611d0d5760008a8a60200151604051602401611cc9929190613862565b60408051601f198184030181529190526020810180516001600160e01b0316638dd7712f60e01b1790529050611d01818b888a610a5b565b9099509750611d579050565b611d5183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508991508a9050610a5b565b90985096505b5050505050509250929050565b600080611d70856126b6565b91509150816001600160a01b0316836001600160a01b031614611dd65785604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0991a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8015611e2e5785604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b6000611e39856126b6565b925090506001600160a01b03811615611e955786604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0999a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8115611ef75786604051631101335b60e11b81526004016106ce9181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f742064756060820152606560f81b608082015260a00190565b50505050505050565b604080518082018252600080825260208083018281526001600160a01b03959095168252819052919091206001015461010081046001600160701b03168252600160781b900463ffffffff1690915290565b6001600160a01b038216600090815260208190526040812080548290611f799085906134fc565b91829055509392505050565b61010081015161012082015160009190808203611fa3575092915050565b611faf82488301612709565b949350505050565b80518051602080840151928101516040519081526001600160a01b0390921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e081015181516020808801519301516040516001600160a01b039384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f916120739189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b60608135602083013560006120a161209c6040870187613546565b612721565b905060006120b561209c6060880188613546565b9050608086013560a087013560c088013560006120d861209c60e08c018c613546565b604080516001600160a01b039a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b60608415801561215157506001600160a01b0384163b155b15612190575060408051808201909152601981527f41413230206163636f756e74206e6f74206465706c6f79656400000000000000602082015261220c565b601482106121fb5760006121a7601482858761360d565b6121b091613637565b60601c9050803b6000036121f957505060408051808201909152601b81527f41413330207061796d6173746572206e6f74206465706c6f7965640000000000602082015261220c565b505b506040805160208101909152600081525b95945050505050565b61222260208301836133fe565b6001600160a01b03168152602082810135908201526001600160801b036080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061228560e0850185613546565b909250905080156123085760348110156122e15760405162461bcd60e51b815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e644461746100000060448201526064016106ce565b6122eb8282612734565b60a086015260808501526001600160a01b031660e0840152610d9a565b600060e084018190526080840181905260a084015250505050565b8251805160009190612342888761233d60408b018b613546565b61279c565b60e082015160006001600160a01b038216612386576001600160a01b03831660009081526020819052604090205487811161237f57808803612382565b60005b9150505b60208801516040516306608bdf60e21b81526001600160a01b038516916319822f7c9189916123bc918e91908790600401613884565b60206040518083038160008887f1935050505080156123f8575060408051601f3d908101601f191682019092526123f5918101906138a9565b60015b61242357896124086108006116c3565b6040516365c8fd4d60e01b81526004016106ce9291906138c2565b94506001600160a01b0382166124ad576001600160a01b03831660009081526020819052604090208054808911156124a7578b604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b6001600160a01b038216600090815260016020908152604080832084821c80855292528220805484916001600160401b0383169190856124f98361358c565b909155501495945050505050565b60606000805a855160e08101516001600160a01b03811660009081526020819052604090208054939450919290919087811015612590578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b8781038260000181905550600084608001519050836001600160a01b03166352b7512c828d8d602001518d6040518563ffffffff1660e01b81526004016125d993929190613884565b60006040518083038160008887f19350505050801561261a57506040513d6000823e601f3d908101601f1916820160405261261791908101906138ff565b60015b612645578b61262a6108006116c3565b6040516365c8fd4d60e01b81526004016106ce92919061397f565b9098509650805a8703111561190c578b604051631101335b60e11b81526004016106ce9181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e47606082015266185cd31a5b5a5d60ca1b608082015260a00190565b600080826000036126cc57506000928392509050565b60006126d784612a4f565b9050806040015165ffffffffffff164211806126fe5750806020015165ffffffffffff1642105b905194909350915050565b6000818310612718578161271a565b825b9392505050565b6000604051828085833790209392505050565b60008080612745601482868861360d565b61274e91613637565b60601c61275f60246014878961360d565b612768916139bc565b60801c61277960346024888a61360d565b612782916139bc565b9194506001600160801b0316925060801c90509250925092565b8015610d9a578251516001600160a01b0381163b156128075784604051631101335b60e11b81526004016106ce918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b600061281b6006546001600160a01b031690565b6001600160a01b031663570e1a3686600001516040015186866040518463ffffffff1660e01b81526004016128519291906139f3565b60206040518083038160008887f1158015612870573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128959190613a07565b90506001600160a01b0381166128f75785604051631101335b60e11b81526004016106ce918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b816001600160a01b0316816001600160a01b0316146129615785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b806001600160a01b03163b6000036129c45785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b60006129d3601482868861360d565b6129dc91613637565b60601c9050826001600160a01b031686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051612a3e9291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003612a8b575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6040518060a00160405280612b446040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b8152602001612b66604051806040016040528060008152602001600081525090565b8152602001612b88604051806040016040528060008152602001600081525090565b8152602001612baa604051806040016040528060008152602001600081525090565b8152602001612bb7612c54565b905290565b6040518060a00160405280612c2f60405180610140016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b604051806040016040528060006001600160a01b03168152602001612bb7604051806040016040528060008152602001600081525090565b600060208284031215612c9e57600080fd5b813563ffffffff8116811461271a57600080fd5b60008083601f840112612cc457600080fd5b5081356001600160401b03811115612cdb57600080fd5b6020830191508360208260051b8501011115612cf657600080fd5b9250929050565b60008060008060008060608789031215612d1657600080fd5b86356001600160401b0380821115612d2d57600080fd5b612d398a838b01612cb2565b90985096506020890135915080821115612d5257600080fd5b612d5e8a838b01612cb2565b90965094506040890135915080821115612d7757600080fd5b50612d8489828a01612cb2565b979a9699509497509295939492505050565b60005b83811015612db1578181015183820152602001612d99565b50506000910152565b60008151808452612dd2816020860160208601612d96565b601f01601f19169290920160200192915050565b805182526020810151151560208301526000604082015160606040850152611faf6060850182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f19888603018452612e56858351612de6565b94509285019290850190600101612e3a565b5092979650505050505050565b80356001600160c01b0381168114610fe457600080fd5b600060208284031215612e9e57600080fd5b61271a82612e75565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612edf57612edf612ea7565b60405290565b60405161014081016001600160401b0381118282101715612edf57612edf612ea7565b604051601f8201601f191681016001600160401b0381118282101715612f3057612f30612ea7565b604052919050565b60006001600160401b03821115612f5157612f51612ea7565b50601f01601f191660200190565b600082601f830112612f7057600080fd5b8135612f83612f7e82612f38565b612f08565b818152846020838601011115612f9857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114612fca57600080fd5b50565b8035610fe481612fb5565b600080600080848603610220811215612ff057600080fd5b85356001600160401b038082111561300757600080fd5b61301389838a01612f5f565b9650601f19830192506101c091508183121561302e57600080fd5b613036612ebd565b6101408085121561304657600080fd5b61304e612ee5565b945061305c60208b01612fcd565b855260408a0135602086015260608a0135604086015260808a0135606086015260a08a0135608086015260c08a013560a086015260e08a013560c08601526101006130a8818c01612fcd565b60e08701526101208b81013591870191909152908a013590850152928352610160880135602084015261018088013560408401526101a088013560608401528188013560808401529194506101e0870135918083111561310757600080fd5b505061311587828801612f5f565b94979396509394610200013593505050565b6000806020838503121561313a57600080fd5b82356001600160401b0381111561315057600080fd5b61315c85828601612cb2565b90969095509350505050565b6000610100825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c0830151151560c085015260e08301518160e086015261220c82860182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f1988860301845261320b858351613168565b945092850192908501906001016131ef565b6000806040838503121561323057600080fd5b823561323b81612fb5565b915061324960208401612e75565b90509250929050565b6000806040838503121561326557600080fd5b823561327081612fb5565b946020939093013593505050565b6000610120828403121561329157600080fd5b50919050565b6000602082840312156132a957600080fd5b81356001600160401b038111156132bf57600080fd5b611faf8482850161327e565b60208152600061271a6020830184613168565b80516101408084528151908401526020810151610160840152604081015161018084015260608101516101a08401526080015160a06101c084015260009061332a6101e0850182612dba565b90506020830151613348602086018280518252602090810151910152565b5060408301518051606086015260208101516080860152506060830151805160a0860152602081015160c0860152506080830151610c4560e086018280516001600160a01b031682526020908101518051828401520151604090910152565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f198886030184526133ec8583516132de565b945092850192908501906001016133d0565b60006020828403121561341057600080fd5b813561271a81612fb5565b60208152600061271a6020830184612de6565b60208152600061271a60208301846132de565b6000806000806060858703121561345757600080fd5b84356001600160401b038082111561346e57600080fd5b61347a8883890161327e565b95506020870135915061348c82612fb5565b909350604086013590808211156134a257600080fd5b818701915087601f8301126134b657600080fd5b8135818111156134c557600080fd5b8860208285010111156134d757600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4957610c496134e6565b634e487b7160e01b600052603260045260246000fd5b6000823561011e1983360301811261353c57600080fd5b9190910192915050565b6000808335601e1984360301811261355d57600080fd5b8301803591506001600160401b0382111561357757600080fd5b602001915036819003821315612cf657600080fd5b60006001820161359e5761359e6134e6565b5060010190565b634e487b7160e01b600052601260045260246000fd5b828152604060208201526000611faf6040830184612dba565b81810381811115610c4957610c496134e6565b65ffffffffffff818116838216019080821115613606576136066134e6565b5092915050565b6000808585111561361d57600080fd5b8386111561362a57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156136645780818660140360031b1b83161692505b505092915050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fd5b6000600386106136b257634e487b7160e01b600052602160045260246000fd5b858252608060208301526136c96080830186612dba565b6040830194909452506060015292915050565b8082028115828204841417610c4957610c496134e6565b60008261371057634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261372c57600080fd5b83016020810192503590506001600160401b0381111561374b57600080fd5b803603821315612cf657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101206137a28461379585612fcd565b6001600160a01b03169052565b602083013560208501526137b96040840184613715565b8260408701526137cc838701828461375a565b925050506137dd6060840184613715565b85830360608701526137f083828461375a565b925050506080830135608085015260a083013560a085015260c083013560c085015261381f60e0840184613715565b85830360e087015261383283828461375a565b9250505061010061384581850185613715565b8684038388015261385784828461375a565b979650505050505050565b6040815260006138756040830185613783565b90508260208301529392505050565b6060815260006138976060830186613783565b60208301949094525060400152919050565b6000602082840312156138bb57600080fd5b5051919050565b82815260606020820152600d60608201526c10504c8cc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6000806040838503121561391257600080fd5b82516001600160401b0381111561392857600080fd5b8301601f8101851361393957600080fd5b8051613947612f7e82612f38565b81815286602083850101111561395c57600080fd5b61396d826020830160208601612d96565b60209590950151949694955050505050565b82815260606020820152600d60608201526c10504cccc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6fffffffffffffffffffffffffffffffff1981358181169160108510156136645760109490940360031b84901b1690921692915050565b602081526000611faf60208301848661375a565b600060208284031215613a1957600080fd5b815161271a81612fb556fea2646970667358221220c6ad4b2b56624cba321cec929c4bdd6329f5811c936f40e8ff5cfb92ef9b433f64736f6c63430008170033608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004361003e3660046100ec565b61005f565b6040516001600160a01b03909116815260200160405180910390f35b60008061006f601482858761015e565b61007891610188565b60601c9050600061008c846014818861015e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509360209350849250905082850182875af190506000519350806100e357600093505b50505092915050565b600080602083850312156100ff57600080fd5b823567ffffffffffffffff8082111561011757600080fd5b818501915085601f83011261012b57600080fd5b81358181111561013a57600080fd5b86602082850101111561014c57600080fd5b60209290920196919550909350505050565b6000808585111561016e57600080fd5b8386111561017b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156101b55780818660140360031b1b83161692505b50509291505056fea2646970667358221220f5d91be997c659d0ef966f0c016a41e736500c794f93ad11197e128a54287a9964736f6c63430008170033\"\n","import { type Chain, type Hex, parseEther } from \"viem\"\nimport { ALL_ADDRESSES } from \"../addresses\"\nimport { getFundedAccount, toClients } from \"../utils\"\n\nexport type FundAccountsArgs = {\n  rpcUrl: string\n  chain: Chain\n  privateKey?: Hex\n}\n\nexport const fundAccounts = async ({ rpcUrl, chain }: FundAccountsArgs) => {\n  const { publicClient, testClient, walletClients } = await toClients({\n    rpcUrl,\n    chain\n  })\n\n  const accountsAndContracts = [\n    ...Object.values(ALL_ADDRESSES),\n    ...walletClients.map(({ account }) => account)\n  ]\n  for (const { address } of accountsAndContracts) {\n    const balance = await publicClient.getBalance({\n      address: address as `0x${string}`\n    })\n    if (balance > 0n) {\n      continue\n    }\n    await testClient.setBalance({\n      address: address as `0x${string}`,\n      value: parseEther(\"1\")\n    })\n  }\n}\n","import { portNumbers } from \"get-port\"\n// @ts-ignore\nimport { alto } from \"prool/instances\"\nimport {\n  ENTRYPOINT_V07_ADDRESS,\n  ENTRY_POINT_SIMULATIONS_ADDRESS\n} from \"./addresses\"\nimport type { NetworkArgs } from \"./toNetwork\"\nimport { getFreePort } from \"./utils\"\n\nexport type Bundler = Awaited<ReturnType<typeof toBundler>>\n\nexport type ToBundlerParameters = NetworkArgs & { port?: number }\nexport const toBundler = async (parameters: ToBundlerParameters) => {\n  const {\n    rpcUrl,\n    port = await getFreePort(5010, 5499),\n    privateKey\n  } = parameters\n  const url = `http://127.0.0.1:${port}`\n\n  const instance = alto({\n    entrypoints: [ENTRYPOINT_V07_ADDRESS],\n    entrypointSimulationContract: ENTRY_POINT_SIMULATIONS_ADDRESS,\n    rpcUrl,\n    utilityPrivateKey: privateKey,\n    executorPrivateKeys: [privateKey],\n    safeMode: false,\n    port\n  })\n\n  await instance.start()\n\n  // Now ensure the bundler is ready\n  while (true) {\n    try {\n      const chainIdResponse = await fetch(url, {\n        headers: {\n          \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify({\n          method: \"eth_chainId\",\n          params: [],\n          id: Date.now(),\n          jsonrpc: \"2.0\"\n        }),\n        method: \"POST\"\n      })\n      await chainIdResponse.json()\n      return { instance, port, url }\n    } catch {\n      await new Promise((resolve) => setTimeout(resolve, 1000))\n    }\n  }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","import {fileURLToPath} from 'node:url';\n\n// Allow some arguments/options to be either a file path string or a file URL\nexport const safeNormalizeFileUrl = (file, name) => {\n\tconst fileString = normalizeFileUrl(normalizeDenoExecPath(file));\n\n\tif (typeof fileString !== 'string') {\n\t\tthrow new TypeError(`${name} must be a string or a file URL: ${fileString}.`);\n\t}\n\n\treturn fileString;\n};\n\n// In Deno node:process execPath is a special object, not just a string:\n// https://github.com/denoland/deno/blob/f460188e583f00144000aa0d8ade08218d47c3c1/ext/node/polyfills/process.ts#L344\nconst normalizeDenoExecPath = file => isDenoExecPath(file)\n\t? file.toString()\n\t: file;\n\nexport const isDenoExecPath = file => typeof file !== 'string'\n\t&& file\n\t&& Object.getPrototypeOf(file) === String.prototype;\n\n// Same but also allows other values, e.g. `boolean` for the `shell` option\nexport const normalizeFileUrl = file => file instanceof URL ? fileURLToPath(file) : file;\n","import isPlainObject from 'is-plain-obj';\nimport {safeNormalizeFileUrl} from '../arguments/file-url.js';\n\n// The command `arguments` and `options` are both optional.\n// This also does basic validation on them and on the command file.\nexport const normalizeParameters = (rawFile, rawArguments = [], rawOptions = {}) => {\n\tconst filePath = safeNormalizeFileUrl(rawFile, 'First argument');\n\tconst [commandArguments, options] = isPlainObject(rawArguments)\n\t\t? [[], rawArguments]\n\t\t: [rawArguments, rawOptions];\n\n\tif (!Array.isArray(commandArguments)) {\n\t\tthrow new TypeError(`Second argument must be either an array of arguments or an options object: ${commandArguments}`);\n\t}\n\n\tif (commandArguments.some(commandArgument => typeof commandArgument === 'object' && commandArgument !== null)) {\n\t\tthrow new TypeError(`Second argument must be an array of strings: ${commandArguments}`);\n\t}\n\n\tconst normalizedArguments = commandArguments.map(String);\n\tconst nullByteArgument = normalizedArguments.find(normalizedArgument => normalizedArgument.includes('\\0'));\n\tif (nullByteArgument !== undefined) {\n\t\tthrow new TypeError(`Arguments cannot contain null bytes (\"\\\\0\"): ${nullByteArgument}`);\n\t}\n\n\tif (!isPlainObject(options)) {\n\t\tthrow new TypeError(`Last argument must be an options object: ${options}`);\n\t}\n\n\treturn [filePath, normalizedArguments, options];\n};\n","import {StringDecoder} from 'node:string_decoder';\n\nconst {toString: objectToString} = Object.prototype;\n\nexport const isArrayBuffer = value => objectToString.call(value) === '[object ArrayBuffer]';\n\n// Is either Uint8Array or Buffer\nexport const isUint8Array = value => objectToString.call(value) === '[object Uint8Array]';\n\nexport const bufferToUint8Array = buffer => new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\nconst textEncoder = new TextEncoder();\nconst stringToUint8Array = string => textEncoder.encode(string);\n\nconst textDecoder = new TextDecoder();\nexport const uint8ArrayToString = uint8Array => textDecoder.decode(uint8Array);\n\nexport const joinToString = (uint8ArraysOrStrings, encoding) => {\n\tconst strings = uint8ArraysToStrings(uint8ArraysOrStrings, encoding);\n\treturn strings.join('');\n};\n\nconst uint8ArraysToStrings = (uint8ArraysOrStrings, encoding) => {\n\tif (encoding === 'utf8' && uint8ArraysOrStrings.every(uint8ArrayOrString => typeof uint8ArrayOrString === 'string')) {\n\t\treturn uint8ArraysOrStrings;\n\t}\n\n\tconst decoder = new StringDecoder(encoding);\n\tconst strings = uint8ArraysOrStrings\n\t\t.map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string'\n\t\t\t? stringToUint8Array(uint8ArrayOrString)\n\t\t\t: uint8ArrayOrString)\n\t\t.map(uint8Array => decoder.write(uint8Array));\n\tconst finalString = decoder.end();\n\treturn finalString === '' ? strings : [...strings, finalString];\n};\n\nexport const joinToUint8Array = uint8ArraysOrStrings => {\n\tif (uint8ArraysOrStrings.length === 1 && isUint8Array(uint8ArraysOrStrings[0])) {\n\t\treturn uint8ArraysOrStrings[0];\n\t}\n\n\treturn concatUint8Arrays(stringsToUint8Arrays(uint8ArraysOrStrings));\n};\n\nconst stringsToUint8Arrays = uint8ArraysOrStrings => uint8ArraysOrStrings.map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string'\n\t? stringToUint8Array(uint8ArrayOrString)\n\t: uint8ArrayOrString);\n\nexport const concatUint8Arrays = uint8Arrays => {\n\tconst result = new Uint8Array(getJoinLength(uint8Arrays));\n\n\tlet index = 0;\n\tfor (const uint8Array of uint8Arrays) {\n\t\tresult.set(uint8Array, index);\n\t\tindex += uint8Array.length;\n\t}\n\n\treturn result;\n};\n\nconst getJoinLength = uint8Arrays => {\n\tlet joinLength = 0;\n\tfor (const uint8Array of uint8Arrays) {\n\t\tjoinLength += uint8Array.length;\n\t}\n\n\treturn joinLength;\n};\n","import {ChildProcess} from 'node:child_process';\nimport isPlainObject from 'is-plain-obj';\nimport {isUint8Array, uint8ArrayToString} from '../utils/uint-array.js';\n\n// Check whether the template string syntax is being used\nexport const isTemplateString = templates => Array.isArray(templates) && Array.isArray(templates.raw);\n\n// Convert execa`file ...commandArguments` to execa(file, commandArguments)\nexport const parseTemplates = (templates, expressions) => {\n\tlet tokens = [];\n\n\tfor (const [index, template] of templates.entries()) {\n\t\ttokens = parseTemplate({\n\t\t\ttemplates,\n\t\t\texpressions,\n\t\t\ttokens,\n\t\t\tindex,\n\t\t\ttemplate,\n\t\t});\n\t}\n\n\tif (tokens.length === 0) {\n\t\tthrow new TypeError('Template script must not be empty');\n\t}\n\n\tconst [file, ...commandArguments] = tokens;\n\treturn [file, commandArguments, {}];\n};\n\nconst parseTemplate = ({templates, expressions, tokens, index, template}) => {\n\tif (template === undefined) {\n\t\tthrow new TypeError(`Invalid backslash sequence: ${templates.raw[index]}`);\n\t}\n\n\tconst {nextTokens, leadingWhitespaces, trailingWhitespaces} = splitByWhitespaces(template, templates.raw[index]);\n\tconst newTokens = concatTokens(tokens, nextTokens, leadingWhitespaces);\n\n\tif (index === expressions.length) {\n\t\treturn newTokens;\n\t}\n\n\tconst expression = expressions[index];\n\tconst expressionTokens = Array.isArray(expression)\n\t\t? expression.map(expression => parseExpression(expression))\n\t\t: [parseExpression(expression)];\n\treturn concatTokens(newTokens, expressionTokens, trailingWhitespaces);\n};\n\n// Like `string.split(/[ \\t\\r\\n]+/)` except newlines and tabs are:\n//  - ignored when input as a backslash sequence like: `echo foo\\n bar`\n//  - not ignored when input directly\n// The only way to distinguish those in JavaScript is to use a tagged template and compare:\n//  - the first array argument, which does not escape backslash sequences\n//  - its `raw` property, which escapes them\nconst splitByWhitespaces = (template, rawTemplate) => {\n\tif (rawTemplate.length === 0) {\n\t\treturn {nextTokens: [], leadingWhitespaces: false, trailingWhitespaces: false};\n\t}\n\n\tconst nextTokens = [];\n\tlet templateStart = 0;\n\tconst leadingWhitespaces = DELIMITERS.has(rawTemplate[0]);\n\n\tfor (\n\t\tlet templateIndex = 0, rawIndex = 0;\n\t\ttemplateIndex < template.length;\n\t\ttemplateIndex += 1, rawIndex += 1\n\t) {\n\t\tconst rawCharacter = rawTemplate[rawIndex];\n\t\tif (DELIMITERS.has(rawCharacter)) {\n\t\t\tif (templateStart !== templateIndex) {\n\t\t\t\tnextTokens.push(template.slice(templateStart, templateIndex));\n\t\t\t}\n\n\t\t\ttemplateStart = templateIndex + 1;\n\t\t} else if (rawCharacter === '\\\\') {\n\t\t\tconst nextRawCharacter = rawTemplate[rawIndex + 1];\n\t\t\tif (nextRawCharacter === '\\n') {\n\t\t\t\t// Handles escaped newlines in templates\n\t\t\t\ttemplateIndex -= 1;\n\t\t\t\trawIndex += 1;\n\t\t\t} else if (nextRawCharacter === 'u' && rawTemplate[rawIndex + 2] === '{') {\n\t\t\t\trawIndex = rawTemplate.indexOf('}', rawIndex + 3);\n\t\t\t} else {\n\t\t\t\trawIndex += ESCAPE_LENGTH[nextRawCharacter] ?? 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst trailingWhitespaces = templateStart === template.length;\n\tif (!trailingWhitespaces) {\n\t\tnextTokens.push(template.slice(templateStart));\n\t}\n\n\treturn {nextTokens, leadingWhitespaces, trailingWhitespaces};\n};\n\nconst DELIMITERS = new Set([' ', '\\t', '\\r', '\\n']);\n\n// Number of characters in backslash escape sequences: \\0 \\xXX or \\uXXXX\n// \\cX is allowed in RegExps but not in strings\n// Octal sequences are not allowed in strict mode\nconst ESCAPE_LENGTH = {x: 3, u: 5};\n\nconst concatTokens = (tokens, nextTokens, isSeparated) => isSeparated\n\t|| tokens.length === 0\n\t|| nextTokens.length === 0\n\t? [...tokens, ...nextTokens]\n\t: [\n\t\t...tokens.slice(0, -1),\n\t\t`${tokens.at(-1)}${nextTokens[0]}`,\n\t\t...nextTokens.slice(1),\n\t];\n\n// Handle `${expression}` inside the template string syntax\nconst parseExpression = expression => {\n\tconst typeOfExpression = typeof expression;\n\n\tif (typeOfExpression === 'string') {\n\t\treturn expression;\n\t}\n\n\tif (typeOfExpression === 'number') {\n\t\treturn String(expression);\n\t}\n\n\tif (isPlainObject(expression) && ('stdout' in expression || 'isMaxBuffer' in expression)) {\n\t\treturn getSubprocessResult(expression);\n\t}\n\n\tif (expression instanceof ChildProcess || Object.prototype.toString.call(expression) === '[object Promise]') {\n\t\t// eslint-disable-next-line no-template-curly-in-string\n\t\tthrow new TypeError('Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}.');\n\t}\n\n\tthrow new TypeError(`Unexpected \"${typeOfExpression}\" in template expression`);\n};\n\nconst getSubprocessResult = ({stdout}) => {\n\tif (typeof stdout === 'string') {\n\t\treturn stdout;\n\t}\n\n\tif (isUint8Array(stdout)) {\n\t\treturn uint8ArrayToString(stdout);\n\t}\n\n\tif (stdout === undefined) {\n\t\tthrow new TypeError('Missing result.stdout in template expression. This is probably due to the previous subprocess\\' \"stdout\" option.');\n\t}\n\n\tthrow new TypeError(`Unexpected \"${typeof stdout}\" stdout in template expression`);\n};\n","import process from 'node:process';\n\nexport const isStandardStream = stream => STANDARD_STREAMS.includes(stream);\nexport const STANDARD_STREAMS = [process.stdin, process.stdout, process.stderr];\nexport const STANDARD_STREAMS_ALIASES = ['stdin', 'stdout', 'stderr'];\nexport const getStreamName = fdNumber => STANDARD_STREAMS_ALIASES[fdNumber] ?? `stdio[${fdNumber}]`;\n","import {debuglog} from 'node:util';\nimport isPlainObject from 'is-plain-obj';\nimport {STANDARD_STREAMS_ALIASES} from '../utils/standard-stream.js';\n\n// Some options can have different values for `stdout`/`stderr`/`fd3`.\n// This normalizes those to array of values.\n// For example, `{verbose: {stdout: 'none', stderr: 'full'}}` becomes `{verbose: ['none', 'none', 'full']}`\nexport const normalizeFdSpecificOptions = options => {\n\tconst optionsCopy = {...options};\n\n\tfor (const optionName of FD_SPECIFIC_OPTIONS) {\n\t\toptionsCopy[optionName] = normalizeFdSpecificOption(options, optionName);\n\t}\n\n\treturn optionsCopy;\n};\n\nexport const normalizeFdSpecificOption = (options, optionName) => {\n\tconst optionBaseArray = Array.from({length: getStdioLength(options) + 1});\n\tconst optionArray = normalizeFdSpecificValue(options[optionName], optionBaseArray, optionName);\n\treturn addDefaultValue(optionArray, optionName);\n};\n\nconst getStdioLength = ({stdio}) => Array.isArray(stdio)\n\t? Math.max(stdio.length, STANDARD_STREAMS_ALIASES.length)\n\t: STANDARD_STREAMS_ALIASES.length;\n\nconst normalizeFdSpecificValue = (optionValue, optionArray, optionName) => isPlainObject(optionValue)\n\t? normalizeOptionObject(optionValue, optionArray, optionName)\n\t: optionArray.fill(optionValue);\n\nconst normalizeOptionObject = (optionValue, optionArray, optionName) => {\n\tfor (const fdName of Object.keys(optionValue).sort(compareFdName)) {\n\t\tfor (const fdNumber of parseFdName(fdName, optionName, optionArray)) {\n\t\t\toptionArray[fdNumber] = optionValue[fdName];\n\t\t}\n\t}\n\n\treturn optionArray;\n};\n\n// Ensure priority order when setting both `stdout`/`stderr`, `fd1`/`fd2`, and `all`\nconst compareFdName = (fdNameA, fdNameB) => getFdNameOrder(fdNameA) < getFdNameOrder(fdNameB) ? 1 : -1;\n\nconst getFdNameOrder = fdName => {\n\tif (fdName === 'stdout' || fdName === 'stderr') {\n\t\treturn 0;\n\t}\n\n\treturn fdName === 'all' ? 2 : 1;\n};\n\nconst parseFdName = (fdName, optionName, optionArray) => {\n\tif (fdName === 'ipc') {\n\t\treturn [optionArray.length - 1];\n\t}\n\n\tconst fdNumber = parseFd(fdName);\n\tif (fdNumber === undefined || fdNumber === 0) {\n\t\tthrow new TypeError(`\"${optionName}.${fdName}\" is invalid.\nIt must be \"${optionName}.stdout\", \"${optionName}.stderr\", \"${optionName}.all\", \"${optionName}.ipc\", or \"${optionName}.fd3\", \"${optionName}.fd4\" (and so on).`);\n\t}\n\n\tif (fdNumber >= optionArray.length) {\n\t\tthrow new TypeError(`\"${optionName}.${fdName}\" is invalid: that file descriptor does not exist.\nPlease set the \"stdio\" option to ensure that file descriptor exists.`);\n\t}\n\n\treturn fdNumber === 'all' ? [1, 2] : [fdNumber];\n};\n\n// Use the same syntax for fd-specific options and the `from`/`to` options\nexport const parseFd = fdName => {\n\tif (fdName === 'all') {\n\t\treturn fdName;\n\t}\n\n\tif (STANDARD_STREAMS_ALIASES.includes(fdName)) {\n\t\treturn STANDARD_STREAMS_ALIASES.indexOf(fdName);\n\t}\n\n\tconst regexpResult = FD_REGEXP.exec(fdName);\n\tif (regexpResult !== null) {\n\t\treturn Number(regexpResult[1]);\n\t}\n};\n\nconst FD_REGEXP = /^fd(\\d+)$/;\n\nconst addDefaultValue = (optionArray, optionName) => optionArray.map(optionValue => optionValue === undefined\n\t? DEFAULT_OPTIONS[optionName]\n\t: optionValue);\n\n// Default value for the `verbose` option\nconst verboseDefault = debuglog('execa').enabled ? 'full' : 'none';\n\nconst DEFAULT_OPTIONS = {\n\tlines: false,\n\tbuffer: true,\n\tmaxBuffer: 1000 * 1000 * 100,\n\tverbose: verboseDefault,\n\tstripFinalNewline: true,\n};\n\n// List of options which can have different values for `stdout`/`stderr`\nexport const FD_SPECIFIC_OPTIONS = ['lines', 'buffer', 'maxBuffer', 'verbose', 'stripFinalNewline'];\n\n// Retrieve fd-specific option\nexport const getFdSpecificValue = (optionArray, fdNumber) => fdNumber === 'ipc'\n\t? optionArray.at(-1)\n\t: optionArray[fdNumber];\n","import {getFdSpecificValue} from '../arguments/specific.js';\n\n// The `verbose` option can have different values for `stdout`/`stderr`\nexport const isVerbose = ({verbose}, fdNumber) => getFdVerbose(verbose, fdNumber) !== 'none';\n\n// Whether IPC and output and logged\nexport const isFullVerbose = ({verbose}, fdNumber) => !['none', 'short'].includes(getFdVerbose(verbose, fdNumber));\n\n// The `verbose` option can be a function to customize logging\nexport const getVerboseFunction = ({verbose}, fdNumber) => {\n\tconst fdVerbose = getFdVerbose(verbose, fdNumber);\n\treturn isVerboseFunction(fdVerbose) ? fdVerbose : undefined;\n};\n\n// When using `verbose: {stdout, stderr, fd3, ipc}`:\n//  - `verbose.stdout|stderr|fd3` is used for 'output'\n//  - `verbose.ipc` is only used for 'ipc'\n//  - highest `verbose.*` value is used for 'command', 'error' and 'duration'\nconst getFdVerbose = (verbose, fdNumber) => fdNumber === undefined\n\t? getFdGenericVerbose(verbose)\n\t: getFdSpecificValue(verbose, fdNumber);\n\n// When using `verbose: {stdout, stderr, fd3, ipc}` and logging is not specific to a file descriptor.\n// We then use the highest `verbose.*` value, using the following order:\n//  - function > 'full' > 'short' > 'none'\n//  - if several functions are defined: stdout > stderr > fd3 > ipc\nconst getFdGenericVerbose = verbose => verbose.find(fdVerbose => isVerboseFunction(fdVerbose))\n\t?? VERBOSE_VALUES.findLast(fdVerbose => verbose.includes(fdVerbose));\n\n// Whether the `verbose` option is customized using a function\nexport const isVerboseFunction = fdVerbose => typeof fdVerbose === 'function';\n\nexport const VERBOSE_VALUES = ['none', 'short', 'full'];\n","import {platform} from 'node:process';\nimport {stripVTControlCharacters} from 'node:util';\n\n// Compute `result.command` and `result.escapedCommand`\nexport const joinCommand = (filePath, rawArguments) => {\n\tconst fileAndArguments = [filePath, ...rawArguments];\n\tconst command = fileAndArguments.join(' ');\n\tconst escapedCommand = fileAndArguments\n\t\t.map(fileAndArgument => quoteString(escapeControlCharacters(fileAndArgument)))\n\t\t.join(' ');\n\treturn {command, escapedCommand};\n};\n\n// Remove ANSI sequences and escape control characters and newlines\nexport const escapeLines = lines => stripVTControlCharacters(lines)\n\t.split('\\n')\n\t.map(line => escapeControlCharacters(line))\n\t.join('\\n');\n\nconst escapeControlCharacters = line => line.replaceAll(SPECIAL_CHAR_REGEXP, character => escapeControlCharacter(character));\n\nconst escapeControlCharacter = character => {\n\tconst commonEscape = COMMON_ESCAPES[character];\n\tif (commonEscape !== undefined) {\n\t\treturn commonEscape;\n\t}\n\n\tconst codepoint = character.codePointAt(0);\n\tconst codepointHex = codepoint.toString(16);\n\treturn codepoint <= ASTRAL_START\n\t\t? `\\\\u${codepointHex.padStart(4, '0')}`\n\t\t: `\\\\U${codepointHex}`;\n};\n\n// Characters that would create issues when printed are escaped using the \\u or \\U notation.\n// Those include control characters and newlines.\n// The \\u and \\U notation is Bash specific, but there is no way to do this in a shell-agnostic way.\n// Some shells do not even have a way to print those characters in an escaped fashion.\n// Therefore, we prioritize printing those safely, instead of allowing those to be copy-pasted.\n// List of Unicode character categories: https://www.fileformat.info/info/unicode/category/index.htm\nconst getSpecialCharRegExp = () => {\n\ttry {\n\t\t// This throws when using Node.js without ICU support.\n\t\t// When using a RegExp literal, this would throw at parsing-time, instead of runtime.\n\t\t// eslint-disable-next-line prefer-regex-literals\n\t\treturn new RegExp('\\\\p{Separator}|\\\\p{Other}', 'gu');\n\t} catch {\n\t\t// Similar to the above RegExp, but works even when Node.js has been built without ICU support.\n\t\t// Unlike the above RegExp, it only covers whitespaces and C0/C1 control characters.\n\t\t// It does not cover some edge cases, such as Unicode reserved characters.\n\t\t// See https://github.com/sindresorhus/execa/issues/1143\n\t\t// eslint-disable-next-line no-control-regex\n\t\treturn /[\\s\\u0000-\\u001F\\u007F-\\u009F\\u00AD]/g;\n\t}\n};\n\nconst SPECIAL_CHAR_REGEXP = getSpecialCharRegExp();\n\n// Accepted by $'...' in Bash.\n// Exclude \\a \\e \\v which are accepted in Bash but not in JavaScript (except \\v) and JSON.\nconst COMMON_ESCAPES = {\n\t' ': ' ',\n\t'\\b': '\\\\b',\n\t'\\f': '\\\\f',\n\t'\\n': '\\\\n',\n\t'\\r': '\\\\r',\n\t'\\t': '\\\\t',\n};\n\n// Up until that codepoint, \\u notation can be used instead of \\U\nconst ASTRAL_START = 65_535;\n\n// Some characters are shell-specific, i.e. need to be escaped when the command is copy-pasted then run.\n// Escaping is shell-specific. We cannot know which shell is used: `process.platform` detection is not enough.\n// For example, Windows users could be using `cmd.exe`, Powershell or Bash for Windows which all use different escaping.\n// We use '...' on Unix, which is POSIX shell compliant and escape all characters but ' so this is fairly safe.\n// On Windows, we assume cmd.exe is used and escape with \"...\", which also works with Powershell.\nconst quoteString = escapedArgument => {\n\tif (NO_ESCAPE_REGEXP.test(escapedArgument)) {\n\t\treturn escapedArgument;\n\t}\n\n\treturn platform === 'win32'\n\t\t? `\"${escapedArgument.replaceAll('\"', '\"\"')}\"`\n\t\t: `'${escapedArgument.replaceAll('\\'', '\\'\\\\\\'\\'')}'`;\n};\n\nconst NO_ESCAPE_REGEXP = /^[\\w./-]+$/;\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import isUnicodeSupported from 'is-unicode-supported';\n\nconst common = {\n\tcircleQuestionMark: '(?)',\n\tquestionMarkPrefix: '(?)',\n\tsquare: '█',\n\tsquareDarkShade: '▓',\n\tsquareMediumShade: '▒',\n\tsquareLightShade: '░',\n\tsquareTop: '▀',\n\tsquareBottom: '▄',\n\tsquareLeft: '▌',\n\tsquareRight: '▐',\n\tsquareCenter: '■',\n\tbullet: '●',\n\tdot: '․',\n\tellipsis: '…',\n\tpointerSmall: '›',\n\ttriangleUp: '▲',\n\ttriangleUpSmall: '▴',\n\ttriangleDown: '▼',\n\ttriangleDownSmall: '▾',\n\ttriangleLeftSmall: '◂',\n\ttriangleRightSmall: '▸',\n\thome: '⌂',\n\theart: '♥',\n\tmusicNote: '♪',\n\tmusicNoteBeamed: '♫',\n\tarrowUp: '↑',\n\tarrowDown: '↓',\n\tarrowLeft: '←',\n\tarrowRight: '→',\n\tarrowLeftRight: '↔',\n\tarrowUpDown: '↕',\n\talmostEqual: '≈',\n\tnotEqual: '≠',\n\tlessOrEqual: '≤',\n\tgreaterOrEqual: '≥',\n\tidentical: '≡',\n\tinfinity: '∞',\n\tsubscriptZero: '₀',\n\tsubscriptOne: '₁',\n\tsubscriptTwo: '₂',\n\tsubscriptThree: '₃',\n\tsubscriptFour: '₄',\n\tsubscriptFive: '₅',\n\tsubscriptSix: '₆',\n\tsubscriptSeven: '₇',\n\tsubscriptEight: '₈',\n\tsubscriptNine: '₉',\n\toneHalf: '½',\n\toneThird: '⅓',\n\toneQuarter: '¼',\n\toneFifth: '⅕',\n\toneSixth: '⅙',\n\toneEighth: '⅛',\n\ttwoThirds: '⅔',\n\ttwoFifths: '⅖',\n\tthreeQuarters: '¾',\n\tthreeFifths: '⅗',\n\tthreeEighths: '⅜',\n\tfourFifths: '⅘',\n\tfiveSixths: '⅚',\n\tfiveEighths: '⅝',\n\tsevenEighths: '⅞',\n\tline: '─',\n\tlineBold: '━',\n\tlineDouble: '═',\n\tlineDashed0: '┄',\n\tlineDashed1: '┅',\n\tlineDashed2: '┈',\n\tlineDashed3: '┉',\n\tlineDashed4: '╌',\n\tlineDashed5: '╍',\n\tlineDashed6: '╴',\n\tlineDashed7: '╶',\n\tlineDashed8: '╸',\n\tlineDashed9: '╺',\n\tlineDashed10: '╼',\n\tlineDashed11: '╾',\n\tlineDashed12: '−',\n\tlineDashed13: '–',\n\tlineDashed14: '‐',\n\tlineDashed15: '⁃',\n\tlineVertical: '│',\n\tlineVerticalBold: '┃',\n\tlineVerticalDouble: '║',\n\tlineVerticalDashed0: '┆',\n\tlineVerticalDashed1: '┇',\n\tlineVerticalDashed2: '┊',\n\tlineVerticalDashed3: '┋',\n\tlineVerticalDashed4: '╎',\n\tlineVerticalDashed5: '╏',\n\tlineVerticalDashed6: '╵',\n\tlineVerticalDashed7: '╷',\n\tlineVerticalDashed8: '╹',\n\tlineVerticalDashed9: '╻',\n\tlineVerticalDashed10: '╽',\n\tlineVerticalDashed11: '╿',\n\tlineDownLeft: '┐',\n\tlineDownLeftArc: '╮',\n\tlineDownBoldLeftBold: '┓',\n\tlineDownBoldLeft: '┒',\n\tlineDownLeftBold: '┑',\n\tlineDownDoubleLeftDouble: '╗',\n\tlineDownDoubleLeft: '╖',\n\tlineDownLeftDouble: '╕',\n\tlineDownRight: '┌',\n\tlineDownRightArc: '╭',\n\tlineDownBoldRightBold: '┏',\n\tlineDownBoldRight: '┎',\n\tlineDownRightBold: '┍',\n\tlineDownDoubleRightDouble: '╔',\n\tlineDownDoubleRight: '╓',\n\tlineDownRightDouble: '╒',\n\tlineUpLeft: '┘',\n\tlineUpLeftArc: '╯',\n\tlineUpBoldLeftBold: '┛',\n\tlineUpBoldLeft: '┚',\n\tlineUpLeftBold: '┙',\n\tlineUpDoubleLeftDouble: '╝',\n\tlineUpDoubleLeft: '╜',\n\tlineUpLeftDouble: '╛',\n\tlineUpRight: '└',\n\tlineUpRightArc: '╰',\n\tlineUpBoldRightBold: '┗',\n\tlineUpBoldRight: '┖',\n\tlineUpRightBold: '┕',\n\tlineUpDoubleRightDouble: '╚',\n\tlineUpDoubleRight: '╙',\n\tlineUpRightDouble: '╘',\n\tlineUpDownLeft: '┤',\n\tlineUpBoldDownBoldLeftBold: '┫',\n\tlineUpBoldDownBoldLeft: '┨',\n\tlineUpDownLeftBold: '┥',\n\tlineUpBoldDownLeftBold: '┩',\n\tlineUpDownBoldLeftBold: '┪',\n\tlineUpDownBoldLeft: '┧',\n\tlineUpBoldDownLeft: '┦',\n\tlineUpDoubleDownDoubleLeftDouble: '╣',\n\tlineUpDoubleDownDoubleLeft: '╢',\n\tlineUpDownLeftDouble: '╡',\n\tlineUpDownRight: '├',\n\tlineUpBoldDownBoldRightBold: '┣',\n\tlineUpBoldDownBoldRight: '┠',\n\tlineUpDownRightBold: '┝',\n\tlineUpBoldDownRightBold: '┡',\n\tlineUpDownBoldRightBold: '┢',\n\tlineUpDownBoldRight: '┟',\n\tlineUpBoldDownRight: '┞',\n\tlineUpDoubleDownDoubleRightDouble: '╠',\n\tlineUpDoubleDownDoubleRight: '╟',\n\tlineUpDownRightDouble: '╞',\n\tlineDownLeftRight: '┬',\n\tlineDownBoldLeftBoldRightBold: '┳',\n\tlineDownLeftBoldRightBold: '┯',\n\tlineDownBoldLeftRight: '┰',\n\tlineDownBoldLeftBoldRight: '┱',\n\tlineDownBoldLeftRightBold: '┲',\n\tlineDownLeftRightBold: '┮',\n\tlineDownLeftBoldRight: '┭',\n\tlineDownDoubleLeftDoubleRightDouble: '╦',\n\tlineDownDoubleLeftRight: '╥',\n\tlineDownLeftDoubleRightDouble: '╤',\n\tlineUpLeftRight: '┴',\n\tlineUpBoldLeftBoldRightBold: '┻',\n\tlineUpLeftBoldRightBold: '┷',\n\tlineUpBoldLeftRight: '┸',\n\tlineUpBoldLeftBoldRight: '┹',\n\tlineUpBoldLeftRightBold: '┺',\n\tlineUpLeftRightBold: '┶',\n\tlineUpLeftBoldRight: '┵',\n\tlineUpDoubleLeftDoubleRightDouble: '╩',\n\tlineUpDoubleLeftRight: '╨',\n\tlineUpLeftDoubleRightDouble: '╧',\n\tlineUpDownLeftRight: '┼',\n\tlineUpBoldDownBoldLeftBoldRightBold: '╋',\n\tlineUpDownBoldLeftBoldRightBold: '╈',\n\tlineUpBoldDownLeftBoldRightBold: '╇',\n\tlineUpBoldDownBoldLeftRightBold: '╊',\n\tlineUpBoldDownBoldLeftBoldRight: '╉',\n\tlineUpBoldDownLeftRight: '╀',\n\tlineUpDownBoldLeftRight: '╁',\n\tlineUpDownLeftBoldRight: '┽',\n\tlineUpDownLeftRightBold: '┾',\n\tlineUpBoldDownBoldLeftRight: '╂',\n\tlineUpDownLeftBoldRightBold: '┿',\n\tlineUpBoldDownLeftBoldRight: '╃',\n\tlineUpBoldDownLeftRightBold: '╄',\n\tlineUpDownBoldLeftBoldRight: '╅',\n\tlineUpDownBoldLeftRightBold: '╆',\n\tlineUpDoubleDownDoubleLeftDoubleRightDouble: '╬',\n\tlineUpDoubleDownDoubleLeftRight: '╫',\n\tlineUpDownLeftDoubleRightDouble: '╪',\n\tlineCross: '╳',\n\tlineBackslash: '╲',\n\tlineSlash: '╱',\n};\n\nconst specialMainSymbols = {\n\ttick: '✔',\n\tinfo: 'ℹ',\n\twarning: '⚠',\n\tcross: '✘',\n\tsquareSmall: '◻',\n\tsquareSmallFilled: '◼',\n\tcircle: '◯',\n\tcircleFilled: '◉',\n\tcircleDotted: '◌',\n\tcircleDouble: '◎',\n\tcircleCircle: 'ⓞ',\n\tcircleCross: 'ⓧ',\n\tcirclePipe: 'Ⓘ',\n\tradioOn: '◉',\n\tradioOff: '◯',\n\tcheckboxOn: '☒',\n\tcheckboxOff: '☐',\n\tcheckboxCircleOn: 'ⓧ',\n\tcheckboxCircleOff: 'Ⓘ',\n\tpointer: '❯',\n\ttriangleUpOutline: '△',\n\ttriangleLeft: '◀',\n\ttriangleRight: '▶',\n\tlozenge: '◆',\n\tlozengeOutline: '◇',\n\thamburger: '☰',\n\tsmiley: '㋡',\n\tmustache: '෴',\n\tstar: '★',\n\tplay: '▶',\n\tnodejs: '⬢',\n\toneSeventh: '⅐',\n\toneNinth: '⅑',\n\toneTenth: '⅒',\n};\n\nconst specialFallbackSymbols = {\n\ttick: '√',\n\tinfo: 'i',\n\twarning: '‼',\n\tcross: '×',\n\tsquareSmall: '□',\n\tsquareSmallFilled: '■',\n\tcircle: '( )',\n\tcircleFilled: '(*)',\n\tcircleDotted: '( )',\n\tcircleDouble: '( )',\n\tcircleCircle: '(○)',\n\tcircleCross: '(×)',\n\tcirclePipe: '(│)',\n\tradioOn: '(*)',\n\tradioOff: '( )',\n\tcheckboxOn: '[×]',\n\tcheckboxOff: '[ ]',\n\tcheckboxCircleOn: '(×)',\n\tcheckboxCircleOff: '( )',\n\tpointer: '>',\n\ttriangleUpOutline: '∆',\n\ttriangleLeft: '◄',\n\ttriangleRight: '►',\n\tlozenge: '♦',\n\tlozengeOutline: '◊',\n\thamburger: '≡',\n\tsmiley: '☺',\n\tmustache: '┌─┐',\n\tstar: '✶',\n\tplay: '►',\n\tnodejs: '♦',\n\toneSeventh: '1/7',\n\toneNinth: '1/9',\n\toneTenth: '1/10',\n};\n\nexport const mainSymbols = {...common, ...specialMainSymbols};\nexport const fallbackSymbols = {...common, ...specialFallbackSymbols};\n\nconst shouldUseMain = isUnicodeSupported();\nconst figures = shouldUseMain ? mainSymbols : fallbackSymbols;\nexport default figures;\n\nconst replacements = Object.entries(specialMainSymbols);\n\n// On terminals which do not support Unicode symbols, substitute them to other symbols\nexport const replaceSymbols = (string, {useFallback = !shouldUseMain} = {}) => {\n\tif (useFallback) {\n\t\tfor (const [key, mainSymbol] of replacements) {\n\t\t\tstring = string.replaceAll(mainSymbol, fallbackSymbols[key]);\n\t\t}\n\t}\n\n\treturn string;\n};\n","import tty from 'node:tty';\n\n// eslint-disable-next-line no-warning-comments\n// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)\n// Lots of optionals here to support Deno.\nconst hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;\n\nconst format = (open, close) => {\n\tif (!hasColors) {\n\t\treturn input => input;\n\t}\n\n\tconst openCode = `\\u001B[${open}m`;\n\tconst closeCode = `\\u001B[${close}m`;\n\n\treturn input => {\n\t\tconst string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.\n\t\tlet index = string.indexOf(closeCode);\n\n\t\tif (index === -1) {\n\t\t\t// Note: Intentionally not using string interpolation for performance reasons.\n\t\t\treturn openCode + string + closeCode;\n\t\t}\n\n\t\t// Handle nested colors.\n\n\t\t// We could have done this, but it's too slow (as of Node.js 22).\n\t\t// return openCode + string.replaceAll(closeCode, openCode) + closeCode;\n\n\t\tlet result = openCode;\n\t\tlet lastIndex = 0;\n\n\t\twhile (index !== -1) {\n\t\t\tresult += string.slice(lastIndex, index) + openCode;\n\t\t\tlastIndex = index + closeCode.length;\n\t\t\tindex = string.indexOf(closeCode, lastIndex);\n\t\t}\n\n\t\tresult += string.slice(lastIndex) + closeCode;\n\n\t\treturn result;\n\t};\n};\n\nexport const reset = format(0, 0);\nexport const bold = format(1, 22);\nexport const dim = format(2, 22);\nexport const italic = format(3, 23);\nexport const underline = format(4, 24);\nexport const overline = format(53, 55);\nexport const inverse = format(7, 27);\nexport const hidden = format(8, 28);\nexport const strikethrough = format(9, 29);\n\nexport const black = format(30, 39);\nexport const red = format(31, 39);\nexport const green = format(32, 39);\nexport const yellow = format(33, 39);\nexport const blue = format(34, 39);\nexport const magenta = format(35, 39);\nexport const cyan = format(36, 39);\nexport const white = format(37, 39);\nexport const gray = format(90, 39);\n\nexport const bgBlack = format(40, 49);\nexport const bgRed = format(41, 49);\nexport const bgGreen = format(42, 49);\nexport const bgYellow = format(43, 49);\nexport const bgBlue = format(44, 49);\nexport const bgMagenta = format(45, 49);\nexport const bgCyan = format(46, 49);\nexport const bgWhite = format(47, 49);\nexport const bgGray = format(100, 49);\n\nexport const redBright = format(91, 39);\nexport const greenBright = format(92, 39);\nexport const yellowBright = format(93, 39);\nexport const blueBright = format(94, 39);\nexport const magentaBright = format(95, 39);\nexport const cyanBright = format(96, 39);\nexport const whiteBright = format(97, 39);\n\nexport const bgRedBright = format(101, 49);\nexport const bgGreenBright = format(102, 49);\nexport const bgYellowBright = format(103, 49);\nexport const bgBlueBright = format(104, 49);\nexport const bgMagentaBright = format(105, 49);\nexport const bgCyanBright = format(106, 49);\nexport const bgWhiteBright = format(107, 49);\n","import figures from 'figures';\nimport {\n\tgray,\n\tbold,\n\tredBright,\n\tyellowBright,\n} from 'yoctocolors';\n\n// Default when `verbose` is not a function\nexport const defaultVerboseFunction = ({\n\ttype,\n\tmessage,\n\ttimestamp,\n\tpiped,\n\tcommandId,\n\tresult: {failed = false} = {},\n\toptions: {reject = true},\n}) => {\n\tconst timestampString = serializeTimestamp(timestamp);\n\tconst icon = ICONS[type]({failed, reject, piped});\n\tconst color = COLORS[type]({reject});\n\treturn `${gray(`[${timestampString}]`)} ${gray(`[${commandId}]`)} ${color(icon)} ${color(message)}`;\n};\n\n// Prepending the timestamp allows debugging the slow paths of a subprocess\nconst serializeTimestamp = timestamp => `${padField(timestamp.getHours(), 2)}:${padField(timestamp.getMinutes(), 2)}:${padField(timestamp.getSeconds(), 2)}.${padField(timestamp.getMilliseconds(), 3)}`;\n\nconst padField = (field, padding) => String(field).padStart(padding, '0');\n\nconst getFinalIcon = ({failed, reject}) => {\n\tif (!failed) {\n\t\treturn figures.tick;\n\t}\n\n\treturn reject ? figures.cross : figures.warning;\n};\n\nconst ICONS = {\n\tcommand: ({piped}) => piped ? '|' : '$',\n\toutput: () => ' ',\n\tipc: () => '*',\n\terror: getFinalIcon,\n\tduration: getFinalIcon,\n};\n\nconst identity = string => string;\n\nconst COLORS = {\n\tcommand: () => bold,\n\toutput: () => identity,\n\tipc: () => identity,\n\terror: ({reject}) => reject ? redBright : yellowBright,\n\tduration: () => gray,\n};\n","import {getVerboseFunction} from './values.js';\n\n// Apply the `verbose` function on each line\nexport const applyVerboseOnLines = (printedLines, verboseInfo, fdNumber) => {\n\tconst verboseFunction = getVerboseFunction(verboseInfo, fdNumber);\n\treturn printedLines\n\t\t.map(({verboseLine, verboseObject}) => applyVerboseFunction(verboseLine, verboseObject, verboseFunction))\n\t\t.filter(printedLine => printedLine !== undefined)\n\t\t.map(printedLine => appendNewline(printedLine))\n\t\t.join('');\n};\n\nconst applyVerboseFunction = (verboseLine, verboseObject, verboseFunction) => {\n\tif (verboseFunction === undefined) {\n\t\treturn verboseLine;\n\t}\n\n\tconst printedLine = verboseFunction(verboseLine, verboseObject);\n\tif (typeof printedLine === 'string') {\n\t\treturn printedLine;\n\t}\n};\n\nconst appendNewline = printedLine => printedLine.endsWith('\\n')\n\t? printedLine\n\t: `${printedLine}\\n`;\n","import {inspect} from 'node:util';\nimport {escapeLines} from '../arguments/escape.js';\nimport {defaultVerboseFunction} from './default.js';\nimport {applyVerboseOnLines} from './custom.js';\n\n// This prints on stderr.\n// If the subprocess prints on stdout and is using `stdout: 'inherit'`,\n// there is a chance both writes will compete (introducing a race condition).\n// This means their respective order is not deterministic.\n// In particular, this means the verbose command lines might be after the start of the subprocess output.\n// Using synchronous I/O does not solve this problem.\n// However, this only seems to happen when the stdout/stderr target\n// (e.g. a terminal) is being written to by many subprocesses at once, which is unlikely in real scenarios.\nexport const verboseLog = ({type, verboseMessage, fdNumber, verboseInfo, result}) => {\n\tconst verboseObject = getVerboseObject({type, result, verboseInfo});\n\tconst printedLines = getPrintedLines(verboseMessage, verboseObject);\n\tconst finalLines = applyVerboseOnLines(printedLines, verboseInfo, fdNumber);\n\tif (finalLines !== '') {\n\t\tconsole.warn(finalLines.slice(0, -1));\n\t}\n};\n\nconst getVerboseObject = ({\n\ttype,\n\tresult,\n\tverboseInfo: {escapedCommand, commandId, rawOptions: {piped = false, ...options}},\n}) => ({\n\ttype,\n\tescapedCommand,\n\tcommandId: `${commandId}`,\n\ttimestamp: new Date(),\n\tpiped,\n\tresult,\n\toptions,\n});\n\nconst getPrintedLines = (verboseMessage, verboseObject) => verboseMessage\n\t.split('\\n')\n\t.map(message => getPrintedLine({...verboseObject, message}));\n\nconst getPrintedLine = verboseObject => {\n\tconst verboseLine = defaultVerboseFunction(verboseObject);\n\treturn {verboseLine, verboseObject};\n};\n\n// Serialize any type to a line string, for logging\nexport const serializeVerboseMessage = message => {\n\tconst messageString = typeof message === 'string' ? message : inspect(message);\n\tconst escapedMessage = escapeLines(messageString);\n\treturn escapedMessage.replaceAll('\\t', ' '.repeat(TAB_SIZE));\n};\n\n// Same as `util.inspect()`\nconst TAB_SIZE = 2;\n","import {isVerbose} from './values.js';\nimport {verboseLog} from './log.js';\n\n// When `verbose` is `short|full|custom`, print each command\nexport const logCommand = (escapedCommand, verboseInfo) => {\n\tif (!isVerbose(verboseInfo)) {\n\t\treturn;\n\t}\n\n\tverboseLog({\n\t\ttype: 'command',\n\t\tverboseMessage: escapedCommand,\n\t\tverboseInfo,\n\t});\n};\n","import {isVerbose, VERBOSE_VALUES, isVerboseFunction} from './values.js';\n\n// Information computed before spawning, used by the `verbose` option\nexport const getVerboseInfo = (verbose, escapedCommand, rawOptions) => {\n\tvalidateVerbose(verbose);\n\tconst commandId = getCommandId(verbose);\n\treturn {\n\t\tverbose,\n\t\tescapedCommand,\n\t\tcommandId,\n\t\trawOptions,\n\t};\n};\n\nconst getCommandId = verbose => isVerbose({verbose}) ? COMMAND_ID++ : undefined;\n\n// Prepending the `pid` is useful when multiple commands print their output at the same time.\n// However, we cannot use the real PID since this is not available with `child_process.spawnSync()`.\n// Also, we cannot use the real PID if we want to print it before `child_process.spawn()` is run.\n// As a pro, it is shorter than a normal PID and never re-uses the same id.\n// As a con, it cannot be used to send signals.\nlet COMMAND_ID = 0n;\n\nconst validateVerbose = verbose => {\n\tfor (const fdVerbose of verbose) {\n\t\tif (fdVerbose === false) {\n\t\t\tthrow new TypeError('The \"verbose: false\" option was renamed to \"verbose: \\'none\\'\".');\n\t\t}\n\n\t\tif (fdVerbose === true) {\n\t\t\tthrow new TypeError('The \"verbose: true\" option was renamed to \"verbose: \\'short\\'\".');\n\t\t}\n\n\t\tif (!VERBOSE_VALUES.includes(fdVerbose) && !isVerboseFunction(fdVerbose)) {\n\t\t\tconst allowedValues = VERBOSE_VALUES.map(allowedValue => `'${allowedValue}'`).join(', ');\n\t\t\tthrow new TypeError(`The \"verbose\" option must not be ${fdVerbose}. Allowed values are: ${allowedValues} or a function.`);\n\t\t}\n\t}\n};\n","import {hrtime} from 'node:process';\n\n// Start counting time before spawning the subprocess\nexport const getStartTime = () => hrtime.bigint();\n\n// Compute duration after the subprocess ended.\n// Printed by the `verbose` option.\nexport const getDurationMs = startTime => Number(hrtime.bigint() - startTime) / 1e6;\n","import {logCommand} from '../verbose/start.js';\nimport {getVerboseInfo} from '../verbose/info.js';\nimport {getStartTime} from '../return/duration.js';\nimport {joinCommand} from './escape.js';\nimport {normalizeFdSpecificOption} from './specific.js';\n\n// Compute `result.command`, `result.escapedCommand` and `verbose`-related information\nexport const handleCommand = (filePath, rawArguments, rawOptions) => {\n\tconst startTime = getStartTime();\n\tconst {command, escapedCommand} = joinCommand(filePath, rawArguments);\n\tconst verbose = normalizeFdSpecificOption(rawOptions, 'verbose');\n\tconst verboseInfo = getVerboseInfo(verbose, escapedCommand, {...rawOptions});\n\tlogCommand(escapedCommand, verboseInfo);\n\treturn {\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\tverboseInfo,\n\t};\n};\n","export default function pathKey(options = {}) {\n\tconst {\n\t\tenv = process.env,\n\t\tplatform = process.platform\n\t} = options;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(env).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n}\n","import {promisify} from 'node:util';\nimport {execFile as execFileCallback, execFileSync as execFileSyncOriginal} from 'node:child_process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nconst execFileOriginal = promisify(execFileCallback);\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport function rootDirectory(pathInput) {\n\treturn path.parse(toPath(pathInput)).root;\n}\n\nexport function traversePathUp(startPath) {\n\treturn {\n\t\t* [Symbol.iterator]() {\n\t\t\tlet currentPath = path.resolve(toPath(startPath));\n\t\t\tlet previousPath;\n\n\t\t\twhile (previousPath !== currentPath) {\n\t\t\t\tyield currentPath;\n\t\t\t\tpreviousPath = currentPath;\n\t\t\t\tcurrentPath = path.resolve(currentPath, '..');\n\t\t\t}\n\t\t},\n\t};\n}\n\nconst TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;\n\nexport async function execFile(file, arguments_, options = {}) {\n\treturn execFileOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\t...options,\n\t});\n}\n\nexport function execFileSync(file, arguments_ = [], options = {}) {\n\treturn execFileSyncOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\tencoding: 'utf8',\n\t\tstdio: 'pipe',\n\t\t...options,\n\t});\n}\n\nexport * from './default.js';\n","import process from 'node:process';\nimport path from 'node:path';\nimport pathKey from 'path-key';\nimport {toPath, traversePathUp} from 'unicorn-magic';\n\nexport const npmRunPath = ({\n\tcwd = process.cwd(),\n\tpath: pathOption = process.env[pathKey()],\n\tpreferLocal = true,\n\texecPath = process.execPath,\n\taddExecPath = true,\n} = {}) => {\n\tconst cwdPath = path.resolve(toPath(cwd));\n\tconst result = [];\n\tconst pathParts = pathOption.split(path.delimiter);\n\n\tif (preferLocal) {\n\t\tapplyPreferLocal(result, pathParts, cwdPath);\n\t}\n\n\tif (addExecPath) {\n\t\tapplyExecPath(result, pathParts, execPath, cwdPath);\n\t}\n\n\treturn pathOption === '' || pathOption === path.delimiter\n\t\t? `${result.join(path.delimiter)}${pathOption}`\n\t\t: [...result, pathOption].join(path.delimiter);\n};\n\nconst applyPreferLocal = (result, pathParts, cwdPath) => {\n\tfor (const directory of traversePathUp(cwdPath)) {\n\t\tconst pathPart = path.join(directory, 'node_modules/.bin');\n\t\tif (!pathParts.includes(pathPart)) {\n\t\t\tresult.push(pathPart);\n\t\t}\n\t}\n};\n\n// Ensure the running `node` binary is used\nconst applyExecPath = (result, pathParts, execPath, cwdPath) => {\n\tconst pathPart = path.resolve(cwdPath, toPath(execPath), '..');\n\tif (!pathParts.includes(pathPart)) {\n\t\tresult.push(pathPart);\n\t}\n};\n\nexport const npmRunPathEnv = ({env = process.env, ...options} = {}) => {\n\tenv = {...env};\n\n\tconst pathName = pathKey({env});\n\toptions.path = env[pathName];\n\tenv[pathName] = npmRunPath(options);\n\n\treturn env;\n};\n","// When the subprocess fails, this is the error instance being returned.\n// If another error instance is being thrown, it is kept as `error.cause`.\nexport const getFinalError = (originalError, message, isSync) => {\n\tconst ErrorClass = isSync ? ExecaSyncError : ExecaError;\n\tconst options = originalError instanceof DiscardedError ? {} : {cause: originalError};\n\treturn new ErrorClass(message, options);\n};\n\n// Indicates that the error is used only to interrupt control flow, but not in the return value\nexport class DiscardedError extends Error {}\n\n// Proper way to set `error.name`: it should be inherited and non-enumerable\nconst setErrorName = (ErrorClass, value) => {\n\tObject.defineProperty(ErrorClass.prototype, 'name', {\n\t\tvalue,\n\t\twritable: true,\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t});\n\tObject.defineProperty(ErrorClass.prototype, execaErrorSymbol, {\n\t\tvalue: true,\n\t\twritable: false,\n\t\tenumerable: false,\n\t\tconfigurable: false,\n\t});\n};\n\n// Unlike `instanceof`, this works across realms\nexport const isExecaError = error => isErrorInstance(error) && execaErrorSymbol in error;\n\nconst execaErrorSymbol = Symbol('isExecaError');\n\nexport const isErrorInstance = value => Object.prototype.toString.call(value) === '[object Error]';\n\n// We use two different Error classes for async/sync methods since they have slightly different shape and types\nexport class ExecaError extends Error {}\nsetErrorName(ExecaError, ExecaError.name);\n\nexport class ExecaSyncError extends Error {}\nsetErrorName(ExecaSyncError, ExecaSyncError.name);\n","\nexport const getRealtimeSignals=()=>{\nconst length=SIGRTMAX-SIGRTMIN+1;\nreturn Array.from({length},getRealtimeSignal)\n};\n\nconst getRealtimeSignal=(value,index)=>({\nname:`SIGRT${index+1}`,\nnumber:SIGRTMIN+index,\naction:\"terminate\",\ndescription:\"Application-specific signal (realtime)\",\nstandard:\"posix\"\n});\n\nconst SIGRTMIN=34;\nexport const SIGRTMAX=64;","\n\nexport const SIGNALS=[\n{\nname:\"SIGHUP\",\nnumber:1,\naction:\"terminate\",\ndescription:\"Terminal closed\",\nstandard:\"posix\"\n},\n{\nname:\"SIGINT\",\nnumber:2,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-C\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGQUIT\",\nnumber:3,\naction:\"core\",\ndescription:\"User interruption with CTRL-\\\\\",\nstandard:\"posix\"\n},\n{\nname:\"SIGILL\",\nnumber:4,\naction:\"core\",\ndescription:\"Invalid machine instruction\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGTRAP\",\nnumber:5,\naction:\"core\",\ndescription:\"Debugger breakpoint\",\nstandard:\"posix\"\n},\n{\nname:\"SIGABRT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGIOT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGBUS\",\nnumber:7,\naction:\"core\",\ndescription:\n\"Bus error due to misaligned, non-existing address or paging error\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGEMT\",\nnumber:7,\naction:\"terminate\",\ndescription:\"Command should be emulated but is not implemented\",\nstandard:\"other\"\n},\n{\nname:\"SIGFPE\",\nnumber:8,\naction:\"core\",\ndescription:\"Floating point arithmetic error\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGKILL\",\nnumber:9,\naction:\"terminate\",\ndescription:\"Forced termination\",\nstandard:\"posix\",\nforced:true\n},\n{\nname:\"SIGUSR1\",\nnumber:10,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"\n},\n{\nname:\"SIGSEGV\",\nnumber:11,\naction:\"core\",\ndescription:\"Segmentation fault\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGUSR2\",\nnumber:12,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"\n},\n{\nname:\"SIGPIPE\",\nnumber:13,\naction:\"terminate\",\ndescription:\"Broken pipe or socket\",\nstandard:\"posix\"\n},\n{\nname:\"SIGALRM\",\nnumber:14,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"posix\"\n},\n{\nname:\"SIGTERM\",\nnumber:15,\naction:\"terminate\",\ndescription:\"Termination\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGSTKFLT\",\nnumber:16,\naction:\"terminate\",\ndescription:\"Stack is empty or overflowed\",\nstandard:\"other\"\n},\n{\nname:\"SIGCHLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"posix\"\n},\n{\nname:\"SIGCLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"other\"\n},\n{\nname:\"SIGCONT\",\nnumber:18,\naction:\"unpause\",\ndescription:\"Unpaused\",\nstandard:\"posix\",\nforced:true\n},\n{\nname:\"SIGSTOP\",\nnumber:19,\naction:\"pause\",\ndescription:\"Paused\",\nstandard:\"posix\",\nforced:true\n},\n{\nname:\"SIGTSTP\",\nnumber:20,\naction:\"pause\",\ndescription:\"Paused using CTRL-Z or \\\"suspend\\\"\",\nstandard:\"posix\"\n},\n{\nname:\"SIGTTIN\",\nnumber:21,\naction:\"pause\",\ndescription:\"Background process cannot read terminal input\",\nstandard:\"posix\"\n},\n{\nname:\"SIGBREAK\",\nnumber:21,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-BREAK\",\nstandard:\"other\"\n},\n{\nname:\"SIGTTOU\",\nnumber:22,\naction:\"pause\",\ndescription:\"Background process cannot write to terminal output\",\nstandard:\"posix\"\n},\n{\nname:\"SIGURG\",\nnumber:23,\naction:\"ignore\",\ndescription:\"Socket received out-of-band data\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGXCPU\",\nnumber:24,\naction:\"core\",\ndescription:\"Process timed out\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGXFSZ\",\nnumber:25,\naction:\"core\",\ndescription:\"File too big\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGVTALRM\",\nnumber:26,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGPROF\",\nnumber:27,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGWINCH\",\nnumber:28,\naction:\"ignore\",\ndescription:\"Terminal window size changed\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGIO\",\nnumber:29,\naction:\"terminate\",\ndescription:\"I/O is available\",\nstandard:\"other\"\n},\n{\nname:\"SIGPOLL\",\nnumber:29,\naction:\"terminate\",\ndescription:\"Watched event\",\nstandard:\"other\"\n},\n{\nname:\"SIGINFO\",\nnumber:29,\naction:\"ignore\",\ndescription:\"Request for process information\",\nstandard:\"other\"\n},\n{\nname:\"SIGPWR\",\nnumber:30,\naction:\"terminate\",\ndescription:\"Device running out of power\",\nstandard:\"systemv\"\n},\n{\nname:\"SIGSYS\",\nnumber:31,\naction:\"core\",\ndescription:\"Invalid system call\",\nstandard:\"other\"\n},\n{\nname:\"SIGUNUSED\",\nnumber:31,\naction:\"terminate\",\ndescription:\"Invalid system call\",\nstandard:\"other\"\n}];","import{constants}from\"node:os\";\n\nimport{SIGNALS}from\"./core.js\";\nimport{getRealtimeSignals}from\"./realtime.js\";\n\n\n\nexport const getSignals=()=>{\nconst realtimeSignals=getRealtimeSignals();\nconst signals=[...SIGNALS,...realtimeSignals].map(normalizeSignal);\nreturn signals\n};\n\n\n\n\n\n\n\nconst normalizeSignal=({\nname,\nnumber:defaultNumber,\ndescription,\naction,\nforced=false,\nstandard\n})=>{\nconst{\nsignals:{[name]:constantSignal}\n}=constants;\nconst supported=constantSignal!==undefined;\nconst number=supported?constantSignal:defaultNumber;\nreturn{name,number,description,supported,action,forced,standard}\n};","import{constants}from\"node:os\";\n\nimport{SIGRTMAX}from\"./realtime.js\";\nimport{getSignals}from\"./signals.js\";\n\n\n\nconst getSignalsByName=()=>{\nconst signals=getSignals();\nreturn Object.fromEntries(signals.map(getSignalByName))\n};\n\nconst getSignalByName=({\nname,\nnumber,\ndescription,\nsupported,\naction,\nforced,\nstandard\n})=>[name,{name,number,description,supported,action,forced,standard}];\n\nexport const signalsByName=getSignalsByName();\n\n\n\n\nconst getSignalsByNumber=()=>{\nconst signals=getSignals();\nconst length=SIGRTMAX+1;\nconst signalsA=Array.from({length},(value,number)=>\ngetSignalByNumber(number,signals)\n);\nreturn Object.assign({},...signalsA)\n};\n\nconst getSignalByNumber=(number,signals)=>{\nconst signal=findSignalByNumber(number,signals);\n\nif(signal===undefined){\nreturn{}\n}\n\nconst{name,description,supported,action,forced,standard}=signal;\nreturn{\n[number]:{\nname,\nnumber,\ndescription,\nsupported,\naction,\nforced,\nstandard\n}\n}\n};\n\n\n\nconst findSignalByNumber=(number,signals)=>{\nconst signal=signals.find(({name})=>constants.signals[name]===number);\n\nif(signal!==undefined){\nreturn signal\n}\n\nreturn signals.find((signalA)=>signalA.number===number)\n};\n\nexport const signalsByNumber=getSignalsByNumber();","import {constants} from 'node:os';\nimport {signalsByName} from 'human-signals';\n\n// Normalize signals for comparison purpose.\n// Also validate the signal exists.\nexport const normalizeKillSignal = killSignal => {\n\tconst optionName = 'option `killSignal`';\n\tif (killSignal === 0) {\n\t\tthrow new TypeError(`Invalid ${optionName}: 0 cannot be used.`);\n\t}\n\n\treturn normalizeSignal(killSignal, optionName);\n};\n\nexport const normalizeSignalArgument = signal => signal === 0\n\t? signal\n\t: normalizeSignal(signal, '`subprocess.kill()`\\'s argument');\n\nconst normalizeSignal = (signalNameOrInteger, optionName) => {\n\tif (Number.isInteger(signalNameOrInteger)) {\n\t\treturn normalizeSignalInteger(signalNameOrInteger, optionName);\n\t}\n\n\tif (typeof signalNameOrInteger === 'string') {\n\t\treturn normalizeSignalName(signalNameOrInteger, optionName);\n\t}\n\n\tthrow new TypeError(`Invalid ${optionName} ${String(signalNameOrInteger)}: it must be a string or an integer.\\n${getAvailableSignals()}`);\n};\n\nconst normalizeSignalInteger = (signalInteger, optionName) => {\n\tif (signalsIntegerToName.has(signalInteger)) {\n\t\treturn signalsIntegerToName.get(signalInteger);\n\t}\n\n\tthrow new TypeError(`Invalid ${optionName} ${signalInteger}: this signal integer does not exist.\\n${getAvailableSignals()}`);\n};\n\nconst getSignalsIntegerToName = () => new Map(Object.entries(constants.signals)\n\t.reverse()\n\t.map(([signalName, signalInteger]) => [signalInteger, signalName]));\n\nconst signalsIntegerToName = getSignalsIntegerToName();\n\nconst normalizeSignalName = (signalName, optionName) => {\n\tif (signalName in constants.signals) {\n\t\treturn signalName;\n\t}\n\n\tif (signalName.toUpperCase() in constants.signals) {\n\t\tthrow new TypeError(`Invalid ${optionName} '${signalName}': please rename it to '${signalName.toUpperCase()}'.`);\n\t}\n\n\tthrow new TypeError(`Invalid ${optionName} '${signalName}': this signal name does not exist.\\n${getAvailableSignals()}`);\n};\n\nconst getAvailableSignals = () => `Available signal names: ${getAvailableSignalNames()}.\nAvailable signal numbers: ${getAvailableSignalIntegers()}.`;\n\nconst getAvailableSignalNames = () => Object.keys(constants.signals)\n\t.sort()\n\t.map(signalName => `'${signalName}'`)\n\t.join(', ');\n\nconst getAvailableSignalIntegers = () => [...new Set(Object.values(constants.signals)\n\t.sort((signalInteger, signalIntegerTwo) => signalInteger - signalIntegerTwo))]\n\t.join(', ');\n\n// Human-friendly description of a signal\nexport const getSignalDescription = signal => signalsByName[signal].description;\n","import {setTimeout} from 'node:timers/promises';\nimport {isErrorInstance} from '../return/final-error.js';\nimport {normalizeSignalArgument} from './signal.js';\n\n// Normalize the `forceKillAfterDelay` option\nexport const normalizeForceKillAfterDelay = forceKillAfterDelay => {\n\tif (forceKillAfterDelay === false) {\n\t\treturn forceKillAfterDelay;\n\t}\n\n\tif (forceKillAfterDelay === true) {\n\t\treturn DEFAULT_FORCE_KILL_TIMEOUT;\n\t}\n\n\tif (!Number.isFinite(forceKillAfterDelay) || forceKillAfterDelay < 0) {\n\t\tthrow new TypeError(`Expected the \\`forceKillAfterDelay\\` option to be a non-negative integer, got \\`${forceKillAfterDelay}\\` (${typeof forceKillAfterDelay})`);\n\t}\n\n\treturn forceKillAfterDelay;\n};\n\nconst DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5;\n\n// Monkey-patches `subprocess.kill()` to add `forceKillAfterDelay` behavior and `.kill(error)`\nexport const subprocessKill = (\n\t{kill, options: {forceKillAfterDelay, killSignal}, onInternalError, context, controller},\n\tsignalOrError,\n\terrorArgument,\n) => {\n\tconst {signal, error} = parseKillArguments(signalOrError, errorArgument, killSignal);\n\temitKillError(error, onInternalError);\n\tconst killResult = kill(signal);\n\tsetKillTimeout({\n\t\tkill,\n\t\tsignal,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t\tkillResult,\n\t\tcontext,\n\t\tcontroller,\n\t});\n\treturn killResult;\n};\n\nconst parseKillArguments = (signalOrError, errorArgument, killSignal) => {\n\tconst [signal = killSignal, error] = isErrorInstance(signalOrError)\n\t\t? [undefined, signalOrError]\n\t\t: [signalOrError, errorArgument];\n\n\tif (typeof signal !== 'string' && !Number.isInteger(signal)) {\n\t\tthrow new TypeError(`The first argument must be an error instance or a signal name string/integer: ${String(signal)}`);\n\t}\n\n\tif (error !== undefined && !isErrorInstance(error)) {\n\t\tthrow new TypeError(`The second argument is optional. If specified, it must be an error instance: ${error}`);\n\t}\n\n\treturn {signal: normalizeSignalArgument(signal), error};\n};\n\n// Fails right away when calling `subprocess.kill(error)`.\n// Does not wait for actual signal termination.\n// Uses a deferred promise instead of the `error` event on the subprocess, as this is less intrusive.\nconst emitKillError = (error, onInternalError) => {\n\tif (error !== undefined) {\n\t\tonInternalError.reject(error);\n\t}\n};\n\nconst setKillTimeout = async ({kill, signal, forceKillAfterDelay, killSignal, killResult, context, controller}) => {\n\tif (signal === killSignal && killResult) {\n\t\tkillOnTimeout({\n\t\t\tkill,\n\t\t\tforceKillAfterDelay,\n\t\t\tcontext,\n\t\t\tcontrollerSignal: controller.signal,\n\t\t});\n\t}\n};\n\n// Forcefully terminate a subprocess after a timeout\nexport const killOnTimeout = async ({kill, forceKillAfterDelay, context, controllerSignal}) => {\n\tif (forceKillAfterDelay === false) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait setTimeout(forceKillAfterDelay, undefined, {signal: controllerSignal});\n\t\tif (kill('SIGKILL')) {\n\t\t\tcontext.isForcefullyTerminated ??= true;\n\t\t}\n\t} catch {}\n};\n","import {once} from 'node:events';\n\n// Combines `util.aborted()` and `events.addAbortListener()`: promise-based and cleaned up with a stop signal\nexport const onAbortedSignal = async (mainSignal, stopSignal) => {\n\tif (!mainSignal.aborted) {\n\t\tawait once(mainSignal, 'abort', {signal: stopSignal});\n\t}\n};\n","import {onAbortedSignal} from '../utils/abort-signal.js';\n\n// Validate the `cancelSignal` option\nexport const validateCancelSignal = ({cancelSignal}) => {\n\tif (cancelSignal !== undefined && Object.prototype.toString.call(cancelSignal) !== '[object AbortSignal]') {\n\t\tthrow new Error(`The \\`cancelSignal\\` option must be an AbortSignal: ${String(cancelSignal)}`);\n\t}\n};\n\n// Terminate the subprocess when aborting the `cancelSignal` option and `gracefulSignal` is `false`\nexport const throwOnCancel = ({subprocess, cancelSignal, gracefulCancel, context, controller}) => cancelSignal === undefined || gracefulCancel\n\t? []\n\t: [terminateOnCancel(subprocess, cancelSignal, context, controller)];\n\nconst terminateOnCancel = async (subprocess, cancelSignal, context, {signal}) => {\n\tawait onAbortedSignal(cancelSignal, signal);\n\tcontext.terminationReason ??= 'cancel';\n\tsubprocess.kill();\n\tthrow cancelSignal.reason;\n};\n","// Validate the IPC channel is connected before receiving/sending messages\nexport const validateIpcMethod = ({methodName, isSubprocess, ipc, isConnected}) => {\n\tvalidateIpcOption(methodName, isSubprocess, ipc);\n\tvalidateConnection(methodName, isSubprocess, isConnected);\n};\n\n// Better error message when forgetting to set `ipc: true` and using the IPC methods\nconst validateIpcOption = (methodName, isSubprocess, ipc) => {\n\tif (!ipc) {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)} can only be used if the \\`ipc\\` option is \\`true\\`.`);\n\t}\n};\n\n// Better error message when one process does not send/receive messages once the other process has disconnected.\n// This also makes it clear that any buffered messages are lost once either process has disconnected.\n// Also when aborting `cancelSignal` after disconnecting the IPC.\nexport const validateConnection = (methodName, isSubprocess, isConnected) => {\n\tif (!isConnected) {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)} cannot be used: the ${getOtherProcessName(isSubprocess)} has already exited or disconnected.`);\n\t}\n};\n\n// When `getOneMessage()` could not complete due to an early disconnection\nexport const throwOnEarlyDisconnect = isSubprocess => {\n\tthrow new Error(`${getMethodName('getOneMessage', isSubprocess)} could not complete: the ${getOtherProcessName(isSubprocess)} exited or disconnected.`);\n};\n\n// When both processes use `sendMessage()` with `strict` at the same time\nexport const throwOnStrictDeadlockError = isSubprocess => {\n\tthrow new Error(`${getMethodName('sendMessage', isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} is sending a message too, instead of listening to incoming messages.\nThis can be fixed by both sending a message and listening to incoming messages at the same time:\n\nconst [receivedMessage] = await Promise.all([\n\t${getMethodName('getOneMessage', isSubprocess)},\n\t${getMethodName('sendMessage', isSubprocess, 'message, {strict: true}')},\n]);`);\n};\n\n// When the other process used `strict` but the current process had I/O error calling `sendMessage()` for the response\nexport const getStrictResponseError = (error, isSubprocess) => new Error(`${getMethodName('sendMessage', isSubprocess)} failed when sending an acknowledgment response to the ${getOtherProcessName(isSubprocess)}.`, {cause: error});\n\n// When using `strict` but the other process was not listening for messages\nexport const throwOnMissingStrict = isSubprocess => {\n\tthrow new Error(`${getMethodName('sendMessage', isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} is not listening to incoming messages.`);\n};\n\n// When using `strict` but the other process disconnected before receiving the message\nexport const throwOnStrictDisconnect = isSubprocess => {\n\tthrow new Error(`${getMethodName('sendMessage', isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} exited without listening to incoming messages.`);\n};\n\n// When the current process disconnects while the subprocess is listening to `cancelSignal`\nexport const getAbortDisconnectError = () => new Error(`\\`cancelSignal\\` aborted: the ${getOtherProcessName(true)} disconnected.`);\n\n// When the subprocess uses `cancelSignal` but not the current process\nexport const throwOnMissingParent = () => {\n\tthrow new Error('`getCancelSignal()` cannot be used without setting the `cancelSignal` subprocess option.');\n};\n\n// EPIPE can happen when sending a message to a subprocess that is closing but has not disconnected yet\nexport const handleEpipeError = ({error, methodName, isSubprocess}) => {\n\tif (error.code === 'EPIPE') {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)} cannot be used: the ${getOtherProcessName(isSubprocess)} is disconnecting.`, {cause: error});\n\t}\n};\n\n// Better error message when sending messages which cannot be serialized.\n// Works with both `serialization: 'advanced'` and `serialization: 'json'`.\nexport const handleSerializationError = ({error, methodName, isSubprocess, message}) => {\n\tif (isSerializationError(error)) {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)}'s argument type is invalid: the message cannot be serialized: ${String(message)}.`, {cause: error});\n\t}\n};\n\nconst isSerializationError = ({code, message}) => SERIALIZATION_ERROR_CODES.has(code)\n\t|| SERIALIZATION_ERROR_MESSAGES.some(serializationErrorMessage => message.includes(serializationErrorMessage));\n\n// `error.code` set by Node.js when it failed to serialize the message\nconst SERIALIZATION_ERROR_CODES = new Set([\n\t// Message is `undefined`\n\t'ERR_MISSING_ARGS',\n\t// Message is a function, a bigint, a symbol\n\t'ERR_INVALID_ARG_TYPE',\n]);\n\n// `error.message` set by Node.js when it failed to serialize the message\nconst SERIALIZATION_ERROR_MESSAGES = [\n\t// Message is a promise or a proxy, with `serialization: 'advanced'`\n\t'could not be cloned',\n\t// Message has cycles, with `serialization: 'json'`\n\t'circular structure',\n\t// Message has cycles inside toJSON(), with `serialization: 'json'`\n\t'call stack size exceeded',\n];\n\nconst getMethodName = (methodName, isSubprocess, parameters = '') => methodName === 'cancelSignal'\n\t? '`cancelSignal`\\'s `controller.abort()`'\n\t: `${getNamespaceName(isSubprocess)}${methodName}(${parameters})`;\n\nconst getNamespaceName = isSubprocess => isSubprocess ? '' : 'subprocess.';\n\nconst getOtherProcessName = isSubprocess => isSubprocess ? 'parent process' : 'subprocess';\n\n// When any error arises, we disconnect the IPC.\n// Otherwise, it is likely that one of the processes will stop sending/receiving messages.\n// This would leave the other process hanging.\nexport const disconnect = anyProcess => {\n\tif (anyProcess.connected) {\n\t\tanyProcess.disconnect();\n\t}\n};\n","export const createDeferred = () => {\n\tconst methods = {};\n\tconst promise = new Promise((resolve, reject) => {\n\t\tObject.assign(methods, {resolve, reject});\n\t});\n\treturn Object.assign(promise, methods);\n};\n","import {parseFd} from './specific.js';\n\n// Retrieve stream targeted by the `to` option\nexport const getToStream = (destination, to = 'stdin') => {\n\tconst isWritable = true;\n\tconst {options, fileDescriptors} = SUBPROCESS_OPTIONS.get(destination);\n\tconst fdNumber = getFdNumber(fileDescriptors, to, isWritable);\n\tconst destinationStream = destination.stdio[fdNumber];\n\n\tif (destinationStream === null) {\n\t\tthrow new TypeError(getInvalidStdioOptionMessage(fdNumber, to, options, isWritable));\n\t}\n\n\treturn destinationStream;\n};\n\n// Retrieve stream targeted by the `from` option\nexport const getFromStream = (source, from = 'stdout') => {\n\tconst isWritable = false;\n\tconst {options, fileDescriptors} = SUBPROCESS_OPTIONS.get(source);\n\tconst fdNumber = getFdNumber(fileDescriptors, from, isWritable);\n\tconst sourceStream = fdNumber === 'all' ? source.all : source.stdio[fdNumber];\n\n\tif (sourceStream === null || sourceStream === undefined) {\n\t\tthrow new TypeError(getInvalidStdioOptionMessage(fdNumber, from, options, isWritable));\n\t}\n\n\treturn sourceStream;\n};\n\n// Keeps track of the options passed to each Execa call\nexport const SUBPROCESS_OPTIONS = new WeakMap();\n\nconst getFdNumber = (fileDescriptors, fdName, isWritable) => {\n\tconst fdNumber = parseFdNumber(fdName, isWritable);\n\tvalidateFdNumber(fdNumber, fdName, isWritable, fileDescriptors);\n\treturn fdNumber;\n};\n\nconst parseFdNumber = (fdName, isWritable) => {\n\tconst fdNumber = parseFd(fdName);\n\tif (fdNumber !== undefined) {\n\t\treturn fdNumber;\n\t}\n\n\tconst {validOptions, defaultValue} = isWritable\n\t\t? {validOptions: '\"stdin\"', defaultValue: 'stdin'}\n\t\t: {validOptions: '\"stdout\", \"stderr\", \"all\"', defaultValue: 'stdout'};\n\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be \"${fdName}\".\nIt must be ${validOptions} or \"fd3\", \"fd4\" (and so on).\nIt is optional and defaults to \"${defaultValue}\".`);\n};\n\nconst validateFdNumber = (fdNumber, fdName, isWritable, fileDescriptors) => {\n\tconst fileDescriptor = fileDescriptors[getUsedDescriptor(fdNumber)];\n\tif (fileDescriptor === undefined) {\n\t\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be ${fdName}. That file descriptor does not exist.\nPlease set the \"stdio\" option to ensure that file descriptor exists.`);\n\t}\n\n\tif (fileDescriptor.direction === 'input' && !isWritable) {\n\t\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be ${fdName}. It must be a readable stream, not writable.`);\n\t}\n\n\tif (fileDescriptor.direction !== 'input' && isWritable) {\n\t\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be ${fdName}. It must be a writable stream, not readable.`);\n\t}\n};\n\nconst getInvalidStdioOptionMessage = (fdNumber, fdName, options, isWritable) => {\n\tif (fdNumber === 'all' && !options.all) {\n\t\treturn 'The \"all\" option must be true to use \"from: \\'all\\'\".';\n\t}\n\n\tconst {optionName, optionValue} = getInvalidStdioOption(fdNumber, options);\n\treturn `The \"${optionName}: ${serializeOptionValue(optionValue)}\" option is incompatible with using \"${getOptionName(isWritable)}: ${serializeOptionValue(fdName)}\".\nPlease set this option with \"pipe\" instead.`;\n};\n\nconst getInvalidStdioOption = (fdNumber, {stdin, stdout, stderr, stdio}) => {\n\tconst usedDescriptor = getUsedDescriptor(fdNumber);\n\n\tif (usedDescriptor === 0 && stdin !== undefined) {\n\t\treturn {optionName: 'stdin', optionValue: stdin};\n\t}\n\n\tif (usedDescriptor === 1 && stdout !== undefined) {\n\t\treturn {optionName: 'stdout', optionValue: stdout};\n\t}\n\n\tif (usedDescriptor === 2 && stderr !== undefined) {\n\t\treturn {optionName: 'stderr', optionValue: stderr};\n\t}\n\n\treturn {optionName: `stdio[${usedDescriptor}]`, optionValue: stdio[usedDescriptor]};\n};\n\nconst getUsedDescriptor = fdNumber => fdNumber === 'all' ? 1 : fdNumber;\n\nconst getOptionName = isWritable => isWritable ? 'to' : 'from';\n\nexport const serializeOptionValue = value => {\n\tif (typeof value === 'string') {\n\t\treturn `'${value}'`;\n\t}\n\n\treturn typeof value === 'number' ? `${value}` : 'Stream';\n};\n","import {addAbortListener} from 'node:events';\n\n// Temporarily increase the maximum number of listeners on an eventEmitter\nexport const incrementMaxListeners = (eventEmitter, maxListenersIncrement, signal) => {\n\tconst maxListeners = eventEmitter.getMaxListeners();\n\tif (maxListeners === 0 || maxListeners === Number.POSITIVE_INFINITY) {\n\t\treturn;\n\t}\n\n\teventEmitter.setMaxListeners(maxListeners + maxListenersIncrement);\n\taddAbortListener(signal, () => {\n\t\teventEmitter.setMaxListeners(eventEmitter.getMaxListeners() - maxListenersIncrement);\n\t});\n};\n","// By default, Node.js keeps the subprocess alive while it has a `message` or `disconnect` listener.\n// We replicate the same logic for the events that we proxy.\n// This ensures the subprocess is kept alive while `getOneMessage()` and `getEachMessage()` are ongoing.\n// This is not a problem with `sendMessage()` since Node.js handles that method automatically.\n// We do not use `anyProcess.channel.ref()` since this would prevent the automatic `.channel.refCounted()` Node.js is doing.\n// We keep a reference to `anyProcess.channel` since it might be `null` while `getOneMessage()` or `getEachMessage()` is still processing debounced messages.\n// See https://github.com/nodejs/node/blob/2aaeaa863c35befa2ebaa98fb7737ec84df4d8e9/lib/internal/child_process.js#L547\nexport const addReference = (channel, reference) => {\n\tif (reference) {\n\t\taddReferenceCount(channel);\n\t}\n};\n\nconst addReferenceCount = channel => {\n\tchannel.refCounted();\n};\n\nexport const removeReference = (channel, reference) => {\n\tif (reference) {\n\t\tremoveReferenceCount(channel);\n\t}\n};\n\nconst removeReferenceCount = channel => {\n\tchannel.unrefCounted();\n};\n\n// To proxy events, we setup some global listeners on the `message` and `disconnect` events.\n// Those should not keep the subprocess alive, so we remove the automatic counting that Node.js is doing.\n// See https://github.com/nodejs/node/blob/1b965270a9c273d4cf70e8808e9d28b9ada7844f/lib/child_process.js#L180\nexport const undoAddedReferences = (channel, isSubprocess) => {\n\tif (isSubprocess) {\n\t\tremoveReferenceCount(channel);\n\t\tremoveReferenceCount(channel);\n\t}\n};\n\n// Reverse it during `disconnect`\nexport const redoAddedReferences = (channel, isSubprocess) => {\n\tif (isSubprocess) {\n\t\taddReferenceCount(channel);\n\t\taddReferenceCount(channel);\n\t}\n};\n","import {once} from 'node:events';\nimport {scheduler} from 'node:timers/promises';\nimport {waitForOutgoingMessages} from './outgoing.js';\nimport {redoAddedReferences} from './reference.js';\nimport {handleStrictRequest, handleStrictResponse} from './strict.js';\nimport {handleAbort, abortOnDisconnect} from './graceful.js';\n\n// By default, Node.js buffers `message` events.\n//  - Buffering happens when there is a `message` event is emitted but there is no handler.\n//  - As soon as a `message` event handler is set, all buffered `message` events are emitted, emptying the buffer.\n//  - This happens both in the current process and the subprocess.\n//  - See https://github.com/nodejs/node/blob/501546e8f37059cd577041e23941b640d0d4d406/lib/internal/child_process.js#L719\n// This is helpful. Notably, this allows sending messages to a subprocess that's still initializing.\n// However, it has several problems.\n//  - This works with `events.on()` but not `events.once()` since all buffered messages are emitted at once.\n//    For example, users cannot call `await getOneMessage()`/`getEachMessage()` multiple times in a row.\n//  - When a user intentionally starts listening to `message` at a specific point in time, past `message` events are replayed, which might be unexpected.\n//  - Buffering is unlimited, which might lead to an out-of-memory crash.\n//  - This does not work well with multiple consumers.\n//    For example, Execa consumes events with both `result.ipcOutput` and manual IPC calls like `getOneMessage()`.\n//    Since `result.ipcOutput` reads all incoming messages, no buffering happens for manual IPC calls.\n//  - Forgetting to setup a `message` listener, or setting it up too late, is a programming mistake.\n//    The default behavior does not allow users to realize they made that mistake.\n// To solve those problems, instead of buffering messages, we debounce them.\n// The `message` event so it is emitted at most once per macrotask.\nexport const onMessage = async ({anyProcess, channel, isSubprocess, ipcEmitter}, wrappedMessage) => {\n\tif (handleStrictResponse(wrappedMessage) || handleAbort(wrappedMessage)) {\n\t\treturn;\n\t}\n\n\tif (!INCOMING_MESSAGES.has(anyProcess)) {\n\t\tINCOMING_MESSAGES.set(anyProcess, []);\n\t}\n\n\tconst incomingMessages = INCOMING_MESSAGES.get(anyProcess);\n\tincomingMessages.push(wrappedMessage);\n\n\tif (incomingMessages.length > 1) {\n\t\treturn;\n\t}\n\n\twhile (incomingMessages.length > 0) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait waitForOutgoingMessages(anyProcess, ipcEmitter, wrappedMessage);\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait scheduler.yield();\n\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst message = await handleStrictRequest({\n\t\t\twrappedMessage: incomingMessages[0],\n\t\t\tanyProcess,\n\t\t\tchannel,\n\t\t\tisSubprocess,\n\t\t\tipcEmitter,\n\t\t});\n\n\t\tincomingMessages.shift();\n\t\tipcEmitter.emit('message', message);\n\t\tipcEmitter.emit('message:done');\n\t}\n};\n\n// If the `message` event is currently debounced, the `disconnect` event must wait for it\nexport const onDisconnect = async ({anyProcess, channel, isSubprocess, ipcEmitter, boundOnMessage}) => {\n\tabortOnDisconnect();\n\n\tconst incomingMessages = INCOMING_MESSAGES.get(anyProcess);\n\twhile (incomingMessages?.length > 0) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait once(ipcEmitter, 'message:done');\n\t}\n\n\tanyProcess.removeListener('message', boundOnMessage);\n\tredoAddedReferences(channel, isSubprocess);\n\tipcEmitter.connected = false;\n\tipcEmitter.emit('disconnect');\n};\n\nconst INCOMING_MESSAGES = new WeakMap();\n","import {EventEmitter} from 'node:events';\nimport {onMessage, onDisconnect} from './incoming.js';\nimport {undoAddedReferences} from './reference.js';\n\n// Forward the `message` and `disconnect` events from the process and subprocess to a proxy emitter.\n// This prevents the `error` event from stopping IPC.\n// This also allows debouncing the `message` event.\nexport const getIpcEmitter = (anyProcess, channel, isSubprocess) => {\n\tif (IPC_EMITTERS.has(anyProcess)) {\n\t\treturn IPC_EMITTERS.get(anyProcess);\n\t}\n\n\t// Use an `EventEmitter`, like the `process` that is being proxied\n\t// eslint-disable-next-line unicorn/prefer-event-target\n\tconst ipcEmitter = new EventEmitter();\n\tipcEmitter.connected = true;\n\tIPC_EMITTERS.set(anyProcess, ipcEmitter);\n\tforwardEvents({\n\t\tipcEmitter,\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t});\n\treturn ipcEmitter;\n};\n\nconst IPC_EMITTERS = new WeakMap();\n\n// The `message` and `disconnect` events are buffered in the subprocess until the first listener is setup.\n// However, unbuffering happens after one tick, so this give enough time for the caller to setup the listener on the proxy emitter first.\n// See https://github.com/nodejs/node/blob/2aaeaa863c35befa2ebaa98fb7737ec84df4d8e9/lib/internal/child_process.js#L721\nconst forwardEvents = ({ipcEmitter, anyProcess, channel, isSubprocess}) => {\n\tconst boundOnMessage = onMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tipcEmitter,\n\t});\n\tanyProcess.on('message', boundOnMessage);\n\tanyProcess.once('disconnect', onDisconnect.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tipcEmitter,\n\t\tboundOnMessage,\n\t}));\n\tundoAddedReferences(channel, isSubprocess);\n};\n\n// Check whether there might still be some `message` events to receive\nexport const isConnected = anyProcess => {\n\tconst ipcEmitter = IPC_EMITTERS.get(anyProcess);\n\treturn ipcEmitter === undefined\n\t\t? anyProcess.channel !== null\n\t\t: ipcEmitter.connected;\n};\n","import {once} from 'node:events';\nimport {createDeferred} from '../utils/deferred.js';\nimport {incrementMaxListeners} from '../utils/max-listeners.js';\nimport {sendMessage} from './send.js';\nimport {throwOnMissingStrict, throwOnStrictDisconnect, throwOnStrictDeadlockError} from './validation.js';\nimport {getIpcEmitter} from './forward.js';\nimport {hasMessageListeners} from './outgoing.js';\n\n// When using the `strict` option, wrap the message with metadata during `sendMessage()`\nexport const handleSendStrict = ({anyProcess, channel, isSubprocess, message, strict}) => {\n\tif (!strict) {\n\t\treturn message;\n\t}\n\n\tconst ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);\n\tconst hasListeners = hasMessageListeners(anyProcess, ipcEmitter);\n\treturn {\n\t\tid: count++,\n\t\ttype: REQUEST_TYPE,\n\t\tmessage,\n\t\thasListeners,\n\t};\n};\n\nlet count = 0n;\n\n// Handles when both processes are calling `sendMessage()` with `strict` at the same time.\n// If neither process is listening, this would create a deadlock. We detect it and throw.\nexport const validateStrictDeadlock = (outgoingMessages, wrappedMessage) => {\n\tif (wrappedMessage?.type !== REQUEST_TYPE || wrappedMessage.hasListeners) {\n\t\treturn;\n\t}\n\n\tfor (const {id} of outgoingMessages) {\n\t\tif (id !== undefined) {\n\t\t\tSTRICT_RESPONSES[id].resolve({isDeadlock: true, hasListeners: false});\n\t\t}\n\t}\n};\n\n// The other process then sends the acknowledgment back as a response\nexport const handleStrictRequest = async ({wrappedMessage, anyProcess, channel, isSubprocess, ipcEmitter}) => {\n\tif (wrappedMessage?.type !== REQUEST_TYPE || !anyProcess.connected) {\n\t\treturn wrappedMessage;\n\t}\n\n\tconst {id, message} = wrappedMessage;\n\tconst response = {id, type: RESPONSE_TYPE, message: hasMessageListeners(anyProcess, ipcEmitter)};\n\n\ttry {\n\t\tawait sendMessage({\n\t\t\tanyProcess,\n\t\t\tchannel,\n\t\t\tisSubprocess,\n\t\t\tipc: true,\n\t\t}, response);\n\t} catch (error) {\n\t\tipcEmitter.emit('strict:error', error);\n\t}\n\n\treturn message;\n};\n\n// Reception of the acknowledgment response\nexport const handleStrictResponse = wrappedMessage => {\n\tif (wrappedMessage?.type !== RESPONSE_TYPE) {\n\t\treturn false;\n\t}\n\n\tconst {id, message: hasListeners} = wrappedMessage;\n\tSTRICT_RESPONSES[id]?.resolve({isDeadlock: false, hasListeners});\n\treturn true;\n};\n\n// Wait for the other process to receive the message from `sendMessage()`\nexport const waitForStrictResponse = async (wrappedMessage, anyProcess, isSubprocess) => {\n\tif (wrappedMessage?.type !== REQUEST_TYPE) {\n\t\treturn;\n\t}\n\n\tconst deferred = createDeferred();\n\tSTRICT_RESPONSES[wrappedMessage.id] = deferred;\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tconst {isDeadlock, hasListeners} = await Promise.race([\n\t\t\tdeferred,\n\t\t\tthrowOnDisconnect(anyProcess, isSubprocess, controller),\n\t\t]);\n\n\t\tif (isDeadlock) {\n\t\t\tthrowOnStrictDeadlockError(isSubprocess);\n\t\t}\n\n\t\tif (!hasListeners) {\n\t\t\tthrowOnMissingStrict(isSubprocess);\n\t\t}\n\t} finally {\n\t\tcontroller.abort();\n\t\tdelete STRICT_RESPONSES[wrappedMessage.id];\n\t}\n};\n\nconst STRICT_RESPONSES = {};\n\nconst throwOnDisconnect = async (anyProcess, isSubprocess, {signal}) => {\n\tincrementMaxListeners(anyProcess, 1, signal);\n\tawait once(anyProcess, 'disconnect', {signal});\n\tthrowOnStrictDisconnect(isSubprocess);\n};\n\nconst REQUEST_TYPE = 'execa:ipc:request';\nconst RESPONSE_TYPE = 'execa:ipc:response';\n","import {createDeferred} from '../utils/deferred.js';\nimport {getFdSpecificValue} from '../arguments/specific.js';\nimport {SUBPROCESS_OPTIONS} from '../arguments/fd-options.js';\nimport {validateStrictDeadlock} from './strict.js';\n\n// When `sendMessage()` is ongoing, any `message` being received waits before being emitted.\n// This allows calling one or multiple `await sendMessage()` followed by `await getOneMessage()`/`await getEachMessage()`.\n// Without running into a race condition when the other process sends a response too fast, before the current process set up a listener.\nexport const startSendMessage = (anyProcess, wrappedMessage, strict) => {\n\tif (!OUTGOING_MESSAGES.has(anyProcess)) {\n\t\tOUTGOING_MESSAGES.set(anyProcess, new Set());\n\t}\n\n\tconst outgoingMessages = OUTGOING_MESSAGES.get(anyProcess);\n\tconst onMessageSent = createDeferred();\n\tconst id = strict ? wrappedMessage.id : undefined;\n\tconst outgoingMessage = {onMessageSent, id};\n\toutgoingMessages.add(outgoingMessage);\n\treturn {outgoingMessages, outgoingMessage};\n};\n\nexport const endSendMessage = ({outgoingMessages, outgoingMessage}) => {\n\toutgoingMessages.delete(outgoingMessage);\n\toutgoingMessage.onMessageSent.resolve();\n};\n\n// Await while `sendMessage()` is ongoing, unless there is already a `message` listener\nexport const waitForOutgoingMessages = async (anyProcess, ipcEmitter, wrappedMessage) => {\n\twhile (!hasMessageListeners(anyProcess, ipcEmitter) && OUTGOING_MESSAGES.get(anyProcess)?.size > 0) {\n\t\tconst outgoingMessages = [...OUTGOING_MESSAGES.get(anyProcess)];\n\t\tvalidateStrictDeadlock(outgoingMessages, wrappedMessage);\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait Promise.all(outgoingMessages.map(({onMessageSent}) => onMessageSent));\n\t}\n};\n\nconst OUTGOING_MESSAGES = new WeakMap();\n\n// Whether any `message` listener is setup\nexport const hasMessageListeners = (anyProcess, ipcEmitter) => ipcEmitter.listenerCount('message') > getMinListenerCount(anyProcess);\n\n// When `buffer` is `false`, we set up a `message` listener that should be ignored.\n// That listener is only meant to intercept `strict` acknowledgement responses.\nconst getMinListenerCount = anyProcess => SUBPROCESS_OPTIONS.has(anyProcess)\n\t&& !getFdSpecificValue(SUBPROCESS_OPTIONS.get(anyProcess).options.buffer, 'ipc')\n\t? 1\n\t: 0;\n","import {promisify} from 'node:util';\nimport {\n\tvalidateIpcMethod,\n\thandleEpipeError,\n\thandleSerializationError,\n\tdisconnect,\n} from './validation.js';\nimport {startSendMessage, endSendMessage} from './outgoing.js';\nimport {handleSendStrict, waitForStrictResponse} from './strict.js';\n\n// Like `[sub]process.send()` but promise-based.\n// We do not `await subprocess` during `.sendMessage()` nor `.getOneMessage()` since those methods are transient.\n// Users would still need to `await subprocess` after the method is done.\n// Also, this would prevent `unhandledRejection` event from being emitted, making it silent.\nexport const sendMessage = ({anyProcess, channel, isSubprocess, ipc}, message, {strict = false} = {}) => {\n\tconst methodName = 'sendMessage';\n\tvalidateIpcMethod({\n\t\tmethodName,\n\t\tisSubprocess,\n\t\tipc,\n\t\tisConnected: anyProcess.connected,\n\t});\n\n\treturn sendMessageAsync({\n\t\tanyProcess,\n\t\tchannel,\n\t\tmethodName,\n\t\tisSubprocess,\n\t\tmessage,\n\t\tstrict,\n\t});\n};\n\nconst sendMessageAsync = async ({anyProcess, channel, methodName, isSubprocess, message, strict}) => {\n\tconst wrappedMessage = handleSendStrict({\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tmessage,\n\t\tstrict,\n\t});\n\tconst outgoingMessagesState = startSendMessage(anyProcess, wrappedMessage, strict);\n\ttry {\n\t\tawait sendOneMessage({\n\t\t\tanyProcess,\n\t\t\tmethodName,\n\t\t\tisSubprocess,\n\t\t\twrappedMessage,\n\t\t\tmessage,\n\t\t});\n\t} catch (error) {\n\t\tdisconnect(anyProcess);\n\t\tthrow error;\n\t} finally {\n\t\tendSendMessage(outgoingMessagesState);\n\t}\n};\n\n// Used internally by `cancelSignal`\nexport const sendOneMessage = async ({anyProcess, methodName, isSubprocess, wrappedMessage, message}) => {\n\tconst sendMethod = getSendMethod(anyProcess);\n\n\ttry {\n\t\tawait Promise.all([\n\t\t\twaitForStrictResponse(wrappedMessage, anyProcess, isSubprocess),\n\t\t\tsendMethod(wrappedMessage),\n\t\t]);\n\t} catch (error) {\n\t\thandleEpipeError({error, methodName, isSubprocess});\n\t\thandleSerializationError({\n\t\t\terror,\n\t\t\tmethodName,\n\t\t\tisSubprocess,\n\t\t\tmessage,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n// [sub]process.send() promisified, memoized\nconst getSendMethod = anyProcess => {\n\tif (PROCESS_SEND_METHODS.has(anyProcess)) {\n\t\treturn PROCESS_SEND_METHODS.get(anyProcess);\n\t}\n\n\tconst sendMethod = promisify(anyProcess.send.bind(anyProcess));\n\tPROCESS_SEND_METHODS.set(anyProcess, sendMethod);\n\treturn sendMethod;\n};\n\nconst PROCESS_SEND_METHODS = new WeakMap();\n","import {scheduler} from 'node:timers/promises';\nimport {sendOneMessage} from './send.js';\nimport {getIpcEmitter} from './forward.js';\nimport {validateConnection, getAbortDisconnectError, throwOnMissingParent} from './validation.js';\n\n// Send an IPC message so the subprocess performs a graceful termination\nexport const sendAbort = (subprocess, message) => {\n\tconst methodName = 'cancelSignal';\n\tvalidateConnection(methodName, false, subprocess.connected);\n\treturn sendOneMessage({\n\t\tanyProcess: subprocess,\n\t\tmethodName,\n\t\tisSubprocess: false,\n\t\twrappedMessage: {type: GRACEFUL_CANCEL_TYPE, message},\n\t\tmessage,\n\t});\n};\n\n// When the signal is being used, start listening for incoming messages.\n// Unbuffering messages takes one microtask to complete, so this must be async.\nexport const getCancelSignal = async ({anyProcess, channel, isSubprocess, ipc}) => {\n\tawait startIpc({\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tipc,\n\t});\n\treturn cancelController.signal;\n};\n\nconst startIpc = async ({anyProcess, channel, isSubprocess, ipc}) => {\n\tif (cancelListening) {\n\t\treturn;\n\t}\n\n\tcancelListening = true;\n\n\tif (!ipc) {\n\t\tthrowOnMissingParent();\n\t\treturn;\n\t}\n\n\tif (channel === null) {\n\t\tabortOnDisconnect();\n\t\treturn;\n\t}\n\n\tgetIpcEmitter(anyProcess, channel, isSubprocess);\n\tawait scheduler.yield();\n};\n\nlet cancelListening = false;\n\n// Reception of IPC message to perform a graceful termination\nexport const handleAbort = wrappedMessage => {\n\tif (wrappedMessage?.type !== GRACEFUL_CANCEL_TYPE) {\n\t\treturn false;\n\t}\n\n\tcancelController.abort(wrappedMessage.message);\n\treturn true;\n};\n\nconst GRACEFUL_CANCEL_TYPE = 'execa:ipc:cancel';\n\n// When the current process disconnects early, the subprocess `cancelSignal` is aborted.\n// Otherwise, the signal would never be able to be aborted later on.\nexport const abortOnDisconnect = () => {\n\tcancelController.abort(getAbortDisconnectError());\n};\n\nconst cancelController = new AbortController();\n","import {onAbortedSignal} from '../utils/abort-signal.js';\nimport {sendAbort} from '../ipc/graceful.js';\nimport {killOnTimeout} from './kill.js';\n\n// Validate the `gracefulCancel` option\nexport const validateGracefulCancel = ({gracefulCancel, cancelSignal, ipc, serialization}) => {\n\tif (!gracefulCancel) {\n\t\treturn;\n\t}\n\n\tif (cancelSignal === undefined) {\n\t\tthrow new Error('The `cancelSignal` option must be defined when setting the `gracefulCancel` option.');\n\t}\n\n\tif (!ipc) {\n\t\tthrow new Error('The `ipc` option cannot be false when setting the `gracefulCancel` option.');\n\t}\n\n\tif (serialization === 'json') {\n\t\tthrow new Error('The `serialization` option cannot be \\'json\\' when setting the `gracefulCancel` option.');\n\t}\n};\n\n// Send abort reason to the subprocess when aborting the `cancelSignal` option and `gracefulCancel` is `true`\nexport const throwOnGracefulCancel = ({\n\tsubprocess,\n\tcancelSignal,\n\tgracefulCancel,\n\tforceKillAfterDelay,\n\tcontext,\n\tcontroller,\n}) => gracefulCancel\n\t? [sendOnAbort({\n\t\tsubprocess,\n\t\tcancelSignal,\n\t\tforceKillAfterDelay,\n\t\tcontext,\n\t\tcontroller,\n\t})]\n\t: [];\n\nconst sendOnAbort = async ({subprocess, cancelSignal, forceKillAfterDelay, context, controller: {signal}}) => {\n\tawait onAbortedSignal(cancelSignal, signal);\n\tconst reason = getReason(cancelSignal);\n\tawait sendAbort(subprocess, reason);\n\tkillOnTimeout({\n\t\tkill: subprocess.kill,\n\t\tforceKillAfterDelay,\n\t\tcontext,\n\t\tcontrollerSignal: signal,\n\t});\n\tcontext.terminationReason ??= 'gracefulCancel';\n\tthrow cancelSignal.reason;\n};\n\n// The default `reason` is a DOMException, which is not serializable with V8\n// See https://github.com/nodejs/node/issues/53225\nconst getReason = ({reason}) => {\n\tif (!(reason instanceof DOMException)) {\n\t\treturn reason;\n\t}\n\n\tconst error = new Error(reason.message);\n\tObject.defineProperty(error, 'stack', {\n\t\tvalue: reason.stack,\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\twritable: true,\n\t});\n\treturn error;\n};\n","import {setTimeout} from 'node:timers/promises';\nimport {DiscardedError} from '../return/final-error.js';\n\n// Validate `timeout` option\nexport const validateTimeout = ({timeout}) => {\n\tif (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {\n\t\tthrow new TypeError(`Expected the \\`timeout\\` option to be a non-negative integer, got \\`${timeout}\\` (${typeof timeout})`);\n\t}\n};\n\n// Fails when the `timeout` option is exceeded\nexport const throwOnTimeout = (subprocess, timeout, context, controller) => timeout === 0 || timeout === undefined\n\t? []\n\t: [killAfterTimeout(subprocess, timeout, context, controller)];\n\nconst killAfterTimeout = async (subprocess, timeout, context, {signal}) => {\n\tawait setTimeout(timeout, undefined, {signal});\n\tcontext.terminationReason ??= 'timeout';\n\tsubprocess.kill();\n\tthrow new DiscardedError();\n};\n","import {execPath, execArgv} from 'node:process';\nimport path from 'node:path';\nimport {safeNormalizeFileUrl} from '../arguments/file-url.js';\n\n// `execaNode()` is a shortcut for `execa(..., {node: true})`\nexport const mapNode = ({options}) => {\n\tif (options.node === false) {\n\t\tthrow new TypeError('The \"node\" option cannot be false with `execaNode()`.');\n\t}\n\n\treturn {options: {...options, node: true}};\n};\n\n// Applies the `node: true` option, and the related `nodePath`/`nodeOptions` options.\n// Modifies the file commands/arguments to ensure the same Node binary and flags are re-used.\n// Also adds `ipc: true` and `shell: false`.\nexport const handleNodeOption = (file, commandArguments, {\n\tnode: shouldHandleNode = false,\n\tnodePath = execPath,\n\tnodeOptions = execArgv.filter(nodeOption => !nodeOption.startsWith('--inspect')),\n\tcwd,\n\texecPath: formerNodePath,\n\t...options\n}) => {\n\tif (formerNodePath !== undefined) {\n\t\tthrow new TypeError('The \"execPath\" option has been removed. Please use the \"nodePath\" option instead.');\n\t}\n\n\tconst normalizedNodePath = safeNormalizeFileUrl(nodePath, 'The \"nodePath\" option');\n\tconst resolvedNodePath = path.resolve(cwd, normalizedNodePath);\n\tconst newOptions = {\n\t\t...options,\n\t\tnodePath: resolvedNodePath,\n\t\tnode: shouldHandleNode,\n\t\tcwd,\n\t};\n\n\tif (!shouldHandleNode) {\n\t\treturn [file, commandArguments, newOptions];\n\t}\n\n\tif (path.basename(file, '.exe') === 'node') {\n\t\tthrow new TypeError('When the \"node\" option is true, the first argument does not need to be \"node\".');\n\t}\n\n\treturn [\n\t\tresolvedNodePath,\n\t\t[...nodeOptions, file, ...commandArguments],\n\t\t{ipc: true, ...newOptions, shell: false},\n\t];\n};\n","import {serialize} from 'node:v8';\n\n// Validate the `ipcInput` option\nexport const validateIpcInputOption = ({ipcInput, ipc, serialization}) => {\n\tif (ipcInput === undefined) {\n\t\treturn;\n\t}\n\n\tif (!ipc) {\n\t\tthrow new Error('The `ipcInput` option cannot be set unless the `ipc` option is `true`.');\n\t}\n\n\tvalidateIpcInput[serialization](ipcInput);\n};\n\nconst validateAdvancedInput = ipcInput => {\n\ttry {\n\t\tserialize(ipcInput);\n\t} catch (error) {\n\t\tthrow new Error('The `ipcInput` option is not serializable with a structured clone.', {cause: error});\n\t}\n};\n\nconst validateJsonInput = ipcInput => {\n\ttry {\n\t\tJSON.stringify(ipcInput);\n\t} catch (error) {\n\t\tthrow new Error('The `ipcInput` option is not serializable with JSON.', {cause: error});\n\t}\n};\n\nconst validateIpcInput = {\n\tadvanced: validateAdvancedInput,\n\tjson: validateJsonInput,\n};\n\n// When the `ipcInput` option is set, it is sent as an initial IPC message to the subprocess\nexport const sendIpcInput = async (subprocess, ipcInput) => {\n\tif (ipcInput === undefined) {\n\t\treturn;\n\t}\n\n\tawait subprocess.sendMessage(ipcInput);\n};\n","// Validate `encoding` option\nexport const validateEncoding = ({encoding}) => {\n\tif (ENCODINGS.has(encoding)) {\n\t\treturn;\n\t}\n\n\tconst correctEncoding = getCorrectEncoding(encoding);\n\tif (correctEncoding !== undefined) {\n\t\tthrow new TypeError(`Invalid option \\`encoding: ${serializeEncoding(encoding)}\\`.\nPlease rename it to ${serializeEncoding(correctEncoding)}.`);\n\t}\n\n\tconst correctEncodings = [...ENCODINGS].map(correctEncoding => serializeEncoding(correctEncoding)).join(', ');\n\tthrow new TypeError(`Invalid option \\`encoding: ${serializeEncoding(encoding)}\\`.\nPlease rename it to one of: ${correctEncodings}.`);\n};\n\nconst TEXT_ENCODINGS = new Set(['utf8', 'utf16le']);\nexport const BINARY_ENCODINGS = new Set(['buffer', 'hex', 'base64', 'base64url', 'latin1', 'ascii']);\nconst ENCODINGS = new Set([...TEXT_ENCODINGS, ...BINARY_ENCODINGS]);\n\nconst getCorrectEncoding = encoding => {\n\tif (encoding === null) {\n\t\treturn 'buffer';\n\t}\n\n\tif (typeof encoding !== 'string') {\n\t\treturn;\n\t}\n\n\tconst lowerEncoding = encoding.toLowerCase();\n\tif (lowerEncoding in ENCODING_ALIASES) {\n\t\treturn ENCODING_ALIASES[lowerEncoding];\n\t}\n\n\tif (ENCODINGS.has(lowerEncoding)) {\n\t\treturn lowerEncoding;\n\t}\n};\n\nconst ENCODING_ALIASES = {\n\t// eslint-disable-next-line unicorn/text-encoding-identifier-case\n\t'utf-8': 'utf8',\n\t'utf-16le': 'utf16le',\n\t'ucs-2': 'utf16le',\n\tucs2: 'utf16le',\n\tbinary: 'latin1',\n};\n\nconst serializeEncoding = encoding => typeof encoding === 'string' ? `\"${encoding}\"` : String(encoding);\n","import {statSync} from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport {safeNormalizeFileUrl} from './file-url.js';\n\n// Normalize `cwd` option\nexport const normalizeCwd = (cwd = getDefaultCwd()) => {\n\tconst cwdString = safeNormalizeFileUrl(cwd, 'The \"cwd\" option');\n\treturn path.resolve(cwdString);\n};\n\nconst getDefaultCwd = () => {\n\ttry {\n\t\treturn process.cwd();\n\t} catch (error) {\n\t\terror.message = `The current directory does not exist.\\n${error.message}`;\n\t\tthrow error;\n\t}\n};\n\n// When `cwd` option has an invalid value, provide with a better error message\nexport const fixCwdError = (originalMessage, cwd) => {\n\tif (cwd === getDefaultCwd()) {\n\t\treturn originalMessage;\n\t}\n\n\tlet cwdStat;\n\ttry {\n\t\tcwdStat = statSync(cwd);\n\t} catch (error) {\n\t\treturn `The \"cwd\" option is invalid: ${cwd}.\\n${error.message}\\n${originalMessage}`;\n\t}\n\n\tif (!cwdStat.isDirectory()) {\n\t\treturn `The \"cwd\" option is not a directory: ${cwd}.\\n${originalMessage}`;\n\t}\n\n\treturn originalMessage;\n};\n","import path from 'node:path';\nimport process from 'node:process';\nimport crossSpawn from 'cross-spawn';\nimport {npmRunPathEnv} from 'npm-run-path';\nimport {normalizeForceKillAfterDelay} from '../terminate/kill.js';\nimport {normalizeKillSignal} from '../terminate/signal.js';\nimport {validateCancelSignal} from '../terminate/cancel.js';\nimport {validateGracefulCancel} from '../terminate/graceful.js';\nimport {validateTimeout} from '../terminate/timeout.js';\nimport {handleNodeOption} from '../methods/node.js';\nimport {validateIpcInputOption} from '../ipc/ipc-input.js';\nimport {validateEncoding, BINARY_ENCODINGS} from './encoding-option.js';\nimport {normalizeCwd} from './cwd.js';\nimport {normalizeFileUrl} from './file-url.js';\nimport {normalizeFdSpecificOptions} from './specific.js';\n\n// Normalize the options object, and sometimes also the file paths and arguments.\n// Applies default values, validate allowed options, normalize them.\nexport const normalizeOptions = (filePath, rawArguments, rawOptions) => {\n\trawOptions.cwd = normalizeCwd(rawOptions.cwd);\n\tconst [processedFile, processedArguments, processedOptions] = handleNodeOption(filePath, rawArguments, rawOptions);\n\n\tconst {command: file, args: commandArguments, options: initialOptions} = crossSpawn._parse(processedFile, processedArguments, processedOptions);\n\n\tconst fdOptions = normalizeFdSpecificOptions(initialOptions);\n\tconst options = addDefaultOptions(fdOptions);\n\tvalidateTimeout(options);\n\tvalidateEncoding(options);\n\tvalidateIpcInputOption(options);\n\tvalidateCancelSignal(options);\n\tvalidateGracefulCancel(options);\n\toptions.shell = normalizeFileUrl(options.shell);\n\toptions.env = getEnv(options);\n\toptions.killSignal = normalizeKillSignal(options.killSignal);\n\toptions.forceKillAfterDelay = normalizeForceKillAfterDelay(options.forceKillAfterDelay);\n\toptions.lines = options.lines.map((lines, fdNumber) => lines && !BINARY_ENCODINGS.has(options.encoding) && options.buffer[fdNumber]);\n\n\tif (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') {\n\t\t// #116\n\t\tcommandArguments.unshift('/q');\n\t}\n\n\treturn {file, commandArguments, options};\n};\n\nconst addDefaultOptions = ({\n\textendEnv = true,\n\tpreferLocal = false,\n\tcwd,\n\tlocalDir: localDirectory = cwd,\n\tencoding = 'utf8',\n\treject = true,\n\tcleanup = true,\n\tall = false,\n\twindowsHide = true,\n\tkillSignal = 'SIGTERM',\n\tforceKillAfterDelay = true,\n\tgracefulCancel = false,\n\tipcInput,\n\tipc = ipcInput !== undefined || gracefulCancel,\n\tserialization = 'advanced',\n\t...options\n}) => ({\n\t...options,\n\textendEnv,\n\tpreferLocal,\n\tcwd,\n\tlocalDirectory,\n\tencoding,\n\treject,\n\tcleanup,\n\tall,\n\twindowsHide,\n\tkillSignal,\n\tforceKillAfterDelay,\n\tgracefulCancel,\n\tipcInput,\n\tipc,\n\tserialization,\n});\n\nconst getEnv = ({env: envOption, extendEnv, preferLocal, node, localDirectory, nodePath}) => {\n\tconst env = extendEnv ? {...process.env, ...envOption} : envOption;\n\n\tif (preferLocal || node) {\n\t\treturn npmRunPathEnv({\n\t\t\tenv,\n\t\t\tcwd: localDirectory,\n\t\t\texecPath: nodePath,\n\t\t\tpreferLocal,\n\t\t\taddExecPath: node,\n\t\t});\n\t}\n\n\treturn env;\n};\n","export default function stripFinalNewline(input) {\n\tif (typeof input === 'string') {\n\t\treturn stripFinalNewlineString(input);\n\t}\n\n\tif (!(ArrayBuffer.isView(input) && input.BYTES_PER_ELEMENT === 1)) {\n\t\tthrow new Error('Input must be a string or a Uint8Array');\n\t}\n\n\treturn stripFinalNewlineBinary(input);\n}\n\nconst stripFinalNewlineString = input =>\n\tinput.at(-1) === LF\n\t\t? input.slice(0, input.at(-2) === CR ? -2 : -1)\n\t\t: input;\n\nconst stripFinalNewlineBinary = input =>\n\tinput.at(-1) === LF_BINARY\n\t\t? input.subarray(0, input.at(-2) === CR_BINARY ? -2 : -1)\n\t\t: input;\n\nconst LF = '\\n';\nconst LF_BINARY = LF.codePointAt(0);\nconst CR = '\\r';\nconst CR_BINARY = CR.codePointAt(0);\n","export function isStream(stream, {checkOpen = true} = {}) {\n\treturn stream !== null\n\t\t&& typeof stream === 'object'\n\t\t&& (stream.writable || stream.readable || !checkOpen || (stream.writable === undefined && stream.readable === undefined))\n\t\t&& typeof stream.pipe === 'function';\n}\n\nexport function isWritableStream(stream, {checkOpen = true} = {}) {\n\treturn isStream(stream, {checkOpen})\n\t\t&& (stream.writable || !checkOpen)\n\t\t&& typeof stream.write === 'function'\n\t\t&& typeof stream.end === 'function'\n\t\t&& typeof stream.writable === 'boolean'\n\t\t&& typeof stream.writableObjectMode === 'boolean'\n\t\t&& typeof stream.destroy === 'function'\n\t\t&& typeof stream.destroyed === 'boolean';\n}\n\nexport function isReadableStream(stream, {checkOpen = true} = {}) {\n\treturn isStream(stream, {checkOpen})\n\t\t&& (stream.readable || !checkOpen)\n\t\t&& typeof stream.read === 'function'\n\t\t&& typeof stream.readable === 'boolean'\n\t\t&& typeof stream.readableObjectMode === 'boolean'\n\t\t&& typeof stream.destroy === 'function'\n\t\t&& typeof stream.destroyed === 'boolean';\n}\n\nexport function isDuplexStream(stream, options) {\n\treturn isWritableStream(stream, options)\n\t\t&& isReadableStream(stream, options);\n}\n\nexport function isTransformStream(stream, options) {\n\treturn isDuplexStream(stream, options)\n\t\t&& typeof stream._transform === 'function';\n}\n","const a = Object.getPrototypeOf(\n  Object.getPrototypeOf(\n    /* istanbul ignore next */\n    async function* () {\n    }\n  ).prototype\n);\nclass c {\n  #t;\n  #n;\n  #r = !1;\n  #e = void 0;\n  constructor(e, t) {\n    this.#t = e, this.#n = t;\n  }\n  next() {\n    const e = () => this.#s();\n    return this.#e = this.#e ? this.#e.then(e, e) : e(), this.#e;\n  }\n  return(e) {\n    const t = () => this.#i(e);\n    return this.#e ? this.#e.then(t, t) : t();\n  }\n  async #s() {\n    if (this.#r)\n      return {\n        done: !0,\n        value: void 0\n      };\n    let e;\n    try {\n      e = await this.#t.read();\n    } catch (t) {\n      throw this.#e = void 0, this.#r = !0, this.#t.releaseLock(), t;\n    }\n    return e.done && (this.#e = void 0, this.#r = !0, this.#t.releaseLock()), e;\n  }\n  async #i(e) {\n    if (this.#r)\n      return {\n        done: !0,\n        value: e\n      };\n    if (this.#r = !0, !this.#n) {\n      const t = this.#t.cancel(e);\n      return this.#t.releaseLock(), await t, {\n        done: !0,\n        value: e\n      };\n    }\n    return this.#t.releaseLock(), {\n      done: !0,\n      value: e\n    };\n  }\n}\nconst n = Symbol();\nfunction i() {\n  return this[n].next();\n}\nObject.defineProperty(i, \"name\", { value: \"next\" });\nfunction o(r) {\n  return this[n].return(r);\n}\nObject.defineProperty(o, \"name\", { value: \"return\" });\nconst u = Object.create(a, {\n  next: {\n    enumerable: !0,\n    configurable: !0,\n    writable: !0,\n    value: i\n  },\n  return: {\n    enumerable: !0,\n    configurable: !0,\n    writable: !0,\n    value: o\n  }\n});\nfunction h({ preventCancel: r = !1 } = {}) {\n  const e = this.getReader(), t = new c(\n    e,\n    r\n  ), s = Object.create(u);\n  return s[n] = t, s;\n}\nexport {\n  h as asyncIterator\n};\n","import {isReadableStream} from 'is-stream';\nimport {asyncIterator} from '@sec-ant/readable-stream/ponyfill';\n\nexport const getAsyncIterable = stream => {\n\tif (isReadableStream(stream, {checkOpen: false}) && nodeImports.on !== undefined) {\n\t\treturn getStreamIterable(stream);\n\t}\n\n\tif (typeof stream?.[Symbol.asyncIterator] === 'function') {\n\t\treturn stream;\n\t}\n\n\t// `ReadableStream[Symbol.asyncIterator]` support is missing in multiple browsers, so we ponyfill it\n\tif (toString.call(stream) === '[object ReadableStream]') {\n\t\treturn asyncIterator.call(stream);\n\t}\n\n\tthrow new TypeError('The first argument must be a Readable, a ReadableStream, or an async iterable.');\n};\n\nconst {toString} = Object.prototype;\n\n// The default iterable for Node.js streams does not allow for multiple readers at once, so we re-implement it\nconst getStreamIterable = async function * (stream) {\n\tconst controller = new AbortController();\n\tconst state = {};\n\thandleStreamEnd(stream, controller, state);\n\n\ttry {\n\t\tfor await (const [chunk] of nodeImports.on(stream, 'data', {signal: controller.signal})) {\n\t\t\tyield chunk;\n\t\t}\n\t} catch (error) {\n\t\t// Stream failure, for example due to `stream.destroy(error)`\n\t\tif (state.error !== undefined) {\n\t\t\tthrow state.error;\n\t\t// `error` event directly emitted on stream\n\t\t} else if (!controller.signal.aborted) {\n\t\t\tthrow error;\n\t\t// Otherwise, stream completed successfully\n\t\t}\n\t\t// The `finally` block also runs when the caller throws, for example due to the `maxBuffer` option\n\t} finally {\n\t\tstream.destroy();\n\t}\n};\n\nconst handleStreamEnd = async (stream, controller, state) => {\n\ttry {\n\t\tawait nodeImports.finished(stream, {\n\t\t\tcleanup: true,\n\t\t\treadable: true,\n\t\t\twritable: false,\n\t\t\terror: false,\n\t\t});\n\t} catch (error) {\n\t\tstate.error = error;\n\t} finally {\n\t\tcontroller.abort();\n\t}\n};\n\n// Loaded by the Node entrypoint, but not by the browser one.\n// This prevents using dynamic imports.\nexport const nodeImports = {};\n","import {getAsyncIterable} from './stream.js';\n\nexport const getStreamContents = async (stream, {init, convertChunk, getSize, truncateChunk, addChunk, getFinalChunk, finalize}, {maxBuffer = Number.POSITIVE_INFINITY} = {}) => {\n\tconst asyncIterable = getAsyncIterable(stream);\n\n\tconst state = init();\n\tstate.length = 0;\n\n\ttry {\n\t\tfor await (const chunk of asyncIterable) {\n\t\t\tconst chunkType = getChunkType(chunk);\n\t\t\tconst convertedChunk = convertChunk[chunkType](chunk, state);\n\t\t\tappendChunk({\n\t\t\t\tconvertedChunk,\n\t\t\t\tstate,\n\t\t\t\tgetSize,\n\t\t\t\ttruncateChunk,\n\t\t\t\taddChunk,\n\t\t\t\tmaxBuffer,\n\t\t\t});\n\t\t}\n\n\t\tappendFinalChunk({\n\t\t\tstate,\n\t\t\tconvertChunk,\n\t\t\tgetSize,\n\t\t\ttruncateChunk,\n\t\t\taddChunk,\n\t\t\tgetFinalChunk,\n\t\t\tmaxBuffer,\n\t\t});\n\t\treturn finalize(state);\n\t} catch (error) {\n\t\tconst normalizedError = typeof error === 'object' && error !== null ? error : new Error(error);\n\t\tnormalizedError.bufferedData = finalize(state);\n\t\tthrow normalizedError;\n\t}\n};\n\nconst appendFinalChunk = ({state, getSize, truncateChunk, addChunk, getFinalChunk, maxBuffer}) => {\n\tconst convertedChunk = getFinalChunk(state);\n\tif (convertedChunk !== undefined) {\n\t\tappendChunk({\n\t\t\tconvertedChunk,\n\t\t\tstate,\n\t\t\tgetSize,\n\t\t\ttruncateChunk,\n\t\t\taddChunk,\n\t\t\tmaxBuffer,\n\t\t});\n\t}\n};\n\nconst appendChunk = ({convertedChunk, state, getSize, truncateChunk, addChunk, maxBuffer}) => {\n\tconst chunkSize = getSize(convertedChunk);\n\tconst newLength = state.length + chunkSize;\n\n\tif (newLength <= maxBuffer) {\n\t\taddNewChunk(convertedChunk, state, addChunk, newLength);\n\t\treturn;\n\t}\n\n\tconst truncatedChunk = truncateChunk(convertedChunk, maxBuffer - state.length);\n\n\tif (truncatedChunk !== undefined) {\n\t\taddNewChunk(truncatedChunk, state, addChunk, maxBuffer);\n\t}\n\n\tthrow new MaxBufferError();\n};\n\nconst addNewChunk = (convertedChunk, state, addChunk, newLength) => {\n\tstate.contents = addChunk(convertedChunk, state, newLength);\n\tstate.length = newLength;\n};\n\nconst getChunkType = chunk => {\n\tconst typeOfChunk = typeof chunk;\n\n\tif (typeOfChunk === 'string') {\n\t\treturn 'string';\n\t}\n\n\tif (typeOfChunk !== 'object' || chunk === null) {\n\t\treturn 'others';\n\t}\n\n\tif (globalThis.Buffer?.isBuffer(chunk)) {\n\t\treturn 'buffer';\n\t}\n\n\tconst prototypeName = objectToString.call(chunk);\n\n\tif (prototypeName === '[object ArrayBuffer]') {\n\t\treturn 'arrayBuffer';\n\t}\n\n\tif (prototypeName === '[object DataView]') {\n\t\treturn 'dataView';\n\t}\n\n\tif (\n\t\tNumber.isInteger(chunk.byteLength)\n\t\t&& Number.isInteger(chunk.byteOffset)\n\t\t&& objectToString.call(chunk.buffer) === '[object ArrayBuffer]'\n\t) {\n\t\treturn 'typedArray';\n\t}\n\n\treturn 'others';\n};\n\nconst {toString: objectToString} = Object.prototype;\n\nexport class MaxBufferError extends Error {\n\tname = 'MaxBufferError';\n\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t}\n}\n","export const identity = value => value;\n\nexport const noop = () => undefined;\n\nexport const getContentsProperty = ({contents}) => contents;\n\nexport const throwObjectStream = chunk => {\n\tthrow new Error(`Streams in object mode are not supported: ${String(chunk)}`);\n};\n\nexport const getLengthProperty = convertedChunk => convertedChunk.length;\n","import {getStreamContents} from './contents.js';\nimport {identity, noop, getContentsProperty} from './utils.js';\n\nexport async function getStreamAsArray(stream, options) {\n\treturn getStreamContents(stream, arrayMethods, options);\n}\n\nconst initArray = () => ({contents: []});\n\nconst increment = () => 1;\n\nconst addArrayChunk = (convertedChunk, {contents}) => {\n\tcontents.push(convertedChunk);\n\treturn contents;\n};\n\nconst arrayMethods = {\n\tinit: initArray,\n\tconvertChunk: {\n\t\tstring: identity,\n\t\tbuffer: identity,\n\t\tarrayBuffer: identity,\n\t\tdataView: identity,\n\t\ttypedArray: identity,\n\t\tothers: identity,\n\t},\n\tgetSize: increment,\n\ttruncateChunk: noop,\n\taddChunk: addArrayChunk,\n\tgetFinalChunk: noop,\n\tfinalize: getContentsProperty,\n};\n","import {getStreamContents} from './contents.js';\nimport {noop, throwObjectStream, getLengthProperty} from './utils.js';\n\nexport async function getStreamAsArrayBuffer(stream, options) {\n\treturn getStreamContents(stream, arrayBufferMethods, options);\n}\n\nconst initArrayBuffer = () => ({contents: new ArrayBuffer(0)});\n\nconst useTextEncoder = chunk => textEncoder.encode(chunk);\nconst textEncoder = new TextEncoder();\n\nconst useUint8Array = chunk => new Uint8Array(chunk);\n\nconst useUint8ArrayWithOffset = chunk => new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n\nconst truncateArrayBufferChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize);\n\n// `contents` is an increasingly growing `Uint8Array`.\nconst addArrayBufferChunk = (convertedChunk, {contents, length: previousLength}, length) => {\n\tconst newContents = hasArrayBufferResize() ? resizeArrayBuffer(contents, length) : resizeArrayBufferSlow(contents, length);\n\tnew Uint8Array(newContents).set(convertedChunk, previousLength);\n\treturn newContents;\n};\n\n// Without `ArrayBuffer.resize()`, `contents` size is always a power of 2.\n// This means its last bytes are zeroes (not stream data), which need to be\n// trimmed at the end with `ArrayBuffer.slice()`.\nconst resizeArrayBufferSlow = (contents, length) => {\n\tif (length <= contents.byteLength) {\n\t\treturn contents;\n\t}\n\n\tconst arrayBuffer = new ArrayBuffer(getNewContentsLength(length));\n\tnew Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0);\n\treturn arrayBuffer;\n};\n\n// With `ArrayBuffer.resize()`, `contents` size matches exactly the size of\n// the stream data. It does not include extraneous zeroes to trim at the end.\n// The underlying `ArrayBuffer` does allocate a number of bytes that is a power\n// of 2, but those bytes are only visible after calling `ArrayBuffer.resize()`.\nconst resizeArrayBuffer = (contents, length) => {\n\tif (length <= contents.maxByteLength) {\n\t\tcontents.resize(length);\n\t\treturn contents;\n\t}\n\n\tconst arrayBuffer = new ArrayBuffer(length, {maxByteLength: getNewContentsLength(length)});\n\tnew Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0);\n\treturn arrayBuffer;\n};\n\n// Retrieve the closest `length` that is both >= and a power of 2\nconst getNewContentsLength = length => SCALE_FACTOR ** Math.ceil(Math.log(length) / Math.log(SCALE_FACTOR));\n\nconst SCALE_FACTOR = 2;\n\nconst finalizeArrayBuffer = ({contents, length}) => hasArrayBufferResize() ? contents : contents.slice(0, length);\n\n// `ArrayBuffer.slice()` is slow. When `ArrayBuffer.resize()` is available\n// (Node >=20.0.0, Safari >=16.4 and Chrome), we can use it instead.\n// eslint-disable-next-line no-warning-comments\n// TODO: remove after dropping support for Node 20.\n// eslint-disable-next-line no-warning-comments\n// TODO: use `ArrayBuffer.transferToFixedLength()` instead once it is available\nconst hasArrayBufferResize = () => 'resize' in ArrayBuffer.prototype;\n\nconst arrayBufferMethods = {\n\tinit: initArrayBuffer,\n\tconvertChunk: {\n\t\tstring: useTextEncoder,\n\t\tbuffer: useUint8Array,\n\t\tarrayBuffer: useUint8Array,\n\t\tdataView: useUint8ArrayWithOffset,\n\t\ttypedArray: useUint8ArrayWithOffset,\n\t\tothers: throwObjectStream,\n\t},\n\tgetSize: getLengthProperty,\n\ttruncateChunk: truncateArrayBufferChunk,\n\taddChunk: addArrayBufferChunk,\n\tgetFinalChunk: noop,\n\tfinalize: finalizeArrayBuffer,\n};\n","import {getStreamContents} from './contents.js';\nimport {\n\tidentity,\n\tgetContentsProperty,\n\tthrowObjectStream,\n\tgetLengthProperty,\n} from './utils.js';\n\nexport async function getStreamAsString(stream, options) {\n\treturn getStreamContents(stream, stringMethods, options);\n}\n\nconst initString = () => ({contents: '', textDecoder: new TextDecoder()});\n\nconst useTextDecoder = (chunk, {textDecoder}) => textDecoder.decode(chunk, {stream: true});\n\nconst addStringChunk = (convertedChunk, {contents}) => contents + convertedChunk;\n\nconst truncateStringChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize);\n\nconst getFinalStringChunk = ({textDecoder}) => {\n\tconst finalChunk = textDecoder.decode();\n\treturn finalChunk === '' ? undefined : finalChunk;\n};\n\nconst stringMethods = {\n\tinit: initString,\n\tconvertChunk: {\n\t\tstring: identity,\n\t\tbuffer: useTextDecoder,\n\t\tarrayBuffer: useTextDecoder,\n\t\tdataView: useTextDecoder,\n\t\ttypedArray: useTextDecoder,\n\t\tothers: throwObjectStream,\n\t},\n\tgetSize: getLengthProperty,\n\ttruncateChunk: truncateStringChunk,\n\taddChunk: addStringChunk,\n\tgetFinalChunk: getFinalStringChunk,\n\tfinalize: getContentsProperty,\n};\n","import {on} from 'node:events';\nimport {finished} from 'node:stream/promises';\nimport {nodeImports} from './stream.js';\n\nObject.assign(nodeImports, {on, finished});\n\nexport {\n\tdefault,\n\tgetStreamAsArray,\n\tgetStreamAsArrayBuffer,\n\tgetStreamAsBuffer,\n\tMaxBufferError,\n} from './exports.js';\n","import {MaxBufferError} from 'get-stream';\nimport {getStreamName} from '../utils/standard-stream.js';\nimport {getFdSpecificValue} from '../arguments/specific.js';\n\n// When the `maxBuffer` option is hit, a MaxBufferError is thrown.\n// The stream is aborted, then specific information is kept for the error message.\nexport const handleMaxBuffer = ({error, stream, readableObjectMode, lines, encoding, fdNumber}) => {\n\tif (!(error instanceof MaxBufferError)) {\n\t\tthrow error;\n\t}\n\n\tif (fdNumber === 'all') {\n\t\treturn error;\n\t}\n\n\tconst unit = getMaxBufferUnit(readableObjectMode, lines, encoding);\n\terror.maxBufferInfo = {fdNumber, unit};\n\tstream.destroy();\n\tthrow error;\n};\n\nconst getMaxBufferUnit = (readableObjectMode, lines, encoding) => {\n\tif (readableObjectMode) {\n\t\treturn 'objects';\n\t}\n\n\tif (lines) {\n\t\treturn 'lines';\n\t}\n\n\tif (encoding === 'buffer') {\n\t\treturn 'bytes';\n\t}\n\n\treturn 'characters';\n};\n\n// Check the `maxBuffer` option with `result.ipcOutput`\nexport const checkIpcMaxBuffer = (subprocess, ipcOutput, maxBuffer) => {\n\tif (ipcOutput.length !== maxBuffer) {\n\t\treturn;\n\t}\n\n\tconst error = new MaxBufferError();\n\terror.maxBufferInfo = {fdNumber: 'ipc'};\n\tthrow error;\n};\n\n// Error message when `maxBuffer` is hit\nexport const getMaxBufferMessage = (error, maxBuffer) => {\n\tconst {streamName, threshold, unit} = getMaxBufferInfo(error, maxBuffer);\n\treturn `Command's ${streamName} was larger than ${threshold} ${unit}`;\n};\n\nconst getMaxBufferInfo = (error, maxBuffer) => {\n\tif (error?.maxBufferInfo === undefined) {\n\t\treturn {streamName: 'output', threshold: maxBuffer[1], unit: 'bytes'};\n\t}\n\n\tconst {maxBufferInfo: {fdNumber, unit}} = error;\n\tdelete error.maxBufferInfo;\n\n\tconst threshold = getFdSpecificValue(maxBuffer, fdNumber);\n\tif (fdNumber === 'ipc') {\n\t\treturn {streamName: 'IPC output', threshold, unit: 'messages'};\n\t}\n\n\treturn {streamName: getStreamName(fdNumber), threshold, unit};\n};\n\n// The only way to apply `maxBuffer` with `spawnSync()` is to use the native `maxBuffer` option Node.js provides.\n// However, this has multiple limitations, and cannot behave the exact same way as the async behavior.\n// When the `maxBuffer` is hit, a `ENOBUFS` error is thrown.\nexport const isMaxBufferSync = (resultError, output, maxBuffer) => resultError?.code === 'ENOBUFS'\n\t&& output !== null\n\t&& output.some(result => result !== null && result.length > getMaxBufferSync(maxBuffer));\n\n// When `maxBuffer` is hit, ensure the result is truncated\nexport const truncateMaxBufferSync = (result, isMaxBuffer, maxBuffer) => {\n\tif (!isMaxBuffer) {\n\t\treturn result;\n\t}\n\n\tconst maxBufferValue = getMaxBufferSync(maxBuffer);\n\treturn result.length > maxBufferValue ? result.slice(0, maxBufferValue) : result;\n};\n\n// `spawnSync()` does not allow differentiating `maxBuffer` per file descriptor, so we always use `stdout`\nexport const getMaxBufferSync = ([, stdoutMaxBuffer]) => stdoutMaxBuffer;\n","import {inspect} from 'node:util';\nimport stripFinalNewline from 'strip-final-newline';\nimport {isUint8Array, uint8ArrayToString} from '../utils/uint-array.js';\nimport {fixCwdError} from '../arguments/cwd.js';\nimport {escapeLines} from '../arguments/escape.js';\nimport {getMaxBufferMessage} from '../io/max-buffer.js';\nimport {getSignalDescription} from '../terminate/signal.js';\nimport {DiscardedError, isExecaError} from './final-error.js';\n\n// Computes `error.message`, `error.shortMessage` and `error.originalMessage`\nexport const createMessages = ({\n\tstdio,\n\tall,\n\tipcOutput,\n\toriginalError,\n\tsignal,\n\tsignalDescription,\n\texitCode,\n\tescapedCommand,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\tforceKillAfterDelay,\n\tkillSignal,\n\tmaxBuffer,\n\ttimeout,\n\tcwd,\n}) => {\n\tconst errorCode = originalError?.code;\n\tconst prefix = getErrorPrefix({\n\t\toriginalError,\n\t\ttimedOut,\n\t\ttimeout,\n\t\tisMaxBuffer,\n\t\tmaxBuffer,\n\t\terrorCode,\n\t\tsignal,\n\t\tsignalDescription,\n\t\texitCode,\n\t\tisCanceled,\n\t\tisGracefullyCanceled,\n\t\tisForcefullyTerminated,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t});\n\tconst originalMessage = getOriginalMessage(originalError, cwd);\n\tconst suffix = originalMessage === undefined ? '' : `\\n${originalMessage}`;\n\tconst shortMessage = `${prefix}: ${escapedCommand}${suffix}`;\n\tconst messageStdio = all === undefined ? [stdio[2], stdio[1]] : [all];\n\tconst message = [\n\t\tshortMessage,\n\t\t...messageStdio,\n\t\t...stdio.slice(3),\n\t\tipcOutput.map(ipcMessage => serializeIpcMessage(ipcMessage)).join('\\n'),\n\t]\n\t\t.map(messagePart => escapeLines(stripFinalNewline(serializeMessagePart(messagePart))))\n\t\t.filter(Boolean)\n\t\t.join('\\n\\n');\n\treturn {originalMessage, shortMessage, message};\n};\n\nconst getErrorPrefix = ({\n\toriginalError,\n\ttimedOut,\n\ttimeout,\n\tisMaxBuffer,\n\tmaxBuffer,\n\terrorCode,\n\tsignal,\n\tsignalDescription,\n\texitCode,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisForcefullyTerminated,\n\tforceKillAfterDelay,\n\tkillSignal,\n}) => {\n\tconst forcefulSuffix = getForcefulSuffix(isForcefullyTerminated, forceKillAfterDelay);\n\n\tif (timedOut) {\n\t\treturn `Command timed out after ${timeout} milliseconds${forcefulSuffix}`;\n\t}\n\n\tif (isGracefullyCanceled) {\n\t\tif (signal === undefined) {\n\t\t\treturn `Command was gracefully canceled with exit code ${exitCode}`;\n\t\t}\n\n\t\treturn isForcefullyTerminated\n\t\t\t? `Command was gracefully canceled${forcefulSuffix}`\n\t\t\t: `Command was gracefully canceled with ${signal} (${signalDescription})`;\n\t}\n\n\tif (isCanceled) {\n\t\treturn `Command was canceled${forcefulSuffix}`;\n\t}\n\n\tif (isMaxBuffer) {\n\t\treturn `${getMaxBufferMessage(originalError, maxBuffer)}${forcefulSuffix}`;\n\t}\n\n\tif (errorCode !== undefined) {\n\t\treturn `Command failed with ${errorCode}${forcefulSuffix}`;\n\t}\n\n\tif (isForcefullyTerminated) {\n\t\treturn `Command was killed with ${killSignal} (${getSignalDescription(killSignal)})${forcefulSuffix}`;\n\t}\n\n\tif (signal !== undefined) {\n\t\treturn `Command was killed with ${signal} (${signalDescription})`;\n\t}\n\n\tif (exitCode !== undefined) {\n\t\treturn `Command failed with exit code ${exitCode}`;\n\t}\n\n\treturn 'Command failed';\n};\n\nconst getForcefulSuffix = (isForcefullyTerminated, forceKillAfterDelay) => isForcefullyTerminated\n\t? ` and was forcefully terminated after ${forceKillAfterDelay} milliseconds`\n\t: '';\n\nconst getOriginalMessage = (originalError, cwd) => {\n\tif (originalError instanceof DiscardedError) {\n\t\treturn;\n\t}\n\n\tconst originalMessage = isExecaError(originalError)\n\t\t? originalError.originalMessage\n\t\t: String(originalError?.message ?? originalError);\n\tconst escapedOriginalMessage = escapeLines(fixCwdError(originalMessage, cwd));\n\treturn escapedOriginalMessage === '' ? undefined : escapedOriginalMessage;\n};\n\nconst serializeIpcMessage = ipcMessage => typeof ipcMessage === 'string'\n\t? ipcMessage\n\t: inspect(ipcMessage);\n\nconst serializeMessagePart = messagePart => Array.isArray(messagePart)\n\t? messagePart.map(messageItem => stripFinalNewline(serializeMessageItem(messageItem))).filter(Boolean).join('\\n')\n\t: serializeMessageItem(messagePart);\n\nconst serializeMessageItem = messageItem => {\n\tif (typeof messageItem === 'string') {\n\t\treturn messageItem;\n\t}\n\n\tif (isUint8Array(messageItem)) {\n\t\treturn uint8ArrayToString(messageItem);\n\t}\n\n\treturn '';\n};\n","import {getSignalDescription} from '../terminate/signal.js';\nimport {getDurationMs} from './duration.js';\nimport {getFinalError} from './final-error.js';\nimport {createMessages} from './message.js';\n\n// Object returned on subprocess success\nexport const makeSuccessResult = ({\n\tcommand,\n\tescapedCommand,\n\tstdio,\n\tall,\n\tipcOutput,\n\toptions: {cwd},\n\tstartTime,\n}) => omitUndefinedProperties({\n\tcommand,\n\tescapedCommand,\n\tcwd,\n\tdurationMs: getDurationMs(startTime),\n\tfailed: false,\n\ttimedOut: false,\n\tisCanceled: false,\n\tisGracefullyCanceled: false,\n\tisTerminated: false,\n\tisMaxBuffer: false,\n\tisForcefullyTerminated: false,\n\texitCode: 0,\n\tstdout: stdio[1],\n\tstderr: stdio[2],\n\tall,\n\tstdio,\n\tipcOutput,\n\tpipedFrom: [],\n});\n\n// Object returned on subprocess failure before spawning\nexport const makeEarlyError = ({\n\terror,\n\tcommand,\n\tescapedCommand,\n\tfileDescriptors,\n\toptions,\n\tstartTime,\n\tisSync,\n}) => makeError({\n\terror,\n\tcommand,\n\tescapedCommand,\n\tstartTime,\n\ttimedOut: false,\n\tisCanceled: false,\n\tisGracefullyCanceled: false,\n\tisMaxBuffer: false,\n\tisForcefullyTerminated: false,\n\tstdio: Array.from({length: fileDescriptors.length}),\n\tipcOutput: [],\n\toptions,\n\tisSync,\n});\n\n// Object returned on subprocess failure\nexport const makeError = ({\n\terror: originalError,\n\tcommand,\n\tescapedCommand,\n\tstartTime,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\texitCode: rawExitCode,\n\tsignal: rawSignal,\n\tstdio,\n\tall,\n\tipcOutput,\n\toptions: {\n\t\ttimeoutDuration,\n\t\ttimeout = timeoutDuration,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t\tcwd,\n\t\tmaxBuffer,\n\t},\n\tisSync,\n}) => {\n\tconst {exitCode, signal, signalDescription} = normalizeExitPayload(rawExitCode, rawSignal);\n\tconst {originalMessage, shortMessage, message} = createMessages({\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\toriginalError,\n\t\tsignal,\n\t\tsignalDescription,\n\t\texitCode,\n\t\tescapedCommand,\n\t\ttimedOut,\n\t\tisCanceled,\n\t\tisGracefullyCanceled,\n\t\tisMaxBuffer,\n\t\tisForcefullyTerminated,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t\tmaxBuffer,\n\t\ttimeout,\n\t\tcwd,\n\t});\n\tconst error = getFinalError(originalError, message, isSync);\n\tObject.assign(error, getErrorProperties({\n\t\terror,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\ttimedOut,\n\t\tisCanceled,\n\t\tisGracefullyCanceled,\n\t\tisMaxBuffer,\n\t\tisForcefullyTerminated,\n\t\texitCode,\n\t\tsignal,\n\t\tsignalDescription,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\tcwd,\n\t\toriginalMessage,\n\t\tshortMessage,\n\t}));\n\treturn error;\n};\n\nconst getErrorProperties = ({\n\terror,\n\tcommand,\n\tescapedCommand,\n\tstartTime,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\texitCode,\n\tsignal,\n\tsignalDescription,\n\tstdio,\n\tall,\n\tipcOutput,\n\tcwd,\n\toriginalMessage,\n\tshortMessage,\n}) => omitUndefinedProperties({\n\tshortMessage,\n\toriginalMessage,\n\tcommand,\n\tescapedCommand,\n\tcwd,\n\tdurationMs: getDurationMs(startTime),\n\tfailed: true,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisTerminated: signal !== undefined,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\texitCode,\n\tsignal,\n\tsignalDescription,\n\tcode: error.cause?.code,\n\tstdout: stdio[1],\n\tstderr: stdio[2],\n\tall,\n\tstdio,\n\tipcOutput,\n\tpipedFrom: [],\n});\n\nconst omitUndefinedProperties = result => Object.fromEntries(Object.entries(result).filter(([, value]) => value !== undefined));\n\n// `signal` and `exitCode` emitted on `subprocess.on('exit')` event can be `null`.\n// We normalize them to `undefined`\nconst normalizeExitPayload = (rawExitCode, rawSignal) => {\n\tconst exitCode = rawExitCode === null ? undefined : rawExitCode;\n\tconst signal = rawSignal === null ? undefined : rawSignal;\n\tconst signalDescription = signal === undefined ? undefined : getSignalDescription(rawSignal);\n\treturn {exitCode, signal, signalDescription};\n};\n","const toZeroIfInfinity = value => Number.isFinite(value) ? value : 0;\n\nfunction parseNumber(milliseconds) {\n\treturn {\n\t\tdays: Math.trunc(milliseconds / 86_400_000),\n\t\thours: Math.trunc(milliseconds / 3_600_000 % 24),\n\t\tminutes: Math.trunc(milliseconds / 60_000 % 60),\n\t\tseconds: Math.trunc(milliseconds / 1000 % 60),\n\t\tmilliseconds: Math.trunc(milliseconds % 1000),\n\t\tmicroseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1000) % 1000),\n\t\tnanoseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1e6) % 1000),\n\t};\n}\n\nfunction parseBigint(milliseconds) {\n\treturn {\n\t\tdays: milliseconds / 86_400_000n,\n\t\thours: milliseconds / 3_600_000n % 24n,\n\t\tminutes: milliseconds / 60_000n % 60n,\n\t\tseconds: milliseconds / 1000n % 60n,\n\t\tmilliseconds: milliseconds % 1000n,\n\t\tmicroseconds: 0n,\n\t\tnanoseconds: 0n,\n\t};\n}\n\nexport default function parseMilliseconds(milliseconds) {\n\tswitch (typeof milliseconds) {\n\t\tcase 'number': {\n\t\t\tif (Number.isFinite(milliseconds)) {\n\t\t\t\treturn parseNumber(milliseconds);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'bigint': {\n\t\t\treturn parseBigint(milliseconds);\n\t\t}\n\n\t\t// No default\n\t}\n\n\tthrow new TypeError('Expected a finite number or bigint');\n}\n","import parseMilliseconds from 'parse-ms';\n\nconst isZero = value => value === 0 || value === 0n;\nconst pluralize = (word, count) => (count === 1 || count === 1n) ? word : `${word}s`;\n\nconst SECOND_ROUNDING_EPSILON = 0.000_000_1;\nconst ONE_DAY_IN_MILLISECONDS = 24n * 60n * 60n * 1000n;\n\nexport default function prettyMilliseconds(milliseconds, options) {\n\tconst isBigInt = typeof milliseconds === 'bigint';\n\tif (!isBigInt && !Number.isFinite(milliseconds)) {\n\t\tthrow new TypeError('Expected a finite number or bigint');\n\t}\n\n\toptions = {...options};\n\n\tconst sign = milliseconds < 0 ? '-' : '';\n\tmilliseconds = milliseconds < 0 ? -milliseconds : milliseconds; // Cannot use `Math.abs()` because of BigInt support.\n\n\tif (options.colonNotation) {\n\t\toptions.compact = false;\n\t\toptions.formatSubMilliseconds = false;\n\t\toptions.separateMilliseconds = false;\n\t\toptions.verbose = false;\n\t}\n\n\tif (options.compact) {\n\t\toptions.unitCount = 1;\n\t\toptions.secondsDecimalDigits = 0;\n\t\toptions.millisecondsDecimalDigits = 0;\n\t}\n\n\tlet result = [];\n\n\tconst floorDecimals = (value, decimalDigits) => {\n\t\tconst flooredInterimValue = Math.floor((value * (10 ** decimalDigits)) + SECOND_ROUNDING_EPSILON);\n\t\tconst flooredValue = Math.round(flooredInterimValue) / (10 ** decimalDigits);\n\t\treturn flooredValue.toFixed(decimalDigits);\n\t};\n\n\tconst add = (value, long, short, valueString) => {\n\t\tif (\n\t\t\t(result.length === 0 || !options.colonNotation)\n\t\t\t&& isZero(value)\n\t\t\t&& !(options.colonNotation && short === 'm')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvalueString ??= String(value);\n\t\tif (options.colonNotation) {\n\t\t\tconst wholeDigits = valueString.includes('.') ? valueString.split('.')[0].length : valueString.length;\n\t\t\tconst minLength = result.length > 0 ? 2 : 1;\n\t\t\tvalueString = '0'.repeat(Math.max(0, minLength - wholeDigits)) + valueString;\n\t\t} else {\n\t\t\tvalueString += options.verbose ? ' ' + pluralize(long, value) : short;\n\t\t}\n\n\t\tresult.push(valueString);\n\t};\n\n\tconst parsed = parseMilliseconds(milliseconds);\n\tconst days = BigInt(parsed.days);\n\n\tif (options.hideYearAndDays) {\n\t\tadd((BigInt(days) * 24n) + BigInt(parsed.hours), 'hour', 'h');\n\t} else {\n\t\tif (options.hideYear) {\n\t\t\tadd(days, 'day', 'd');\n\t\t} else {\n\t\t\tadd(days / 365n, 'year', 'y');\n\t\t\tadd(days % 365n, 'day', 'd');\n\t\t}\n\n\t\tadd(Number(parsed.hours), 'hour', 'h');\n\t}\n\n\tadd(Number(parsed.minutes), 'minute', 'm');\n\n\tif (!options.hideSeconds) {\n\t\tif (\n\t\t\toptions.separateMilliseconds\n\t\t\t|| options.formatSubMilliseconds\n\t\t\t|| (!options.colonNotation && milliseconds < 1000)\n\t\t) {\n\t\t\tconst seconds = Number(parsed.seconds);\n\t\t\tconst milliseconds = Number(parsed.milliseconds);\n\t\t\tconst microseconds = Number(parsed.microseconds);\n\t\t\tconst nanoseconds = Number(parsed.nanoseconds);\n\n\t\t\tadd(seconds, 'second', 's');\n\n\t\t\tif (options.formatSubMilliseconds) {\n\t\t\t\tadd(milliseconds, 'millisecond', 'ms');\n\t\t\t\tadd(microseconds, 'microsecond', 'µs');\n\t\t\t\tadd(nanoseconds, 'nanosecond', 'ns');\n\t\t\t} else {\n\t\t\t\tconst millisecondsAndBelow\n\t\t\t\t\t= milliseconds\n\t\t\t\t\t+ (microseconds / 1000)\n\t\t\t\t\t+ (nanoseconds / 1e6);\n\n\t\t\t\tconst millisecondsDecimalDigits\n\t\t\t\t\t= typeof options.millisecondsDecimalDigits === 'number'\n\t\t\t\t\t\t? options.millisecondsDecimalDigits\n\t\t\t\t\t\t: 0;\n\n\t\t\t\tconst roundedMilliseconds = millisecondsAndBelow >= 1\n\t\t\t\t\t? Math.round(millisecondsAndBelow)\n\t\t\t\t\t: Math.ceil(millisecondsAndBelow);\n\n\t\t\t\tconst millisecondsString = millisecondsDecimalDigits\n\t\t\t\t\t? millisecondsAndBelow.toFixed(millisecondsDecimalDigits)\n\t\t\t\t\t: roundedMilliseconds;\n\n\t\t\t\tadd(\n\t\t\t\t\tNumber.parseFloat(millisecondsString),\n\t\t\t\t\t'millisecond',\n\t\t\t\t\t'ms',\n\t\t\t\t\tmillisecondsString,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tconst seconds = (\n\t\t\t\t(isBigInt ? Number(milliseconds % ONE_DAY_IN_MILLISECONDS) : milliseconds)\n\t\t\t\t/ 1000\n\t\t\t) % 60;\n\t\t\tconst secondsDecimalDigits\n\t\t\t\t= typeof options.secondsDecimalDigits === 'number'\n\t\t\t\t\t? options.secondsDecimalDigits\n\t\t\t\t\t: 1;\n\t\t\tconst secondsFixed = floorDecimals(seconds, secondsDecimalDigits);\n\t\t\tconst secondsString = options.keepDecimalsOnWholeSeconds\n\t\t\t\t? secondsFixed\n\t\t\t\t: secondsFixed.replace(/\\.0+$/, '');\n\t\t\tadd(Number.parseFloat(secondsString), 'second', 's', secondsString);\n\t\t}\n\t}\n\n\tif (result.length === 0) {\n\t\treturn sign + '0' + (options.verbose ? ' milliseconds' : 'ms');\n\t}\n\n\tconst separator = options.colonNotation ? ':' : ' ';\n\tif (typeof options.unitCount === 'number') {\n\t\tresult = result.slice(0, Math.max(options.unitCount, 1));\n\t}\n\n\treturn sign + result.join(separator);\n}\n","import {verboseLog} from './log.js';\n\n// When `verbose` is `short|full|custom`, print each command's error when it fails\nexport const logError = (result, verboseInfo) => {\n\tif (result.failed) {\n\t\tverboseLog({\n\t\t\ttype: 'error',\n\t\t\tverboseMessage: result.shortMessage,\n\t\t\tverboseInfo,\n\t\t\tresult,\n\t\t});\n\t}\n};\n","import prettyMs from 'pretty-ms';\nimport {isVerbose} from './values.js';\nimport {verboseLog} from './log.js';\nimport {logError} from './error.js';\n\n// When `verbose` is `short|full|custom`, print each command's completion, duration and error\nexport const logResult = (result, verboseInfo) => {\n\tif (!isVerbose(verboseInfo)) {\n\t\treturn;\n\t}\n\n\tlogError(result, verboseInfo);\n\tlogDuration(result, verboseInfo);\n};\n\nconst logDuration = (result, verboseInfo) => {\n\tconst verboseMessage = `(done in ${prettyMs(result.durationMs)})`;\n\tverboseLog({\n\t\ttype: 'duration',\n\t\tverboseMessage,\n\t\tverboseInfo,\n\t\tresult,\n\t});\n};\n","import {logResult} from '../verbose/complete.js';\n\n// Applies the `reject` option.\n// Also print the final log line with `verbose`.\nexport const handleResult = (result, verboseInfo, {reject}) => {\n\tlogResult(result, verboseInfo);\n\n\tif (result.failed && reject) {\n\t\tthrow result;\n\t}\n\n\treturn result;\n};\n","import {isStream as isNodeStream, isDuplexStream} from 'is-stream';\nimport isPlainObj from 'is-plain-obj';\nimport {isUint8Array} from '../utils/uint-array.js';\n\n// The `stdin`/`stdout`/`stderr` option can be of many types. This detects it.\nexport const getStdioItemType = (value, optionName) => {\n\tif (isAsyncGenerator(value)) {\n\t\treturn 'asyncGenerator';\n\t}\n\n\tif (isSyncGenerator(value)) {\n\t\treturn 'generator';\n\t}\n\n\tif (isUrl(value)) {\n\t\treturn 'fileUrl';\n\t}\n\n\tif (isFilePathObject(value)) {\n\t\treturn 'filePath';\n\t}\n\n\tif (isWebStream(value)) {\n\t\treturn 'webStream';\n\t}\n\n\tif (isNodeStream(value, {checkOpen: false})) {\n\t\treturn 'native';\n\t}\n\n\tif (isUint8Array(value)) {\n\t\treturn 'uint8Array';\n\t}\n\n\tif (isAsyncIterableObject(value)) {\n\t\treturn 'asyncIterable';\n\t}\n\n\tif (isIterableObject(value)) {\n\t\treturn 'iterable';\n\t}\n\n\tif (isTransformStream(value)) {\n\t\treturn getTransformStreamType({transform: value}, optionName);\n\t}\n\n\tif (isTransformOptions(value)) {\n\t\treturn getTransformObjectType(value, optionName);\n\t}\n\n\treturn 'native';\n};\n\nconst getTransformObjectType = (value, optionName) => {\n\tif (isDuplexStream(value.transform, {checkOpen: false})) {\n\t\treturn getDuplexType(value, optionName);\n\t}\n\n\tif (isTransformStream(value.transform)) {\n\t\treturn getTransformStreamType(value, optionName);\n\t}\n\n\treturn getGeneratorObjectType(value, optionName);\n};\n\nconst getDuplexType = (value, optionName) => {\n\tvalidateNonGeneratorType(value, optionName, 'Duplex stream');\n\treturn 'duplex';\n};\n\nconst getTransformStreamType = (value, optionName) => {\n\tvalidateNonGeneratorType(value, optionName, 'web TransformStream');\n\treturn 'webTransform';\n};\n\nconst validateNonGeneratorType = ({final, binary, objectMode}, optionName, typeName) => {\n\tcheckUndefinedOption(final, `${optionName}.final`, typeName);\n\tcheckUndefinedOption(binary, `${optionName}.binary`, typeName);\n\tcheckBooleanOption(objectMode, `${optionName}.objectMode`);\n};\n\nconst checkUndefinedOption = (value, optionName, typeName) => {\n\tif (value !== undefined) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option can only be defined when using a generator, not a ${typeName}.`);\n\t}\n};\n\nconst getGeneratorObjectType = ({transform, final, binary, objectMode}, optionName) => {\n\tif (transform !== undefined && !isGenerator(transform)) {\n\t\tthrow new TypeError(`The \\`${optionName}.transform\\` option must be a generator, a Duplex stream or a web TransformStream.`);\n\t}\n\n\tif (isDuplexStream(final, {checkOpen: false})) {\n\t\tthrow new TypeError(`The \\`${optionName}.final\\` option must not be a Duplex stream.`);\n\t}\n\n\tif (isTransformStream(final)) {\n\t\tthrow new TypeError(`The \\`${optionName}.final\\` option must not be a web TransformStream.`);\n\t}\n\n\tif (final !== undefined && !isGenerator(final)) {\n\t\tthrow new TypeError(`The \\`${optionName}.final\\` option must be a generator.`);\n\t}\n\n\tcheckBooleanOption(binary, `${optionName}.binary`);\n\tcheckBooleanOption(objectMode, `${optionName}.objectMode`);\n\n\treturn isAsyncGenerator(transform) || isAsyncGenerator(final) ? 'asyncGenerator' : 'generator';\n};\n\nconst checkBooleanOption = (value, optionName) => {\n\tif (value !== undefined && typeof value !== 'boolean') {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option must use a boolean.`);\n\t}\n};\n\nconst isGenerator = value => isAsyncGenerator(value) || isSyncGenerator(value);\nexport const isAsyncGenerator = value => Object.prototype.toString.call(value) === '[object AsyncGeneratorFunction]';\nconst isSyncGenerator = value => Object.prototype.toString.call(value) === '[object GeneratorFunction]';\nconst isTransformOptions = value => isPlainObj(value)\n\t&& (value.transform !== undefined || value.final !== undefined);\n\nexport const isUrl = value => Object.prototype.toString.call(value) === '[object URL]';\nexport const isRegularUrl = value => isUrl(value) && value.protocol !== 'file:';\n\nconst isFilePathObject = value => isPlainObj(value)\n\t&& Object.keys(value).length > 0\n\t&& Object.keys(value).every(key => FILE_PATH_KEYS.has(key))\n\t&& isFilePathString(value.file);\nconst FILE_PATH_KEYS = new Set(['file', 'append']);\nexport const isFilePathString = file => typeof file === 'string';\n\nexport const isUnknownStdioString = (type, value) => type === 'native'\n\t&& typeof value === 'string'\n\t&& !KNOWN_STDIO_STRINGS.has(value);\nconst KNOWN_STDIO_STRINGS = new Set(['ipc', 'ignore', 'inherit', 'overlapped', 'pipe']);\n\nconst isReadableStream = value => Object.prototype.toString.call(value) === '[object ReadableStream]';\nexport const isWritableStream = value => Object.prototype.toString.call(value) === '[object WritableStream]';\nconst isWebStream = value => isReadableStream(value) || isWritableStream(value);\nconst isTransformStream = value => isReadableStream(value?.readable) && isWritableStream(value?.writable);\n\nconst isAsyncIterableObject = value => isObject(value) && typeof value[Symbol.asyncIterator] === 'function';\nconst isIterableObject = value => isObject(value) && typeof value[Symbol.iterator] === 'function';\nconst isObject = value => typeof value === 'object' && value !== null;\n\n// Types which modify `subprocess.std*`\nexport const TRANSFORM_TYPES = new Set(['generator', 'asyncGenerator', 'duplex', 'webTransform']);\n// Types which write to a file or a file descriptor\nexport const FILE_TYPES = new Set(['fileUrl', 'filePath', 'fileNumber']);\n// When two file descriptors of this type share the same target, we need to do some special logic\nexport const SPECIAL_DUPLICATE_TYPES_SYNC = new Set(['fileUrl', 'filePath']);\nexport const SPECIAL_DUPLICATE_TYPES = new Set([...SPECIAL_DUPLICATE_TYPES_SYNC, 'webStream', 'nodeStream']);\n// Do not allow two file descriptors of this type sharing the same target\nexport const FORBID_DUPLICATE_TYPES = new Set(['webTransform', 'duplex']);\n\n// Convert types to human-friendly strings for error messages\nexport const TYPE_TO_MESSAGE = {\n\tgenerator: 'a generator',\n\tasyncGenerator: 'an async generator',\n\tfileUrl: 'a file URL',\n\tfilePath: 'a file path string',\n\tfileNumber: 'a file descriptor number',\n\twebStream: 'a web stream',\n\tnodeStream: 'a Node.js stream',\n\twebTransform: 'a web TransformStream',\n\tduplex: 'a Duplex stream',\n\tnative: 'any value',\n\titerable: 'an iterable',\n\tasyncIterable: 'an async iterable',\n\tstring: 'a string',\n\tuint8Array: 'a Uint8Array',\n};\n","import {TRANSFORM_TYPES} from '../stdio/type.js';\n\n/*\nRetrieve the `objectMode`s of a single transform.\n`objectMode` determines the return value's type, i.e. the `readableObjectMode`.\nThe chunk argument's type is based on the previous generator's return value, i.e. the `writableObjectMode` is based on the previous `readableObjectMode`.\nThe last input's generator is read by `subprocess.stdin` which:\n- should not be in `objectMode` for performance reasons.\n- can only be strings, Buffers and Uint8Arrays.\nTherefore its `readableObjectMode` must be `false`.\nThe same applies to the first output's generator's `writableObjectMode`.\n*/\nexport const getTransformObjectModes = (objectMode, index, newTransforms, direction) => direction === 'output'\n\t? getOutputObjectModes(objectMode, index, newTransforms)\n\t: getInputObjectModes(objectMode, index, newTransforms);\n\nconst getOutputObjectModes = (objectMode, index, newTransforms) => {\n\tconst writableObjectMode = index !== 0 && newTransforms[index - 1].value.readableObjectMode;\n\tconst readableObjectMode = objectMode ?? writableObjectMode;\n\treturn {writableObjectMode, readableObjectMode};\n};\n\nconst getInputObjectModes = (objectMode, index, newTransforms) => {\n\tconst writableObjectMode = index === 0\n\t\t? objectMode === true\n\t\t: newTransforms[index - 1].value.readableObjectMode;\n\tconst readableObjectMode = index !== newTransforms.length - 1 && (objectMode ?? writableObjectMode);\n\treturn {writableObjectMode, readableObjectMode};\n};\n\n// Retrieve the `objectMode` of a file descriptor, e.g. `stdout` or `stderr`\nexport const getFdObjectMode = (stdioItems, direction) => {\n\tconst lastTransform = stdioItems.findLast(({type}) => TRANSFORM_TYPES.has(type));\n\tif (lastTransform === undefined) {\n\t\treturn false;\n\t}\n\n\treturn direction === 'input'\n\t\t? lastTransform.value.writableObjectMode\n\t\t: lastTransform.value.readableObjectMode;\n};\n","import isPlainObj from 'is-plain-obj';\nimport {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {getTransformObjectModes} from './object-mode.js';\n\n// Transforms generators/duplex/TransformStream can have multiple shapes.\n// This normalizes it and applies default values.\nexport const normalizeTransforms = (stdioItems, optionName, direction, options) => [\n\t...stdioItems.filter(({type}) => !TRANSFORM_TYPES.has(type)),\n\t...getTransforms(stdioItems, optionName, direction, options),\n];\n\nconst getTransforms = (stdioItems, optionName, direction, {encoding}) => {\n\tconst transforms = stdioItems.filter(({type}) => TRANSFORM_TYPES.has(type));\n\tconst newTransforms = Array.from({length: transforms.length});\n\n\tfor (const [index, stdioItem] of Object.entries(transforms)) {\n\t\tnewTransforms[index] = normalizeTransform({\n\t\t\tstdioItem,\n\t\t\tindex: Number(index),\n\t\t\tnewTransforms,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t\tencoding,\n\t\t});\n\t}\n\n\treturn sortTransforms(newTransforms, direction);\n};\n\nconst normalizeTransform = ({stdioItem, stdioItem: {type}, index, newTransforms, optionName, direction, encoding}) => {\n\tif (type === 'duplex') {\n\t\treturn normalizeDuplex({stdioItem, optionName});\n\t}\n\n\tif (type === 'webTransform') {\n\t\treturn normalizeTransformStream({\n\t\t\tstdioItem,\n\t\t\tindex,\n\t\t\tnewTransforms,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\treturn normalizeGenerator({\n\t\tstdioItem,\n\t\tindex,\n\t\tnewTransforms,\n\t\tdirection,\n\t\tencoding,\n\t});\n};\n\nconst normalizeDuplex = ({\n\tstdioItem,\n\tstdioItem: {\n\t\tvalue: {\n\t\t\ttransform,\n\t\t\ttransform: {writableObjectMode, readableObjectMode},\n\t\t\tobjectMode = readableObjectMode,\n\t\t},\n\t},\n\toptionName,\n}) => {\n\tif (objectMode && !readableObjectMode) {\n\t\tthrow new TypeError(`The \\`${optionName}.objectMode\\` option can only be \\`true\\` if \\`new Duplex({objectMode: true})\\` is used.`);\n\t}\n\n\tif (!objectMode && readableObjectMode) {\n\t\tthrow new TypeError(`The \\`${optionName}.objectMode\\` option cannot be \\`false\\` if \\`new Duplex({objectMode: true})\\` is used.`);\n\t}\n\n\treturn {\n\t\t...stdioItem,\n\t\tvalue: {transform, writableObjectMode, readableObjectMode},\n\t};\n};\n\nconst normalizeTransformStream = ({stdioItem, stdioItem: {value}, index, newTransforms, direction}) => {\n\tconst {transform, objectMode} = isPlainObj(value) ? value : {transform: value};\n\tconst {writableObjectMode, readableObjectMode} = getTransformObjectModes(objectMode, index, newTransforms, direction);\n\treturn ({\n\t\t...stdioItem,\n\t\tvalue: {transform, writableObjectMode, readableObjectMode},\n\t});\n};\n\nconst normalizeGenerator = ({stdioItem, stdioItem: {value}, index, newTransforms, direction, encoding}) => {\n\tconst {\n\t\ttransform,\n\t\tfinal,\n\t\tbinary: binaryOption = false,\n\t\tpreserveNewlines = false,\n\t\tobjectMode,\n\t} = isPlainObj(value) ? value : {transform: value};\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst {writableObjectMode, readableObjectMode} = getTransformObjectModes(objectMode, index, newTransforms, direction);\n\treturn {\n\t\t...stdioItem,\n\t\tvalue: {\n\t\t\ttransform,\n\t\t\tfinal,\n\t\t\tbinary,\n\t\t\tpreserveNewlines,\n\t\t\twritableObjectMode,\n\t\t\treadableObjectMode,\n\t\t},\n\t};\n};\n\nconst sortTransforms = (newTransforms, direction) => direction === 'input' ? newTransforms.reverse() : newTransforms;\n","import process from 'node:process';\nimport {\n\tisStream as isNodeStream,\n\tisReadableStream as isNodeReadableStream,\n\tisWritableStream as isNodeWritableStream,\n} from 'is-stream';\nimport {isWritableStream} from './type.js';\n\n// For `stdio[fdNumber]` beyond stdin/stdout/stderr, we need to guess whether the value passed is intended for inputs or outputs.\n// This allows us to know whether to pipe _into_ or _from_ the stream.\n// When `stdio[fdNumber]` is a single value, this guess is fairly straightforward.\n// However, when it is an array instead, we also need to make sure the different values are not incompatible with each other.\nexport const getStreamDirection = (stdioItems, fdNumber, optionName) => {\n\tconst directions = stdioItems.map(stdioItem => getStdioItemDirection(stdioItem, fdNumber));\n\n\tif (directions.includes('input') && directions.includes('output')) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option must not be an array of both readable and writable values.`);\n\t}\n\n\treturn directions.find(Boolean) ?? DEFAULT_DIRECTION;\n};\n\nconst getStdioItemDirection = ({type, value}, fdNumber) => KNOWN_DIRECTIONS[fdNumber] ?? guessStreamDirection[type](value);\n\n// `stdin`/`stdout`/`stderr` have a known direction\nconst KNOWN_DIRECTIONS = ['input', 'output', 'output'];\n\nconst anyDirection = () => undefined;\nconst alwaysInput = () => 'input';\n\n// `string` can only be added through the `input` option, i.e. does not need to be handled here\nconst guessStreamDirection = {\n\tgenerator: anyDirection,\n\tasyncGenerator: anyDirection,\n\tfileUrl: anyDirection,\n\tfilePath: anyDirection,\n\titerable: alwaysInput,\n\tasyncIterable: alwaysInput,\n\tuint8Array: alwaysInput,\n\twebStream: value => isWritableStream(value) ? 'output' : 'input',\n\tnodeStream(value) {\n\t\tif (!isNodeReadableStream(value, {checkOpen: false})) {\n\t\t\treturn 'output';\n\t\t}\n\n\t\treturn isNodeWritableStream(value, {checkOpen: false}) ? undefined : 'input';\n\t},\n\twebTransform: anyDirection,\n\tduplex: anyDirection,\n\tnative(value) {\n\t\tconst standardStreamDirection = getStandardStreamDirection(value);\n\t\tif (standardStreamDirection !== undefined) {\n\t\t\treturn standardStreamDirection;\n\t\t}\n\n\t\tif (isNodeStream(value, {checkOpen: false})) {\n\t\t\treturn guessStreamDirection.nodeStream(value);\n\t\t}\n\t},\n};\n\nconst getStandardStreamDirection = value => {\n\tif ([0, process.stdin].includes(value)) {\n\t\treturn 'input';\n\t}\n\n\tif ([1, 2, process.stdout, process.stderr].includes(value)) {\n\t\treturn 'output';\n\t}\n};\n\n// When ambiguous, we initially keep the direction as `undefined`.\n// This allows arrays of `stdio` values to resolve the ambiguity.\n// For example, `stdio[3]: DuplexStream` is ambiguous, but `stdio[3]: [DuplexStream, WritableStream]` is not.\n// When the ambiguity remains, we default to `output` since it is the most common use case for additional file descriptors.\nconst DEFAULT_DIRECTION = 'output';\n","// The `ipc` option adds an `ipc` item to the `stdio` option\nexport const normalizeIpcStdioArray = (stdioArray, ipc) => ipc && !stdioArray.includes('ipc')\n\t? [...stdioArray, 'ipc']\n\t: stdioArray;\n","import {STANDARD_STREAMS_ALIASES} from '../utils/standard-stream.js';\nimport {normalizeIpcStdioArray} from '../ipc/array.js';\nimport {isFullVerbose} from '../verbose/values.js';\n\n// Add support for `stdin`/`stdout`/`stderr` as an alias for `stdio`.\n// Also normalize the `stdio` option.\nexport const normalizeStdioOption = ({stdio, ipc, buffer, ...options}, verboseInfo, isSync) => {\n\tconst stdioArray = getStdioArray(stdio, options).map((stdioOption, fdNumber) => addDefaultValue(stdioOption, fdNumber));\n\treturn isSync\n\t\t? normalizeStdioSync(stdioArray, buffer, verboseInfo)\n\t\t: normalizeIpcStdioArray(stdioArray, ipc);\n};\n\nconst getStdioArray = (stdio, options) => {\n\tif (stdio === undefined) {\n\t\treturn STANDARD_STREAMS_ALIASES.map(alias => options[alias]);\n\t}\n\n\tif (hasAlias(options)) {\n\t\tthrow new Error(`It's not possible to provide \\`stdio\\` in combination with one of ${STANDARD_STREAMS_ALIASES.map(alias => `\\`${alias}\\``).join(', ')}`);\n\t}\n\n\tif (typeof stdio === 'string') {\n\t\treturn [stdio, stdio, stdio];\n\t}\n\n\tif (!Array.isArray(stdio)) {\n\t\tthrow new TypeError(`Expected \\`stdio\\` to be of type \\`string\\` or \\`Array\\`, got \\`${typeof stdio}\\``);\n\t}\n\n\tconst length = Math.max(stdio.length, STANDARD_STREAMS_ALIASES.length);\n\treturn Array.from({length}, (_, fdNumber) => stdio[fdNumber]);\n};\n\nconst hasAlias = options => STANDARD_STREAMS_ALIASES.some(alias => options[alias] !== undefined);\n\nconst addDefaultValue = (stdioOption, fdNumber) => {\n\tif (Array.isArray(stdioOption)) {\n\t\treturn stdioOption.map(item => addDefaultValue(item, fdNumber));\n\t}\n\n\tif (stdioOption === null || stdioOption === undefined) {\n\t\treturn fdNumber >= STANDARD_STREAMS_ALIASES.length ? 'ignore' : 'pipe';\n\t}\n\n\treturn stdioOption;\n};\n\n// Using `buffer: false` with synchronous methods implies `stdout`/`stderr`: `ignore`.\n// Unless the output is needed, e.g. due to `verbose: 'full'` or to redirecting to a file.\nconst normalizeStdioSync = (stdioArray, buffer, verboseInfo) => stdioArray.map((stdioOption, fdNumber) =>\n\t!buffer[fdNumber]\n\t&& fdNumber !== 0\n\t&& !isFullVerbose(verboseInfo, fdNumber)\n\t&& isOutputPipeOnly(stdioOption)\n\t\t? 'ignore'\n\t\t: stdioOption);\n\nconst isOutputPipeOnly = stdioOption => stdioOption === 'pipe'\n\t|| (Array.isArray(stdioOption) && stdioOption.every(item => item === 'pipe'));\n","import {readFileSync} from 'node:fs';\nimport tty from 'node:tty';\nimport {isStream as isNodeStream} from 'is-stream';\nimport {STANDARD_STREAMS} from '../utils/standard-stream.js';\nimport {bufferToUint8Array} from '../utils/uint-array.js';\nimport {serializeOptionValue} from '../arguments/fd-options.js';\n\n// When we use multiple `stdio` values for the same streams, we pass 'pipe' to `child_process.spawn()`.\n// We then emulate the piping done by core Node.js.\n// To do so, we transform the following values:\n//  - Node.js streams are marked as `type: nodeStream`\n//  - 'inherit' becomes `process.stdin|stdout|stderr`\n//  - any file descriptor integer becomes `process.stdio[fdNumber]`\n// All of the above transformations tell Execa to perform manual piping.\nexport const handleNativeStream = ({stdioItem, stdioItem: {type}, isStdioArray, fdNumber, direction, isSync}) => {\n\tif (!isStdioArray || type !== 'native') {\n\t\treturn stdioItem;\n\t}\n\n\treturn isSync\n\t\t? handleNativeStreamSync({stdioItem, fdNumber, direction})\n\t\t: handleNativeStreamAsync({stdioItem, fdNumber});\n};\n\n// Synchronous methods use a different logic.\n// 'inherit', file descriptors and process.std* are handled by readFileSync()/writeFileSync().\nconst handleNativeStreamSync = ({stdioItem, stdioItem: {value, optionName}, fdNumber, direction}) => {\n\tconst targetFd = getTargetFd({\n\t\tvalue,\n\t\toptionName,\n\t\tfdNumber,\n\t\tdirection,\n\t});\n\tif (targetFd !== undefined) {\n\t\treturn targetFd;\n\t}\n\n\tif (isNodeStream(value, {checkOpen: false})) {\n\t\tthrow new TypeError(`The \\`${optionName}: Stream\\` option cannot both be an array and include a stream with synchronous methods.`);\n\t}\n\n\treturn stdioItem;\n};\n\nconst getTargetFd = ({value, optionName, fdNumber, direction}) => {\n\tconst targetFdNumber = getTargetFdNumber(value, fdNumber);\n\tif (targetFdNumber === undefined) {\n\t\treturn;\n\t}\n\n\tif (direction === 'output') {\n\t\treturn {type: 'fileNumber', value: targetFdNumber, optionName};\n\t}\n\n\tif (tty.isatty(targetFdNumber)) {\n\t\tthrow new TypeError(`The \\`${optionName}: ${serializeOptionValue(value)}\\` option is invalid: it cannot be a TTY with synchronous methods.`);\n\t}\n\n\treturn {type: 'uint8Array', value: bufferToUint8Array(readFileSync(targetFdNumber)), optionName};\n};\n\nconst getTargetFdNumber = (value, fdNumber) => {\n\tif (value === 'inherit') {\n\t\treturn fdNumber;\n\t}\n\n\tif (typeof value === 'number') {\n\t\treturn value;\n\t}\n\n\tconst standardStreamIndex = STANDARD_STREAMS.indexOf(value);\n\tif (standardStreamIndex !== -1) {\n\t\treturn standardStreamIndex;\n\t}\n};\n\nconst handleNativeStreamAsync = ({stdioItem, stdioItem: {value, optionName}, fdNumber}) => {\n\tif (value === 'inherit') {\n\t\treturn {type: 'nodeStream', value: getStandardStream(fdNumber, value, optionName), optionName};\n\t}\n\n\tif (typeof value === 'number') {\n\t\treturn {type: 'nodeStream', value: getStandardStream(value, value, optionName), optionName};\n\t}\n\n\tif (isNodeStream(value, {checkOpen: false})) {\n\t\treturn {type: 'nodeStream', value, optionName};\n\t}\n\n\treturn stdioItem;\n};\n\n// Node.js does not allow to easily retrieve file descriptors beyond stdin/stdout/stderr as streams.\n//  - `fs.createReadStream()`/`fs.createWriteStream()` with the `fd` option do not work with character devices that use blocking reads/writes (such as interactive TTYs).\n//  - Using a TCP `Socket` would work but be rather complex to implement.\n// Since this is an edge case, we simply throw an error message.\n// See https://github.com/sindresorhus/execa/pull/643#discussion_r1435905707\nconst getStandardStream = (fdNumber, value, optionName) => {\n\tconst standardStream = STANDARD_STREAMS[fdNumber];\n\n\tif (standardStream === undefined) {\n\t\tthrow new TypeError(`The \\`${optionName}: ${value}\\` option is invalid: no such standard stream.`);\n\t}\n\n\treturn standardStream;\n};\n","import {isReadableStream} from 'is-stream';\nimport {isUint8Array} from '../utils/uint-array.js';\nimport {isUrl, isFilePathString} from './type.js';\n\n// Append the `stdin` option with the `input` and `inputFile` options\nexport const handleInputOptions = ({input, inputFile}, fdNumber) => fdNumber === 0\n\t? [\n\t\t...handleInputOption(input),\n\t\t...handleInputFileOption(inputFile),\n\t]\n\t: [];\n\nconst handleInputOption = input => input === undefined ? [] : [{\n\ttype: getInputType(input),\n\tvalue: input,\n\toptionName: 'input',\n}];\n\nconst getInputType = input => {\n\tif (isReadableStream(input, {checkOpen: false})) {\n\t\treturn 'nodeStream';\n\t}\n\n\tif (typeof input === 'string') {\n\t\treturn 'string';\n\t}\n\n\tif (isUint8Array(input)) {\n\t\treturn 'uint8Array';\n\t}\n\n\tthrow new Error('The `input` option must be a string, a Uint8Array or a Node.js Readable stream.');\n};\n\nconst handleInputFileOption = inputFile => inputFile === undefined ? [] : [{\n\t...getInputFileType(inputFile),\n\toptionName: 'inputFile',\n}];\n\nconst getInputFileType = inputFile => {\n\tif (isUrl(inputFile)) {\n\t\treturn {type: 'fileUrl', value: inputFile};\n\t}\n\n\tif (isFilePathString(inputFile)) {\n\t\treturn {type: 'filePath', value: {file: inputFile}};\n\t}\n\n\tthrow new Error('The `inputFile` option must be a file path string or a file URL.');\n};\n","import {\n\tSPECIAL_DUPLICATE_TYPES_SYNC,\n\tSPECIAL_DUPLICATE_TYPES,\n\tFORBID_DUPLICATE_TYPES,\n\tTYPE_TO_MESSAGE,\n} from './type.js';\n\n// Duplicates in the same file descriptor is most likely an error.\n// However, this can be useful with generators.\nexport const filterDuplicates = stdioItems => stdioItems.filter((stdioItemOne, indexOne) =>\n\tstdioItems.every((stdioItemTwo, indexTwo) => stdioItemOne.value !== stdioItemTwo.value\n\t\t|| indexOne >= indexTwo\n\t\t|| stdioItemOne.type === 'generator'\n\t\t|| stdioItemOne.type === 'asyncGenerator'));\n\n// Check if two file descriptors are sharing the same target.\n// For example `{stdout: {file: './output.txt'}, stderr: {file: './output.txt'}}`.\nexport const getDuplicateStream = ({stdioItem: {type, value, optionName}, direction, fileDescriptors, isSync}) => {\n\tconst otherStdioItems = getOtherStdioItems(fileDescriptors, type);\n\tif (otherStdioItems.length === 0) {\n\t\treturn;\n\t}\n\n\tif (isSync) {\n\t\tvalidateDuplicateStreamSync({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t});\n\t\treturn;\n\t}\n\n\tif (SPECIAL_DUPLICATE_TYPES.has(type)) {\n\t\treturn getDuplicateStreamInstance({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\tif (FORBID_DUPLICATE_TYPES.has(type)) {\n\t\tvalidateDuplicateTransform({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t});\n\t}\n};\n\n// Values shared by multiple file descriptors\nconst getOtherStdioItems = (fileDescriptors, type) => fileDescriptors\n\t.flatMap(({direction, stdioItems}) => stdioItems\n\t\t.filter(stdioItem => stdioItem.type === type)\n\t\t.map((stdioItem => ({...stdioItem, direction}))));\n\n// With `execaSync()`, do not allow setting a file path both in input and output\nconst validateDuplicateStreamSync = ({otherStdioItems, type, value, optionName, direction}) => {\n\tif (SPECIAL_DUPLICATE_TYPES_SYNC.has(type)) {\n\t\tgetDuplicateStreamInstance({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t});\n\t}\n};\n\n// When two file descriptors share the file or stream, we need to re-use the same underlying stream.\n// Otherwise, the stream would be closed twice when piping ends.\n// This is only an issue with output file descriptors.\n// This is not a problem with generator functions since those create a new instance for each file descriptor.\n// We also forbid input and output file descriptors sharing the same file or stream, since that does not make sense.\nconst getDuplicateStreamInstance = ({otherStdioItems, type, value, optionName, direction}) => {\n\tconst duplicateStdioItems = otherStdioItems.filter(stdioItem => hasSameValue(stdioItem, value));\n\tif (duplicateStdioItems.length === 0) {\n\t\treturn;\n\t}\n\n\tconst differentStdioItem = duplicateStdioItems.find(stdioItem => stdioItem.direction !== direction);\n\tthrowOnDuplicateStream(differentStdioItem, optionName, type);\n\n\treturn direction === 'output' ? duplicateStdioItems[0].stream : undefined;\n};\n\nconst hasSameValue = ({type, value}, secondValue) => {\n\tif (type === 'filePath') {\n\t\treturn value.file === secondValue.file;\n\t}\n\n\tif (type === 'fileUrl') {\n\t\treturn value.href === secondValue.href;\n\t}\n\n\treturn value === secondValue;\n};\n\n// We do not allow two file descriptors to share the same Duplex or TransformStream.\n// This is because those are set directly to `subprocess.std*`.\n// For example, this could result in `subprocess.stdout` and `subprocess.stderr` being the same value.\n// This means reading from either would get data from both stdout and stderr.\nconst validateDuplicateTransform = ({otherStdioItems, type, value, optionName}) => {\n\tconst duplicateStdioItem = otherStdioItems.find(({value: {transform}}) => transform === value.transform);\n\tthrowOnDuplicateStream(duplicateStdioItem, optionName, type);\n};\n\nconst throwOnDuplicateStream = (stdioItem, optionName, type) => {\n\tif (stdioItem !== undefined) {\n\t\tthrow new TypeError(`The \\`${stdioItem.optionName}\\` and \\`${optionName}\\` options must not target ${TYPE_TO_MESSAGE[type]} that is the same.`);\n\t}\n};\n","import {getStreamName, isStandardStream} from '../utils/standard-stream.js';\nimport {normalizeTransforms} from '../transform/normalize.js';\nimport {getFdObjectMode} from '../transform/object-mode.js';\nimport {\n\tgetStdioItemType,\n\tisRegularUrl,\n\tisUnknownStdioString,\n\tFILE_TYPES,\n} from './type.js';\nimport {getStreamDirection} from './direction.js';\nimport {normalizeStdioOption} from './stdio-option.js';\nimport {handleNativeStream} from './native.js';\nimport {handleInputOptions} from './input-option.js';\nimport {filterDuplicates, getDuplicateStream} from './duplicate.js';\n\n// Handle `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, before spawning, in async/sync mode\n// They are converted into an array of `fileDescriptors`.\n// Each `fileDescriptor` is normalized, validated and contains all information necessary for further handling.\nexport const handleStdio = (addProperties, options, verboseInfo, isSync) => {\n\tconst stdio = normalizeStdioOption(options, verboseInfo, isSync);\n\tconst initialFileDescriptors = stdio.map((stdioOption, fdNumber) => getFileDescriptor({\n\t\tstdioOption,\n\t\tfdNumber,\n\t\toptions,\n\t\tisSync,\n\t}));\n\tconst fileDescriptors = getFinalFileDescriptors({\n\t\tinitialFileDescriptors,\n\t\taddProperties,\n\t\toptions,\n\t\tisSync,\n\t});\n\toptions.stdio = fileDescriptors.map(({stdioItems}) => forwardStdio(stdioItems));\n\treturn fileDescriptors;\n};\n\nconst getFileDescriptor = ({stdioOption, fdNumber, options, isSync}) => {\n\tconst optionName = getStreamName(fdNumber);\n\tconst {stdioItems: initialStdioItems, isStdioArray} = initializeStdioItems({\n\t\tstdioOption,\n\t\tfdNumber,\n\t\toptions,\n\t\toptionName,\n\t});\n\tconst direction = getStreamDirection(initialStdioItems, fdNumber, optionName);\n\tconst stdioItems = initialStdioItems.map(stdioItem => handleNativeStream({\n\t\tstdioItem,\n\t\tisStdioArray,\n\t\tfdNumber,\n\t\tdirection,\n\t\tisSync,\n\t}));\n\tconst normalizedStdioItems = normalizeTransforms(stdioItems, optionName, direction, options);\n\tconst objectMode = getFdObjectMode(normalizedStdioItems, direction);\n\tvalidateFileObjectMode(normalizedStdioItems, objectMode);\n\treturn {direction, objectMode, stdioItems: normalizedStdioItems};\n};\n\n// We make sure passing an array with a single item behaves the same as passing that item without an array.\n// This is what users would expect.\n// For example, `stdout: ['ignore']` behaves the same as `stdout: 'ignore'`.\nconst initializeStdioItems = ({stdioOption, fdNumber, options, optionName}) => {\n\tconst values = Array.isArray(stdioOption) ? stdioOption : [stdioOption];\n\tconst initialStdioItems = [\n\t\t...values.map(value => initializeStdioItem(value, optionName)),\n\t\t...handleInputOptions(options, fdNumber),\n\t];\n\n\tconst stdioItems = filterDuplicates(initialStdioItems);\n\tconst isStdioArray = stdioItems.length > 1;\n\tvalidateStdioArray(stdioItems, isStdioArray, optionName);\n\tvalidateStreams(stdioItems);\n\treturn {stdioItems, isStdioArray};\n};\n\nconst initializeStdioItem = (value, optionName) => ({\n\ttype: getStdioItemType(value, optionName),\n\tvalue,\n\toptionName,\n});\n\nconst validateStdioArray = (stdioItems, isStdioArray, optionName) => {\n\tif (stdioItems.length === 0) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option must not be an empty array.`);\n\t}\n\n\tif (!isStdioArray) {\n\t\treturn;\n\t}\n\n\tfor (const {value, optionName} of stdioItems) {\n\t\tif (INVALID_STDIO_ARRAY_OPTIONS.has(value)) {\n\t\t\tthrow new Error(`The \\`${optionName}\\` option must not include \\`${value}\\`.`);\n\t\t}\n\t}\n};\n\n// Using those `stdio` values together with others for the same stream does not make sense, so we make it fail.\n// However, we do allow it if the array has a single item.\nconst INVALID_STDIO_ARRAY_OPTIONS = new Set(['ignore', 'ipc']);\n\nconst validateStreams = stdioItems => {\n\tfor (const stdioItem of stdioItems) {\n\t\tvalidateFileStdio(stdioItem);\n\t}\n};\n\nconst validateFileStdio = ({type, value, optionName}) => {\n\tif (isRegularUrl(value)) {\n\t\tthrow new TypeError(`The \\`${optionName}: URL\\` option must use the \\`file:\\` scheme.\nFor example, you can use the \\`pathToFileURL()\\` method of the \\`url\\` core module.`);\n\t}\n\n\tif (isUnknownStdioString(type, value)) {\n\t\tthrow new TypeError(`The \\`${optionName}: { file: '...' }\\` option must be used instead of \\`${optionName}: '...'\\`.`);\n\t}\n};\n\nconst validateFileObjectMode = (stdioItems, objectMode) => {\n\tif (!objectMode) {\n\t\treturn;\n\t}\n\n\tconst fileStdioItem = stdioItems.find(({type}) => FILE_TYPES.has(type));\n\tif (fileStdioItem !== undefined) {\n\t\tthrow new TypeError(`The \\`${fileStdioItem.optionName}\\` option cannot use both files and transforms in objectMode.`);\n\t}\n};\n\n// Some `stdio` values require Execa to create streams.\n// For example, file paths create file read/write streams.\n// Those transformations are specified in `addProperties`, which is both direction-specific and type-specific.\nconst getFinalFileDescriptors = ({initialFileDescriptors, addProperties, options, isSync}) => {\n\tconst fileDescriptors = [];\n\n\ttry {\n\t\tfor (const fileDescriptor of initialFileDescriptors) {\n\t\t\tfileDescriptors.push(getFinalFileDescriptor({\n\t\t\t\tfileDescriptor,\n\t\t\t\tfileDescriptors,\n\t\t\t\taddProperties,\n\t\t\t\toptions,\n\t\t\t\tisSync,\n\t\t\t}));\n\t\t}\n\n\t\treturn fileDescriptors;\n\t} catch (error) {\n\t\tcleanupCustomStreams(fileDescriptors);\n\t\tthrow error;\n\t}\n};\n\nconst getFinalFileDescriptor = ({\n\tfileDescriptor: {direction, objectMode, stdioItems},\n\tfileDescriptors,\n\taddProperties,\n\toptions,\n\tisSync,\n}) => {\n\tconst finalStdioItems = stdioItems.map(stdioItem => addStreamProperties({\n\t\tstdioItem,\n\t\taddProperties,\n\t\tdirection,\n\t\toptions,\n\t\tfileDescriptors,\n\t\tisSync,\n\t}));\n\treturn {direction, objectMode, stdioItems: finalStdioItems};\n};\n\nconst addStreamProperties = ({stdioItem, addProperties, direction, options, fileDescriptors, isSync}) => {\n\tconst duplicateStream = getDuplicateStream({\n\t\tstdioItem,\n\t\tdirection,\n\t\tfileDescriptors,\n\t\tisSync,\n\t});\n\n\tif (duplicateStream !== undefined) {\n\t\treturn {...stdioItem, stream: duplicateStream};\n\t}\n\n\treturn {\n\t\t...stdioItem,\n\t\t...addProperties[direction][stdioItem.type](stdioItem, options),\n\t};\n};\n\n// The stream error handling is performed by the piping logic above, which cannot be performed before subprocess spawning.\n// If the subprocess spawning fails (e.g. due to an invalid command), the streams need to be manually destroyed.\n// We need to create those streams before subprocess spawning, in case their creation fails, e.g. when passing an invalid generator as argument.\n// Like this, an exception would be thrown, which would prevent spawning a subprocess.\nexport const cleanupCustomStreams = fileDescriptors => {\n\tfor (const {stdioItems} of fileDescriptors) {\n\t\tfor (const {stream} of stdioItems) {\n\t\t\tif (stream !== undefined && !isStandardStream(stream)) {\n\t\t\t\tstream.destroy();\n\t\t\t}\n\t\t}\n\t}\n};\n\n// When the `std*: Iterable | WebStream | URL | filePath`, `input` or `inputFile` option is used, we pipe to `subprocess.std*`.\n// When the `std*: Array` option is used, we emulate some of the native values ('inherit', Node.js stream and file descriptor integer). To do so, we also need to pipe to `subprocess.std*`.\n// Therefore the `std*` options must be either `pipe` or `overlapped`. Other values do not set `subprocess.std*`.\nconst forwardStdio = stdioItems => {\n\tif (stdioItems.length > 1) {\n\t\treturn stdioItems.some(({value}) => value === 'overlapped') ? 'overlapped' : 'pipe';\n\t}\n\n\tconst [{type, value}] = stdioItems;\n\treturn type === 'native' ? value : 'pipe';\n};\n","import {readFileSync} from 'node:fs';\nimport {bufferToUint8Array} from '../utils/uint-array.js';\nimport {handleStdio} from './handle.js';\nimport {TYPE_TO_MESSAGE} from './type.js';\n\n// Normalize `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, before spawning, in sync mode\nexport const handleStdioSync = (options, verboseInfo) => handleStdio(addPropertiesSync, options, verboseInfo, true);\n\nconst forbiddenIfSync = ({type, optionName}) => {\n\tthrowInvalidSyncValue(optionName, TYPE_TO_MESSAGE[type]);\n};\n\nconst forbiddenNativeIfSync = ({optionName, value}) => {\n\tif (value === 'ipc' || value === 'overlapped') {\n\t\tthrowInvalidSyncValue(optionName, `\"${value}\"`);\n\t}\n\n\treturn {};\n};\n\nconst throwInvalidSyncValue = (optionName, value) => {\n\tthrow new TypeError(`The \\`${optionName}\\` option cannot be ${value} with synchronous methods.`);\n};\n\n// Create streams used internally for redirecting when using specific values for the `std*` options, in sync mode.\n// For example, `stdin: {file}` reads the file synchronously, then passes it as the `input` option.\nconst addProperties = {\n\tgenerator() {},\n\tasyncGenerator: forbiddenIfSync,\n\twebStream: forbiddenIfSync,\n\tnodeStream: forbiddenIfSync,\n\twebTransform: forbiddenIfSync,\n\tduplex: forbiddenIfSync,\n\tasyncIterable: forbiddenIfSync,\n\tnative: forbiddenNativeIfSync,\n};\n\nconst addPropertiesSync = {\n\tinput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({contents: [bufferToUint8Array(readFileSync(value))]}),\n\t\tfilePath: ({value: {file}}) => ({contents: [bufferToUint8Array(readFileSync(file))]}),\n\t\tfileNumber: forbiddenIfSync,\n\t\titerable: ({value}) => ({contents: [...value]}),\n\t\tstring: ({value}) => ({contents: [value]}),\n\t\tuint8Array: ({value}) => ({contents: [value]}),\n\t},\n\toutput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({path: value}),\n\t\tfilePath: ({value: {file, append}}) => ({path: file, append}),\n\t\tfileNumber: ({value}) => ({path: value}),\n\t\titerable: forbiddenIfSync,\n\t\tstring: forbiddenIfSync,\n\t\tuint8Array: forbiddenIfSync,\n\t},\n};\n","import stripFinalNewlineFunction from 'strip-final-newline';\n\n// Apply `stripFinalNewline` option, which applies to `result.stdout|stderr|all|stdio[*]`.\n// If the `lines` option is used, it is applied on each line, but using a different function.\nexport const stripNewline = (value, {stripFinalNewline}, fdNumber) => getStripFinalNewline(stripFinalNewline, fdNumber) && value !== undefined && !Array.isArray(value)\n\t? stripFinalNewlineFunction(value)\n\t: value;\n\n// Retrieve `stripFinalNewline` option value, including with `subprocess.all`\nexport const getStripFinalNewline = (stripFinalNewline, fdNumber) => fdNumber === 'all'\n\t? stripFinalNewline[1] || stripFinalNewline[2]\n\t: stripFinalNewline[fdNumber];\n","// Split chunks line-wise for generators passed to the `std*` options\nexport const getSplitLinesGenerator = (binary, preserveNewlines, skipped, state) => binary || skipped\n\t? undefined\n\t: initializeSplitLines(preserveNewlines, state);\n\n// Same but for synchronous methods\nexport const splitLinesSync = (chunk, preserveNewlines, objectMode) => objectMode\n\t? chunk.flatMap(item => splitLinesItemSync(item, preserveNewlines))\n\t: splitLinesItemSync(chunk, preserveNewlines);\n\nconst splitLinesItemSync = (chunk, preserveNewlines) => {\n\tconst {transform, final} = initializeSplitLines(preserveNewlines, {});\n\treturn [...transform(chunk), ...final()];\n};\n\nconst initializeSplitLines = (preserveNewlines, state) => {\n\tstate.previousChunks = '';\n\treturn {\n\t\ttransform: splitGenerator.bind(undefined, state, preserveNewlines),\n\t\tfinal: linesFinal.bind(undefined, state),\n\t};\n};\n\n// This imperative logic is much faster than using `String.split()` and uses very low memory.\nconst splitGenerator = function * (state, preserveNewlines, chunk) {\n\tif (typeof chunk !== 'string') {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tlet {previousChunks} = state;\n\tlet start = -1;\n\n\tfor (let end = 0; end < chunk.length; end += 1) {\n\t\tif (chunk[end] === '\\n') {\n\t\t\tconst newlineLength = getNewlineLength(chunk, end, preserveNewlines, state);\n\t\t\tlet line = chunk.slice(start + 1, end + 1 - newlineLength);\n\n\t\t\tif (previousChunks.length > 0) {\n\t\t\t\tline = concatString(previousChunks, line);\n\t\t\t\tpreviousChunks = '';\n\t\t\t}\n\n\t\t\tyield line;\n\t\t\tstart = end;\n\t\t}\n\t}\n\n\tif (start !== chunk.length - 1) {\n\t\tpreviousChunks = concatString(previousChunks, chunk.slice(start + 1));\n\t}\n\n\tstate.previousChunks = previousChunks;\n};\n\nconst getNewlineLength = (chunk, end, preserveNewlines, state) => {\n\tif (preserveNewlines) {\n\t\treturn 0;\n\t}\n\n\tstate.isWindowsNewline = end !== 0 && chunk[end - 1] === '\\r';\n\treturn state.isWindowsNewline ? 2 : 1;\n};\n\nconst linesFinal = function * ({previousChunks}) {\n\tif (previousChunks.length > 0) {\n\t\tyield previousChunks;\n\t}\n};\n\n// Unless `preserveNewlines: true` is used, we strip the newline of each line.\n// This re-adds them after the user `transform` code has run.\nexport const getAppendNewlineGenerator = ({binary, preserveNewlines, readableObjectMode, state}) => binary || preserveNewlines || readableObjectMode\n\t? undefined\n\t: {transform: appendNewlineGenerator.bind(undefined, state)};\n\nconst appendNewlineGenerator = function * ({isWindowsNewline = false}, chunk) {\n\tconst {unixNewline, windowsNewline, LF, concatBytes} = typeof chunk === 'string' ? linesStringInfo : linesUint8ArrayInfo;\n\n\tif (chunk.at(-1) === LF) {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tconst newline = isWindowsNewline ? windowsNewline : unixNewline;\n\tyield concatBytes(chunk, newline);\n};\n\nconst concatString = (firstChunk, secondChunk) => `${firstChunk}${secondChunk}`;\n\nconst linesStringInfo = {\n\twindowsNewline: '\\r\\n',\n\tunixNewline: '\\n',\n\tLF: '\\n',\n\tconcatBytes: concatString,\n};\n\nconst concatUint8Array = (firstChunk, secondChunk) => {\n\tconst chunk = new Uint8Array(firstChunk.length + secondChunk.length);\n\tchunk.set(firstChunk, 0);\n\tchunk.set(secondChunk, firstChunk.length);\n\treturn chunk;\n};\n\nconst linesUint8ArrayInfo = {\n\twindowsNewline: new Uint8Array([0x0D, 0x0A]),\n\tunixNewline: new Uint8Array([0x0A]),\n\tLF: 0x0A,\n\tconcatBytes: concatUint8Array,\n};\n","import {Buffer} from 'node:buffer';\nimport {isUint8Array} from '../utils/uint-array.js';\n\n// Validate the type of chunk argument passed to transform generators\nexport const getValidateTransformInput = (writableObjectMode, optionName) => writableObjectMode\n\t? undefined\n\t: validateStringTransformInput.bind(undefined, optionName);\n\nconst validateStringTransformInput = function * (optionName, chunk) {\n\tif (typeof chunk !== 'string' && !isUint8Array(chunk) && !Buffer.isBuffer(chunk)) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option's transform must use \"objectMode: true\" to receive as input: ${typeof chunk}.`);\n\t}\n\n\tyield chunk;\n};\n\n// Validate the type of the value returned by transform generators\nexport const getValidateTransformReturn = (readableObjectMode, optionName) => readableObjectMode\n\t? validateObjectTransformReturn.bind(undefined, optionName)\n\t: validateStringTransformReturn.bind(undefined, optionName);\n\nconst validateObjectTransformReturn = function * (optionName, chunk) {\n\tvalidateEmptyReturn(optionName, chunk);\n\tyield chunk;\n};\n\nconst validateStringTransformReturn = function * (optionName, chunk) {\n\tvalidateEmptyReturn(optionName, chunk);\n\n\tif (typeof chunk !== 'string' && !isUint8Array(chunk)) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option's function must yield a string or an Uint8Array, not ${typeof chunk}.`);\n\t}\n\n\tyield chunk;\n};\n\nconst validateEmptyReturn = (optionName, chunk) => {\n\tif (chunk === null || chunk === undefined) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option's function must not call \\`yield ${chunk}\\`.\nInstead, \\`yield\\` should either be called with a value, or not be called at all. For example:\n  if (condition) { yield value; }`);\n\t}\n};\n","import {Buffer} from 'node:buffer';\nimport {StringDecoder} from 'node:string_decoder';\nimport {isUint8Array, bufferToUint8Array} from '../utils/uint-array.js';\n\n/*\nWhen using binary encodings, add an internal generator that converts chunks from `Buffer` to `string` or `Uint8Array`.\nChunks might be Buffer, Uint8Array or strings since:\n- `subprocess.stdout|stderr` emits Buffers\n- `subprocess.stdin.write()` accepts Buffer, Uint8Array or string\n- Previous generators might return Uint8Array or string\n\nHowever, those are converted to Buffer:\n- on writes: `Duplex.writable` `decodeStrings: true` default option\n- on reads: `Duplex.readable` `readableEncoding: null` default option\n*/\nexport const getEncodingTransformGenerator = (binary, encoding, skipped) => {\n\tif (skipped) {\n\t\treturn;\n\t}\n\n\tif (binary) {\n\t\treturn {transform: encodingUint8ArrayGenerator.bind(undefined, new TextEncoder())};\n\t}\n\n\tconst stringDecoder = new StringDecoder(encoding);\n\treturn {\n\t\ttransform: encodingStringGenerator.bind(undefined, stringDecoder),\n\t\tfinal: encodingStringFinal.bind(undefined, stringDecoder),\n\t};\n};\n\nconst encodingUint8ArrayGenerator = function * (textEncoder, chunk) {\n\tif (Buffer.isBuffer(chunk)) {\n\t\tyield bufferToUint8Array(chunk);\n\t} else if (typeof chunk === 'string') {\n\t\tyield textEncoder.encode(chunk);\n\t} else {\n\t\tyield chunk;\n\t}\n};\n\nconst encodingStringGenerator = function * (stringDecoder, chunk) {\n\tyield isUint8Array(chunk) ? stringDecoder.write(chunk) : chunk;\n};\n\nconst encodingStringFinal = function * (stringDecoder) {\n\tconst lastChunk = stringDecoder.end();\n\tif (lastChunk !== '') {\n\t\tyield lastChunk;\n\t}\n};\n","import {callbackify} from 'node:util';\n\n// Applies a series of generator functions asynchronously\nexport const pushChunks = callbackify(async (getChunks, state, getChunksArguments, transformStream) => {\n\tstate.currentIterable = getChunks(...getChunksArguments);\n\n\ttry {\n\t\tfor await (const chunk of state.currentIterable) {\n\t\t\ttransformStream.push(chunk);\n\t\t}\n\t} finally {\n\t\tdelete state.currentIterable;\n\t}\n});\n\n// For each new chunk, apply each `transform()` method\nexport const transformChunk = async function * (chunk, generators, index) {\n\tif (index === generators.length) {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tconst {transform = identityGenerator} = generators[index];\n\tfor await (const transformedChunk of transform(chunk)) {\n\t\tyield * transformChunk(transformedChunk, generators, index + 1);\n\t}\n};\n\n// At the end, apply each `final()` method, followed by the `transform()` method of the next transforms\nexport const finalChunks = async function * (generators) {\n\tfor (const [index, {final}] of Object.entries(generators)) {\n\t\tyield * generatorFinalChunks(final, Number(index), generators);\n\t}\n};\n\nconst generatorFinalChunks = async function * (final, index, generators) {\n\tif (final === undefined) {\n\t\treturn;\n\t}\n\n\tfor await (const finalChunk of final()) {\n\t\tyield * transformChunk(finalChunk, generators, index + 1);\n\t}\n};\n\n// Cancel any ongoing async generator when the Transform is destroyed, e.g. when the subprocess errors\nexport const destroyTransform = callbackify(async ({currentIterable}, error) => {\n\tif (currentIterable !== undefined) {\n\t\tawait (error ? currentIterable.throw(error) : currentIterable.return());\n\t\treturn;\n\t}\n\n\tif (error) {\n\t\tthrow error;\n\t}\n});\n\nconst identityGenerator = function * (chunk) {\n\tyield chunk;\n};\n","// Duplicate the code from `run-async.js` but as synchronous functions\nexport const pushChunksSync = (getChunksSync, getChunksArguments, transformStream, done) => {\n\ttry {\n\t\tfor (const chunk of getChunksSync(...getChunksArguments)) {\n\t\t\ttransformStream.push(chunk);\n\t\t}\n\n\t\tdone();\n\t} catch (error) {\n\t\tdone(error);\n\t}\n};\n\n// Run synchronous generators with `execaSync()`\nexport const runTransformSync = (generators, chunks) => [\n\t...chunks.flatMap(chunk => [...transformChunkSync(chunk, generators, 0)]),\n\t...finalChunksSync(generators),\n];\n\nexport const transformChunkSync = function * (chunk, generators, index) {\n\tif (index === generators.length) {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tconst {transform = identityGenerator} = generators[index];\n\tfor (const transformedChunk of transform(chunk)) {\n\t\tyield * transformChunkSync(transformedChunk, generators, index + 1);\n\t}\n};\n\nexport const finalChunksSync = function * (generators) {\n\tfor (const [index, {final}] of Object.entries(generators)) {\n\t\tyield * generatorFinalChunksSync(final, Number(index), generators);\n\t}\n};\n\nconst generatorFinalChunksSync = function * (final, index, generators) {\n\tif (final === undefined) {\n\t\treturn;\n\t}\n\n\tfor (const finalChunk of final()) {\n\t\tyield * transformChunkSync(finalChunk, generators, index + 1);\n\t}\n};\n\nconst identityGenerator = function * (chunk) {\n\tyield chunk;\n};\n","import {Transform, getDefaultHighWaterMark} from 'node:stream';\nimport {isAsyncGenerator} from '../stdio/type.js';\nimport {getSplitLinesGenerator, getAppendNewlineGenerator} from './split.js';\nimport {getValidateTransformInput, getValidateTransformReturn} from './validate.js';\nimport {getEncodingTransformGenerator} from './encoding-transform.js';\nimport {\n\tpushChunks,\n\ttransformChunk,\n\tfinalChunks,\n\tdestroyTransform,\n} from './run-async.js';\nimport {\n\tpushChunksSync,\n\ttransformChunkSync,\n\tfinalChunksSync,\n\trunTransformSync,\n} from './run-sync.js';\n\n/*\nGenerators can be used to transform/filter standard streams.\n\nGenerators have a simple syntax, yet allows all of the following:\n- Sharing `state` between chunks\n- Flushing logic, by using a `final` function\n- Asynchronous logic\n- Emitting multiple chunks from a single source chunk, even if spaced in time, by using multiple `yield`\n- Filtering, by using no `yield`\n\nTherefore, there is no need to allow Node.js or web transform streams.\n\nThe `highWaterMark` is kept as the default value, since this is what `subprocess.std*` uses.\n\nChunks are currently processed serially. We could add a `concurrency` option to parallelize in the future.\n\nTransform an array of generator functions into a `Transform` stream.\n`Duplex.from(generator)` cannot be used because it does not allow setting the `objectMode` and `highWaterMark`.\n*/\nexport const generatorToStream = ({\n\tvalue,\n\tvalue: {transform, final, writableObjectMode, readableObjectMode},\n\toptionName,\n}, {encoding}) => {\n\tconst state = {};\n\tconst generators = addInternalGenerators(value, encoding, optionName);\n\n\tconst transformAsync = isAsyncGenerator(transform);\n\tconst finalAsync = isAsyncGenerator(final);\n\tconst transformMethod = transformAsync\n\t\t? pushChunks.bind(undefined, transformChunk, state)\n\t\t: pushChunksSync.bind(undefined, transformChunkSync);\n\tconst finalMethod = transformAsync || finalAsync\n\t\t? pushChunks.bind(undefined, finalChunks, state)\n\t\t: pushChunksSync.bind(undefined, finalChunksSync);\n\tconst destroyMethod = transformAsync || finalAsync\n\t\t? destroyTransform.bind(undefined, state)\n\t\t: undefined;\n\n\tconst stream = new Transform({\n\t\twritableObjectMode,\n\t\twritableHighWaterMark: getDefaultHighWaterMark(writableObjectMode),\n\t\treadableObjectMode,\n\t\treadableHighWaterMark: getDefaultHighWaterMark(readableObjectMode),\n\t\ttransform(chunk, encoding, done) {\n\t\t\ttransformMethod([chunk, generators, 0], this, done);\n\t\t},\n\t\tflush(done) {\n\t\t\tfinalMethod([generators], this, done);\n\t\t},\n\t\tdestroy: destroyMethod,\n\t});\n\treturn {stream};\n};\n\n// Applies transform generators in sync mode\nexport const runGeneratorsSync = (chunks, stdioItems, encoding, isInput) => {\n\tconst generators = stdioItems.filter(({type}) => type === 'generator');\n\tconst reversedGenerators = isInput ? generators.reverse() : generators;\n\n\tfor (const {value, optionName} of reversedGenerators) {\n\t\tconst generators = addInternalGenerators(value, encoding, optionName);\n\t\tchunks = runTransformSync(generators, chunks);\n\t}\n\n\treturn chunks;\n};\n\n// Generators used internally to convert the chunk type, validate it, and split into lines\nconst addInternalGenerators = (\n\t{transform, final, binary, writableObjectMode, readableObjectMode, preserveNewlines},\n\tencoding,\n\toptionName,\n) => {\n\tconst state = {};\n\treturn [\n\t\t{transform: getValidateTransformInput(writableObjectMode, optionName)},\n\t\tgetEncodingTransformGenerator(binary, encoding, writableObjectMode),\n\t\tgetSplitLinesGenerator(binary, preserveNewlines, writableObjectMode, state),\n\t\t{transform, final},\n\t\t{transform: getValidateTransformReturn(readableObjectMode, optionName)},\n\t\tgetAppendNewlineGenerator({\n\t\t\tbinary,\n\t\t\tpreserveNewlines,\n\t\t\treadableObjectMode,\n\t\t\tstate,\n\t\t}),\n\t].filter(Boolean);\n};\n","import {runGeneratorsSync} from '../transform/generator.js';\nimport {joinToUint8Array, isUint8Array} from '../utils/uint-array.js';\nimport {TYPE_TO_MESSAGE} from '../stdio/type.js';\n\n// Apply `stdin`/`input`/`inputFile` options, before spawning, in sync mode, by converting it to the `input` option\nexport const addInputOptionsSync = (fileDescriptors, options) => {\n\tfor (const fdNumber of getInputFdNumbers(fileDescriptors)) {\n\t\taddInputOptionSync(fileDescriptors, fdNumber, options);\n\t}\n};\n\nconst getInputFdNumbers = fileDescriptors => new Set(Object.entries(fileDescriptors)\n\t.filter(([, {direction}]) => direction === 'input')\n\t.map(([fdNumber]) => Number(fdNumber)));\n\nconst addInputOptionSync = (fileDescriptors, fdNumber, options) => {\n\tconst {stdioItems} = fileDescriptors[fdNumber];\n\tconst allStdioItems = stdioItems.filter(({contents}) => contents !== undefined);\n\tif (allStdioItems.length === 0) {\n\t\treturn;\n\t}\n\n\tif (fdNumber !== 0) {\n\t\tconst [{type, optionName}] = allStdioItems;\n\t\tthrow new TypeError(`Only the \\`stdin\\` option, not \\`${optionName}\\`, can be ${TYPE_TO_MESSAGE[type]} with synchronous methods.`);\n\t}\n\n\tconst allContents = allStdioItems.map(({contents}) => contents);\n\tconst transformedContents = allContents.map(contents => applySingleInputGeneratorsSync(contents, stdioItems));\n\toptions.input = joinToUint8Array(transformedContents);\n};\n\nconst applySingleInputGeneratorsSync = (contents, stdioItems) => {\n\tconst newContents = runGeneratorsSync(contents, stdioItems, 'utf8', true);\n\tvalidateSerializable(newContents);\n\treturn joinToUint8Array(newContents);\n};\n\nconst validateSerializable = newContents => {\n\tconst invalidItem = newContents.find(item => typeof item !== 'string' && !isUint8Array(item));\n\tif (invalidItem !== undefined) {\n\t\tthrow new TypeError(`The \\`stdin\\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${invalidItem}.`);\n\t}\n};\n","import {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {verboseLog, serializeVerboseMessage} from './log.js';\nimport {isFullVerbose} from './values.js';\n\n// `ignore` opts-out of `verbose` for a specific stream.\n// `ipc` cannot use piping.\n// `inherit` would result in double printing.\n// They can also lead to double printing when passing file descriptor integers or `process.std*`.\n// This only leaves with `pipe` and `overlapped`.\nexport const shouldLogOutput = ({stdioItems, encoding, verboseInfo, fdNumber}) => fdNumber !== 'all'\n\t&& isFullVerbose(verboseInfo, fdNumber)\n\t&& !BINARY_ENCODINGS.has(encoding)\n\t&& fdUsesVerbose(fdNumber)\n\t&& (stdioItems.some(({type, value}) => type === 'native' && PIPED_STDIO_VALUES.has(value))\n\t|| stdioItems.every(({type}) => TRANSFORM_TYPES.has(type)));\n\n// Printing input streams would be confusing.\n// Files and streams can produce big outputs, which we don't want to print.\n// We could print `stdio[3+]` but it often is redirected to files and streams, with the same issue.\n// So we only print stdout and stderr.\nconst fdUsesVerbose = fdNumber => fdNumber === 1 || fdNumber === 2;\n\nconst PIPED_STDIO_VALUES = new Set(['pipe', 'overlapped']);\n\n// `verbose: 'full'` printing logic with async methods\nexport const logLines = async (linesIterable, stream, fdNumber, verboseInfo) => {\n\tfor await (const line of linesIterable) {\n\t\tif (!isPipingStream(stream)) {\n\t\t\tlogLine(line, fdNumber, verboseInfo);\n\t\t}\n\t}\n};\n\n// `verbose: 'full'` printing logic with sync methods\nexport const logLinesSync = (linesArray, fdNumber, verboseInfo) => {\n\tfor (const line of linesArray) {\n\t\tlogLine(line, fdNumber, verboseInfo);\n\t}\n};\n\n// When `subprocess.stdout|stderr.pipe()` is called, `verbose` becomes a noop.\n// This prevents the following problems:\n//  - `.pipe()` achieves the same result as using `stdout: 'inherit'`, `stdout: stream`, etc. which also make `verbose` a noop.\n//    For example, `subprocess.stdout.pipe(process.stdin)` would print each line twice.\n//  - When chaining subprocesses with `subprocess.pipe(otherSubprocess)`, only the last one should print its output.\n// Detecting whether `.pipe()` is impossible without monkey-patching it, so we use the following undocumented property.\n// This is not a critical behavior since changes of the following property would only make `verbose` more verbose.\nconst isPipingStream = stream => stream._readableState.pipes.length > 0;\n\n// When `verbose` is `full`, print stdout|stderr\nconst logLine = (line, fdNumber, verboseInfo) => {\n\tconst verboseMessage = serializeVerboseMessage(line);\n\tverboseLog({\n\t\ttype: 'output',\n\t\tverboseMessage,\n\t\tfdNumber,\n\t\tverboseInfo,\n\t});\n};\n","import {writeFileSync, appendFileSync} from 'node:fs';\nimport {shouldLogOutput, logLinesSync} from '../verbose/output.js';\nimport {runGeneratorsSync} from '../transform/generator.js';\nimport {splitLinesSync} from '../transform/split.js';\nimport {joinToString, joinToUint8Array, bufferToUint8Array} from '../utils/uint-array.js';\nimport {FILE_TYPES} from '../stdio/type.js';\nimport {truncateMaxBufferSync} from './max-buffer.js';\n\n// Apply `stdout`/`stderr` options, after spawning, in sync mode\nexport const transformOutputSync = ({fileDescriptors, syncResult: {output}, options, isMaxBuffer, verboseInfo}) => {\n\tif (output === null) {\n\t\treturn {output: Array.from({length: 3})};\n\t}\n\n\tconst state = {};\n\tconst outputFiles = new Set([]);\n\tconst transformedOutput = output.map((result, fdNumber) =>\n\t\ttransformOutputResultSync({\n\t\t\tresult,\n\t\t\tfileDescriptors,\n\t\t\tfdNumber,\n\t\t\tstate,\n\t\t\toutputFiles,\n\t\t\tisMaxBuffer,\n\t\t\tverboseInfo,\n\t\t}, options));\n\treturn {output: transformedOutput, ...state};\n};\n\nconst transformOutputResultSync = (\n\t{result, fileDescriptors, fdNumber, state, outputFiles, isMaxBuffer, verboseInfo},\n\t{buffer, encoding, lines, stripFinalNewline, maxBuffer},\n) => {\n\tif (result === null) {\n\t\treturn;\n\t}\n\n\tconst truncatedResult = truncateMaxBufferSync(result, isMaxBuffer, maxBuffer);\n\tconst uint8ArrayResult = bufferToUint8Array(truncatedResult);\n\tconst {stdioItems, objectMode} = fileDescriptors[fdNumber];\n\tconst chunks = runOutputGeneratorsSync([uint8ArrayResult], stdioItems, encoding, state);\n\tconst {serializedResult, finalResult = serializedResult} = serializeChunks({\n\t\tchunks,\n\t\tobjectMode,\n\t\tencoding,\n\t\tlines,\n\t\tstripFinalNewline,\n\t\tfdNumber,\n\t});\n\n\tlogOutputSync({\n\t\tserializedResult,\n\t\tfdNumber,\n\t\tstate,\n\t\tverboseInfo,\n\t\tencoding,\n\t\tstdioItems,\n\t\tobjectMode,\n\t});\n\n\tconst returnedResult = buffer[fdNumber] ? finalResult : undefined;\n\n\ttry {\n\t\tif (state.error === undefined) {\n\t\t\twriteToFiles(serializedResult, stdioItems, outputFiles);\n\t\t}\n\n\t\treturn returnedResult;\n\t} catch (error) {\n\t\tstate.error = error;\n\t\treturn returnedResult;\n\t}\n};\n\n// Applies transform generators to `stdout`/`stderr`\nconst runOutputGeneratorsSync = (chunks, stdioItems, encoding, state) => {\n\ttry {\n\t\treturn runGeneratorsSync(chunks, stdioItems, encoding, false);\n\t} catch (error) {\n\t\tstate.error = error;\n\t\treturn chunks;\n\t}\n};\n\n// The contents is converted to three stages:\n//  - serializedResult: used when the target is a file path/URL or a file descriptor (including 'inherit')\n//  - finalResult/returnedResult: returned as `result.std*`\nconst serializeChunks = ({chunks, objectMode, encoding, lines, stripFinalNewline, fdNumber}) => {\n\tif (objectMode) {\n\t\treturn {serializedResult: chunks};\n\t}\n\n\tif (encoding === 'buffer') {\n\t\treturn {serializedResult: joinToUint8Array(chunks)};\n\t}\n\n\tconst serializedResult = joinToString(chunks, encoding);\n\tif (lines[fdNumber]) {\n\t\treturn {serializedResult, finalResult: splitLinesSync(serializedResult, !stripFinalNewline[fdNumber], objectMode)};\n\t}\n\n\treturn {serializedResult};\n};\n\nconst logOutputSync = ({serializedResult, fdNumber, state, verboseInfo, encoding, stdioItems, objectMode}) => {\n\tif (!shouldLogOutput({\n\t\tstdioItems,\n\t\tencoding,\n\t\tverboseInfo,\n\t\tfdNumber,\n\t})) {\n\t\treturn;\n\t}\n\n\tconst linesArray = splitLinesSync(serializedResult, false, objectMode);\n\n\ttry {\n\t\tlogLinesSync(linesArray, fdNumber, verboseInfo);\n\t} catch (error) {\n\t\tstate.error ??= error;\n\t}\n};\n\n// When the `std*` target is a file path/URL or a file descriptor\nconst writeToFiles = (serializedResult, stdioItems, outputFiles) => {\n\tfor (const {path, append} of stdioItems.filter(({type}) => FILE_TYPES.has(type))) {\n\t\tconst pathString = typeof path === 'string' ? path : path.toString();\n\t\tif (append || outputFiles.has(pathString)) {\n\t\t\tappendFileSync(path, serializedResult);\n\t\t} else {\n\t\t\toutputFiles.add(pathString);\n\t\t\twriteFileSync(path, serializedResult);\n\t\t}\n\t}\n};\n","import {isUint8Array, concatUint8Arrays} from '../utils/uint-array.js';\nimport {stripNewline} from '../io/strip-newline.js';\n\n// Retrieve `result.all` with synchronous methods\nexport const getAllSync = ([, stdout, stderr], options) => {\n\tif (!options.all) {\n\t\treturn;\n\t}\n\n\tif (stdout === undefined) {\n\t\treturn stderr;\n\t}\n\n\tif (stderr === undefined) {\n\t\treturn stdout;\n\t}\n\n\tif (Array.isArray(stdout)) {\n\t\treturn Array.isArray(stderr)\n\t\t\t? [...stdout, ...stderr]\n\t\t\t: [...stdout, stripNewline(stderr, options, 'all')];\n\t}\n\n\tif (Array.isArray(stderr)) {\n\t\treturn [stripNewline(stdout, options, 'all'), ...stderr];\n\t}\n\n\tif (isUint8Array(stdout) && isUint8Array(stderr)) {\n\t\treturn concatUint8Arrays([stdout, stderr]);\n\t}\n\n\treturn `${stdout}${stderr}`;\n};\n","import {once} from 'node:events';\nimport {DiscardedError} from '../return/final-error.js';\n\n// If `error` is emitted before `spawn`, `exit` will never be emitted.\n// However, `error` might be emitted after `spawn`.\n// In that case, `exit` will still be emitted.\n// Since the `exit` event contains the signal name, we want to make sure we are listening for it.\n// This function also takes into account the following unlikely cases:\n//  - `exit` being emitted in the same microtask as `spawn`\n//  - `error` being emitted multiple times\nexport const waitForExit = async (subprocess, context) => {\n\tconst [exitCode, signal] = await waitForExitOrError(subprocess);\n\tcontext.isForcefullyTerminated ??= false;\n\treturn [exitCode, signal];\n};\n\nconst waitForExitOrError = async subprocess => {\n\tconst [spawnPayload, exitPayload] = await Promise.allSettled([\n\t\tonce(subprocess, 'spawn'),\n\t\tonce(subprocess, 'exit'),\n\t]);\n\n\tif (spawnPayload.status === 'rejected') {\n\t\treturn [];\n\t}\n\n\treturn exitPayload.status === 'rejected'\n\t\t? waitForSubprocessExit(subprocess)\n\t\t: exitPayload.value;\n};\n\nconst waitForSubprocessExit = async subprocess => {\n\ttry {\n\t\treturn await once(subprocess, 'exit');\n\t} catch {\n\t\treturn waitForSubprocessExit(subprocess);\n\t}\n};\n\n// Retrieve the final exit code and|or signal name\nexport const waitForSuccessfulExit = async exitPromise => {\n\tconst [exitCode, signal] = await exitPromise;\n\n\tif (!isSubprocessErrorExit(exitCode, signal) && isFailedExit(exitCode, signal)) {\n\t\tthrow new DiscardedError();\n\t}\n\n\treturn [exitCode, signal];\n};\n\n// When the subprocess fails due to an `error` event\nconst isSubprocessErrorExit = (exitCode, signal) => exitCode === undefined && signal === undefined;\n// When the subprocess fails due to a non-0 exit code or to a signal termination\nexport const isFailedExit = (exitCode, signal) => exitCode !== 0 || signal !== null;\n","import {DiscardedError} from '../return/final-error.js';\nimport {isMaxBufferSync} from '../io/max-buffer.js';\nimport {isFailedExit} from './exit-async.js';\n\n// Retrieve exit code, signal name and error information, with synchronous methods\nexport const getExitResultSync = ({error, status: exitCode, signal, output}, {maxBuffer}) => {\n\tconst resultError = getResultError(error, exitCode, signal);\n\tconst timedOut = resultError?.code === 'ETIMEDOUT';\n\tconst isMaxBuffer = isMaxBufferSync(resultError, output, maxBuffer);\n\treturn {\n\t\tresultError,\n\t\texitCode,\n\t\tsignal,\n\t\ttimedOut,\n\t\tisMaxBuffer,\n\t};\n};\n\nconst getResultError = (error, exitCode, signal) => {\n\tif (error !== undefined) {\n\t\treturn error;\n\t}\n\n\treturn isFailedExit(exitCode, signal) ? new DiscardedError() : undefined;\n};\n","import {spawnSync} from 'node:child_process';\nimport {handleCommand} from '../arguments/command.js';\nimport {normalizeOptions} from '../arguments/options.js';\nimport {makeError, makeEarlyError, makeSuccessResult} from '../return/result.js';\nimport {handleResult} from '../return/reject.js';\nimport {handleStdioSync} from '../stdio/handle-sync.js';\nimport {stripNewline} from '../io/strip-newline.js';\nimport {addInputOptionsSync} from '../io/input-sync.js';\nimport {transformOutputSync} from '../io/output-sync.js';\nimport {getMaxBufferSync} from '../io/max-buffer.js';\nimport {getAllSync} from '../resolve/all-sync.js';\nimport {getExitResultSync} from '../resolve/exit-sync.js';\n\n// Main shared logic for all sync methods: `execaSync()`, `$.sync()`\nexport const execaCoreSync = (rawFile, rawArguments, rawOptions) => {\n\tconst {file, commandArguments, command, escapedCommand, startTime, verboseInfo, options, fileDescriptors} = handleSyncArguments(rawFile, rawArguments, rawOptions);\n\tconst result = spawnSubprocessSync({\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tverboseInfo,\n\t\tfileDescriptors,\n\t\tstartTime,\n\t});\n\treturn handleResult(result, verboseInfo, options);\n};\n\n// Compute arguments to pass to `child_process.spawnSync()`\nconst handleSyncArguments = (rawFile, rawArguments, rawOptions) => {\n\tconst {command, escapedCommand, startTime, verboseInfo} = handleCommand(rawFile, rawArguments, rawOptions);\n\tconst syncOptions = normalizeSyncOptions(rawOptions);\n\tconst {file, commandArguments, options} = normalizeOptions(rawFile, rawArguments, syncOptions);\n\tvalidateSyncOptions(options);\n\tconst fileDescriptors = handleStdioSync(options, verboseInfo);\n\treturn {\n\t\tfile,\n\t\tcommandArguments,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\toptions,\n\t\tfileDescriptors,\n\t};\n};\n\n// Options normalization logic specific to sync methods\nconst normalizeSyncOptions = options => options.node && !options.ipc ? {...options, ipc: false} : options;\n\n// Options validation logic specific to sync methods\nconst validateSyncOptions = ({ipc, ipcInput, detached, cancelSignal}) => {\n\tif (ipcInput) {\n\t\tthrowInvalidSyncOption('ipcInput');\n\t}\n\n\tif (ipc) {\n\t\tthrowInvalidSyncOption('ipc: true');\n\t}\n\n\tif (detached) {\n\t\tthrowInvalidSyncOption('detached: true');\n\t}\n\n\tif (cancelSignal) {\n\t\tthrowInvalidSyncOption('cancelSignal');\n\t}\n};\n\nconst throwInvalidSyncOption = value => {\n\tthrow new TypeError(`The \"${value}\" option cannot be used with synchronous methods.`);\n};\n\nconst spawnSubprocessSync = ({file, commandArguments, options, command, escapedCommand, verboseInfo, fileDescriptors, startTime}) => {\n\tconst syncResult = runSubprocessSync({\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tfileDescriptors,\n\t\tstartTime,\n\t});\n\tif (syncResult.failed) {\n\t\treturn syncResult;\n\t}\n\n\tconst {resultError, exitCode, signal, timedOut, isMaxBuffer} = getExitResultSync(syncResult, options);\n\tconst {output, error = resultError} = transformOutputSync({\n\t\tfileDescriptors,\n\t\tsyncResult,\n\t\toptions,\n\t\tisMaxBuffer,\n\t\tverboseInfo,\n\t});\n\tconst stdio = output.map((stdioOutput, fdNumber) => stripNewline(stdioOutput, options, fdNumber));\n\tconst all = stripNewline(getAllSync(output, options), options, 'all');\n\treturn getSyncResult({\n\t\terror,\n\t\texitCode,\n\t\tsignal,\n\t\ttimedOut,\n\t\tisMaxBuffer,\n\t\tstdio,\n\t\tall,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t});\n};\n\nconst runSubprocessSync = ({file, commandArguments, options, command, escapedCommand, fileDescriptors, startTime}) => {\n\ttry {\n\t\taddInputOptionsSync(fileDescriptors, options);\n\t\tconst normalizedOptions = normalizeSpawnSyncOptions(options);\n\t\treturn spawnSync(file, commandArguments, normalizedOptions);\n\t} catch (error) {\n\t\treturn makeEarlyError({\n\t\t\terror,\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tfileDescriptors,\n\t\t\toptions,\n\t\t\tstartTime,\n\t\t\tisSync: true,\n\t\t});\n\t}\n};\n\n// The `encoding` option is handled by Execa, not by `child_process.spawnSync()`\nconst normalizeSpawnSyncOptions = ({encoding, maxBuffer, ...options}) => ({...options, encoding: 'buffer', maxBuffer: getMaxBufferSync(maxBuffer)});\n\nconst getSyncResult = ({error, exitCode, signal, timedOut, isMaxBuffer, stdio, all, options, command, escapedCommand, startTime}) => error === undefined\n\t? makeSuccessResult({\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput: [],\n\t\toptions,\n\t\tstartTime,\n\t})\n\t: makeError({\n\t\terror,\n\t\tcommand,\n\t\tescapedCommand,\n\t\ttimedOut,\n\t\tisCanceled: false,\n\t\tisGracefullyCanceled: false,\n\t\tisMaxBuffer,\n\t\tisForcefullyTerminated: false,\n\t\texitCode,\n\t\tsignal,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput: [],\n\t\toptions,\n\t\tstartTime,\n\t\tisSync: true,\n\t});\n","import {once, on} from 'node:events';\nimport {\n\tvalidateIpcMethod,\n\tthrowOnEarlyDisconnect,\n\tdisconnect,\n\tgetStrictResponseError,\n} from './validation.js';\nimport {getIpcEmitter, isConnected} from './forward.js';\nimport {addReference, removeReference} from './reference.js';\n\n// Like `[sub]process.once('message')` but promise-based\nexport const getOneMessage = ({anyProcess, channel, isSubprocess, ipc}, {reference = true, filter} = {}) => {\n\tvalidateIpcMethod({\n\t\tmethodName: 'getOneMessage',\n\t\tisSubprocess,\n\t\tipc,\n\t\tisConnected: isConnected(anyProcess),\n\t});\n\n\treturn getOneMessageAsync({\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tfilter,\n\t\treference,\n\t});\n};\n\nconst getOneMessageAsync = async ({anyProcess, channel, isSubprocess, filter, reference}) => {\n\taddReference(channel, reference);\n\tconst ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);\n\tconst controller = new AbortController();\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tgetMessage(ipcEmitter, filter, controller),\n\t\t\tthrowOnDisconnect(ipcEmitter, isSubprocess, controller),\n\t\t\tthrowOnStrictError(ipcEmitter, isSubprocess, controller),\n\t\t]);\n\t} catch (error) {\n\t\tdisconnect(anyProcess);\n\t\tthrow error;\n\t} finally {\n\t\tcontroller.abort();\n\t\tremoveReference(channel, reference);\n\t}\n};\n\nconst getMessage = async (ipcEmitter, filter, {signal}) => {\n\tif (filter === undefined) {\n\t\tconst [message] = await once(ipcEmitter, 'message', {signal});\n\t\treturn message;\n\t}\n\n\tfor await (const [message] of on(ipcEmitter, 'message', {signal})) {\n\t\tif (filter(message)) {\n\t\t\treturn message;\n\t\t}\n\t}\n};\n\nconst throwOnDisconnect = async (ipcEmitter, isSubprocess, {signal}) => {\n\tawait once(ipcEmitter, 'disconnect', {signal});\n\tthrowOnEarlyDisconnect(isSubprocess);\n};\n\nconst throwOnStrictError = async (ipcEmitter, isSubprocess, {signal}) => {\n\tconst [error] = await once(ipcEmitter, 'strict:error', {signal});\n\tthrow getStrictResponseError(error, isSubprocess);\n};\n","import {once, on} from 'node:events';\nimport {validateIpcMethod, disconnect, getStrictResponseError} from './validation.js';\nimport {getIpcEmitter, isConnected} from './forward.js';\nimport {addReference, removeReference} from './reference.js';\n\n// Like `[sub]process.on('message')` but promise-based\nexport const getEachMessage = ({anyProcess, channel, isSubprocess, ipc}, {reference = true} = {}) => loopOnMessages({\n\tanyProcess,\n\tchannel,\n\tisSubprocess,\n\tipc,\n\tshouldAwait: !isSubprocess,\n\treference,\n});\n\n// Same but used internally\nexport const loopOnMessages = ({anyProcess, channel, isSubprocess, ipc, shouldAwait, reference}) => {\n\tvalidateIpcMethod({\n\t\tmethodName: 'getEachMessage',\n\t\tisSubprocess,\n\t\tipc,\n\t\tisConnected: isConnected(anyProcess),\n\t});\n\n\taddReference(channel, reference);\n\tconst ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);\n\tconst controller = new AbortController();\n\tconst state = {};\n\tstopOnDisconnect(anyProcess, ipcEmitter, controller);\n\tabortOnStrictError({\n\t\tipcEmitter,\n\t\tisSubprocess,\n\t\tcontroller,\n\t\tstate,\n\t});\n\treturn iterateOnMessages({\n\t\tanyProcess,\n\t\tchannel,\n\t\tipcEmitter,\n\t\tisSubprocess,\n\t\tshouldAwait,\n\t\tcontroller,\n\t\tstate,\n\t\treference,\n\t});\n};\n\nconst stopOnDisconnect = async (anyProcess, ipcEmitter, controller) => {\n\ttry {\n\t\tawait once(ipcEmitter, 'disconnect', {signal: controller.signal});\n\t\tcontroller.abort();\n\t} catch {}\n};\n\nconst abortOnStrictError = async ({ipcEmitter, isSubprocess, controller, state}) => {\n\ttry {\n\t\tconst [error] = await once(ipcEmitter, 'strict:error', {signal: controller.signal});\n\t\tstate.error = getStrictResponseError(error, isSubprocess);\n\t\tcontroller.abort();\n\t} catch {}\n};\n\nconst iterateOnMessages = async function * ({anyProcess, channel, ipcEmitter, isSubprocess, shouldAwait, controller, state, reference}) {\n\ttry {\n\t\tfor await (const [message] of on(ipcEmitter, 'message', {signal: controller.signal})) {\n\t\t\tthrowIfStrictError(state);\n\t\t\tyield message;\n\t\t}\n\t} catch {\n\t\tthrowIfStrictError(state);\n\t} finally {\n\t\tcontroller.abort();\n\t\tremoveReference(channel, reference);\n\n\t\tif (!isSubprocess) {\n\t\t\tdisconnect(anyProcess);\n\t\t}\n\n\t\tif (shouldAwait) {\n\t\t\tawait anyProcess;\n\t\t}\n\t}\n};\n\nconst throwIfStrictError = ({error}) => {\n\tif (error) {\n\t\tthrow error;\n\t}\n};\n","import process from 'node:process';\nimport {sendMessage} from './send.js';\nimport {getOneMessage} from './get-one.js';\nimport {getEachMessage} from './get-each.js';\nimport {getCancelSignal} from './graceful.js';\n\n// Add promise-based IPC methods in current process\nexport const addIpcMethods = (subprocess, {ipc}) => {\n\tObject.assign(subprocess, getIpcMethods(subprocess, false, ipc));\n};\n\n// Get promise-based IPC in the subprocess\nexport const getIpcExport = () => {\n\tconst anyProcess = process;\n\tconst isSubprocess = true;\n\tconst ipc = process.channel !== undefined;\n\n\treturn {\n\t\t...getIpcMethods(anyProcess, isSubprocess, ipc),\n\t\tgetCancelSignal: getCancelSignal.bind(undefined, {\n\t\t\tanyProcess,\n\t\t\tchannel: anyProcess.channel,\n\t\t\tisSubprocess,\n\t\t\tipc,\n\t\t}),\n\t};\n};\n\n// Retrieve the `ipc` shared by both the current process and the subprocess\nconst getIpcMethods = (anyProcess, isSubprocess, ipc) => ({\n\tsendMessage: sendMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel: anyProcess.channel,\n\t\tisSubprocess,\n\t\tipc,\n\t}),\n\tgetOneMessage: getOneMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel: anyProcess.channel,\n\t\tisSubprocess,\n\t\tipc,\n\t}),\n\tgetEachMessage: getEachMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel: anyProcess.channel,\n\t\tisSubprocess,\n\t\tipc,\n\t}),\n});\n","import {ChildProcess} from 'node:child_process';\nimport {\n\tPassThrough,\n\tReadable,\n\tWritable,\n\tDuplex,\n} from 'node:stream';\nimport {cleanupCustomStreams} from '../stdio/handle.js';\nimport {makeEarlyError} from './result.js';\nimport {handleResult} from './reject.js';\n\n// When the subprocess fails to spawn.\n// We ensure the returned error is always both a promise and a subprocess.\nexport const handleEarlyError = ({error, command, escapedCommand, fileDescriptors, options, startTime, verboseInfo}) => {\n\tcleanupCustomStreams(fileDescriptors);\n\n\tconst subprocess = new ChildProcess();\n\tcreateDummyStreams(subprocess, fileDescriptors);\n\tObject.assign(subprocess, {readable, writable, duplex});\n\n\tconst earlyError = makeEarlyError({\n\t\terror,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tfileDescriptors,\n\t\toptions,\n\t\tstartTime,\n\t\tisSync: false,\n\t});\n\tconst promise = handleDummyPromise(earlyError, verboseInfo, options);\n\treturn {subprocess, promise};\n};\n\nconst createDummyStreams = (subprocess, fileDescriptors) => {\n\tconst stdin = createDummyStream();\n\tconst stdout = createDummyStream();\n\tconst stderr = createDummyStream();\n\tconst extraStdio = Array.from({length: fileDescriptors.length - 3}, createDummyStream);\n\tconst all = createDummyStream();\n\tconst stdio = [stdin, stdout, stderr, ...extraStdio];\n\tObject.assign(subprocess, {\n\t\tstdin,\n\t\tstdout,\n\t\tstderr,\n\t\tall,\n\t\tstdio,\n\t});\n};\n\nconst createDummyStream = () => {\n\tconst stream = new PassThrough();\n\tstream.end();\n\treturn stream;\n};\n\nconst readable = () => new Readable({read() {}});\nconst writable = () => new Writable({write() {}});\nconst duplex = () => new Duplex({read() {}, write() {}});\n\nconst handleDummyPromise = async (error, verboseInfo, options) => handleResult(error, verboseInfo, options);\n","import {createReadStream, createWriteStream} from 'node:fs';\nimport {Buffer} from 'node:buffer';\nimport {Readable, Writable, Duplex} from 'node:stream';\nimport {generatorToStream} from '../transform/generator.js';\nimport {handleStdio} from './handle.js';\nimport {TYPE_TO_MESSAGE} from './type.js';\n\n// Handle `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, before spawning, in async mode\nexport const handleStdioAsync = (options, verboseInfo) => handleStdio(addPropertiesAsync, options, verboseInfo, false);\n\nconst forbiddenIfAsync = ({type, optionName}) => {\n\tthrow new TypeError(`The \\`${optionName}\\` option cannot be ${TYPE_TO_MESSAGE[type]}.`);\n};\n\n// Create streams used internally for piping when using specific values for the `std*` options, in async mode.\n// For example, `stdout: {file}` creates a file stream, which is piped from/to.\nconst addProperties = {\n\tfileNumber: forbiddenIfAsync,\n\tgenerator: generatorToStream,\n\tasyncGenerator: generatorToStream,\n\tnodeStream: ({value}) => ({stream: value}),\n\twebTransform({value: {transform, writableObjectMode, readableObjectMode}}) {\n\t\tconst objectMode = writableObjectMode || readableObjectMode;\n\t\tconst stream = Duplex.fromWeb(transform, {objectMode});\n\t\treturn {stream};\n\t},\n\tduplex: ({value: {transform}}) => ({stream: transform}),\n\tnative() {},\n};\n\nconst addPropertiesAsync = {\n\tinput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({stream: createReadStream(value)}),\n\t\tfilePath: ({value: {file}}) => ({stream: createReadStream(file)}),\n\t\twebStream: ({value}) => ({stream: Readable.fromWeb(value)}),\n\t\titerable: ({value}) => ({stream: Readable.from(value)}),\n\t\tasyncIterable: ({value}) => ({stream: Readable.from(value)}),\n\t\tstring: ({value}) => ({stream: Readable.from(value)}),\n\t\tuint8Array: ({value}) => ({stream: Readable.from(Buffer.from(value))}),\n\t},\n\toutput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({stream: createWriteStream(value)}),\n\t\tfilePath: ({value: {file, append}}) => ({stream: createWriteStream(file, append ? {flags: 'a'} : {})}),\n\t\twebStream: ({value}) => ({stream: Writable.fromWeb(value)}),\n\t\titerable: forbiddenIfAsync,\n\t\tasyncIterable: forbiddenIfAsync,\n\t\tstring: forbiddenIfAsync,\n\t\tuint8Array: forbiddenIfAsync,\n\t},\n};\n","import {on, once} from 'node:events';\nimport {PassThrough as PassThroughStream, getDefaultHighWaterMark} from 'node:stream';\nimport {finished} from 'node:stream/promises';\n\nexport default function mergeStreams(streams) {\n\tif (!Array.isArray(streams)) {\n\t\tthrow new TypeError(`Expected an array, got \\`${typeof streams}\\`.`);\n\t}\n\n\tfor (const stream of streams) {\n\t\tvalidateStream(stream);\n\t}\n\n\tconst objectMode = streams.some(({readableObjectMode}) => readableObjectMode);\n\tconst highWaterMark = getHighWaterMark(streams, objectMode);\n\tconst passThroughStream = new MergedStream({\n\t\tobjectMode,\n\t\twritableHighWaterMark: highWaterMark,\n\t\treadableHighWaterMark: highWaterMark,\n\t});\n\n\tfor (const stream of streams) {\n\t\tpassThroughStream.add(stream);\n\t}\n\n\treturn passThroughStream;\n}\n\nconst getHighWaterMark = (streams, objectMode) => {\n\tif (streams.length === 0) {\n\t\treturn getDefaultHighWaterMark(objectMode);\n\t}\n\n\tconst highWaterMarks = streams\n\t\t.filter(({readableObjectMode}) => readableObjectMode === objectMode)\n\t\t.map(({readableHighWaterMark}) => readableHighWaterMark);\n\treturn Math.max(...highWaterMarks);\n};\n\nclass MergedStream extends PassThroughStream {\n\t#streams = new Set([]);\n\t#ended = new Set([]);\n\t#aborted = new Set([]);\n\t#onFinished;\n\t#unpipeEvent = Symbol('unpipe');\n\t#streamPromises = new WeakMap();\n\n\tadd(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (this.#streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#streams.add(stream);\n\n\t\tthis.#onFinished ??= onMergedStreamFinished(this, this.#streams, this.#unpipeEvent);\n\t\tconst streamPromise = endWhenStreamsDone({\n\t\t\tpassThroughStream: this,\n\t\t\tstream,\n\t\t\tstreams: this.#streams,\n\t\t\tended: this.#ended,\n\t\t\taborted: this.#aborted,\n\t\t\tonFinished: this.#onFinished,\n\t\t\tunpipeEvent: this.#unpipeEvent,\n\t\t});\n\t\tthis.#streamPromises.set(stream, streamPromise);\n\n\t\tstream.pipe(this, {end: false});\n\t}\n\n\tasync remove(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (!this.#streams.has(stream)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst streamPromise = this.#streamPromises.get(stream);\n\t\tif (streamPromise === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.#streamPromises.delete(stream);\n\n\t\tstream.unpipe(this);\n\t\tawait streamPromise;\n\t\treturn true;\n\t}\n}\n\nconst onMergedStreamFinished = async (passThroughStream, streams, unpipeEvent) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_COUNT);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tonMergedStreamEnd(passThroughStream, controller),\n\t\t\tonInputStreamsUnpipe(passThroughStream, streams, unpipeEvent, controller),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_COUNT);\n\t}\n};\n\nconst onMergedStreamEnd = async (passThroughStream, {signal}) => {\n\ttry {\n\t\tawait finished(passThroughStream, {signal, cleanup: true});\n\t} catch (error) {\n\t\terrorOrAbortStream(passThroughStream, error);\n\t\tthrow error;\n\t}\n};\n\nconst onInputStreamsUnpipe = async (passThroughStream, streams, unpipeEvent, {signal}) => {\n\tfor await (const [unpipedStream] of on(passThroughStream, 'unpipe', {signal})) {\n\t\tif (streams.has(unpipedStream)) {\n\t\t\tunpipedStream.emit(unpipeEvent);\n\t\t}\n\t}\n};\n\nconst validateStream = stream => {\n\tif (typeof stream?.pipe !== 'function') {\n\t\tthrow new TypeError(`Expected a readable stream, got: \\`${typeof stream}\\`.`);\n\t}\n};\n\nconst endWhenStreamsDone = async ({passThroughStream, stream, streams, ended, aborted, onFinished, unpipeEvent}) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_PER_STREAM);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tafterMergedStreamFinished(onFinished, stream, controller),\n\t\t\tonInputStreamEnd({\n\t\t\t\tpassThroughStream,\n\t\t\t\tstream,\n\t\t\t\tstreams,\n\t\t\t\tended,\n\t\t\t\taborted,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t\tonInputStreamUnpipe({\n\t\t\t\tstream,\n\t\t\t\tstreams,\n\t\t\t\tended,\n\t\t\t\taborted,\n\t\t\t\tunpipeEvent,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_PER_STREAM);\n\t}\n\n\tif (streams.size > 0 && streams.size === ended.size + aborted.size) {\n\t\tif (ended.size === 0 && aborted.size > 0) {\n\t\t\tabortStream(passThroughStream);\n\t\t} else {\n\t\t\tendStream(passThroughStream);\n\t\t}\n\t}\n};\n\nconst afterMergedStreamFinished = async (onFinished, stream, {signal}) => {\n\ttry {\n\t\tawait onFinished;\n\t\tif (!signal.aborted) {\n\t\t\tabortStream(stream);\n\t\t}\n\t} catch (error) {\n\t\tif (!signal.aborted) {\n\t\t\terrorOrAbortStream(stream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamEnd = async ({passThroughStream, stream, streams, ended, aborted, controller: {signal}}) => {\n\ttry {\n\t\tawait finished(stream, {\n\t\t\tsignal,\n\t\t\tcleanup: true,\n\t\t\treadable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tif (streams.has(stream)) {\n\t\t\tended.add(stream);\n\t\t}\n\t} catch (error) {\n\t\tif (signal.aborted || !streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isAbortError(error)) {\n\t\t\taborted.add(stream);\n\t\t} else {\n\t\t\terrorStream(passThroughStream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamUnpipe = async ({stream, streams, ended, aborted, unpipeEvent, controller: {signal}}) => {\n\tawait once(stream, unpipeEvent, {signal});\n\n\tif (!stream.readable) {\n\t\treturn once(signal, 'abort', {signal});\n\t}\n\n\tstreams.delete(stream);\n\tended.delete(stream);\n\taborted.delete(stream);\n};\n\nconst endStream = stream => {\n\tif (stream.writable) {\n\t\tstream.end();\n\t}\n};\n\nconst errorOrAbortStream = (stream, error) => {\n\tif (isAbortError(error)) {\n\t\tabortStream(stream);\n\t} else {\n\t\terrorStream(stream, error);\n\t}\n};\n\n// This is the error thrown by `finished()` on `stream.destroy()`\nconst isAbortError = error => error?.code === 'ERR_STREAM_PREMATURE_CLOSE';\n\nconst abortStream = stream => {\n\tif (stream.readable || stream.writable) {\n\t\tstream.destroy();\n\t}\n};\n\n// `stream.destroy(error)` crashes the process with `uncaughtException` if no `error` event listener exists on `stream`.\n// We take care of error handling on user behalf, so we do not want this to happen.\nconst errorStream = (stream, error) => {\n\tif (!stream.destroyed) {\n\t\tstream.once('error', noop);\n\t\tstream.destroy(error);\n\t}\n};\n\nconst noop = () => {};\n\nconst updateMaxListeners = (passThroughStream, increment) => {\n\tconst maxListeners = passThroughStream.getMaxListeners();\n\tif (maxListeners !== 0 && maxListeners !== Number.POSITIVE_INFINITY) {\n\t\tpassThroughStream.setMaxListeners(maxListeners + increment);\n\t}\n};\n\n// Number of times `passThroughStream.on()` is called regardless of streams:\n//  - once due to `finished(passThroughStream)`\n//  - once due to `on(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_COUNT = 2;\n\n// Number of times `passThroughStream.on()` is called per stream:\n//  - once due to `stream.pipe(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_PER_STREAM = 1;\n","import {finished} from 'node:stream/promises';\nimport {isStandardStream} from '../utils/standard-stream.js';\n\n// Similar to `Stream.pipeline(source, destination)`, but does not destroy standard streams\nexport const pipeStreams = (source, destination) => {\n\tsource.pipe(destination);\n\tonSourceFinish(source, destination);\n\tonDestinationFinish(source, destination);\n};\n\n// `source.pipe(destination)` makes `destination` end when `source` ends.\n// But it does not propagate aborts or errors. This function does it.\nconst onSourceFinish = async (source, destination) => {\n\tif (isStandardStream(source) || isStandardStream(destination)) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait finished(source, {cleanup: true, readable: true, writable: false});\n\t} catch {}\n\n\tendDestinationStream(destination);\n};\n\nexport const endDestinationStream = destination => {\n\tif (destination.writable) {\n\t\tdestination.end();\n\t}\n};\n\n// We do the same thing in the other direction as well.\nconst onDestinationFinish = async (source, destination) => {\n\tif (isStandardStream(source) || isStandardStream(destination)) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait finished(destination, {cleanup: true, readable: false, writable: true});\n\t} catch {}\n\n\tabortSourceStream(source);\n};\n\nexport const abortSourceStream = source => {\n\tif (source.readable) {\n\t\tsource.destroy();\n\t}\n};\n","import mergeStreams from '@sindresorhus/merge-streams';\nimport {isStandardStream} from '../utils/standard-stream.js';\nimport {incrementMaxListeners} from '../utils/max-listeners.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {pipeStreams} from './pipeline.js';\n\n// Handle `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, after spawning, in async mode\n// When multiple input streams are used, we merge them to ensure the output stream ends only once each input stream has ended\nexport const pipeOutputAsync = (subprocess, fileDescriptors, controller) => {\n\tconst pipeGroups = new Map();\n\n\tfor (const [fdNumber, {stdioItems, direction}] of Object.entries(fileDescriptors)) {\n\t\tfor (const {stream} of stdioItems.filter(({type}) => TRANSFORM_TYPES.has(type))) {\n\t\t\tpipeTransform(subprocess, stream, direction, fdNumber);\n\t\t}\n\n\t\tfor (const {stream} of stdioItems.filter(({type}) => !TRANSFORM_TYPES.has(type))) {\n\t\t\tpipeStdioItem({\n\t\t\t\tsubprocess,\n\t\t\t\tstream,\n\t\t\t\tdirection,\n\t\t\t\tfdNumber,\n\t\t\t\tpipeGroups,\n\t\t\t\tcontroller,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const [outputStream, inputStreams] of pipeGroups.entries()) {\n\t\tconst inputStream = inputStreams.length === 1 ? inputStreams[0] : mergeStreams(inputStreams);\n\t\tpipeStreams(inputStream, outputStream);\n\t}\n};\n\n// When using transforms, `subprocess.stdin|stdout|stderr|stdio` is directly mutated\nconst pipeTransform = (subprocess, stream, direction, fdNumber) => {\n\tif (direction === 'output') {\n\t\tpipeStreams(subprocess.stdio[fdNumber], stream);\n\t} else {\n\t\tpipeStreams(stream, subprocess.stdio[fdNumber]);\n\t}\n\n\tconst streamProperty = SUBPROCESS_STREAM_PROPERTIES[fdNumber];\n\tif (streamProperty !== undefined) {\n\t\tsubprocess[streamProperty] = stream;\n\t}\n\n\tsubprocess.stdio[fdNumber] = stream;\n};\n\nconst SUBPROCESS_STREAM_PROPERTIES = ['stdin', 'stdout', 'stderr'];\n\n// Most `std*` option values involve piping `subprocess.std*` to a stream.\n// The stream is either passed by the user or created internally.\nconst pipeStdioItem = ({subprocess, stream, direction, fdNumber, pipeGroups, controller}) => {\n\tif (stream === undefined) {\n\t\treturn;\n\t}\n\n\tsetStandardStreamMaxListeners(stream, controller);\n\n\tconst [inputStream, outputStream] = direction === 'output'\n\t\t? [stream, subprocess.stdio[fdNumber]]\n\t\t: [subprocess.stdio[fdNumber], stream];\n\tconst outputStreams = pipeGroups.get(inputStream) ?? [];\n\tpipeGroups.set(inputStream, [...outputStreams, outputStream]);\n};\n\n// Multiple subprocesses might be piping from/to `process.std*` at the same time.\n// This is not necessarily an error and should not print a `maxListeners` warning.\nconst setStandardStreamMaxListeners = (stream, {signal}) => {\n\tif (isStandardStream(stream)) {\n\t\tincrementMaxListeners(stream, MAX_LISTENERS_INCREMENT, signal);\n\t}\n};\n\n// `source.pipe(destination)` adds at most 1 listener for each event.\n// If `stdin` option is an array, the values might be combined with `merge-streams`.\n// That library also listens for `source` end, which adds 1 more listener.\nconst MAX_LISTENERS_INCREMENT = 2;\n","/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems.  Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL.  It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n  signals.push(\n    'SIGALRM',\n    'SIGABRT',\n    'SIGVTALRM',\n    'SIGXCPU',\n    'SIGXFSZ',\n    'SIGUSR2',\n    'SIGTRAP',\n    'SIGSYS',\n    'SIGQUIT',\n    'SIGIOT'\n    // should detect profiler and enable/disable accordingly.\n    // see #21\n    // 'SIGPROF'\n  )\n}\n\nif (process.platform === 'linux') {\n  signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\n}\n","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n  reallyExit: (code?: number | undefined | null) => any\n  emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n  !!process &&\n  typeof process === 'object' &&\n  typeof process.removeListener === 'function' &&\n  typeof process.emit === 'function' &&\n  typeof process.reallyExit === 'function' &&\n  typeof process.listeners === 'function' &&\n  typeof process.kill === 'function' &&\n  typeof process.pid === 'number' &&\n  typeof process.on === 'function'\n\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n  code: number | null | undefined,\n  signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n  emitted: Emitted = {\n    afterExit: false,\n    exit: false,\n  }\n\n  listeners: Listeners = {\n    afterExit: [],\n    exit: [],\n  }\n\n  count: number = 0\n  id: number = Math.random()\n\n  constructor() {\n    if (global[kExitEmitter]) {\n      return global[kExitEmitter]\n    }\n    ObjectDefineProperty(global, kExitEmitter, {\n      value: this,\n      writable: false,\n      enumerable: false,\n      configurable: false,\n    })\n  }\n\n  on(ev: ExitEvent, fn: Handler) {\n    this.listeners[ev].push(fn)\n  }\n\n  removeListener(ev: ExitEvent, fn: Handler) {\n    const list = this.listeners[ev]\n    const i = list.indexOf(fn)\n    /* c8 ignore start */\n    if (i === -1) {\n      return\n    }\n    /* c8 ignore stop */\n    if (i === 0 && list.length === 1) {\n      list.length = 0\n    } else {\n      list.splice(i, 1)\n    }\n  }\n\n  emit(\n    ev: ExitEvent,\n    code: number | null | undefined,\n    signal: NodeJS.Signals | null\n  ): boolean {\n    if (this.emitted[ev]) {\n      return false\n    }\n    this.emitted[ev] = true\n    let ret: boolean = false\n    for (const fn of this.listeners[ev]) {\n      ret = fn(code, signal) === true || ret\n    }\n    if (ev === 'exit') {\n      ret = this.emit('afterExit', code, signal) || ret\n    }\n    return ret\n  }\n}\n\nabstract class SignalExitBase {\n  abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n  abstract load(): void\n  abstract unload(): void\n}\n\nconst signalExitWrap = <T extends SignalExitBase>(handler: T) => {\n  return {\n    onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n      return handler.onExit(cb, opts)\n    },\n    load() {\n      return handler.load()\n    },\n    unload() {\n      return handler.unload()\n    },\n  }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n  onExit() {\n    return () => {}\n  }\n  load() {}\n  unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n  // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n  // so use a supported signal instead\n  /* c8 ignore start */\n  #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n  /* c8 ignore stop */\n  #emitter = new Emitter()\n  #process: ProcessRE\n  #originalProcessEmit: ProcessRE['emit']\n  #originalProcessReallyExit: ProcessRE['reallyExit']\n\n  #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n  #loaded: boolean = false\n\n  constructor(process: ProcessRE) {\n    super()\n    this.#process = process\n    // { <signal>: <listener fn>, ... }\n    this.#sigListeners = {}\n    for (const sig of signals) {\n      this.#sigListeners[sig] = () => {\n        // If there are no other listeners, an exit is coming!\n        // Simplest way: remove us and then re-send the signal.\n        // We know that this will kill the process, so we can\n        // safely emit now.\n        const listeners = this.#process.listeners(sig)\n        let { count } = this.#emitter\n        // This is a workaround for the fact that signal-exit v3 and signal\n        // exit v4 are not aware of each other, and each will attempt to let\n        // the other handle it, so neither of them do. To correct this, we\n        // detect if we're the only handler *except* for previous versions\n        // of signal-exit, and increment by the count of listeners it has\n        // created.\n        /* c8 ignore start */\n        const p = process as unknown as {\n          __signal_exit_emitter__?: { count: number }\n        }\n        if (\n          typeof p.__signal_exit_emitter__ === 'object' &&\n          typeof p.__signal_exit_emitter__.count === 'number'\n        ) {\n          count += p.__signal_exit_emitter__.count\n        }\n        /* c8 ignore stop */\n        if (listeners.length === count) {\n          this.unload()\n          const ret = this.#emitter.emit('exit', null, sig)\n          /* c8 ignore start */\n          const s = sig === 'SIGHUP' ? this.#hupSig : sig\n          if (!ret) process.kill(process.pid, s)\n          /* c8 ignore stop */\n        }\n      }\n    }\n\n    this.#originalProcessReallyExit = process.reallyExit\n    this.#originalProcessEmit = process.emit\n  }\n\n  onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return () => {}\n    }\n    /* c8 ignore stop */\n\n    if (this.#loaded === false) {\n      this.load()\n    }\n\n    const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n    this.#emitter.on(ev, cb)\n    return () => {\n      this.#emitter.removeListener(ev, cb)\n      if (\n        this.#emitter.listeners['exit'].length === 0 &&\n        this.#emitter.listeners['afterExit'].length === 0\n      ) {\n        this.unload()\n      }\n    }\n  }\n\n  load() {\n    if (this.#loaded) {\n      return\n    }\n    this.#loaded = true\n\n    // This is the number of onSignalExit's that are in play.\n    // It's important so that we can count the correct number of\n    // listeners on signals, and don't wait for the other one to\n    // handle it instead of us.\n    this.#emitter.count += 1\n\n    for (const sig of signals) {\n      try {\n        const fn = this.#sigListeners[sig]\n        if (fn) this.#process.on(sig, fn)\n      } catch (_) {}\n    }\n\n    this.#process.emit = (ev: string, ...a: any[]) => {\n      return this.#processEmit(ev, ...a)\n    }\n    this.#process.reallyExit = (code?: number | null | undefined) => {\n      return this.#processReallyExit(code)\n    }\n  }\n\n  unload() {\n    if (!this.#loaded) {\n      return\n    }\n    this.#loaded = false\n\n    signals.forEach(sig => {\n      const listener = this.#sigListeners[sig]\n      /* c8 ignore start */\n      if (!listener) {\n        throw new Error('Listener not defined for signal: ' + sig)\n      }\n      /* c8 ignore stop */\n      try {\n        this.#process.removeListener(sig, listener)\n        /* c8 ignore start */\n      } catch (_) {}\n      /* c8 ignore stop */\n    })\n    this.#process.emit = this.#originalProcessEmit\n    this.#process.reallyExit = this.#originalProcessReallyExit\n    this.#emitter.count -= 1\n  }\n\n  #processReallyExit(code?: number | null | undefined) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return 0\n    }\n    this.#process.exitCode = code || 0\n    /* c8 ignore stop */\n\n    this.#emitter.emit('exit', this.#process.exitCode, null)\n    return this.#originalProcessReallyExit.call(\n      this.#process,\n      this.#process.exitCode\n    )\n  }\n\n  #processEmit(ev: string, ...args: any[]): any {\n    const og = this.#originalProcessEmit\n    if (ev === 'exit' && processOk(this.#process)) {\n      if (typeof args[0] === 'number') {\n        this.#process.exitCode = args[0]\n        /* c8 ignore start */\n      }\n      /* c8 ignore start */\n      const ret = og.call(this.#process, ev, ...args)\n      /* c8 ignore start */\n      this.#emitter.emit('exit', this.#process.exitCode, null)\n      /* c8 ignore stop */\n      return ret\n    } else {\n      return og.call(this.#process, ev, ...args)\n    }\n  }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n  /**\n   * Called when the process is exiting, whether via signal, explicit\n   * exit, or running out of stuff to do.\n   *\n   * If the global process object is not suitable for instrumentation,\n   * then this will be a no-op.\n   *\n   * Returns a function that may be used to unload signal-exit.\n   */\n  onExit,\n\n  /**\n   * Load the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  load,\n\n  /**\n   * Unload the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  unload,\n} = signalExitWrap(\n  processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n","import {addAbortListener} from 'node:events';\nimport {onExit} from 'signal-exit';\n\n// If the `cleanup` option is used, call `subprocess.kill()` when the parent process exits\nexport const cleanupOnExit = (subprocess, {cleanup, detached}, {signal}) => {\n\tif (!cleanup || detached) {\n\t\treturn;\n\t}\n\n\tconst removeExitHandler = onExit(() => {\n\t\tsubprocess.kill();\n\t});\n\taddAbortListener(signal, () => {\n\t\tremoveExitHandler();\n\t});\n};\n","import {normalizeParameters} from '../methods/parameters.js';\nimport {getStartTime} from '../return/duration.js';\nimport {SUBPROCESS_OPTIONS, getToStream, getFromStream} from '../arguments/fd-options.js';\nimport {isDenoExecPath} from '../arguments/file-url.js';\n\n// Normalize and validate arguments passed to `source.pipe(destination)`\nexport const normalizePipeArguments = ({source, sourcePromise, boundOptions, createNested}, ...pipeArguments) => {\n\tconst startTime = getStartTime();\n\tconst {\n\t\tdestination,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t\tfrom,\n\t\tunpipeSignal,\n\t} = getDestinationStream(boundOptions, createNested, pipeArguments);\n\tconst {sourceStream, sourceError} = getSourceStream(source, from);\n\tconst {options: sourceOptions, fileDescriptors} = SUBPROCESS_OPTIONS.get(source);\n\treturn {\n\t\tsourcePromise,\n\t\tsourceStream,\n\t\tsourceOptions,\n\t\tsourceError,\n\t\tdestination,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t\tunpipeSignal,\n\t\tfileDescriptors,\n\t\tstartTime,\n\t};\n};\n\nconst getDestinationStream = (boundOptions, createNested, pipeArguments) => {\n\ttry {\n\t\tconst {\n\t\t\tdestination,\n\t\t\tpipeOptions: {from, to, unpipeSignal} = {},\n\t\t} = getDestination(boundOptions, createNested, ...pipeArguments);\n\t\tconst destinationStream = getToStream(destination, to);\n\t\treturn {\n\t\t\tdestination,\n\t\t\tdestinationStream,\n\t\t\tfrom,\n\t\t\tunpipeSignal,\n\t\t};\n\t} catch (error) {\n\t\treturn {destinationError: error};\n\t}\n};\n\n// Piping subprocesses can use three syntaxes:\n//  - source.pipe('command', commandArguments, pipeOptionsOrDestinationOptions)\n//  - source.pipe`command commandArgument` or source.pipe(pipeOptionsOrDestinationOptions)`command commandArgument`\n//  - source.pipe(execa(...), pipeOptions)\nconst getDestination = (boundOptions, createNested, firstArgument, ...pipeArguments) => {\n\tif (Array.isArray(firstArgument)) {\n\t\tconst destination = createNested(mapDestinationArguments, boundOptions)(firstArgument, ...pipeArguments);\n\t\treturn {destination, pipeOptions: boundOptions};\n\t}\n\n\tif (typeof firstArgument === 'string' || firstArgument instanceof URL || isDenoExecPath(firstArgument)) {\n\t\tif (Object.keys(boundOptions).length > 0) {\n\t\t\tthrow new TypeError('Please use .pipe(\"file\", ..., options) or .pipe(execa(\"file\", ..., options)) instead of .pipe(options)(\"file\", ...).');\n\t\t}\n\n\t\tconst [rawFile, rawArguments, rawOptions] = normalizeParameters(firstArgument, ...pipeArguments);\n\t\tconst destination = createNested(mapDestinationArguments)(rawFile, rawArguments, rawOptions);\n\t\treturn {destination, pipeOptions: rawOptions};\n\t}\n\n\tif (SUBPROCESS_OPTIONS.has(firstArgument)) {\n\t\tif (Object.keys(boundOptions).length > 0) {\n\t\t\tthrow new TypeError('Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).');\n\t\t}\n\n\t\treturn {destination: firstArgument, pipeOptions: pipeArguments[0]};\n\t}\n\n\tthrow new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${firstArgument}`);\n};\n\n// Force `stdin: 'pipe'` with the destination subprocess\nconst mapDestinationArguments = ({options}) => ({options: {...options, stdin: 'pipe', piped: true}});\n\nconst getSourceStream = (source, from) => {\n\ttry {\n\t\tconst sourceStream = getFromStream(source, from);\n\t\treturn {sourceStream};\n\t} catch (error) {\n\t\treturn {sourceError: error};\n\t}\n};\n","import {makeEarlyError} from '../return/result.js';\nimport {abortSourceStream, endDestinationStream} from '../io/pipeline.js';\n\n// When passing invalid arguments to `source.pipe()`, throw asynchronously.\n// We also abort both subprocesses.\nexport const handlePipeArgumentsError = ({\n\tsourceStream,\n\tsourceError,\n\tdestinationStream,\n\tdestinationError,\n\tfileDescriptors,\n\tsourceOptions,\n\tstartTime,\n}) => {\n\tconst error = getPipeArgumentsError({\n\t\tsourceStream,\n\t\tsourceError,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t});\n\tif (error !== undefined) {\n\t\tthrow createNonCommandError({\n\t\t\terror,\n\t\t\tfileDescriptors,\n\t\t\tsourceOptions,\n\t\t\tstartTime,\n\t\t});\n\t}\n};\n\nconst getPipeArgumentsError = ({sourceStream, sourceError, destinationStream, destinationError}) => {\n\tif (sourceError !== undefined && destinationError !== undefined) {\n\t\treturn destinationError;\n\t}\n\n\tif (destinationError !== undefined) {\n\t\tabortSourceStream(sourceStream);\n\t\treturn destinationError;\n\t}\n\n\tif (sourceError !== undefined) {\n\t\tendDestinationStream(destinationStream);\n\t\treturn sourceError;\n\t}\n};\n\n// Specific error return value when passing invalid arguments to `subprocess.pipe()` or when using `unpipeSignal`\nexport const createNonCommandError = ({error, fileDescriptors, sourceOptions, startTime}) => makeEarlyError({\n\terror,\n\tcommand: PIPE_COMMAND_MESSAGE,\n\tescapedCommand: PIPE_COMMAND_MESSAGE,\n\tfileDescriptors,\n\toptions: sourceOptions,\n\tstartTime,\n\tisSync: false,\n});\n\nconst PIPE_COMMAND_MESSAGE = 'source.pipe(destination)';\n","// Like Bash, we await both subprocesses. This is unlike some other shells which only await the destination subprocess.\n// Like Bash with the `pipefail` option, if either subprocess fails, the whole pipe fails.\n// Like Bash, if both subprocesses fail, we return the failure of the destination.\n// This ensures both subprocesses' errors are present, using `error.pipedFrom`.\nexport const waitForBothSubprocesses = async subprocessPromises => {\n\tconst [\n\t\t{status: sourceStatus, reason: sourceReason, value: sourceResult = sourceReason},\n\t\t{status: destinationStatus, reason: destinationReason, value: destinationResult = destinationReason},\n\t] = await subprocessPromises;\n\n\tif (!destinationResult.pipedFrom.includes(sourceResult)) {\n\t\tdestinationResult.pipedFrom.push(sourceResult);\n\t}\n\n\tif (destinationStatus === 'rejected') {\n\t\tthrow destinationResult;\n\t}\n\n\tif (sourceStatus === 'rejected') {\n\t\tthrow sourceResult;\n\t}\n\n\treturn destinationResult;\n};\n","import {finished} from 'node:stream/promises';\nimport mergeStreams from '@sindresorhus/merge-streams';\nimport {incrementMaxListeners} from '../utils/max-listeners.js';\nimport {pipeStreams} from '../io/pipeline.js';\n\n// The piping behavior is like Bash.\n// In particular, when one subprocess exits, the other is not terminated by a signal.\n// Instead, its stdout (for the source) or stdin (for the destination) closes.\n// If the subprocess uses it, it will make it error with SIGPIPE or EPIPE (for the source) or end (for the destination).\n// If it does not use it, it will continue running.\n// This allows for subprocesses to gracefully exit and lower the coupling between subprocesses.\nexport const pipeSubprocessStream = (sourceStream, destinationStream, maxListenersController) => {\n\tconst mergedStream = MERGED_STREAMS.has(destinationStream)\n\t\t? pipeMoreSubprocessStream(sourceStream, destinationStream)\n\t\t: pipeFirstSubprocessStream(sourceStream, destinationStream);\n\tincrementMaxListeners(sourceStream, SOURCE_LISTENERS_PER_PIPE, maxListenersController.signal);\n\tincrementMaxListeners(destinationStream, DESTINATION_LISTENERS_PER_PIPE, maxListenersController.signal);\n\tcleanupMergedStreamsMap(destinationStream);\n\treturn mergedStream;\n};\n\n// We use `merge-streams` to allow for multiple sources to pipe to the same destination.\nconst pipeFirstSubprocessStream = (sourceStream, destinationStream) => {\n\tconst mergedStream = mergeStreams([sourceStream]);\n\tpipeStreams(mergedStream, destinationStream);\n\tMERGED_STREAMS.set(destinationStream, mergedStream);\n\treturn mergedStream;\n};\n\nconst pipeMoreSubprocessStream = (sourceStream, destinationStream) => {\n\tconst mergedStream = MERGED_STREAMS.get(destinationStream);\n\tmergedStream.add(sourceStream);\n\treturn mergedStream;\n};\n\nconst cleanupMergedStreamsMap = async destinationStream => {\n\ttry {\n\t\tawait finished(destinationStream, {cleanup: true, readable: false, writable: true});\n\t} catch {}\n\n\tMERGED_STREAMS.delete(destinationStream);\n};\n\nconst MERGED_STREAMS = new WeakMap();\n\n// Number of listeners set up on `sourceStream` by each `sourceStream.pipe(destinationStream)`\n// Those are added by `merge-streams`\nconst SOURCE_LISTENERS_PER_PIPE = 2;\n// Number of listeners set up on `destinationStream` by each `sourceStream.pipe(destinationStream)`\n// Those are added by `finished()` in `cleanupMergedStreamsMap()`\nconst DESTINATION_LISTENERS_PER_PIPE = 1;\n","import {aborted} from 'node:util';\nimport {createNonCommandError} from './throw.js';\n\n// When passing an `unpipeSignal` option, abort piping when the signal is aborted.\n// However, do not terminate the subprocesses.\nexport const unpipeOnAbort = (unpipeSignal, unpipeContext) => unpipeSignal === undefined\n\t? []\n\t: [unpipeOnSignalAbort(unpipeSignal, unpipeContext)];\n\nconst unpipeOnSignalAbort = async (unpipeSignal, {sourceStream, mergedStream, fileDescriptors, sourceOptions, startTime}) => {\n\tawait aborted(unpipeSignal, sourceStream);\n\tawait mergedStream.remove(sourceStream);\n\tconst error = new Error('Pipe canceled by `unpipeSignal` option.');\n\tthrow createNonCommandError({\n\t\terror,\n\t\tfileDescriptors,\n\t\tsourceOptions,\n\t\tstartTime,\n\t});\n};\n","import isPlainObject from 'is-plain-obj';\nimport {normalizePipeArguments} from './pipe-arguments.js';\nimport {handlePipeArgumentsError} from './throw.js';\nimport {waitForBothSubprocesses} from './sequence.js';\nimport {pipeSubprocessStream} from './streaming.js';\nimport {unpipeOnAbort} from './abort.js';\n\n// Pipe a subprocess' `stdout`/`stderr`/`stdio` into another subprocess' `stdin`\nexport const pipeToSubprocess = (sourceInfo, ...pipeArguments) => {\n\tif (isPlainObject(pipeArguments[0])) {\n\t\treturn pipeToSubprocess.bind(undefined, {\n\t\t\t...sourceInfo,\n\t\t\tboundOptions: {...sourceInfo.boundOptions, ...pipeArguments[0]},\n\t\t});\n\t}\n\n\tconst {destination, ...normalizedInfo} = normalizePipeArguments(sourceInfo, ...pipeArguments);\n\tconst promise = handlePipePromise({...normalizedInfo, destination});\n\tpromise.pipe = pipeToSubprocess.bind(undefined, {\n\t\t...sourceInfo,\n\t\tsource: destination,\n\t\tsourcePromise: promise,\n\t\tboundOptions: {},\n\t});\n\treturn promise;\n};\n\n// Asynchronous logic when piping subprocesses\nconst handlePipePromise = async ({\n\tsourcePromise,\n\tsourceStream,\n\tsourceOptions,\n\tsourceError,\n\tdestination,\n\tdestinationStream,\n\tdestinationError,\n\tunpipeSignal,\n\tfileDescriptors,\n\tstartTime,\n}) => {\n\tconst subprocessPromises = getSubprocessPromises(sourcePromise, destination);\n\thandlePipeArgumentsError({\n\t\tsourceStream,\n\t\tsourceError,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t\tfileDescriptors,\n\t\tsourceOptions,\n\t\tstartTime,\n\t});\n\tconst maxListenersController = new AbortController();\n\ttry {\n\t\tconst mergedStream = pipeSubprocessStream(sourceStream, destinationStream, maxListenersController);\n\t\treturn await Promise.race([\n\t\t\twaitForBothSubprocesses(subprocessPromises),\n\t\t\t...unpipeOnAbort(unpipeSignal, {\n\t\t\t\tsourceStream,\n\t\t\t\tmergedStream,\n\t\t\t\tsourceOptions,\n\t\t\t\tfileDescriptors,\n\t\t\t\tstartTime,\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tmaxListenersController.abort();\n\t}\n};\n\n// `.pipe()` awaits the subprocess promises.\n// When invalid arguments are passed to `.pipe()`, we throw an error, which prevents awaiting them.\n// We need to ensure this does not create unhandled rejections.\nconst getSubprocessPromises = (sourcePromise, destination) => Promise.allSettled([sourcePromise, destination]);\n","import {on} from 'node:events';\nimport {getDefaultHighWaterMark} from 'node:stream';\nimport {getEncodingTransformGenerator} from '../transform/encoding-transform.js';\nimport {getSplitLinesGenerator} from '../transform/split.js';\nimport {transformChunkSync, finalChunksSync} from '../transform/run-sync.js';\n\n// Iterate over lines of `subprocess.stdout`, used by `subprocess.readable|duplex|iterable()`\nexport const iterateOnSubprocessStream = ({subprocessStdout, subprocess, binary, shouldEncode, encoding, preserveNewlines}) => {\n\tconst controller = new AbortController();\n\tstopReadingOnExit(subprocess, controller);\n\treturn iterateOnStream({\n\t\tstream: subprocessStdout,\n\t\tcontroller,\n\t\tbinary,\n\t\tshouldEncode: !subprocessStdout.readableObjectMode && shouldEncode,\n\t\tencoding,\n\t\tshouldSplit: !subprocessStdout.readableObjectMode,\n\t\tpreserveNewlines,\n\t});\n};\n\nconst stopReadingOnExit = async (subprocess, controller) => {\n\ttry {\n\t\tawait subprocess;\n\t} catch {} finally {\n\t\tcontroller.abort();\n\t}\n};\n\n// Iterate over lines of `subprocess.stdout`, used by `result.stdout` and the `verbose: 'full'` option.\n// Applies the `lines` and `encoding` options.\nexport const iterateForResult = ({stream, onStreamEnd, lines, encoding, stripFinalNewline, allMixed}) => {\n\tconst controller = new AbortController();\n\tstopReadingOnStreamEnd(onStreamEnd, controller, stream);\n\tconst objectMode = stream.readableObjectMode && !allMixed;\n\treturn iterateOnStream({\n\t\tstream,\n\t\tcontroller,\n\t\tbinary: encoding === 'buffer',\n\t\tshouldEncode: !objectMode,\n\t\tencoding,\n\t\tshouldSplit: !objectMode && lines,\n\t\tpreserveNewlines: !stripFinalNewline,\n\t});\n};\n\nconst stopReadingOnStreamEnd = async (onStreamEnd, controller, stream) => {\n\ttry {\n\t\tawait onStreamEnd;\n\t} catch {\n\t\tstream.destroy();\n\t} finally {\n\t\tcontroller.abort();\n\t}\n};\n\nconst iterateOnStream = ({stream, controller, binary, shouldEncode, encoding, shouldSplit, preserveNewlines}) => {\n\tconst onStdoutChunk = on(stream, 'data', {\n\t\tsignal: controller.signal,\n\t\thighWaterMark: HIGH_WATER_MARK,\n\t\t// Backward compatibility with older name for this option\n\t\t// See https://github.com/nodejs/node/pull/52080#discussion_r1525227861\n\t\t// @todo Remove after removing support for Node 21\n\t\thighWatermark: HIGH_WATER_MARK,\n\t});\n\treturn iterateOnData({\n\t\tonStdoutChunk,\n\t\tcontroller,\n\t\tbinary,\n\t\tshouldEncode,\n\t\tencoding,\n\t\tshouldSplit,\n\t\tpreserveNewlines,\n\t});\n};\n\nexport const DEFAULT_OBJECT_HIGH_WATER_MARK = getDefaultHighWaterMark(true);\n\n// The `highWaterMark` of `events.on()` is measured in number of events, not in bytes.\n// Not knowing the average amount of bytes per `data` event, we use the same heuristic as streams in objectMode, since they have the same issue.\n// Therefore, we use the value of `getDefaultHighWaterMark(true)`.\n// Note: this option does not exist on Node 18, but this is ok since the logic works without it. It just consumes more memory.\nconst HIGH_WATER_MARK = DEFAULT_OBJECT_HIGH_WATER_MARK;\n\nconst iterateOnData = async function * ({onStdoutChunk, controller, binary, shouldEncode, encoding, shouldSplit, preserveNewlines}) {\n\tconst generators = getGenerators({\n\t\tbinary,\n\t\tshouldEncode,\n\t\tencoding,\n\t\tshouldSplit,\n\t\tpreserveNewlines,\n\t});\n\n\ttry {\n\t\tfor await (const [chunk] of onStdoutChunk) {\n\t\t\tyield * transformChunkSync(chunk, generators, 0);\n\t\t}\n\t} catch (error) {\n\t\tif (!controller.signal.aborted) {\n\t\t\tthrow error;\n\t\t}\n\t} finally {\n\t\tyield * finalChunksSync(generators);\n\t}\n};\n\nconst getGenerators = ({binary, shouldEncode, encoding, shouldSplit, preserveNewlines}) => [\n\tgetEncodingTransformGenerator(binary, encoding, !shouldEncode),\n\tgetSplitLinesGenerator(binary, preserveNewlines, !shouldSplit, {}),\n].filter(Boolean);\n","import {setImmediate} from 'node:timers/promises';\nimport getStream, {getStreamAsArrayBuffer, getStreamAsArray} from 'get-stream';\nimport {isArrayBuffer} from '../utils/uint-array.js';\nimport {shouldLogOutput, logLines} from '../verbose/output.js';\nimport {iterateForResult} from './iterate.js';\nimport {handleMaxBuffer} from './max-buffer.js';\nimport {getStripFinalNewline} from './strip-newline.js';\n\n// Retrieve `result.stdout|stderr|all|stdio[*]`\nexport const getStreamOutput = async ({stream, onStreamEnd, fdNumber, encoding, buffer, maxBuffer, lines, allMixed, stripFinalNewline, verboseInfo, streamInfo}) => {\n\tconst logPromise = logOutputAsync({\n\t\tstream,\n\t\tonStreamEnd,\n\t\tfdNumber,\n\t\tencoding,\n\t\tallMixed,\n\t\tverboseInfo,\n\t\tstreamInfo,\n\t});\n\n\tif (!buffer) {\n\t\tawait Promise.all([resumeStream(stream), logPromise]);\n\t\treturn;\n\t}\n\n\tconst stripFinalNewlineValue = getStripFinalNewline(stripFinalNewline, fdNumber);\n\tconst iterable = iterateForResult({\n\t\tstream,\n\t\tonStreamEnd,\n\t\tlines,\n\t\tencoding,\n\t\tstripFinalNewline: stripFinalNewlineValue,\n\t\tallMixed,\n\t});\n\tconst [output] = await Promise.all([\n\t\tgetStreamContents({\n\t\t\tstream,\n\t\t\titerable,\n\t\t\tfdNumber,\n\t\t\tencoding,\n\t\t\tmaxBuffer,\n\t\t\tlines,\n\t\t}),\n\t\tlogPromise,\n\t]);\n\treturn output;\n};\n\nconst logOutputAsync = async ({stream, onStreamEnd, fdNumber, encoding, allMixed, verboseInfo, streamInfo: {fileDescriptors}}) => {\n\tif (!shouldLogOutput({\n\t\tstdioItems: fileDescriptors[fdNumber]?.stdioItems,\n\t\tencoding,\n\t\tverboseInfo,\n\t\tfdNumber,\n\t})) {\n\t\treturn;\n\t}\n\n\tconst linesIterable = iterateForResult({\n\t\tstream,\n\t\tonStreamEnd,\n\t\tlines: true,\n\t\tencoding,\n\t\tstripFinalNewline: true,\n\t\tallMixed,\n\t});\n\tawait logLines(linesIterable, stream, fdNumber, verboseInfo);\n};\n\n// When using `buffer: false`, users need to read `subprocess.stdout|stderr|all` right away\n// See https://github.com/sindresorhus/execa/issues/730 and https://github.com/sindresorhus/execa/pull/729#discussion_r1465496310\nconst resumeStream = async stream => {\n\tawait setImmediate();\n\tif (stream.readableFlowing === null) {\n\t\tstream.resume();\n\t}\n};\n\nconst getStreamContents = async ({stream, stream: {readableObjectMode}, iterable, fdNumber, encoding, maxBuffer, lines}) => {\n\ttry {\n\t\tif (readableObjectMode || lines) {\n\t\t\treturn await getStreamAsArray(iterable, {maxBuffer});\n\t\t}\n\n\t\tif (encoding === 'buffer') {\n\t\t\treturn new Uint8Array(await getStreamAsArrayBuffer(iterable, {maxBuffer}));\n\t\t}\n\n\t\treturn await getStream(iterable, {maxBuffer});\n\t} catch (error) {\n\t\treturn handleBufferedData(handleMaxBuffer({\n\t\t\terror,\n\t\t\tstream,\n\t\t\treadableObjectMode,\n\t\t\tlines,\n\t\t\tencoding,\n\t\t\tfdNumber,\n\t\t}));\n\t}\n};\n\n// On failure, `result.stdout|stderr|all` should contain the currently buffered stream\n// They are automatically closed and flushed by Node.js when the subprocess exits\n// When `buffer` is `false`, `streamPromise` is `undefined` and there is no buffered data to retrieve\nexport const getBufferedData = async streamPromise => {\n\ttry {\n\t\treturn await streamPromise;\n\t} catch (error) {\n\t\treturn handleBufferedData(error);\n\t}\n};\n\n// Ensure we are returning Uint8Arrays when using `encoding: 'buffer'`\nconst handleBufferedData = ({bufferedData}) => isArrayBuffer(bufferedData)\n\t? new Uint8Array(bufferedData)\n\t: bufferedData;\n","import {finished} from 'node:stream/promises';\n\n// Wraps `finished(stream)` to handle the following case:\n//  - When the subprocess exits, Node.js automatically calls `subprocess.stdin.destroy()`, which we need to ignore.\n//  - However, we still need to throw if `subprocess.stdin.destroy()` is called before subprocess exit.\nexport const waitForStream = async (stream, fdNumber, streamInfo, {isSameDirection, stopOnExit = false} = {}) => {\n\tconst state = handleStdinDestroy(stream, streamInfo);\n\tconst abortController = new AbortController();\n\ttry {\n\t\tawait Promise.race([\n\t\t\t...(stopOnExit ? [streamInfo.exitPromise] : []),\n\t\t\tfinished(stream, {cleanup: true, signal: abortController.signal}),\n\t\t]);\n\t} catch (error) {\n\t\tif (!state.stdinCleanedUp) {\n\t\t\thandleStreamError(error, fdNumber, streamInfo, isSameDirection);\n\t\t}\n\t} finally {\n\t\tabortController.abort();\n\t}\n};\n\n// If `subprocess.stdin` is destroyed before being fully written to, it is considered aborted and should throw an error.\n// This can happen for example when user called `subprocess.stdin.destroy()` before `subprocess.stdin.end()`.\n// However, Node.js calls `subprocess.stdin.destroy()` on exit for cleanup purposes.\n// https://github.com/nodejs/node/blob/0b4cdb4b42956cbd7019058e409e06700a199e11/lib/internal/child_process.js#L278\n// This is normal and should not throw an error.\n// Therefore, we need to differentiate between both situations to know whether to throw an error.\n// Unfortunately, events (`close`, `error`, `end`, `exit`) cannot be used because `.destroy()` can take an arbitrary amount of time.\n// For example, `stdin: 'pipe'` is implemented as a TCP socket, and its `.destroy()` method waits for TCP disconnection.\n// Therefore `.destroy()` might end before or after subprocess exit, based on OS speed and load.\n// The only way to detect this is to spy on `subprocess.stdin._destroy()` by wrapping it.\n// If `subprocess.exitCode` or `subprocess.signalCode` is set, it means `.destroy()` is being called by Node.js itself.\nconst handleStdinDestroy = (stream, {originalStreams: [originalStdin], subprocess}) => {\n\tconst state = {stdinCleanedUp: false};\n\tif (stream === originalStdin) {\n\t\tspyOnStdinDestroy(stream, subprocess, state);\n\t}\n\n\treturn state;\n};\n\nconst spyOnStdinDestroy = (subprocessStdin, subprocess, state) => {\n\tconst {_destroy} = subprocessStdin;\n\tsubprocessStdin._destroy = (...destroyArguments) => {\n\t\tsetStdinCleanedUp(subprocess, state);\n\t\t_destroy.call(subprocessStdin, ...destroyArguments);\n\t};\n};\n\nconst setStdinCleanedUp = ({exitCode, signalCode}, state) => {\n\tif (exitCode !== null || signalCode !== null) {\n\t\tstate.stdinCleanedUp = true;\n\t}\n};\n\n// We ignore EPIPEs on writable streams and aborts on readable streams since those can happen normally.\n// When one stream errors, the error is propagated to the other streams on the same file descriptor.\n// Those other streams might have a different direction due to the above.\n// When this happens, the direction of both the initial stream and the others should then be taken into account.\n// Therefore, we keep track of whether a stream error is currently propagating.\nconst handleStreamError = (error, fdNumber, streamInfo, isSameDirection) => {\n\tif (!shouldIgnoreStreamError(error, fdNumber, streamInfo, isSameDirection)) {\n\t\tthrow error;\n\t}\n};\n\nconst shouldIgnoreStreamError = (error, fdNumber, streamInfo, isSameDirection = true) => {\n\tif (streamInfo.propagating) {\n\t\treturn isStreamEpipe(error) || isStreamAbort(error);\n\t}\n\n\tstreamInfo.propagating = true;\n\treturn isInputFileDescriptor(streamInfo, fdNumber) === isSameDirection\n\t\t? isStreamEpipe(error)\n\t\t: isStreamAbort(error);\n};\n\n// Unfortunately, we cannot use the stream's class or properties to know whether it is readable or writable.\n// For example, `subprocess.stdin` is technically a Duplex, but can only be used as a writable.\n// Therefore, we need to use the file descriptor's direction (`stdin` is input, `stdout` is output, etc.).\n// However, while `subprocess.std*` and transforms follow that direction, any stream passed the `std*` option has the opposite direction.\n// For example, `subprocess.stdin` is a writable, but the `stdin` option is a readable.\nexport const isInputFileDescriptor = ({fileDescriptors}, fdNumber) => fdNumber !== 'all' && fileDescriptors[fdNumber].direction === 'input';\n\n// When `stream.destroy()` is called without an `error` argument, stream is aborted.\n// This is the only way to abort a readable stream, which can be useful in some instances.\n// Therefore, we ignore this error on readable streams.\nexport const isStreamAbort = error => error?.code === 'ERR_STREAM_PREMATURE_CLOSE';\n\n// When `stream.write()` is called but the underlying source has been closed, `EPIPE` is emitted.\n// When piping subprocesses, the source subprocess usually decides when to stop piping.\n// However, there are some instances when the destination does instead, such as `... | head -n1`.\n// It notifies the source by using `EPIPE`.\n// Therefore, we ignore this error on writable streams.\nconst isStreamEpipe = error => error?.code === 'EPIPE';\n","import {getStreamOutput} from '../io/contents.js';\nimport {waitForStream, isInputFileDescriptor} from './wait-stream.js';\n\n// Read the contents of `subprocess.std*` and|or wait for its completion\nexport const waitForStdioStreams = ({subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline, verboseInfo, streamInfo}) => subprocess.stdio.map((stream, fdNumber) => waitForSubprocessStream({\n\tstream,\n\tfdNumber,\n\tencoding,\n\tbuffer: buffer[fdNumber],\n\tmaxBuffer: maxBuffer[fdNumber],\n\tlines: lines[fdNumber],\n\tallMixed: false,\n\tstripFinalNewline,\n\tverboseInfo,\n\tstreamInfo,\n}));\n\n// Read the contents of `subprocess.std*` or `subprocess.all` and|or wait for its completion\nexport const waitForSubprocessStream = async ({stream, fdNumber, encoding, buffer, maxBuffer, lines, allMixed, stripFinalNewline, verboseInfo, streamInfo}) => {\n\tif (!stream) {\n\t\treturn;\n\t}\n\n\tconst onStreamEnd = waitForStream(stream, fdNumber, streamInfo);\n\tif (isInputFileDescriptor(streamInfo, fdNumber)) {\n\t\tawait onStreamEnd;\n\t\treturn;\n\t}\n\n\tconst [output] = await Promise.all([\n\t\tgetStreamOutput({\n\t\t\tstream,\n\t\t\tonStreamEnd,\n\t\t\tfdNumber,\n\t\t\tencoding,\n\t\t\tbuffer,\n\t\t\tmaxBuffer,\n\t\t\tlines,\n\t\t\tallMixed,\n\t\t\tstripFinalNewline,\n\t\t\tverboseInfo,\n\t\t\tstreamInfo,\n\t\t}),\n\t\tonStreamEnd,\n\t]);\n\treturn output;\n};\n","import mergeStreams from '@sindresorhus/merge-streams';\nimport {waitForSubprocessStream} from './stdio.js';\n\n// `all` interleaves `stdout` and `stderr`\nexport const makeAllStream = ({stdout, stderr}, {all}) => all && (stdout || stderr)\n\t? mergeStreams([stdout, stderr].filter(Boolean))\n\t: undefined;\n\n// Read the contents of `subprocess.all` and|or wait for its completion\nexport const waitForAllStream = ({subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline, verboseInfo, streamInfo}) => waitForSubprocessStream({\n\t...getAllStream(subprocess, buffer),\n\tfdNumber: 'all',\n\tencoding,\n\tmaxBuffer: maxBuffer[1] + maxBuffer[2],\n\tlines: lines[1] || lines[2],\n\tallMixed: getAllMixed(subprocess),\n\tstripFinalNewline,\n\tverboseInfo,\n\tstreamInfo,\n});\n\nconst getAllStream = ({stdout, stderr, all}, [, bufferStdout, bufferStderr]) => {\n\tconst buffer = bufferStdout || bufferStderr;\n\tif (!buffer) {\n\t\treturn {stream: all, buffer};\n\t}\n\n\tif (!bufferStdout) {\n\t\treturn {stream: stderr, buffer};\n\t}\n\n\tif (!bufferStderr) {\n\t\treturn {stream: stdout, buffer};\n\t}\n\n\treturn {stream: all, buffer};\n};\n\n// When `subprocess.stdout` is in objectMode but not `subprocess.stderr` (or the opposite), we need to use both:\n//  - `getStreamAsArray()` for the chunks in objectMode, to return as an array without changing each chunk\n//  - `getStreamAsArrayBuffer()` or `getStream()` for the chunks not in objectMode, to convert them from Buffers to string or Uint8Array\n// We do this by emulating the Buffer -> string|Uint8Array conversion performed by `get-stream` with our own, which is identical.\nconst getAllMixed = ({all, stdout, stderr}) => all\n\t&& stdout\n\t&& stderr\n\t&& stdout.readableObjectMode !== stderr.readableObjectMode;\n","import {verboseLog, serializeVerboseMessage} from './log.js';\nimport {isFullVerbose} from './values.js';\n\n// When `verbose` is `'full'`, print IPC messages from the subprocess\nexport const shouldLogIpc = verboseInfo => isFullVerbose(verboseInfo, 'ipc');\n\nexport const logIpcOutput = (message, verboseInfo) => {\n\tconst verboseMessage = serializeVerboseMessage(message);\n\tverboseLog({\n\t\ttype: 'ipc',\n\t\tverboseMessage,\n\t\tfdNumber: 'ipc',\n\t\tverboseInfo,\n\t});\n};\n","import {checkIpcMaxBuffer} from '../io/max-buffer.js';\nimport {shouldLogIpc, logIpcOutput} from '../verbose/ipc.js';\nimport {getFdSpecificValue} from '../arguments/specific.js';\nimport {loopOnMessages} from './get-each.js';\n\n// Iterate through IPC messages sent by the subprocess\nexport const waitForIpcOutput = async ({\n\tsubprocess,\n\tbuffer: bufferArray,\n\tmaxBuffer: maxBufferArray,\n\tipc,\n\tipcOutput,\n\tverboseInfo,\n}) => {\n\tif (!ipc) {\n\t\treturn ipcOutput;\n\t}\n\n\tconst isVerbose = shouldLogIpc(verboseInfo);\n\tconst buffer = getFdSpecificValue(bufferArray, 'ipc');\n\tconst maxBuffer = getFdSpecificValue(maxBufferArray, 'ipc');\n\n\tfor await (const message of loopOnMessages({\n\t\tanyProcess: subprocess,\n\t\tchannel: subprocess.channel,\n\t\tisSubprocess: false,\n\t\tipc,\n\t\tshouldAwait: false,\n\t\treference: true,\n\t})) {\n\t\tif (buffer) {\n\t\t\tcheckIpcMaxBuffer(subprocess, ipcOutput, maxBuffer);\n\t\t\tipcOutput.push(message);\n\t\t}\n\n\t\tif (isVerbose) {\n\t\t\tlogIpcOutput(message, verboseInfo);\n\t\t}\n\t}\n\n\treturn ipcOutput;\n};\n\nexport const getBufferedIpcOutput = async (ipcOutputPromise, ipcOutput) => {\n\tawait Promise.allSettled([ipcOutputPromise]);\n\treturn ipcOutput;\n};\n","import {once} from 'node:events';\nimport {isStream as isNodeStream} from 'is-stream';\nimport {throwOnTimeout} from '../terminate/timeout.js';\nimport {throwOnCancel} from '../terminate/cancel.js';\nimport {throwOnGracefulCancel} from '../terminate/graceful.js';\nimport {isStandardStream} from '../utils/standard-stream.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {getBufferedData} from '../io/contents.js';\nimport {waitForIpcOutput, getBufferedIpcOutput} from '../ipc/buffer-messages.js';\nimport {sendIpcInput} from '../ipc/ipc-input.js';\nimport {waitForAllStream} from './all-async.js';\nimport {waitForStdioStreams} from './stdio.js';\nimport {waitForExit, waitForSuccessfulExit} from './exit-async.js';\nimport {waitForStream} from './wait-stream.js';\n\n// Retrieve result of subprocess: exit code, signal, error, streams (stdout/stderr/all)\nexport const waitForSubprocessResult = async ({\n\tsubprocess,\n\toptions: {\n\t\tencoding,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tlines,\n\t\ttimeoutDuration: timeout,\n\t\tcancelSignal,\n\t\tgracefulCancel,\n\t\tforceKillAfterDelay,\n\t\tstripFinalNewline,\n\t\tipc,\n\t\tipcInput,\n\t},\n\tcontext,\n\tverboseInfo,\n\tfileDescriptors,\n\toriginalStreams,\n\tonInternalError,\n\tcontroller,\n}) => {\n\tconst exitPromise = waitForExit(subprocess, context);\n\tconst streamInfo = {\n\t\toriginalStreams,\n\t\tfileDescriptors,\n\t\tsubprocess,\n\t\texitPromise,\n\t\tpropagating: false,\n\t};\n\n\tconst stdioPromises = waitForStdioStreams({\n\t\tsubprocess,\n\t\tencoding,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tlines,\n\t\tstripFinalNewline,\n\t\tverboseInfo,\n\t\tstreamInfo,\n\t});\n\tconst allPromise = waitForAllStream({\n\t\tsubprocess,\n\t\tencoding,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tlines,\n\t\tstripFinalNewline,\n\t\tverboseInfo,\n\t\tstreamInfo,\n\t});\n\tconst ipcOutput = [];\n\tconst ipcOutputPromise = waitForIpcOutput({\n\t\tsubprocess,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tipc,\n\t\tipcOutput,\n\t\tverboseInfo,\n\t});\n\tconst originalPromises = waitForOriginalStreams(originalStreams, subprocess, streamInfo);\n\tconst customStreamsEndPromises = waitForCustomStreamsEnd(fileDescriptors, streamInfo);\n\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tPromise.all([\n\t\t\t\t{},\n\t\t\t\twaitForSuccessfulExit(exitPromise),\n\t\t\t\tPromise.all(stdioPromises),\n\t\t\t\tallPromise,\n\t\t\t\tipcOutputPromise,\n\t\t\t\tsendIpcInput(subprocess, ipcInput),\n\t\t\t\t...originalPromises,\n\t\t\t\t...customStreamsEndPromises,\n\t\t\t]),\n\t\t\tonInternalError,\n\t\t\tthrowOnSubprocessError(subprocess, controller),\n\t\t\t...throwOnTimeout(subprocess, timeout, context, controller),\n\t\t\t...throwOnCancel({\n\t\t\t\tsubprocess,\n\t\t\t\tcancelSignal,\n\t\t\t\tgracefulCancel,\n\t\t\t\tcontext,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t\t...throwOnGracefulCancel({\n\t\t\t\tsubprocess,\n\t\t\t\tcancelSignal,\n\t\t\t\tgracefulCancel,\n\t\t\t\tforceKillAfterDelay,\n\t\t\t\tcontext,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t]);\n\t} catch (error) {\n\t\tcontext.terminationReason ??= 'other';\n\t\treturn Promise.all([\n\t\t\t{error},\n\t\t\texitPromise,\n\t\t\tPromise.all(stdioPromises.map(stdioPromise => getBufferedData(stdioPromise))),\n\t\t\tgetBufferedData(allPromise),\n\t\t\tgetBufferedIpcOutput(ipcOutputPromise, ipcOutput),\n\t\t\tPromise.allSettled(originalPromises),\n\t\t\tPromise.allSettled(customStreamsEndPromises),\n\t\t]);\n\t}\n};\n\n// Transforms replace `subprocess.std*`, which means they are not exposed to users.\n// However, we still want to wait for their completion.\nconst waitForOriginalStreams = (originalStreams, subprocess, streamInfo) =>\n\toriginalStreams.map((stream, fdNumber) => stream === subprocess.stdio[fdNumber]\n\t\t? undefined\n\t\t: waitForStream(stream, fdNumber, streamInfo));\n\n// Some `stdin`/`stdout`/`stderr` options create a stream, e.g. when passing a file path.\n// The `.pipe()` method automatically ends that stream when `subprocess` ends.\n// This makes sure we wait for the completion of those streams, in order to catch any error.\nconst waitForCustomStreamsEnd = (fileDescriptors, streamInfo) => fileDescriptors.flatMap(({stdioItems}, fdNumber) => stdioItems\n\t.filter(({value, stream = value}) => isNodeStream(stream, {checkOpen: false}) && !isStandardStream(stream))\n\t.map(({type, value, stream = value}) => waitForStream(stream, fdNumber, streamInfo, {\n\t\tisSameDirection: TRANSFORM_TYPES.has(type),\n\t\tstopOnExit: type === 'native',\n\t})));\n\n// Fails when the subprocess emits an `error` event\nconst throwOnSubprocessError = async (subprocess, {signal}) => {\n\tconst [error] = await once(subprocess, 'error', {signal});\n\tthrow error;\n};\n","import {createDeferred} from '../utils/deferred.js';\n\n// When using multiple `.readable()`/`.writable()`/`.duplex()`, `final` and `destroy` should wait for other streams\nexport const initializeConcurrentStreams = () => ({\n\treadableDestroy: new WeakMap(),\n\twritableFinal: new WeakMap(),\n\twritableDestroy: new WeakMap(),\n});\n\n// Each file descriptor + `waitName` has its own array of promises.\n// Each promise is a single `.readable()`/`.writable()`/`.duplex()` call.\nexport const addConcurrentStream = (concurrentStreams, stream, waitName) => {\n\tconst weakMap = concurrentStreams[waitName];\n\tif (!weakMap.has(stream)) {\n\t\tweakMap.set(stream, []);\n\t}\n\n\tconst promises = weakMap.get(stream);\n\tconst promise = createDeferred();\n\tpromises.push(promise);\n\tconst resolve = promise.resolve.bind(promise);\n\treturn {resolve, promises};\n};\n\n// Wait for other streams, but stop waiting when subprocess ends\nexport const waitForConcurrentStreams = async ({resolve, promises}, subprocess) => {\n\tresolve();\n\tconst [isSubprocessExit] = await Promise.race([\n\t\tPromise.allSettled([true, subprocess]),\n\t\tPromise.all([false, ...promises]),\n\t]);\n\treturn !isSubprocessExit;\n};\n","import {finished} from 'node:stream/promises';\nimport {isStreamAbort} from '../resolve/wait-stream.js';\n\nexport const safeWaitForSubprocessStdin = async subprocessStdin => {\n\tif (subprocessStdin === undefined) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait waitForSubprocessStdin(subprocessStdin);\n\t} catch {}\n};\n\nexport const safeWaitForSubprocessStdout = async subprocessStdout => {\n\tif (subprocessStdout === undefined) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait waitForSubprocessStdout(subprocessStdout);\n\t} catch {}\n};\n\nexport const waitForSubprocessStdin = async subprocessStdin => {\n\tawait finished(subprocessStdin, {cleanup: true, readable: false, writable: true});\n};\n\nexport const waitForSubprocessStdout = async subprocessStdout => {\n\tawait finished(subprocessStdout, {cleanup: true, readable: true, writable: false});\n};\n\n// When `readable` or `writable` aborts/errors, awaits the subprocess, for the reason mentioned above\nexport const waitForSubprocess = async (subprocess, error) => {\n\tawait subprocess;\n\tif (error) {\n\t\tthrow error;\n\t}\n};\n\nexport const destroyOtherStream = (stream, isOpen, error) => {\n\tif (error && !isStreamAbort(error)) {\n\t\tstream.destroy(error);\n\t} else if (isOpen) {\n\t\tstream.destroy();\n\t}\n};\n","import {Readable} from 'node:stream';\nimport {callbackify} from 'node:util';\nimport {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {getFromStream} from '../arguments/fd-options.js';\nimport {iterateOnSubprocessStream, DEFAULT_OBJECT_HIGH_WATER_MARK} from '../io/iterate.js';\nimport {createDeferred} from '../utils/deferred.js';\nimport {addConcurrentStream, waitForConcurrentStreams} from './concurrent.js';\nimport {\n\tsafeWaitForSubprocessStdin,\n\twaitForSubprocessStdout,\n\twaitForSubprocess,\n\tdestroyOtherStream,\n} from './shared.js';\n\n// Create a `Readable` stream that forwards from `stdout` and awaits the subprocess\nexport const createReadable = ({subprocess, concurrentStreams, encoding}, {from, binary: binaryOption = true, preserveNewlines = true} = {}) => {\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst {subprocessStdout, waitReadableDestroy} = getSubprocessStdout(subprocess, from, concurrentStreams);\n\tconst {readableEncoding, readableObjectMode, readableHighWaterMark} = getReadableOptions(subprocessStdout, binary);\n\tconst {read, onStdoutDataDone} = getReadableMethods({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\tconst readable = new Readable({\n\t\tread,\n\t\tdestroy: callbackify(onReadableDestroy.bind(undefined, {subprocessStdout, subprocess, waitReadableDestroy})),\n\t\thighWaterMark: readableHighWaterMark,\n\t\tobjectMode: readableObjectMode,\n\t\tencoding: readableEncoding,\n\t});\n\tonStdoutFinished({\n\t\tsubprocessStdout,\n\t\tonStdoutDataDone,\n\t\treadable,\n\t\tsubprocess,\n\t});\n\treturn readable;\n};\n\n// Retrieve `stdout` (or other stream depending on `from`)\nexport const getSubprocessStdout = (subprocess, from, concurrentStreams) => {\n\tconst subprocessStdout = getFromStream(subprocess, from);\n\tconst waitReadableDestroy = addConcurrentStream(concurrentStreams, subprocessStdout, 'readableDestroy');\n\treturn {subprocessStdout, waitReadableDestroy};\n};\n\nexport const getReadableOptions = ({readableEncoding, readableObjectMode, readableHighWaterMark}, binary) => binary\n\t? {readableEncoding, readableObjectMode, readableHighWaterMark}\n\t: {readableEncoding, readableObjectMode: true, readableHighWaterMark: DEFAULT_OBJECT_HIGH_WATER_MARK};\n\nexport const getReadableMethods = ({subprocessStdout, subprocess, binary, encoding, preserveNewlines}) => {\n\tconst onStdoutDataDone = createDeferred();\n\tconst onStdoutData = iterateOnSubprocessStream({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tshouldEncode: !binary,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\n\treturn {\n\t\tread() {\n\t\t\tonRead(this, onStdoutData, onStdoutDataDone);\n\t\t},\n\t\tonStdoutDataDone,\n\t};\n};\n\n// Forwards data from `stdout` to `readable`\nconst onRead = async (readable, onStdoutData, onStdoutDataDone) => {\n\ttry {\n\t\tconst {value, done} = await onStdoutData.next();\n\t\tif (done) {\n\t\t\tonStdoutDataDone.resolve();\n\t\t} else {\n\t\t\treadable.push(value);\n\t\t}\n\t} catch {}\n};\n\n// When `subprocess.stdout` ends/aborts/errors, do the same on `readable`.\n// Await the subprocess, for the same reason as above.\nexport const onStdoutFinished = async ({subprocessStdout, onStdoutDataDone, readable, subprocess, subprocessStdin}) => {\n\ttry {\n\t\tawait waitForSubprocessStdout(subprocessStdout);\n\t\tawait subprocess;\n\t\tawait safeWaitForSubprocessStdin(subprocessStdin);\n\t\tawait onStdoutDataDone;\n\n\t\tif (readable.readable) {\n\t\t\treadable.push(null);\n\t\t}\n\t} catch (error) {\n\t\tawait safeWaitForSubprocessStdin(subprocessStdin);\n\t\tdestroyOtherReadable(readable, error);\n\t}\n};\n\n// When `readable` aborts/errors, do the same on `subprocess.stdout`\nexport const onReadableDestroy = async ({subprocessStdout, subprocess, waitReadableDestroy}, error) => {\n\tif (await waitForConcurrentStreams(waitReadableDestroy, subprocess)) {\n\t\tdestroyOtherReadable(subprocessStdout, error);\n\t\tawait waitForSubprocess(subprocess, error);\n\t}\n};\n\nconst destroyOtherReadable = (stream, error) => {\n\tdestroyOtherStream(stream, stream.readable, error);\n};\n","import {Writable} from 'node:stream';\nimport {callbackify} from 'node:util';\nimport {getToStream} from '../arguments/fd-options.js';\nimport {addConcurrentStream, waitForConcurrentStreams} from './concurrent.js';\nimport {\n\tsafeWaitForSubprocessStdout,\n\twaitForSubprocessStdin,\n\twaitForSubprocess,\n\tdestroyOtherStream,\n} from './shared.js';\n\n// Create a `Writable` stream that forwards to `stdin` and awaits the subprocess\nexport const createWritable = ({subprocess, concurrentStreams}, {to} = {}) => {\n\tconst {subprocessStdin, waitWritableFinal, waitWritableDestroy} = getSubprocessStdin(subprocess, to, concurrentStreams);\n\tconst writable = new Writable({\n\t\t...getWritableMethods(subprocessStdin, subprocess, waitWritableFinal),\n\t\tdestroy: callbackify(onWritableDestroy.bind(undefined, {\n\t\t\tsubprocessStdin,\n\t\t\tsubprocess,\n\t\t\twaitWritableFinal,\n\t\t\twaitWritableDestroy,\n\t\t})),\n\t\thighWaterMark: subprocessStdin.writableHighWaterMark,\n\t\tobjectMode: subprocessStdin.writableObjectMode,\n\t});\n\tonStdinFinished(subprocessStdin, writable);\n\treturn writable;\n};\n\n// Retrieve `stdin` (or other stream depending on `to`)\nexport const getSubprocessStdin = (subprocess, to, concurrentStreams) => {\n\tconst subprocessStdin = getToStream(subprocess, to);\n\tconst waitWritableFinal = addConcurrentStream(concurrentStreams, subprocessStdin, 'writableFinal');\n\tconst waitWritableDestroy = addConcurrentStream(concurrentStreams, subprocessStdin, 'writableDestroy');\n\treturn {subprocessStdin, waitWritableFinal, waitWritableDestroy};\n};\n\nexport const getWritableMethods = (subprocessStdin, subprocess, waitWritableFinal) => ({\n\twrite: onWrite.bind(undefined, subprocessStdin),\n\tfinal: callbackify(onWritableFinal.bind(undefined, subprocessStdin, subprocess, waitWritableFinal)),\n});\n\n// Forwards data from `writable` to `stdin`\nconst onWrite = (subprocessStdin, chunk, encoding, done) => {\n\tif (subprocessStdin.write(chunk, encoding)) {\n\t\tdone();\n\t} else {\n\t\tsubprocessStdin.once('drain', done);\n\t}\n};\n\n// Ensures that the writable `final` and readable `end` events awaits the subprocess.\n// Like this, any subprocess failure is propagated as a stream `error` event, instead of being lost.\n// The user does not need to `await` the subprocess anymore, but now needs to await the stream completion or error.\n// When multiple writables are targeting the same stream, they wait for each other, unless the subprocess ends first.\nconst onWritableFinal = async (subprocessStdin, subprocess, waitWritableFinal) => {\n\tif (await waitForConcurrentStreams(waitWritableFinal, subprocess)) {\n\t\tif (subprocessStdin.writable) {\n\t\t\tsubprocessStdin.end();\n\t\t}\n\n\t\tawait subprocess;\n\t}\n};\n\n// When `subprocess.stdin` ends/aborts/errors, do the same on `writable`.\nexport const onStdinFinished = async (subprocessStdin, writable, subprocessStdout) => {\n\ttry {\n\t\tawait waitForSubprocessStdin(subprocessStdin);\n\t\tif (writable.writable) {\n\t\t\twritable.end();\n\t\t}\n\t} catch (error) {\n\t\tawait safeWaitForSubprocessStdout(subprocessStdout);\n\t\tdestroyOtherWritable(writable, error);\n\t}\n};\n\n// When `writable` aborts/errors, do the same on `subprocess.stdin`\nexport const onWritableDestroy = async ({subprocessStdin, subprocess, waitWritableFinal, waitWritableDestroy}, error) => {\n\tawait waitForConcurrentStreams(waitWritableFinal, subprocess);\n\tif (await waitForConcurrentStreams(waitWritableDestroy, subprocess)) {\n\t\tdestroyOtherWritable(subprocessStdin, error);\n\t\tawait waitForSubprocess(subprocess, error);\n\t}\n};\n\nconst destroyOtherWritable = (stream, error) => {\n\tdestroyOtherStream(stream, stream.writable, error);\n};\n","import {Duplex} from 'node:stream';\nimport {callbackify} from 'node:util';\nimport {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {\n\tgetSubprocessStdout,\n\tgetReadableOptions,\n\tgetReadableMethods,\n\tonStdoutFinished,\n\tonReadableDestroy,\n} from './readable.js';\nimport {\n\tgetSubprocessStdin,\n\tgetWritableMethods,\n\tonStdinFinished,\n\tonWritableDestroy,\n} from './writable.js';\n\n// Create a `Duplex` stream combining both `subprocess.readable()` and `subprocess.writable()`\nexport const createDuplex = ({subprocess, concurrentStreams, encoding}, {from, to, binary: binaryOption = true, preserveNewlines = true} = {}) => {\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst {subprocessStdout, waitReadableDestroy} = getSubprocessStdout(subprocess, from, concurrentStreams);\n\tconst {subprocessStdin, waitWritableFinal, waitWritableDestroy} = getSubprocessStdin(subprocess, to, concurrentStreams);\n\tconst {readableEncoding, readableObjectMode, readableHighWaterMark} = getReadableOptions(subprocessStdout, binary);\n\tconst {read, onStdoutDataDone} = getReadableMethods({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\tconst duplex = new Duplex({\n\t\tread,\n\t\t...getWritableMethods(subprocessStdin, subprocess, waitWritableFinal),\n\t\tdestroy: callbackify(onDuplexDestroy.bind(undefined, {\n\t\t\tsubprocessStdout,\n\t\t\tsubprocessStdin,\n\t\t\tsubprocess,\n\t\t\twaitReadableDestroy,\n\t\t\twaitWritableFinal,\n\t\t\twaitWritableDestroy,\n\t\t})),\n\t\treadableHighWaterMark,\n\t\twritableHighWaterMark: subprocessStdin.writableHighWaterMark,\n\t\treadableObjectMode,\n\t\twritableObjectMode: subprocessStdin.writableObjectMode,\n\t\tencoding: readableEncoding,\n\t});\n\tonStdoutFinished({\n\t\tsubprocessStdout,\n\t\tonStdoutDataDone,\n\t\treadable: duplex,\n\t\tsubprocess,\n\t\tsubprocessStdin,\n\t});\n\tonStdinFinished(subprocessStdin, duplex, subprocessStdout);\n\treturn duplex;\n};\n\nconst onDuplexDestroy = async ({subprocessStdout, subprocessStdin, subprocess, waitReadableDestroy, waitWritableFinal, waitWritableDestroy}, error) => {\n\tawait Promise.all([\n\t\tonReadableDestroy({subprocessStdout, subprocess, waitReadableDestroy}, error),\n\t\tonWritableDestroy({\n\t\t\tsubprocessStdin,\n\t\t\tsubprocess,\n\t\t\twaitWritableFinal,\n\t\t\twaitWritableDestroy,\n\t\t}, error),\n\t]);\n};\n","import {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {getFromStream} from '../arguments/fd-options.js';\nimport {iterateOnSubprocessStream} from '../io/iterate.js';\n\n// Convert the subprocess to an async iterable\nexport const createIterable = (subprocess, encoding, {\n\tfrom,\n\tbinary: binaryOption = false,\n\tpreserveNewlines = false,\n} = {}) => {\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst subprocessStdout = getFromStream(subprocess, from);\n\tconst onStdoutData = iterateOnSubprocessStream({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tshouldEncode: true,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\treturn iterateOnStdoutData(onStdoutData, subprocessStdout, subprocess);\n};\n\nconst iterateOnStdoutData = async function * (onStdoutData, subprocessStdout, subprocess) {\n\ttry {\n\t\tyield * onStdoutData;\n\t} finally {\n\t\tif (subprocessStdout.readable) {\n\t\t\tsubprocessStdout.destroy();\n\t\t}\n\n\t\tawait subprocess;\n\t}\n};\n","import {initializeConcurrentStreams} from './concurrent.js';\nimport {createReadable} from './readable.js';\nimport {createWritable} from './writable.js';\nimport {createDuplex} from './duplex.js';\nimport {createIterable} from './iterable.js';\n\n// Add methods to convert the subprocess to a stream or iterable\nexport const addConvertedStreams = (subprocess, {encoding}) => {\n\tconst concurrentStreams = initializeConcurrentStreams();\n\tsubprocess.readable = createReadable.bind(undefined, {subprocess, concurrentStreams, encoding});\n\tsubprocess.writable = createWritable.bind(undefined, {subprocess, concurrentStreams});\n\tsubprocess.duplex = createDuplex.bind(undefined, {subprocess, concurrentStreams, encoding});\n\tsubprocess.iterable = createIterable.bind(undefined, subprocess, encoding);\n\tsubprocess[Symbol.asyncIterator] = createIterable.bind(undefined, subprocess, encoding, {});\n};\n","// The return value is a mixin of `subprocess` and `Promise`\nexport const mergePromise = (subprocess, promise) => {\n\tfor (const [property, descriptor] of descriptors) {\n\t\tconst value = descriptor.value.bind(promise);\n\t\tReflect.defineProperty(subprocess, property, {...descriptor, value});\n\t}\n};\n\n// eslint-disable-next-line unicorn/prefer-top-level-await\nconst nativePromisePrototype = (async () => {})().constructor.prototype;\n\nconst descriptors = ['then', 'catch', 'finally'].map(property => [\n\tproperty,\n\tReflect.getOwnPropertyDescriptor(nativePromisePrototype, property),\n]);\n","import {setMaxListeners} from 'node:events';\nimport {spawn} from 'node:child_process';\nimport {MaxBufferError} from 'get-stream';\nimport {handleCommand} from '../arguments/command.js';\nimport {normalizeOptions} from '../arguments/options.js';\nimport {SUBPROCESS_OPTIONS} from '../arguments/fd-options.js';\nimport {addIpcMethods} from '../ipc/methods.js';\nimport {makeError, makeSuccessResult} from '../return/result.js';\nimport {handleResult} from '../return/reject.js';\nimport {handleEarlyError} from '../return/early-error.js';\nimport {handleStdioAsync} from '../stdio/handle-async.js';\nimport {stripNewline} from '../io/strip-newline.js';\nimport {pipeOutputAsync} from '../io/output-async.js';\nimport {subprocessKill} from '../terminate/kill.js';\nimport {cleanupOnExit} from '../terminate/cleanup.js';\nimport {pipeToSubprocess} from '../pipe/setup.js';\nimport {makeAllStream} from '../resolve/all-async.js';\nimport {waitForSubprocessResult} from '../resolve/wait-subprocess.js';\nimport {addConvertedStreams} from '../convert/add.js';\nimport {createDeferred} from '../utils/deferred.js';\nimport {mergePromise} from './promise.js';\n\n// Main shared logic for all async methods: `execa()`, `$`, `execaNode()`\nexport const execaCoreAsync = (rawFile, rawArguments, rawOptions, createNested) => {\n\tconst {file, commandArguments, command, escapedCommand, startTime, verboseInfo, options, fileDescriptors} = handleAsyncArguments(rawFile, rawArguments, rawOptions);\n\tconst {subprocess, promise} = spawnSubprocessAsync({\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tfileDescriptors,\n\t});\n\tsubprocess.pipe = pipeToSubprocess.bind(undefined, {\n\t\tsource: subprocess,\n\t\tsourcePromise: promise,\n\t\tboundOptions: {},\n\t\tcreateNested,\n\t});\n\tmergePromise(subprocess, promise);\n\tSUBPROCESS_OPTIONS.set(subprocess, {options, fileDescriptors});\n\treturn subprocess;\n};\n\n// Compute arguments to pass to `child_process.spawn()`\nconst handleAsyncArguments = (rawFile, rawArguments, rawOptions) => {\n\tconst {command, escapedCommand, startTime, verboseInfo} = handleCommand(rawFile, rawArguments, rawOptions);\n\tconst {file, commandArguments, options: normalizedOptions} = normalizeOptions(rawFile, rawArguments, rawOptions);\n\tconst options = handleAsyncOptions(normalizedOptions);\n\tconst fileDescriptors = handleStdioAsync(options, verboseInfo);\n\treturn {\n\t\tfile,\n\t\tcommandArguments,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\toptions,\n\t\tfileDescriptors,\n\t};\n};\n\n// Options normalization logic specific to async methods.\n// Prevent passing the `timeout` option directly to `child_process.spawn()`.\nconst handleAsyncOptions = ({timeout, signal, ...options}) => {\n\tif (signal !== undefined) {\n\t\tthrow new TypeError('The \"signal\" option has been renamed to \"cancelSignal\" instead.');\n\t}\n\n\treturn {...options, timeoutDuration: timeout};\n};\n\nconst spawnSubprocessAsync = ({file, commandArguments, options, startTime, verboseInfo, command, escapedCommand, fileDescriptors}) => {\n\tlet subprocess;\n\ttry {\n\t\tsubprocess = spawn(file, commandArguments, options);\n\t} catch (error) {\n\t\treturn handleEarlyError({\n\t\t\terror,\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tfileDescriptors,\n\t\t\toptions,\n\t\t\tstartTime,\n\t\t\tverboseInfo,\n\t\t});\n\t}\n\n\tconst controller = new AbortController();\n\tsetMaxListeners(Number.POSITIVE_INFINITY, controller.signal);\n\n\tconst originalStreams = [...subprocess.stdio];\n\tpipeOutputAsync(subprocess, fileDescriptors, controller);\n\tcleanupOnExit(subprocess, options, controller);\n\n\tconst context = {};\n\tconst onInternalError = createDeferred();\n\tsubprocess.kill = subprocessKill.bind(undefined, {\n\t\tkill: subprocess.kill.bind(subprocess),\n\t\toptions,\n\t\tonInternalError,\n\t\tcontext,\n\t\tcontroller,\n\t});\n\tsubprocess.all = makeAllStream(subprocess, options);\n\taddConvertedStreams(subprocess, options);\n\taddIpcMethods(subprocess, options);\n\n\tconst promise = handlePromise({\n\t\tsubprocess,\n\t\toptions,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\tfileDescriptors,\n\t\toriginalStreams,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tcontext,\n\t\tonInternalError,\n\t\tcontroller,\n\t});\n\treturn {subprocess, promise};\n};\n\n// Asynchronous logic, as opposed to the previous logic which can be run synchronously, i.e. can be returned to user right away\nconst handlePromise = async ({subprocess, options, startTime, verboseInfo, fileDescriptors, originalStreams, command, escapedCommand, context, onInternalError, controller}) => {\n\tconst [\n\t\terrorInfo,\n\t\t[exitCode, signal],\n\t\tstdioResults,\n\t\tallResult,\n\t\tipcOutput,\n\t] = await waitForSubprocessResult({\n\t\tsubprocess,\n\t\toptions,\n\t\tcontext,\n\t\tverboseInfo,\n\t\tfileDescriptors,\n\t\toriginalStreams,\n\t\tonInternalError,\n\t\tcontroller,\n\t});\n\tcontroller.abort();\n\tonInternalError.resolve();\n\n\tconst stdio = stdioResults.map((stdioResult, fdNumber) => stripNewline(stdioResult, options, fdNumber));\n\tconst all = stripNewline(allResult, options, 'all');\n\tconst result = getAsyncResult({\n\t\terrorInfo,\n\t\texitCode,\n\t\tsignal,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\tcontext,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t});\n\treturn handleResult(result, verboseInfo, options);\n};\n\nconst getAsyncResult = ({errorInfo, exitCode, signal, stdio, all, ipcOutput, context, options, command, escapedCommand, startTime}) => 'error' in errorInfo\n\t? makeError({\n\t\terror: errorInfo.error,\n\t\tcommand,\n\t\tescapedCommand,\n\t\ttimedOut: context.terminationReason === 'timeout',\n\t\tisCanceled: context.terminationReason === 'cancel' || context.terminationReason === 'gracefulCancel',\n\t\tisGracefullyCanceled: context.terminationReason === 'gracefulCancel',\n\t\tisMaxBuffer: errorInfo.error instanceof MaxBufferError,\n\t\tisForcefullyTerminated: context.isForcefullyTerminated,\n\t\texitCode,\n\t\tsignal,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\toptions,\n\t\tstartTime,\n\t\tisSync: false,\n\t})\n\t: makeSuccessResult({\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\toptions,\n\t\tstartTime,\n\t});\n","import isPlainObject from 'is-plain-obj';\nimport {FD_SPECIFIC_OPTIONS} from '../arguments/specific.js';\n\n// Deep merge specific options like `env`. Shallow merge the other ones.\nexport const mergeOptions = (boundOptions, options) => {\n\tconst newOptions = Object.fromEntries(\n\t\tObject.entries(options).map(([optionName, optionValue]) => [\n\t\t\toptionName,\n\t\t\tmergeOption(optionName, boundOptions[optionName], optionValue),\n\t\t]),\n\t);\n\treturn {...boundOptions, ...newOptions};\n};\n\nconst mergeOption = (optionName, boundOptionValue, optionValue) => {\n\tif (DEEP_OPTIONS.has(optionName) && isPlainObject(boundOptionValue) && isPlainObject(optionValue)) {\n\t\treturn {...boundOptionValue, ...optionValue};\n\t}\n\n\treturn optionValue;\n};\n\nconst DEEP_OPTIONS = new Set(['env', ...FD_SPECIFIC_OPTIONS]);\n","import isPlainObject from 'is-plain-obj';\nimport {normalizeParameters} from './parameters.js';\nimport {isTemplateString, parseTemplates} from './template.js';\nimport {execaCoreSync} from './main-sync.js';\nimport {execaCoreAsync} from './main-async.js';\nimport {mergeOptions} from './bind.js';\n\n// Wraps every exported methods to provide the following features:\n//  - template string syntax: execa`command argument`\n//  - options binding: boundExeca = execa(options)\n//  - optional argument/options: execa(file), execa(file, args), execa(file, options), execa(file, args, options)\n// `mapArguments()` and `setBoundExeca()` allows for method-specific logic.\nexport const createExeca = (mapArguments, boundOptions, deepOptions, setBoundExeca) => {\n\tconst createNested = (mapArguments, boundOptions, setBoundExeca) => createExeca(mapArguments, boundOptions, deepOptions, setBoundExeca);\n\tconst boundExeca = (...execaArguments) => callBoundExeca({\n\t\tmapArguments,\n\t\tdeepOptions,\n\t\tboundOptions,\n\t\tsetBoundExeca,\n\t\tcreateNested,\n\t}, ...execaArguments);\n\n\tif (setBoundExeca !== undefined) {\n\t\tsetBoundExeca(boundExeca, createNested, boundOptions);\n\t}\n\n\treturn boundExeca;\n};\n\nconst callBoundExeca = ({mapArguments, deepOptions = {}, boundOptions = {}, setBoundExeca, createNested}, firstArgument, ...nextArguments) => {\n\tif (isPlainObject(firstArgument)) {\n\t\treturn createNested(mapArguments, mergeOptions(boundOptions, firstArgument), setBoundExeca);\n\t}\n\n\tconst {file, commandArguments, options, isSync} = parseArguments({\n\t\tmapArguments,\n\t\tfirstArgument,\n\t\tnextArguments,\n\t\tdeepOptions,\n\t\tboundOptions,\n\t});\n\treturn isSync\n\t\t? execaCoreSync(file, commandArguments, options)\n\t\t: execaCoreAsync(file, commandArguments, options, createNested);\n};\n\nconst parseArguments = ({mapArguments, firstArgument, nextArguments, deepOptions, boundOptions}) => {\n\tconst callArguments = isTemplateString(firstArgument)\n\t\t? parseTemplates(firstArgument, nextArguments)\n\t\t: [firstArgument, ...nextArguments];\n\tconst [initialFile, initialArguments, initialOptions] = normalizeParameters(...callArguments);\n\tconst mergedOptions = mergeOptions(mergeOptions(deepOptions, boundOptions), initialOptions);\n\tconst {\n\t\tfile = initialFile,\n\t\tcommandArguments = initialArguments,\n\t\toptions = mergedOptions,\n\t\tisSync = false,\n\t} = mapArguments({file: initialFile, commandArguments: initialArguments, options: mergedOptions});\n\treturn {\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tisSync,\n\t};\n};\n","// Main logic for `execaCommand()`\nexport const mapCommandAsync = ({file, commandArguments}) => parseCommand(file, commandArguments);\n\n// Main logic for `execaCommandSync()`\nexport const mapCommandSync = ({file, commandArguments}) => ({...parseCommand(file, commandArguments), isSync: true});\n\n// Convert `execaCommand(command)` into `execa(file, ...commandArguments)`\nconst parseCommand = (command, unusedArguments) => {\n\tif (unusedArguments.length > 0) {\n\t\tthrow new TypeError(`The command and its arguments must be passed as a single string: ${command} ${unusedArguments}.`);\n\t}\n\n\tconst [file, ...commandArguments] = parseCommandString(command);\n\treturn {file, commandArguments};\n};\n\n// Convert `command` string into an array of file or arguments to pass to $`${...fileOrCommandArguments}`\nexport const parseCommandString = command => {\n\tif (typeof command !== 'string') {\n\t\tthrow new TypeError(`The command must be a string: ${String(command)}.`);\n\t}\n\n\tconst trimmedCommand = command.trim();\n\tif (trimmedCommand === '') {\n\t\treturn [];\n\t}\n\n\tconst tokens = [];\n\tfor (const token of trimmedCommand.split(SPACES_REGEXP)) {\n\t\t// Allow spaces to be escaped by a backslash if not meant as a delimiter\n\t\tconst previousToken = tokens.at(-1);\n\t\tif (previousToken && previousToken.endsWith('\\\\')) {\n\t\t\t// Merge previous token with current one\n\t\t\ttokens[tokens.length - 1] = `${previousToken.slice(0, -1)} ${token}`;\n\t\t} else {\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\n\treturn tokens;\n};\n\nconst SPACES_REGEXP = / +/g;\n","// Sets `$.sync` and `$.s`\nexport const setScriptSync = (boundExeca, createNested, boundOptions) => {\n\tboundExeca.sync = createNested(mapScriptSync, boundOptions);\n\tboundExeca.s = boundExeca.sync;\n};\n\n// Main logic for `$`\nexport const mapScriptAsync = ({options}) => getScriptOptions(options);\n\n// Main logic for `$.sync`\nconst mapScriptSync = ({options}) => ({...getScriptOptions(options), isSync: true});\n\n// `$` is like `execa` but with script-friendly options: `{stdin: 'inherit', preferLocal: true}`\nconst getScriptOptions = options => ({options: {...getScriptStdinOption(options), ...options}});\n\nconst getScriptStdinOption = ({input, inputFile, stdio}) => input === undefined && inputFile === undefined && stdio === undefined\n\t? {stdin: 'inherit'}\n\t: {};\n\n// When using $(...).pipe(...), most script-friendly options should apply to both commands.\n// However, some options (like `stdin: 'inherit'`) would create issues with piping, i.e. cannot be deep.\nexport const deepScriptOptions = {preferLocal: true};\n","import {createExeca} from './lib/methods/create.js';\nimport {mapCommandAsync, mapCommandSync} from './lib/methods/command.js';\nimport {mapNode} from './lib/methods/node.js';\nimport {mapScriptAsync, setScriptSync, deepScriptOptions} from './lib/methods/script.js';\nimport {getIpcExport} from './lib/ipc/methods.js';\n\nexport {parseCommandString} from './lib/methods/command.js';\nexport {ExecaError, ExecaSyncError} from './lib/return/final-error.js';\n\nexport const execa = createExeca(() => ({}));\nexport const execaSync = createExeca(() => ({isSync: true}));\nexport const execaCommand = createExeca(mapCommandAsync);\nexport const execaCommandSync = createExeca(mapCommandSync);\nexport const execaNode = createExeca(mapNode);\nexport const $ = createExeca(mapScriptAsync, {}, deepScriptOptions, setScriptSync);\n\nconst {\n\tsendMessage,\n\tgetOneMessage,\n\tgetEachMessage,\n\tgetCancelSignal,\n} = getIpcExport();\nexport {\n\tsendMessage,\n\tgetOneMessage,\n\tgetEachMessage,\n\tgetCancelSignal,\n};\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { execa as execaFn } from \"execa\"\nimport type { Infra } from \"./toEcosystem\"\nimport type { Url } from \"./utils\" // getFreePort removed\nimport { getPackageRoot } from \"./utils\"\n\nexport type MeeNodeParameters = {\n  infras: Infra[]\n}\n\nexport type MeeNode = Awaited<ReturnType<typeof toMeeNode>>\n\nexport const toMeeNode = async (parameters: MeeNodeParameters) => {\n  const { infras } = parameters\n\n  const hostPort = 3000\n  const host = \"localhost\"\n  const url: Url = `http://${host}:${hostPort}`\n\n  console.log(\n    `MEE Node using package docker-compose.yml on port: ${hostPort}`\n  )\n\n  const packageRoot = getPackageRoot()\n  const dockerComposeFilePath = path.join(packageRoot, \"docker-compose.yml\")\n\n  if (!fs.existsSync(dockerComposeFilePath)) {\n    throw new Error(\n      `Package docker-compose.yml not found at ${dockerComposeFilePath}.`\n    )\n  }\n\n  const projectName = `meenode-project-root-instance`\n\n  // --- Paths to bundled assets within THIS @biconomy/ecosystem package ---\n  // Assumes this file (toMeeNode.js after compilation) is in <package_root>/dist/\n  const packageDistDir = path.dirname(fileURLToPath(import.meta.url))\n\n  const bundledDuplicateScriptPath = path.resolve(\n    packageDistDir,\n    \"scripts\",\n    \"duplicate-chain.js\"\n  )\n  const bundledTemplatesDir = path.resolve(\n    packageDistDir,\n    \"templates\",\n    \"chains-testnet\"\n  )\n  // --- End of paths for bundled assets ---\n\n  // Output directory for generated chain configs in the user's project\n  const userChainsTestnetDir = path.join(\n    packageRoot,\n    \"chains-testnet\"\n  )\n\n  console.log(\n    `Attempting to stop/remove any existing MEE Node services for project ${projectName} using root docker-compose.yml...`\n  )\n  const initialDownArgs = [\n    \"-f\",\n    dockerComposeFilePath,\n    \"-p\",\n    projectName,\n    \"down\",\n    \"-v\"\n  ]\n  const spawnEnv = Object.entries(process.env)\n    .filter(([, value]) => value !== undefined)\n    .reduce(\n      (obj, [key, value]) => {\n        obj[key] = value!\n        return obj\n      },\n      {} as Record<string, string>\n    )\n  try {\n    const initialDownResult = await execaFn(\n      \"docker\",\n      [\"compose\", ...initialDownArgs],\n      {\n        cwd: packageRoot,\n        stdio: [\"inherit\", \"inherit\", \"pipe\"],\n        env: spawnEnv\n      }\n    )\n    if (initialDownResult.stderr && initialDownResult.exitCode === 0) {\n      console.log(\n        `Initial 'docker compose down' stderr (on success): ${initialDownResult.stderr}`\n      )\n    } else if (initialDownResult.exitCode !== 0) {\n      console.warn(\n        `Initial 'docker compose down' for ${projectName} exited with code ${initialDownResult.exitCode}. Stderr: ${initialDownResult.stderr}`\n      )\n    }\n  } catch (error: any) {\n    console.warn(\n      `Warning during initial 'docker compose down' for ${projectName}: ${error.message}`\n    )\n    if (error.stderr)\n      console.warn(\n        `Initial 'docker compose down' stderr (on error): ${error.stderr}`\n      )\n  }\n\n  const essentialUserFiles = [\"84532.json\", \"1.json\"]\n  console.log(\n    `Cleaning up user chain configurations in ${userChainsTestnetDir}, preserving ${essentialUserFiles.join(\", \")}...`\n  )\n  try {\n    if (!fs.existsSync(userChainsTestnetDir)) {\n      await fs.promises.mkdir(userChainsTestnetDir, { recursive: true })\n      console.log(`Created user directory ${userChainsTestnetDir}`)\n    } else {\n      const files = await fs.promises.readdir(userChainsTestnetDir)\n      for (const file of files) {\n        if (file.endsWith(\".json\") && !essentialUserFiles.includes(file)) {\n          await fs.promises.unlink(path.join(userChainsTestnetDir, file))\n        }\n      }\n    }\n  } catch (err) {\n    console.warn(\n      `Warning: Could not clean/ensure user directory ${userChainsTestnetDir}:`,\n      err\n    )\n  }\n\n  if (!fs.existsSync(bundledDuplicateScriptPath)) {\n    throw new Error(\n      `Packaged script duplicate-chain.js not found at ${bundledDuplicateScriptPath}. Ensure @biconomy/ecosystem is built correctly and script is in dist/scripts/.`\n    )\n  }\n  if (\n    !fs.existsSync(bundledTemplatesDir) ||\n    !fs.existsSync(path.join(bundledTemplatesDir, \"84532.json\"))\n  ) {\n    throw new Error(\n      `Packaged template directory or 84532.json not found at ${bundledTemplatesDir}. Ensure @biconomy/ecosystem is built correctly and templates are in dist/templates/chains-testnet/.`\n    )\n  }\n\n  console.log(\n    `Generating chain configuration files using script: ${bundledDuplicateScriptPath}`\n  )\n  for (const infra of infras) {\n    const chainId = infra.network.chainId\n    try {\n      const result = await execaFn(\n        \"node\",\n        [\n          bundledDuplicateScriptPath,\n          `--chainId=${chainId}`,\n          `--templateDir=${bundledTemplatesDir}`,\n          `--outputDir=${userChainsTestnetDir}`\n        ],\n        {\n          stdio: [\"pipe\", \"pipe\", \"pipe\"]\n        }\n      )\n      if (result.stderr)\n        console.warn(\n          `duplicate-chain.js for chainId ${chainId} stderr:`,\n          result.stderr\n        )\n    } catch (error: any) {\n      console.error(\n        `Error running duplicate-chain.js for chainId ${chainId}: ${error.message}`\n      )\n      if (error.stderr)\n        console.error(`duplicate-chain.js critical stderr: ${error.stderr}`)\n      throw new Error(\n        `Failed to execute duplicate-chain.js for chainId ${chainId}. Error: ${error.message}`\n      )\n    }\n  }\n\n  const composeUpArgs = [\n    \"-f\",\n    dockerComposeFilePath,\n    \"-p\",\n    projectName,\n    \"up\",\n    \"--remove-orphans\",\n    \"-d\"\n  ]\n\n  console.log(\n    `Starting MEE Node with project ${projectName} on port ${hostPort} using root docker-compose.yml... Cmd: docker compose ${composeUpArgs.join(\" \")}`\n  )\n  try {\n    await execaFn(\"docker\", [\"compose\", ...composeUpArgs], {\n      cwd: packageRoot,\n      stdio: [\"inherit\", \"inherit\", \"pipe\"],\n      env: spawnEnv\n    })\n    console.log(\n      `MEE Node (project ${projectName}) services starting command dispatched.`\n    )\n\n    const readinessUrl = `${url}/v3/info`\n    const maxRetries = 30\n    let retries = 0\n    let meeNodeReady = false\n    console.log(`Waiting for MEE Node to be ready at ${readinessUrl}...`)\n    while (retries < maxRetries) {\n      try {\n        const response = await fetch(readinessUrl)\n        if (response.ok) {\n          meeNodeReady = true\n          console.log(\"MEE Node is ready.\")\n          break\n        }\n      } catch (e: any) {\n        /* Ignore and retry */\n      }\n      retries++\n      await new Promise((resolve) => setTimeout(resolve, 2000))\n    }\n\n    if (!meeNodeReady) {\n      console.error(\n        `MEE Node at ${readinessUrl} did not become ready after ${maxRetries * 2} seconds.`\n      )\n      try {\n        console.error(\"Fetching MEE Node logs for diagnostics...\")\n        await execaFn(\n          \"docker\",\n          [\n            \"compose\",\n            \"-f\",\n            dockerComposeFilePath,\n            \"-p\",\n            projectName,\n            \"logs\",\n            \"--tail=100\",\n            \"node\"\n          ],\n          {\n            cwd: packageRoot,\n            stdio: \"inherit\"\n          }\n        )\n      } catch (logError) {\n        console.error(\"Failed to fetch MEE Node logs.\", logError)\n      }\n      throw new Error(`MEE Node at ${readinessUrl} did not become ready.`)\n    }\n  } catch (error: any) {\n    const stderrContent = error.stderr || \"No stderr output captured.\"\n    const errorMessage = `docker compose up command for project ${projectName} failed (exit code ${error.exitCode || \"unknown\"}). Stderr: ${stderrContent}`\n    console.error(errorMessage)\n    throw new Error(errorMessage)\n  }\n\n  console.log(`MEE Node (project ${projectName}) running on ${url}.`)\n  console.log(\n    `Logs: docker compose -f ${dockerComposeFilePath} -p ${projectName} logs -f --tail=50`\n  )\n\n  return {\n    chainIds: infras.map((infra) => infra.network.chainId),\n    url,\n    projectName,\n    meeDeploymentDir: packageRoot,\n    async stop() {\n      console.log(\n        `Stopping MEE Node docker compose project ${projectName} using root docker-compose.yml...`\n      )\n      const downArgs = [\n        \"-f\",\n        dockerComposeFilePath,\n        \"-p\",\n        projectName,\n        \"down\",\n        \"-v\"\n      ]\n      try {\n        const downResult = await execaFn(\"docker\", [\"compose\", ...downArgs], {\n          cwd: packageRoot,\n          stdio: [\"inherit\", \"inherit\", \"pipe\"],\n          env: spawnEnv\n        })\n        if (downResult.stderr && downResult.exitCode === 0) {\n          console.warn(\n            `docker compose down for ${projectName} stderr (on success): ${downResult.stderr}`\n          )\n        }\n        console.log(`MEE Node project ${projectName} stopped successfully.`)\n      } catch (error: any) {\n        const stderrContent = error.stderr || \"No stderr output captured.\"\n        console.error(\n          `Error stopping ${projectName} (exit code ${error.exitCode || \"unknown\"}). Stderr: ${stderrContent}`\n        )\n      }\n    }\n  }\n}\n","import { portNumbers } from \"get-port\"\n// @ts-ignore\nimport { anvil } from \"prool/instances\"\nimport type { Chain, Hex } from \"viem\"\nimport { getFreePort, getFundedAccount } from \"./utils\"\n\nexport type NetworkArgs = {\n  rpcPort?: number\n  rpcUrl?: string\n  chainId?: string\n  name?: string\n  privateKey?: Hex\n  forkUrl?: string\n}\nexport type Network = Awaited<ReturnType<typeof toNetwork>>\nexport const toNetwork = async (parameters?: NetworkArgs) => {\n  const gotPort = await getFreePort(5500, 5989)\n\n  const {\n    rpcPort = gotPort,\n    rpcUrl = `http://127.0.0.1:${rpcPort}`,\n    chainId = String(rpcPort),\n    name = `chain-${chainId}`,\n    privateKey = getFundedAccount().privateKey,\n    forkUrl = undefined\n  } = parameters ?? {}\n\n  const chain: Chain = {\n    id: Number(chainId),\n    name: `Chain ${chainId}`,\n    nativeCurrency: {\n      name: \"Ether\",\n      symbol: \"ETH\",\n      decimals: 18\n    },\n    rpcUrls: {\n      default: {\n        http: [rpcUrl]\n      }\n    }\n  }\n\n  const instance = anvil({\n    hardfork: \"Prague\",\n    chainId: rpcPort,\n    port: rpcPort,\n    codeSizeLimit: 1000000000000,\n    allowOrigin: \"*\",\n    forkUrl\n  })\n\n  await instance.start()\n\n  instance.on(\"stderr\", console.error)\n\n  return {\n    instance,\n    chain,\n    rpcUrl,\n    rpcPort,\n    chainId,\n    name,\n    privateKey\n  }\n}\n","import { deployContracts } from \"./deploy/deployContracts\"\nimport { fundAccounts } from \"./deploy/fundAccounts\"\nimport { type Bundler, toBundler } from \"./toBundler\"\nimport { type MeeNode, toMeeNode } from \"./toMeeNode\"\nimport { type Network, toNetwork } from \"./toNetwork\"\nimport { type Clients, type Url, toClients } from \"./utils\"\n\nexport type ToEcosystemParameters = {\n  chainLength?: number\n  forkUrl?: string\n  withMee?: boolean\n}\n\nexport type Infra = { network: Network; bundler: Bundler }\n\nexport type Ecosystem = {\n  meeNode?: MeeNode\n  infras: Infra[]\n  clients: Clients[]\n}\n\nexport const toEcosystem = async (\n  parameters?: ToEcosystemParameters\n): Promise<Ecosystem> => {\n  const { chainLength = 1, forkUrl, withMee = false } = parameters ?? {}\n  const infras = await Promise.all(\n    Array.from({ length: chainLength }, async () => {\n      const network = await toNetwork({ forkUrl })\n      await fundAccounts(network)\n      await deployContracts(network)\n      const bundler = await toBundler(network)\n      return { network, bundler }\n    })\n  )\n\n  const clients = await Promise.all(\n    infras.map(async (infra) =>\n      toClients({\n        rpcUrl: infra.network.rpcUrl,\n        chain: infra.network.chain\n      })\n    )\n  )\n\n  const result: Ecosystem = {\n    meeNode: withMee ? await toMeeNode({ infras }) : undefined,\n    infras,\n    clients\n  }\n\n  return result\n}\n"]}