From 68320d6b417da02ee3cc8c21157f217b7aecd7a1 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 12:46:40 +0900 Subject: [PATCH] Gateway methods --- .../src/abi/GatewayEVM.sol/GatewayEVM.json | 1 + .../src/abi/GatewayZEVM.sol/GatewayZEVM.json | 1 + packages/tasks/src/evmCall.ts | 78 ++++++++++++ packages/tasks/src/evmDeposit.ts | 100 +++++++++++++++ packages/tasks/src/evmDepositAndCall.ts | 117 ++++++++++++++++++ packages/tasks/src/index.ts | 5 + packages/tasks/src/zetachainCall.ts | 114 +++++++++++++++++ packages/tasks/src/zetachainWithdraw.ts | 116 +++++++++++++++++ 8 files changed, 532 insertions(+) create mode 100644 packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json create mode 100644 packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json create mode 100644 packages/tasks/src/evmCall.ts create mode 100644 packages/tasks/src/evmDeposit.ts create mode 100644 packages/tasks/src/evmDepositAndCall.ts create mode 100644 packages/tasks/src/zetachainCall.ts create mode 100644 packages/tasks/src/zetachainWithdraw.ts diff --git a/packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json b/packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json new file mode 100644 index 00000000..69f48b46 --- /dev/null +++ b/packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"ASSET_HANDLER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PAUSER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TSS_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"call","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"custody","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"asset","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"asset","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"execute","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"function","name":"executeRevert","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeWithERC20","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"tssAddress_","type":"address","internalType":"address"},{"name":"zetaToken_","type":"address","internalType":"address"},{"name":"admin_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revertWithERC20","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setConnector","inputs":[{"name":"zetaConnector_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCustody","inputs":[{"name":"custody_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"tssAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"zetaConnector","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"zetaToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"Called","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Deposited","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"asset","type":"address","indexed":false,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Executed","inputs":[{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ExecutedWithERC20","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Reverted","inputs":[{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertContext","type":"tuple","indexed":false,"internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressInsufficientBalance","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ApprovalFailed","inputs":[]},{"type":"error","name":"ConnectorInitialized","inputs":[]},{"type":"error","name":"CustodyInitialized","inputs":[]},{"type":"error","name":"DepositFailed","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExecutionFailed","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InsufficientERC20Amount","inputs":[]},{"type":"error","name":"InsufficientETHAmount","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"NotWhitelistedInCustody","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ZeroAddress","inputs":[]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516136f06100fd6000396000818161217a015281816121a3015261262f01526136f06000f3fe6080604052600436106101e35760003560e01c80635d62c86011610102578063ae7a3a6f11610095578063d547741f11610064578063d547741f1461062e578063dda79b751461064e578063e63ab1e91461066e578063f7ad60db146106a257600080fd5b8063ae7a3a6f146105ae578063c0c53b8b146105ce578063d09e3b78146105ee578063d0b492c31461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635d62c86014610448578063726ac97c1461047c578063744b9b8b1461048f5780638456cb59146104a257600080fd5b806336568abe1161017a57806352d1902d1161014957806352d1902d146103bc57806357bec62f146103d15780635b112591146103f15780635c975abb1461041157600080fd5b806336568abe146103545780633f4ba83a146103745780634f1ef286146103895780635131ab591461039c57600080fd5b80631cff79cd116101b65780631cff79cd1461027f57806321e093b11461029f578063248a9ca3146102d75780632f2ff15d1461033457600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f5780631becceb41461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b34801561026b57600080fd5b5061023d61027a366004612e61565b610955565b61029261028d366004612ec8565b6109ec565b6040516102149190612f89565b3480156102ab57600080fd5b506003546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102e357600080fd5b506103266102f2366004612f9c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561034057600080fd5b5061023d61034f366004612fb5565b610aef565b34801561036057600080fd5b5061023d61036f366004612fb5565b610b33565b34801561038057600080fd5b5061023d610b84565b61023d610397366004613010565b610bb9565b3480156103a857600080fd5b5061023d6103b7366004613117565b610bd8565b3480156103c857600080fd5b50610326610ef1565b3480156103dd57600080fd5b506002546102bf906001600160a01b031681565b3480156103fd57600080fd5b506001546102bf906001600160a01b031681565b34801561041d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045457600080fd5b506103267f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61048a366004613186565b610f20565b61023d61049d366004612e61565b6110b1565b3480156104ae57600080fd5b5061023d611246565b3480156104c357600080fd5b506102086104d2366004612fb5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610326600081565b34801561053d57600080fd5b506103267f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102926040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d7d565b611278565b3480156105da57600080fd5b5061023d6105e93660046131d4565b61136c565b3480156105fa57600080fd5b5061023d610609366004613217565b611621565b34801561061a57600080fd5b5061023d6106293660046132c1565b611732565b34801561063a57600080fd5b5061023d610649366004612fb5565b6118f4565b34801561065a57600080fd5b506000546102bf906001600160a01b031681565b34801561067a57600080fd5b506103267f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d6106b036600461334c565b611938565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b61095d611c30565b610965611c8e565b6001600160a01b0384166109a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e9392919061352d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a1881611b39565b610a20611c30565b610a28611c8e565b6001600160a01b038516610a68576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a75868686611f72565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610ab493929190613553565b60405180910390a29150610ae760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b2981611b39565b61094f8383611b43565b6001600160a01b0381163314610b75576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bae81611b39565b610bb66120df565b50565b610bc161216f565b610bca8261223f565b610bd4828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c0281611b39565b610c0a611c30565b610c12611c8e565b83600003610c4c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610c8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c96868661236e565b610ccc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d58919061356d565b610d8e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d99858484611f72565b50610da4868661236e565b610dda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e919061358a565b90508015610e7057610e7087826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610eb793929190613553565b60405180910390a350610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610efb612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f28611c30565b610f30611c8e565b34600003610f6a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610faa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ff7576040519150601f19603f3d011682016040523d82523d6000602084013e610ffc565b606091505b5050905080611037576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161107f939291906134f7565b60405180910390a350610bd460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110b9611c30565b6110c1611c8e565b346000036110fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b50509050806111c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516112149594939291906135a3565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61127081611b39565b610bb6612686565b600061128381611b39565b6001600160a01b0382166112c3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611306576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113307f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113b75750825b905060008267ffffffffffffffff1660011480156113d45750303b155b9050811580156113e2575080155b15611419576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561147a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061149757506001600160a01b038716155b156114ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d66126ff565b6114de612707565b6114e66126ff565b6114ee612717565b6114f9600087611b43565b506115247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115827f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116175784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611629611c30565b611631611c8e565b8460000361166b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b6338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516117019594939291906135a3565b60405180910390a3610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961175c81611b39565b611764611c30565b61176c611c8e565b846000036117a6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117e6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fa6001600160a01b0388168787612727565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de09061183f908590600401613644565b600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436878787876040516118ba9493929190613657565b60405180910390a36118eb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461192e81611b39565b61094f838361201b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61196281611b39565b61196a611c30565b611972611c8e565b6001600160a01b0385166119b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119ff576040519150601f19603f3d011682016040523d82523d6000602084013e611a04565b606091505b5050905080611a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a84908690600401613644565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611b009493929190613657565b60405180910390a350611b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bb6813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca919061356d565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af11580156118eb573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356d565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b7f906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f9292919061368e565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd481611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf9181019061358a565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610b7f83836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612014919061356d565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061356d565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af1158015610ee9573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061356d565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd4906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610b7f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610bd4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610b7f8282612af6565b610bd4612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a919061356d565b155b15610b7f576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b13919061369e565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c81919061369e565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b60008060008060608587031215612e7757600080fd5b612e8085612d61565b9350602085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612edd57600080fd5b612ee684612d61565b9250602084013567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e18565b9497909650939450505050565b60005b83811015612f36578181015183820152602001612f1e565b50506000910152565b60008151808452612f57816020860160208601612f1b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612f3f565b600060208284031215612fae57600080fd5b5035919050565b60008060408385031215612fc857600080fd5b82359150612fd860208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561302357600080fd5b61302c83612d61565b9150602083013567ffffffffffffffff81111561304857600080fd5b8301601f8101851361305957600080fd5b803567ffffffffffffffff81111561307357613073612fe1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156130df576130df612fe1565b6040528181528282016020018710156130f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561312f57600080fd5b61313886612d61565b945061314660208701612d61565b935060408601359250606086013567ffffffffffffffff81111561316957600080fd5b61317588828901612e18565b969995985093965092949392505050565b6000806040838503121561319957600080fd5b6131a283612d61565b9150602083013567ffffffffffffffff8111156131be57600080fd5b6131ca85828601612d98565b9150509250929050565b6000806000606084860312156131e957600080fd5b6131f284612d61565b925061320060208501612d61565b915061320e60408501612d61565b90509250925092565b60008060008060008060a0878903121561323057600080fd5b61323987612d61565b95506020870135945061324e60408801612d61565b9350606087013567ffffffffffffffff81111561326a57600080fd5b61327689828a01612e18565b909450925050608087013567ffffffffffffffff81111561329657600080fd5b6132a289828a01612d98565b9150509295509295509295565b600060608284031215612daa57600080fd5b60008060008060008060a087890312156132da57600080fd5b6132e387612d61565b95506132f160208801612d61565b945060408701359350606087013567ffffffffffffffff81111561331457600080fd5b61332089828a01612e18565b909450925050608087013567ffffffffffffffff81111561334057600080fd5b6132a289828a016132af565b6000806000806060858703121561336257600080fd5b61336b85612d61565b9350602085013567ffffffffffffffff81111561338757600080fd5b61339387828801612e18565b909450925050604085013567ffffffffffffffff8111156133b357600080fd5b612e0c878288016132af565b8015158114610bb657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b604081526000613541604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561357f57600080fd5b8151612014816133bf565b60006020828403121561359c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006135cc608083018587613431565b82810360608401526135de818561347a565b98975050505050505050565b6001600160a01b036135fb82612d61565b1682526000602082013567ffffffffffffffff811680821461361c57600080fd5b60208501525061362f60408301836133cd565b60606040860152612b63606086018284613431565b60208152600061201460208301846135ea565b848152606060208201526000613671606083018587613431565b828103604084015261368381856135ea565b979650505050505050565b8183823760009101908152919050565b600082516136b0818460208701612f1b565b919091019291505056fea2646970667358221220c87250f92d4ce753add6a7cc4bdbc2e6885f5d3cad06fa9c00c5899f615d88ea64736f6c634300081a0033","sourceMap":"1053:13852:2:-:0;;;1171:4:42;1128:48;;2057:53:2;;;;;;;;;-1:-1:-1;2081:22:2;:20;:22::i;:::-;1053:13852;;7711:422:41;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:41;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:41;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:41;-1:-1:-1;;;;;8035:33:41;;;;;8087:29;;158:50:108;;;8087:29:41;;146:2:108;131:18;8087:29:41;;;;;;;7981:146;7760:373;7711:422::o;14:200:108:-;1053:13852:2;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101e35760003560e01c80635d62c86011610102578063ae7a3a6f11610095578063d547741f11610064578063d547741f1461062e578063dda79b751461064e578063e63ab1e91461066e578063f7ad60db146106a257600080fd5b8063ae7a3a6f146105ae578063c0c53b8b146105ce578063d09e3b78146105ee578063d0b492c31461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635d62c86014610448578063726ac97c1461047c578063744b9b8b1461048f5780638456cb59146104a257600080fd5b806336568abe1161017a57806352d1902d1161014957806352d1902d146103bc57806357bec62f146103d15780635b112591146103f15780635c975abb1461041157600080fd5b806336568abe146103545780633f4ba83a146103745780634f1ef286146103895780635131ab591461039c57600080fd5b80631cff79cd116101b65780631cff79cd1461027f57806321e093b11461029f578063248a9ca3146102d75780632f2ff15d1461033457600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f5780631becceb41461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b34801561026b57600080fd5b5061023d61027a366004612e61565b610955565b61029261028d366004612ec8565b6109ec565b6040516102149190612f89565b3480156102ab57600080fd5b506003546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102e357600080fd5b506103266102f2366004612f9c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561034057600080fd5b5061023d61034f366004612fb5565b610aef565b34801561036057600080fd5b5061023d61036f366004612fb5565b610b33565b34801561038057600080fd5b5061023d610b84565b61023d610397366004613010565b610bb9565b3480156103a857600080fd5b5061023d6103b7366004613117565b610bd8565b3480156103c857600080fd5b50610326610ef1565b3480156103dd57600080fd5b506002546102bf906001600160a01b031681565b3480156103fd57600080fd5b506001546102bf906001600160a01b031681565b34801561041d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045457600080fd5b506103267f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61048a366004613186565b610f20565b61023d61049d366004612e61565b6110b1565b3480156104ae57600080fd5b5061023d611246565b3480156104c357600080fd5b506102086104d2366004612fb5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610326600081565b34801561053d57600080fd5b506103267f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102926040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d7d565b611278565b3480156105da57600080fd5b5061023d6105e93660046131d4565b61136c565b3480156105fa57600080fd5b5061023d610609366004613217565b611621565b34801561061a57600080fd5b5061023d6106293660046132c1565b611732565b34801561063a57600080fd5b5061023d610649366004612fb5565b6118f4565b34801561065a57600080fd5b506000546102bf906001600160a01b031681565b34801561067a57600080fd5b506103267f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d6106b036600461334c565b611938565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b61095d611c30565b610965611c8e565b6001600160a01b0384166109a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e9392919061352d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a1881611b39565b610a20611c30565b610a28611c8e565b6001600160a01b038516610a68576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a75868686611f72565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610ab493929190613553565b60405180910390a29150610ae760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b2981611b39565b61094f8383611b43565b6001600160a01b0381163314610b75576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bae81611b39565b610bb66120df565b50565b610bc161216f565b610bca8261223f565b610bd4828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c0281611b39565b610c0a611c30565b610c12611c8e565b83600003610c4c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610c8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c96868661236e565b610ccc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d58919061356d565b610d8e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d99858484611f72565b50610da4868661236e565b610dda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e919061358a565b90508015610e7057610e7087826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610eb793929190613553565b60405180910390a350610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610efb612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f28611c30565b610f30611c8e565b34600003610f6a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610faa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ff7576040519150601f19603f3d011682016040523d82523d6000602084013e610ffc565b606091505b5050905080611037576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161107f939291906134f7565b60405180910390a350610bd460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110b9611c30565b6110c1611c8e565b346000036110fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b50509050806111c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516112149594939291906135a3565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61127081611b39565b610bb6612686565b600061128381611b39565b6001600160a01b0382166112c3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611306576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113307f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113b75750825b905060008267ffffffffffffffff1660011480156113d45750303b155b9050811580156113e2575080155b15611419576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561147a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061149757506001600160a01b038716155b156114ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d66126ff565b6114de612707565b6114e66126ff565b6114ee612717565b6114f9600087611b43565b506115247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115827f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116175784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611629611c30565b611631611c8e565b8460000361166b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b6338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516117019594939291906135a3565b60405180910390a3610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961175c81611b39565b611764611c30565b61176c611c8e565b846000036117a6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117e6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fa6001600160a01b0388168787612727565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de09061183f908590600401613644565b600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436878787876040516118ba9493929190613657565b60405180910390a36118eb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461192e81611b39565b61094f838361201b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61196281611b39565b61196a611c30565b611972611c8e565b6001600160a01b0385166119b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119ff576040519150601f19603f3d011682016040523d82523d6000602084013e611a04565b606091505b5050905080611a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a84908690600401613644565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611b009493929190613657565b60405180910390a350611b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bb6813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca919061356d565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af11580156118eb573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356d565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b7f906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f9292919061368e565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd481611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf9181019061358a565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610b7f83836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612014919061356d565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061356d565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af1158015610ee9573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061356d565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd4906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610b7f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610bd4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610b7f8282612af6565b610bd4612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a919061356d565b155b15610b7f576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b13919061369e565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c81919061369e565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b60008060008060608587031215612e7757600080fd5b612e8085612d61565b9350602085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612edd57600080fd5b612ee684612d61565b9250602084013567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e18565b9497909650939450505050565b60005b83811015612f36578181015183820152602001612f1e565b50506000910152565b60008151808452612f57816020860160208601612f1b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612f3f565b600060208284031215612fae57600080fd5b5035919050565b60008060408385031215612fc857600080fd5b82359150612fd860208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561302357600080fd5b61302c83612d61565b9150602083013567ffffffffffffffff81111561304857600080fd5b8301601f8101851361305957600080fd5b803567ffffffffffffffff81111561307357613073612fe1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156130df576130df612fe1565b6040528181528282016020018710156130f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561312f57600080fd5b61313886612d61565b945061314660208701612d61565b935060408601359250606086013567ffffffffffffffff81111561316957600080fd5b61317588828901612e18565b969995985093965092949392505050565b6000806040838503121561319957600080fd5b6131a283612d61565b9150602083013567ffffffffffffffff8111156131be57600080fd5b6131ca85828601612d98565b9150509250929050565b6000806000606084860312156131e957600080fd5b6131f284612d61565b925061320060208501612d61565b915061320e60408501612d61565b90509250925092565b60008060008060008060a0878903121561323057600080fd5b61323987612d61565b95506020870135945061324e60408801612d61565b9350606087013567ffffffffffffffff81111561326a57600080fd5b61327689828a01612e18565b909450925050608087013567ffffffffffffffff81111561329657600080fd5b6132a289828a01612d98565b9150509295509295509295565b600060608284031215612daa57600080fd5b60008060008060008060a087890312156132da57600080fd5b6132e387612d61565b95506132f160208801612d61565b945060408701359350606087013567ffffffffffffffff81111561331457600080fd5b61332089828a01612e18565b909450925050608087013567ffffffffffffffff81111561334057600080fd5b6132a289828a016132af565b6000806000806060858703121561336257600080fd5b61336b85612d61565b9350602085013567ffffffffffffffff81111561338757600080fd5b61339387828801612e18565b909450925050604085013567ffffffffffffffff8111156133b357600080fd5b612e0c878288016132af565b8015158114610bb657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b604081526000613541604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561357f57600080fd5b8151612014816133bf565b60006020828403121561359c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006135cc608083018587613431565b82810360608401526135de818561347a565b98975050505050505050565b6001600160a01b036135fb82612d61565b1682526000602082013567ffffffffffffffff811680821461361c57600080fd5b60208501525061362f60408301836133cd565b60606040860152612b63606086018284613431565b60208152600061201460208301846135ea565b848152606060208201526000613671606083018587613431565b828103604084015261368381856135ea565b979650505050505050565b8183823760009101908152919050565b600082516136b0818460208701612f1b565b919091019291505056fea2646970667358221220c87250f92d4ce753add6a7cc4bdbc2e6885f5d3cad06fa9c00c5899f615d88ea64736f6c634300081a0033","sourceMap":"1053:13852:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:40;;;;;;;;;;-1:-1:-1;3443:202:40;;;;;:::i;:::-;;:::i;:::-;;;516:14:108;;509:22;491:41;;479:2;464:18;3443:202:40;;;;;;;;12007:324:2;;;;;;;;;;-1:-1:-1;12007:324:2;;;;;:::i;:::-;;:::i;:::-;;8785:475;;;;;;;;;;-1:-1:-1;8785:475:2;;;;;:::i;:::-;;:::i;11165:320::-;;;;;;;;;;-1:-1:-1;11165:320:2;;;;;:::i;:::-;;:::i;4952:424::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1597:24::-;;;;;;;;;;-1:-1:-1;1597:24:2;;;;-1:-1:-1;;;;;1597:24:2;;;;;;-1:-1:-1;;;;;4299:55:108;;;4281:74;;4269:2;4254:18;1597:24:2;4135:226:108;4759:191:40;;;;;;;;;;-1:-1:-1;4759:191:40;;;;;:::i;:::-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;;4759:191;;;;4743:25:108;;;4731:2;4716:18;4759:191:40;4597:177:108;5246:136:40;;;;;;;;;;-1:-1:-1;5246:136:40;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:40;;;;;:::i;:::-;;:::i;3731:77:2:-;;;;;;;;;;;;;:::i;4158:214:42:-;;;;;;:::i;:::-;;:::i;5834:1032:2:-;;;;;;;;;;-1:-1:-1;5834:1032:2;;;;;:::i;:::-;;:::i;3705:134:42:-;;;;;;;;;;;;;:::i;1507:28:2:-;;;;;;;;;;-1:-1:-1;1507:28:2;;;;-1:-1:-1;;;;;1507:28:2;;;1417:25;;;;;;;;;;-1:-1:-1;1417:25:2;;;;-1:-1:-1;;;;;1417:25:2;;;2692:145:44;;;;;;;;;;-1:-1:-1;1270:23:44;2821:9;;;2692:145;;1800:76:2;;;;;;;;;;;;1845:31;1800:76;;8001:508;;;;;;:::i;:::-;;:::i;9500:552::-;;;;;;:::i;:::-;;:::i;3618:73::-;;;;;;;;;;;;;:::i;3732:207:40:-;;;;;;;;;;-1:-1:-1;3732:207:40;;;;;:::i;:::-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;;;;3732:207;2317:49;;;;;;;;;;-1:-1:-1;2317:49:40;2362:4;2317:49;;1678:56:2;;;;;;;;;;;;1713:21;1678:56;;1819:58:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11599:284:2;;;;;;;;;;-1:-1:-1;11599:284:2;;;;;:::i;:::-;;:::i;2308:543::-;;;;;;;;;;-1:-1:-1;2308:543:2;;;;;:::i;:::-;;:::i;10419:519::-;;;;;;;;;;-1:-1:-1;10419:519:2;;;;;:::i;:::-;;:::i;7290:562::-;;;;;;;;;;-1:-1:-1;7290:562:2;;;;;:::i;:::-;;:::i;5662:138:40:-;;;;;;;;;;-1:-1:-1;5662:138:40;;;;;:::i;:::-;;:::i;1311:22:2:-;;;;;;;;;;-1:-1:-1;1311:22:2;;;;-1:-1:-1;;;;;1311:22:2;;;1935:62;;;;;;;;;;;;1973:24;1935:62;;4089:560;;;;;;:::i;:::-;;:::i;3443:202:40:-;3528:4;3551:47;;;3566:32;3551:47;;:87;;-1:-1:-1;1148:25:46;1133:40;;;;3602:36:40;3544:94;3443:202;-1:-1:-1;;3443:202:40:o;12007:324:2:-;2362:4:40;3191:16;2362:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;12105:28:2;::::1;12101:54;;12142:13;;;;;;;;;;;;;;12101:54;12169:13;::::0;-1:-1:-1;;;;;12169:13:2::1;:27:::0;12165:62:::1;;12205:22;;;;;;;;;;;;;;12165:62;12238:46;1845:31;12269:14;12238:10;:46::i;:::-;-1:-1:-1::0;;12294:13:2::1;:30:::0;;;::::1;-1:-1:-1::0;;;;;12294:30:2;;;::::1;::::0;;;::::1;::::0;;12007:324::o;8785:475::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;9005:6:2::2;9015:1;9005:11:::0;9001:49:::2;;9025:25;;;;;;;;;;;;;;9001:49;-1:-1:-1::0;;;;;9064:22:2;::::2;9060:48;;9095:13;;;;;;;;;;;;;;9060:48;9119:53;9146:10;9158:5;9165:6;9119:26;:53::i;:::-;9210:8;-1:-1:-1::0;;;;;9188:65:2::2;9198:10;-1:-1:-1::0;;;;;9188:65:2::2;;9220:6;9228:5;9239:13;9188:65;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::1;8785:475:2::0;;;;:::o;11165:320::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;11367:22:2;::::2;11363:48;;11398:13;;;;;;;;;;;;;;11363:48;11445:8;-1:-1:-1::0;;;;;11426:52:2::2;11433:10;-1:-1:-1::0;;;;;11426:52:2::2;;11455:7;;11464:13;11426:52;;;;;;;;:::i;4952:424::-:0;5153:12;1713:21;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;-1:-1:-1::0;;;;;5185:25:2;::::3;5181:51;;5219:13;;;;;;;;;;;;;;5181:51;5242:19;5264:27;5273:11;5286:4;;5264:8;:27::i;:::-;5242:49;;5316:11;-1:-1:-1::0;;;;;5307:38:2::3;;5329:9;5340:4;;5307:38;;;;;;;;:::i;:::-;;;;;;;;5363:6:::0;-1:-1:-1;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;4952:424:2::0;;;;;;:::o;5246:136:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;6348:245::-:0;-1:-1:-1;;;;;6441:34:40;;966:10:43;6441:34:40;6437:102;;6498:30;;;;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;3731:77:2:-;1973:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3791:10:2::1;:8;:10::i;:::-;3731:77:::0;:::o;4158:214:42:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;:::-;4158:214:::0;;:::o;5834:1032:2:-;1845:31;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;6075:6:2::3;6085:1;6075:11:::0;6071:49:::3;;6095:25;;;;;;;;;;;;;;6071:49;-1:-1:-1::0;;;;;6134:16:2;::::3;6130:42;;6159:13;;;;;;;;;;;;;;6130:42;6246:24;6260:5;6267:2;6246:13;:24::i;:::-;6241:54;;6279:16;;;;;;;;;;;;;;6241:54;6310:33;::::0;;;;-1:-1:-1;;;;;14361:55:108;;;6310:33:2::3;::::0;::::3;14343:74:108::0;14433:18;;;14426:34;;;6310:21:2;::::3;::::0;::::3;::::0;14316:18:108;;6310:33:2::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6305:63;;6352:16;;;;;;;;;;;;;;6305:63;6429:18;6438:2;6442:4;;6429:8;:18::i;:::-;;6489:24;6503:5;6510:2;6489:13;:24::i;:::-;6484:54;;6522:16;;;;;;;;;;;;;;6484:54;6656:38;::::0;;;;6688:4:::3;6656:38;::::0;::::3;4281:74:108::0;6629:24:2::3;::::0;-1:-1:-1;;;;;6656:23:2;::::3;::::0;::::3;::::0;4254:18:108;;6656:38:2::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6629:65:::0;-1:-1:-1;6708:20:2;;6704:98:::3;;6744:47;6767:5;6774:16;6744:22;:47::i;:::-;6842:2;-1:-1:-1::0;;;;;6817:42:2::3;6835:5;-1:-1:-1::0;;;;;6817:42:2::3;;6846:6;6854:4;;6817:42;;;;;;;;:::i;:::-;;;;;;;;6061:805;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;5834:1032:2::0;;;;;;:::o;3705:134:42:-;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;1327:66:54::1;3705:134:42::0;:::o;8001:508:2:-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;8190:9:2::2;8203:1;8190:14:::0;8186:50:::2;;8213:23;;;;;;;;;;;;;;8186:50;-1:-1:-1::0;;;;;8250:22:2;::::2;8246:48;;8281:13;;;;;;;;;;;;;;8246:48;8325:10;::::0;:39:::2;::::0;8306:14:::2;::::0;-1:-1:-1;;;;;8325:10:2::2;::::0;8349:9:::2;::::0;8306:14;8325:39;8306:14;8325:39;8349:9;8325:10;:39:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8305:59;;;8380:9;8375:38;;8398:15;;;;;;;;;;;;;;8375:38;8451:8;-1:-1:-1::0;;;;;8429:73:2::2;8439:10;-1:-1:-1::0;;;;;8429:73:2::2;;8461:9;8480:1;8488:13;8429:73;;;;;;;;:::i;:::-;;;;;;;;8176:333;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;9500:552:2;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;9728:9:2::2;9741:1;9728:14:::0;9724:50:::2;;9751:23;;;;;;;;;;;;;;9724:50;-1:-1:-1::0;;;;;9788:22:2;::::2;9784:48;;9819:13;;;;;;;;;;;;;;9784:48;9863:10;::::0;:39:::2;::::0;9844:14:::2;::::0;-1:-1:-1;;;;;9863:10:2::2;::::0;9887:9:::2;::::0;9844:14;9863:39;9844:14;9863:39;9887:9;9863:10;:39:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9843:59;;;9918:9;9913:38;;9936:15;;;;;;;;;;;;;;9913:38;9989:8;-1:-1:-1::0;;;;;9967:78:2::2;9977:10;-1:-1:-1::0;;;;;9967:78:2::2;;9999:9;10018:1;10022:7;;10031:13;9967:78;;;;;;;;;;:::i;:::-;;;;;;;;9714:338;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;3618:73:2;1973:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3676:8:2::1;:6;:8::i;11599:284::-:0;2362:4:40;3191:16;2362:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;11689:22:2;::::1;11685:48;;11720:13;;;;;;;;;;;;;;11685:48;11766:1;11747:7:::0;-1:-1:-1;;;;;11747:7:2::1;:21:::0;11743:54:::1;;11777:20;;;;;;;;;;;;;;11743:54;11808:40;1845:31;11839:8;11808:10;:40::i;:::-;-1:-1:-1::0;;11858:7:2::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;11858:18:2;;;::::1;::::0;;;::::1;::::0;;11599:284::o;2308:543::-;8870:21:41;4302:15;;;;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:41;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;;;;;;;;;;;;;4851:91;4951:18;;;;4968:1;4951:18;;;4979:67;;;;5013:22;;;;;;;;4979:67;-1:-1:-1;;;;;2418:25:2;::::1;::::0;;:53:::1;;-1:-1:-1::0;;;;;;2447:24:2;::::1;::::0;2418:53:::1;2414:104;;;2494:13;;;;;;;;;;;;;;2414:104;2527:24;:22;:24::i;:::-;2561;:22;:24::i;:::-;2595:22;:20;:22::i;:::-;2627:17;:15;:17::i;:::-;2655:38;2362:4:40;2686:6:2::0;2655:10:::1;:38::i;:::-;;2703:31;1973:24;2727:6;2703:10;:31::i;:::-;-1:-1:-1::0;2744:10:2::1;:24:::0;;;::::1;-1:-1:-1::0;;;;;2744:24:2;::::1;;::::0;;2778:33:::1;1713:21;2744:24:::0;2778:10:::1;:33::i;:::-;-1:-1:-1::0;2822:9:2::1;:22:::0;;;::::1;-1:-1:-1::0;;;;;2822:22:2;::::1;;::::0;;5066:101:41;;;;5100:23;;;;;;5142:14;;-1:-1:-1;15941:50:108;;5142:14:41;;15929:2:108;15914:18;5142:14:41;;;;;;;5066:101;4092:1081;;;;;2308:543:2;;;:::o;10419:519::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;10678:6:2::2;10688:1;10678:11:::0;10674:49:::2;;10698:25;;;;;;;;;;;;;;10674:49;-1:-1:-1::0;;;;;10737:22:2;::::2;10733:48;;10768:13;;;;;;;;;;;;;;10733:48;10792:53;10819:10;10831:5;10838:6;10792:26;:53::i;:::-;10883:8;-1:-1:-1::0;;;;;10861:70:2::2;10871:10;-1:-1:-1::0;;;;;10861:70:2::2;;10893:6;10901:5;10908:7;;10917:13;10861:70;;;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;7290:562:2;1845:31;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;7578:6:2::3;7588:1;7578:11:::0;7574:49:::3;;7598:25;;;;;;;;;;;;;;7574:49;-1:-1:-1::0;;;;;7637:16:2;::::3;7633:42;;7662:13;;;;;;;;;;;;;;7633:42;7686:47;-1:-1:-1::0;;;;;7686:26:2;::::3;7721:2:::0;7726:6;7686:26:::3;:47::i;:::-;7743:38;::::0;;;;-1:-1:-1;;;;;7743:23:2;::::3;::::0;::::3;::::0;:38:::3;::::0;7767:13;;7743:38:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;7810:5;-1:-1:-1::0;;;;;7797:48:2::3;7806:2;-1:-1:-1::0;;;;;7797:48:2::3;;7817:6;7825:4;;7831:13;7797:48;;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;7290:562:2::0;;;;;;;:::o;5662:138:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;4089:560:2:-:0;1713:21;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;-1:-1:-1::0;;;;;4341:25:2;::::3;4337:51;;4375:13;;;;;;;;;;;;;;4337:51;4399:12;4416:11;-1:-1:-1::0;;;;;4416:16:2::3;4441:9;4416:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4398:58;;;4471:7;4466:38;;4487:17;;;;;;;;;;;;;;4466:38;4514:47;::::0;;;;-1:-1:-1;;;;;4514:32:2;::::3;::::0;::::3;::::0;:47:::3;::::0;4547:13;;4514:47:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;4607:1;-1:-1:-1::0;;;;;4577:65:2::3;4586:11;-1:-1:-1::0;;;;;4577:65:2::3;;4611:9;4622:4;;4628:13;4577:65;;;;;;;;;:::i;:::-;;;;;;;;4327:322;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;4089:560:2::0;;;;;:::o;4148:103:40:-;4214:30;4225:4;966:10:43;4214::40;:30::i;7270:387::-;7347:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:40;;;;;;;;;:38;;;;7509:4;7475:38;;;7559:12;966:10:43;;887:96;7559:12:40;-1:-1:-1;;;;;7532:40:40;7550:7;-1:-1:-1;;;;;7532:40:40;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;2905:128:44;1270:23;2821:9;;;2966:61;;;3001:15;;;;;;;;;;;;;;2966:61;2905:128::o;3326:384:45:-;2388:30;3526:9;;:20;;3522:88;;3569:30;;;;;;;;;;;;;;3522:88;1847:1;3684:19;;3326:384::o;13155:801:2:-;13267:9;;-1:-1:-1;;;;;13267:9:2;;;13258:18;;;;13254:696;;13371:59;-1:-1:-1;;;;;13371:30:2;;13402:4;13416;13423:6;13371:30;:59::i;:::-;13571:13;;13549:44;;;;;-1:-1:-1;;;;;13571:13:2;;;13549:44;;;14343:74:108;14433:18;;;14426:34;;;13549:21:2;;;;;;14316:18:108;;13549:44:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13544:74;;13602:16;;;;;;;;;;;;;;13544:74;13690:13;;13672:54;;;;;;;;4743:25:108;;;-1:-1:-1;;;;;13690:13:2;;;;13672:46;;4716:18:108;;13672:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13254:696;13811:7;;13797:41;;;;;-1:-1:-1;;;;;4299:55:108;;;13797:41:2;;;4281:74:108;13811:7:2;;;;13797:34;;4254:18:108;;13797:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13792:80;;13847:25;;;;;;;;;;;;;;13792:80;13923:7;;13886:53;;-1:-1:-1;;;;;13886:30:2;;;;13917:4;;13923:7;13932:6;13886:30;:53::i;3716:283:45:-;1805:1;2388:30;3969:23;3716:283::o;3319:261:2:-;3397:12;3422;3436:19;3459:11;-1:-1:-1;;;;;3459:16:2;3484:9;3496:4;;3459:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3421:80;;;;3516:7;3511:38;;3532:17;;;;;;;;;;;;;;3511:38;3567:6;-1:-1:-1;;3319:261:2;;;;;;:::o;7892:388:40:-;7970:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:40;;;;;;;;;;:39;;;;;;8155:40;966:10:43;;8097:14:40;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;3674:178:44;2563:16;:14;:16::i;:::-;1270:23;3791:17;;;::::1;::::0;;3823:22:::1;966:10:43::0;3832:12:44::1;3823:22;::::0;-1:-1:-1;;;;;4299:55:108;;;4281:74;;4269:2;4254:18;3823:22:44::1;;;;;;;3722:130;3674:178::o:0;4599:312:42:-;4679:4;-1:-1:-1;;;;;4688:6:42;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:42;:32;1327:66:54;2035:53;-1:-1:-1;;;;;2035:53:54;;1957:138;4749:32:42;-1:-1:-1;;;;;4749:42:42;;;4671:120;4654:251;;;4865:29;;;;;;;;;;;;;;3000:104:2;2362:4:40;3191:16;2362:4;3191:10;:16::i;6052:538:42:-;6169:17;-1:-1:-1;;;;;6151:50:42;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:42;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;;;;-1:-1:-1;;;;;4299:55:108;;6513:60:42;;;4281:74:108;4254:18;;6513:60:42;;;;;;;;6147:437;1327:66:54;6245:40:42;;6241:120;;6312:34;;;;;;;;4743:25:108;;;4716:18;;6312:34:42;4597:177:108;6241:120:42;6374:54;6404:17;6423:4;6374:29;:54::i;12682:125:2:-;12772:28;;;;;-1:-1:-1;;;;;14361:55:108;;;12772:28:2;;;14343:74:108;12749:4:2;14433:18:108;;;14426:34;;;12749:4:2;12772:21;;;;;;14316:18:108;;12772:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14245:658::-;14339:9;;-1:-1:-1;;;;;14339:9:2;;;14330:18;;;;14326:571;;14528:13;;14506:44;;;;;-1:-1:-1;;;;;14528:13:2;;;14506:44;;;14343:74:108;14433:18;;;14426:34;;;14506:21:2;;;;;;14316:18:108;;14506:44:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14501:74;;14559:16;;;;;;;;;;;;;;14501:74;14647:13;;14629:54;;;;;;;;4743:25:108;;;-1:-1:-1;;;;;14647:13:2;;;;14629:46;;4716:18:108;;14629:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14326:571;14768:7;;14754:41;;;;;-1:-1:-1;;;;;4299:55:108;;;14754:41:2;;;4281:74:108;14768:7:2;;;;14754:34;;4254:18:108;;14754:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14749:80;;14804:25;;;;;;;;;;;;;;14749:80;14870:7;;14843:43;;-1:-1:-1;;;;;14843:26:2;;;;14870:7;14879:6;14843:26;:43::i;5028:213:42:-;5102:4;-1:-1:-1;;;;;5111:6:42;5094:23;;5090:145;;5195:29;;;;;;;;;;;;;;3366:176:44;2316:19;:17;:19::i;:::-;1270:23;3484:16;;;::::1;3496:4;3484:16;::::0;;3515:20:::1;966:10:43::0;3522:12:44::1;887:96:43::0;2968:67:42;6931:20:41;:18;:20::i;2540:111:45:-;6931:20:41;:18;:20::i;:::-;2610:34:45::1;:32;:34::i;1836:97:44:-:0;6931:20:41;:18;:20::i;:::-;1899:27:44::1;:25;:27::i;1303:160:66:-:0;1412:43;;-1:-1:-1;;;;;14361:55:108;;;1412:43:66;;;14343:74:108;14433:18;;;14426:34;;;1385:71:66;;1405:5;;1427:14;;;;;14316:18:108;;1412:43:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:19;:71::i;4381:197:40:-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;4464:108;;4514:47;;;;;-1:-1:-1;;;;;14361:55:108;;4514:47:40;;;14343:74:108;14433:18;;;14426:34;;;14316:18;;4514:47:40;14169:297:108;1702:188:66;1829:53;;-1:-1:-1;;;;;18908:55:108;;;1829:53:66;;;18890:74:108;19000:55;;;18980:18;;;18973:83;19072:18;;;19065:34;;;1802:81:66;;1822:5;;1844:18;;;;;18863::108;;1829:53:66;18688:417:108;3105:126:44;1270:23;2821:9;;;3163:62;;3199:15;;;;;;;;;;;;;;2779:335:54;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:54;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:41:-;8870:21;8560:40;;;;;;7146:73;;7191:17;;;;;;;;;;;;;;2657:183:45;6931:20:41;:18;:20::i;1939:156:44:-;6931:20:41;:18;:20::i;:::-;1270:23:44;2071:17;;;::::1;::::0;;1939:156::o;4059:629:66:-;4478:23;4504:33;-1:-1:-1;;;;;4504:27:66;;4532:4;4504:27;:33::i;:::-;4478:59;;4551:10;:17;4572:1;4551:22;;:57;;;;;4589:10;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;4547:135;;;4631:40;;;;;-1:-1:-1;;;;;4299:55:108;;4631:40:66;;;4281:74:108;4254:18;;4631:40:66;4135:226:108;2186:281:54;2263:17;-1:-1:-1;;;;;2263:29:54;;2296:1;2263:34;2259:119;;2320:47;;;;;-1:-1:-1;;;;;4299:55:108;;2320:47:54;;;4281:74:108;4254:18;;2320:47:54;4135:226:108;2259:119:54;1327:66;2387:73;;;;-1:-1:-1;;;;;2387:73:54;;;;;;;;;;2186:281::o;4106:253:67:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:67;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:67:o;6598:122:54:-;6648:9;:13;6644:70;;6684:19;;;;;;;;;;;;;;2705:151:67;2780:12;2811:38;2833:6;2841:4;2847:1;2811:21;:38::i;4625:582::-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:67;;;:23;5045:49;5041:119;;;5121:24;;;;;-1:-1:-1;;;;;4299:55:108;;5121:24:67;;;4281:74:108;4254:18;;5121:24:67;4135:226:108;5041:119:67;-1:-1:-1;5180:10:67;5173:17;;3180:392;3279:12;3331:5;3307:21;:29;3303:108;;;3359:41;;;;;3394:4;3359:41;;;4281:74:108;4254:18;;3359:41:67;4135:226:108;3303:108:67;3421:12;3435:23;3462:6;-1:-1:-1;;;;;3462:11:67;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;3180:392;-1:-1:-1;;;;;;3180:392:67:o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;14:332:108;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:196;611:20;;-1:-1:-1;;;;;660:54:108;;650:65;;640:93;;729:1;726;719:12;640:93;543:196;;;:::o;744:186::-;803:6;856:2;844:9;835:7;831:23;827:32;824:52;;;872:1;869;862:12;824:52;895:29;914:9;895:29;:::i;935:162::-;1001:5;1046:3;1037:6;1032:3;1028:16;1024:26;1021:46;;;1063:1;1060;1053:12;1021:46;-1:-1:-1;1085:6:108;935:162;-1:-1:-1;935:162:108:o;1102:629::-;1219:6;1227;1235;1243;1296:3;1284:9;1275:7;1271:23;1267:33;1264:53;;;1313:1;1310;1303:12;1264:53;1336:29;1355:9;1336:29;:::i;:::-;1326:39;-1:-1:-1;1434:2:108;1419:18;;1406:32;;-1:-1:-1;1481:38:108;1515:2;1500:18;;1481:38;:::i;:::-;1471:48;;1570:2;1559:9;1555:18;1542:32;1597:18;1589:6;1586:30;1583:50;;;1629:1;1626;1619:12;1583:50;1652:73;1717:7;1708:6;1697:9;1693:22;1652:73;:::i;:::-;1642:83;;;1102:629;;;;;;;:::o;1736:347::-;1787:8;1797:6;1851:3;1844:4;1836:6;1832:17;1828:27;1818:55;;1869:1;1866;1859:12;1818:55;-1:-1:-1;1892:20:108;;1935:18;1924:30;;1921:50;;;1967:1;1964;1957:12;1921:50;2004:4;1996:6;1992:17;1980:29;;2056:3;2049:4;2040:6;2032;2028:19;2024:30;2021:39;2018:59;;;2073:1;2070;2063:12;2018:59;1736:347;;;;;:::o;2088:743::-;2207:6;2215;2223;2231;2284:2;2272:9;2263:7;2259:23;2255:32;2252:52;;;2300:1;2297;2290:12;2252:52;2323:29;2342:9;2323:29;:::i;:::-;2313:39;;2403:2;2392:9;2388:18;2375:32;2430:18;2422:6;2419:30;2416:50;;;2462:1;2459;2452:12;2416:50;2501:58;2551:7;2542:6;2531:9;2527:22;2501:58;:::i;:::-;2578:8;;-1:-1:-1;2475:84:108;-1:-1:-1;;2666:2:108;2651:18;;2638:32;2695:18;2682:32;;2679:52;;;2727:1;2724;2717:12;2836:483;2915:6;2923;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:52;;;3000:1;2997;2990:12;2952:52;3023:29;3042:9;3023:29;:::i;:::-;3013:39;;3103:2;3092:9;3088:18;3075:32;3130:18;3122:6;3119:30;3116:50;;;3162:1;3159;3152:12;3116:50;3201:58;3251:7;3242:6;3231:9;3227:22;3201:58;:::i;:::-;2836:483;;3278:8;;-1:-1:-1;3175:84:108;;-1:-1:-1;;;;2836:483:108:o;3324:250::-;3409:1;3419:113;3433:6;3430:1;3427:13;3419:113;;;3509:11;;;3503:18;3490:11;;;3483:39;3455:2;3448:10;3419:113;;;-1:-1:-1;;3566:1:108;3548:16;;3541:27;3324:250::o;3579:329::-;3620:3;3658:5;3652:12;3685:6;3680:3;3673:19;3701:76;3770:6;3763:4;3758:3;3754:14;3747:4;3740:5;3736:16;3701:76;:::i;:::-;3822:2;3810:15;3827:66;3806:88;3797:98;;;;3897:4;3793:109;;3579:329;-1:-1:-1;;3579:329:108:o;3913:217::-;4060:2;4049:9;4042:21;4023:4;4080:44;4120:2;4109:9;4105:18;4097:6;4080:44;:::i;4366:226::-;4425:6;4478:2;4466:9;4457:7;4453:23;4449:32;4446:52;;;4494:1;4491;4484:12;4446:52;-1:-1:-1;4539:23:108;;4366:226;-1:-1:-1;4366:226:108:o;4779:300::-;4847:6;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4969:23;;;-1:-1:-1;5035:38:108;5069:2;5054:18;;5035:38;:::i;:::-;5025:48;;4779:300;;;;;:::o;5084:184::-;5136:77;5133:1;5126:88;5233:4;5230:1;5223:15;5257:4;5254:1;5247:15;5273:1136;5350:6;5358;5411:2;5399:9;5390:7;5386:23;5382:32;5379:52;;;5427:1;5424;5417:12;5379:52;5450:29;5469:9;5450:29;:::i;:::-;5440:39;;5530:2;5519:9;5515:18;5502:32;5557:18;5549:6;5546:30;5543:50;;;5589:1;5586;5579:12;5543:50;5612:22;;5665:4;5657:13;;5653:27;-1:-1:-1;5643:55:108;;5694:1;5691;5684:12;5643:55;5734:2;5721:16;5760:18;5752:6;5749:30;5746:56;;;5782:18;;:::i;:::-;5831:2;5825:9;5978:66;5973:2;5904:66;5897:4;5889:6;5885:17;5881:90;5877:99;5873:172;5865:6;5861:185;6112:6;6100:10;6097:22;6076:18;6064:10;6061:34;6058:62;6055:88;;;6123:18;;:::i;:::-;6159:2;6152:22;6183;;;6224:15;;;6241:2;6220:24;6217:37;-1:-1:-1;6214:57:108;;;6267:1;6264;6257:12;6214:57;6323:6;6318:2;6314;6310:11;6305:2;6297:6;6293:15;6280:50;6376:1;6371:2;6362:6;6354;6350:19;6346:28;6339:39;6397:6;6387:16;;;;;5273:1136;;;;;:::o;6414:672::-;6511:6;6519;6527;6535;6543;6596:3;6584:9;6575:7;6571:23;6567:33;6564:53;;;6613:1;6610;6603:12;6564:53;6636:29;6655:9;6636:29;:::i;:::-;6626:39;;6684:38;6718:2;6707:9;6703:18;6684:38;:::i;:::-;6674:48;-1:-1:-1;6791:2:108;6776:18;;6763:32;;-1:-1:-1;6870:2:108;6855:18;;6842:32;6897:18;6886:30;;6883:50;;;6929:1;6926;6919:12;6883:50;6968:58;7018:7;7009:6;6998:9;6994:22;6968:58;:::i;:::-;6414:672;;;;-1:-1:-1;6414:672:108;;-1:-1:-1;7045:8:108;;6942:84;6414:672;-1:-1:-1;;;6414:672:108:o;7091:440::-;7190:6;7198;7251:2;7239:9;7230:7;7226:23;7222:32;7219:52;;;7267:1;7264;7257:12;7219:52;7290:29;7309:9;7290:29;:::i;:::-;7280:39;;7370:2;7359:9;7355:18;7342:32;7397:18;7389:6;7386:30;7383:50;;;7429:1;7426;7419:12;7383:50;7452:73;7517:7;7508:6;7497:9;7493:22;7452:73;:::i;:::-;7442:83;;;7091:440;;;;;:::o;7760:334::-;7837:6;7845;7853;7906:2;7894:9;7885:7;7881:23;7877:32;7874:52;;;7922:1;7919;7912:12;7874:52;7945:29;7964:9;7945:29;:::i;:::-;7935:39;;7993:38;8027:2;8016:9;8012:18;7993:38;:::i;:::-;7983:48;;8050:38;8084:2;8073:9;8069:18;8050:38;:::i;:::-;8040:48;;7760:334;;;;;:::o;8099:933::-;8236:6;8244;8252;8260;8268;8276;8329:3;8317:9;8308:7;8304:23;8300:33;8297:53;;;8346:1;8343;8336:12;8297:53;8369:29;8388:9;8369:29;:::i;:::-;8359:39;-1:-1:-1;8467:2:108;8452:18;;8439:32;;-1:-1:-1;8514:38:108;8548:2;8533:18;;8514:38;:::i;:::-;8504:48;;8603:2;8592:9;8588:18;8575:32;8630:18;8622:6;8619:30;8616:50;;;8662:1;8659;8652:12;8616:50;8701:58;8751:7;8742:6;8731:9;8727:22;8701:58;:::i;:::-;8778:8;;-1:-1:-1;8675:84:108;-1:-1:-1;;8866:3:108;8851:19;;8838:33;8896:18;8883:32;;8880:52;;;8928:1;8925;8918:12;8880:52;8951:75;9018:7;9007:8;8996:9;8992:24;8951:75;:::i;:::-;8941:85;;;8099:933;;;;;;;;:::o;9037:161::-;9103:5;9148:2;9139:6;9134:3;9130:16;9126:25;9123:45;;;9164:1;9161;9154:12;9203:933;9340:6;9348;9356;9364;9372;9380;9433:3;9421:9;9412:7;9408:23;9404:33;9401:53;;;9450:1;9447;9440:12;9401:53;9473:29;9492:9;9473:29;:::i;:::-;9463:39;;9521:38;9555:2;9544:9;9540:18;9521:38;:::i;:::-;9511:48;-1:-1:-1;9628:2:108;9613:18;;9600:32;;-1:-1:-1;9707:2:108;9692:18;;9679:32;9734:18;9723:30;;9720:50;;;9766:1;9763;9756:12;9720:50;9805:58;9855:7;9846:6;9835:9;9831:22;9805:58;:::i;:::-;9882:8;;-1:-1:-1;9779:84:108;-1:-1:-1;;9970:3:108;9955:19;;9942:33;10000:18;9987:32;;9984:52;;;10032:1;10029;10022:12;9984:52;10055:75;10122:7;10111:8;10100:9;10096:24;10055:75;:::i;10141:743::-;10260:6;10268;10276;10284;10337:2;10325:9;10316:7;10312:23;10308:32;10305:52;;;10353:1;10350;10343:12;10305:52;10376:29;10395:9;10376:29;:::i;:::-;10366:39;;10456:2;10445:9;10441:18;10428:32;10483:18;10475:6;10472:30;10469:50;;;10515:1;10512;10505:12;10469:50;10554:58;10604:7;10595:6;10584:9;10580:22;10554:58;:::i;:::-;10631:8;;-1:-1:-1;10528:84:108;-1:-1:-1;;10719:2:108;10704:18;;10691:32;10748:18;10735:32;;10732:52;;;10780:1;10777;10770:12;10732:52;10803:75;10870:7;10859:8;10848:9;10844:24;10803:75;:::i;10889:118::-;10975:5;10968:13;10961:21;10954:5;10951:32;10941:60;;10997:1;10994;10987:12;11012:559;11070:5;11077:6;11137:3;11124:17;11219:66;11208:8;11192:14;11188:29;11184:102;11164:18;11160:127;11150:155;;11301:1;11298;11291:12;11150:155;11329:33;;11433:4;11420:18;;;-1:-1:-1;11381:21:108;;-1:-1:-1;11461:18:108;11450:30;;11447:50;;;11493:1;11490;11483:12;11447:50;11540:6;11524:14;11520:27;11513:5;11509:39;11506:59;;;11561:1;11558;11551:12;11576:325;11664:6;11659:3;11652:19;11716:6;11709:5;11702:4;11697:3;11693:14;11680:43;;11768:1;11761:4;11752:6;11747:3;11743:16;11739:27;11732:38;11634:3;11890:4;11820:66;11815:2;11807:6;11803:15;11799:88;11794:3;11790:98;11786:109;11779:116;;11576:325;;;;:::o;11906:803::-;-1:-1:-1;;;;;12005:25:108;12024:5;12005:25;:::i;:::-;12001:74;11996:3;11989:87;11971:3;12124:4;12117:5;12113:16;12100:30;12139;12161:7;12139:30;:::i;:::-;12208:15;12201:23;12194:4;12185:14;;12178:47;-1:-1:-1;;;;;12261:36:108;12291:4;12280:16;;12261:36;:::i;:::-;12257:85;12250:4;12245:3;12241:14;12234:109;12386:55;12435:4;12428:5;12424:16;12417:5;12386:55;:::i;:::-;12473:4;12466;12461:3;12457:14;12450:28;12499:69;12562:4;12557:3;12553:14;12539:12;12525;12499:69;:::i;:::-;12637:4;12626:16;;;12613:30;12659:14;;;;12652:31;;;;-1:-1:-1;12487:81:108;;11906:803;-1:-1:-1;;11906:803:108:o;12714:655::-;13059:6;13048:9;13041:25;-1:-1:-1;;;;;13106:6:108;13102:55;13097:2;13086:9;13082:18;13075:83;13194:3;13189:2;13178:9;13174:18;13167:31;13235:1;13229:3;13218:9;13214:19;13207:30;13273:3;13268:2;13257:9;13253:18;13246:31;13022:4;13294:69;13358:3;13347:9;13343:19;13335:6;13294:69;:::i;13374:470::-;13619:2;13608:9;13601:21;13582:4;13645:61;13702:2;13691:9;13687:18;13679:6;13671;13645:61;:::i;:::-;13754:9;13746:6;13742:22;13737:2;13726:9;13722:18;13715:50;13782:56;13831:6;13823;13782:56;:::i;13849:315::-;14034:6;14023:9;14016:25;14077:2;14072;14061:9;14057:18;14050:30;13997:4;14097:61;14154:2;14143:9;14139:18;14131:6;14123;14097:61;:::i;14471:245::-;14538:6;14591:2;14579:9;14570:7;14566:23;14562:32;14559:52;;;14607:1;14604;14597:12;14559:52;14639:9;14633:16;14658:28;14680:5;14658:28;:::i;14721:184::-;14791:6;14844:2;14832:9;14823:7;14819:23;14815:32;14812:52;;;14860:1;14857;14850:12;14812:52;-1:-1:-1;14883:16:108;;14721:184;-1:-1:-1;14721:184:108:o;15120:663::-;15421:6;15410:9;15403:25;-1:-1:-1;;;;;15468:6:108;15464:55;15459:2;15448:9;15444:18;15437:83;15556:3;15551:2;15540:9;15536:18;15529:31;15384:4;15583:62;15640:3;15629:9;15625:19;15617:6;15609;15583:62;:::i;:::-;15693:9;15685:6;15681:22;15676:2;15665:9;15661:18;15654:50;15721:56;15770:6;15762;15721:56;:::i;:::-;15713:64;15120:663;-1:-1:-1;;;;;;;;15120:663:108:o;16002:588::-;-1:-1:-1;;;;;16101:25:108;16120:5;16101:25;:::i;:::-;16097:74;16092:3;16085:87;16067:3;16220:4;16213:5;16209:16;16196:30;16258:18;16249:7;16245:32;16308:2;16299:7;16296:15;16286:43;;16325:1;16322;16315:12;16286:43;16354:4;16345:14;;16338:26;-1:-1:-1;16407:55:108;16456:4;16445:16;;16449:5;16407:55;:::i;:::-;16494:4;16487;16482:3;16478:14;16471:28;16515:69;16578:4;16573:3;16569:14;16555:12;16541;16515:69;:::i;16595:283::-;16784:2;16773:9;16766:21;16747:4;16804:68;16868:2;16857:9;16853:18;16845:6;16804:68;:::i;16883:541::-;17156:6;17145:9;17138:25;17199:2;17194;17183:9;17179:18;17172:30;17119:4;17225:61;17282:2;17271:9;17267:18;17259:6;17251;17225:61;:::i;:::-;17334:9;17326:6;17322:22;17317:2;17306:9;17302:18;17295:50;17362:56;17411:6;17403;17362:56;:::i;:::-;17354:64;16883:541;-1:-1:-1;;;;;;;16883:541:108:o;17611:271::-;17794:6;17786;17781:3;17768:33;17750:3;17820:16;;17845:13;;;17820:16;17611:271;-1:-1:-1;17611:271:108:o;19110:287::-;19239:3;19277:6;19271:13;19293:66;19352:6;19347:3;19340:4;19332:6;19328:17;19293:66;:::i;:::-;19375:16;;;;;19110:287;-1:-1:-1;;19110:287:108:o","linkReferences":{},"immutableReferences":{"44509":[{"start":8570,"length":32},{"start":8611,"length":32},{"start":9775,"length":32}]}},"methodIdentifiers":{"ASSET_HANDLER_ROLE()":"5d62c860","DEFAULT_ADMIN_ROLE()":"a217fddf","PAUSER_ROLE()":"e63ab1e9","TSS_ROLE()":"a783c789","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","call(address,bytes,(address,bool,address,bytes,uint256))":"1becceb4","custody()":"dda79b75","deposit(address,(address,bool,address,bytes,uint256))":"726ac97c","deposit(address,uint256,address,(address,bool,address,bytes,uint256))":"102614b0","depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":"744b9b8b","depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":"d09e3b78","execute(address,bytes)":"1cff79cd","executeRevert(address,bytes,(address,uint64,bytes))":"f7ad60db","executeWithERC20(address,address,uint256,bytes)":"5131ab59","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address,address)":"c0c53b8b","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":"d0b492c3","revokeRole(bytes32,address)":"d547741f","setConnector(address)":"10188aef","setCustody(address)":"ae7a3a6f","supportsInterface(bytes4)":"01ffc9a7","tssAddress()":"5b112591","unpause()":"3f4ba83a","upgradeToAndCall(address,bytes)":"4f1ef286","zetaConnector()":"57bec62f","zetaToken()":"21e093b1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConnectorInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotWhitelistedInCustody\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Called\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET_HANDLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TSS_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tssAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"zetaToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zetaConnector_\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custody_\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The contract doesn't hold any funds and should never have active allowances.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Called(address,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"The calldata passed to the call.\",\"receiver\":\"The address of the receiver.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\"}},\"Deposited(address,address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of ETH or tokens deposited.\",\"asset\":\"The address of the ERC20 token (zero address if ETH).\",\"payload\":\"The calldata passed with the deposit.\",\"receiver\":\"The address of the receiver.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\"}},\"Executed(address,uint256,bytes)\":{\"params\":{\"data\":\"The calldata passed to the contract call.\",\"destination\":\"The address of the contract called.\",\"value\":\"The amount of ETH sent with the call.\"}},\"ExecutedWithERC20(address,address,uint256,bytes)\":{\"params\":{\"amount\":\"The amount of tokens transferred.\",\"data\":\"The calldata passed to the contract call.\",\"to\":\"The address of the contract called.\",\"token\":\"The address of the ERC20 token.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Reverted(address,address,uint256,bytes,(address,uint64,bytes))\":{\"params\":{\"amount\":\"The amount of ETH sent with the call.\",\"data\":\"The calldata passed to the contract call.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"to\":\"The address of the contract called.\",\"token\":\"The address of the ERC20 token, empty if gas token\"}},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"call(address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"deposit(address,(address,bool,address,bytes,uint256))\":{\"params\":{\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"deposit(address,uint256,address,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"Amount of tokens to deposit.\",\"asset\":\"Address of the ERC20 token.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"Amount of tokens to deposit.\",\"asset\":\"Address of the ERC20 token.\",\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"execute(address,bytes)\":{\"details\":\"This function can only be called by the TSS address and it is payable.\",\"params\":{\"data\":\"Calldata to pass to the call.\",\"destination\":\"Address to call.\"},\"returns\":{\"_0\":\"The result of the call.\"}},\"executeRevert(address,bytes,(address,uint64,bytes))\":{\"details\":\"This function can only be called by the TSS address and it is payable.\",\"params\":{\"data\":\"Calldata to pass to the call.\",\"destination\":\"Address to call.\"}},\"executeWithERC20(address,address,uint256,bytes)\":{\"details\":\"This function can only be called by the custody or connector address. It uses the ERC20 allowance system, resetting gateway allowance at the end.\",\"params\":{\"amount\":\"Amount of tokens to transfer.\",\"data\":\"Calldata to pass to the call.\",\"to\":\"Address of the contract to call.\",\"token\":\"Address of the ERC20 token.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address,address)\":{\"details\":\"Using admin to authorize upgrades and pause, and tss for tss role.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))\":{\"details\":\"This function can only be called by the custody or connector address.\",\"params\":{\"amount\":\"Amount of tokens to transfer.\",\"data\":\"Calldata to pass to the call.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"to\":\"Address of the contract to call.\",\"token\":\"Address of the ERC20 token.\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setConnector(address)\":{\"params\":{\"zetaConnector_\":\"Address of the connector contract.\"}},\"setCustody(address)\":{\"params\":{\"custody_\":\"Address of the custody contract.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"GatewayEVM\",\"version\":1},\"userdoc\":{\"errors\":{\"ApprovalFailed()\":[{\"notice\":\"Error for failed token approval.\"}],\"ConnectorInitialized()\":[{\"notice\":\"Error for already initialized connector.\"}],\"CustodyInitialized()\":[{\"notice\":\"Error for already initialized custody.\"}],\"DepositFailed()\":[{\"notice\":\"Error for failed deposit.\"}],\"ExecutionFailed()\":[{\"notice\":\"Error for failed execution.\"}],\"InsufficientERC20Amount()\":[{\"notice\":\"Error for insufficient ERC20 token amount.\"}],\"InsufficientETHAmount()\":[{\"notice\":\"Error for insufficient ETH amount.\"}],\"NotWhitelistedInCustody()\":[{\"notice\":\"Error when trying to transfer not whitelisted token to custody.\"}],\"ZeroAddress()\":[{\"notice\":\"Error for zero address input.\"}]},\"events\":{\"Called(address,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when an omnichain smart contract call is made without asset transfer.\"},\"Deposited(address,address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a deposit is made.\"},\"Executed(address,uint256,bytes)\":{\"notice\":\"Emitted when a contract call is executed.\"},\"ExecutedWithERC20(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a contract call with ERC20 tokens is executed.\"},\"Reverted(address,address,uint256,bytes,(address,uint64,bytes))\":{\"notice\":\"Emitted when a contract call is reverted.\"}},\"kind\":\"user\",\"methods\":{\"ASSET_HANDLER_ROLE()\":{\"notice\":\"New role identifier for asset handler role.\"},\"PAUSER_ROLE()\":{\"notice\":\"New role identifier for pauser role.\"},\"TSS_ROLE()\":{\"notice\":\"New role identifier for tss role.\"},\"call(address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Calls an omnichain smart contract without asset transfer.\"},\"custody()\":{\"notice\":\"The address of the custody contract.\"},\"deposit(address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ETH to the TSS address.\"},\"deposit(address,uint256,address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ERC20 tokens to the custody or connector contract.\"},\"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ETH to the TSS address and calls an omnichain smart contract.\"},\"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract.\"},\"execute(address,bytes)\":{\"notice\":\"Executes a call to a destination address without ERC20 tokens.\"},\"executeRevert(address,bytes,(address,uint64,bytes))\":{\"notice\":\"Transfers msg.value to destination contract and executes it's onRevert function.\"},\"executeWithERC20(address,address,uint256,bytes)\":{\"notice\":\"Executes a call to a destination contract using ERC20 tokens.\"},\"initialize(address,address,address)\":{\"notice\":\"Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\"},\"pause()\":{\"notice\":\"Pause contract.\"},\"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))\":{\"notice\":\"Directly transfers ERC20 tokens and calls onRevert.\"},\"setConnector(address)\":{\"notice\":\"Sets the connector contract address.\"},\"setCustody(address)\":{\"notice\":\"Sets the custody contract address.\"},\"tssAddress()\":{\"notice\":\"The address of the TSS (Threshold Signature Scheme) contract.\"},\"unpause()\":{\"notice\":\"Unpause contract.\"},\"zetaConnector()\":{\"notice\":\"The address of the ZetaConnector contract.\"},\"zetaToken()\":{\"notice\":\"The address of the Zeta token contract.\"}},\"notice\":\"The GatewayEVM contract is the endpoint to call smart contracts on external chains.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/evm/GatewayEVM.sol\":\"GatewayEVM\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/Revert.sol\":{\"keccak256\":\"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409\",\"dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY\"]},\"contracts/evm/GatewayEVM.sol\":{\"keccak256\":\"0x04f4dac61cbaa0e43d7ba3e10bc232acf3530ffe62da473de69e148d886e479c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db7bf0de61b174899c70c2a1f9b74e7a7093a820e9c05d786ef4137e6117c549\",\"dweb:/ipfs/QmViuoC93WLAwiq1F44qaWLQT4V6h96B6XfB5ZCUgLNUBg\"]},\"contracts/evm/ZetaConnectorBase.sol\":{\"keccak256\":\"0xdd289e7ac56aa09d5203fe5366aff97ac1591f45e55e9906545e99bf44ad1944\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed9aba1b7f2661645f1993a2f29b382acaedf90beca548982a89f3e124d23d53\",\"dweb:/ipfs/QmdvsKEwv9Ftyd3J8H4pBas4KjwmwpBjLxDiAABHiJ6TfX\"]},\"contracts/evm/interfaces/IERC20Custody.sol\":{\"keccak256\":\"0xd8ada536ba5aa69f38d6b2aea2a285331bda0ab8132e1e2a2132e01764566ed3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49b1e1b13a49df6f7cb3aa3b4290d9cedb3e884adbf1665fdb2951a6e37394d3\",\"dweb:/ipfs/QmT3VjYbju7rGs1xxpkqpyxqU4ftXaQdJHWb91JdwpCXoV\"]},\"contracts/evm/interfaces/IGatewayEVM.sol\":{\"keccak256\":\"0x6bee6d3bf75e7203ea02376791d1b1711e3933ecd95d94019c81d6158b43c1c3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42c16d5568e87aef1531b2d893b6b91ddfc29db7dda7c77f6e308761be1a0ffd\",\"dweb:/ipfs/QmTscYJ2sXFm5axr9CY8hFuKmYJwX2J9sW8kT131TNk4Y1\"]},\"contracts/evm/interfaces/IZetaConnector.sol\":{\"keccak256\":\"0xa08a49c014d92d720a986d47f1e9a977e528ced7d057b349d057451840864ad6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62dd7b7b30718b4302fc66eb9ed199a87e735b348eab445e8a1fa2bfde2f85ac\",\"dweb:/ipfs/QmTgcgSH9n8rjEfPRuB8W82ysfn9mGeRqqTenr5jzxqVFN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"AddressInsufficientBalance"},{"inputs":[],"type":"error","name":"ApprovalFailed"},{"inputs":[],"type":"error","name":"ConnectorInitialized"},{"inputs":[],"type":"error","name":"CustodyInitialized"},{"inputs":[],"type":"error","name":"DepositFailed"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExecutionFailed"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InsufficientERC20Amount"},{"inputs":[],"type":"error","name":"InsufficientETHAmount"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"NotWhitelistedInCustody"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Called","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"address","name":"asset","type":"address","indexed":false},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Deposited","anonymous":false},{"inputs":[{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"Executed","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"ExecutedWithERC20","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}],"indexed":false}],"type":"event","name":"Reverted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ASSET_HANDLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TSS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"call"},{"inputs":[],"stateMutability":"view","type":"function","name":"custody","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"payable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"payable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"executeRevert"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeWithERC20"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"tssAddress_","type":"address"},{"internalType":"address","name":"zetaToken_","type":"address"},{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"revertWithERC20"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address","name":"zetaConnector_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setConnector"},{"inputs":[{"internalType":"address","name":"custody_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCustody"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"tssAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaConnector","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaToken","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"call(address,bytes,(address,bool,address,bytes,uint256))":{"params":{"payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"deposit(address,(address,bool,address,bytes,uint256))":{"params":{"receiver":"Address of the receiver.","revertOptions":"Revert options."}},"deposit(address,uint256,address,(address,bool,address,bytes,uint256))":{"params":{"amount":"Amount of tokens to deposit.","asset":"Address of the ERC20 token.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":{"params":{"payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":{"params":{"amount":"Amount of tokens to deposit.","asset":"Address of the ERC20 token.","payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"execute(address,bytes)":{"details":"This function can only be called by the TSS address and it is payable.","params":{"data":"Calldata to pass to the call.","destination":"Address to call."},"returns":{"_0":"The result of the call."}},"executeRevert(address,bytes,(address,uint64,bytes))":{"details":"This function can only be called by the TSS address and it is payable.","params":{"data":"Calldata to pass to the call.","destination":"Address to call."}},"executeWithERC20(address,address,uint256,bytes)":{"details":"This function can only be called by the custody or connector address. It uses the ERC20 allowance system, resetting gateway allowance at the end.","params":{"amount":"Amount of tokens to transfer.","data":"Calldata to pass to the call.","to":"Address of the contract to call.","token":"Address of the ERC20 token."}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address,address)":{"details":"Using admin to authorize upgrades and pause, and tss for tss role."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":{"details":"This function can only be called by the custody or connector address.","params":{"amount":"Amount of tokens to transfer.","data":"Calldata to pass to the call.","revertContext":"Revert context to pass to onRevert.","to":"Address of the contract to call.","token":"Address of the ERC20 token."}},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"setConnector(address)":{"params":{"zetaConnector_":"Address of the connector contract."}},"setCustody(address)":{"params":{"custody_":"Address of the custody contract."}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"ASSET_HANDLER_ROLE()":{"notice":"New role identifier for asset handler role."},"PAUSER_ROLE()":{"notice":"New role identifier for pauser role."},"TSS_ROLE()":{"notice":"New role identifier for tss role."},"call(address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Calls an omnichain smart contract without asset transfer."},"custody()":{"notice":"The address of the custody contract."},"deposit(address,(address,bool,address,bytes,uint256))":{"notice":"Deposits ETH to the TSS address."},"deposit(address,uint256,address,(address,bool,address,bytes,uint256))":{"notice":"Deposits ERC20 tokens to the custody or connector contract."},"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Deposits ETH to the TSS address and calls an omnichain smart contract."},"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract."},"execute(address,bytes)":{"notice":"Executes a call to a destination address without ERC20 tokens."},"executeRevert(address,bytes,(address,uint64,bytes))":{"notice":"Transfers msg.value to destination contract and executes it's onRevert function."},"executeWithERC20(address,address,uint256,bytes)":{"notice":"Executes a call to a destination contract using ERC20 tokens."},"initialize(address,address,address)":{"notice":"Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE."},"pause()":{"notice":"Pause contract."},"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":{"notice":"Directly transfers ERC20 tokens and calls onRevert."},"setConnector(address)":{"notice":"Sets the connector contract address."},"setCustody(address)":{"notice":"Sets the custody contract address."},"tssAddress()":{"notice":"The address of the TSS (Threshold Signature Scheme) contract."},"unpause()":{"notice":"Unpause contract."},"zetaConnector()":{"notice":"The address of the ZetaConnector contract."},"zetaToken()":{"notice":"The address of the Zeta token contract."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/evm/GatewayEVM.sol":"GatewayEVM"},"evmVersion":"london","libraries":{}},"sources":{"contracts/Revert.sol":{"keccak256":"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b","urls":["bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409","dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY"],"license":"MIT"},"contracts/evm/GatewayEVM.sol":{"keccak256":"0x04f4dac61cbaa0e43d7ba3e10bc232acf3530ffe62da473de69e148d886e479c","urls":["bzz-raw://db7bf0de61b174899c70c2a1f9b74e7a7093a820e9c05d786ef4137e6117c549","dweb:/ipfs/QmViuoC93WLAwiq1F44qaWLQT4V6h96B6XfB5ZCUgLNUBg"],"license":"MIT"},"contracts/evm/ZetaConnectorBase.sol":{"keccak256":"0xdd289e7ac56aa09d5203fe5366aff97ac1591f45e55e9906545e99bf44ad1944","urls":["bzz-raw://ed9aba1b7f2661645f1993a2f29b382acaedf90beca548982a89f3e124d23d53","dweb:/ipfs/QmdvsKEwv9Ftyd3J8H4pBas4KjwmwpBjLxDiAABHiJ6TfX"],"license":"MIT"},"contracts/evm/interfaces/IERC20Custody.sol":{"keccak256":"0xd8ada536ba5aa69f38d6b2aea2a285331bda0ab8132e1e2a2132e01764566ed3","urls":["bzz-raw://49b1e1b13a49df6f7cb3aa3b4290d9cedb3e884adbf1665fdb2951a6e37394d3","dweb:/ipfs/QmT3VjYbju7rGs1xxpkqpyxqU4ftXaQdJHWb91JdwpCXoV"],"license":"MIT"},"contracts/evm/interfaces/IGatewayEVM.sol":{"keccak256":"0x6bee6d3bf75e7203ea02376791d1b1711e3933ecd95d94019c81d6158b43c1c3","urls":["bzz-raw://42c16d5568e87aef1531b2d893b6b91ddfc29db7dda7c77f6e308761be1a0ffd","dweb:/ipfs/QmTscYJ2sXFm5axr9CY8hFuKmYJwX2J9sW8kT131TNk4Y1"],"license":"MIT"},"contracts/evm/interfaces/IZetaConnector.sol":{"keccak256":"0xa08a49c014d92d720a986d47f1e9a977e528ced7d057b349d057451840864ad6","urls":["bzz-raw://62dd7b7b30718b4302fc66eb9ed199a87e735b348eab445e8a1fa2bfde2f85ac","dweb:/ipfs/QmTgcgSH9n8rjEfPRuB8W82ysfn9mGeRqqTenr5jzxqVFN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol":{"keccak256":"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97","urls":["bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007","dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol":{"keccak256":"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74","urls":["bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45","dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/AccessControl.sol":{"keccak256":"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308","urls":["bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80","dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol":{"keccak256":"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd","urls":["bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc","dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":523,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"custody","offset":0,"slot":"0","type":"t_address"},{"astId":526,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"tssAddress","offset":0,"slot":"1","type":"t_address"},{"astId":529,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"zetaConnector","offset":0,"slot":"2","type":"t_address"},{"astId":532,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"zetaToken","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"ast":{"absolutePath":"contracts/evm/GatewayEVM.sol","id":1449,"exportedSymbols":{"AccessControlUpgradeable":[44235],"Address":[47717],"ContextUpgradeable":[44717],"ERC165Upgradeable":[45062],"ERC1967Utils":[46098],"GatewayEVM":[1448],"IAccessControl":[45441],"IERC1822Proxiable":[45620],"IERC20":[47066],"IERC20Custody":[2206],"IERC20Permit":[47174],"IGatewayEVM":[2415],"Initializable":[44489],"PausableUpgradeable":[44893],"ReentrancyGuardUpgradeable":[45022],"RevertContext":[21],"RevertOptions":[13],"Revertable":[30],"SafeERC20":[47464],"UUPSUpgradeable":[44671],"ZetaConnectorBase":[1644]},"nodeType":"SourceUnit","src":"32:14874:2","nodes":[{"id":486,"nodeType":"PragmaDirective","src":"32:23:2","nodes":[],"literals":["solidity","0.8",".26"]},{"id":490,"nodeType":"ImportDirective","src":"57:86:2","nodes":[],"absolutePath":"contracts/Revert.sol","file":"../../contracts/Revert.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":31,"symbolAliases":[{"foreign":{"id":487,"name":"RevertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"66:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":488,"name":"RevertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"81:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":489,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"96:10:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":492,"nodeType":"ImportDirective","src":"144:60:2","nodes":[],"absolutePath":"contracts/evm/ZetaConnectorBase.sol","file":"./ZetaConnectorBase.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":1645,"symbolAliases":[{"foreign":{"id":491,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"153:17:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":494,"nodeType":"ImportDirective","src":"205:63:2","nodes":[],"absolutePath":"contracts/evm/interfaces/IERC20Custody.sol","file":"./interfaces/IERC20Custody.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":2207,"symbolAliases":[{"foreign":{"id":493,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"214:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":496,"nodeType":"ImportDirective","src":"269:59:2","nodes":[],"absolutePath":"contracts/evm/interfaces/IGatewayEVM.sol","file":"./interfaces/IGatewayEVM.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":2416,"symbolAliases":[{"foreign":{"id":495,"name":"IGatewayEVM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"278:11:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":497,"nodeType":"ImportDirective","src":"330:81:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44236,"symbolAliases":[],"unitAlias":""},{"id":498,"nodeType":"ImportDirective","src":"412:75:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44490,"symbolAliases":[],"unitAlias":""},{"id":499,"nodeType":"ImportDirective","src":"488:77:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44672,"symbolAliases":[],"unitAlias":""},{"id":500,"nodeType":"ImportDirective","src":"566:75:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44894,"symbolAliases":[],"unitAlias":""},{"id":501,"nodeType":"ImportDirective","src":"642:82:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":45023,"symbolAliases":[],"unitAlias":""},{"id":502,"nodeType":"ImportDirective","src":"725:56:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":47067,"symbolAliases":[],"unitAlias":""},{"id":503,"nodeType":"ImportDirective","src":"782:65:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":47465,"symbolAliases":[],"unitAlias":""},{"id":1448,"nodeType":"ContractDefinition","src":"1053:13852:2","nodes":[{"id":520,"nodeType":"UsingForDirective","src":"1225:27:2","nodes":[],"global":false,"libraryName":{"id":517,"name":"SafeERC20","nameLocations":["1231:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":47464,"src":"1231:9:2"},"typeName":{"id":519,"nodeType":"UserDefinedTypeName","pathNode":{"id":518,"name":"IERC20","nameLocations":["1245:6:2"],"nodeType":"IdentifierPath","referencedDeclaration":47066,"src":"1245:6:2"},"referencedDeclaration":47066,"src":"1245:6:2","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}}},{"id":523,"nodeType":"VariableDeclaration","src":"1311:22:2","nodes":[],"constant":false,"documentation":{"id":521,"nodeType":"StructuredDocumentation","src":"1258:48:2","text":"@notice The address of the custody contract."},"functionSelector":"dda79b75","mutability":"mutable","name":"custody","nameLocation":"1326:7:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":522,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":526,"nodeType":"VariableDeclaration","src":"1417:25:2","nodes":[],"constant":false,"documentation":{"id":524,"nodeType":"StructuredDocumentation","src":"1339:73:2","text":"@notice The address of the TSS (Threshold Signature Scheme) contract."},"functionSelector":"5b112591","mutability":"mutable","name":"tssAddress","nameLocation":"1432:10:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"1417:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":529,"nodeType":"VariableDeclaration","src":"1507:28:2","nodes":[],"constant":false,"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"1448:54:2","text":"@notice The address of the ZetaConnector contract."},"functionSelector":"57bec62f","mutability":"mutable","name":"zetaConnector","nameLocation":"1522:13:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":528,"name":"address","nodeType":"ElementaryTypeName","src":"1507:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":532,"nodeType":"VariableDeclaration","src":"1597:24:2","nodes":[],"constant":false,"documentation":{"id":530,"nodeType":"StructuredDocumentation","src":"1541:51:2","text":"@notice The address of the Zeta token contract."},"functionSelector":"21e093b1","mutability":"mutable","name":"zetaToken","nameLocation":"1612:9:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":531,"name":"address","nodeType":"ElementaryTypeName","src":"1597:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":538,"nodeType":"VariableDeclaration","src":"1678:56:2","nodes":[],"constant":true,"documentation":{"id":533,"nodeType":"StructuredDocumentation","src":"1628:45:2","text":"@notice New role identifier for tss role."},"functionSelector":"a783c789","mutability":"constant","name":"TSS_ROLE","nameLocation":"1702:8:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":534,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1678:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5453535f524f4c45","id":536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1723:10:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb","typeString":"literal_string \"TSS_ROLE\""},"value":"TSS_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb","typeString":"literal_string \"TSS_ROLE\""}],"id":535,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1713:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:21:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":544,"nodeType":"VariableDeclaration","src":"1800:76:2","nodes":[],"constant":true,"documentation":{"id":539,"nodeType":"StructuredDocumentation","src":"1740:55:2","text":"@notice New role identifier for asset handler role."},"functionSelector":"5d62c860","mutability":"constant","name":"ASSET_HANDLER_ROLE","nameLocation":"1824:18:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":540,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1800:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"41535345545f48414e444c45525f524f4c45","id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1855:20:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9","typeString":"literal_string \"ASSET_HANDLER_ROLE\""},"value":"ASSET_HANDLER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9","typeString":"literal_string \"ASSET_HANDLER_ROLE\""}],"id":541,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1845:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1845:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":550,"nodeType":"VariableDeclaration","src":"1935:62:2","nodes":[],"constant":true,"documentation":{"id":545,"nodeType":"StructuredDocumentation","src":"1882:48:2","text":"@notice New role identifier for pauser role."},"functionSelector":"e63ab1e9","mutability":"constant","name":"PAUSER_ROLE","nameLocation":"1959:11:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1935:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5041555345525f524f4c45","id":548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1983:13:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""},"value":"PAUSER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""}],"id":547,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1973:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1973:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":558,"nodeType":"FunctionDefinition","src":"2057:53:2","nodes":[],"body":{"id":557,"nodeType":"Block","src":"2071:39:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":554,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44457,"src":"2081:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":556,"nodeType":"ExpressionStatement","src":"2081:22:2"}]},"documentation":{"id":551,"nodeType":"StructuredDocumentation","src":"2004:48:2","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":552,"nodeType":"ParameterList","parameters":[],"src":"2068:2:2"},"returnParameters":{"id":553,"nodeType":"ParameterList","parameters":[],"src":"2071:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":624,"nodeType":"FunctionDefinition","src":"2308:543:2","nodes":[],"body":{"id":623,"nodeType":"Block","src":"2404:447:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":570,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2418:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2441:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2433:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":571,"name":"address","nodeType":"ElementaryTypeName","src":"2433:7:2","typeDescriptions":{}}},"id":574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2433:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2418:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":576,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"2447:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2469:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2461:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":577,"name":"address","nodeType":"ElementaryTypeName","src":"2461:7:2","typeDescriptions":{}}},"id":580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2447:24:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2418:53:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":587,"nodeType":"IfStatement","src":"2414:104:2","trueBody":{"id":586,"nodeType":"Block","src":"2473:45:2","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":583,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"2494:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2494:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":585,"nodeType":"RevertStatement","src":"2487:20:2"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":588,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44543,"src":"2527:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2527:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":590,"nodeType":"ExpressionStatement","src":"2527:24:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":591,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44933,"src":"2561:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2561:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":593,"nodeType":"ExpressionStatement","src":"2561:24:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":594,"name":"__AccessControl_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43936,"src":"2595:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2595:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":596,"nodeType":"ExpressionStatement","src":"2595:22:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":597,"name":"__Pausable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44769,"src":"2627:15:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2627:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":599,"nodeType":"ExpressionStatement","src":"2627:17:2"},{"expression":{"arguments":[{"id":601,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2666:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":602,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":565,"src":"2686:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":600,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2655:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2655:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":604,"nodeType":"ExpressionStatement","src":"2655:38:2"},{"expression":{"arguments":[{"id":606,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"2714:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":607,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":565,"src":"2727:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":605,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2703:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2703:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":609,"nodeType":"ExpressionStatement","src":"2703:31:2"},{"expression":{"id":612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":610,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"2744:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":611,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2757:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2744:24:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":613,"nodeType":"ExpressionStatement","src":"2744:24:2"},{"expression":{"arguments":[{"id":615,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"2789:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":616,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2799:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":614,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2778:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2778:33:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":618,"nodeType":"ExpressionStatement","src":"2778:33:2"},{"expression":{"id":621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":619,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"2822:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":620,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"2834:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2822:22:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":622,"nodeType":"ExpressionStatement","src":"2822:22:2"}]},"documentation":{"id":559,"nodeType":"StructuredDocumentation","src":"2116:187:2","text":"@notice Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\n @dev Using admin to authorize upgrades and pause, and tss for tss role."},"functionSelector":"c0c53b8b","implemented":true,"kind":"function","modifiers":[{"id":568,"kind":"modifierInvocation","modifierName":{"id":567,"name":"initializer","nameLocations":["2392:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":44343,"src":"2392:11:2"},"nodeType":"ModifierInvocation","src":"2392:11:2"}],"name":"initialize","nameLocation":"2317:10:2","parameters":{"id":566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":561,"mutability":"mutable","name":"tssAddress_","nameLocation":"2336:11:2","nodeType":"VariableDeclaration","scope":624,"src":"2328:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":560,"name":"address","nodeType":"ElementaryTypeName","src":"2328:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":563,"mutability":"mutable","name":"zetaToken_","nameLocation":"2357:10:2","nodeType":"VariableDeclaration","scope":624,"src":"2349:18:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":562,"name":"address","nodeType":"ElementaryTypeName","src":"2349:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":565,"mutability":"mutable","name":"admin_","nameLocation":"2377:6:2","nodeType":"VariableDeclaration","scope":624,"src":"2369:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":564,"name":"address","nodeType":"ElementaryTypeName","src":"2369:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2327:57:2"},"returnParameters":{"id":569,"nodeType":"ParameterList","parameters":[],"src":"2404:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":635,"nodeType":"FunctionDefinition","src":"3000:104:2","nodes":[],"body":{"id":634,"nodeType":"Block","src":"3101:3:2","nodes":[],"statements":[]},"baseFunctions":[44625],"documentation":{"id":625,"nodeType":"StructuredDocumentation","src":"2857:138:2","text":"@dev Authorizes the upgrade of the contract, sender must be owner.\n @param newImplementation Address of the new implementation."},"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":631,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"3081:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":632,"kind":"modifierInvocation","modifierName":{"id":630,"name":"onlyRole","nameLocations":["3072:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3072:8:2"},"nodeType":"ModifierInvocation","src":"3072:28:2"}],"name":"_authorizeUpgrade","nameLocation":"3009:17:2","overrides":{"id":629,"nodeType":"OverrideSpecifier","overrides":[],"src":"3063:8:2"},"parameters":{"id":628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":627,"mutability":"mutable","name":"newImplementation","nameLocation":"3035:17:2","nodeType":"VariableDeclaration","scope":635,"src":"3027:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":626,"name":"address","nodeType":"ElementaryTypeName","src":"3027:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3026:27:2"},"returnParameters":{"id":633,"nodeType":"ParameterList","parameters":[],"src":"3101:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":666,"nodeType":"FunctionDefinition","src":"3319:261:2","nodes":[],"body":{"id":665,"nodeType":"Block","src":"3411:169:2","nodes":[],"statements":[{"assignments":[646,648],"declarations":[{"constant":false,"id":646,"mutability":"mutable","name":"success","nameLocation":"3427:7:2","nodeType":"VariableDeclaration","scope":665,"src":"3422:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":645,"name":"bool","nodeType":"ElementaryTypeName","src":"3422:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":648,"mutability":"mutable","name":"result","nameLocation":"3449:6:2","nodeType":"VariableDeclaration","scope":665,"src":"3436:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":647,"name":"bytes","nodeType":"ElementaryTypeName","src":"3436:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":656,"initialValue":{"arguments":[{"id":654,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"3496:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":649,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"3459:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3471:4:2","memberName":"call","nodeType":"MemberAccess","src":"3459:16:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":651,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3484:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3488:5:2","memberName":"value","nodeType":"MemberAccess","src":"3484:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3459:36:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3459:42:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3421:80:2"},{"condition":{"id":658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3515:8:2","subExpression":{"id":657,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"3516:7:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":662,"nodeType":"IfStatement","src":"3511:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":659,"name":"ExecutionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"3532:15:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3532:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":661,"nodeType":"RevertStatement","src":"3525:24:2"}},{"expression":{"id":663,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":648,"src":"3567:6:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":644,"id":664,"nodeType":"Return","src":"3560:13:2"}]},"documentation":{"id":636,"nodeType":"StructuredDocumentation","src":"3110:204:2","text":"@dev Internal function to execute a call to a destination address.\n @param destination Address to call.\n @param data Calldata to pass to the call.\n @return The result of the call."},"implemented":true,"kind":"function","modifiers":[],"name":"_execute","nameLocation":"3328:8:2","parameters":{"id":641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":638,"mutability":"mutable","name":"destination","nameLocation":"3345:11:2","nodeType":"VariableDeclaration","scope":666,"src":"3337:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":637,"name":"address","nodeType":"ElementaryTypeName","src":"3337:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":640,"mutability":"mutable","name":"data","nameLocation":"3373:4:2","nodeType":"VariableDeclaration","scope":666,"src":"3358:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":639,"name":"bytes","nodeType":"ElementaryTypeName","src":"3358:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3336:42:2"},"returnParameters":{"id":644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":666,"src":"3397:12:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":642,"name":"bytes","nodeType":"ElementaryTypeName","src":"3397:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3396:14:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":677,"nodeType":"FunctionDefinition","src":"3618:73:2","nodes":[],"body":{"id":676,"nodeType":"Block","src":"3666:25:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":673,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44868,"src":"3676:6:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3676:8:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":675,"nodeType":"ExpressionStatement","src":"3676:8:2"}]},"documentation":{"id":667,"nodeType":"StructuredDocumentation","src":"3586:27:2","text":"@notice Pause contract."},"functionSelector":"8456cb59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":670,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"3653:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":671,"kind":"modifierInvocation","modifierName":{"id":669,"name":"onlyRole","nameLocations":["3644:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3644:8:2"},"nodeType":"ModifierInvocation","src":"3644:21:2"}],"name":"pause","nameLocation":"3627:5:2","parameters":{"id":668,"nodeType":"ParameterList","parameters":[],"src":"3632:2:2"},"returnParameters":{"id":672,"nodeType":"ParameterList","parameters":[],"src":"3666:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":688,"nodeType":"FunctionDefinition","src":"3731:77:2","nodes":[],"body":{"id":687,"nodeType":"Block","src":"3781:27:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":684,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44892,"src":"3791:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3791:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":686,"nodeType":"ExpressionStatement","src":"3791:10:2"}]},"documentation":{"id":678,"nodeType":"StructuredDocumentation","src":"3697:29:2","text":"@notice Unpause contract."},"functionSelector":"3f4ba83a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":681,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"3768:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":682,"kind":"modifierInvocation","modifierName":{"id":680,"name":"onlyRole","nameLocations":["3759:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3759:8:2"},"nodeType":"ModifierInvocation","src":"3759:21:2"}],"name":"unpause","nameLocation":"3740:7:2","parameters":{"id":679,"nodeType":"ParameterList","parameters":[],"src":"3747:2:2"},"returnParameters":{"id":683,"nodeType":"ParameterList","parameters":[],"src":"3781:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":752,"nodeType":"FunctionDefinition","src":"4089:560:2","nodes":[],"body":{"id":751,"nodeType":"Block","src":"4327:322:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":706,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4341:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4364:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4356:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":707,"name":"address","nodeType":"ElementaryTypeName","src":"4356:7:2","typeDescriptions":{}}},"id":710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4356:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4341:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":715,"nodeType":"IfStatement","src":"4337:51:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":712,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"4375:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4375:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":714,"nodeType":"RevertStatement","src":"4368:20:2"}},{"assignments":[717,null],"declarations":[{"constant":false,"id":717,"mutability":"mutable","name":"success","nameLocation":"4404:7:2","nodeType":"VariableDeclaration","scope":751,"src":"4399:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":716,"name":"bool","nodeType":"ElementaryTypeName","src":"4399:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":725,"initialValue":{"arguments":[{"hexValue":"","id":723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4453:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":718,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4416:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4428:4:2","memberName":"call","nodeType":"MemberAccess","src":"4416:16:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":720,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4441:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4445:5:2","memberName":"value","nodeType":"MemberAccess","src":"4441:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4416:36:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4416:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4398:58:2"},{"condition":{"id":727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4470:8:2","subExpression":{"id":726,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"4471:7:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":731,"nodeType":"IfStatement","src":"4466:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":728,"name":"ExecutionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"4487:15:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4487:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":730,"nodeType":"RevertStatement","src":"4480:24:2"}},{"expression":{"arguments":[{"id":736,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"4547:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":733,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4525:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":732,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"4514:10:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Revertable_$30_$","typeString":"type(contract Revertable)"}},"id":734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4514:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Revertable_$30","typeString":"contract Revertable"}},"id":735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4538:8:2","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":29,"src":"4514:32:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4514:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":738,"nodeType":"ExpressionStatement","src":"4514:47:2"},{"eventCall":{"arguments":[{"id":740,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4586:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4607:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4599:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":741,"name":"address","nodeType":"ElementaryTypeName","src":"4599:7:2","typeDescriptions":{}}},"id":744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4599:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":745,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4611:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4615:5:2","memberName":"value","nodeType":"MemberAccess","src":"4611:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":747,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"4622:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":748,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"4628:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"id":739,"name":"Reverted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"4577:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory,struct RevertContext memory)"}},"id":749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4577:65:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":750,"nodeType":"EmitStatement","src":"4572:70:2"}]},"baseFunctions":[2330],"documentation":{"id":689,"nodeType":"StructuredDocumentation","src":"3814:270:2","text":"@notice Transfers msg.value to destination contract and executes it's onRevert function.\n @dev This function can only be called by the TSS address and it is payable.\n @param destination Address to call.\n @param data Calldata to pass to the call."},"functionSelector":"f7ad60db","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":699,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"4270:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":700,"kind":"modifierInvocation","modifierName":{"id":698,"name":"onlyRole","nameLocations":["4261:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"4261:8:2"},"nodeType":"ModifierInvocation","src":"4261:18:2"},{"id":702,"kind":"modifierInvocation","modifierName":{"id":701,"name":"whenNotPaused","nameLocations":["4288:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"4288:13:2"},"nodeType":"ModifierInvocation","src":"4288:13:2"},{"id":704,"kind":"modifierInvocation","modifierName":{"id":703,"name":"nonReentrant","nameLocations":["4310:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"4310:12:2"},"nodeType":"ModifierInvocation","src":"4310:12:2"}],"name":"executeRevert","nameLocation":"4098:13:2","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"mutability":"mutable","name":"destination","nameLocation":"4129:11:2","nodeType":"VariableDeclaration","scope":752,"src":"4121:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":690,"name":"address","nodeType":"ElementaryTypeName","src":"4121:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":693,"mutability":"mutable","name":"data","nameLocation":"4165:4:2","nodeType":"VariableDeclaration","scope":752,"src":"4150:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":692,"name":"bytes","nodeType":"ElementaryTypeName","src":"4150:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":696,"mutability":"mutable","name":"revertContext","nameLocation":"4202:13:2","nodeType":"VariableDeclaration","scope":752,"src":"4179:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":695,"nodeType":"UserDefinedTypeName","pathNode":{"id":694,"name":"RevertContext","nameLocations":["4179:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"4179:13:2"},"referencedDeclaration":21,"src":"4179:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"4111:110:2"},"returnParameters":{"id":705,"nodeType":"ParameterList","parameters":[],"src":"4327:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":796,"nodeType":"FunctionDefinition","src":"4952:424:2","nodes":[],"body":{"id":795,"nodeType":"Block","src":"5171:205:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":769,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5185:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5208:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5200:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":770,"name":"address","nodeType":"ElementaryTypeName","src":"5200:7:2","typeDescriptions":{}}},"id":773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5200:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5185:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":778,"nodeType":"IfStatement","src":"5181:51:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":775,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"5219:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5219:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":777,"nodeType":"RevertStatement","src":"5212:20:2"}},{"assignments":[780],"declarations":[{"constant":false,"id":780,"mutability":"mutable","name":"result","nameLocation":"5255:6:2","nodeType":"VariableDeclaration","scope":795,"src":"5242:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":779,"name":"bytes","nodeType":"ElementaryTypeName","src":"5242:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":785,"initialValue":{"arguments":[{"id":782,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5273:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":783,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"5286:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":781,"name":"_execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"5264:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes calldata) returns (bytes memory)"}},"id":784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5264:27:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5242:49:2"},{"eventCall":{"arguments":[{"id":787,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5316:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":788,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5329:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5333:5:2","memberName":"value","nodeType":"MemberAccess","src":"5329:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":790,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"5340:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":786,"name":"Executed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"5307:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory)"}},"id":791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5307:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":792,"nodeType":"EmitStatement","src":"5302:43:2"},{"expression":{"id":793,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":780,"src":"5363:6:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":768,"id":794,"nodeType":"Return","src":"5356:13:2"}]},"baseFunctions":[2340],"documentation":{"id":753,"nodeType":"StructuredDocumentation","src":"4655:292:2","text":"@notice Executes a call to a destination address without ERC20 tokens.\n @dev This function can only be called by the TSS address and it is payable.\n @param destination Address to call.\n @param data Calldata to pass to the call.\n @return The result of the call."},"functionSelector":"1cff79cd","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":760,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"5083:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":761,"kind":"modifierInvocation","modifierName":{"id":759,"name":"onlyRole","nameLocations":["5074:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"5074:8:2"},"nodeType":"ModifierInvocation","src":"5074:18:2"},{"id":763,"kind":"modifierInvocation","modifierName":{"id":762,"name":"whenNotPaused","nameLocations":["5101:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"5101:13:2"},"nodeType":"ModifierInvocation","src":"5101:13:2"},{"id":765,"kind":"modifierInvocation","modifierName":{"id":764,"name":"nonReentrant","nameLocations":["5123:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"5123:12:2"},"nodeType":"ModifierInvocation","src":"5123:12:2"}],"name":"execute","nameLocation":"4961:7:2","parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":755,"mutability":"mutable","name":"destination","nameLocation":"4986:11:2","nodeType":"VariableDeclaration","scope":796,"src":"4978:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":754,"name":"address","nodeType":"ElementaryTypeName","src":"4978:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":757,"mutability":"mutable","name":"data","nameLocation":"5022:4:2","nodeType":"VariableDeclaration","scope":796,"src":"5007:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":756,"name":"bytes","nodeType":"ElementaryTypeName","src":"5007:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4968:64:2"},"returnParameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":796,"src":"5153:12:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":766,"name":"bytes","nodeType":"ElementaryTypeName","src":"5153:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5152:14:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":897,"nodeType":"FunctionDefinition","src":"5834:1032:2","nodes":[],"body":{"id":896,"nodeType":"Block","src":"6061:805:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6075:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6085:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6075:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":821,"nodeType":"IfStatement","src":"6071:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":818,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"6095:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6095:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":820,"nodeType":"RevertStatement","src":"6088:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":822,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6134:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6148:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6140:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":823,"name":"address","nodeType":"ElementaryTypeName","src":"6140:7:2","typeDescriptions":{}}},"id":826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6134:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":831,"nodeType":"IfStatement","src":"6130:42:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":828,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"6159:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6159:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":830,"nodeType":"RevertStatement","src":"6152:20:2"}},{"condition":{"id":836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6245:25:2","subExpression":{"arguments":[{"id":833,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6260:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":834,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6267:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":832,"name":"resetApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"6246:13:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) returns (bool)"}},"id":835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6246:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":840,"nodeType":"IfStatement","src":"6241:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":837,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6279:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6279:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":839,"nodeType":"RevertStatement","src":"6272:23:2"}},{"condition":{"id":848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6309:34:2","subExpression":{"arguments":[{"id":845,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6332:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":846,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6336:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":842,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6317:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":841,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"6310:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6310:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6324:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"6310:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6310:33:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":852,"nodeType":"IfStatement","src":"6305:63:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":849,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6352:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6352:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":851,"nodeType":"RevertStatement","src":"6345:23:2"}},{"expression":{"arguments":[{"id":854,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6438:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":855,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"6442:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":853,"name":"_execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"6429:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes calldata) returns (bytes memory)"}},"id":856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6429:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":857,"nodeType":"ExpressionStatement","src":"6429:18:2"},{"condition":{"id":862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6488:25:2","subExpression":{"arguments":[{"id":859,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6503:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":860,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6510:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":858,"name":"resetApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"6489:13:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) returns (bool)"}},"id":861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6489:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":866,"nodeType":"IfStatement","src":"6484:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":863,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6522:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6522:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":865,"nodeType":"RevertStatement","src":"6515:23:2"}},{"assignments":[868],"declarations":[{"constant":false,"id":868,"mutability":"mutable","name":"remainingBalance","nameLocation":"6637:16:2","nodeType":"VariableDeclaration","scope":896,"src":"6629:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":867,"name":"uint256","nodeType":"ElementaryTypeName","src":"6629:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":878,"initialValue":{"arguments":[{"arguments":[{"id":875,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6688:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}],"id":874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6680:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":873,"name":"address","nodeType":"ElementaryTypeName","src":"6680:7:2","typeDescriptions":{}}},"id":876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6680:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":870,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6663:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":869,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"6656:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6656:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6670:9:2","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":47023,"src":"6656:23:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6656:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6629:65:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":879,"name":"remainingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6708:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6727:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6708:20:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":888,"nodeType":"IfStatement","src":"6704:98:2","trueBody":{"id":887,"nodeType":"Block","src":"6730:72:2","statements":[{"expression":{"arguments":[{"id":883,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6767:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":884,"name":"remainingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6774:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":882,"name":"transferToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1447,"src":"6744:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6744:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":886,"nodeType":"ExpressionStatement","src":"6744:47:2"}]}},{"eventCall":{"arguments":[{"id":890,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6835:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":891,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6842:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":892,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6846:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":893,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"6854:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":889,"name":"ExecutedWithERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2244,"src":"6817:17:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6817:42:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":895,"nodeType":"EmitStatement","src":"6812:47:2"}]},"baseFunctions":[2319],"documentation":{"id":797,"nodeType":"StructuredDocumentation","src":"5382:447:2","text":"@notice Executes a call to a destination contract using ERC20 tokens.\n @dev This function can only be called by the custody or connector address.\n It uses the ERC20 allowance system, resetting gateway allowance at the end.\n @param token Address of the ERC20 token.\n @param to Address of the contract to call.\n @param amount Amount of tokens to transfer.\n @param data Calldata to pass to the call."},"functionSelector":"5131ab59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":808,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"5994:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":809,"kind":"modifierInvocation","modifierName":{"id":807,"name":"onlyRole","nameLocations":["5985:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"5985:8:2"},"nodeType":"ModifierInvocation","src":"5985:28:2"},{"id":811,"kind":"modifierInvocation","modifierName":{"id":810,"name":"whenNotPaused","nameLocations":["6022:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"6022:13:2"},"nodeType":"ModifierInvocation","src":"6022:13:2"},{"id":813,"kind":"modifierInvocation","modifierName":{"id":812,"name":"nonReentrant","nameLocations":["6044:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"6044:12:2"},"nodeType":"ModifierInvocation","src":"6044:12:2"}],"name":"executeWithERC20","nameLocation":"5843:16:2","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"token","nameLocation":"5877:5:2","nodeType":"VariableDeclaration","scope":897,"src":"5869:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":798,"name":"address","nodeType":"ElementaryTypeName","src":"5869:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":801,"mutability":"mutable","name":"to","nameLocation":"5900:2:2","nodeType":"VariableDeclaration","scope":897,"src":"5892:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":800,"name":"address","nodeType":"ElementaryTypeName","src":"5892:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":803,"mutability":"mutable","name":"amount","nameLocation":"5920:6:2","nodeType":"VariableDeclaration","scope":897,"src":"5912:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":802,"name":"uint256","nodeType":"ElementaryTypeName","src":"5912:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":805,"mutability":"mutable","name":"data","nameLocation":"5951:4:2","nodeType":"VariableDeclaration","scope":897,"src":"5936:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":804,"name":"bytes","nodeType":"ElementaryTypeName","src":"5936:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5859:102:2"},"returnParameters":{"id":814,"nodeType":"ParameterList","parameters":[],"src":"6061:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":963,"nodeType":"FunctionDefinition","src":"7290:562:2","nodes":[],"body":{"id":962,"nodeType":"Block","src":"7564:288:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":919,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7578:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7588:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7578:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":925,"nodeType":"IfStatement","src":"7574:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":922,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"7598:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7598:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":924,"nodeType":"RevertStatement","src":"7591:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":926,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7637:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7651:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7643:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":927,"name":"address","nodeType":"ElementaryTypeName","src":"7643:7:2","typeDescriptions":{}}},"id":930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7643:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7637:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":935,"nodeType":"IfStatement","src":"7633:42:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":932,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"7662:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7662:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":934,"nodeType":"RevertStatement","src":"7655:20:2"}},{"expression":{"arguments":[{"arguments":[{"id":942,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7721:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7713:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":940,"name":"address","nodeType":"ElementaryTypeName","src":"7713:7:2","typeDescriptions":{}}},"id":943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7713:11:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":944,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7726:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":937,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":900,"src":"7693:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":936,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"7686:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7686:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7700:12:2","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":47224,"src":"7686:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,uint256)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7686:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":946,"nodeType":"ExpressionStatement","src":"7686:47:2"},{"expression":{"arguments":[{"id":951,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":909,"src":"7767:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":948,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7754:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":947,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"7743:10:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Revertable_$30_$","typeString":"type(contract Revertable)"}},"id":949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7743:14:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Revertable_$30","typeString":"contract Revertable"}},"id":950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7758:8:2","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":29,"src":"7743:23:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7743:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":953,"nodeType":"ExpressionStatement","src":"7743:38:2"},{"eventCall":{"arguments":[{"id":955,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7806:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":956,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":900,"src":"7810:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":957,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7817:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":958,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":906,"src":"7825:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":959,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":909,"src":"7831:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"id":954,"name":"Reverted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"7797:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory,struct RevertContext memory)"}},"id":960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7797:48:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":961,"nodeType":"EmitStatement","src":"7792:53:2"}]},"baseFunctions":[2355],"documentation":{"id":898,"nodeType":"StructuredDocumentation","src":"6872:413:2","text":"@notice Directly transfers ERC20 tokens and calls onRevert.\n @dev This function can only be called by the custody or connector address.\n @param token Address of the ERC20 token.\n @param to Address of the contract to call.\n @param amount Amount of tokens to transfer.\n @param data Calldata to pass to the call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"d0b492c3","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":912,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"7497:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":913,"kind":"modifierInvocation","modifierName":{"id":911,"name":"onlyRole","nameLocations":["7488:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"7488:8:2"},"nodeType":"ModifierInvocation","src":"7488:28:2"},{"id":915,"kind":"modifierInvocation","modifierName":{"id":914,"name":"whenNotPaused","nameLocations":["7525:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"7525:13:2"},"nodeType":"ModifierInvocation","src":"7525:13:2"},{"id":917,"kind":"modifierInvocation","modifierName":{"id":916,"name":"nonReentrant","nameLocations":["7547:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"7547:12:2"},"nodeType":"ModifierInvocation","src":"7547:12:2"}],"name":"revertWithERC20","nameLocation":"7299:15:2","parameters":{"id":910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"mutability":"mutable","name":"token","nameLocation":"7332:5:2","nodeType":"VariableDeclaration","scope":963,"src":"7324:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"7324:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":902,"mutability":"mutable","name":"to","nameLocation":"7355:2:2","nodeType":"VariableDeclaration","scope":963,"src":"7347:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":901,"name":"address","nodeType":"ElementaryTypeName","src":"7347:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":904,"mutability":"mutable","name":"amount","nameLocation":"7375:6:2","nodeType":"VariableDeclaration","scope":963,"src":"7367:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":903,"name":"uint256","nodeType":"ElementaryTypeName","src":"7367:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":906,"mutability":"mutable","name":"data","nameLocation":"7406:4:2","nodeType":"VariableDeclaration","scope":963,"src":"7391:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":905,"name":"bytes","nodeType":"ElementaryTypeName","src":"7391:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":909,"mutability":"mutable","name":"revertContext","nameLocation":"7443:13:2","nodeType":"VariableDeclaration","scope":963,"src":"7420:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":908,"nodeType":"UserDefinedTypeName","pathNode":{"id":907,"name":"RevertContext","nameLocations":["7420:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"7420:13:2"},"referencedDeclaration":21,"src":"7420:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"7314:148:2"},"returnParameters":{"id":918,"nodeType":"ParameterList","parameters":[],"src":"7564:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1025,"nodeType":"FunctionDefinition","src":"8001:508:2","nodes":[],"body":{"id":1024,"nodeType":"Block","src":"8176:333:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":976,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8190:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8194:5:2","memberName":"value","nodeType":"MemberAccess","src":"8190:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8203:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8190:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":983,"nodeType":"IfStatement","src":"8186:50:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":980,"name":"InsufficientETHAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"8213:21:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8213:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":982,"nodeType":"RevertStatement","src":"8206:30:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":984,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"8250:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8270:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8262:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":985,"name":"address","nodeType":"ElementaryTypeName","src":"8262:7:2","typeDescriptions":{}}},"id":988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8262:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8250:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":993,"nodeType":"IfStatement","src":"8246:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":990,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"8281:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8281:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":992,"nodeType":"RevertStatement","src":"8274:20:2"}},{"assignments":[995,null],"declarations":[{"constant":false,"id":995,"mutability":"mutable","name":"deposited","nameLocation":"8311:9:2","nodeType":"VariableDeclaration","scope":1024,"src":"8306:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":994,"name":"bool","nodeType":"ElementaryTypeName","src":"8306:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":1003,"initialValue":{"arguments":[{"hexValue":"","id":1001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8361:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":996,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"8325:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8336:4:2","memberName":"call","nodeType":"MemberAccess","src":"8325:15:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":998,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8349:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8353:5:2","memberName":"value","nodeType":"MemberAccess","src":"8349:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"8325:35:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8325:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"8305:59:2"},{"condition":{"id":1005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8379:10:2","subExpression":{"id":1004,"name":"deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":995,"src":"8380:9:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1009,"nodeType":"IfStatement","src":"8375:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1006,"name":"DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"8398:13:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8398:15:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1008,"nodeType":"RevertStatement","src":"8391:22:2"}},{"eventCall":{"arguments":[{"expression":{"id":1011,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8439:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8443:6:2","memberName":"sender","nodeType":"MemberAccess","src":"8439:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1013,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"8451:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":1014,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8461:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8465:5:2","memberName":"value","nodeType":"MemberAccess","src":"8461:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":1018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8480:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8472:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1016,"name":"address","nodeType":"ElementaryTypeName","src":"8472:7:2","typeDescriptions":{}}},"id":1019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8472:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":1020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8484:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":1021,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":969,"src":"8488:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1010,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"8429:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8429:73:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1023,"nodeType":"EmitStatement","src":"8424:78:2"}]},"baseFunctions":[2364],"documentation":{"id":964,"nodeType":"StructuredDocumentation","src":"7858:138:2","text":"@notice Deposits ETH to the TSS address.\n @param receiver Address of the receiver.\n @param revertOptions Revert options."},"functionSelector":"726ac97c","implemented":true,"kind":"function","modifiers":[{"id":972,"kind":"modifierInvocation","modifierName":{"id":971,"name":"whenNotPaused","nameLocations":["8137:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8137:13:2"},"nodeType":"ModifierInvocation","src":"8137:13:2"},{"id":974,"kind":"modifierInvocation","modifierName":{"id":973,"name":"nonReentrant","nameLocations":["8159:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8159:12:2"},"nodeType":"ModifierInvocation","src":"8159:12:2"}],"name":"deposit","nameLocation":"8010:7:2","parameters":{"id":970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"receiver","nameLocation":"8035:8:2","nodeType":"VariableDeclaration","scope":1025,"src":"8027:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"8027:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":969,"mutability":"mutable","name":"revertOptions","nameLocation":"8076:13:2","nodeType":"VariableDeclaration","scope":1025,"src":"8053:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":968,"nodeType":"UserDefinedTypeName","pathNode":{"id":967,"name":"RevertOptions","nameLocations":["8053:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8053:13:2"},"referencedDeclaration":13,"src":"8053:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8017:78:2"},"returnParameters":{"id":975,"nodeType":"ParameterList","parameters":[],"src":"8176:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":1077,"nodeType":"FunctionDefinition","src":"8785:475:2","nodes":[],"body":{"id":1076,"nodeType":"Block","src":"8991:269:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1042,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9005:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9015:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9005:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1048,"nodeType":"IfStatement","src":"9001:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1045,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"9025:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9025:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1047,"nodeType":"RevertStatement","src":"9018:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1049,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"9064:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9084:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9076:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1050,"name":"address","nodeType":"ElementaryTypeName","src":"9076:7:2","typeDescriptions":{}}},"id":1053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9076:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9064:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1058,"nodeType":"IfStatement","src":"9060:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1055,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"9095:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9095:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1057,"nodeType":"RevertStatement","src":"9088:20:2"}},{"expression":{"arguments":[{"expression":{"id":1060,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9146:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9150:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9146:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1062,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9158:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1063,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9165:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1059,"name":"transferFromToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1394,"src":"9119:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9119:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1065,"nodeType":"ExpressionStatement","src":"9119:53:2"},{"eventCall":{"arguments":[{"expression":{"id":1067,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9198:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9202:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9198:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1069,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"9210:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1070,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9220:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1071,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9228:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":1072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9235:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":1073,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1035,"src":"9239:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1066,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"9188:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9188:65:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1075,"nodeType":"EmitStatement","src":"9183:70:2"}]},"baseFunctions":[2377],"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"8515:265:2","text":"@notice Deposits ERC20 tokens to the custody or connector contract.\n @param receiver Address of the receiver.\n @param amount Amount of tokens to deposit.\n @param asset Address of the ERC20 token.\n @param revertOptions Revert options."},"functionSelector":"102614b0","implemented":true,"kind":"function","modifiers":[{"id":1038,"kind":"modifierInvocation","modifierName":{"id":1037,"name":"whenNotPaused","nameLocations":["8952:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8952:13:2"},"nodeType":"ModifierInvocation","src":"8952:13:2"},{"id":1040,"kind":"modifierInvocation","modifierName":{"id":1039,"name":"nonReentrant","nameLocations":["8974:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8974:12:2"},"nodeType":"ModifierInvocation","src":"8974:12:2"}],"name":"deposit","nameLocation":"8794:7:2","parameters":{"id":1036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"receiver","nameLocation":"8819:8:2","nodeType":"VariableDeclaration","scope":1077,"src":"8811:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"8811:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1030,"mutability":"mutable","name":"amount","nameLocation":"8845:6:2","nodeType":"VariableDeclaration","scope":1077,"src":"8837:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1029,"name":"uint256","nodeType":"ElementaryTypeName","src":"8837:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1032,"mutability":"mutable","name":"asset","nameLocation":"8869:5:2","nodeType":"VariableDeclaration","scope":1077,"src":"8861:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1031,"name":"address","nodeType":"ElementaryTypeName","src":"8861:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1035,"mutability":"mutable","name":"revertOptions","nameLocation":"8907:13:2","nodeType":"VariableDeclaration","scope":1077,"src":"8884:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1034,"nodeType":"UserDefinedTypeName","pathNode":{"id":1033,"name":"RevertOptions","nameLocations":["8884:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8884:13:2"},"referencedDeclaration":13,"src":"8884:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8801:125:2"},"returnParameters":{"id":1041,"nodeType":"ParameterList","parameters":[],"src":"8991:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1141,"nodeType":"FunctionDefinition","src":"9500:552:2","nodes":[],"body":{"id":1140,"nodeType":"Block","src":"9714:338:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1092,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9728:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9732:5:2","memberName":"value","nodeType":"MemberAccess","src":"9728:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9741:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9728:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1099,"nodeType":"IfStatement","src":"9724:50:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1096,"name":"InsufficientETHAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"9751:21:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9751:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1098,"nodeType":"RevertStatement","src":"9744:30:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1100,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1080,"src":"9788:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9808:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9800:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1101,"name":"address","nodeType":"ElementaryTypeName","src":"9800:7:2","typeDescriptions":{}}},"id":1104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9800:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9788:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1109,"nodeType":"IfStatement","src":"9784:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1106,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"9819:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1108,"nodeType":"RevertStatement","src":"9812:20:2"}},{"assignments":[1111,null],"declarations":[{"constant":false,"id":1111,"mutability":"mutable","name":"deposited","nameLocation":"9849:9:2","nodeType":"VariableDeclaration","scope":1140,"src":"9844:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1110,"name":"bool","nodeType":"ElementaryTypeName","src":"9844:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":1119,"initialValue":{"arguments":[{"hexValue":"","id":1117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9899:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":1112,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"9863:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9874:4:2","memberName":"call","nodeType":"MemberAccess","src":"9863:15:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":1114,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9887:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9891:5:2","memberName":"value","nodeType":"MemberAccess","src":"9887:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"9863:35:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9863:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9843:59:2"},{"condition":{"id":1121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9917:10:2","subExpression":{"id":1120,"name":"deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"9918:9:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1125,"nodeType":"IfStatement","src":"9913:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1122,"name":"DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"9936:13:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9936:15:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1124,"nodeType":"RevertStatement","src":"9929:22:2"}},{"eventCall":{"arguments":[{"expression":{"id":1127,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9977:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9981:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9977:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1129,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1080,"src":"9989:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":1130,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9999:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10003:5:2","memberName":"value","nodeType":"MemberAccess","src":"9999:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":1134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10018:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10010:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1132,"name":"address","nodeType":"ElementaryTypeName","src":"10010:7:2","typeDescriptions":{}}},"id":1135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10010:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1136,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1082,"src":"10022:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1137,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1085,"src":"10031:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1126,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"9967:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9967:78:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1139,"nodeType":"EmitStatement","src":"9962:83:2"}]},"baseFunctions":[2388],"documentation":{"id":1078,"nodeType":"StructuredDocumentation","src":"9266:229:2","text":"@notice Deposits ETH to the TSS address and calls an omnichain smart contract.\n @param receiver Address of the receiver.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"744b9b8b","implemented":true,"kind":"function","modifiers":[{"id":1088,"kind":"modifierInvocation","modifierName":{"id":1087,"name":"whenNotPaused","nameLocations":["9675:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"9675:13:2"},"nodeType":"ModifierInvocation","src":"9675:13:2"},{"id":1090,"kind":"modifierInvocation","modifierName":{"id":1089,"name":"nonReentrant","nameLocations":["9697:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"9697:12:2"},"nodeType":"ModifierInvocation","src":"9697:12:2"}],"name":"depositAndCall","nameLocation":"9509:14:2","parameters":{"id":1086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1080,"mutability":"mutable","name":"receiver","nameLocation":"9541:8:2","nodeType":"VariableDeclaration","scope":1141,"src":"9533:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1079,"name":"address","nodeType":"ElementaryTypeName","src":"9533:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1082,"mutability":"mutable","name":"payload","nameLocation":"9574:7:2","nodeType":"VariableDeclaration","scope":1141,"src":"9559:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1081,"name":"bytes","nodeType":"ElementaryTypeName","src":"9559:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1085,"mutability":"mutable","name":"revertOptions","nameLocation":"9614:13:2","nodeType":"VariableDeclaration","scope":1141,"src":"9591:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1084,"nodeType":"UserDefinedTypeName","pathNode":{"id":1083,"name":"RevertOptions","nameLocations":["9591:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"9591:13:2"},"referencedDeclaration":13,"src":"9591:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"9523:110:2"},"returnParameters":{"id":1091,"nodeType":"ParameterList","parameters":[],"src":"9714:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":1195,"nodeType":"FunctionDefinition","src":"10419:519:2","nodes":[],"body":{"id":1194,"nodeType":"Block","src":"10664:274:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1160,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10678:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10688:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10678:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1166,"nodeType":"IfStatement","src":"10674:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1163,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"10698:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10698:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1165,"nodeType":"RevertStatement","src":"10691:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1167,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"10737:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10757:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10749:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1168,"name":"address","nodeType":"ElementaryTypeName","src":"10749:7:2","typeDescriptions":{}}},"id":1171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10749:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10737:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1176,"nodeType":"IfStatement","src":"10733:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1173,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"10768:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10768:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1175,"nodeType":"RevertStatement","src":"10761:20:2"}},{"expression":{"arguments":[{"expression":{"id":1178,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10819:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10823:6:2","memberName":"sender","nodeType":"MemberAccess","src":"10819:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1180,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"10831:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1181,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10838:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1177,"name":"transferFromToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1394,"src":"10792:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10792:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1183,"nodeType":"ExpressionStatement","src":"10792:53:2"},{"eventCall":{"arguments":[{"expression":{"id":1185,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10871:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10875:6:2","memberName":"sender","nodeType":"MemberAccess","src":"10871:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1187,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"10883:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1188,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10893:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1189,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"10901:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1190,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"10908:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1191,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1153,"src":"10917:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1184,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"10861:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10861:70:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1193,"nodeType":"EmitStatement","src":"10856:75:2"}]},"baseFunctions":[2403],"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"10058:356:2","text":"@notice Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract.\n @param receiver Address of the receiver.\n @param amount Amount of tokens to deposit.\n @param asset Address of the ERC20 token.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"d09e3b78","implemented":true,"kind":"function","modifiers":[{"id":1156,"kind":"modifierInvocation","modifierName":{"id":1155,"name":"whenNotPaused","nameLocations":["10625:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"10625:13:2"},"nodeType":"ModifierInvocation","src":"10625:13:2"},{"id":1158,"kind":"modifierInvocation","modifierName":{"id":1157,"name":"nonReentrant","nameLocations":["10647:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"10647:12:2"},"nodeType":"ModifierInvocation","src":"10647:12:2"}],"name":"depositAndCall","nameLocation":"10428:14:2","parameters":{"id":1154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"mutability":"mutable","name":"receiver","nameLocation":"10460:8:2","nodeType":"VariableDeclaration","scope":1195,"src":"10452:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"10452:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1146,"mutability":"mutable","name":"amount","nameLocation":"10486:6:2","nodeType":"VariableDeclaration","scope":1195,"src":"10478:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1145,"name":"uint256","nodeType":"ElementaryTypeName","src":"10478:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1148,"mutability":"mutable","name":"asset","nameLocation":"10510:5:2","nodeType":"VariableDeclaration","scope":1195,"src":"10502:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1147,"name":"address","nodeType":"ElementaryTypeName","src":"10502:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1150,"mutability":"mutable","name":"payload","nameLocation":"10540:7:2","nodeType":"VariableDeclaration","scope":1195,"src":"10525:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1149,"name":"bytes","nodeType":"ElementaryTypeName","src":"10525:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1153,"mutability":"mutable","name":"revertOptions","nameLocation":"10580:13:2","nodeType":"VariableDeclaration","scope":1195,"src":"10557:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1152,"nodeType":"UserDefinedTypeName","pathNode":{"id":1151,"name":"RevertOptions","nameLocations":["10557:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"10557:13:2"},"referencedDeclaration":13,"src":"10557:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"10442:157:2"},"returnParameters":{"id":1159,"nodeType":"ParameterList","parameters":[],"src":"10664:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1229,"nodeType":"FunctionDefinition","src":"11165:320:2","nodes":[],"body":{"id":1228,"nodeType":"Block","src":"11353:132:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1210,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"11367:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11387:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11379:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1211,"name":"address","nodeType":"ElementaryTypeName","src":"11379:7:2","typeDescriptions":{}}},"id":1214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11379:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11367:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1219,"nodeType":"IfStatement","src":"11363:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1216,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"11398:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11398:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1218,"nodeType":"RevertStatement","src":"11391:20:2"}},{"eventCall":{"arguments":[{"expression":{"id":1221,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11433:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11437:6:2","memberName":"sender","nodeType":"MemberAccess","src":"11433:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1223,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"11445:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1224,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1200,"src":"11455:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1225,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"11464:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1220,"name":"Called","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2272,"src":"11426:6:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,struct RevertOptions memory)"}},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11426:52:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1227,"nodeType":"EmitStatement","src":"11421:57:2"}]},"baseFunctions":[2414],"documentation":{"id":1196,"nodeType":"StructuredDocumentation","src":"10944:216:2","text":"@notice Calls an omnichain smart contract without asset transfer.\n @param receiver Address of the receiver.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"1becceb4","implemented":true,"kind":"function","modifiers":[{"id":1206,"kind":"modifierInvocation","modifierName":{"id":1205,"name":"whenNotPaused","nameLocations":["11314:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11314:13:2"},"nodeType":"ModifierInvocation","src":"11314:13:2"},{"id":1208,"kind":"modifierInvocation","modifierName":{"id":1207,"name":"nonReentrant","nameLocations":["11336:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"11336:12:2"},"nodeType":"ModifierInvocation","src":"11336:12:2"}],"name":"call","nameLocation":"11174:4:2","parameters":{"id":1204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1198,"mutability":"mutable","name":"receiver","nameLocation":"11196:8:2","nodeType":"VariableDeclaration","scope":1229,"src":"11188:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"11188:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1200,"mutability":"mutable","name":"payload","nameLocation":"11229:7:2","nodeType":"VariableDeclaration","scope":1229,"src":"11214:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1199,"name":"bytes","nodeType":"ElementaryTypeName","src":"11214:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1203,"mutability":"mutable","name":"revertOptions","nameLocation":"11269:13:2","nodeType":"VariableDeclaration","scope":1229,"src":"11246:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1202,"nodeType":"UserDefinedTypeName","pathNode":{"id":1201,"name":"RevertOptions","nameLocations":["11246:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"11246:13:2"},"referencedDeclaration":13,"src":"11246:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"11178:110:2"},"returnParameters":{"id":1209,"nodeType":"ParameterList","parameters":[],"src":"11353:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1268,"nodeType":"FunctionDefinition","src":"11599:284:2","nodes":[],"body":{"id":1267,"nodeType":"Block","src":"11675:208:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1238,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11689:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11709:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11701:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1239,"name":"address","nodeType":"ElementaryTypeName","src":"11701:7:2","typeDescriptions":{}}},"id":1242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11701:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11689:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1247,"nodeType":"IfStatement","src":"11685:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1244,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"11720:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11720:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1246,"nodeType":"RevertStatement","src":"11713:20:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1248,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"11747:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11766:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1250,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11758:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1249,"name":"address","nodeType":"ElementaryTypeName","src":"11758:7:2","typeDescriptions":{}}},"id":1252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11758:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11747:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1257,"nodeType":"IfStatement","src":"11743:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1254,"name":"CustodyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"11777:18:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11777:20:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1256,"nodeType":"RevertStatement","src":"11770:27:2"}},{"expression":{"arguments":[{"id":1259,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"11819:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1260,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11839:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1258,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"11808:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11808:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1262,"nodeType":"ExpressionStatement","src":"11808:40:2"},{"expression":{"id":1265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1263,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"11858:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1264,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11868:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11858:18:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1266,"nodeType":"ExpressionStatement","src":"11858:18:2"}]},"documentation":{"id":1230,"nodeType":"StructuredDocumentation","src":"11491:103:2","text":"@notice Sets the custody contract address.\n @param custody_ Address of the custody contract."},"functionSelector":"ae7a3a6f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1235,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"11655:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1236,"kind":"modifierInvocation","modifierName":{"id":1234,"name":"onlyRole","nameLocations":["11646:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"11646:8:2"},"nodeType":"ModifierInvocation","src":"11646:28:2"}],"name":"setCustody","nameLocation":"11608:10:2","parameters":{"id":1233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1232,"mutability":"mutable","name":"custody_","nameLocation":"11627:8:2","nodeType":"VariableDeclaration","scope":1268,"src":"11619:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1231,"name":"address","nodeType":"ElementaryTypeName","src":"11619:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11618:18:2"},"returnParameters":{"id":1237,"nodeType":"ParameterList","parameters":[],"src":"11675:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1307,"nodeType":"FunctionDefinition","src":"12007:324:2","nodes":[],"body":{"id":1306,"nodeType":"Block","src":"12091:240:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1277,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12105:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12131:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12123:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1278,"name":"address","nodeType":"ElementaryTypeName","src":"12123:7:2","typeDescriptions":{}}},"id":1281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12123:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12105:28:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1286,"nodeType":"IfStatement","src":"12101:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1283,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"12142:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12142:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1285,"nodeType":"RevertStatement","src":"12135:20:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1287,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"12169:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12194:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12186:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1288,"name":"address","nodeType":"ElementaryTypeName","src":"12186:7:2","typeDescriptions":{}}},"id":1291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12186:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12169:27:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1296,"nodeType":"IfStatement","src":"12165:62:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1293,"name":"ConnectorInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2298,"src":"12205:20:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12205:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1295,"nodeType":"RevertStatement","src":"12198:29:2"}},{"expression":{"arguments":[{"id":1298,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"12249:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1299,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12269:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1297,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"12238:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12238:46:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1301,"nodeType":"ExpressionStatement","src":"12238:46:2"},{"expression":{"id":1304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1302,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"12294:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1303,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12310:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12294:30:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1305,"nodeType":"ExpressionStatement","src":"12294:30:2"}]},"documentation":{"id":1269,"nodeType":"StructuredDocumentation","src":"11889:113:2","text":"@notice Sets the connector contract address.\n @param zetaConnector_ Address of the connector contract."},"functionSelector":"10188aef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1274,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"12071:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1275,"kind":"modifierInvocation","modifierName":{"id":1273,"name":"onlyRole","nameLocations":["12062:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"12062:8:2"},"nodeType":"ModifierInvocation","src":"12062:28:2"}],"name":"setConnector","nameLocation":"12016:12:2","parameters":{"id":1272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1271,"mutability":"mutable","name":"zetaConnector_","nameLocation":"12037:14:2","nodeType":"VariableDeclaration","scope":1307,"src":"12029:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1270,"name":"address","nodeType":"ElementaryTypeName","src":"12029:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12028:24:2"},"returnParameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"12091:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1326,"nodeType":"FunctionDefinition","src":"12682:125:2","nodes":[],"body":{"id":1325,"nodeType":"Block","src":"12755:52:2","nodes":[],"statements":[{"expression":{"arguments":[{"id":1321,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"12794:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12798:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":1318,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1310,"src":"12779:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1317,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"12772:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12772:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12786:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"12772:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12772:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1316,"id":1324,"nodeType":"Return","src":"12765:35:2"}]},"documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"12337:340:2","text":"@dev Resets the approval of a token for a specified address.\n This is used to ensure that the approval is set to zero before setting it to a new value.\n @param token Address of the ERC20 token.\n @param to Address to reset the approval for.\n @return True if the approval reset was successful, false otherwise."},"implemented":true,"kind":"function","modifiers":[],"name":"resetApproval","nameLocation":"12691:13:2","parameters":{"id":1313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1310,"mutability":"mutable","name":"token","nameLocation":"12713:5:2","nodeType":"VariableDeclaration","scope":1326,"src":"12705:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1309,"name":"address","nodeType":"ElementaryTypeName","src":"12705:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1312,"mutability":"mutable","name":"to","nameLocation":"12728:2:2","nodeType":"VariableDeclaration","scope":1326,"src":"12720:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1311,"name":"address","nodeType":"ElementaryTypeName","src":"12720:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12704:27:2"},"returnParameters":{"id":1316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1326,"src":"12749:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1314,"name":"bool","nodeType":"ElementaryTypeName","src":"12749:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12748:6:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":1394,"nodeType":"FunctionDefinition","src":"13155:801:2","nodes":[],"body":{"id":1393,"nodeType":"Block","src":"13244:712:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1336,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13258:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1337,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"13267:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13258:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1391,"nodeType":"Block","src":"13743:207:2","statements":[{"condition":{"id":1377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13796:42:2","subExpression":{"arguments":[{"id":1375,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13832:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":1372,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"13811:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1371,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"13797:13:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Custody_$2206_$","typeString":"type(contract IERC20Custody)"}},"id":1373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Custody_$2206","typeString":"contract IERC20Custody"}},"id":1374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13820:11:2","memberName":"whitelisted","nodeType":"MemberAccess","referencedDeclaration":2168,"src":"13797:34:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":1376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1381,"nodeType":"IfStatement","src":"13792:80:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1378,"name":"NotWhitelistedInCustody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"13847:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13847:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1380,"nodeType":"RevertStatement","src":"13840:32:2"}},{"expression":{"arguments":[{"id":1386,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1329,"src":"13917:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1387,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"13923:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1388,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13932:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1383,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13893:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1382,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13886:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13886:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13900:16:2","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":47251,"src":"13886:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":1389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13886:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1390,"nodeType":"ExpressionStatement","src":"13886:53:2"}]},"id":1392,"nodeType":"IfStatement","src":"13254:696:2","trueBody":{"id":1370,"nodeType":"Block","src":"13278:459:2","statements":[{"expression":{"arguments":[{"id":1343,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1329,"src":"13402:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1346,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13416:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}],"id":1345,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13408:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1344,"name":"address","nodeType":"ElementaryTypeName","src":"13408:7:2","typeDescriptions":{}}},"id":1347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13408:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1348,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13423:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1340,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13378:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1339,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13371:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13371:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13385:16:2","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":47251,"src":"13371:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":1349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13371:59:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1350,"nodeType":"ExpressionStatement","src":"13371:59:2"},{"condition":{"id":1358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13548:45:2","subExpression":{"arguments":[{"id":1355,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"13571:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1356,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13586:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1352,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13556:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1351,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13549:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13549:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13563:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"13549:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13549:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1362,"nodeType":"IfStatement","src":"13544:74:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1359,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"13602:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13602:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1361,"nodeType":"RevertStatement","src":"13595:23:2"}},{"expression":{"arguments":[{"id":1367,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13719:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1364,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"13690:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1363,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"13672:17:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ZetaConnectorBase_$1644_$","typeString":"type(contract ZetaConnectorBase)"}},"id":1365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13672:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ZetaConnectorBase_$1644","typeString":"contract ZetaConnectorBase"}},"id":1366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13705:13:2","memberName":"receiveTokens","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"13672:46:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":1368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13672:54:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1369,"nodeType":"ExpressionStatement","src":"13672:54:2"}]}}]},"documentation":{"id":1327,"nodeType":"StructuredDocumentation","src":"12813:337:2","text":"@dev Transfers tokens from the sender to the asset handler.\n This function handles the transfer of tokens to either the connector or custody contract based on the asset\n type.\n @param from Address of the sender.\n @param token Address of the ERC20 token.\n @param amount Amount of tokens to transfer."},"implemented":true,"kind":"function","modifiers":[],"name":"transferFromToAssetHandler","nameLocation":"13164:26:2","parameters":{"id":1334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1329,"mutability":"mutable","name":"from","nameLocation":"13199:4:2","nodeType":"VariableDeclaration","scope":1394,"src":"13191:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1328,"name":"address","nodeType":"ElementaryTypeName","src":"13191:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1331,"mutability":"mutable","name":"token","nameLocation":"13213:5:2","nodeType":"VariableDeclaration","scope":1394,"src":"13205:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1330,"name":"address","nodeType":"ElementaryTypeName","src":"13205:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1333,"mutability":"mutable","name":"amount","nameLocation":"13228:6:2","nodeType":"VariableDeclaration","scope":1394,"src":"13220:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1332,"name":"uint256","nodeType":"ElementaryTypeName","src":"13220:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13190:45:2"},"returnParameters":{"id":1335,"nodeType":"ParameterList","parameters":[],"src":"13244:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":1447,"nodeType":"FunctionDefinition","src":"14245:658:2","nodes":[],"body":{"id":1446,"nodeType":"Block","src":"14316:587:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1402,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14330:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1403,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"14339:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14330:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1444,"nodeType":"Block","src":"14700:197:2","statements":[{"condition":{"id":1431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14753:42:2","subExpression":{"arguments":[{"id":1429,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14789:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":1426,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"14768:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1425,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"14754:13:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Custody_$2206_$","typeString":"type(contract IERC20Custody)"}},"id":1427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14754:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Custody_$2206","typeString":"contract IERC20Custody"}},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14777:11:2","memberName":"whitelisted","nodeType":"MemberAccess","referencedDeclaration":2168,"src":"14754:34:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":1430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14754:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1435,"nodeType":"IfStatement","src":"14749:80:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1432,"name":"NotWhitelistedInCustody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"14804:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14804:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1434,"nodeType":"RevertStatement","src":"14797:32:2"}},{"expression":{"arguments":[{"id":1440,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"14870:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1441,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14879:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1437,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14850:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1436,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"14843:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14843:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14857:12:2","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":47224,"src":"14843:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,uint256)"}},"id":1442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14843:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1443,"nodeType":"ExpressionStatement","src":"14843:43:2"}]},"id":1445,"nodeType":"IfStatement","src":"14326:571:2","trueBody":{"id":1424,"nodeType":"Block","src":"14350:344:2","statements":[{"condition":{"id":1412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14505:45:2","subExpression":{"arguments":[{"id":1409,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"14528:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1410,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14543:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1406,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14513:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1405,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"14506:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14506:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14520:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"14506:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14506:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1416,"nodeType":"IfStatement","src":"14501:74:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1413,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"14559:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14559:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1415,"nodeType":"RevertStatement","src":"14552:23:2"}},{"expression":{"arguments":[{"id":1421,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14676:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1418,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"14647:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1417,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"14629:17:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ZetaConnectorBase_$1644_$","typeString":"type(contract ZetaConnectorBase)"}},"id":1419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14629:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ZetaConnectorBase_$1644","typeString":"contract ZetaConnectorBase"}},"id":1420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14662:13:2","memberName":"receiveTokens","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"14629:46:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":1422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14629:54:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1423,"nodeType":"ExpressionStatement","src":"14629:54:2"}]}}]},"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"13962:278:2","text":"@dev Transfers tokens to the asset handler.\n This function handles the transfer of tokens to either the connector or custody contract based on the asset\n type.\n @param token Address of the ERC20 token.\n @param amount Amount of tokens to transfer."},"implemented":true,"kind":"function","modifiers":[],"name":"transferToAssetHandler","nameLocation":"14254:22:2","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"token","nameLocation":"14285:5:2","nodeType":"VariableDeclaration","scope":1447,"src":"14277:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1396,"name":"address","nodeType":"ElementaryTypeName","src":"14277:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"amount","nameLocation":"14300:6:2","nodeType":"VariableDeclaration","scope":1447,"src":"14292:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1398,"name":"uint256","nodeType":"ElementaryTypeName","src":"14292:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14276:31:2"},"returnParameters":{"id":1401,"nodeType":"ParameterList","parameters":[],"src":"14316:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":505,"name":"Initializable","nameLocations":["1080:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44489,"src":"1080:13:2"},"id":506,"nodeType":"InheritanceSpecifier","src":"1080:13:2"},{"baseName":{"id":507,"name":"AccessControlUpgradeable","nameLocations":["1099:24:2"],"nodeType":"IdentifierPath","referencedDeclaration":44235,"src":"1099:24:2"},"id":508,"nodeType":"InheritanceSpecifier","src":"1099:24:2"},{"baseName":{"id":509,"name":"UUPSUpgradeable","nameLocations":["1129:15:2"],"nodeType":"IdentifierPath","referencedDeclaration":44671,"src":"1129:15:2"},"id":510,"nodeType":"InheritanceSpecifier","src":"1129:15:2"},{"baseName":{"id":511,"name":"IGatewayEVM","nameLocations":["1150:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"1150:11:2"},"id":512,"nodeType":"InheritanceSpecifier","src":"1150:11:2"},{"baseName":{"id":513,"name":"ReentrancyGuardUpgradeable","nameLocations":["1167:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":45022,"src":"1167:26:2"},"id":514,"nodeType":"InheritanceSpecifier","src":"1167:26:2"},{"baseName":{"id":515,"name":"PausableUpgradeable","nameLocations":["1199:19:2"],"nodeType":"IdentifierPath","referencedDeclaration":44893,"src":"1199:19:2"},"id":516,"nodeType":"InheritanceSpecifier","src":"1199:19:2"}],"canonicalName":"GatewayEVM","contractDependencies":[],"contractKind":"contract","documentation":{"id":504,"nodeType":"StructuredDocumentation","src":"849:204:2","text":"@title GatewayEVM\n @notice The GatewayEVM contract is the endpoint to call smart contracts on external chains.\n @dev The contract doesn't hold any funds and should never have active allowances."},"fullyImplemented":true,"linearizedBaseContracts":[1448,44893,45022,2415,2273,2302,44671,45620,44235,45062,48334,45441,44717,44489],"name":"GatewayEVM","nameLocation":"1062:10:2","scope":1449,"usedErrors":[2277,2280,2283,2286,2289,2292,2295,2298,2301,44252,44255,44516,44521,44756,44759,44924,45368,45371,45830,45843,47191,47472,47477,47480],"usedEvents":[2219,2233,2244,2260,2272,44260,44748,44753,45380,45389,45398,45809]}],"license":"MIT"},"id":2} \ No newline at end of file diff --git a/packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json b/packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json new file mode 100644 index 00000000..13e05ecb --- /dev/null +++ b/packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FUNGIBLE_MODULE_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"PAUSER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"call","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndRevert","inputs":[{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"execute","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executeRevert","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"zetaToken_","type":"address","internalType":"address"},{"name":"admin_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdraw","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAndCall","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAndCall","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"zetaToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"Called","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"zrc20","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Withdrawn","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"chainId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"receiver","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"zrc20","type":"address","indexed":false,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasfee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"protocolFlatFee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CallerIsNotFungibleModule","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EmptyMessage","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"FailedZetaSent","inputs":[]},{"type":"error","name":"GasFeeTransferFailed","inputs":[]},{"type":"error","name":"InsufficientZRC20Amount","inputs":[]},{"type":"error","name":"InsufficientZetaAmount","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidTarget","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OnlyWZETAOrFungible","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"WithdrawalFailed","inputs":[]},{"type":"error","name":"ZRC20BurnFailed","inputs":[]},{"type":"error","name":"ZRC20DepositFailed","inputs":[]},{"type":"error","name":"ZRC20TransferFailed","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161393d6100fd600039600081816125ef0152818161261801526127ee015261393d6000f3fe6080604052600436106101bb5760003560e01c806352d1902d116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637c0dcb5f116100c65780637c0dcb5f146104bb5780638456cb59146104db57806391d14854146104f057806397a1cef11461055557600080fd5b806352d1902d1461044f5780635c975abb14610464578063717d335f1461049b57600080fd5b80632f2ff15d116101595780633ce4a5bc116101335780633ce4a5bc146103df5780633f4ba83a14610407578063485cc9551461041c5780634f1ef2861461043c57600080fd5b80632f2ff15d1461037f57806336568abe1461039f5780633b283933146103bf57600080fd5b80631cb5ea75116101955780631cb5ea75146102aa57806321501a95146102ca57806321e093b1146102ea578063248a9ca31461032257600080fd5b806301ffc9a7146102355780630310eb761461026a578063048ae42c1461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612d37565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612da6565b61078b565b34801561029657600080fd5b5061022e6102a5366004612f68565b610a17565b3480156102b657600080fd5b5061022e6102c5366004613028565b610b92565b3480156102d657600080fd5b5061022e6102e53660046130dd565b610e03565b3480156102f657600080fd5b5060005461030a906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032e57600080fd5b5061037161033d366004613169565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561038b57600080fd5b5061022e61039a366004613182565b610fd0565b3480156103ab57600080fd5b5061022e6103ba366004613182565b61101a565b3480156103cb57600080fd5b5061022e6103da3660046131b2565b61106b565b3480156103eb57600080fd5b5061030a73735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041357600080fd5b5061022e61118e565b34801561042857600080fd5b5061022e610437366004613245565b6111c3565b61022e61044a366004613273565b611418565b34801561045b57600080fd5b50610371611437565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b63660046132c3565b611466565b3480156104c757600080fd5b5061022e6104d6366004613309565b61156e565b3480156104e757600080fd5b5061022e61173c565b3480156104fc57600080fd5b5061025561050b366004613182565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b5061022e610570366004613382565b61176e565b34801561058157600080fd5b50610371600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190613454565b3480156105ec57600080fd5b5061022e6105fb366004613467565b61188d565b34801561060c57600080fd5b5061022e61061b366004613467565b6119bd565b34801561062c57600080fd5b5061022e61063b366004613182565b611bcc565b34801561064c57600080fd5b506103717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004613505565b611c10565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e0610694565b6001600160a01b03841615806107fd57506001600160a01b038216155b15610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361086e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108a157506001600160a01b03821630145b156108d8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190613555565b61099a576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109df90849060040161361f565b600060405180830381600087803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b5050505050505050565b610a1f611e1f565b610a27610694565b8651600003610a62576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610a9c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa9878785611ea0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e9190613685565b8c8c8c8c604051610b579998979695949392919061371f565b60405180910390a350610b8960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610b9a611e1f565b610ba2610694565b8551600003610bdd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003610c18576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613555565b610d7d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610dc89594939291906137c0565b60405180910390a35050610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e50576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e58610694565b6001600160a01b038316610e98576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610ed2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f0557506001600160a01b03831630145b15610f3c576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4684846121a3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610f97928a92169089908890889060040161380c565b600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461100a81612371565b611014838361237b565b50505050565b6001600160a01b038116331461105c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110668282612468565b505050565b611073611e1f565b61107b610694565b85516000036110b6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036110f0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e8573735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261115d928c926001600160a01b0316918c919081908c908c9083908d9061371f565b60405180910390a3610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b881612371565b6111c061252c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561120e5750825b905060008267ffffffffffffffff16600114801561122b5750303b155b905081158015611239575080155b15611270576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112d15784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ee57506001600160a01b038616155b15611325576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132d6125bc565b6113356125bc565b61133d6125c4565b6113456125d4565b61135060008761237b565b5061137b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761237b565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610b895784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114206125e4565b611429826126b4565b61143382826126bf565b5050565b60006114416127e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab146114b3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114bb610694565b6001600160a01b0382166114fb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061154090849060040161361f565b600060405180830381600087803b15801561155a57600080fd5b505af1158015610dfb573d6000803e3d6000fd5b611576611e1f565b61157e610694565b83516000036115b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036115f3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ff8484612845565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190613685565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613685565b8a60405161170a979695949392919061387d565b60405180910390a35061101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61176681612371565b6111c06128b3565b611776611e1f565b61177e610694565b83516000036117b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036117f3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118118373735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261185c928a926001600160a01b0316918a9190819081908b9061387d565b60405180910390a361101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118da576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2610694565b6001600160a01b03851615806118ff57506001600160a01b038316155b15611936576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611983908990899089908890889060040161380c565b600060405180830381600087803b15801561199d57600080fd5b505af11580156119b1573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a0a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a12610694565b6001600160a01b0385161580611a2f57506001600160a01b038316155b15611a66576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611aa0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611ad357506001600160a01b03831630145b15611b0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190613555565b611936576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c0681612371565b6110148383612468565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c65610694565b6001600160a01b0383161580611c8257506001600160a01b038116155b15611cb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611cf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d2657506001600160a01b03811630145b15611d5d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de99190613555565b611066576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611ed391815260200190565b6040805180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f139190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613555565b611ff2576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af115801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613555565b6120b8576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c9190613555565b612172576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122379190613555565b61226d576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611066576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c0813361292c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661245e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561245e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6125346129b9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612a14565b6125cc612a14565b6106f0612a7b565b6125dc612a14565b6106f0612acc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061267d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126717f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143381612371565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612737575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261273491810190613685565b60015b61277d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127d9576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612774565b6110668383612ad4565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121768383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae9190613685565b611ea0565b6128bb610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361259e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611433576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612774565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a83612a14565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61217d612a14565b612add82612b2a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b22576110668282612bd2565b611433612c48565b806001600160a01b03163b600003612b79576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612774565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bef91906138eb565b600060405180830381855af49150503d8060008114612c2a576040519150601f19603f3d011682016040523d82523d6000602084013e612c2f565b606091505b5091509150612c3f858383612c80565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612c9557612c9082612cf5565b612176565b8151158015612cac57506001600160a01b0384163b155b15612cee576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612774565b5080612176565b805115612d055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217657600080fd5b6001600160a01b03811681146111c057600080fd5b600060608284031215612da057600080fd5b50919050565b60008060008060808587031215612dbc57600080fd5b8435612dc781612d79565b9350602085013592506040850135612dde81612d79565b9150606085013567ffffffffffffffff811115612dfa57600080fd5b612e0687828801612d8e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e5257600080fd5b813567ffffffffffffffff811115612e6c57612e6c612e12565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ed857612ed8612e12565b604052818152838201602001851015612ef057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f1f57600080fd5b50813567ffffffffffffffff811115612f3757600080fd5b602083019150836020828501011115612f4f57600080fd5b9250929050565b600060a08284031215612da057600080fd5b600080600080600080600060c0888a031215612f8357600080fd5b873567ffffffffffffffff811115612f9a57600080fd5b612fa68a828b01612e41565b975050602088013595506040880135612fbe81612d79565b9450606088013567ffffffffffffffff811115612fda57600080fd5b612fe68a828b01612f0d565b9095509350506080880135915060a088013567ffffffffffffffff81111561300d57600080fd5b6130198a828b01612f56565b91505092959891949750929550565b60008060008060008060a0878903121561304157600080fd5b863567ffffffffffffffff81111561305857600080fd5b61306489828a01612e41565b965050602087013561307581612d79565b9450604087013567ffffffffffffffff81111561309157600080fd5b61309d89828a01612f0d565b90955093505060608701359150608087013567ffffffffffffffff8111156130c457600080fd5b6130d089828a01612f56565b9150509295509295509295565b6000806000806000608086880312156130f557600080fd5b853567ffffffffffffffff81111561310c57600080fd5b61311888828901612d8e565b95505060208601359350604086013561313081612d79565b9250606086013567ffffffffffffffff81111561314c57600080fd5b61315888828901612f0d565b969995985093965092949392505050565b60006020828403121561317b57600080fd5b5035919050565b6000806040838503121561319557600080fd5b8235915060208301356131a781612d79565b809150509250929050565b60008060008060008060a087890312156131cb57600080fd5b863567ffffffffffffffff8111156131e257600080fd5b6131ee89828a01612e41565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561321957600080fd5b61322589828a01612f0d565b909450925050608087013567ffffffffffffffff8111156130c457600080fd5b6000806040838503121561325857600080fd5b823561326381612d79565b915060208301356131a781612d79565b6000806040838503121561328657600080fd5b823561329181612d79565b9150602083013567ffffffffffffffff8111156132ad57600080fd5b6132b985828601612e41565b9150509250929050565b600080604083850312156132d657600080fd5b82356132e181612d79565b9150602083013567ffffffffffffffff8111156132fd57600080fd5b6132b985828601612d8e565b6000806000806080858703121561331f57600080fd5b843567ffffffffffffffff81111561333657600080fd5b61334287828801612e41565b94505060208501359250604085013561335a81612d79565b9150606085013567ffffffffffffffff81111561337657600080fd5b612e0687828801612f56565b6000806000806080858703121561339857600080fd5b843567ffffffffffffffff8111156133af57600080fd5b6133bb87828801612e41565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561337657600080fd5b60005b838110156134015781810151838201526020016133e9565b50506000910152565b600081518084526134228160208601602086016133e6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612176602083018461340a565b60008060008060008060a0878903121561348057600080fd5b863567ffffffffffffffff81111561349757600080fd5b6134a389828a01612d8e565b96505060208701356134b481612d79565b94506040870135935060608701356134cb81612d79565b9250608087013567ffffffffffffffff8111156134e757600080fd5b6134f389828a01612f0d565b979a9699509497509295939492505050565b60008060006060848603121561351a57600080fd5b833561352581612d79565b925060208401359150604084013561353c81612d79565b809150509250925092565b80151581146111c057600080fd5b60006020828403121561356757600080fd5b815161217681613547565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135a757600080fd5b830160208101925035905067ffffffffffffffff8111156135c757600080fd5b803603821315612f4f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561363081612d79565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461365c57600080fd5b80604085015250506136716040840184613572565b606080850152612c3f6080850182846135d6565b60006020828403121561369757600080fd5b5051919050565b600081356136ab81612d79565b6001600160a01b0316835260208201356136c481613547565b1515602084015260408201356136d981612d79565b6001600160a01b031660408401526136f46060830183613572565b60a0606086015261370960a0860182846135d6565b6080948501359590940194909452509092915050565b6101008152600061373461010083018c61340a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526137688187896135d6565b90508460c084015282810360e0840152613782818561369e565b9c9b505050505050505050505050565b600080604083850312156137a557600080fd5b82516137b081612d79565b6020939093015192949293505050565b6080815260006137d3608083018861340a565b82810360208401526137e68187896135d6565b90508460408401528281036060840152613800818561369e565b98975050505050505050565b60808152600061381c8788613572565b6060608085015261383160e0850182846135d6565b915050602088013561384281612d79565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138008185876135d6565b6101008152600061389261010083018a61340a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506138dd602082018561369e565b9a9950505050505050505050565b600082516138fd8184602087016133e6565b919091019291505056fea26469706673582212209729ede334f07afe016eab9b4d72c7ce168ef243ba933f0783bfed07e3f86edf64736f6c634300081a0033","sourceMap":"958:13493:10:-:0;;;1171:4:42;1128:48;;1851:53:10;;;;;;;;;-1:-1:-1;1875:22:10;:20;:22::i;:::-;958:13493;;7711:422:41;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:41;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:41;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:41;-1:-1:-1;;;;;8035:33:41;;;;;8087:29;;158:50:108;;;8087:29:41;;146:2:108;131:18;8087:29:41;;;;;;;7981:146;7760:373;7711:422::o;14:200:108:-;958:13493:10;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101bb5760003560e01c806352d1902d116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637c0dcb5f116100c65780637c0dcb5f146104bb5780638456cb59146104db57806391d14854146104f057806397a1cef11461055557600080fd5b806352d1902d1461044f5780635c975abb14610464578063717d335f1461049b57600080fd5b80632f2ff15d116101595780633ce4a5bc116101335780633ce4a5bc146103df5780633f4ba83a14610407578063485cc9551461041c5780634f1ef2861461043c57600080fd5b80632f2ff15d1461037f57806336568abe1461039f5780633b283933146103bf57600080fd5b80631cb5ea75116101955780631cb5ea75146102aa57806321501a95146102ca57806321e093b1146102ea578063248a9ca31461032257600080fd5b806301ffc9a7146102355780630310eb761461026a578063048ae42c1461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612d37565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612da6565b61078b565b34801561029657600080fd5b5061022e6102a5366004612f68565b610a17565b3480156102b657600080fd5b5061022e6102c5366004613028565b610b92565b3480156102d657600080fd5b5061022e6102e53660046130dd565b610e03565b3480156102f657600080fd5b5060005461030a906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032e57600080fd5b5061037161033d366004613169565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561038b57600080fd5b5061022e61039a366004613182565b610fd0565b3480156103ab57600080fd5b5061022e6103ba366004613182565b61101a565b3480156103cb57600080fd5b5061022e6103da3660046131b2565b61106b565b3480156103eb57600080fd5b5061030a73735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041357600080fd5b5061022e61118e565b34801561042857600080fd5b5061022e610437366004613245565b6111c3565b61022e61044a366004613273565b611418565b34801561045b57600080fd5b50610371611437565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b63660046132c3565b611466565b3480156104c757600080fd5b5061022e6104d6366004613309565b61156e565b3480156104e757600080fd5b5061022e61173c565b3480156104fc57600080fd5b5061025561050b366004613182565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b5061022e610570366004613382565b61176e565b34801561058157600080fd5b50610371600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190613454565b3480156105ec57600080fd5b5061022e6105fb366004613467565b61188d565b34801561060c57600080fd5b5061022e61061b366004613467565b6119bd565b34801561062c57600080fd5b5061022e61063b366004613182565b611bcc565b34801561064c57600080fd5b506103717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004613505565b611c10565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e0610694565b6001600160a01b03841615806107fd57506001600160a01b038216155b15610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361086e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108a157506001600160a01b03821630145b156108d8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190613555565b61099a576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109df90849060040161361f565b600060405180830381600087803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b5050505050505050565b610a1f611e1f565b610a27610694565b8651600003610a62576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610a9c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa9878785611ea0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e9190613685565b8c8c8c8c604051610b579998979695949392919061371f565b60405180910390a350610b8960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610b9a611e1f565b610ba2610694565b8551600003610bdd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003610c18576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613555565b610d7d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610dc89594939291906137c0565b60405180910390a35050610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e50576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e58610694565b6001600160a01b038316610e98576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610ed2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f0557506001600160a01b03831630145b15610f3c576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4684846121a3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610f97928a92169089908890889060040161380c565b600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461100a81612371565b611014838361237b565b50505050565b6001600160a01b038116331461105c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110668282612468565b505050565b611073611e1f565b61107b610694565b85516000036110b6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036110f0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e8573735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261115d928c926001600160a01b0316918c919081908c908c9083908d9061371f565b60405180910390a3610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b881612371565b6111c061252c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561120e5750825b905060008267ffffffffffffffff16600114801561122b5750303b155b905081158015611239575080155b15611270576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112d15784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ee57506001600160a01b038616155b15611325576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132d6125bc565b6113356125bc565b61133d6125c4565b6113456125d4565b61135060008761237b565b5061137b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761237b565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610b895784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114206125e4565b611429826126b4565b61143382826126bf565b5050565b60006114416127e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab146114b3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114bb610694565b6001600160a01b0382166114fb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061154090849060040161361f565b600060405180830381600087803b15801561155a57600080fd5b505af1158015610dfb573d6000803e3d6000fd5b611576611e1f565b61157e610694565b83516000036115b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036115f3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ff8484612845565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190613685565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613685565b8a60405161170a979695949392919061387d565b60405180910390a35061101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61176681612371565b6111c06128b3565b611776611e1f565b61177e610694565b83516000036117b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036117f3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118118373735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261185c928a926001600160a01b0316918a9190819081908b9061387d565b60405180910390a361101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118da576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2610694565b6001600160a01b03851615806118ff57506001600160a01b038316155b15611936576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611983908990899089908890889060040161380c565b600060405180830381600087803b15801561199d57600080fd5b505af11580156119b1573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a0a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a12610694565b6001600160a01b0385161580611a2f57506001600160a01b038316155b15611a66576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611aa0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611ad357506001600160a01b03831630145b15611b0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190613555565b611936576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c0681612371565b6110148383612468565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c65610694565b6001600160a01b0383161580611c8257506001600160a01b038116155b15611cb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611cf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d2657506001600160a01b03811630145b15611d5d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de99190613555565b611066576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611ed391815260200190565b6040805180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f139190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613555565b611ff2576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af115801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613555565b6120b8576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c9190613555565b612172576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122379190613555565b61226d576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611066576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c0813361292c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661245e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561245e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6125346129b9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612a14565b6125cc612a14565b6106f0612a7b565b6125dc612a14565b6106f0612acc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061267d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126717f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143381612371565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612737575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261273491810190613685565b60015b61277d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127d9576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612774565b6110668383612ad4565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121768383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae9190613685565b611ea0565b6128bb610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361259e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611433576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612774565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a83612a14565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61217d612a14565b612add82612b2a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b22576110668282612bd2565b611433612c48565b806001600160a01b03163b600003612b79576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612774565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bef91906138eb565b600060405180830381855af49150503d8060008114612c2a576040519150601f19603f3d011682016040523d82523d6000602084013e612c2f565b606091505b5091509150612c3f858383612c80565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612c9557612c9082612cf5565b612176565b8151158015612cac57506001600160a01b0384163b155b15612cee576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612774565b5080612176565b805115612d055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217657600080fd5b6001600160a01b03811681146111c057600080fd5b600060608284031215612da057600080fd5b50919050565b60008060008060808587031215612dbc57600080fd5b8435612dc781612d79565b9350602085013592506040850135612dde81612d79565b9150606085013567ffffffffffffffff811115612dfa57600080fd5b612e0687828801612d8e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e5257600080fd5b813567ffffffffffffffff811115612e6c57612e6c612e12565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ed857612ed8612e12565b604052818152838201602001851015612ef057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f1f57600080fd5b50813567ffffffffffffffff811115612f3757600080fd5b602083019150836020828501011115612f4f57600080fd5b9250929050565b600060a08284031215612da057600080fd5b600080600080600080600060c0888a031215612f8357600080fd5b873567ffffffffffffffff811115612f9a57600080fd5b612fa68a828b01612e41565b975050602088013595506040880135612fbe81612d79565b9450606088013567ffffffffffffffff811115612fda57600080fd5b612fe68a828b01612f0d565b9095509350506080880135915060a088013567ffffffffffffffff81111561300d57600080fd5b6130198a828b01612f56565b91505092959891949750929550565b60008060008060008060a0878903121561304157600080fd5b863567ffffffffffffffff81111561305857600080fd5b61306489828a01612e41565b965050602087013561307581612d79565b9450604087013567ffffffffffffffff81111561309157600080fd5b61309d89828a01612f0d565b90955093505060608701359150608087013567ffffffffffffffff8111156130c457600080fd5b6130d089828a01612f56565b9150509295509295509295565b6000806000806000608086880312156130f557600080fd5b853567ffffffffffffffff81111561310c57600080fd5b61311888828901612d8e565b95505060208601359350604086013561313081612d79565b9250606086013567ffffffffffffffff81111561314c57600080fd5b61315888828901612f0d565b969995985093965092949392505050565b60006020828403121561317b57600080fd5b5035919050565b6000806040838503121561319557600080fd5b8235915060208301356131a781612d79565b809150509250929050565b60008060008060008060a087890312156131cb57600080fd5b863567ffffffffffffffff8111156131e257600080fd5b6131ee89828a01612e41565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561321957600080fd5b61322589828a01612f0d565b909450925050608087013567ffffffffffffffff8111156130c457600080fd5b6000806040838503121561325857600080fd5b823561326381612d79565b915060208301356131a781612d79565b6000806040838503121561328657600080fd5b823561329181612d79565b9150602083013567ffffffffffffffff8111156132ad57600080fd5b6132b985828601612e41565b9150509250929050565b600080604083850312156132d657600080fd5b82356132e181612d79565b9150602083013567ffffffffffffffff8111156132fd57600080fd5b6132b985828601612d8e565b6000806000806080858703121561331f57600080fd5b843567ffffffffffffffff81111561333657600080fd5b61334287828801612e41565b94505060208501359250604085013561335a81612d79565b9150606085013567ffffffffffffffff81111561337657600080fd5b612e0687828801612f56565b6000806000806080858703121561339857600080fd5b843567ffffffffffffffff8111156133af57600080fd5b6133bb87828801612e41565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561337657600080fd5b60005b838110156134015781810151838201526020016133e9565b50506000910152565b600081518084526134228160208601602086016133e6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612176602083018461340a565b60008060008060008060a0878903121561348057600080fd5b863567ffffffffffffffff81111561349757600080fd5b6134a389828a01612d8e565b96505060208701356134b481612d79565b94506040870135935060608701356134cb81612d79565b9250608087013567ffffffffffffffff8111156134e757600080fd5b6134f389828a01612f0d565b979a9699509497509295939492505050565b60008060006060848603121561351a57600080fd5b833561352581612d79565b925060208401359150604084013561353c81612d79565b809150509250925092565b80151581146111c057600080fd5b60006020828403121561356757600080fd5b815161217681613547565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135a757600080fd5b830160208101925035905067ffffffffffffffff8111156135c757600080fd5b803603821315612f4f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561363081612d79565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461365c57600080fd5b80604085015250506136716040840184613572565b606080850152612c3f6080850182846135d6565b60006020828403121561369757600080fd5b5051919050565b600081356136ab81612d79565b6001600160a01b0316835260208201356136c481613547565b1515602084015260408201356136d981612d79565b6001600160a01b031660408401526136f46060830183613572565b60a0606086015261370960a0860182846135d6565b6080948501359590940194909452509092915050565b6101008152600061373461010083018c61340a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526137688187896135d6565b90508460c084015282810360e0840152613782818561369e565b9c9b505050505050505050505050565b600080604083850312156137a557600080fd5b82516137b081612d79565b6020939093015192949293505050565b6080815260006137d3608083018861340a565b82810360208401526137e68187896135d6565b90508460408401528281036060840152613800818561369e565b98975050505050505050565b60808152600061381c8788613572565b6060608085015261383160e0850182846135d6565b915050602088013561384281612d79565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138008185876135d6565b6101008152600061389261010083018a61340a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506138dd602082018561369e565b9a9950505050505050505050565b600082516138fd8184602087016133e6565b919091019291505056fea26469706673582212209729ede334f07afe016eab9b4d72c7ce168ef243ba933f0783bfed07e3f86edf64736f6c634300081a0033","sourceMap":"958:13493:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2316:19:44;:17;:19::i;:::-;2885:9:10::1;::::0;-1:-1:-1;;;;;2885:9:10::1;2871:10;:23;::::0;::::1;::::0;:64:::1;;-1:-1:-1::0;2898:10:10::1;1331:42;2898:37;;2871:64;2867:98;;;2944:21;;;;;;;;;;;;;;2867:98;958:13493:::0;;;;;3443:202:40;;;;;;;;;;-1:-1:-1;3443:202:40;;;;;:::i;:::-;;:::i;:::-;;;516:14:108;;509:22;491:41;;479:2;464:18;3443:202:40;;;;;;;;13852:597:10;;;;;;;;;;-1:-1:-1;13852:597:10;;;;;:::i;:::-;;:::i;6348:749::-;;;;;;;;;;-1:-1:-1;6348:749:10;;;;;:::i;:::-;;:::i;9116:688::-;;;;;;;;;;-1:-1:-1;9116:688:10;;;;;:::i;:::-;;:::i;12555:557::-;;;;;;;;;;-1:-1:-1;12555:557:10;;;;;:::i;:::-;;:::i;1426:24::-;;;;;;;;;;-1:-1:-1;1426:24:10;;;;-1:-1:-1;;;;;1426:24:10;;;;;;-1:-1:-1;;;;;6694:55:108;;;6676:74;;6664:2;6649:18;1426:24:10;6530:226:108;4759:191:40;;;;;;;;;;-1:-1:-1;4759:191:40;;;;;:::i;:::-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;;4759:191;;;;7138:25:108;;;7126:2;7111:18;4759:191:40;6992:177:108;5246:136:40;;;;;;;;;;-1:-1:-1;5246:136:40;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:40;;;;;:::i;:::-;;:::i;8215:547:10:-;;;;;;;;;;-1:-1:-1;8215:547:10;;;;;:::i;:::-;;:::i;1281:92::-;;;;;;;;;;;;1331:42;1281:92;;3123:77;;;;;;;;;;;;;:::i;2067:439::-;;;;;;;;;;-1:-1:-1;2067:439:10;;;;;:::i;:::-;;:::i;4158:214:42:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;2692:145:44:-;;;;;;;;;;-1:-1:-1;1270:23:44;2821:9;;;2692:145;;13292:236:10;;;;;;;;;;-1:-1:-1;13292:236:10;;;;;:::i;:::-;;:::i;5259:674::-;;;;;;;;;;-1:-1:-1;5259:674:10;;;;;:::i;:::-;;:::i;3010:73::-;;;;;;;;;;;;;:::i;3732:207:40:-;;;;;;;;;;-1:-1:-1;3732:207:40;;;;;:::i;:::-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;;;;3732:207;7331:503:10;;;;;;;;;;-1:-1:-1;7331:503:10;;;;;:::i;:::-;;:::i;2317:49:40:-;;;;;;;;;;-1:-1:-1;2317:49:40;2362:4;2317:49;;1819:58:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10819:397:10:-;;;;;;;;;;-1:-1:-1;10819:397:10;;;;;:::i;:::-;;:::i;11601:642::-;;;;;;;;;;-1:-1:-1;11601:642:10;;;;;:::i;:::-;;:::i;5662:138:40:-;;;;;;;;;;-1:-1:-1;5662:138:40;;;;;:::i;:::-;;:::i;1510:62:10:-;;;;;;;;;;;;1548:24;1510:62;;10042:426;;;;;;;;;;-1:-1:-1;10042:426:10;;;;;:::i;:::-;;:::i;2905:128:44:-;1270:23;2821:9;;;2966:61;;;3001:15;;;;;;;;;;;;;;2966:61;2905:128::o;3443:202:40:-;3528:4;3551:47;;;3566:32;3551:47;;:87;;-1:-1:-1;1148:25:46;1133:40;;;;3602:36:40;3544:94;3443:202;-1:-1:-1;;3443:202:40:o;13852:597:10:-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;14079:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;14102:20:10;::::2;::::0;14079:43:::2;14075:69;;;14131:13;;;;;;;;;;;;;;14075:69;14158:6;14168:1;14158:11:::0;14154:49:::2;;14178:25;;;;;;;;;;;;;;14154:49;-1:-1:-1::0;;;;;14217:33:10;::::2;1331:42;14217:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;14254:23:10;::::2;14272:4;14254:23;14217:60;14213:88;;;14286:15;;;;;;;;;;;;;;14213:88;14317:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;14317:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;14317:21:10;::::2;::::0;::::2;::::0;14234:18:108;;14317:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14312:71;;14363:20;;;;;;;;;;;;;;14312:71;14393:49;::::0;;;;-1:-1:-1;;;;;14393:34:10;::::2;::::0;::::2;::::0;:49:::2;::::0;14428:13;;14393:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13852:597:::0;;;;:::o;6348:749::-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;6639:8:10::2;:15;6658:1;6639:20:::0;6635:46:::2;;6668:13;;;;;;;;;;;;;;6635:46;6695:6;6705:1;6695:11:::0;6691:49:::2;;6715:25;;;;;;;;;;;;;;6691:49;6751:14;6768:51;6795:6;6803:5;6810:8;6768:26;:51::i;:::-;6751:68;;6881:1;6857:10;-1:-1:-1::0;;;;;6834:256:10::2;;6896:8;6918:5;6937:6;6957;6984:5;-1:-1:-1::0;;;;;6977:31:10::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7024:7;;7045:8;7067:13;6834:256;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6625:472;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3293:20;6348:749:10;;;;;;;:::o;9116:688::-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;9372:8:10::2;:15;9391:1;9372:20:::0;9368:46:::2;;9401:13;;;;;;;;;;;;;;9368:46;9446:1;9428:19:::0;;;9424:46:::2;;9456:14;;;;;;;;;;;;;;9424:46;9518:50;::::0;;;;::::2;::::0;::::2;7138:25:108::0;;;9482:16:10::2;::::0;;;-1:-1:-1;;;;;9518:40:10;::::2;::::0;::::2;::::0;7111:18:108;;9518:50:10::2;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9583:74;::::0;;;;9613:10:::2;9583:74;::::0;::::2;19435::108::0;1331:42:10::2;19525:18:108::0;;;19518:83;19617:18;;;19610:34;;;9481:87:10;;-1:-1:-1;9481:87:10;-1:-1:-1;;;;;;9583:29:10;::::2;::::0;::::2;::::0;19408:18:108;;9583:74:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9578:135;;9680:22;;;;;;;;;;;;;;9578:135;9747:5;-1:-1:-1::0;;;;;9728:69:10::2;9735:10;-1:-1:-1::0;;;;;9728:69:10::2;;9754:8;9764:7;;9773:8;9783:13;9728:69;;;;;;;;;;:::i;:::-;;;;;;;;9358:446;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3293:20;9116:688:10;;;;;;:::o;12555:557::-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;12778:20:10;::::2;12774:46;;12807:13;;;;;;;;;;;;;;12774:46;12834:6;12844:1;12834:11:::0;12830:48:::2;;12854:24;;;;;;;;;;;;;;12830:48;-1:-1:-1::0;;;;;12892:33:10;::::2;1331:42;12892:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;12929:23:10;::::2;12947:4;12929:23;12892:60;12888:88;;;12961:15;;;;;;;;;;;;;;12888:88;12987:29;13001:6;13009;12987:13;:29::i;:::-;13078:9;::::0;13026:79:::2;::::0;;;;-1:-1:-1;;;;;13026:42:10;;::::2;::::0;::::2;::::0;:79:::2;::::0;13069:7;;13078:9:::2;::::0;13089:6;;13097:7;;;;13026:79:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;12555:557:::0;;;;;:::o;5246:136:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:40;;966:10:43;6441:34:40;6437:102;;6498:30;;;;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;8215:547:10:-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;8482:8:10::2;:15;8501:1;8482:20:::0;8478:46:::2;;8511:13;;;;;;;;;;;;;;8478:46;8538:6;8548:1;8538:11:::0;8534:48:::2;;8558:24;;;;;;;;;;;;;;8534:48;8593:46;8607:6;1331:42;8593:13;:46::i;:::-;8703:9;::::0;;8654:101:::2;::::0;8676:7;;8664:10:::2;::::0;8654:101:::2;::::0;::::2;::::0;8685:8;;-1:-1:-1;;;;;8703:9:10::2;::::0;8715:6;;8703:9;;;8729:7;;;;8703:9;;8741:13;;8654:101:::2;:::i;:::-;;;;;;;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3123:77:10;1548:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3183:10:10::1;:8;:10::i;:::-;3123:77:::0;:::o;2067:439::-;8870:21:41;4302:15;;;;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:41;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;;;;;;;;;;;;;4851:91;4951:18;;;;4968:1;4951:18;;;4979:67;;;;5013:22;;;;;;;;4979:67;-1:-1:-1;;;;;2156:24:10;::::1;::::0;;:48:::1;;-1:-1:-1::0;;;;;;2184:20:10;::::1;::::0;2156:48:::1;2152:99;;;2227:13;;;;;;;;;;;;;;2152:99;2260:24;:22;:24::i;:::-;2294:22;:20;:22::i;:::-;2326:17;:15;:17::i;:::-;2353:24;:22;:24::i;:::-;2388:38;2362:4:40;2419:6:10::0;2388:10:::1;:38::i;:::-;;2436:31;1548:24;2460:6;2436:10;:31::i;:::-;-1:-1:-1::0;2477:9:10::1;:22:::0;;;::::1;-1:-1:-1::0;;;;;2477:22:10;::::1;;::::0;;5066:101:41;;;;5100:23;;;;;;5142:14;;-1:-1:-1;22697:50:108;;5142:14:41;;22685:2:108;22670:18;5142:14:41;;;;;;;4092:1081;;;;;2067:439:10;;:::o;4158:214:42:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;:::-;4158:214:::0;;:::o;3705:134::-;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;1327:66:54::1;3705:134:42::0;:::o;13292:236:10:-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;13419:20:10;::::2;13415:46;;13448:13;;;;;;;;;;;;;;13415:46;13472:49;::::0;;;;-1:-1:-1;;;;;13472:34:10;::::2;::::0;::::2;::::0;:49:::2;::::0;13507:13;;13472:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;5259:674:::0;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;5485:8:10::2;:15;5504:1;5485:20:::0;5481:46:::2;;5514:13;;;;;;;;;;;;;;5481:46;5541:6;5551:1;5541:11:::0;5537:49:::2;;5561:25;;;;;;;;;;;;;;5537:49;5597:14;5614:29;5629:6;5637:5;5614:14;:29::i;:::-;5597:46;;5705:1;5681:10;-1:-1:-1::0;;;;;5658:268:10::2;;5720:8;5742:5;5761:6;5781;5808:5;-1:-1:-1::0;;;;;5801:31:10::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5871:5;-1:-1:-1::0;;;;;5864:23:10::2;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5903:13;5658:268;;;;;;;;;;;;:::i;:::-;;;;;;;;5471:462;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3010:73:10;1548:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3068:8:10::1;:6;:8::i;7331:503::-:0;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;7559:8:10::2;:15;7578:1;7559:20:::0;7555:46:::2;;7588:13;;;;;;;;;;;;;;7555:46;7615:6;7625:1;7615:11:::0;7611:48:::2;;7635:24;;;;;;;;;;;;;;7611:48;7670:46;7684:6;1331:42;7670:13;:46::i;:::-;7780:9;::::0;;7731:96:::2;::::0;7753:7;;7741:10:::2;::::0;7731:96:::2;::::0;::::2;::::0;7762:8;;-1:-1:-1;;;;;7780:9:10::2;::::0;7792:6;;7780:9;;;;;7813:13;;7731:96:::2;:::i;:::-;;;;;;;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;10819:397:10;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;11058:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;11081:20:10;::::2;::::0;11058:43:::2;11054:69;;;11110:13;;;;;;;;;;;;;;11054:69;11134:75;::::0;;;;-1:-1:-1;;;;;11134:42:10;::::2;::::0;::::2;::::0;:75:::2;::::0;11177:7;;11186:5;;11193:6;;11201:7;;;;11134:75:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10819:397:::0;;;;;;:::o;11601:642::-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;11847:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;11870:20:10;::::2;::::0;11847:43:::2;11843:69;;;11899:13;;;;;;;;;;;;;;11843:69;11926:6;11936:1;11926:11:::0;11922:49:::2;;11946:25;;;;;;;;;;;;;;11922:49;-1:-1:-1::0;;;;;11985:33:10;::::2;1331:42;11985:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;12022:23:10;::::2;12040:4;12022:23;11985:60;11981:88;;;12054:15;;;;;;;;;;;;;;11981:88;12085:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;12085:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;12085:21:10;::::2;::::0;::::2;::::0;14234:18:108;;12085:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12080:71;;12131:20;;;;;;;;;;;;;;5662:138:40::0;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;10042:426:10:-:0;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;10156:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;10179:20:10;::::2;::::0;10156:43:::2;10152:69;;;10208:13;;;;;;;;;;;;;;10152:69;10235:6;10245:1;10235:11:::0;10231:49:::2;;10255:25;;;;;;;;;;;;;;10231:49;-1:-1:-1::0;;;;;10295:33:10;::::2;1331:42;10295:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;10332:23:10;::::2;10350:4;10332:23;10295:60;10291:88;;;10364:15;;;;;;;;;;;;;;10291:88;10395:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;10395:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;10395:21:10;::::2;::::0;::::2;::::0;14234:18:108;;10395:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:71;;10441:20;;;;;;;;;;;;;;3326:384:45::0;2388:30;3526:9;;:20;;3522:88;;3569:30;;;;;;;;;;;;;;3522:88;1847:1;3684:19;;3326:384::o;3900:583:10:-;4003:7;4023:16;4041:14;4066:5;-1:-1:-1;;;;;4059:40:10;;4100:8;4059:50;;;;;;;;;;;;;7138:25:108;;7126:2;7111:18;;6992:177;4059:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4124:74;;;;;4154:10;4124:74;;;19435::108;1331:42:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;4022:87:10;;-1:-1:-1;4022:87:10;-1:-1:-1;;;;;;4124:29:10;;;;;19408:18:108;;4124:74:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4119:135;;4221:22;;;;;;;;;;;;;;4119:135;4269:61;;;;;4296:10;4269:61;;;19435:74:108;4316:4:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;-1:-1:-1;;;;;4269:26:10;;;;;19408:18:108;;4269:61:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4264:121;;4353:21;;;;;;;;;;;;;;4264:121;4400:26;;;;;;;;7138:25:108;;;-1:-1:-1;;;;;4400:18:10;;;;;7111::108;;4400:26:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4395:57;;4435:17;;;;;;;;;;;;;;4395:57;4470:6;-1:-1:-1;;3900:583:10;;;;;;:::o;3716:283:45:-;1805:1;2388:30;3969:23;3716:283::o;4658:313:10:-;4740:9;;4733:65;;;;;4764:10;4733:65;;;19435:74:108;4784:4:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;-1:-1:-1;;;;;4740:9:10;;;;4733:30;;19408:18:108;;4733:65:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4728:95;;4807:16;;;;;;;;;;;;;;4728:95;4840:9;;4833:34;;;;;;;;7138:25:108;;;-1:-1:-1;;;;;4840:9:10;;;;4833:26;;7111:18:108;;4833:34:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:9;4892:2;-1:-1:-1;;;;;4892:7:10;4908:6;4892:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4877:43;;;4935:4;4930:34;;4948:16;;;;;;;;;;;;;;4148:103:40;4214:30;4225:4;966:10:43;4214::40;:30::i;7270:387::-;7347:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:40;;;;;;;;;:38;;;;7509:4;7475:38;;;7559:12;966:10:43;;887:96;7559:12:40;-1:-1:-1;;;;;7532:40:40;7550:7;-1:-1:-1;;;;;7532:40:40;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:40;;;;;;;;;;:39;;;;;;8155:40;966:10:43;;8097:14:40;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;3674:178:44;2563:16;:14;:16::i;:::-;1270:23;3791:17;;;::::1;::::0;;3823:22:::1;966:10:43::0;3832:12:44::1;3823:22;::::0;-1:-1:-1;;;;;6694:55:108;;;6676:74;;6664:2;6649:18;3823:22:44::1;;;;;;;3722:130;3674:178::o:0;2968:67:42:-;6931:20:41;:18;:20::i;1836:97:44:-;6931:20:41;:18;:20::i;:::-;1899:27:44::1;:25;:27::i;2540:111:45:-:0;6931:20:41;:18;:20::i;:::-;2610:34:45::1;:32;:34::i;4599:312:42:-:0;4679:4;-1:-1:-1;;;;;4688:6:42;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:42;:32;1327:66:54;2035:53;-1:-1:-1;;;;;2035:53:54;;1957:138;4749:32:42;-1:-1:-1;;;;;4749:42:42;;;4671:120;4654:251;;;4865:29;;;;;;;;;;;;;;2637:104:10;2362:4:40;3191:16;2362:4;3191:10;:16::i;6052:538:42:-;6169:17;-1:-1:-1;;;;;6151:50:42;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:42;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;;;;-1:-1:-1;;;;;6694:55:108;;6513:60:42;;;6676:74:108;6649:18;;6513:60:42;;;;;;;;6147:437;1327:66:54;6245:40:42;;6241:120;;6312:34;;;;;;;;7138:25:108;;;7111:18;;6312:34:42;6992:177:108;6241:120:42;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:42;5094:23;;5090:145;;5195:29;;;;;;;;;;;;;;3420:210:10;3493:7;3555:68;3582:6;3590:5;3604;-1:-1:-1;;;;;3597:23:10;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3555:26;:68::i;3366:176:44:-;2316:19;:17;:19::i;:::-;1270:23;3484:16;;;::::1;3496:4;3484:16;::::0;;3515:20:::1;966:10:43::0;3522:12:44::1;887:96:43::0;4381:197:40;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;4464:108;;4514:47;;;;;-1:-1:-1;;;;;14279:55:108;;4514:47:40;;;14261:74:108;14351:18;;;14344:34;;;14234:18;;4514:47:40;14087:297:108;3105:126:44;1270:23;2821:9;;;3163:62;;3199:15;;;;;;;;;;;;;;7084:141:41;8870:21;8560:40;;;;;;7146:73;;7191:17;;;;;;;;;;;;;;1939:156:44;6931:20:41;:18;:20::i;:::-;1270:23:44;2071:17;;;::::1;::::0;;1939:156::o;2657:183:45:-;6931:20:41;:18;:20::i;2779:335:54:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:54;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;2186:281::-;2263:17;-1:-1:-1;;;;;2263:29:54;;2296:1;2263:34;2259:119;;2320:47;;;;;-1:-1:-1;;;;;6694:55:108;;2320:47:54;;;6676:74:108;6649:18;;2320:47:54;6530:226:108;2259:119:54;1327:66;2387:73;;;;-1:-1:-1;;;;;2387:73:54;;;;;;;;;;2186:281::o;4106:253:67:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:67;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:67:o;6598:122:54:-;6648:9;:13;6644:70;;6684:19;;;;;;;;;;;;;;4625:582:67;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:67;;;:23;5045:49;5041:119;;;5121:24;;;;;-1:-1:-1;;;;;6694:55:108;;5121:24:67;;;6676:74:108;6649:18;;5121:24:67;6530:226:108;5041:119:67;-1:-1:-1;5180:10:67;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;14:332:108;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:154;-1:-1:-1;;;;;622:5:108;618:54;611:5;608:65;598:93;;687:1;684;677:12;702:161;768:5;813:2;804:6;799:3;795:16;791:25;788:45;;;829:1;826;819:12;788:45;-1:-1:-1;851:6:108;702:161;-1:-1:-1;702:161:108:o;868:763::-;985:6;993;1001;1009;1062:3;1050:9;1041:7;1037:23;1033:33;1030:53;;;1079:1;1076;1069:12;1030:53;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;-1:-1:-1;1265:2:108;1250:18;;1237:32;;-1:-1:-1;1347:2:108;1332:18;;1319:32;1360:33;1319:32;1360:33;:::i;:::-;1412:7;-1:-1:-1;1470:2:108;1455:18;;1442:32;1497:18;1486:30;;1483:50;;;1529:1;1526;1519:12;1483:50;1552:73;1617:7;1608:6;1597:9;1593:22;1552:73;:::i;:::-;1542:83;;;868:763;;;;;;;:::o;1636:184::-;1688:77;1685:1;1678:88;1785:4;1782:1;1775:15;1809:4;1806:1;1799:15;1825:843;1867:5;1920:3;1913:4;1905:6;1901:17;1897:27;1887:55;;1938:1;1935;1928:12;1887:55;1978:6;1965:20;2008:18;2000:6;1997:30;1994:56;;;2030:18;;:::i;:::-;2079:2;2073:9;2226:66;2221:2;2152:66;2145:4;2137:6;2133:17;2129:90;2125:99;2121:172;2113:6;2109:185;2360:6;2348:10;2345:22;2324:18;2312:10;2309:34;2306:62;2303:88;;;2371:18;;:::i;:::-;2407:2;2400:22;2431;;;2472:19;;;2493:4;2468:30;2465:39;-1:-1:-1;2462:59:108;;;2517:1;2514;2507:12;2462:59;2581:6;2574:4;2566:6;2562:17;2555:4;2547:6;2543:17;2530:58;2636:1;2608:19;;;2629:4;2604:30;2597:41;;;;2612:6;1825:843;-1:-1:-1;;;1825:843:108:o;2673:347::-;2724:8;2734:6;2788:3;2781:4;2773:6;2769:17;2765:27;2755:55;;2806:1;2803;2796:12;2755:55;-1:-1:-1;2829:20:108;;2872:18;2861:30;;2858:50;;;2904:1;2901;2894:12;2858:50;2941:4;2933:6;2929:17;2917:29;;2993:3;2986:4;2977:6;2969;2965:19;2961:30;2958:39;2955:59;;;3010:1;3007;3000:12;2955:59;2673:347;;;;;:::o;3025:162::-;3091:5;3136:3;3127:6;3122:3;3118:16;3114:26;3111:46;;;3153:1;3150;3143:12;3192:1261;3347:6;3355;3363;3371;3379;3387;3395;3448:3;3436:9;3427:7;3423:23;3419:33;3416:53;;;3465:1;3462;3455:12;3416:53;3505:9;3492:23;3538:18;3530:6;3527:30;3524:50;;;3570:1;3567;3560:12;3524:50;3593:49;3634:7;3625:6;3614:9;3610:22;3593:49;:::i;:::-;3583:59;-1:-1:-1;;3711:2:108;3696:18;;3683:32;;-1:-1:-1;3791:2:108;3776:18;;3763:32;3804:33;3763:32;3804:33;:::i;:::-;3856:7;-1:-1:-1;3916:2:108;3901:18;;3888:32;3945:18;3932:32;;3929:52;;;3977:1;3974;3967:12;3929:52;4016:60;4068:7;4057:8;4046:9;4042:24;4016:60;:::i;:::-;4095:8;;-1:-1:-1;3990:86:108;-1:-1:-1;;4203:3:108;4188:19;;4175:33;;-1:-1:-1;4287:3:108;4272:19;;4259:33;4317:18;4304:32;;4301:52;;;4349:1;4346;4339:12;4301:52;4372:75;4439:7;4428:8;4417:9;4413:24;4372:75;:::i;:::-;4362:85;;;3192:1261;;;;;;;;;;:::o;4458:1140::-;4604:6;4612;4620;4628;4636;4644;4697:3;4685:9;4676:7;4672:23;4668:33;4665:53;;;4714:1;4711;4704:12;4665:53;4754:9;4741:23;4787:18;4779:6;4776:30;4773:50;;;4819:1;4816;4809:12;4773:50;4842:49;4883:7;4874:6;4863:9;4859:22;4842:49;:::i;:::-;4832:59;;;4941:2;4930:9;4926:18;4913:32;4954:31;4979:5;4954:31;:::i;:::-;5004:5;-1:-1:-1;5062:2:108;5047:18;;5034:32;5091:18;5078:32;;5075:52;;;5123:1;5120;5113:12;5075:52;5162:60;5214:7;5203:8;5192:9;5188:24;5162:60;:::i;:::-;5241:8;;-1:-1:-1;5136:86:108;-1:-1:-1;;5349:2:108;5334:18;;5321:32;;-1:-1:-1;5432:3:108;5417:19;;5404:33;5462:18;5449:32;;5446:52;;;5494:1;5491;5484:12;5446:52;5517:75;5584:7;5573:8;5562:9;5558:24;5517:75;:::i;:::-;5507:85;;;4458:1140;;;;;;;;:::o;5603:922::-;5728:6;5736;5744;5752;5760;5813:3;5801:9;5792:7;5788:23;5784:33;5781:53;;;5830:1;5827;5820:12;5781:53;5870:9;5857:23;5903:18;5895:6;5892:30;5889:50;;;5935:1;5932;5925:12;5889:50;5958:73;6023:7;6014:6;6003:9;5999:22;5958:73;:::i;:::-;5948:83;-1:-1:-1;;6100:2:108;6085:18;;6072:32;;-1:-1:-1;6180:2:108;6165:18;;6152:32;6193:33;6152:32;6193:33;:::i;:::-;6245:7;-1:-1:-1;6305:2:108;6290:18;;6277:32;6334:18;6321:32;;6318:52;;;6366:1;6363;6356:12;6318:52;6405:60;6457:7;6446:8;6435:9;6431:24;6405:60;:::i;:::-;5603:922;;;;-1:-1:-1;5603:922:108;;-1:-1:-1;6484:8:108;;6379:86;5603:922;-1:-1:-1;;;5603:922:108:o;6761:226::-;6820:6;6873:2;6861:9;6852:7;6848:23;6844:32;6841:52;;;6889:1;6886;6879:12;6841:52;-1:-1:-1;6934:23:108;;6761:226;-1:-1:-1;6761:226:108:o;7174:367::-;7242:6;7250;7303:2;7291:9;7282:7;7278:23;7274:32;7271:52;;;7319:1;7316;7309:12;7271:52;7364:23;;;-1:-1:-1;7463:2:108;7448:18;;7435:32;7476:33;7435:32;7476:33;:::i;:::-;7528:7;7518:17;;;7174:367;;;;;:::o;7546:1119::-;7692:6;7700;7708;7716;7724;7732;7785:3;7773:9;7764:7;7760:23;7756:33;7753:53;;;7802:1;7799;7792:12;7753:53;7842:9;7829:23;7875:18;7867:6;7864:30;7861:50;;;7907:1;7904;7897:12;7861:50;7930:49;7971:7;7962:6;7951:9;7947:22;7930:49;:::i;:::-;7920:59;-1:-1:-1;;8048:2:108;8033:18;;8020:32;;-1:-1:-1;8149:2:108;8134:18;;8121:32;;-1:-1:-1;8232:2:108;8217:18;;8204:32;8261:18;8248:32;;8245:52;;;8293:1;8290;8283:12;8245:52;8332:60;8384:7;8373:8;8362:9;8358:24;8332:60;:::i;:::-;8411:8;;-1:-1:-1;8306:86:108;-1:-1:-1;;8499:3:108;8484:19;;8471:33;8529:18;8516:32;;8513:52;;;8561:1;8558;8551:12;8670:388;8738:6;8746;8799:2;8787:9;8778:7;8774:23;8770:32;8767:52;;;8815:1;8812;8805:12;8767:52;8854:9;8841:23;8873:31;8898:5;8873:31;:::i;:::-;8923:5;-1:-1:-1;8980:2:108;8965:18;;8952:32;8993:33;8952:32;8993:33;:::i;9063:455::-;9140:6;9148;9201:2;9189:9;9180:7;9176:23;9172:32;9169:52;;;9217:1;9214;9207:12;9169:52;9256:9;9243:23;9275:31;9300:5;9275:31;:::i;:::-;9325:5;-1:-1:-1;9381:2:108;9366:18;;9353:32;9408:18;9397:30;;9394:50;;;9440:1;9437;9430:12;9394:50;9463:49;9504:7;9495:6;9484:9;9480:22;9463:49;:::i;:::-;9453:59;;;9063:455;;;;;:::o;9523:501::-;9622:6;9630;9683:2;9671:9;9662:7;9658:23;9654:32;9651:52;;;9699:1;9696;9689:12;9651:52;9738:9;9725:23;9757:31;9782:5;9757:31;:::i;:::-;9807:5;-1:-1:-1;9863:2:108;9848:18;;9835:32;9890:18;9879:30;;9876:50;;;9922:1;9919;9912:12;9876:50;9945:73;10010:7;10001:6;9990:9;9986:22;9945:73;:::i;10029:836::-;10155:6;10163;10171;10179;10232:3;10220:9;10211:7;10207:23;10203:33;10200:53;;;10249:1;10246;10239:12;10200:53;10289:9;10276:23;10322:18;10314:6;10311:30;10308:50;;;10354:1;10351;10344:12;10308:50;10377:49;10418:7;10409:6;10398:9;10394:22;10377:49;:::i;:::-;10367:59;-1:-1:-1;;10495:2:108;10480:18;;10467:32;;-1:-1:-1;10575:2:108;10560:18;;10547:32;10588:33;10547:32;10588:33;:::i;:::-;10640:7;-1:-1:-1;10700:2:108;10685:18;;10672:32;10729:18;10716:32;;10713:52;;;10761:1;10758;10751:12;10713:52;10784:75;10851:7;10840:8;10829:9;10825:24;10784:75;:::i;10870:815::-;10996:6;11004;11012;11020;11073:3;11061:9;11052:7;11048:23;11044:33;11041:53;;;11090:1;11087;11080:12;11041:53;11130:9;11117:23;11163:18;11155:6;11152:30;11149:50;;;11195:1;11192;11185:12;11149:50;11218:49;11259:7;11250:6;11239:9;11235:22;11218:49;:::i;:::-;11208:59;-1:-1:-1;;11336:2:108;11321:18;;11308:32;;-1:-1:-1;11437:2:108;11422:18;;11409:32;;-1:-1:-1;11520:2:108;11505:18;;11492:32;11549:18;11536:32;;11533:52;;;11581:1;11578;11571:12;11690:250;11775:1;11785:113;11799:6;11796:1;11793:13;11785:113;;;11875:11;;;11869:18;11856:11;;;11849:39;11821:2;11814:10;11785:113;;;-1:-1:-1;;11932:1:108;11914:16;;11907:27;11690:250::o;11945:330::-;11987:3;12025:5;12019:12;12052:6;12047:3;12040:19;12068:76;12137:6;12130:4;12125:3;12121:14;12114:4;12107:5;12103:16;12068:76;:::i;:::-;12189:2;12177:15;12194:66;12173:88;12164:98;;;;12264:4;12160:109;;11945:330;-1:-1:-1;;11945:330:108:o;12280:220::-;12429:2;12418:9;12411:21;12392:4;12449:45;12490:2;12479:9;12475:18;12467:6;12449:45;:::i;12505:1064::-;12639:6;12647;12655;12663;12671;12679;12732:3;12720:9;12711:7;12707:23;12703:33;12700:53;;;12749:1;12746;12739:12;12700:53;12789:9;12776:23;12822:18;12814:6;12811:30;12808:50;;;12854:1;12851;12844:12;12808:50;12877:73;12942:7;12933:6;12922:9;12918:22;12877:73;:::i;:::-;12867:83;;;13000:2;12989:9;12985:18;12972:32;13013:31;13038:5;13013:31;:::i;:::-;13063:5;-1:-1:-1;13141:2:108;13126:18;;13113:32;;-1:-1:-1;13223:2:108;13208:18;;13195:32;13236:33;13195:32;13236:33;:::i;:::-;13288:7;-1:-1:-1;13348:3:108;13333:19;;13320:33;13378:18;13365:32;;13362:52;;;13410:1;13407;13400:12;13362:52;13449:60;13501:7;13490:8;13479:9;13475:24;13449:60;:::i;:::-;12505:1064;;;;-1:-1:-1;12505:1064:108;;-1:-1:-1;12505:1064:108;;13528:8;;12505:1064;-1:-1:-1;;;12505:1064:108:o;13574:508::-;13651:6;13659;13667;13720:2;13708:9;13699:7;13695:23;13691:32;13688:52;;;13736:1;13733;13726:12;13688:52;13775:9;13762:23;13794:31;13819:5;13794:31;:::i;:::-;13844:5;-1:-1:-1;13922:2:108;13907:18;;13894:32;;-1:-1:-1;14004:2:108;13989:18;;13976:32;14017:33;13976:32;14017:33;:::i;:::-;14069:7;14059:17;;;13574:508;;;;;:::o;14389:118::-;14475:5;14468:13;14461:21;14454:5;14451:32;14441:60;;14497:1;14494;14487:12;14512:245;14579:6;14632:2;14620:9;14611:7;14607:23;14603:32;14600:52;;;14648:1;14645;14638:12;14600:52;14680:9;14674:16;14699:28;14721:5;14699:28;:::i;14762:559::-;14820:5;14827:6;14887:3;14874:17;14969:66;14958:8;14942:14;14938:29;14934:102;14914:18;14910:127;14900:155;;15051:1;15048;15041:12;14900:155;15079:33;;15183:4;15170:18;;;-1:-1:-1;15131:21:108;;-1:-1:-1;15211:18:108;15200:30;;15197:50;;;15243:1;15240;15233:12;15197:50;15290:6;15274:14;15270:27;15263:5;15259:39;15256:59;;;15311:1;15308;15301:12;15326:325;15414:6;15409:3;15402:19;15466:6;15459:5;15452:4;15447:3;15443:14;15430:43;;15518:1;15511:4;15502:6;15497:3;15493:16;15489:27;15482:38;15384:3;15640:4;15570:66;15565:2;15557:6;15553:15;15549:88;15544:3;15540:98;15536:109;15529:116;;15326:325;;;;:::o;15656:798::-;15845:2;15834:9;15827:21;15808:4;15883:6;15870:20;15899:31;15924:5;15899:31;:::i;:::-;-1:-1:-1;;;;;15970:5:108;15966:54;15961:2;15950:9;15946:18;15939:82;;16070:2;16062:6;16058:15;16045:29;16106:18;16097:7;16093:32;16156:2;16147:7;16144:15;16134:43;;16173:1;16170;16163:12;16134:43;16213:2;16208;16197:9;16193:18;16186:30;;;16259:55;16310:2;16302:6;16298:15;16290:6;16259:55;:::i;:::-;16352:4;16345;16334:9;16330:20;16323:34;16374:74;16443:3;16432:9;16428:19;16414:12;16400;16374:74;:::i;16459:230::-;16529:6;16582:2;16570:9;16561:7;16557:23;16553:32;16550:52;;;16598:1;16595;16588:12;16550:52;-1:-1:-1;16643:16:108;;16459:230;-1:-1:-1;16459:230:108:o;16694:937::-;16759:3;16805:5;16792:19;16820:33;16845:7;16820:33;:::i;:::-;-1:-1:-1;;;;;16874:56:108;16862:69;;16979:4;16968:16;;16955:30;16994;16955;16994;:::i;:::-;17063:15;17056:23;17049:4;17040:14;;17033:47;17128:4;17117:16;;17104:30;17143:33;17104:30;17143:33;:::i;:::-;-1:-1:-1;;;;;17208:56:108;17201:4;17192:14;;17185:80;17308:55;17357:4;17346:16;;17350:5;17308:55;:::i;:::-;17395:4;17388;17383:3;17379:14;17372:28;17421:69;17484:4;17479:3;17475:14;17461:12;17447;17421:69;:::i;:::-;17559:4;17548:16;;;17535:30;17581:14;;;;17574:31;;;;-1:-1:-1;17409:81:108;;16694:937;-1:-1:-1;;16694:937:108:o;17636:1041::-;18067:3;18056:9;18049:22;18030:4;18094:46;18135:3;18124:9;18120:19;18112:6;18094:46;:::i;:::-;-1:-1:-1;;;;;18180:6:108;18176:55;18171:2;18160:9;18156:18;18149:83;18268:6;18263:2;18252:9;18248:18;18241:34;18311:6;18306:2;18295:9;18291:18;18284:34;18355:6;18349:3;18338:9;18334:19;18327:35;18411:9;18403:6;18399:22;18393:3;18382:9;18378:19;18371:51;18445:49;18487:6;18479;18471;18445:49;:::i;:::-;18431:63;;18531:6;18525:3;18514:9;18510:19;18503:35;18587:9;18579:6;18575:22;18569:3;18558:9;18554:19;18547:51;18615:56;18664:6;18656;18615:56;:::i;:::-;18607:64;17636:1041;-1:-1:-1;;;;;;;;;;;;17636:1041:108:o;18864:364::-;18943:6;18951;19004:2;18992:9;18983:7;18979:23;18975:32;18972:52;;;19020:1;19017;19010:12;18972:52;19052:9;19046:16;19071:31;19096:5;19071:31;:::i;:::-;19192:2;19177:18;;;;19171:25;19121:5;;19171:25;;-1:-1:-1;;;18864:364:108:o;19655:704::-;19974:3;19963:9;19956:22;19937:4;20001:46;20042:3;20031:9;20027:19;20019:6;20001:46;:::i;:::-;20095:9;20087:6;20083:22;20078:2;20067:9;20063:18;20056:50;20129:49;20171:6;20163;20155;20129:49;:::i;:::-;20115:63;;20214:6;20209:2;20198:9;20194:18;20187:34;20269:9;20261:6;20257:22;20252:2;20241:9;20237:18;20230:50;20297:56;20346:6;20338;20297:56;:::i;:::-;20289:64;19655:704;-1:-1:-1;;;;;;;;19655:704:108:o;20364:1105::-;20659:3;20648:9;20641:22;20622:4;20706:46;20745:6;20737;20706:46;:::i;:::-;20789:4;20783:3;20772:9;20768:19;20761:33;20817:74;20886:3;20875:9;20871:19;20857:12;20843;20817:74;:::i;:::-;20803:88;;;20938:4;20930:6;20926:17;20913:31;20953;20978:5;20953:31;:::i;:::-;-1:-1:-1;;;;;21021:54:108;;;21015:3;21000:19;;20993:83;21146:4;21134:17;;;21121:31;21183:3;21168:19;;21161:36;21235:55;;;21228:4;21213:20;;21206:85;21307:20;;21300:36;;;21374:22;;;-1:-1:-1;21352:20:108;;21345:52;21414:49;21378:6;21448;21440;21414:49;:::i;22758:1058::-;23233:3;23222:9;23215:22;23196:4;23260:46;23301:3;23290:9;23286:19;23278:6;23260:46;:::i;:::-;-1:-1:-1;;;;;23346:6:108;23342:55;23337:2;23326:9;23322:18;23315:83;23434:6;23429:2;23418:9;23414:18;23407:34;23477:6;23472:2;23461:9;23457:18;23450:34;23521:6;23515:3;23504:9;23500:19;23493:35;23559:9;23551:6;23547:22;23606:2;23600:3;23589:9;23585:19;23578:31;23633:1;23625:6;23618:17;23672:6;23666:3;23655:9;23651:19;23644:35;23724:2;23720;23716:11;23710:3;23699:9;23695:19;23688:40;;23745:65;23806:2;23798:6;23794:15;23786:6;23745:65;:::i;:::-;23737:73;22758:1058;-1:-1:-1;;;;;;;;;;22758:1058:108:o;25609:287::-;25738:3;25776:6;25770:13;25792:66;25851:6;25846:3;25839:4;25831:6;25827:17;25792:66;:::i;:::-;25874:16;;;;;25609:287;-1:-1:-1;;25609:287:108:o","linkReferences":{},"immutableReferences":{"44509":[{"start":9711,"length":32},{"start":9752,"length":32},{"start":10222,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","FUNGIBLE_MODULE_ADDRESS()":"3ce4a5bc","PAUSER_ROLE()":"e63ab1e9","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":"1cb5ea75","deposit(address,uint256,address)":"f45346dc","depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":"c39aca37","depositAndCall((bytes,address,uint256),uint256,address,bytes)":"21501a95","depositAndRevert(address,uint256,address,(address,uint64,bytes))":"0310eb76","execute((bytes,address,uint256),address,uint256,address,bytes)":"bcf7f32b","executeRevert(address,(address,uint64,bytes))":"717d335f","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address)":"485cc955","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","unpause()":"3f4ba83a","upgradeToAndCall(address,bytes)":"4f1ef286","withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":"7c0dcb5f","withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":"97a1cef1","withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":"048ae42c","withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":"3b283933","zetaToken()":"21e093b1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZetaAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyWZETAOrFungible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Called\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"depositAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zetaToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"The contract doesn't hold any funds and should never have active allowances.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Called(address,address,bytes,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata passed to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\",\"zrc20\":\"Address of zrc20 to pay fees.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"},\"Withdrawn(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"chainId\":\"Chain id of external chain.\",\"gasLimit\":\"Gas limit.\",\"gasfee\":\"The gas fee for the withdrawal.\",\"message\":\"The calldata passed to the contract call.\",\"protocolFlatFee\":\"The protocol flat fee for the withdrawal.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address from which the tokens are withdrawn.\",\"value\":\"The amount of tokens withdrawn.\",\"zrc20\":\"The address of the ZRC20 token.\"}}},\"kind\":\"dev\",\"methods\":{\"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"Address of zrc20 to pay fees.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"deposit(address,uint256,address)\":{\"params\":{\"amount\":\"The amount of tokens to deposit.\",\"target\":\"The target address to receive the deposited tokens.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"depositAndCall((bytes,address,uint256),uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\"}},\"depositAndRevert(address,uint256,address,(address,uint64,bytes))\":{\"params\":{\"amount\":\"The amount of tokens to revert.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"execute((bytes,address,uint256),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"executeRevert(address,(address,uint64,bytes))\":{\"params\":{\"revertContext\":\"Revert context to pass to onRevert.\",\"target\":\"The target contract to call.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Using admin to authorize upgrades and pause.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\"}},\"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"chainId\":\"Chain id of the external chain.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\"}}},\"title\":\"GatewayZEVM\",\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotFungibleModule()\":[{\"notice\":\"Error indicating that the caller is not the Fungible module.\"}],\"EmptyMessage()\":[{\"notice\":\"Error indicating call method received empty message as argument.\"}],\"FailedZetaSent()\":[{\"notice\":\"Error indicating a failure to send ZETA tokens.\"}],\"GasFeeTransferFailed()\":[{\"notice\":\"Error indicating a failure to transfer gas fee.\"}],\"InsufficientZRC20Amount()\":[{\"notice\":\"Error indicating an insufficient ZRC20 token amount.\"}],\"InsufficientZetaAmount()\":[{\"notice\":\"Error indicating an insufficient zeta amount.\"}],\"InvalidTarget()\":[{\"notice\":\"Error indicating an invalid target address.\"}],\"OnlyWZETAOrFungible()\":[{\"notice\":\"Error indicating that only WZETA or the Fungible module can call the function.\"}],\"WithdrawalFailed()\":[{\"notice\":\"Error indicating a withdrawal failure.\"}],\"ZRC20BurnFailed()\":[{\"notice\":\"Error indicating a failure to burn ZRC20 tokens.\"}],\"ZRC20DepositFailed()\":[{\"notice\":\"Error indicating a failure to deposit ZRC20 tokens.\"}],\"ZRC20TransferFailed()\":[{\"notice\":\"Error indicating a failure to transfer ZRC20 tokens.\"}],\"ZeroAddress()\":[{\"notice\":\"Error indicating a zero address was provided.\"}]},\"events\":{\"Called(address,address,bytes,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a cross-chain call is made.\"},\"Withdrawn(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a withdrawal is made.\"}},\"kind\":\"user\",\"methods\":{\"FUNGIBLE_MODULE_ADDRESS()\":{\"notice\":\"The constant address of the Fungible module.\"},\"PAUSER_ROLE()\":{\"notice\":\"New role identifier for pauser role.\"},\"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Call a smart contract on an external chain without asset transfer.\"},\"deposit(address,uint256,address)\":{\"notice\":\"Deposit foreign coins into ZRC20.\"},\"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)\":{\"notice\":\"Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM.\"},\"depositAndCall((bytes,address,uint256),uint256,address,bytes)\":{\"notice\":\"Deposit ZETA and call a user-specified contract on ZEVM.\"},\"depositAndRevert(address,uint256,address,(address,uint64,bytes))\":{\"notice\":\"Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM.\"},\"execute((bytes,address,uint256),address,uint256,address,bytes)\":{\"notice\":\"Execute a user-specified contract on ZEVM.\"},\"executeRevert(address,(address,uint64,bytes))\":{\"notice\":\"Revert a user-specified contract on ZEVM.\"},\"initialize(address,address)\":{\"notice\":\"Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\"},\"pause()\":{\"notice\":\"Pause contract.\"},\"unpause()\":{\"notice\":\"Unpause contract.\"},\"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZRC20 tokens to an external chain.\"},\"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZETA tokens to an external chain.\"},\"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZRC20 tokens and call a smart contract on an external chain.\"},\"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZETA tokens and call a smart contract on an external chain.\"},\"zetaToken()\":{\"notice\":\"The address of the Zeta token.\"}},\"notice\":\"The GatewayZEVM contract is the endpoint to call smart contracts on omnichain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/zevm/GatewayZEVM.sol\":\"GatewayZEVM\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/Revert.sol\":{\"keccak256\":\"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409\",\"dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY\"]},\"contracts/zevm/GatewayZEVM.sol\":{\"keccak256\":\"0x772edf5c1c68d0ab0d338632eeb0e9f080943f4c3a06c6f5b49469ac3842d283\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a8f808566eb3d9fe6b5c3161e7a8b2157068667e5f81d1cf37167842b402436\",\"dweb:/ipfs/QmbqTG4TsbP9TCnjVPigAmm3bXgWvcGU5KrADHs3wdaGAB\"]},\"contracts/zevm/interfaces/IGatewayZEVM.sol\":{\"keccak256\":\"0xe9520cce7fbfe8abcc4922654cf82bde005f5836ba77209dd25e5b1650e676b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c1b38d6154acd0b167a5c7858f6b46178480b649511ed8103ab1fba7fda420ec\",\"dweb:/ipfs/QmeDBj5gYBAnsKsCwiNqV41wn88ksU9J2CFs3M79VUh2jS\"]},\"contracts/zevm/interfaces/IWZETA.sol\":{\"keccak256\":\"0x9c90341536af75438f7fa7aed65d0f5f56f87d5deee7fb6f4a07f4f23eb2a106\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3110b8de3e8cdcf871090659af3c31efb67048afabd689be3bb3295c172f680\",\"dweb:/ipfs/QmWxpzAxLguM8MtnD2kBo687KXaFBjJ5v2Qeshmmye4XoH\"]},\"contracts/zevm/interfaces/IZRC20.sol\":{\"keccak256\":\"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf\",\"dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X\"]},\"contracts/zevm/interfaces/UniversalContract.sol\":{\"keccak256\":\"0x6523466b88f1bb8c5b59ba9b8915af533ccdd6c0eef91e4a9243ee0acc96b4b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9314040c4cae46ecdfa0d68f7e7c2cde4eb809b95bd6629ae731fc67f2d5285\",\"dweb:/ipfs/QmUCXokEgigBPwEGP93Q7XL2Evi3gYGr2P8UrdDKPPQhSS\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CallerIsNotFungibleModule"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EmptyMessage"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"FailedZetaSent"},{"inputs":[],"type":"error","name":"GasFeeTransferFailed"},{"inputs":[],"type":"error","name":"InsufficientZRC20Amount"},{"inputs":[],"type":"error","name":"InsufficientZetaAmount"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidTarget"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"OnlyWZETAOrFungible"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"WithdrawalFailed"},{"inputs":[],"type":"error","name":"ZRC20BurnFailed"},{"inputs":[],"type":"error","name":"ZRC20DepositFailed"},{"inputs":[],"type":"error","name":"ZRC20TransferFailed"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"zrc20","type":"address","indexed":true},{"internalType":"bytes","name":"receiver","type":"bytes","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Called","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"chainId","type":"uint256","indexed":true},{"internalType":"bytes","name":"receiver","type":"bytes","indexed":false},{"internalType":"address","name":"zrc20","type":"address","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasfee","type":"uint256","indexed":false},{"internalType":"uint256","name":"protocolFlatFee","type":"uint256","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Withdrawn","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FUNGIBLE_MODULE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"call"},{"inputs":[{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"depositAndRevert"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"execute"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"executeRevert"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"zetaToken_","type":"address"},{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdrawAndCall"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdrawAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaToken","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"params":{"gasLimit":"Gas limit.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"Address of zrc20 to pay fees."}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"deposit(address,uint256,address)":{"params":{"amount":"The amount of tokens to deposit.","target":"The target address to receive the deposited tokens.","zrc20":"The address of the ZRC20 token."}},"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"depositAndCall((bytes,address,uint256),uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call."}},"depositAndRevert(address,uint256,address,(address,uint64,bytes))":{"params":{"amount":"The amount of tokens to revert.","revertContext":"Revert context to pass to onRevert.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"execute((bytes,address,uint256),address,uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"executeRevert(address,(address,uint64,bytes))":{"params":{"revertContext":"Revert context to pass to onRevert.","target":"The target contract to call."}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address)":{"details":"Using admin to authorize upgrades and pause."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"The address of the ZRC20 token."}},"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options."}},"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","gasLimit":"Gas limit.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"The address of the ZRC20 token."}},"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","chainId":"Chain id of the external chain.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options."}}},"version":1},"userdoc":{"kind":"user","methods":{"FUNGIBLE_MODULE_ADDRESS()":{"notice":"The constant address of the Fungible module."},"PAUSER_ROLE()":{"notice":"New role identifier for pauser role."},"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"notice":"Call a smart contract on an external chain without asset transfer."},"deposit(address,uint256,address)":{"notice":"Deposit foreign coins into ZRC20."},"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":{"notice":"Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM."},"depositAndCall((bytes,address,uint256),uint256,address,bytes)":{"notice":"Deposit ZETA and call a user-specified contract on ZEVM."},"depositAndRevert(address,uint256,address,(address,uint64,bytes))":{"notice":"Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM."},"execute((bytes,address,uint256),address,uint256,address,bytes)":{"notice":"Execute a user-specified contract on ZEVM."},"executeRevert(address,(address,uint64,bytes))":{"notice":"Revert a user-specified contract on ZEVM."},"initialize(address,address)":{"notice":"Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE."},"pause()":{"notice":"Pause contract."},"unpause()":{"notice":"Unpause contract."},"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZRC20 tokens to an external chain."},"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZETA tokens to an external chain."},"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZRC20 tokens and call a smart contract on an external chain."},"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZETA tokens and call a smart contract on an external chain."},"zetaToken()":{"notice":"The address of the Zeta token."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/zevm/GatewayZEVM.sol":"GatewayZEVM"},"evmVersion":"london","libraries":{}},"sources":{"contracts/Revert.sol":{"keccak256":"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b","urls":["bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409","dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY"],"license":"MIT"},"contracts/zevm/GatewayZEVM.sol":{"keccak256":"0x772edf5c1c68d0ab0d338632eeb0e9f080943f4c3a06c6f5b49469ac3842d283","urls":["bzz-raw://7a8f808566eb3d9fe6b5c3161e7a8b2157068667e5f81d1cf37167842b402436","dweb:/ipfs/QmbqTG4TsbP9TCnjVPigAmm3bXgWvcGU5KrADHs3wdaGAB"],"license":"MIT"},"contracts/zevm/interfaces/IGatewayZEVM.sol":{"keccak256":"0xe9520cce7fbfe8abcc4922654cf82bde005f5836ba77209dd25e5b1650e676b0","urls":["bzz-raw://c1b38d6154acd0b167a5c7858f6b46178480b649511ed8103ab1fba7fda420ec","dweb:/ipfs/QmeDBj5gYBAnsKsCwiNqV41wn88ksU9J2CFs3M79VUh2jS"],"license":"MIT"},"contracts/zevm/interfaces/IWZETA.sol":{"keccak256":"0x9c90341536af75438f7fa7aed65d0f5f56f87d5deee7fb6f4a07f4f23eb2a106","urls":["bzz-raw://e3110b8de3e8cdcf871090659af3c31efb67048afabd689be3bb3295c172f680","dweb:/ipfs/QmWxpzAxLguM8MtnD2kBo687KXaFBjJ5v2Qeshmmye4XoH"],"license":"MIT"},"contracts/zevm/interfaces/IZRC20.sol":{"keccak256":"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8","urls":["bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf","dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X"],"license":"MIT"},"contracts/zevm/interfaces/UniversalContract.sol":{"keccak256":"0x6523466b88f1bb8c5b59ba9b8915af533ccdd6c0eef91e4a9243ee0acc96b4b4","urls":["bzz-raw://f9314040c4cae46ecdfa0d68f7e7c2cde4eb809b95bd6629ae731fc67f2d5285","dweb:/ipfs/QmUCXokEgigBPwEGP93Q7XL2Evi3gYGr2P8UrdDKPPQhSS"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol":{"keccak256":"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97","urls":["bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007","dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol":{"keccak256":"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74","urls":["bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45","dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":2515,"contract":"contracts/zevm/GatewayZEVM.sol:GatewayZEVM","label":"zetaToken","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"ast":{"absolutePath":"contracts/zevm/GatewayZEVM.sol","id":3463,"exportedSymbols":{"AccessControlUpgradeable":[44235],"ContextUpgradeable":[44717],"ERC165Upgradeable":[45062],"ERC1967Utils":[46098],"GatewayZEVM":[3462],"IAccessControl":[45441],"IERC1822Proxiable":[45620],"IGatewayZEVM":[4578],"IWETH9":[4708],"IZRC20":[4825],"Initializable":[44489],"PausableUpgradeable":[44893],"ReentrancyGuardUpgradeable":[45022],"RevertContext":[21],"RevertOptions":[13],"UUPSUpgradeable":[44671],"UniversalContract":[4947],"zContext":[4914]},"nodeType":"SourceUnit","src":"32:14420:10","nodes":[{"id":2476,"nodeType":"PragmaDirective","src":"32:23:10","nodes":[],"literals":["solidity","0.8",".26"]},{"id":2478,"nodeType":"ImportDirective","src":"57:61:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IGatewayZEVM.sol","file":"./interfaces/IGatewayZEVM.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4579,"symbolAliases":[{"foreign":{"id":2477,"name":"IGatewayZEVM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4578,"src":"66:12:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2481,"nodeType":"ImportDirective","src":"120:74:10","nodes":[],"absolutePath":"contracts/Revert.sol","file":"../../contracts/Revert.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":31,"symbolAliases":[{"foreign":{"id":2479,"name":"RevertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"129:13:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2480,"name":"RevertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"144:13:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2482,"nodeType":"ImportDirective","src":"195:33:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IWZETA.sol","file":"./interfaces/IWZETA.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4709,"symbolAliases":[],"unitAlias":""},{"id":2484,"nodeType":"ImportDirective","src":"229:49:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IZRC20.sol","file":"./interfaces/IZRC20.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4904,"symbolAliases":[{"foreign":{"id":2483,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"238:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2487,"nodeType":"ImportDirective","src":"279:81:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/UniversalContract.sol","file":"./interfaces/UniversalContract.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4948,"symbolAliases":[{"foreign":{"id":2485,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"288:17:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2486,"name":"zContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4914,"src":"307:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2488,"nodeType":"ImportDirective","src":"361:81:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44236,"symbolAliases":[],"unitAlias":""},{"id":2489,"nodeType":"ImportDirective","src":"443:75:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44490,"symbolAliases":[],"unitAlias":""},{"id":2490,"nodeType":"ImportDirective","src":"519:77:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44672,"symbolAliases":[],"unitAlias":""},{"id":2491,"nodeType":"ImportDirective","src":"598:75:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44894,"symbolAliases":[],"unitAlias":""},{"id":2492,"nodeType":"ImportDirective","src":"674:82:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":45023,"symbolAliases":[],"unitAlias":""},{"id":3462,"nodeType":"ContractDefinition","src":"958:13493:10","nodes":[{"id":2508,"nodeType":"ErrorDefinition","src":"1194:20:10","nodes":[],"documentation":{"id":2506,"nodeType":"StructuredDocumentation","src":"1132:57:10","text":"@notice Error indicating a zero address was provided."},"errorSelector":"d92e233d","name":"ZeroAddress","nameLocation":"1200:11:10","parameters":{"id":2507,"nodeType":"ParameterList","parameters":[],"src":"1211:2:10"}},{"id":2512,"nodeType":"VariableDeclaration","src":"1281:92:10","nodes":[],"constant":true,"documentation":{"id":2509,"nodeType":"StructuredDocumentation","src":"1220:56:10","text":"@notice The constant address of the Fungible module."},"functionSelector":"3ce4a5bc","mutability":"constant","name":"FUNGIBLE_MODULE_ADDRESS","nameLocation":"1305:23:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2510,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307837333562313442423739343633333037414163424544383644416633333232423165363232366142","id":2511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1331:42:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x735b14BB79463307AAcBED86DAf3322B1e6226aB"},"visibility":"public"},{"id":2515,"nodeType":"VariableDeclaration","src":"1426:24:10","nodes":[],"constant":false,"documentation":{"id":2513,"nodeType":"StructuredDocumentation","src":"1379:42:10","text":"@notice The address of the Zeta token."},"functionSelector":"21e093b1","mutability":"mutable","name":"zetaToken","nameLocation":"1441:9:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2514,"name":"address","nodeType":"ElementaryTypeName","src":"1426:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":2521,"nodeType":"VariableDeclaration","src":"1510:62:10","nodes":[],"constant":true,"documentation":{"id":2516,"nodeType":"StructuredDocumentation","src":"1457:48:10","text":"@notice New role identifier for pauser role."},"functionSelector":"e63ab1e9","mutability":"constant","name":"PAUSER_ROLE","nameLocation":"1534:11:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1510:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5041555345525f524f4c45","id":2519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1558:13:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""},"value":"PAUSER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""}],"id":2518,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1548:9:10","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":2535,"nodeType":"ModifierDefinition","src":"1639:153:10","nodes":[],"body":{"id":2534,"nodeType":"Block","src":"1663:129:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2524,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1677:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1681:6:10","memberName":"sender","nodeType":"MemberAccess","src":"1677:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2526,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"1691:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1677:37:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2532,"nodeType":"IfStatement","src":"1673:102:10","trueBody":{"id":2531,"nodeType":"Block","src":"1716:59:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2528,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4411,"src":"1737:25:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1737:27:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2530,"nodeType":"RevertStatement","src":"1730:34:10"}]}},{"id":2533,"nodeType":"PlaceholderStatement","src":"1784:1:10"}]},"documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"1579:55:10","text":"@dev Only Fungible module address allowed modifier."},"name":"onlyFungible","nameLocation":"1648:12:10","parameters":{"id":2523,"nodeType":"ParameterList","parameters":[],"src":"1660:2:10"},"virtual":false,"visibility":"internal"},{"id":2543,"nodeType":"FunctionDefinition","src":"1851:53:10","nodes":[],"body":{"id":2542,"nodeType":"Block","src":"1865:39:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2539,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44457,"src":"1875:20:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1875:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2541,"nodeType":"ExpressionStatement","src":"1875:22:10"}]},"documentation":{"id":2536,"nodeType":"StructuredDocumentation","src":"1798:48:10","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":2537,"nodeType":"ParameterList","parameters":[],"src":"1862:2:10"},"returnParameters":{"id":2538,"nodeType":"ParameterList","parameters":[],"src":"1865:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":2598,"nodeType":"FunctionDefinition","src":"2067:439:10","nodes":[],"body":{"id":2597,"nodeType":"Block","src":"2142:364:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2553,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"2156:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2178:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2170:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2554,"name":"address","nodeType":"ElementaryTypeName","src":"2170:7:10","typeDescriptions":{}}},"id":2557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2170:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2156:24:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2559,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2184:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2202:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2194:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2560,"name":"address","nodeType":"ElementaryTypeName","src":"2194:7:10","typeDescriptions":{}}},"id":2563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2194:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2184:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2156:48:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2570,"nodeType":"IfStatement","src":"2152:99:10","trueBody":{"id":2569,"nodeType":"Block","src":"2206:45:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2566,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"2227:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2227:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2568,"nodeType":"RevertStatement","src":"2220:20:10"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2571,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44543,"src":"2260:22:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2260:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2573,"nodeType":"ExpressionStatement","src":"2260:24:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2574,"name":"__AccessControl_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43936,"src":"2294:20:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2294:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2576,"nodeType":"ExpressionStatement","src":"2294:22:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2577,"name":"__Pausable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44769,"src":"2326:15:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2579,"nodeType":"ExpressionStatement","src":"2326:17:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2580,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44933,"src":"2353:22:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2353:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2582,"nodeType":"ExpressionStatement","src":"2353:24:10"},{"expression":{"arguments":[{"id":2584,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2399:18:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2585,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2419:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2583,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2388:10:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":2586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2388:38:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2587,"nodeType":"ExpressionStatement","src":"2388:38:10"},{"expression":{"arguments":[{"id":2589,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"2447:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2590,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2460:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2588,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2436:10:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":2591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2436:31:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2592,"nodeType":"ExpressionStatement","src":"2436:31:10"},{"expression":{"id":2595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2593,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"2477:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2594,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"2489:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2477:22:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2596,"nodeType":"ExpressionStatement","src":"2477:22:10"}]},"documentation":{"id":2544,"nodeType":"StructuredDocumentation","src":"1910:152:10","text":"@notice Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\n @dev Using admin to authorize upgrades and pause."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":2551,"kind":"modifierInvocation","modifierName":{"id":2550,"name":"initializer","nameLocations":["2130:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":44343,"src":"2130:11:10"},"nodeType":"ModifierInvocation","src":"2130:11:10"}],"name":"initialize","nameLocation":"2076:10:10","parameters":{"id":2549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2546,"mutability":"mutable","name":"zetaToken_","nameLocation":"2095:10:10","nodeType":"VariableDeclaration","scope":2598,"src":"2087:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2545,"name":"address","nodeType":"ElementaryTypeName","src":"2087:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2548,"mutability":"mutable","name":"admin_","nameLocation":"2115:6:10","nodeType":"VariableDeclaration","scope":2598,"src":"2107:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2547,"name":"address","nodeType":"ElementaryTypeName","src":"2107:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2086:36:10"},"returnParameters":{"id":2552,"nodeType":"ParameterList","parameters":[],"src":"2142:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":2609,"nodeType":"FunctionDefinition","src":"2637:104:10","nodes":[],"body":{"id":2608,"nodeType":"Block","src":"2738:3:10","nodes":[],"statements":[]},"baseFunctions":[44625],"documentation":{"id":2599,"nodeType":"StructuredDocumentation","src":"2512:120:10","text":"@dev Authorizes the upgrade of the contract.\n @param newImplementation The address of the new implementation."},"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2605,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2718:18:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2606,"kind":"modifierInvocation","modifierName":{"id":2604,"name":"onlyRole","nameLocations":["2709:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"2709:8:10"},"nodeType":"ModifierInvocation","src":"2709:28:10"}],"name":"_authorizeUpgrade","nameLocation":"2646:17:10","overrides":{"id":2603,"nodeType":"OverrideSpecifier","overrides":[],"src":"2700:8:10"},"parameters":{"id":2602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2601,"mutability":"mutable","name":"newImplementation","nameLocation":"2672:17:10","nodeType":"VariableDeclaration","scope":2609,"src":"2664:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2600,"name":"address","nodeType":"ElementaryTypeName","src":"2664:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2663:27:10"},"returnParameters":{"id":2607,"nodeType":"ParameterList","parameters":[],"src":"2738:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2629,"nodeType":"FunctionDefinition","src":"2816:156:10","nodes":[],"body":{"id":2628,"nodeType":"Block","src":"2857:115:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2615,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2871:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2875:6:10","memberName":"sender","nodeType":"MemberAccess","src":"2871:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2617,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"2885:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2871:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2619,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2898:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2902:6:10","memberName":"sender","nodeType":"MemberAccess","src":"2898:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2621,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"2912:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2898:37:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2871:64:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2627,"nodeType":"IfStatement","src":"2867:98:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2624,"name":"OnlyWZETAOrFungible","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4420,"src":"2944:19:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2944:21:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2626,"nodeType":"RevertStatement","src":"2937:28:10"}}]},"documentation":{"id":2610,"nodeType":"StructuredDocumentation","src":"2747:64:10","text":"@dev Receive function to receive ZETA from WETH9.withdraw()."},"implemented":true,"kind":"receive","modifiers":[{"id":2613,"kind":"modifierInvocation","modifierName":{"id":2612,"name":"whenNotPaused","nameLocations":["2843:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"2843:13:10"},"nodeType":"ModifierInvocation","src":"2843:13:10"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":2611,"nodeType":"ParameterList","parameters":[],"src":"2823:2:10"},"returnParameters":{"id":2614,"nodeType":"ParameterList","parameters":[],"src":"2857:0:10"},"scope":3462,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":2640,"nodeType":"FunctionDefinition","src":"3010:73:10","nodes":[],"body":{"id":2639,"nodeType":"Block","src":"3058:25:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2636,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44868,"src":"3068:6:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3068:8:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2638,"nodeType":"ExpressionStatement","src":"3068:8:10"}]},"documentation":{"id":2630,"nodeType":"StructuredDocumentation","src":"2978:27:10","text":"@notice Pause contract."},"functionSelector":"8456cb59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2633,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"3045:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2634,"kind":"modifierInvocation","modifierName":{"id":2632,"name":"onlyRole","nameLocations":["3036:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3036:8:10"},"nodeType":"ModifierInvocation","src":"3036:21:10"}],"name":"pause","nameLocation":"3019:5:10","parameters":{"id":2631,"nodeType":"ParameterList","parameters":[],"src":"3024:2:10"},"returnParameters":{"id":2635,"nodeType":"ParameterList","parameters":[],"src":"3058:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2651,"nodeType":"FunctionDefinition","src":"3123:77:10","nodes":[],"body":{"id":2650,"nodeType":"Block","src":"3173:27:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2647,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44892,"src":"3183:8:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3183:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2649,"nodeType":"ExpressionStatement","src":"3183:10:10"}]},"documentation":{"id":2641,"nodeType":"StructuredDocumentation","src":"3089:29:10","text":"@notice Unpause contract."},"functionSelector":"3f4ba83a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2644,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"3160:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2645,"kind":"modifierInvocation","modifierName":{"id":2643,"name":"onlyRole","nameLocations":["3151:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3151:8:10"},"nodeType":"ModifierInvocation","src":"3151:21:10"}],"name":"unpause","nameLocation":"3132:7:10","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"3139:2:10"},"returnParameters":{"id":2646,"nodeType":"ParameterList","parameters":[],"src":"3173:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2672,"nodeType":"FunctionDefinition","src":"3420:210:10","nodes":[],"body":{"id":2671,"nodeType":"Block","src":"3502:128:10","nodes":[],"statements":[{"expression":{"arguments":[{"id":2662,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2654,"src":"3582:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2663,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"3590:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2665,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"3604:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2664,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"3597:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3611:9:10","memberName":"GAS_LIMIT","nodeType":"MemberAccess","referencedDeclaration":4814,"src":"3597:23:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2661,"name":"_withdrawZRC20WithGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2742,"src":"3555:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,uint256) returns (uint256)"}},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3555:68:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2660,"id":2670,"nodeType":"Return","src":"3548:75:10"}]},"documentation":{"id":2652,"nodeType":"StructuredDocumentation","src":"3206:209:10","text":"@dev Internal function to withdraw ZRC20 tokens.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @return The gas fee for the withdrawal."},"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawZRC20","nameLocation":"3429:14:10","parameters":{"id":2657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2654,"mutability":"mutable","name":"amount","nameLocation":"3452:6:10","nodeType":"VariableDeclaration","scope":2672,"src":"3444:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2653,"name":"uint256","nodeType":"ElementaryTypeName","src":"3444:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2656,"mutability":"mutable","name":"zrc20","nameLocation":"3468:5:10","nodeType":"VariableDeclaration","scope":2672,"src":"3460:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2655,"name":"address","nodeType":"ElementaryTypeName","src":"3460:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3443:31:10"},"returnParameters":{"id":2660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2672,"src":"3493:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2658,"name":"uint256","nodeType":"ElementaryTypeName","src":"3493:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3492:9:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2742,"nodeType":"FunctionDefinition","src":"3900:583:10","nodes":[],"body":{"id":2741,"nodeType":"Block","src":"4012:471:10","nodes":[],"statements":[{"assignments":[2685,2687],"declarations":[{"constant":false,"id":2685,"mutability":"mutable","name":"gasZRC20","nameLocation":"4031:8:10","nodeType":"VariableDeclaration","scope":2741,"src":"4023:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2684,"name":"address","nodeType":"ElementaryTypeName","src":"4023:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2687,"mutability":"mutable","name":"gasFee","nameLocation":"4049:6:10","nodeType":"VariableDeclaration","scope":2741,"src":"4041:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2686,"name":"uint256","nodeType":"ElementaryTypeName","src":"4041:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2694,"initialValue":{"arguments":[{"id":2692,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"4100:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2689,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4066:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2688,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4059:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4073:26:10","memberName":"withdrawGasFeeWithGasLimit","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"4059:40:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$","typeString":"function (uint256) view external returns (address,uint256)"}},"id":2693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:50:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4022:87:10"},{"condition":{"id":2704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4123:75:10","subExpression":{"arguments":[{"expression":{"id":2699,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4154:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4158:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4154:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2701,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"4166:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2702,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"4191:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2696,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"4131:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2695,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4124:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4141:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"4124:29:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:74:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2709,"nodeType":"IfStatement","src":"4119:135:10","trueBody":{"id":2708,"nodeType":"Block","src":"4200:54:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2705,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"4221:20:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4221:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2707,"nodeType":"RevertStatement","src":"4214:29:10"}]}},{"condition":{"id":2722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4268:62:10","subExpression":{"arguments":[{"expression":{"id":2714,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4296:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4300:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4296:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2718,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4316:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":2717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4308:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2716,"name":"address","nodeType":"ElementaryTypeName","src":"4308:7:10","typeDescriptions":{}}},"id":2719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4308:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2720,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"4323:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2711,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4276:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2710,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4269:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"4269:26:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:61:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2727,"nodeType":"IfStatement","src":"4264:121:10","trueBody":{"id":2726,"nodeType":"Block","src":"4332:53:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2723,"name":"ZRC20TransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"4353:19:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4353:21:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2725,"nodeType":"RevertStatement","src":"4346:28:10"}]}},{"condition":{"id":2734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4399:27:10","subExpression":{"arguments":[{"id":2732,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"4419:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2729,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4407:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2728,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4400:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4414:4:10","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":4777,"src":"4400:18:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) external returns (bool)"}},"id":2733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:26:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2738,"nodeType":"IfStatement","src":"4395:57:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2735,"name":"ZRC20BurnFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4399,"src":"4435:15:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4435:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2737,"nodeType":"RevertStatement","src":"4428:24:10"}},{"expression":{"id":2739,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"4470:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2683,"id":2740,"nodeType":"Return","src":"4463:13:10"}]},"documentation":{"id":2673,"nodeType":"StructuredDocumentation","src":"3636:259:10","text":"@dev Internal function to withdraw ZRC20 tokens with gas limit.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param gasLimit Gas limit.\n @return The gas fee for the withdrawal."},"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawZRC20WithGasLimit","nameLocation":"3909:26:10","parameters":{"id":2680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2675,"mutability":"mutable","name":"amount","nameLocation":"3944:6:10","nodeType":"VariableDeclaration","scope":2742,"src":"3936:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2674,"name":"uint256","nodeType":"ElementaryTypeName","src":"3936:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2677,"mutability":"mutable","name":"zrc20","nameLocation":"3960:5:10","nodeType":"VariableDeclaration","scope":2742,"src":"3952:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2676,"name":"address","nodeType":"ElementaryTypeName","src":"3952:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2679,"mutability":"mutable","name":"gasLimit","nameLocation":"3975:8:10","nodeType":"VariableDeclaration","scope":2742,"src":"3967:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2678,"name":"uint256","nodeType":"ElementaryTypeName","src":"3967:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3935:49:10"},"returnParameters":{"id":2683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2742,"src":"4003:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2681,"name":"uint256","nodeType":"ElementaryTypeName","src":"4003:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4002:9:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2790,"nodeType":"FunctionDefinition","src":"4658:313:10","nodes":[],"body":{"id":2789,"nodeType":"Block","src":"4718:253:10","nodes":[],"statements":[{"condition":{"id":2762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4732:66:10","subExpression":{"arguments":[{"expression":{"id":2754,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4764:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4768:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4764:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2758,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4784:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":2757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4776:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2756,"name":"address","nodeType":"ElementaryTypeName","src":"4776:7:10","typeDescriptions":{}}},"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4776:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2760,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4791:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2751,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4740:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2750,"name":"IWETH9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4708,"src":"4733:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH9_$4708_$","typeString":"type(contract IWETH9)"}},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4733:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH9_$4708","typeString":"contract IWETH9"}},"id":2753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4751:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4699,"src":"4733:30:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4733:65:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2766,"nodeType":"IfStatement","src":"4728:95:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2763,"name":"FailedZetaSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"4807:14:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4807:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2765,"nodeType":"RevertStatement","src":"4800:23:10"}},{"expression":{"arguments":[{"id":2771,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4860:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2768,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4840:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2767,"name":"IWETH9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4708,"src":"4833:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH9_$4708_$","typeString":"type(contract IWETH9)"}},"id":2769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4833:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH9_$4708","typeString":"contract IWETH9"}},"id":2770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4851:8:10","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":4707,"src":"4833:26:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4833:34:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2773,"nodeType":"ExpressionStatement","src":"4833:34:10"},{"assignments":[2775,null],"declarations":[{"constant":false,"id":2775,"mutability":"mutable","name":"sent","nameLocation":"4883:4:10","nodeType":"VariableDeclaration","scope":2789,"src":"4878:9:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2774,"name":"bool","nodeType":"ElementaryTypeName","src":"4878:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2782,"initialValue":{"arguments":[{"hexValue":"","id":2780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4917:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":2776,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"4892:2:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:4:10","memberName":"call","nodeType":"MemberAccess","src":"4892:7:10","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2778,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4908:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4892:24:10","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4892:28:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4877:43:10"},{"condition":{"id":2784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4934:5:10","subExpression":{"id":2783,"name":"sent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2775,"src":"4935:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2788,"nodeType":"IfStatement","src":"4930:34:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2785,"name":"FailedZetaSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"4948:14:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4948:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2787,"nodeType":"RevertStatement","src":"4941:23:10"}}]},"documentation":{"id":2743,"nodeType":"StructuredDocumentation","src":"4489:164:10","text":"@dev Internal function to transfer ZETA tokens.\n @param amount The amount of tokens to transfer.\n @param to The address to transfer the tokens to."},"implemented":true,"kind":"function","modifiers":[],"name":"_transferZETA","nameLocation":"4667:13:10","parameters":{"id":2748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2745,"mutability":"mutable","name":"amount","nameLocation":"4689:6:10","nodeType":"VariableDeclaration","scope":2790,"src":"4681:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2744,"name":"uint256","nodeType":"ElementaryTypeName","src":"4681:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2747,"mutability":"mutable","name":"to","nameLocation":"4705:2:10","nodeType":"VariableDeclaration","scope":2790,"src":"4697:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2746,"name":"address","nodeType":"ElementaryTypeName","src":"4697:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4680:28:10"},"returnParameters":{"id":2749,"nodeType":"ParameterList","parameters":[],"src":"4718:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2852,"nodeType":"FunctionDefinition","src":"5259:674:10","nodes":[],"body":{"id":2851,"nodeType":"Block","src":"5471:462:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2807,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2793,"src":"5485:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5494:6:10","memberName":"length","nodeType":"MemberAccess","src":"5485:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5504:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5485:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2814,"nodeType":"IfStatement","src":"5481:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2811,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"5514:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5514:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2813,"nodeType":"RevertStatement","src":"5507:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5541:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5551:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5541:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2821,"nodeType":"IfStatement","src":"5537:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2818,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"5561:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5561:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2820,"nodeType":"RevertStatement","src":"5554:32:10"}},{"assignments":[2823],"declarations":[{"constant":false,"id":2823,"mutability":"mutable","name":"gasFee","nameLocation":"5605:6:10","nodeType":"VariableDeclaration","scope":2851,"src":"5597:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2822,"name":"uint256","nodeType":"ElementaryTypeName","src":"5597:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2828,"initialValue":{"arguments":[{"id":2825,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5629:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2826,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5637:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2824,"name":"_withdrawZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"5614:14:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) returns (uint256)"}},"id":2827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5614:29:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5597:46:10"},{"eventCall":{"arguments":[{"expression":{"id":2830,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5681:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5685:6:10","memberName":"sender","nodeType":"MemberAccess","src":"5681:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5705:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2833,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2793,"src":"5720:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2834,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5742:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2835,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5761:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2836,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2823,"src":"5781:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2838,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5808:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2837,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"5801:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5801:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5815:17:10","memberName":"PROTOCOL_FLAT_FEE","nodeType":"MemberAccess","referencedDeclaration":4808,"src":"5801:31:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5801:33:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":2842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5848:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2844,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5871:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2843,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"5864:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5864:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5878:9:10","memberName":"GAS_LIMIT","nodeType":"MemberAccess","referencedDeclaration":4814,"src":"5864:23:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5864:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2848,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2800,"src":"5903:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2829,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"5658:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5658:268:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2850,"nodeType":"EmitStatement","src":"5653:273:10"}]},"baseFunctions":[4442],"documentation":{"id":2791,"nodeType":"StructuredDocumentation","src":"4977:277:10","text":"@notice Withdraw ZRC20 tokens to an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param revertOptions Revert options."},"functionSelector":"7c0dcb5f","implemented":true,"kind":"function","modifiers":[{"id":2803,"kind":"modifierInvocation","modifierName":{"id":2802,"name":"nonReentrant","nameLocations":["5432:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"5432:12:10"},"nodeType":"ModifierInvocation","src":"5432:12:10"},{"id":2805,"kind":"modifierInvocation","modifierName":{"id":2804,"name":"whenNotPaused","nameLocations":["5453:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"5453:13:10"},"nodeType":"ModifierInvocation","src":"5453:13:10"}],"name":"withdraw","nameLocation":"5268:8:10","parameters":{"id":2801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2793,"mutability":"mutable","name":"receiver","nameLocation":"5299:8:10","nodeType":"VariableDeclaration","scope":2852,"src":"5286:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2792,"name":"bytes","nodeType":"ElementaryTypeName","src":"5286:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2795,"mutability":"mutable","name":"amount","nameLocation":"5325:6:10","nodeType":"VariableDeclaration","scope":2852,"src":"5317:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2794,"name":"uint256","nodeType":"ElementaryTypeName","src":"5317:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2797,"mutability":"mutable","name":"zrc20","nameLocation":"5349:5:10","nodeType":"VariableDeclaration","scope":2852,"src":"5341:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2796,"name":"address","nodeType":"ElementaryTypeName","src":"5341:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2800,"mutability":"mutable","name":"revertOptions","nameLocation":"5387:13:10","nodeType":"VariableDeclaration","scope":2852,"src":"5364:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2799,"nodeType":"UserDefinedTypeName","pathNode":{"id":2798,"name":"RevertOptions","nameLocations":["5364:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"5364:13:10"},"referencedDeclaration":13,"src":"5364:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"5276:130:10"},"returnParameters":{"id":2806,"nodeType":"ParameterList","parameters":[],"src":"5471:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2915,"nodeType":"FunctionDefinition","src":"6348:749:10","nodes":[],"body":{"id":2914,"nodeType":"Block","src":"6625:472:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2873,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"6639:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6648:6:10","memberName":"length","nodeType":"MemberAccess","src":"6639:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6658:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6639:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2880,"nodeType":"IfStatement","src":"6635:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2877,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"6668:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6668:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2879,"nodeType":"RevertStatement","src":"6661:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2881,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6695:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6705:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6695:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2887,"nodeType":"IfStatement","src":"6691:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2884,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"6715:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2886,"nodeType":"RevertStatement","src":"6708:32:10"}},{"assignments":[2889],"declarations":[{"constant":false,"id":2889,"mutability":"mutable","name":"gasFee","nameLocation":"6759:6:10","nodeType":"VariableDeclaration","scope":2914,"src":"6751:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2888,"name":"uint256","nodeType":"ElementaryTypeName","src":"6751:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2895,"initialValue":{"arguments":[{"id":2891,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6795:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2892,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6803:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2893,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"6810:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2890,"name":"_withdrawZRC20WithGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2742,"src":"6768:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,uint256) returns (uint256)"}},"id":2894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6768:51:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6751:68:10"},{"eventCall":{"arguments":[{"expression":{"id":2897,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6857:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6861:6:10","memberName":"sender","nodeType":"MemberAccess","src":"6857:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6881:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2900,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"6896:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2901,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6918:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2902,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6937:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2903,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"6957:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2905,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6984:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2904,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"6977:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6977:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6991:17:10","memberName":"PROTOCOL_FLAT_FEE","nodeType":"MemberAccess","referencedDeclaration":4808,"src":"6977:31:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6977:33:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2909,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"7024:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2910,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"7045:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2911,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"7067:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2896,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"6834:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6834:256:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2913,"nodeType":"EmitStatement","src":"6829:261:10"}]},"baseFunctions":[4472],"documentation":{"id":2853,"nodeType":"StructuredDocumentation","src":"5939:404:10","text":"@notice Withdraw ZRC20 tokens and call a smart contract on an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param message The calldata to pass to the contract call.\n @param gasLimit Gas limit.\n @param revertOptions Revert options."},"functionSelector":"048ae42c","implemented":true,"kind":"function","modifiers":[{"id":2869,"kind":"modifierInvocation","modifierName":{"id":2868,"name":"nonReentrant","nameLocations":["6586:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"6586:12:10"},"nodeType":"ModifierInvocation","src":"6586:12:10"},{"id":2871,"kind":"modifierInvocation","modifierName":{"id":2870,"name":"whenNotPaused","nameLocations":["6607:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"6607:13:10"},"nodeType":"ModifierInvocation","src":"6607:13:10"}],"name":"withdrawAndCall","nameLocation":"6357:15:10","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2855,"mutability":"mutable","name":"receiver","nameLocation":"6395:8:10","nodeType":"VariableDeclaration","scope":2915,"src":"6382:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2854,"name":"bytes","nodeType":"ElementaryTypeName","src":"6382:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2857,"mutability":"mutable","name":"amount","nameLocation":"6421:6:10","nodeType":"VariableDeclaration","scope":2915,"src":"6413:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2856,"name":"uint256","nodeType":"ElementaryTypeName","src":"6413:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2859,"mutability":"mutable","name":"zrc20","nameLocation":"6445:5:10","nodeType":"VariableDeclaration","scope":2915,"src":"6437:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2858,"name":"address","nodeType":"ElementaryTypeName","src":"6437:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2861,"mutability":"mutable","name":"message","nameLocation":"6475:7:10","nodeType":"VariableDeclaration","scope":2915,"src":"6460:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2860,"name":"bytes","nodeType":"ElementaryTypeName","src":"6460:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2863,"mutability":"mutable","name":"gasLimit","nameLocation":"6500:8:10","nodeType":"VariableDeclaration","scope":2915,"src":"6492:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2862,"name":"uint256","nodeType":"ElementaryTypeName","src":"6492:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2866,"mutability":"mutable","name":"revertOptions","nameLocation":"6541:13:10","nodeType":"VariableDeclaration","scope":2915,"src":"6518:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2865,"nodeType":"UserDefinedTypeName","pathNode":{"id":2864,"name":"RevertOptions","nameLocations":["6518:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"6518:13:10"},"referencedDeclaration":13,"src":"6518:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"6372:188:10"},"returnParameters":{"id":2872,"nodeType":"ParameterList","parameters":[],"src":"6625:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2970,"nodeType":"FunctionDefinition","src":"7331:503:10","nodes":[],"body":{"id":2969,"nodeType":"Block","src":"7545:289:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2932,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"7559:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7568:6:10","memberName":"length","nodeType":"MemberAccess","src":"7559:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7578:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7559:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2939,"nodeType":"IfStatement","src":"7555:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2936,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"7588:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7588:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2938,"nodeType":"RevertStatement","src":"7581:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2940,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7615:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7625:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7615:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2946,"nodeType":"IfStatement","src":"7611:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2943,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"7635:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7635:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2945,"nodeType":"RevertStatement","src":"7628:31:10"}},{"expression":{"arguments":[{"id":2948,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7684:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2949,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"7692:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2947,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"7670:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":2950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7670:46:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2951,"nodeType":"ExpressionStatement","src":"7670:46:10"},{"eventCall":{"arguments":[{"expression":{"id":2953,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7741:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7745:6:10","memberName":"sender","nodeType":"MemberAccess","src":"7741:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2955,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"7753:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2956,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"7762:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":2959,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"7780:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7772:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2957,"name":"address","nodeType":"ElementaryTypeName","src":"7772:7:10","typeDescriptions":{}}},"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7772:18:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2961,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7792:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":2962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7800:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7803:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"","id":2964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7806:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"hexValue":"30","id":2965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7810:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2966,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"7813:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2952,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"7731:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7731:96:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2968,"nodeType":"EmitStatement","src":"7726:101:10"}]},"baseFunctions":[4455],"documentation":{"id":2916,"nodeType":"StructuredDocumentation","src":"7103:223:10","text":"@notice Withdraw ZETA tokens to an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param revertOptions Revert options."},"functionSelector":"97a1cef1","implemented":true,"kind":"function","modifiers":[{"id":2928,"kind":"modifierInvocation","modifierName":{"id":2927,"name":"nonReentrant","nameLocations":["7506:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"7506:12:10"},"nodeType":"ModifierInvocation","src":"7506:12:10"},{"id":2930,"kind":"modifierInvocation","modifierName":{"id":2929,"name":"whenNotPaused","nameLocations":["7527:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"7527:13:10"},"nodeType":"ModifierInvocation","src":"7527:13:10"}],"name":"withdraw","nameLocation":"7340:8:10","parameters":{"id":2926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2918,"mutability":"mutable","name":"receiver","nameLocation":"7371:8:10","nodeType":"VariableDeclaration","scope":2970,"src":"7358:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2917,"name":"bytes","nodeType":"ElementaryTypeName","src":"7358:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2920,"mutability":"mutable","name":"amount","nameLocation":"7397:6:10","nodeType":"VariableDeclaration","scope":2970,"src":"7389:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2919,"name":"uint256","nodeType":"ElementaryTypeName","src":"7389:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2922,"mutability":"mutable","name":"chainId","nameLocation":"7421:7:10","nodeType":"VariableDeclaration","scope":2970,"src":"7413:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2921,"name":"uint256","nodeType":"ElementaryTypeName","src":"7413:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2925,"mutability":"mutable","name":"revertOptions","nameLocation":"7461:13:10","nodeType":"VariableDeclaration","scope":2970,"src":"7438:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2924,"nodeType":"UserDefinedTypeName","pathNode":{"id":2923,"name":"RevertOptions","nameLocations":["7438:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"7438:13:10"},"referencedDeclaration":13,"src":"7438:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"7348:132:10"},"returnParameters":{"id":2931,"nodeType":"ParameterList","parameters":[],"src":"7545:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3027,"nodeType":"FunctionDefinition","src":"8215:547:10","nodes":[],"body":{"id":3026,"nodeType":"Block","src":"8468:294:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2989,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"8482:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8491:6:10","memberName":"length","nodeType":"MemberAccess","src":"8482:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8501:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8482:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2996,"nodeType":"IfStatement","src":"8478:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2993,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"8511:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8511:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2995,"nodeType":"RevertStatement","src":"8504:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2997,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8538:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8548:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8538:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3003,"nodeType":"IfStatement","src":"8534:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3000,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"8558:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8558:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3002,"nodeType":"RevertStatement","src":"8551:31:10"}},{"expression":{"arguments":[{"id":3005,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8607:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3006,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"8615:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3004,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"8593:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":3007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8593:46:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3008,"nodeType":"ExpressionStatement","src":"8593:46:10"},{"eventCall":{"arguments":[{"expression":{"id":3010,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8664:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8668:6:10","memberName":"sender","nodeType":"MemberAccess","src":"8664:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3012,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2977,"src":"8676:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3013,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"8685:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":3016,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"8703:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8695:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3014,"name":"address","nodeType":"ElementaryTypeName","src":"8695:7:10","typeDescriptions":{}}},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8695:18:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3018,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8715:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":3019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8723:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8726:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":3021,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2979,"src":"8729:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"30","id":3022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8738:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":3023,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2982,"src":"8741:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":3009,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"8654:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":3024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8654:101:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3025,"nodeType":"EmitStatement","src":"8649:106:10"}]},"baseFunctions":[4487],"documentation":{"id":2971,"nodeType":"StructuredDocumentation","src":"7840:370:10","text":"@notice Withdraw ZETA tokens and call a smart contract on an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param chainId Chain id of the external chain.\n @param message The calldata to pass to the contract call.\n @param revertOptions Revert options."},"functionSelector":"3b283933","implemented":true,"kind":"function","modifiers":[{"id":2985,"kind":"modifierInvocation","modifierName":{"id":2984,"name":"nonReentrant","nameLocations":["8429:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8429:12:10"},"nodeType":"ModifierInvocation","src":"8429:12:10"},{"id":2987,"kind":"modifierInvocation","modifierName":{"id":2986,"name":"whenNotPaused","nameLocations":["8450:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8450:13:10"},"nodeType":"ModifierInvocation","src":"8450:13:10"}],"name":"withdrawAndCall","nameLocation":"8224:15:10","parameters":{"id":2983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2973,"mutability":"mutable","name":"receiver","nameLocation":"8262:8:10","nodeType":"VariableDeclaration","scope":3027,"src":"8249:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2972,"name":"bytes","nodeType":"ElementaryTypeName","src":"8249:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2975,"mutability":"mutable","name":"amount","nameLocation":"8288:6:10","nodeType":"VariableDeclaration","scope":3027,"src":"8280:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2974,"name":"uint256","nodeType":"ElementaryTypeName","src":"8280:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2977,"mutability":"mutable","name":"chainId","nameLocation":"8312:7:10","nodeType":"VariableDeclaration","scope":3027,"src":"8304:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2976,"name":"uint256","nodeType":"ElementaryTypeName","src":"8304:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2979,"mutability":"mutable","name":"message","nameLocation":"8344:7:10","nodeType":"VariableDeclaration","scope":3027,"src":"8329:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2978,"name":"bytes","nodeType":"ElementaryTypeName","src":"8329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2982,"mutability":"mutable","name":"revertOptions","nameLocation":"8384:13:10","nodeType":"VariableDeclaration","scope":3027,"src":"8361:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2981,"nodeType":"UserDefinedTypeName","pathNode":{"id":2980,"name":"RevertOptions","nameLocations":["8361:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8361:13:10"},"referencedDeclaration":13,"src":"8361:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8239:164:10"},"returnParameters":{"id":2988,"nodeType":"ParameterList","parameters":[],"src":"8468:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3099,"nodeType":"FunctionDefinition","src":"9116:688:10","nodes":[],"body":{"id":3098,"nodeType":"Block","src":"9358:446:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3046,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"9372:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9381:6:10","memberName":"length","nodeType":"MemberAccess","src":"9372:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9372:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3053,"nodeType":"IfStatement","src":"9368:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3050,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"9401:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9401:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3052,"nodeType":"RevertStatement","src":"9394:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3054,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"9428:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9436:6:10","memberName":"length","nodeType":"MemberAccess","src":"9428:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9446:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9428:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3061,"nodeType":"IfStatement","src":"9424:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3058,"name":"EmptyMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4423,"src":"9456:12:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3060,"nodeType":"RevertStatement","src":"9449:21:10"}},{"assignments":[3063,3065],"declarations":[{"constant":false,"id":3063,"mutability":"mutable","name":"gasZRC20","nameLocation":"9490:8:10","nodeType":"VariableDeclaration","scope":3098,"src":"9482:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3062,"name":"address","nodeType":"ElementaryTypeName","src":"9482:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3065,"mutability":"mutable","name":"gasFee","nameLocation":"9508:6:10","nodeType":"VariableDeclaration","scope":3098,"src":"9500:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3064,"name":"uint256","nodeType":"ElementaryTypeName","src":"9500:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3072,"initialValue":{"arguments":[{"id":3070,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"9559:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3067,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"9525:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3066,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"9518:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9518:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9532:26:10","memberName":"withdrawGasFeeWithGasLimit","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"9518:40:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$","typeString":"function (uint256) view external returns (address,uint256)"}},"id":3071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9518:50:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"9481:87:10"},{"condition":{"id":3082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9582:75:10","subExpression":{"arguments":[{"expression":{"id":3077,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9613:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9617:6:10","memberName":"sender","nodeType":"MemberAccess","src":"9613:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3079,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"9625:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3080,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"9650:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3074,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"9590:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3073,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"9583:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9600:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"9583:29:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":3081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:74:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3087,"nodeType":"IfStatement","src":"9578:135:10","trueBody":{"id":3086,"nodeType":"Block","src":"9659:54:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3083,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"9680:20:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9680:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3085,"nodeType":"RevertStatement","src":"9673:29:10"}]}},{"eventCall":{"arguments":[{"expression":{"id":3089,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9735:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9739:6:10","memberName":"sender","nodeType":"MemberAccess","src":"9735:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3091,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"9747:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3092,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"9754:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3093,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"9764:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":3094,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"9773:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3095,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3039,"src":"9783:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":3088,"name":"Called","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4361,"src":"9728:6:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,bytes memory,uint256,struct RevertOptions memory)"}},"id":3096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9728:69:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3097,"nodeType":"EmitStatement","src":"9723:74:10"}]},"baseFunctions":[4502],"documentation":{"id":3028,"nodeType":"StructuredDocumentation","src":"8768:343:10","text":"@notice Call a smart contract on an external chain without asset transfer.\n @param receiver The receiver address on the external chain.\n @param zrc20 Address of zrc20 to pay fees.\n @param message The calldata to pass to the contract call.\n @param gasLimit Gas limit.\n @param revertOptions Revert options."},"functionSelector":"1cb5ea75","implemented":true,"kind":"function","modifiers":[{"id":3042,"kind":"modifierInvocation","modifierName":{"id":3041,"name":"nonReentrant","nameLocations":["9319:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"9319:12:10"},"nodeType":"ModifierInvocation","src":"9319:12:10"},{"id":3044,"kind":"modifierInvocation","modifierName":{"id":3043,"name":"whenNotPaused","nameLocations":["9340:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"9340:13:10"},"nodeType":"ModifierInvocation","src":"9340:13:10"}],"name":"call","nameLocation":"9125:4:10","parameters":{"id":3040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3030,"mutability":"mutable","name":"receiver","nameLocation":"9152:8:10","nodeType":"VariableDeclaration","scope":3099,"src":"9139:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3029,"name":"bytes","nodeType":"ElementaryTypeName","src":"9139:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3032,"mutability":"mutable","name":"zrc20","nameLocation":"9178:5:10","nodeType":"VariableDeclaration","scope":3099,"src":"9170:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3031,"name":"address","nodeType":"ElementaryTypeName","src":"9170:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3034,"mutability":"mutable","name":"message","nameLocation":"9208:7:10","nodeType":"VariableDeclaration","scope":3099,"src":"9193:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3033,"name":"bytes","nodeType":"ElementaryTypeName","src":"9193:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3036,"mutability":"mutable","name":"gasLimit","nameLocation":"9233:8:10","nodeType":"VariableDeclaration","scope":3099,"src":"9225:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3035,"name":"uint256","nodeType":"ElementaryTypeName","src":"9225:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3039,"mutability":"mutable","name":"revertOptions","nameLocation":"9274:13:10","nodeType":"VariableDeclaration","scope":3099,"src":"9251:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":3038,"nodeType":"UserDefinedTypeName","pathNode":{"id":3037,"name":"RevertOptions","nameLocations":["9251:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"9251:13:10"},"referencedDeclaration":13,"src":"9251:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"9129:164:10"},"returnParameters":{"id":3045,"nodeType":"ParameterList","parameters":[],"src":"9358:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3164,"nodeType":"FunctionDefinition","src":"10042:426:10","nodes":[],"body":{"id":3163,"nodeType":"Block","src":"10142:326:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3113,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"10156:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10173:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10165:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3114,"name":"address","nodeType":"ElementaryTypeName","src":"10165:7:10","typeDescriptions":{}}},"id":3117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10165:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10156:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3119,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10179:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10197:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10189:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3120,"name":"address","nodeType":"ElementaryTypeName","src":"10189:7:10","typeDescriptions":{}}},"id":3123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10179:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10156:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3129,"nodeType":"IfStatement","src":"10152:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3126,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"10208:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10208:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3128,"nodeType":"RevertStatement","src":"10201:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3130,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"10235:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10245:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10235:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3136,"nodeType":"IfStatement","src":"10231:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3133,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"10255:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10255:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3135,"nodeType":"RevertStatement","src":"10248:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3137,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10295:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3138,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"10305:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10295:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3140,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10332:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3143,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10350:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10342:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3141,"name":"address","nodeType":"ElementaryTypeName","src":"10342:7:10","typeDescriptions":{}}},"id":3144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10342:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10332:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10295:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3150,"nodeType":"IfStatement","src":"10291:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3147,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"10364:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10364:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3149,"nodeType":"RevertStatement","src":"10357:22:10"}},{"condition":{"id":3158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10394:38:10","subExpression":{"arguments":[{"id":3155,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10417:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3156,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"10425:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3152,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"10402:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3151,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"10395:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10395:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10409:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"10395:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10395:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3162,"nodeType":"IfStatement","src":"10390:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3159,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"10441:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10441:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3161,"nodeType":"RevertStatement","src":"10434:27:10"}}]},"baseFunctions":[4512],"documentation":{"id":3100,"nodeType":"StructuredDocumentation","src":"9810:227:10","text":"@notice Deposit foreign coins into ZRC20.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to deposit.\n @param target The target address to receive the deposited tokens."},"functionSelector":"f45346dc","implemented":true,"kind":"function","modifiers":[{"id":3109,"kind":"modifierInvocation","modifierName":{"id":3108,"name":"onlyFungible","nameLocations":["10115:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"10115:12:10"},"nodeType":"ModifierInvocation","src":"10115:12:10"},{"id":3111,"kind":"modifierInvocation","modifierName":{"id":3110,"name":"whenNotPaused","nameLocations":["10128:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"10128:13:10"},"nodeType":"ModifierInvocation","src":"10128:13:10"}],"name":"deposit","nameLocation":"10051:7:10","parameters":{"id":3107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3102,"mutability":"mutable","name":"zrc20","nameLocation":"10067:5:10","nodeType":"VariableDeclaration","scope":3164,"src":"10059:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3101,"name":"address","nodeType":"ElementaryTypeName","src":"10059:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3104,"mutability":"mutable","name":"amount","nameLocation":"10082:6:10","nodeType":"VariableDeclaration","scope":3164,"src":"10074:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3103,"name":"uint256","nodeType":"ElementaryTypeName","src":"10074:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3106,"mutability":"mutable","name":"target","nameLocation":"10098:6:10","nodeType":"VariableDeclaration","scope":3164,"src":"10090:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3105,"name":"address","nodeType":"ElementaryTypeName","src":"10090:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10058:47:10"},"returnParameters":{"id":3112,"nodeType":"ParameterList","parameters":[],"src":"10142:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3211,"nodeType":"FunctionDefinition","src":"10819:397:10","nodes":[],"body":{"id":3210,"nodeType":"Block","src":"11044:172:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3183,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3170,"src":"11058:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11075:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11067:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3184,"name":"address","nodeType":"ElementaryTypeName","src":"11067:7:10","typeDescriptions":{}}},"id":3187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11067:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11058:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3189,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"11081:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11099:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11091:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3190,"name":"address","nodeType":"ElementaryTypeName","src":"11091:7:10","typeDescriptions":{}}},"id":3193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11091:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11081:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11058:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3199,"nodeType":"IfStatement","src":"11054:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3196,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"11110:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11110:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3198,"nodeType":"RevertStatement","src":"11103:20:10"}},{"expression":{"arguments":[{"id":3204,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"11177:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3205,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3170,"src":"11186:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3206,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3172,"src":"11193:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3207,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3176,"src":"11201:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3201,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"11152:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3200,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"11134:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11134:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11160:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"11134:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11134:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3209,"nodeType":"ExpressionStatement","src":"11134:75:10"}]},"baseFunctions":[4527],"documentation":{"id":3165,"nodeType":"StructuredDocumentation","src":"10474:340:10","text":"@notice Execute a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"bcf7f32b","implemented":true,"kind":"function","modifiers":[{"id":3179,"kind":"modifierInvocation","modifierName":{"id":3178,"name":"onlyFungible","nameLocations":["11005:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"11005:12:10"},"nodeType":"ModifierInvocation","src":"11005:12:10"},{"id":3181,"kind":"modifierInvocation","modifierName":{"id":3180,"name":"whenNotPaused","nameLocations":["11026:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11026:13:10"},"nodeType":"ModifierInvocation","src":"11026:13:10"}],"name":"execute","nameLocation":"10828:7:10","parameters":{"id":3177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3168,"mutability":"mutable","name":"context","nameLocation":"10863:7:10","nodeType":"VariableDeclaration","scope":3211,"src":"10845:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3167,"nodeType":"UserDefinedTypeName","pathNode":{"id":3166,"name":"zContext","nameLocations":["10845:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"10845:8:10"},"referencedDeclaration":4914,"src":"10845:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3170,"mutability":"mutable","name":"zrc20","nameLocation":"10888:5:10","nodeType":"VariableDeclaration","scope":3211,"src":"10880:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3169,"name":"address","nodeType":"ElementaryTypeName","src":"10880:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3172,"mutability":"mutable","name":"amount","nameLocation":"10911:6:10","nodeType":"VariableDeclaration","scope":3211,"src":"10903:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3171,"name":"uint256","nodeType":"ElementaryTypeName","src":"10903:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3174,"mutability":"mutable","name":"target","nameLocation":"10935:6:10","nodeType":"VariableDeclaration","scope":3211,"src":"10927:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3173,"name":"address","nodeType":"ElementaryTypeName","src":"10927:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3176,"mutability":"mutable","name":"message","nameLocation":"10966:7:10","nodeType":"VariableDeclaration","scope":3211,"src":"10951:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3175,"name":"bytes","nodeType":"ElementaryTypeName","src":"10951:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10835:144:10"},"returnParameters":{"id":3182,"nodeType":"ParameterList","parameters":[],"src":"11044:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3291,"nodeType":"FunctionDefinition","src":"11601:642:10","nodes":[],"body":{"id":3290,"nodeType":"Block","src":"11833:410:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3230,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"11847:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11864:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11856:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3231,"name":"address","nodeType":"ElementaryTypeName","src":"11856:7:10","typeDescriptions":{}}},"id":3234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11856:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11847:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3236,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"11870:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11888:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11880:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3237,"name":"address","nodeType":"ElementaryTypeName","src":"11880:7:10","typeDescriptions":{}}},"id":3240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11880:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11870:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11847:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3246,"nodeType":"IfStatement","src":"11843:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3243,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"11899:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11899:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3245,"nodeType":"RevertStatement","src":"11892:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3247,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"11926:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11936:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11926:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3253,"nodeType":"IfStatement","src":"11922:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3250,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"11946:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11946:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3252,"nodeType":"RevertStatement","src":"11939:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3254,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"11985:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3255,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"11995:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11985:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3257,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12022:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3260,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12040:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3259,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12032:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3258,"name":"address","nodeType":"ElementaryTypeName","src":"12032:7:10","typeDescriptions":{}}},"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12032:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12022:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11985:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3267,"nodeType":"IfStatement","src":"11981:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3264,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"12054:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12054:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3266,"nodeType":"RevertStatement","src":"12047:22:10"}},{"condition":{"id":3275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12084:38:10","subExpression":{"arguments":[{"id":3272,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12107:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3273,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"12115:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3269,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"12092:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3268,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"12085:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12085:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12099:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"12085:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12085:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3279,"nodeType":"IfStatement","src":"12080:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3276,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"12131:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12131:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3278,"nodeType":"RevertStatement","src":"12124:27:10"}},{"expression":{"arguments":[{"id":3284,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3215,"src":"12204:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3285,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"12213:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3286,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"12220:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3287,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3223,"src":"12228:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3281,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12179:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3280,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"12161:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12161:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12187:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"12161:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12161:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3289,"nodeType":"ExpressionStatement","src":"12161:75:10"}]},"baseFunctions":[4542],"documentation":{"id":3212,"nodeType":"StructuredDocumentation","src":"11222:374:10","text":"@notice Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"c39aca37","implemented":true,"kind":"function","modifiers":[{"id":3226,"kind":"modifierInvocation","modifierName":{"id":3225,"name":"onlyFungible","nameLocations":["11794:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"11794:12:10"},"nodeType":"ModifierInvocation","src":"11794:12:10"},{"id":3228,"kind":"modifierInvocation","modifierName":{"id":3227,"name":"whenNotPaused","nameLocations":["11815:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11815:13:10"},"nodeType":"ModifierInvocation","src":"11815:13:10"}],"name":"depositAndCall","nameLocation":"11610:14:10","parameters":{"id":3224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3215,"mutability":"mutable","name":"context","nameLocation":"11652:7:10","nodeType":"VariableDeclaration","scope":3291,"src":"11634:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3214,"nodeType":"UserDefinedTypeName","pathNode":{"id":3213,"name":"zContext","nameLocations":["11634:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"11634:8:10"},"referencedDeclaration":4914,"src":"11634:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3217,"mutability":"mutable","name":"zrc20","nameLocation":"11677:5:10","nodeType":"VariableDeclaration","scope":3291,"src":"11669:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3216,"name":"address","nodeType":"ElementaryTypeName","src":"11669:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3219,"mutability":"mutable","name":"amount","nameLocation":"11700:6:10","nodeType":"VariableDeclaration","scope":3291,"src":"11692:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3218,"name":"uint256","nodeType":"ElementaryTypeName","src":"11692:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3221,"mutability":"mutable","name":"target","nameLocation":"11724:6:10","nodeType":"VariableDeclaration","scope":3291,"src":"11716:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3220,"name":"address","nodeType":"ElementaryTypeName","src":"11716:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3223,"mutability":"mutable","name":"message","nameLocation":"11755:7:10","nodeType":"VariableDeclaration","scope":3291,"src":"11740:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3222,"name":"bytes","nodeType":"ElementaryTypeName","src":"11740:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11624:144:10"},"returnParameters":{"id":3229,"nodeType":"ParameterList","parameters":[],"src":"11833:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3355,"nodeType":"FunctionDefinition","src":"12555:557:10","nodes":[],"body":{"id":3354,"nodeType":"Block","src":"12764:348:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3308,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12778:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12796:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3310,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12788:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3309,"name":"address","nodeType":"ElementaryTypeName","src":"12788:7:10","typeDescriptions":{}}},"id":3312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12788:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12778:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3317,"nodeType":"IfStatement","src":"12774:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3314,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"12807:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12807:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3316,"nodeType":"RevertStatement","src":"12800:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3318,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"12834:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12844:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12834:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3324,"nodeType":"IfStatement","src":"12830:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3321,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"12854:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12854:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3323,"nodeType":"RevertStatement","src":"12847:31:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3325,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12892:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3326,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"12902:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12892:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3328,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12929:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3331,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12947:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12939:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3329,"name":"address","nodeType":"ElementaryTypeName","src":"12939:7:10","typeDescriptions":{}}},"id":3332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12939:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12929:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12892:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3338,"nodeType":"IfStatement","src":"12888:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3335,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"12961:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12961:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3337,"nodeType":"RevertStatement","src":"12954:22:10"}},{"expression":{"arguments":[{"id":3340,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"13001:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3341,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"13009:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3339,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"12987:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":3342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12987:29:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3343,"nodeType":"ExpressionStatement","src":"12987:29:10"},{"expression":{"arguments":[{"id":3348,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"13069:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3349,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"13078:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3350,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"13089:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3351,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3301,"src":"13097:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3345,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"13044:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3344,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"13026:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13026:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13052:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"13026:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13026:79:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3353,"nodeType":"ExpressionStatement","src":"13026:79:10"}]},"baseFunctions":[4555],"documentation":{"id":3292,"nodeType":"StructuredDocumentation","src":"12249:301:10","text":"@notice Deposit ZETA and call a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"21501a95","implemented":true,"kind":"function","modifiers":[{"id":3304,"kind":"modifierInvocation","modifierName":{"id":3303,"name":"onlyFungible","nameLocations":["12725:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"12725:12:10"},"nodeType":"ModifierInvocation","src":"12725:12:10"},{"id":3306,"kind":"modifierInvocation","modifierName":{"id":3305,"name":"whenNotPaused","nameLocations":["12746:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"12746:13:10"},"nodeType":"ModifierInvocation","src":"12746:13:10"}],"name":"depositAndCall","nameLocation":"12564:14:10","parameters":{"id":3302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3295,"mutability":"mutable","name":"context","nameLocation":"12606:7:10","nodeType":"VariableDeclaration","scope":3355,"src":"12588:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3294,"nodeType":"UserDefinedTypeName","pathNode":{"id":3293,"name":"zContext","nameLocations":["12588:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"12588:8:10"},"referencedDeclaration":4914,"src":"12588:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3297,"mutability":"mutable","name":"amount","nameLocation":"12631:6:10","nodeType":"VariableDeclaration","scope":3355,"src":"12623:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3296,"name":"uint256","nodeType":"ElementaryTypeName","src":"12623:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3299,"mutability":"mutable","name":"target","nameLocation":"12655:6:10","nodeType":"VariableDeclaration","scope":3355,"src":"12647:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3298,"name":"address","nodeType":"ElementaryTypeName","src":"12647:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3301,"mutability":"mutable","name":"message","nameLocation":"12686:7:10","nodeType":"VariableDeclaration","scope":3355,"src":"12671:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3300,"name":"bytes","nodeType":"ElementaryTypeName","src":"12671:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12578:121:10"},"returnParameters":{"id":3307,"nodeType":"ParameterList","parameters":[],"src":"12764:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3386,"nodeType":"FunctionDefinition","src":"13292:236:10","nodes":[],"body":{"id":3385,"nodeType":"Block","src":"13405:123:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3368,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"13419:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13437:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13429:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3369,"name":"address","nodeType":"ElementaryTypeName","src":"13429:7:10","typeDescriptions":{}}},"id":3372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13429:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13419:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3377,"nodeType":"IfStatement","src":"13415:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3374,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"13448:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13448:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3376,"nodeType":"RevertStatement","src":"13441:20:10"}},{"expression":{"arguments":[{"id":3382,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3361,"src":"13507:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":3379,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"13490:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3378,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"13472:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13472:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13498:8:10","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"13472:34:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13472:49:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3384,"nodeType":"ExpressionStatement","src":"13472:49:10"}]},"baseFunctions":[4564],"documentation":{"id":3356,"nodeType":"StructuredDocumentation","src":"13118:169:10","text":"@notice Revert a user-specified contract on ZEVM.\n @param target The target contract to call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"717d335f","implemented":true,"kind":"function","modifiers":[{"id":3364,"kind":"modifierInvocation","modifierName":{"id":3363,"name":"onlyFungible","nameLocations":["13378:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"13378:12:10"},"nodeType":"ModifierInvocation","src":"13378:12:10"},{"id":3366,"kind":"modifierInvocation","modifierName":{"id":3365,"name":"whenNotPaused","nameLocations":["13391:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"13391:13:10"},"nodeType":"ModifierInvocation","src":"13391:13:10"}],"name":"executeRevert","nameLocation":"13301:13:10","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3358,"mutability":"mutable","name":"target","nameLocation":"13323:6:10","nodeType":"VariableDeclaration","scope":3386,"src":"13315:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3357,"name":"address","nodeType":"ElementaryTypeName","src":"13315:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3361,"mutability":"mutable","name":"revertContext","nameLocation":"13354:13:10","nodeType":"VariableDeclaration","scope":3386,"src":"13331:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":3360,"nodeType":"UserDefinedTypeName","pathNode":{"id":3359,"name":"RevertContext","nameLocations":["13331:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"13331:13:10"},"referencedDeclaration":21,"src":"13331:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"13314:54:10"},"returnParameters":{"id":3367,"nodeType":"ParameterList","parameters":[],"src":"13405:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3461,"nodeType":"FunctionDefinition","src":"13852:597:10","nodes":[],"body":{"id":3460,"nodeType":"Block","src":"14065:384:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3403,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"14079:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14096:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14088:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3404,"name":"address","nodeType":"ElementaryTypeName","src":"14088:7:10","typeDescriptions":{}}},"id":3407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14088:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14079:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3409,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14102:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14120:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14112:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3410,"name":"address","nodeType":"ElementaryTypeName","src":"14112:7:10","typeDescriptions":{}}},"id":3413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14112:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14102:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14079:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3419,"nodeType":"IfStatement","src":"14075:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3416,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"14131:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14131:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3418,"nodeType":"RevertStatement","src":"14124:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3420,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"14158:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14168:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14158:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3426,"nodeType":"IfStatement","src":"14154:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3423,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"14178:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14178:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3425,"nodeType":"RevertStatement","src":"14171:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3427,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14217:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3428,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"14227:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14217:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3430,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14254:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3433,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14272:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14264:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3431,"name":"address","nodeType":"ElementaryTypeName","src":"14264:7:10","typeDescriptions":{}}},"id":3434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14264:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14254:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14217:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3440,"nodeType":"IfStatement","src":"14213:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3437,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"14286:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14286:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3439,"nodeType":"RevertStatement","src":"14279:22:10"}},{"condition":{"id":3448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14316:38:10","subExpression":{"arguments":[{"id":3445,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14339:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3446,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"14347:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3442,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"14324:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3441,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"14317:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14317:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14331:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"14317:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14317:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3452,"nodeType":"IfStatement","src":"14312:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3449,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"14363:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14363:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3451,"nodeType":"RevertStatement","src":"14356:27:10"}},{"expression":{"arguments":[{"id":3457,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3396,"src":"14428:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":3454,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14411:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3453,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"14393:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14393:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14419:8:10","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"14393:34:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14393:49:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3459,"nodeType":"ExpressionStatement","src":"14393:49:10"}]},"baseFunctions":[4577],"documentation":{"id":3387,"nodeType":"StructuredDocumentation","src":"13534:313:10","text":"@notice Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to revert.\n @param target The target contract to call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"0310eb76","implemented":true,"kind":"function","modifiers":[{"id":3399,"kind":"modifierInvocation","modifierName":{"id":3398,"name":"onlyFungible","nameLocations":["14026:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"14026:12:10"},"nodeType":"ModifierInvocation","src":"14026:12:10"},{"id":3401,"kind":"modifierInvocation","modifierName":{"id":3400,"name":"whenNotPaused","nameLocations":["14047:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"14047:13:10"},"nodeType":"ModifierInvocation","src":"14047:13:10"}],"name":"depositAndRevert","nameLocation":"13861:16:10","parameters":{"id":3397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3389,"mutability":"mutable","name":"zrc20","nameLocation":"13895:5:10","nodeType":"VariableDeclaration","scope":3461,"src":"13887:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3388,"name":"address","nodeType":"ElementaryTypeName","src":"13887:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3391,"mutability":"mutable","name":"amount","nameLocation":"13918:6:10","nodeType":"VariableDeclaration","scope":3461,"src":"13910:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3390,"name":"uint256","nodeType":"ElementaryTypeName","src":"13910:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3393,"mutability":"mutable","name":"target","nameLocation":"13942:6:10","nodeType":"VariableDeclaration","scope":3461,"src":"13934:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3392,"name":"address","nodeType":"ElementaryTypeName","src":"13934:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3396,"mutability":"mutable","name":"revertContext","nameLocation":"13981:13:10","nodeType":"VariableDeclaration","scope":3461,"src":"13958:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":3395,"nodeType":"UserDefinedTypeName","pathNode":{"id":3394,"name":"RevertContext","nameLocations":["13958:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"13958:13:10"},"referencedDeclaration":21,"src":"13958:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"13877:123:10"},"returnParameters":{"id":3402,"nodeType":"ParameterList","parameters":[],"src":"14065:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":2494,"name":"IGatewayZEVM","nameLocations":["986:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":4578,"src":"986:12:10"},"id":2495,"nodeType":"InheritanceSpecifier","src":"986:12:10"},{"baseName":{"id":2496,"name":"Initializable","nameLocations":["1004:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44489,"src":"1004:13:10"},"id":2497,"nodeType":"InheritanceSpecifier","src":"1004:13:10"},{"baseName":{"id":2498,"name":"AccessControlUpgradeable","nameLocations":["1023:24:10"],"nodeType":"IdentifierPath","referencedDeclaration":44235,"src":"1023:24:10"},"id":2499,"nodeType":"InheritanceSpecifier","src":"1023:24:10"},{"baseName":{"id":2500,"name":"UUPSUpgradeable","nameLocations":["1053:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":44671,"src":"1053:15:10"},"id":2501,"nodeType":"InheritanceSpecifier","src":"1053:15:10"},{"baseName":{"id":2502,"name":"ReentrancyGuardUpgradeable","nameLocations":["1074:26:10"],"nodeType":"IdentifierPath","referencedDeclaration":45022,"src":"1074:26:10"},"id":2503,"nodeType":"InheritanceSpecifier","src":"1074:26:10"},{"baseName":{"id":2504,"name":"PausableUpgradeable","nameLocations":["1106:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":44893,"src":"1106:19:10"},"id":2505,"nodeType":"InheritanceSpecifier","src":"1106:19:10"}],"canonicalName":"GatewayZEVM","contractDependencies":[],"contractKind":"contract","documentation":{"id":2493,"nodeType":"StructuredDocumentation","src":"758:200:10","text":"@title GatewayZEVM\n @notice The GatewayZEVM contract is the endpoint to call smart contracts on omnichain.\n @dev The contract doesn't hold any funds and should never have active allowances."},"fullyImplemented":true,"linearizedBaseContracts":[3462,44893,45022,44671,45620,44235,45062,48334,45441,44717,44489,4578,4386,4424],"name":"GatewayZEVM","nameLocation":"967:11:10","scope":3463,"usedErrors":[2508,4390,4393,4396,4399,4402,4405,4408,4411,4414,4417,4420,4423,44252,44255,44516,44521,44756,44759,44924,45368,45371,45830,45843,47477,47480],"usedEvents":[4361,4385,44260,44748,44753,45380,45389,45398,45809]}],"license":"MIT"},"id":10} \ No newline at end of file diff --git a/packages/tasks/src/evmCall.ts b/packages/tasks/src/evmCall.ts new file mode 100644 index 00000000..25c23cfa --- /dev/null +++ b/packages/tasks/src/evmCall.ts @@ -0,0 +1,78 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; + +export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayEvm, + GatewayABI.abi, + signer + ); + + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + try { + const tx = await gateway[ + "call(address,bytes,(address,bool,address,bytes,uint256))" + ]( + args.receiver, + encodedParameters, + { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }, + { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + } + ); + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("evm-call", "Call a universal app", evmCall) + .addParam("receiver", "Receiver address on ZetaChain") + .addOptionalParam( + "gatewayEvm", + "contract address of gateway on EVM", + "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + ) + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000" + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 10000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam("types", "The types of the parameters (example: ['string'])") + .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/evmDeposit.ts b/packages/tasks/src/evmDeposit.ts new file mode 100644 index 00000000..4e092535 --- /dev/null +++ b/packages/tasks/src/evmDeposit.ts @@ -0,0 +1,100 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; + +export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayEvm, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + try { + let tx; + if (args.erc20) { + const erc20Contract = new hre.ethers.Contract( + args.erc20, + ERC20_ABI.abi, + signer + ); + const decimals = await erc20Contract.decimals(); + const value = utils.parseUnits(args.amount, decimals); + await erc20Contract.connect(signer).approve(args.gatewayEvm, value); + const method = + "deposit(address,uint256,address,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + value, + args.erc20, + revertOptions, + txOptions + ); + } else { + const value = utils.parseEther(args.amount); + const method = "deposit(address,(address,bool,address,bytes,uint256))"; + tx = await gateway[method](args.receiver, revertOptions, { + ...txOptions, + value, + }); + } + if (tx) { + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("evm-deposit", "Deposit tokens", evmDeposit) + .addParam("receiver", "Receiver address on ZetaChain") + .addOptionalParam( + "gatewayEvm", + "contract address of gateway on EVM", + "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + ) + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000", + types.string + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 50000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam("amount", "amount of ETH to send with the transaction") + .addOptionalParam("erc20", "ERC-20 token address"); diff --git a/packages/tasks/src/evmDepositAndCall.ts b/packages/tasks/src/evmDepositAndCall.ts new file mode 100644 index 00000000..7e0ee502 --- /dev/null +++ b/packages/tasks/src/evmDepositAndCall.ts @@ -0,0 +1,117 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; + +export const evmDepositAndCall = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayEvm, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + try { + let tx; + if (args.erc20) { + const erc20Contract = new hre.ethers.Contract( + args.erc20, + ERC20_ABI.abi, + signer + ); + const decimals = await erc20Contract.decimals(); + const value = utils.parseUnits(args.amount, decimals); + await erc20Contract.connect(signer).approve(args.gatewayEvm, value); + const method = + "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + value, + args.erc20, + encodedParameters, + revertOptions, + txOptions + ); + } else { + const value = utils.parseEther(args.amount); + const method = + "depositAndCall(address,bytes,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + encodedParameters, + revertOptions, + { + ...txOptions, + value, + } + ); + } + if (tx) { + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("evm-deposit-and-call", "Deposit tokens", evmDepositAndCall) + .addParam("receiver", "Receiver address on ZetaChain") + .addOptionalParam( + "gatewayEvm", + "contract address of gateway on EVM", + "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + ) + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000", + types.string + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 50000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam("amount", "amount of ETH to send with the transaction") + .addOptionalParam("erc20", "ERC-20 token address") + .addParam("types", "The types of the parameters (example: ['string'])") + .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/index.ts b/packages/tasks/src/index.ts index 52641201..8d8e5c96 100644 --- a/packages/tasks/src/index.ts +++ b/packages/tasks/src/index.ts @@ -12,3 +12,8 @@ export { sendZETATask } from "./sendZETA"; // export { verifyTask } from "./verify"; export { tokensTask } from "./tokens"; export { withdrawTask } from "./withdraw"; +export { evmCall } from "./evmCall"; +export { evmDeposit } from "./evmDeposit"; +export { evmDepositAndCall } from "./evmDepositAndCall"; +export { zetachainCall } from "./zetachainCall"; +export { zetachainWithdraw } from "./zetachainWithdraw"; diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts new file mode 100644 index 00000000..e1ebdb53 --- /dev/null +++ b/packages/tasks/src/zetachainCall.ts @@ -0,0 +1,114 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "@zetachain/protocol-contracts/abi/zevm/ZRC20.sol/ZRC20.json"; + +export const zetachainCall = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const [signer] = await hre.ethers.getSigners(); + console.log("Signer address:", signer.address); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + const functionSignature = utils.id(args.function).slice(0, 10); + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + const message = utils.hexlify( + utils.concat([functionSignature, encodedParameters]) + ); + + try { + const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const approve = await zrc20.approve( + args.gatewayZetaChain, + utils.parseUnits(args.amount, 18), + txOptions + ); + await approve.wait(); + const tx = await gateway[ + "call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))" + ]( + utils.hexlify(args.receiver), + args.zrc20, + message, + args.callGasLimit, + revertOptions, + txOptions + ); + + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("zetachain-call", "Call a contract on a connected chain", zetachainCall) + .addOptionalParam( + "gatewayZetaChain", + "contract address of gateway on ZetaChain", + "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" + ) + .addParam("zrc20", "The address of ZRC-20 to pay fees") + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000" + ) + .addOptionalParam( + "callGasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 10000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam( + "receiver", + "The address of the receiver contract on a connected chain" + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addParam("function", "Function to call (example: 'hello(string)')") + .addParam("types", "The types of the parameters (example: ['string'])") + .addParam("amount", "The amount of tokens to pay for gas") + .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts new file mode 100644 index 00000000..7c388b77 --- /dev/null +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -0,0 +1,116 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "@zetachain/protocol-contracts/abi/zevm/ZRC20.sol/ZRC20.json"; + +export const zetachainWithdraw = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + try { + const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const decimals = await zrc20.decimals(); + const value = utils.parseUnits(args.amount, decimals); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFee(); + if (args.zrc20 === gasZRC20) { + const approveGasAndWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value.add(gasFee), + txOptions + ); + await approveGasAndWithdraw.wait(); + } else { + const gasZRC20Contract = new hre.ethers.Contract( + gasZRC20, + ZRC20ABI.abi, + signer + ); + const approveGas = await gasZRC20Contract.approve( + args.gatewayZetaChain, + gasFee, + txOptions + ); + await approveGas.wait(); + const approveWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value, + txOptions + ); + await approveWithdraw.wait(); + } + const method = + "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))"; + const tx = await gateway[method]( + utils.hexlify(args.receiver), + value, + args.zrc20, + revertOptions, + txOptions + ); + + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("zetachain-withdraw", "Withdraw tokens from ZetaChain", zetachainWithdraw) + .addOptionalParam( + "gatewayZetaChain", + "contract address of gateway on ZetaChain", + "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" + ) + .addOptionalParam("zrc20", "The address of the ZRC20 token") + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000" + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 10000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam( + "receiver", + "The address of the receiver contract on a connected chain" + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addParam("amount", "The amount of tokens to send");