@keep-network/tbtc-v2 1.7.0-dev.2 → 1.7.0-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/artifacts/BLS.json +1 -1
  2. package/artifacts/Bank.json +3 -3
  3. package/artifacts/BeaconAuthorization.json +1 -1
  4. package/artifacts/BeaconDkg.json +1 -1
  5. package/artifacts/BeaconDkgValidator.json +1 -1
  6. package/artifacts/BeaconInactivity.json +1 -1
  7. package/artifacts/BeaconSortitionPool.json +3 -3
  8. package/artifacts/Bridge.json +5 -5
  9. package/artifacts/BridgeGovernance.json +2 -2
  10. package/artifacts/BridgeGovernanceParameters.json +2 -2
  11. package/artifacts/Deposit.json +2 -2
  12. package/artifacts/DepositSweep.json +2 -2
  13. package/artifacts/DonationVault.json +3 -3
  14. package/artifacts/EcdsaDkgValidator.json +1 -1
  15. package/artifacts/EcdsaInactivity.json +1 -1
  16. package/artifacts/EcdsaSortitionPool.json +3 -3
  17. package/artifacts/Fraud.json +2 -2
  18. package/artifacts/LightRelay.json +18 -18
  19. package/artifacts/LightRelayMaintainerProxy.json +8 -8
  20. package/artifacts/MaintainerProxy.json +19 -19
  21. package/artifacts/MovingFunds.json +2 -2
  22. package/artifacts/NuCypherToken.json +2 -2
  23. package/artifacts/RandomBeacon.json +2 -2
  24. package/artifacts/RandomBeaconChaosnet.json +2 -2
  25. package/artifacts/RandomBeaconGovernance.json +2 -2
  26. package/artifacts/Redemption.json +2 -2
  27. package/artifacts/RedemptionWatchtower.json +5 -5
  28. package/artifacts/ReimbursementPool.json +2 -2
  29. package/artifacts/T.json +2 -2
  30. package/artifacts/TBTC.json +3 -3
  31. package/artifacts/TBTCToken.json +3 -3
  32. package/artifacts/TBTCVault.json +23 -23
  33. package/artifacts/TokenStaking.json +1 -1
  34. package/artifacts/TokenholderGovernor.json +9 -9
  35. package/artifacts/TokenholderTimelock.json +8 -8
  36. package/artifacts/VendingMachine.json +3 -3
  37. package/artifacts/VendingMachineNuCypher.json +1 -1
  38. package/artifacts/VendingMachineV2.json +3 -3
  39. package/artifacts/VendingMachineV3.json +3 -3
  40. package/artifacts/WalletProposalValidator.json +2 -2
  41. package/artifacts/WalletRegistry.json +5 -5
  42. package/artifacts/WalletRegistryGovernance.json +2 -2
  43. package/artifacts/Wallets.json +2 -2
  44. package/artifacts/solcInputs/{f2e0a2af0443022f2a08057465eb1709.json → 7feaa969ec563d78b5d1a7cbf222210c.json} +2 -2
  45. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  46. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  47. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  48. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  49. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  50. package/build/contracts/bridge/BridgeGovernanceParameters.sol/BridgeGovernanceParameters.dbg.json +1 -1
  51. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  52. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  53. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  54. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  55. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  56. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  57. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  58. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  59. package/build/contracts/bridge/Redemption.sol/IRedemptionWatchtower.dbg.json +1 -1
  60. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  61. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  62. package/build/contracts/bridge/RedemptionWatchtower.sol/RedemptionWatchtower.dbg.json +1 -1
  63. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  64. package/build/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.dbg.json +1 -1
  65. package/build/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.dbg.json +1 -1
  66. package/build/contracts/bridge/WalletProposalValidator.sol/WalletProposalValidator.dbg.json +1 -1
  67. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  68. package/build/contracts/integrator/AbstractTBTCDepositor.sol/AbstractTBTCDepositor.dbg.json +1 -1
  69. package/build/contracts/integrator/IBridge.sol/IBridge.dbg.json +1 -1
  70. package/build/contracts/integrator/IBridge.sol/IBridgeTypes.dbg.json +1 -1
  71. package/build/contracts/integrator/ITBTCVault.sol/ITBTCVault.dbg.json +1 -1
  72. package/build/contracts/l2/L1BitcoinDepositor.sol/L1BitcoinDepositor.dbg.json +1 -1
  73. package/build/contracts/l2/L1BitcoinDepositor.sol/L1BitcoinDepositor.json +2 -2
  74. package/build/contracts/l2/L2BitcoinDepositor.sol/IL2WormholeGateway.dbg.json +1 -1
  75. package/build/contracts/l2/L2BitcoinDepositor.sol/L2BitcoinDepositor.dbg.json +1 -1
  76. package/build/contracts/l2/L2BitcoinDepositor.sol/L2BitcoinDepositor.json +2 -2
  77. package/build/contracts/l2/L2TBTC.sol/L2TBTC.dbg.json +1 -1
  78. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.dbg.json +1 -1
  79. package/build/contracts/l2/Wormhole.sol/IWormhole.dbg.json +1 -1
  80. package/build/contracts/l2/Wormhole.sol/IWormholeReceiver.dbg.json +1 -1
  81. package/build/contracts/l2/Wormhole.sol/IWormholeRelayer.dbg.json +1 -1
  82. package/build/contracts/l2/Wormhole.sol/IWormholeTokenBridge.dbg.json +1 -1
  83. package/build/contracts/l2/Wormhole.sol/WormholeTypes.dbg.json +1 -1
  84. package/build/contracts/l2/Wormhole.sol/WormholeUtils.dbg.json +1 -1
  85. package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.dbg.json +1 -1
  86. package/build/contracts/relay/LightRelay.sol/ILightRelay.dbg.json +1 -1
  87. package/build/contracts/relay/LightRelay.sol/LightRelay.dbg.json +1 -1
  88. package/build/contracts/relay/LightRelay.sol/RelayUtils.dbg.json +1 -1
  89. package/build/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.dbg.json +1 -1
  90. package/build/contracts/test/BankStub.sol/BankStub.dbg.json +1 -1
  91. package/build/contracts/test/BridgeStub.sol/BridgeStub.dbg.json +1 -1
  92. package/build/contracts/test/HeartbeatStub.sol/HeartbeatStub.dbg.json +1 -1
  93. package/build/contracts/test/LightRelayStub.sol/LightRelayStub.dbg.json +1 -1
  94. package/build/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.dbg.json +1 -1
  95. package/build/contracts/test/SepoliaLightRelay.sol/SepoliaLightRelay.dbg.json +1 -1
  96. package/build/contracts/test/SystemTestRelay.sol/SystemTestRelay.dbg.json +1 -1
  97. package/build/contracts/test/TestBitcoinTx.sol/TestBitcoinTx.dbg.json +1 -1
  98. package/build/contracts/test/TestERC20.sol/TestERC20.dbg.json +1 -1
  99. package/build/contracts/test/TestERC721.sol/TestERC721.dbg.json +1 -1
  100. package/build/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.dbg.json +1 -1
  101. package/build/contracts/test/TestTBTCDepositor.sol/MockBridge.dbg.json +1 -1
  102. package/build/contracts/test/TestTBTCDepositor.sol/MockTBTCVault.dbg.json +1 -1
  103. package/build/contracts/test/TestTBTCDepositor.sol/TestTBTCDepositor.dbg.json +1 -1
  104. package/build/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.dbg.json +1 -1
  105. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  106. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  107. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  108. package/build/contracts/vault/TBTCOptimisticMinting.sol/TBTCOptimisticMinting.dbg.json +1 -1
  109. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  110. package/contracts/l2/L1BitcoinDepositor.sol +15 -1
  111. package/contracts/l2/L2BitcoinDepositor.sol +10 -1
  112. package/export/artifacts/contracts/bridge/VendingMachine.sol/VendingMachine.json +6 -6
  113. package/export/artifacts/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.json +6 -6
  114. package/export/artifacts/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.json +6 -6
  115. package/export/artifacts/contracts/l2/L1BitcoinDepositor.sol/L1BitcoinDepositor.json +3119 -2241
  116. package/export/artifacts/contracts/l2/L2BitcoinDepositor.sol/L2BitcoinDepositor.json +654 -192
  117. package/export/artifacts/contracts/l2/L2TBTC.sol/L2TBTC.json +40 -40
  118. package/export/artifacts/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +51 -51
  119. package/export/artifacts/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +88 -88
  120. package/export/artifacts/contracts/relay/LightRelay.sol/LightRelay.json +57 -57
  121. package/export/artifacts/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.json +31 -31
  122. package/export/artifacts/contracts/test/BankStub.sol/BankStub.json +2 -2
  123. package/export/artifacts/contracts/test/BridgeStub.sol/BridgeStub.json +30 -30
  124. package/export/artifacts/contracts/test/HeartbeatStub.sol/HeartbeatStub.json +2 -2
  125. package/export/artifacts/contracts/test/LightRelayStub.sol/LightRelayStub.json +59 -59
  126. package/export/artifacts/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.json +7 -7
  127. package/export/artifacts/contracts/test/SepoliaLightRelay.sol/SepoliaLightRelay.json +59 -59
  128. package/export/artifacts/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +14 -14
  129. package/export/artifacts/contracts/test/TestBitcoinTx.sol/TestBitcoinTx.json +5 -5
  130. package/export/artifacts/contracts/test/TestERC20.sol/TestERC20.json +6 -6
  131. package/export/artifacts/contracts/test/TestERC721.sol/TestERC721.json +8 -8
  132. package/export/artifacts/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.json +2 -2
  133. package/export/artifacts/contracts/test/TestTBTCDepositor.sol/MockBridge.json +18 -18
  134. package/export/artifacts/contracts/test/TestTBTCDepositor.sol/MockTBTCVault.json +20 -20
  135. package/export/artifacts/contracts/test/TestTBTCDepositor.sol/TestTBTCDepositor.json +10 -10
  136. package/export/artifacts/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.json +37 -37
  137. package/export/artifacts/contracts/token/TBTC.sol/TBTC.json +2 -2
  138. package/export/artifacts/contracts/vault/DonationVault.sol/DonationVault.json +11 -11
  139. package/export/artifacts/contracts/vault/TBTCVault.sol/TBTCVault.json +135 -135
  140. package/export/typechain/factories/L1BitcoinDepositor__factory.js +1 -1
  141. package/export/typechain/factories/L2BitcoinDepositor__factory.js +1 -1
  142. package/package.json +1 -1
@@ -356,8 +356,8 @@
356
356
  "type": "function"
357
357
  }
358
358
  ],
359
- "bytecode": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b610f93806100ed6000396000f3fe6080604052600436106100bc5760003560e01c80637ebef52911610074578063da25b7251161004e578063da25b725146101d7578063e1551fc9146101f7578063f2fde38b1461021757600080fd5b80637ebef529146101655780638da5cb5b14610185578063aa82e33b146101b757600080fd5b8063529dca32116100a5578063529dca321461011d578063642dc03314610130578063715018a61461015057600080fd5b806312622e5b146100c157806331446c46146100fb575b600080fd5b3480156100cd57600080fd5b506066546100e390600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561010757600080fd5b5061011b6101163660046109e5565b610237565b005b61011b61012b366004610ad0565b610347565b34801561013c57600080fd5b5061011b61014b366004610bd9565b6105ab565b34801561015c57600080fd5b5061011b6105fd565b34801561017157600080fd5b5061011b610180366004610c49565b610611565b34801561019157600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016100f2565b3480156101c357600080fd5b5060665461019f906001600160a01b031681565b3480156101e357600080fd5b5060655461019f906001600160a01b031681565b34801561020357600080fd5b5060675461019f906001600160a01b031681565b34801561022357600080fd5b5061011b6102323660046109e5565b61079e565b61023f61082e565b6067546001600160a01b03161561029d5760405162461bcd60e51b815260206004820181905260248201527f4c3120426974636f696e204465706f7369746f7220616c72656164792073657460448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b8152602060048201526024808201527f4c3120426974636f696e204465706f7369746f72206d757374206e6f7420626560448201527f20307830000000000000000000000000000000000000000000000000000000006064820152608401610294565b6067805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6065546001600160a01b031633146103a15760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206973206e6f7420576f726d686f6c652052656c6179657200006044820152606401610294565b60665461ffff838116600160a01b90920416146104265760405162461bcd60e51b815260206004820152602960248201527f536f7572636520636861696e206973206e6f742074686520657870656374656460448201527f204c3120636861696e00000000000000000000000000000000000000000000006064820152608401610294565b6067546001600160a01b0316836001600160a01b0316146104af5760405162461bcd60e51b815260206004820152603760248201527f536f757263652061646472657373206973206e6f74207468652065787065637460448201527f6564204c3120426974636f696e206465706f7369746f720000000000000000006064820152608401610294565b83516001146105265760405162461bcd60e51b815260206004820152603060248201527f45787065637465642031206164646974696f6e616c20564141206b657920666f60448201527f7220746f6b656e207472616e73666572000000000000000000000000000000006064820152608401610294565b60665484516001600160a01b0390911690635d21a59690869060009061054e5761054e610c83565b60200260200101516040518263ffffffff1660e01b81526004016105729190610c99565b600060405180830381600087803b15801561058c57600080fd5b505af11580156105a0573d6000803e3d6000fd5b505050505050505050565b336001600160a01b0316816001600160a01b03167f69a2a6d267e87f99180657174ca85389598d457ba949435ee4940f621bb849cf85856040516105f0929190610daa565b60405180910390a3505050565b61060561082e565b61060f6000610888565b565b600054610100900460ff16158080156106315750600054600160ff909116105b8061064b5750303b15801561064b575060005460ff166001145b6106bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610294565b6000805460ff1916600117905580156106e0576000805461ff0019166101001790555b6106e86108e7565b6065805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691909117909155606680549185167fffffffffffffffffffff0000000000000000000000000000000000000000000090921691909117600160a01b61ffff8516021790558015610798576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6107a661082e565b6001600160a01b0381166108225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610294565b61082b81610888565b50565b6033546001600160a01b0316331461060f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166109525760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f600054610100900460ff166109c05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f33610888565b80356001600160a01b03811681146109e057600080fd5b919050565b6000602082840312156109f757600080fd5b610a00826109c9565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a4657610a46610a07565b604052919050565b600082601f830112610a5f57600080fd5b813567ffffffffffffffff811115610a7957610a79610a07565b610a8c601f8201601f1916602001610a1d565b818152846020838601011115610aa157600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff811681146109e057600080fd5b600080600080600060a08688031215610ae857600080fd5b853567ffffffffffffffff80821115610b0057600080fd5b610b0c89838a01610a4e565b9650602091508188013581811115610b2357600080fd5b8801601f81018a13610b3457600080fd5b803582811115610b4657610b46610a07565b8060051b610b55858201610a1d565b918252828101850191858101908d841115610b6f57600080fd5b86850192505b83831015610bab57823586811115610b8d5760008081fd5b610b9b8f8983890101610a4e565b8352509186019190860190610b75565b809a505050505050505060408601359250610bc860608701610abe565b949793965091946080013592915050565b6000806000838503610100811215610bf057600080fd5b843567ffffffffffffffff811115610c0757600080fd5b850160808188031215610c1957600080fd5b935060c0601f1982011215610c2d57600080fd5b50602084019150610c4060e085016109c9565b90509250925092565b600080600060608486031215610c5e57600080fd5b610c67846109c9565b9250610c75602085016109c9565b9150610c4060408501610abe565b634e487b7160e01b600052603260045260246000fd5b600060208083528351808285015260005b81811015610cc657858101830151858201604001528201610caa565b506000604082860101526040601f19601f8301168501019250505092915050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146109e057600080fd5b6000808335601e19843603018112610d2e57600080fd5b830160208101925035905067ffffffffffffffff811115610d4e57600080fd5b803603821315610d5d57600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b80356bffffffffffffffffffffffff19811681146109e057600080fd5b60e0815260007fffffffff0000000000000000000000000000000000000000000000000000000080610ddb86610ce7565b1660e0840152610dee6020860186610d17565b6080610100860152610e0561016086018284610d64565b915050610e156040870187610d17565b85830360df1901610120870152610e2d838284610d64565b9250505081610e3e60608801610ce7565b16610140850152915050823563ffffffff8116808214610e5d57600080fd5b806020850152505060208301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114610e9857600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000008116604084015250610ecd60408401610d8d565b6bffffffffffffffffffffffff198116606084015250610eef60608401610d8d565b6bffffffffffffffffffffffff198116608084015250610f1160808401610ce7565b7fffffffff00000000000000000000000000000000000000000000000000000000811660a084015250610f4660a084016109c9565b6001600160a01b03811660c084015250939250505056fea264697066735822122042750d5d0301414db765c71cc0277bffaff34ae10a7413505e402a864e15029564736f6c63430008110033",
360
- "deployedBytecode": "0x6080604052600436106100bc5760003560e01c80637ebef52911610074578063da25b7251161004e578063da25b725146101d7578063e1551fc9146101f7578063f2fde38b1461021757600080fd5b80637ebef529146101655780638da5cb5b14610185578063aa82e33b146101b757600080fd5b8063529dca32116100a5578063529dca321461011d578063642dc03314610130578063715018a61461015057600080fd5b806312622e5b146100c157806331446c46146100fb575b600080fd5b3480156100cd57600080fd5b506066546100e390600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561010757600080fd5b5061011b6101163660046109e5565b610237565b005b61011b61012b366004610ad0565b610347565b34801561013c57600080fd5b5061011b61014b366004610bd9565b6105ab565b34801561015c57600080fd5b5061011b6105fd565b34801561017157600080fd5b5061011b610180366004610c49565b610611565b34801561019157600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016100f2565b3480156101c357600080fd5b5060665461019f906001600160a01b031681565b3480156101e357600080fd5b5060655461019f906001600160a01b031681565b34801561020357600080fd5b5060675461019f906001600160a01b031681565b34801561022357600080fd5b5061011b6102323660046109e5565b61079e565b61023f61082e565b6067546001600160a01b03161561029d5760405162461bcd60e51b815260206004820181905260248201527f4c3120426974636f696e204465706f7369746f7220616c72656164792073657460448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b8152602060048201526024808201527f4c3120426974636f696e204465706f7369746f72206d757374206e6f7420626560448201527f20307830000000000000000000000000000000000000000000000000000000006064820152608401610294565b6067805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6065546001600160a01b031633146103a15760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206973206e6f7420576f726d686f6c652052656c6179657200006044820152606401610294565b60665461ffff838116600160a01b90920416146104265760405162461bcd60e51b815260206004820152602960248201527f536f7572636520636861696e206973206e6f742074686520657870656374656460448201527f204c3120636861696e00000000000000000000000000000000000000000000006064820152608401610294565b6067546001600160a01b0316836001600160a01b0316146104af5760405162461bcd60e51b815260206004820152603760248201527f536f757263652061646472657373206973206e6f74207468652065787065637460448201527f6564204c3120426974636f696e206465706f7369746f720000000000000000006064820152608401610294565b83516001146105265760405162461bcd60e51b815260206004820152603060248201527f45787065637465642031206164646974696f6e616c20564141206b657920666f60448201527f7220746f6b656e207472616e73666572000000000000000000000000000000006064820152608401610294565b60665484516001600160a01b0390911690635d21a59690869060009061054e5761054e610c83565b60200260200101516040518263ffffffff1660e01b81526004016105729190610c99565b600060405180830381600087803b15801561058c57600080fd5b505af11580156105a0573d6000803e3d6000fd5b505050505050505050565b336001600160a01b0316816001600160a01b03167f69a2a6d267e87f99180657174ca85389598d457ba949435ee4940f621bb849cf85856040516105f0929190610daa565b60405180910390a3505050565b61060561082e565b61060f6000610888565b565b600054610100900460ff16158080156106315750600054600160ff909116105b8061064b5750303b15801561064b575060005460ff166001145b6106bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610294565b6000805460ff1916600117905580156106e0576000805461ff0019166101001790555b6106e86108e7565b6065805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691909117909155606680549185167fffffffffffffffffffff0000000000000000000000000000000000000000000090921691909117600160a01b61ffff8516021790558015610798576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6107a661082e565b6001600160a01b0381166108225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610294565b61082b81610888565b50565b6033546001600160a01b0316331461060f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166109525760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f600054610100900460ff166109c05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f33610888565b80356001600160a01b03811681146109e057600080fd5b919050565b6000602082840312156109f757600080fd5b610a00826109c9565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a4657610a46610a07565b604052919050565b600082601f830112610a5f57600080fd5b813567ffffffffffffffff811115610a7957610a79610a07565b610a8c601f8201601f1916602001610a1d565b818152846020838601011115610aa157600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff811681146109e057600080fd5b600080600080600060a08688031215610ae857600080fd5b853567ffffffffffffffff80821115610b0057600080fd5b610b0c89838a01610a4e565b9650602091508188013581811115610b2357600080fd5b8801601f81018a13610b3457600080fd5b803582811115610b4657610b46610a07565b8060051b610b55858201610a1d565b918252828101850191858101908d841115610b6f57600080fd5b86850192505b83831015610bab57823586811115610b8d5760008081fd5b610b9b8f8983890101610a4e565b8352509186019190860190610b75565b809a505050505050505060408601359250610bc860608701610abe565b949793965091946080013592915050565b6000806000838503610100811215610bf057600080fd5b843567ffffffffffffffff811115610c0757600080fd5b850160808188031215610c1957600080fd5b935060c0601f1982011215610c2d57600080fd5b50602084019150610c4060e085016109c9565b90509250925092565b600080600060608486031215610c5e57600080fd5b610c67846109c9565b9250610c75602085016109c9565b9150610c4060408501610abe565b634e487b7160e01b600052603260045260246000fd5b600060208083528351808285015260005b81811015610cc657858101830151858201604001528201610caa565b506000604082860101526040601f19601f8301168501019250505092915050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146109e057600080fd5b6000808335601e19843603018112610d2e57600080fd5b830160208101925035905067ffffffffffffffff811115610d4e57600080fd5b803603821315610d5d57600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b80356bffffffffffffffffffffffff19811681146109e057600080fd5b60e0815260007fffffffff0000000000000000000000000000000000000000000000000000000080610ddb86610ce7565b1660e0840152610dee6020860186610d17565b6080610100860152610e0561016086018284610d64565b915050610e156040870187610d17565b85830360df1901610120870152610e2d838284610d64565b9250505081610e3e60608801610ce7565b16610140850152915050823563ffffffff8116808214610e5d57600080fd5b806020850152505060208301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114610e9857600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000008116604084015250610ecd60408401610d8d565b6bffffffffffffffffffffffff198116606084015250610eef60608401610d8d565b6bffffffffffffffffffffffff198116608084015250610f1160808401610ce7565b7fffffffff00000000000000000000000000000000000000000000000000000000811660a084015250610f4660a084016109c9565b6001600160a01b03811660c084015250939250505056fea264697066735822122042750d5d0301414db765c71cc0277bffaff34ae10a7413505e402a864e15029564736f6c63430008110033",
359
+ "bytecode": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61108b806100ed6000396000f3fe6080604052600436106100bc5760003560e01c80637ebef52911610074578063da25b7251161004e578063da25b725146101d7578063e1551fc9146101f7578063f2fde38b1461021757600080fd5b80637ebef529146101655780638da5cb5b14610185578063aa82e33b146101b757600080fd5b8063529dca32116100a5578063529dca321461011d578063642dc03314610130578063715018a61461015057600080fd5b806312622e5b146100c157806331446c46146100fb575b600080fd5b3480156100cd57600080fd5b506066546100e390600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561010757600080fd5b5061011b610116366004610add565b610237565b005b61011b61012b366004610bc8565b610347565b34801561013c57600080fd5b5061011b61014b366004610cd1565b6105ab565b34801561015c57600080fd5b5061011b6105fd565b34801561017157600080fd5b5061011b610180366004610d41565b610611565b34801561019157600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016100f2565b3480156101c357600080fd5b5060665461019f906001600160a01b031681565b3480156101e357600080fd5b5060655461019f906001600160a01b031681565b34801561020357600080fd5b5060675461019f906001600160a01b031681565b34801561022357600080fd5b5061011b610232366004610add565b610896565b61023f610926565b6067546001600160a01b03161561029d5760405162461bcd60e51b815260206004820181905260248201527f4c3120426974636f696e204465706f7369746f7220616c72656164792073657460448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b8152602060048201526024808201527f4c3120426974636f696e204465706f7369746f72206d757374206e6f7420626560448201527f20307830000000000000000000000000000000000000000000000000000000006064820152608401610294565b6067805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6065546001600160a01b031633146103a15760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206973206e6f7420576f726d686f6c652052656c6179657200006044820152606401610294565b60665461ffff838116600160a01b90920416146104265760405162461bcd60e51b815260206004820152602960248201527f536f7572636520636861696e206973206e6f742074686520657870656374656460448201527f204c3120636861696e00000000000000000000000000000000000000000000006064820152608401610294565b6067546001600160a01b0316836001600160a01b0316146104af5760405162461bcd60e51b815260206004820152603760248201527f536f757263652061646472657373206973206e6f74207468652065787065637460448201527f6564204c3120426974636f696e206465706f7369746f720000000000000000006064820152608401610294565b83516001146105265760405162461bcd60e51b815260206004820152603060248201527f45787065637465642031206164646974696f6e616c20564141206b657920666f60448201527f7220746f6b656e207472616e73666572000000000000000000000000000000006064820152608401610294565b60665484516001600160a01b0390911690635d21a59690869060009061054e5761054e610d7b565b60200260200101516040518263ffffffff1660e01b81526004016105729190610d91565b600060405180830381600087803b15801561058c57600080fd5b505af11580156105a0573d6000803e3d6000fd5b505050505050505050565b336001600160a01b0316816001600160a01b03167f69a2a6d267e87f99180657174ca85389598d457ba949435ee4940f621bb849cf85856040516105f0929190610ea2565b60405180910390a3505050565b610605610926565b61060f6000610980565b565b600054610100900460ff16158080156106315750600054600160ff909116105b8061064b5750303b15801561064b575060005460ff166001145b6106bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610294565b6000805460ff1916600117905580156106e0576000805461ff0019166101001790555b6106e86109df565b6001600160a01b0384166107645760405162461bcd60e51b815260206004820152602660248201527f576f726d686f6c6552656c6179657220616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152608401610294565b6001600160a01b0383166107e05760405162461bcd60e51b815260206004820152602860248201527f4c32576f726d686f6c654761746577617920616464726573732063616e6e6f7460448201527f206265207a65726f0000000000000000000000000000000000000000000000006064820152608401610294565b6065805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691909117909155606680549185167fffffffffffffffffffff0000000000000000000000000000000000000000000090921691909117600160a01b61ffff8516021790558015610890576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b61089e610926565b6001600160a01b03811661091a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610294565b61092381610980565b50565b6033546001600160a01b0316331461060f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610a4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f600054610100900460ff16610ab85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f33610980565b80356001600160a01b0381168114610ad857600080fd5b919050565b600060208284031215610aef57600080fd5b610af882610ac1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610b3e57610b3e610aff565b604052919050565b600082601f830112610b5757600080fd5b813567ffffffffffffffff811115610b7157610b71610aff565b610b84601f8201601f1916602001610b15565b818152846020838601011115610b9957600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff81168114610ad857600080fd5b600080600080600060a08688031215610be057600080fd5b853567ffffffffffffffff80821115610bf857600080fd5b610c0489838a01610b46565b9650602091508188013581811115610c1b57600080fd5b8801601f81018a13610c2c57600080fd5b803582811115610c3e57610c3e610aff565b8060051b610c4d858201610b15565b918252828101850191858101908d841115610c6757600080fd5b86850192505b83831015610ca357823586811115610c855760008081fd5b610c938f8983890101610b46565b8352509186019190860190610c6d565b809a505050505050505060408601359250610cc060608701610bb6565b949793965091946080013592915050565b6000806000838503610100811215610ce857600080fd5b843567ffffffffffffffff811115610cff57600080fd5b850160808188031215610d1157600080fd5b935060c0601f1982011215610d2557600080fd5b50602084019150610d3860e08501610ac1565b90509250925092565b600080600060608486031215610d5657600080fd5b610d5f84610ac1565b9250610d6d60208501610ac1565b9150610d3860408501610bb6565b634e487b7160e01b600052603260045260246000fd5b600060208083528351808285015260005b81811015610dbe57858101830151858201604001528201610da2565b506000604082860101526040601f19601f8301168501019250505092915050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ad857600080fd5b6000808335601e19843603018112610e2657600080fd5b830160208101925035905067ffffffffffffffff811115610e4657600080fd5b803603821315610e5557600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b80356bffffffffffffffffffffffff1981168114610ad857600080fd5b60e0815260007fffffffff0000000000000000000000000000000000000000000000000000000080610ed386610ddf565b1660e0840152610ee66020860186610e0f565b6080610100860152610efd61016086018284610e5c565b915050610f0d6040870187610e0f565b85830360df1901610120870152610f25838284610e5c565b9250505081610f3660608801610ddf565b16610140850152915050823563ffffffff8116808214610f5557600080fd5b806020850152505060208301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114610f9057600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000008116604084015250610fc560408401610e85565b6bffffffffffffffffffffffff198116606084015250610fe760608401610e85565b6bffffffffffffffffffffffff19811660808401525061100960808401610ddf565b7fffffffff00000000000000000000000000000000000000000000000000000000811660a08401525061103e60a08401610ac1565b6001600160a01b03811660c084015250939250505056fea26469706673582212208fd81f7d1bbc764b66d23b7c75909404cee086841ae0060c8fded3dd05814b6d64736f6c63430008110033",
360
+ "deployedBytecode": "0x6080604052600436106100bc5760003560e01c80637ebef52911610074578063da25b7251161004e578063da25b725146101d7578063e1551fc9146101f7578063f2fde38b1461021757600080fd5b80637ebef529146101655780638da5cb5b14610185578063aa82e33b146101b757600080fd5b8063529dca32116100a5578063529dca321461011d578063642dc03314610130578063715018a61461015057600080fd5b806312622e5b146100c157806331446c46146100fb575b600080fd5b3480156100cd57600080fd5b506066546100e390600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561010757600080fd5b5061011b610116366004610add565b610237565b005b61011b61012b366004610bc8565b610347565b34801561013c57600080fd5b5061011b61014b366004610cd1565b6105ab565b34801561015c57600080fd5b5061011b6105fd565b34801561017157600080fd5b5061011b610180366004610d41565b610611565b34801561019157600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016100f2565b3480156101c357600080fd5b5060665461019f906001600160a01b031681565b3480156101e357600080fd5b5060655461019f906001600160a01b031681565b34801561020357600080fd5b5060675461019f906001600160a01b031681565b34801561022357600080fd5b5061011b610232366004610add565b610896565b61023f610926565b6067546001600160a01b03161561029d5760405162461bcd60e51b815260206004820181905260248201527f4c3120426974636f696e204465706f7369746f7220616c72656164792073657460448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b8152602060048201526024808201527f4c3120426974636f696e204465706f7369746f72206d757374206e6f7420626560448201527f20307830000000000000000000000000000000000000000000000000000000006064820152608401610294565b6067805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6065546001600160a01b031633146103a15760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206973206e6f7420576f726d686f6c652052656c6179657200006044820152606401610294565b60665461ffff838116600160a01b90920416146104265760405162461bcd60e51b815260206004820152602960248201527f536f7572636520636861696e206973206e6f742074686520657870656374656460448201527f204c3120636861696e00000000000000000000000000000000000000000000006064820152608401610294565b6067546001600160a01b0316836001600160a01b0316146104af5760405162461bcd60e51b815260206004820152603760248201527f536f757263652061646472657373206973206e6f74207468652065787065637460448201527f6564204c3120426974636f696e206465706f7369746f720000000000000000006064820152608401610294565b83516001146105265760405162461bcd60e51b815260206004820152603060248201527f45787065637465642031206164646974696f6e616c20564141206b657920666f60448201527f7220746f6b656e207472616e73666572000000000000000000000000000000006064820152608401610294565b60665484516001600160a01b0390911690635d21a59690869060009061054e5761054e610d7b565b60200260200101516040518263ffffffff1660e01b81526004016105729190610d91565b600060405180830381600087803b15801561058c57600080fd5b505af11580156105a0573d6000803e3d6000fd5b505050505050505050565b336001600160a01b0316816001600160a01b03167f69a2a6d267e87f99180657174ca85389598d457ba949435ee4940f621bb849cf85856040516105f0929190610ea2565b60405180910390a3505050565b610605610926565b61060f6000610980565b565b600054610100900460ff16158080156106315750600054600160ff909116105b8061064b5750303b15801561064b575060005460ff166001145b6106bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610294565b6000805460ff1916600117905580156106e0576000805461ff0019166101001790555b6106e86109df565b6001600160a01b0384166107645760405162461bcd60e51b815260206004820152602660248201527f576f726d686f6c6552656c6179657220616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152608401610294565b6001600160a01b0383166107e05760405162461bcd60e51b815260206004820152602860248201527f4c32576f726d686f6c654761746577617920616464726573732063616e6e6f7460448201527f206265207a65726f0000000000000000000000000000000000000000000000006064820152608401610294565b6065805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691909117909155606680549185167fffffffffffffffffffff0000000000000000000000000000000000000000000090921691909117600160a01b61ffff8516021790558015610890576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b61089e610926565b6001600160a01b03811661091a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610294565b61092381610980565b50565b6033546001600160a01b0316331461060f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610a4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f600054610100900460ff16610ab85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610294565b61060f33610980565b80356001600160a01b0381168114610ad857600080fd5b919050565b600060208284031215610aef57600080fd5b610af882610ac1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610b3e57610b3e610aff565b604052919050565b600082601f830112610b5757600080fd5b813567ffffffffffffffff811115610b7157610b71610aff565b610b84601f8201601f1916602001610b15565b818152846020838601011115610b9957600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff81168114610ad857600080fd5b600080600080600060a08688031215610be057600080fd5b853567ffffffffffffffff80821115610bf857600080fd5b610c0489838a01610b46565b9650602091508188013581811115610c1b57600080fd5b8801601f81018a13610c2c57600080fd5b803582811115610c3e57610c3e610aff565b8060051b610c4d858201610b15565b918252828101850191858101908d841115610c6757600080fd5b86850192505b83831015610ca357823586811115610c855760008081fd5b610c938f8983890101610b46565b8352509186019190860190610c6d565b809a505050505050505060408601359250610cc060608701610bb6565b949793965091946080013592915050565b6000806000838503610100811215610ce857600080fd5b843567ffffffffffffffff811115610cff57600080fd5b850160808188031215610d1157600080fd5b935060c0601f1982011215610d2557600080fd5b50602084019150610d3860e08501610ac1565b90509250925092565b600080600060608486031215610d5657600080fd5b610d5f84610ac1565b9250610d6d60208501610ac1565b9150610d3860408501610bb6565b634e487b7160e01b600052603260045260246000fd5b600060208083528351808285015260005b81811015610dbe57858101830151858201604001528201610da2565b506000604082860101526040601f19601f8301168501019250505092915050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ad857600080fd5b6000808335601e19843603018112610e2657600080fd5b830160208101925035905067ffffffffffffffff811115610e4657600080fd5b803603821315610e5557600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b80356bffffffffffffffffffffffff1981168114610ad857600080fd5b60e0815260007fffffffff0000000000000000000000000000000000000000000000000000000080610ed386610ddf565b1660e0840152610ee66020860186610e0f565b6080610100860152610efd61016086018284610e5c565b915050610f0d6040870187610e0f565b85830360df1901610120870152610f25838284610e5c565b9250505081610f3660608801610ddf565b16610140850152915050823563ffffffff8116808214610f5557600080fd5b806020850152505060208301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114610f9057600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000008116604084015250610fc560408401610e85565b6bffffffffffffffffffffffff198116606084015250610fe760608401610e85565b6bffffffffffffffffffffffff19811660808401525061100960808401610ddf565b7fffffffff00000000000000000000000000000000000000000000000000000000811660a08401525061103e60a08401610ac1565b6001600160a01b03811660c084015250939250505056fea26469706673582212208fd81f7d1bbc764b66d23b7c75909404cee086841ae0060c8fded3dd05814b6d64736f6c63430008110033",
361
361
  "linkReferences": {},
362
362
  "deployedLinkReferences": {},
363
363
  "devdoc": {
@@ -404,9 +404,9 @@
404
404
  "evm": {
405
405
  "bytecode": {
406
406
  "functionDebugData": {
407
- "@_39474": {
407
+ "@_39514": {
408
408
  "entryPoint": null,
409
- "id": 39474,
409
+ "id": 39514,
410
410
  "parameterSlots": 0,
411
411
  "returnSlots": 0
412
412
  },
@@ -784,13 +784,13 @@
784
784
  }
785
785
  ],
786
786
  "linkReferences": {},
787
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19 PUSH2 0x1E JUMP JUMPDEST PUSH2 0xDE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND LT ISZERO PUSH2 0xDC JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST PUSH2 0xF93 DUP1 PUSH2 0xED PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7EBEF529 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xDA25B725 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xDA25B725 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0xE1551FC9 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7EBEF529 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xAA82E33B EQ PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x529DCA32 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x529DCA32 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x642DC033 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12622E5B EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x31446C46 EQ PUSH2 0xFB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0xE3 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x237 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11B PUSH2 0x12B CALLDATASIZE PUSH1 0x4 PUSH2 0xAD0 JUMP JUMPDEST PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xBD9 JUMP JUMPDEST PUSH2 0x5AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x5FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x180 CALLDATASIZE PUSH1 0x4 PUSH2 0xC49 JUMP JUMPDEST PUSH2 0x611 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x65 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x67 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x232 CALLDATASIZE PUSH1 0x4 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x79E JUMP JUMPDEST PUSH2 0x23F PUSH2 0x82E JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x29D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F7220616C726561647920736574 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x318 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F72206D757374206E6F74206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2030783000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F7420576F726D686F6C652052656C617965720000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD PUSH2 0xFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV AND EQ PUSH2 0x426 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F7572636520636861696E206973206E6F7420746865206578706563746564 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x204C3120636861696E0000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F757263652061646472657373206973206E6F742074686520657870656374 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6564204C3120426974636F696E206465706F7369746F72000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 EQ PUSH2 0x526 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45787065637465642031206164646974696F6E616C20564141206B657920666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7220746F6B656E207472616E7366657200000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5D21A596 SWAP1 DUP7 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x54E JUMPI PUSH2 0x54E PUSH2 0xC83 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x572 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x69A2A6D267E87F99180657174CA85389598D457BA949435EE4940F621BB849CF DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x5F0 SWAP3 SWAP2 SWAP1 PUSH2 0xDAA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x605 PUSH2 0x82E JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 PUSH2 0x888 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x631 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x64B JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x64B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x6BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x647920696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x6E0 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x6E8 PUSH2 0x8E7 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x66 DUP1 SLOAD SWAP2 DUP6 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL PUSH2 0xFFFF DUP6 AND MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x798 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x7A6 PUSH2 0x82E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x822 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x82B DUP2 PUSH2 0x888 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x60F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x952 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x9C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F CALLER PUSH2 0x888 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA00 DUP3 PUSH2 0x9C9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xA46 JUMPI PUSH2 0xA46 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA79 JUMPI PUSH2 0xA79 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0xA8C PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xA1D JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xAA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xAE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xB00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0C DUP10 DUP4 DUP11 ADD PUSH2 0xA4E JUMP JUMPDEST SWAP7 POP PUSH1 0x20 SWAP2 POP DUP2 DUP9 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xB23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 ADD PUSH1 0x1F DUP2 ADD DUP11 SGT PUSH2 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xB46 JUMPI PUSH2 0xB46 PUSH2 0xA07 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH2 0xB55 DUP6 DUP3 ADD PUSH2 0xA1D JUMP JUMPDEST SWAP2 DUP3 MSTORE DUP3 DUP2 ADD DUP6 ADD SWAP2 DUP6 DUP2 ADD SWAP1 DUP14 DUP5 GT ISZERO PUSH2 0xB6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 DUP6 ADD SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0xBAB JUMPI DUP3 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0xB8D JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xB9B DUP16 DUP10 DUP4 DUP10 ADD ADD PUSH2 0xA4E JUMP JUMPDEST DUP4 MSTORE POP SWAP2 DUP7 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0xB75 JUMP JUMPDEST DUP1 SWAP11 POP POP POP POP POP POP POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0xBC8 PUSH1 0x60 DUP8 ADD PUSH2 0xABE JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0xBF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 ADD PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0xC19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 POP PUSH1 0xC0 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0xC2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH2 0xC40 PUSH1 0xE0 DUP6 ADD PUSH2 0x9C9 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC67 DUP5 PUSH2 0x9C9 JUMP JUMPDEST SWAP3 POP PUSH2 0xC75 PUSH1 0x20 DUP6 ADD PUSH2 0x9C9 JUMP JUMPDEST SWAP2 POP PUSH2 0xC40 PUSH1 0x40 DUP6 ADD PUSH2 0xABE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCC6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xCAA JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0xD2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0xD5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xE0 DUP2 MSTORE PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 PUSH2 0xDDB DUP7 PUSH2 0xCE7 JUMP JUMPDEST AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0xDEE PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0xD17 JUMP JUMPDEST PUSH1 0x80 PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0xE05 PUSH2 0x160 DUP7 ADD DUP3 DUP5 PUSH2 0xD64 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xE15 PUSH1 0x40 DUP8 ADD DUP8 PUSH2 0xD17 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xDF NOT ADD PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0xE2D DUP4 DUP3 DUP5 PUSH2 0xD64 JUMP JUMPDEST SWAP3 POP POP POP DUP2 PUSH2 0xE3E PUSH1 0x60 DUP9 ADD PUSH2 0xCE7 JUMP JUMPDEST AND PUSH2 0x140 DUP6 ADD MSTORE SWAP2 POP POP DUP3 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 DUP3 EQ PUSH2 0xE5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP6 ADD MSTORE POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xE98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH2 0xECD PUSH1 0x40 DUP5 ADD PUSH2 0xD8D JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH2 0xEEF PUSH1 0x60 DUP5 ADD PUSH2 0xD8D JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH2 0xF11 PUSH1 0x80 DUP5 ADD PUSH2 0xCE7 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH2 0xF46 PUSH1 0xA0 DUP5 ADD PUSH2 0x9C9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP PUSH22 0xD5D0301414DB765C71CC0277BFFAFF34AE10A741350 0x5E BLOCKHASH 0x2A DUP7 0x4E ISZERO MUL SWAP6 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ",
788
- "sourceMap": "2095:6068:109:-:0;;;2844:53;;;;;;;;;-1:-1:-1;2868:22:109;:20;:22::i;:::-;2095:6068;;5928:279:29;5996:13;;;;;;;5995:14;5987:66;;;;-1:-1:-1;;;5987:66:29;;216:2:134;5987:66:29;;;198:21:134;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:134;;;338:37;392:19;;5987:66:29;;;;;;;;6067:12;;6082:15;6067:12;;;:30;6063:138;;;6113:12;:30;;-1:-1:-1;;6113:30:29;6128:15;6113:30;;;;;;6162:28;;564:36:134;;;6162:28:29;;552:2:134;537:18;6162:28:29;;;;;;;6063:138;5928:279::o;422:184:134:-;2095:6068:109;;;;;;"
787
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19 PUSH2 0x1E JUMP JUMPDEST PUSH2 0xDE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND LT ISZERO PUSH2 0xDC JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST PUSH2 0x108B DUP1 PUSH2 0xED PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7EBEF529 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xDA25B725 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xDA25B725 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0xE1551FC9 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7EBEF529 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xAA82E33B EQ PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x529DCA32 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x529DCA32 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x642DC033 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12622E5B EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x31446C46 EQ PUSH2 0xFB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0xE3 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0xADD JUMP JUMPDEST PUSH2 0x237 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11B PUSH2 0x12B CALLDATASIZE PUSH1 0x4 PUSH2 0xBC8 JUMP JUMPDEST PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xCD1 JUMP JUMPDEST PUSH2 0x5AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x5FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x180 CALLDATASIZE PUSH1 0x4 PUSH2 0xD41 JUMP JUMPDEST PUSH2 0x611 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x65 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x67 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x232 CALLDATASIZE PUSH1 0x4 PUSH2 0xADD JUMP JUMPDEST PUSH2 0x896 JUMP JUMPDEST PUSH2 0x23F PUSH2 0x926 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x29D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F7220616C726561647920736574 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x318 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F72206D757374206E6F74206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2030783000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F7420576F726D686F6C652052656C617965720000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD PUSH2 0xFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV AND EQ PUSH2 0x426 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F7572636520636861696E206973206E6F7420746865206578706563746564 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x204C3120636861696E0000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F757263652061646472657373206973206E6F742074686520657870656374 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6564204C3120426974636F696E206465706F7369746F72000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 EQ PUSH2 0x526 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45787065637465642031206164646974696F6E616C20564141206B657920666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7220746F6B656E207472616E7366657200000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5D21A596 SWAP1 DUP7 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x54E JUMPI PUSH2 0x54E PUSH2 0xD7B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x572 SWAP2 SWAP1 PUSH2 0xD91 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x69A2A6D267E87F99180657174CA85389598D457BA949435EE4940F621BB849CF DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x5F0 SWAP3 SWAP2 SWAP1 PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x605 PUSH2 0x926 JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 PUSH2 0x980 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x631 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x64B JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x64B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x6BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x647920696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x6E0 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x6E8 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x764 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x576F726D686F6C6552656C6179657220616464726573732063616E6E6F742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x65207A65726F0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x7E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C32576F726D686F6C654761746577617920616464726573732063616E6E6F74 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x206265207A65726F000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x66 DUP1 SLOAD SWAP2 DUP6 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL PUSH2 0xFFFF DUP6 AND MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x89E PUSH2 0x926 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x923 DUP2 PUSH2 0x980 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x60F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xA4A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xAB8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F CALLER PUSH2 0x980 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF8 DUP3 PUSH2 0xAC1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xB3E JUMPI PUSH2 0xB3E PUSH2 0xAFF JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB71 JUMPI PUSH2 0xB71 PUSH2 0xAFF JUMP JUMPDEST PUSH2 0xB84 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xB15 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xB99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xBE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC04 DUP10 DUP4 DUP11 ADD PUSH2 0xB46 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 SWAP2 POP DUP2 DUP9 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 ADD PUSH1 0x1F DUP2 ADD DUP11 SGT PUSH2 0xC2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xC3E JUMPI PUSH2 0xC3E PUSH2 0xAFF JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH2 0xC4D DUP6 DUP3 ADD PUSH2 0xB15 JUMP JUMPDEST SWAP2 DUP3 MSTORE DUP3 DUP2 ADD DUP6 ADD SWAP2 DUP6 DUP2 ADD SWAP1 DUP14 DUP5 GT ISZERO PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 DUP6 ADD SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0xCA3 JUMPI DUP3 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0xC85 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC93 DUP16 DUP10 DUP4 DUP10 ADD ADD PUSH2 0xB46 JUMP JUMPDEST DUP4 MSTORE POP SWAP2 DUP7 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0xC6D JUMP JUMPDEST DUP1 SWAP11 POP POP POP POP POP POP POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0xCC0 PUSH1 0x60 DUP8 ADD PUSH2 0xBB6 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0xCE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 ADD PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0xD11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 POP PUSH1 0xC0 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0xD25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH2 0xD38 PUSH1 0xE0 DUP6 ADD PUSH2 0xAC1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD5F DUP5 PUSH2 0xAC1 JUMP JUMPDEST SWAP3 POP PUSH2 0xD6D PUSH1 0x20 DUP6 ADD PUSH2 0xAC1 JUMP JUMPDEST SWAP2 POP PUSH2 0xD38 PUSH1 0x40 DUP6 ADD PUSH2 0xBB6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDBE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xDA2 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0xE26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0xE55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xE0 DUP2 MSTORE PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 PUSH2 0xED3 DUP7 PUSH2 0xDDF JUMP JUMPDEST AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0xEE6 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0xE0F JUMP JUMPDEST PUSH1 0x80 PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0xEFD PUSH2 0x160 DUP7 ADD DUP3 DUP5 PUSH2 0xE5C JUMP JUMPDEST SWAP2 POP POP PUSH2 0xF0D PUSH1 0x40 DUP8 ADD DUP8 PUSH2 0xE0F JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xDF NOT ADD PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0xF25 DUP4 DUP3 DUP5 PUSH2 0xE5C JUMP JUMPDEST SWAP3 POP POP POP DUP2 PUSH2 0xF36 PUSH1 0x60 DUP9 ADD PUSH2 0xDDF JUMP JUMPDEST AND PUSH2 0x140 DUP6 ADD MSTORE SWAP2 POP POP DUP3 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 DUP3 EQ PUSH2 0xF55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP6 ADD MSTORE POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xF90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH2 0xFC5 PUSH1 0x40 DUP5 ADD PUSH2 0xE85 JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH2 0xFE7 PUSH1 0x60 DUP5 ADD PUSH2 0xE85 JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH2 0x1009 PUSH1 0x80 DUP5 ADD PUSH2 0xDDF JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH2 0x103E PUSH1 0xA0 DUP5 ADD PUSH2 0xAC1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 0xD8 0x1F PUSH30 0x1BBC764B66D23B7C75909404CEE086841AE0060C8FDED3DD05814B6D6473 PUSH16 0x6C634300081100330000000000000000 ",
788
+ "sourceMap": "2094:6323:109:-:0;;;2843:53;;;;;;;;;-1:-1:-1;2867:22:109;:20;:22::i;:::-;2094:6323;;5928:279:29;5996:13;;;;;;;5995:14;5987:66;;;;-1:-1:-1;;;5987:66:29;;216:2:134;5987:66:29;;;198:21:134;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:134;;;338:37;392:19;;5987:66:29;;;;;;;;6067:12;;6082:15;6067:12;;;:30;6063:138;;;6113:12;:30;;-1:-1:-1;;6113:30:29;6128:15;6113:30;;;;;;6162:28;;564:36:134;;;6162:28:29;;552:2:134;537:18;6162:28:29;;;;;;;6063:138;5928:279::o;422:184:134:-;2094:6323:109;;;;;;"
789
789
  },
790
790
  "deployedBytecode": {
791
791
  "functionDebugData": {
792
792
  "@__Ownable_init_11891": {
793
- "entryPoint": 2279,
793
+ "entryPoint": 2527,
794
794
  "id": 11891,
795
795
  "parameterSlots": 0,
796
796
  "returnSlots": 0
@@ -802,7 +802,7 @@
802
802
  "returnSlots": 0
803
803
  },
804
804
  "@_checkOwner_11933": {
805
- "entryPoint": 2094,
805
+ "entryPoint": 2342,
806
806
  "id": 11933,
807
807
  "parameterSlots": 0,
808
808
  "returnSlots": 0
@@ -814,32 +814,32 @@
814
814
  "returnSlots": 1
815
815
  },
816
816
  "@_transferOwnership_11990": {
817
- "entryPoint": 2184,
817
+ "entryPoint": 2432,
818
818
  "id": 11990,
819
819
  "parameterSlots": 1,
820
820
  "returnSlots": 0
821
821
  },
822
- "@attachL1BitcoinDepositor_39538": {
822
+ "@attachL1BitcoinDepositor_39598": {
823
823
  "entryPoint": 567,
824
- "id": 39538,
824
+ "id": 39598,
825
825
  "parameterSlots": 1,
826
826
  "returnSlots": 0
827
827
  },
828
- "@fromWormholeAddress_40728": {
828
+ "@fromWormholeAddress_40788": {
829
829
  "entryPoint": null,
830
- "id": 40728,
830
+ "id": 40788,
831
831
  "parameterSlots": 1,
832
832
  "returnSlots": 1
833
833
  },
834
- "@initializeDeposit_39559": {
834
+ "@initializeDeposit_39619": {
835
835
  "entryPoint": 1451,
836
- "id": 39559,
836
+ "id": 39619,
837
837
  "parameterSlots": 3,
838
838
  "returnSlots": 0
839
839
  },
840
- "@initialize_39505": {
840
+ "@initialize_39565": {
841
841
  "entryPoint": 1553,
842
- "id": 39505,
842
+ "id": 39565,
843
843
  "parameterSlots": 3,
844
844
  "returnSlots": 0
845
845
  },
@@ -849,21 +849,21 @@
849
849
  "parameterSlots": 1,
850
850
  "returnSlots": 1
851
851
  },
852
- "@l1BitcoinDepositor_39454": {
852
+ "@l1BitcoinDepositor_39494": {
853
853
  "entryPoint": null,
854
- "id": 39454,
854
+ "id": 39494,
855
855
  "parameterSlots": 0,
856
856
  "returnSlots": 0
857
857
  },
858
- "@l1ChainId_39451": {
858
+ "@l1ChainId_39491": {
859
859
  "entryPoint": null,
860
- "id": 39451,
860
+ "id": 39491,
861
861
  "parameterSlots": 0,
862
862
  "returnSlots": 0
863
863
  },
864
- "@l2WormholeGateway_39448": {
864
+ "@l2WormholeGateway_39488": {
865
865
  "entryPoint": null,
866
- "id": 39448,
866
+ "id": 39488,
867
867
  "parameterSlots": 0,
868
868
  "returnSlots": 0
869
869
  },
@@ -873,9 +873,9 @@
873
873
  "parameterSlots": 0,
874
874
  "returnSlots": 1
875
875
  },
876
- "@receiveWormholeMessages_39619": {
876
+ "@receiveWormholeMessages_39679": {
877
877
  "entryPoint": 839,
878
- "id": 39619,
878
+ "id": 39679,
879
879
  "parameterSlots": 5,
880
880
  "returnSlots": 0
881
881
  },
@@ -886,67 +886,67 @@
886
886
  "returnSlots": 0
887
887
  },
888
888
  "@transferOwnership_11970": {
889
- "entryPoint": 1950,
889
+ "entryPoint": 2198,
890
890
  "id": 11970,
891
891
  "parameterSlots": 1,
892
892
  "returnSlots": 0
893
893
  },
894
- "@wormholeRelayer_39444": {
894
+ "@wormholeRelayer_39484": {
895
895
  "entryPoint": null,
896
- "id": 39444,
896
+ "id": 39484,
897
897
  "parameterSlots": 0,
898
898
  "returnSlots": 0
899
899
  },
900
900
  "abi_decode_address": {
901
- "entryPoint": 2505,
901
+ "entryPoint": 2753,
902
902
  "id": null,
903
903
  "parameterSlots": 1,
904
904
  "returnSlots": 1
905
905
  },
906
906
  "abi_decode_bytes": {
907
- "entryPoint": 2638,
907
+ "entryPoint": 2886,
908
908
  "id": null,
909
909
  "parameterSlots": 2,
910
910
  "returnSlots": 1
911
911
  },
912
912
  "abi_decode_bytes20": {
913
- "entryPoint": 3469,
913
+ "entryPoint": 3717,
914
914
  "id": null,
915
915
  "parameterSlots": 1,
916
916
  "returnSlots": 1
917
917
  },
918
918
  "abi_decode_bytes4": {
919
- "entryPoint": 3303,
919
+ "entryPoint": 3551,
920
920
  "id": null,
921
921
  "parameterSlots": 1,
922
922
  "returnSlots": 1
923
923
  },
924
924
  "abi_decode_tuple_t_address": {
925
- "entryPoint": 2533,
925
+ "entryPoint": 2781,
926
926
  "id": null,
927
927
  "parameterSlots": 2,
928
928
  "returnSlots": 1
929
929
  },
930
930
  "abi_decode_tuple_t_addresst_addresst_uint16": {
931
- "entryPoint": 3145,
931
+ "entryPoint": 3393,
932
932
  "id": null,
933
933
  "parameterSlots": 2,
934
934
  "returnSlots": 3
935
935
  },
936
936
  "abi_decode_tuple_t_bytes_memory_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_bytes32t_uint16t_bytes32": {
937
- "entryPoint": 2768,
937
+ "entryPoint": 3016,
938
938
  "id": null,
939
939
  "parameterSlots": 2,
940
940
  "returnSlots": 5
941
941
  },
942
942
  "abi_decode_tuple_t_struct$_BitcoinTxInfo_$38550_calldata_ptrt_struct$_DepositRevealInfo_$38563_calldata_ptrt_address": {
943
- "entryPoint": 3033,
943
+ "entryPoint": 3281,
944
944
  "id": null,
945
945
  "parameterSlots": 2,
946
946
  "returnSlots": 3
947
947
  },
948
948
  "abi_decode_uint16": {
949
- "entryPoint": 2750,
949
+ "entryPoint": 2998,
950
950
  "id": null,
951
951
  "parameterSlots": 1,
952
952
  "returnSlots": 1
@@ -976,7 +976,7 @@
976
976
  "returnSlots": 0
977
977
  },
978
978
  "abi_encode_bytes_calldata": {
979
- "entryPoint": 3428,
979
+ "entryPoint": 3676,
980
980
  "id": null,
981
981
  "parameterSlots": 3,
982
982
  "returnSlots": 1
@@ -988,18 +988,18 @@
988
988
  "returnSlots": 1
989
989
  },
990
990
  "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": {
991
- "entryPoint": 3225,
991
+ "entryPoint": 3473,
992
992
  "id": null,
993
993
  "parameterSlots": 2,
994
994
  "returnSlots": 1
995
995
  },
996
- "abi_encode_tuple_t_contract$_IL2WormholeGateway_$39435__to_t_address__fromStack_reversed": {
996
+ "abi_encode_tuple_t_contract$_IL2WormholeGateway_$39475__to_t_address__fromStack_reversed": {
997
997
  "entryPoint": null,
998
998
  "id": null,
999
999
  "parameterSlots": 2,
1000
1000
  "returnSlots": 1
1001
1001
  },
1002
- "abi_encode_tuple_t_contract$_IWormholeRelayer_$40602__to_t_address__fromStack_reversed": {
1002
+ "abi_encode_tuple_t_contract$_IWormholeRelayer_$40662__to_t_address__fromStack_reversed": {
1003
1003
  "entryPoint": null,
1004
1004
  "id": null,
1005
1005
  "parameterSlots": 2,
@@ -1047,6 +1047,12 @@
1047
1047
  "parameterSlots": 1,
1048
1048
  "returnSlots": 1
1049
1049
  },
1050
+ "abi_encode_tuple_t_stringliteral_9d9f10b27fa5e238dfe3a8d53141c129e62f02b37c632d47c322e5de35aa66e0__to_t_string_memory_ptr__fromStack_reversed": {
1051
+ "entryPoint": null,
1052
+ "id": null,
1053
+ "parameterSlots": 1,
1054
+ "returnSlots": 1
1055
+ },
1050
1056
  "abi_encode_tuple_t_stringliteral_b339e39aab18a476dde5bc1f98bdf861de4c95cbdb129860a839c6efcd4ab1f3__to_t_string_memory_ptr__fromStack_reversed": {
1051
1057
  "entryPoint": null,
1052
1058
  "id": null,
@@ -1071,8 +1077,14 @@
1071
1077
  "parameterSlots": 1,
1072
1078
  "returnSlots": 1
1073
1079
  },
1080
+ "abi_encode_tuple_t_stringliteral_fd2cd1607e5cd6d3be51dd7074e5e42195d6bf9aadf9522b20c8c82fbc61b349__to_t_string_memory_ptr__fromStack_reversed": {
1081
+ "entryPoint": null,
1082
+ "id": null,
1083
+ "parameterSlots": 1,
1084
+ "returnSlots": 1
1085
+ },
1074
1086
  "abi_encode_tuple_t_struct$_BitcoinTxInfo_$38550_calldata_ptr_t_struct$_DepositRevealInfo_$38563_calldata_ptr__to_t_struct$_BitcoinTxInfo_$38550_memory_ptr_t_struct$_DepositRevealInfo_$38563_memory_ptr__fromStack_reversed": {
1075
- "entryPoint": 3498,
1087
+ "entryPoint": 3746,
1076
1088
  "id": null,
1077
1089
  "parameterSlots": 3,
1078
1090
  "returnSlots": 1
@@ -1084,25 +1096,25 @@
1084
1096
  "returnSlots": 1
1085
1097
  },
1086
1098
  "allocate_memory": {
1087
- "entryPoint": 2589,
1099
+ "entryPoint": 2837,
1088
1100
  "id": null,
1089
1101
  "parameterSlots": 1,
1090
1102
  "returnSlots": 1
1091
1103
  },
1092
1104
  "calldata_access_bytes_calldata": {
1093
- "entryPoint": 3351,
1105
+ "entryPoint": 3599,
1094
1106
  "id": null,
1095
1107
  "parameterSlots": 2,
1096
1108
  "returnSlots": 2
1097
1109
  },
1098
1110
  "panic_error_0x32": {
1099
- "entryPoint": 3203,
1111
+ "entryPoint": 3451,
1100
1112
  "id": null,
1101
1113
  "parameterSlots": 0,
1102
1114
  "returnSlots": 0
1103
1115
  },
1104
1116
  "panic_error_0x41": {
1105
- "entryPoint": 2567,
1117
+ "entryPoint": 2815,
1106
1118
  "id": null,
1107
1119
  "parameterSlots": 0,
1108
1120
  "returnSlots": 0
@@ -1112,7 +1124,7 @@
1112
1124
  {
1113
1125
  "ast": {
1114
1126
  "nodeType": "YulBlock",
1115
- "src": "0:13756:134",
1127
+ "src": "0:14572:134",
1116
1128
  "statements": [
1117
1129
  {
1118
1130
  "nodeType": "YulBlock",
@@ -4910,7 +4922,7 @@
4910
4922
  }
4911
4923
  ]
4912
4924
  },
4913
- "name": "abi_encode_tuple_t_contract$_IL2WormholeGateway_$39435__to_t_address__fromStack_reversed",
4925
+ "name": "abi_encode_tuple_t_contract$_IL2WormholeGateway_$39475__to_t_address__fromStack_reversed",
4914
4926
  "nodeType": "YulFunctionDefinition",
4915
4927
  "parameters": [
4916
4928
  {
@@ -5020,7 +5032,7 @@
5020
5032
  }
5021
5033
  ]
5022
5034
  },
5023
- "name": "abi_encode_tuple_t_contract$_IWormholeRelayer_$40602__to_t_address__fromStack_reversed",
5035
+ "name": "abi_encode_tuple_t_contract$_IWormholeRelayer_$40662__to_t_address__fromStack_reversed",
5024
5036
  "nodeType": "YulFunctionDefinition",
5025
5037
  "parameters": [
5026
5038
  {
@@ -9647,22 +9659,472 @@
9647
9659
  {
9648
9660
  "body": {
9649
9661
  "nodeType": "YulBlock",
9650
- "src": "12487:87:134",
9662
+ "src": "12554:228:134",
9663
+ "statements": [
9664
+ {
9665
+ "expression": {
9666
+ "arguments": [
9667
+ {
9668
+ "name": "headStart",
9669
+ "nodeType": "YulIdentifier",
9670
+ "src": "12571:9:134"
9671
+ },
9672
+ {
9673
+ "kind": "number",
9674
+ "nodeType": "YulLiteral",
9675
+ "src": "12582:2:134",
9676
+ "type": "",
9677
+ "value": "32"
9678
+ }
9679
+ ],
9680
+ "functionName": {
9681
+ "name": "mstore",
9682
+ "nodeType": "YulIdentifier",
9683
+ "src": "12564:6:134"
9684
+ },
9685
+ "nodeType": "YulFunctionCall",
9686
+ "src": "12564:21:134"
9687
+ },
9688
+ "nodeType": "YulExpressionStatement",
9689
+ "src": "12564:21:134"
9690
+ },
9691
+ {
9692
+ "expression": {
9693
+ "arguments": [
9694
+ {
9695
+ "arguments": [
9696
+ {
9697
+ "name": "headStart",
9698
+ "nodeType": "YulIdentifier",
9699
+ "src": "12605:9:134"
9700
+ },
9701
+ {
9702
+ "kind": "number",
9703
+ "nodeType": "YulLiteral",
9704
+ "src": "12616:2:134",
9705
+ "type": "",
9706
+ "value": "32"
9707
+ }
9708
+ ],
9709
+ "functionName": {
9710
+ "name": "add",
9711
+ "nodeType": "YulIdentifier",
9712
+ "src": "12601:3:134"
9713
+ },
9714
+ "nodeType": "YulFunctionCall",
9715
+ "src": "12601:18:134"
9716
+ },
9717
+ {
9718
+ "kind": "number",
9719
+ "nodeType": "YulLiteral",
9720
+ "src": "12621:2:134",
9721
+ "type": "",
9722
+ "value": "38"
9723
+ }
9724
+ ],
9725
+ "functionName": {
9726
+ "name": "mstore",
9727
+ "nodeType": "YulIdentifier",
9728
+ "src": "12594:6:134"
9729
+ },
9730
+ "nodeType": "YulFunctionCall",
9731
+ "src": "12594:30:134"
9732
+ },
9733
+ "nodeType": "YulExpressionStatement",
9734
+ "src": "12594:30:134"
9735
+ },
9736
+ {
9737
+ "expression": {
9738
+ "arguments": [
9739
+ {
9740
+ "arguments": [
9741
+ {
9742
+ "name": "headStart",
9743
+ "nodeType": "YulIdentifier",
9744
+ "src": "12644:9:134"
9745
+ },
9746
+ {
9747
+ "kind": "number",
9748
+ "nodeType": "YulLiteral",
9749
+ "src": "12655:2:134",
9750
+ "type": "",
9751
+ "value": "64"
9752
+ }
9753
+ ],
9754
+ "functionName": {
9755
+ "name": "add",
9756
+ "nodeType": "YulIdentifier",
9757
+ "src": "12640:3:134"
9758
+ },
9759
+ "nodeType": "YulFunctionCall",
9760
+ "src": "12640:18:134"
9761
+ },
9762
+ {
9763
+ "hexValue": "576f726d686f6c6552656c6179657220616464726573732063616e6e6f742062",
9764
+ "kind": "string",
9765
+ "nodeType": "YulLiteral",
9766
+ "src": "12660:34:134",
9767
+ "type": "",
9768
+ "value": "WormholeRelayer address cannot b"
9769
+ }
9770
+ ],
9771
+ "functionName": {
9772
+ "name": "mstore",
9773
+ "nodeType": "YulIdentifier",
9774
+ "src": "12633:6:134"
9775
+ },
9776
+ "nodeType": "YulFunctionCall",
9777
+ "src": "12633:62:134"
9778
+ },
9779
+ "nodeType": "YulExpressionStatement",
9780
+ "src": "12633:62:134"
9781
+ },
9782
+ {
9783
+ "expression": {
9784
+ "arguments": [
9785
+ {
9786
+ "arguments": [
9787
+ {
9788
+ "name": "headStart",
9789
+ "nodeType": "YulIdentifier",
9790
+ "src": "12715:9:134"
9791
+ },
9792
+ {
9793
+ "kind": "number",
9794
+ "nodeType": "YulLiteral",
9795
+ "src": "12726:2:134",
9796
+ "type": "",
9797
+ "value": "96"
9798
+ }
9799
+ ],
9800
+ "functionName": {
9801
+ "name": "add",
9802
+ "nodeType": "YulIdentifier",
9803
+ "src": "12711:3:134"
9804
+ },
9805
+ "nodeType": "YulFunctionCall",
9806
+ "src": "12711:18:134"
9807
+ },
9808
+ {
9809
+ "hexValue": "65207a65726f",
9810
+ "kind": "string",
9811
+ "nodeType": "YulLiteral",
9812
+ "src": "12731:8:134",
9813
+ "type": "",
9814
+ "value": "e zero"
9815
+ }
9816
+ ],
9817
+ "functionName": {
9818
+ "name": "mstore",
9819
+ "nodeType": "YulIdentifier",
9820
+ "src": "12704:6:134"
9821
+ },
9822
+ "nodeType": "YulFunctionCall",
9823
+ "src": "12704:36:134"
9824
+ },
9825
+ "nodeType": "YulExpressionStatement",
9826
+ "src": "12704:36:134"
9827
+ },
9828
+ {
9829
+ "nodeType": "YulAssignment",
9830
+ "src": "12749:27:134",
9831
+ "value": {
9832
+ "arguments": [
9833
+ {
9834
+ "name": "headStart",
9835
+ "nodeType": "YulIdentifier",
9836
+ "src": "12761:9:134"
9837
+ },
9838
+ {
9839
+ "kind": "number",
9840
+ "nodeType": "YulLiteral",
9841
+ "src": "12772:3:134",
9842
+ "type": "",
9843
+ "value": "128"
9844
+ }
9845
+ ],
9846
+ "functionName": {
9847
+ "name": "add",
9848
+ "nodeType": "YulIdentifier",
9849
+ "src": "12757:3:134"
9850
+ },
9851
+ "nodeType": "YulFunctionCall",
9852
+ "src": "12757:19:134"
9853
+ },
9854
+ "variableNames": [
9855
+ {
9856
+ "name": "tail",
9857
+ "nodeType": "YulIdentifier",
9858
+ "src": "12749:4:134"
9859
+ }
9860
+ ]
9861
+ }
9862
+ ]
9863
+ },
9864
+ "name": "abi_encode_tuple_t_stringliteral_9d9f10b27fa5e238dfe3a8d53141c129e62f02b37c632d47c322e5de35aa66e0__to_t_string_memory_ptr__fromStack_reversed",
9865
+ "nodeType": "YulFunctionDefinition",
9866
+ "parameters": [
9867
+ {
9868
+ "name": "headStart",
9869
+ "nodeType": "YulTypedName",
9870
+ "src": "12531:9:134",
9871
+ "type": ""
9872
+ }
9873
+ ],
9874
+ "returnVariables": [
9875
+ {
9876
+ "name": "tail",
9877
+ "nodeType": "YulTypedName",
9878
+ "src": "12545:4:134",
9879
+ "type": ""
9880
+ }
9881
+ ],
9882
+ "src": "12380:402:134"
9883
+ },
9884
+ {
9885
+ "body": {
9886
+ "nodeType": "YulBlock",
9887
+ "src": "12961:230:134",
9888
+ "statements": [
9889
+ {
9890
+ "expression": {
9891
+ "arguments": [
9892
+ {
9893
+ "name": "headStart",
9894
+ "nodeType": "YulIdentifier",
9895
+ "src": "12978:9:134"
9896
+ },
9897
+ {
9898
+ "kind": "number",
9899
+ "nodeType": "YulLiteral",
9900
+ "src": "12989:2:134",
9901
+ "type": "",
9902
+ "value": "32"
9903
+ }
9904
+ ],
9905
+ "functionName": {
9906
+ "name": "mstore",
9907
+ "nodeType": "YulIdentifier",
9908
+ "src": "12971:6:134"
9909
+ },
9910
+ "nodeType": "YulFunctionCall",
9911
+ "src": "12971:21:134"
9912
+ },
9913
+ "nodeType": "YulExpressionStatement",
9914
+ "src": "12971:21:134"
9915
+ },
9916
+ {
9917
+ "expression": {
9918
+ "arguments": [
9919
+ {
9920
+ "arguments": [
9921
+ {
9922
+ "name": "headStart",
9923
+ "nodeType": "YulIdentifier",
9924
+ "src": "13012:9:134"
9925
+ },
9926
+ {
9927
+ "kind": "number",
9928
+ "nodeType": "YulLiteral",
9929
+ "src": "13023:2:134",
9930
+ "type": "",
9931
+ "value": "32"
9932
+ }
9933
+ ],
9934
+ "functionName": {
9935
+ "name": "add",
9936
+ "nodeType": "YulIdentifier",
9937
+ "src": "13008:3:134"
9938
+ },
9939
+ "nodeType": "YulFunctionCall",
9940
+ "src": "13008:18:134"
9941
+ },
9942
+ {
9943
+ "kind": "number",
9944
+ "nodeType": "YulLiteral",
9945
+ "src": "13028:2:134",
9946
+ "type": "",
9947
+ "value": "40"
9948
+ }
9949
+ ],
9950
+ "functionName": {
9951
+ "name": "mstore",
9952
+ "nodeType": "YulIdentifier",
9953
+ "src": "13001:6:134"
9954
+ },
9955
+ "nodeType": "YulFunctionCall",
9956
+ "src": "13001:30:134"
9957
+ },
9958
+ "nodeType": "YulExpressionStatement",
9959
+ "src": "13001:30:134"
9960
+ },
9961
+ {
9962
+ "expression": {
9963
+ "arguments": [
9964
+ {
9965
+ "arguments": [
9966
+ {
9967
+ "name": "headStart",
9968
+ "nodeType": "YulIdentifier",
9969
+ "src": "13051:9:134"
9970
+ },
9971
+ {
9972
+ "kind": "number",
9973
+ "nodeType": "YulLiteral",
9974
+ "src": "13062:2:134",
9975
+ "type": "",
9976
+ "value": "64"
9977
+ }
9978
+ ],
9979
+ "functionName": {
9980
+ "name": "add",
9981
+ "nodeType": "YulIdentifier",
9982
+ "src": "13047:3:134"
9983
+ },
9984
+ "nodeType": "YulFunctionCall",
9985
+ "src": "13047:18:134"
9986
+ },
9987
+ {
9988
+ "hexValue": "4c32576f726d686f6c654761746577617920616464726573732063616e6e6f74",
9989
+ "kind": "string",
9990
+ "nodeType": "YulLiteral",
9991
+ "src": "13067:34:134",
9992
+ "type": "",
9993
+ "value": "L2WormholeGateway address cannot"
9994
+ }
9995
+ ],
9996
+ "functionName": {
9997
+ "name": "mstore",
9998
+ "nodeType": "YulIdentifier",
9999
+ "src": "13040:6:134"
10000
+ },
10001
+ "nodeType": "YulFunctionCall",
10002
+ "src": "13040:62:134"
10003
+ },
10004
+ "nodeType": "YulExpressionStatement",
10005
+ "src": "13040:62:134"
10006
+ },
10007
+ {
10008
+ "expression": {
10009
+ "arguments": [
10010
+ {
10011
+ "arguments": [
10012
+ {
10013
+ "name": "headStart",
10014
+ "nodeType": "YulIdentifier",
10015
+ "src": "13122:9:134"
10016
+ },
10017
+ {
10018
+ "kind": "number",
10019
+ "nodeType": "YulLiteral",
10020
+ "src": "13133:2:134",
10021
+ "type": "",
10022
+ "value": "96"
10023
+ }
10024
+ ],
10025
+ "functionName": {
10026
+ "name": "add",
10027
+ "nodeType": "YulIdentifier",
10028
+ "src": "13118:3:134"
10029
+ },
10030
+ "nodeType": "YulFunctionCall",
10031
+ "src": "13118:18:134"
10032
+ },
10033
+ {
10034
+ "hexValue": "206265207a65726f",
10035
+ "kind": "string",
10036
+ "nodeType": "YulLiteral",
10037
+ "src": "13138:10:134",
10038
+ "type": "",
10039
+ "value": " be zero"
10040
+ }
10041
+ ],
10042
+ "functionName": {
10043
+ "name": "mstore",
10044
+ "nodeType": "YulIdentifier",
10045
+ "src": "13111:6:134"
10046
+ },
10047
+ "nodeType": "YulFunctionCall",
10048
+ "src": "13111:38:134"
10049
+ },
10050
+ "nodeType": "YulExpressionStatement",
10051
+ "src": "13111:38:134"
10052
+ },
10053
+ {
10054
+ "nodeType": "YulAssignment",
10055
+ "src": "13158:27:134",
10056
+ "value": {
10057
+ "arguments": [
10058
+ {
10059
+ "name": "headStart",
10060
+ "nodeType": "YulIdentifier",
10061
+ "src": "13170:9:134"
10062
+ },
10063
+ {
10064
+ "kind": "number",
10065
+ "nodeType": "YulLiteral",
10066
+ "src": "13181:3:134",
10067
+ "type": "",
10068
+ "value": "128"
10069
+ }
10070
+ ],
10071
+ "functionName": {
10072
+ "name": "add",
10073
+ "nodeType": "YulIdentifier",
10074
+ "src": "13166:3:134"
10075
+ },
10076
+ "nodeType": "YulFunctionCall",
10077
+ "src": "13166:19:134"
10078
+ },
10079
+ "variableNames": [
10080
+ {
10081
+ "name": "tail",
10082
+ "nodeType": "YulIdentifier",
10083
+ "src": "13158:4:134"
10084
+ }
10085
+ ]
10086
+ }
10087
+ ]
10088
+ },
10089
+ "name": "abi_encode_tuple_t_stringliteral_fd2cd1607e5cd6d3be51dd7074e5e42195d6bf9aadf9522b20c8c82fbc61b349__to_t_string_memory_ptr__fromStack_reversed",
10090
+ "nodeType": "YulFunctionDefinition",
10091
+ "parameters": [
10092
+ {
10093
+ "name": "headStart",
10094
+ "nodeType": "YulTypedName",
10095
+ "src": "12938:9:134",
10096
+ "type": ""
10097
+ }
10098
+ ],
10099
+ "returnVariables": [
10100
+ {
10101
+ "name": "tail",
10102
+ "nodeType": "YulTypedName",
10103
+ "src": "12952:4:134",
10104
+ "type": ""
10105
+ }
10106
+ ],
10107
+ "src": "12787:404:134"
10108
+ },
10109
+ {
10110
+ "body": {
10111
+ "nodeType": "YulBlock",
10112
+ "src": "13303:87:134",
9651
10113
  "statements": [
9652
10114
  {
9653
10115
  "nodeType": "YulAssignment",
9654
- "src": "12497:26:134",
10116
+ "src": "13313:26:134",
9655
10117
  "value": {
9656
10118
  "arguments": [
9657
10119
  {
9658
10120
  "name": "headStart",
9659
10121
  "nodeType": "YulIdentifier",
9660
- "src": "12509:9:134"
10122
+ "src": "13325:9:134"
9661
10123
  },
9662
10124
  {
9663
10125
  "kind": "number",
9664
10126
  "nodeType": "YulLiteral",
9665
- "src": "12520:2:134",
10127
+ "src": "13336:2:134",
9666
10128
  "type": "",
9667
10129
  "value": "32"
9668
10130
  }
@@ -9670,16 +10132,16 @@
9670
10132
  "functionName": {
9671
10133
  "name": "add",
9672
10134
  "nodeType": "YulIdentifier",
9673
- "src": "12505:3:134"
10135
+ "src": "13321:3:134"
9674
10136
  },
9675
10137
  "nodeType": "YulFunctionCall",
9676
- "src": "12505:18:134"
10138
+ "src": "13321:18:134"
9677
10139
  },
9678
10140
  "variableNames": [
9679
10141
  {
9680
10142
  "name": "tail",
9681
10143
  "nodeType": "YulIdentifier",
9682
- "src": "12497:4:134"
10144
+ "src": "13313:4:134"
9683
10145
  }
9684
10146
  ]
9685
10147
  },
@@ -9689,19 +10151,19 @@
9689
10151
  {
9690
10152
  "name": "headStart",
9691
10153
  "nodeType": "YulIdentifier",
9692
- "src": "12539:9:134"
10154
+ "src": "13355:9:134"
9693
10155
  },
9694
10156
  {
9695
10157
  "arguments": [
9696
10158
  {
9697
10159
  "name": "value0",
9698
10160
  "nodeType": "YulIdentifier",
9699
- "src": "12554:6:134"
10161
+ "src": "13370:6:134"
9700
10162
  },
9701
10163
  {
9702
10164
  "kind": "number",
9703
10165
  "nodeType": "YulLiteral",
9704
- "src": "12562:4:134",
10166
+ "src": "13378:4:134",
9705
10167
  "type": "",
9706
10168
  "value": "0xff"
9707
10169
  }
@@ -9709,22 +10171,22 @@
9709
10171
  "functionName": {
9710
10172
  "name": "and",
9711
10173
  "nodeType": "YulIdentifier",
9712
- "src": "12550:3:134"
10174
+ "src": "13366:3:134"
9713
10175
  },
9714
10176
  "nodeType": "YulFunctionCall",
9715
- "src": "12550:17:134"
10177
+ "src": "13366:17:134"
9716
10178
  }
9717
10179
  ],
9718
10180
  "functionName": {
9719
10181
  "name": "mstore",
9720
10182
  "nodeType": "YulIdentifier",
9721
- "src": "12532:6:134"
10183
+ "src": "13348:6:134"
9722
10184
  },
9723
10185
  "nodeType": "YulFunctionCall",
9724
- "src": "12532:36:134"
10186
+ "src": "13348:36:134"
9725
10187
  },
9726
10188
  "nodeType": "YulExpressionStatement",
9727
- "src": "12532:36:134"
10189
+ "src": "13348:36:134"
9728
10190
  }
9729
10191
  ]
9730
10192
  },
@@ -9734,13 +10196,13 @@
9734
10196
  {
9735
10197
  "name": "headStart",
9736
10198
  "nodeType": "YulTypedName",
9737
- "src": "12456:9:134",
10199
+ "src": "13272:9:134",
9738
10200
  "type": ""
9739
10201
  },
9740
10202
  {
9741
10203
  "name": "value0",
9742
10204
  "nodeType": "YulTypedName",
9743
- "src": "12467:6:134",
10205
+ "src": "13283:6:134",
9744
10206
  "type": ""
9745
10207
  }
9746
10208
  ],
@@ -9748,16 +10210,16 @@
9748
10210
  {
9749
10211
  "name": "tail",
9750
10212
  "nodeType": "YulTypedName",
9751
- "src": "12478:4:134",
10213
+ "src": "13294:4:134",
9752
10214
  "type": ""
9753
10215
  }
9754
10216
  ],
9755
- "src": "12380:194:134"
10217
+ "src": "13196:194:134"
9756
10218
  },
9757
10219
  {
9758
10220
  "body": {
9759
10221
  "nodeType": "YulBlock",
9760
- "src": "12753:228:134",
10222
+ "src": "13569:228:134",
9761
10223
  "statements": [
9762
10224
  {
9763
10225
  "expression": {
@@ -9765,12 +10227,12 @@
9765
10227
  {
9766
10228
  "name": "headStart",
9767
10229
  "nodeType": "YulIdentifier",
9768
- "src": "12770:9:134"
10230
+ "src": "13586:9:134"
9769
10231
  },
9770
10232
  {
9771
10233
  "kind": "number",
9772
10234
  "nodeType": "YulLiteral",
9773
- "src": "12781:2:134",
10235
+ "src": "13597:2:134",
9774
10236
  "type": "",
9775
10237
  "value": "32"
9776
10238
  }
@@ -9778,13 +10240,13 @@
9778
10240
  "functionName": {
9779
10241
  "name": "mstore",
9780
10242
  "nodeType": "YulIdentifier",
9781
- "src": "12763:6:134"
10243
+ "src": "13579:6:134"
9782
10244
  },
9783
10245
  "nodeType": "YulFunctionCall",
9784
- "src": "12763:21:134"
10246
+ "src": "13579:21:134"
9785
10247
  },
9786
10248
  "nodeType": "YulExpressionStatement",
9787
- "src": "12763:21:134"
10249
+ "src": "13579:21:134"
9788
10250
  },
9789
10251
  {
9790
10252
  "expression": {
@@ -9794,12 +10256,12 @@
9794
10256
  {
9795
10257
  "name": "headStart",
9796
10258
  "nodeType": "YulIdentifier",
9797
- "src": "12804:9:134"
10259
+ "src": "13620:9:134"
9798
10260
  },
9799
10261
  {
9800
10262
  "kind": "number",
9801
10263
  "nodeType": "YulLiteral",
9802
- "src": "12815:2:134",
10264
+ "src": "13631:2:134",
9803
10265
  "type": "",
9804
10266
  "value": "32"
9805
10267
  }
@@ -9807,15 +10269,15 @@
9807
10269
  "functionName": {
9808
10270
  "name": "add",
9809
10271
  "nodeType": "YulIdentifier",
9810
- "src": "12800:3:134"
10272
+ "src": "13616:3:134"
9811
10273
  },
9812
10274
  "nodeType": "YulFunctionCall",
9813
- "src": "12800:18:134"
10275
+ "src": "13616:18:134"
9814
10276
  },
9815
10277
  {
9816
10278
  "kind": "number",
9817
10279
  "nodeType": "YulLiteral",
9818
- "src": "12820:2:134",
10280
+ "src": "13636:2:134",
9819
10281
  "type": "",
9820
10282
  "value": "38"
9821
10283
  }
@@ -9823,13 +10285,13 @@
9823
10285
  "functionName": {
9824
10286
  "name": "mstore",
9825
10287
  "nodeType": "YulIdentifier",
9826
- "src": "12793:6:134"
10288
+ "src": "13609:6:134"
9827
10289
  },
9828
10290
  "nodeType": "YulFunctionCall",
9829
- "src": "12793:30:134"
10291
+ "src": "13609:30:134"
9830
10292
  },
9831
10293
  "nodeType": "YulExpressionStatement",
9832
- "src": "12793:30:134"
10294
+ "src": "13609:30:134"
9833
10295
  },
9834
10296
  {
9835
10297
  "expression": {
@@ -9839,12 +10301,12 @@
9839
10301
  {
9840
10302
  "name": "headStart",
9841
10303
  "nodeType": "YulIdentifier",
9842
- "src": "12843:9:134"
10304
+ "src": "13659:9:134"
9843
10305
  },
9844
10306
  {
9845
10307
  "kind": "number",
9846
10308
  "nodeType": "YulLiteral",
9847
- "src": "12854:2:134",
10309
+ "src": "13670:2:134",
9848
10310
  "type": "",
9849
10311
  "value": "64"
9850
10312
  }
@@ -9852,16 +10314,16 @@
9852
10314
  "functionName": {
9853
10315
  "name": "add",
9854
10316
  "nodeType": "YulIdentifier",
9855
- "src": "12839:3:134"
10317
+ "src": "13655:3:134"
9856
10318
  },
9857
10319
  "nodeType": "YulFunctionCall",
9858
- "src": "12839:18:134"
10320
+ "src": "13655:18:134"
9859
10321
  },
9860
10322
  {
9861
10323
  "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
9862
10324
  "kind": "string",
9863
10325
  "nodeType": "YulLiteral",
9864
- "src": "12859:34:134",
10326
+ "src": "13675:34:134",
9865
10327
  "type": "",
9866
10328
  "value": "Ownable: new owner is the zero a"
9867
10329
  }
@@ -9869,13 +10331,13 @@
9869
10331
  "functionName": {
9870
10332
  "name": "mstore",
9871
10333
  "nodeType": "YulIdentifier",
9872
- "src": "12832:6:134"
10334
+ "src": "13648:6:134"
9873
10335
  },
9874
10336
  "nodeType": "YulFunctionCall",
9875
- "src": "12832:62:134"
10337
+ "src": "13648:62:134"
9876
10338
  },
9877
10339
  "nodeType": "YulExpressionStatement",
9878
- "src": "12832:62:134"
10340
+ "src": "13648:62:134"
9879
10341
  },
9880
10342
  {
9881
10343
  "expression": {
@@ -9885,12 +10347,12 @@
9885
10347
  {
9886
10348
  "name": "headStart",
9887
10349
  "nodeType": "YulIdentifier",
9888
- "src": "12914:9:134"
10350
+ "src": "13730:9:134"
9889
10351
  },
9890
10352
  {
9891
10353
  "kind": "number",
9892
10354
  "nodeType": "YulLiteral",
9893
- "src": "12925:2:134",
10355
+ "src": "13741:2:134",
9894
10356
  "type": "",
9895
10357
  "value": "96"
9896
10358
  }
@@ -9898,16 +10360,16 @@
9898
10360
  "functionName": {
9899
10361
  "name": "add",
9900
10362
  "nodeType": "YulIdentifier",
9901
- "src": "12910:3:134"
10363
+ "src": "13726:3:134"
9902
10364
  },
9903
10365
  "nodeType": "YulFunctionCall",
9904
- "src": "12910:18:134"
10366
+ "src": "13726:18:134"
9905
10367
  },
9906
10368
  {
9907
10369
  "hexValue": "646472657373",
9908
10370
  "kind": "string",
9909
10371
  "nodeType": "YulLiteral",
9910
- "src": "12930:8:134",
10372
+ "src": "13746:8:134",
9911
10373
  "type": "",
9912
10374
  "value": "ddress"
9913
10375
  }
@@ -9915,28 +10377,28 @@
9915
10377
  "functionName": {
9916
10378
  "name": "mstore",
9917
10379
  "nodeType": "YulIdentifier",
9918
- "src": "12903:6:134"
10380
+ "src": "13719:6:134"
9919
10381
  },
9920
10382
  "nodeType": "YulFunctionCall",
9921
- "src": "12903:36:134"
10383
+ "src": "13719:36:134"
9922
10384
  },
9923
10385
  "nodeType": "YulExpressionStatement",
9924
- "src": "12903:36:134"
10386
+ "src": "13719:36:134"
9925
10387
  },
9926
10388
  {
9927
10389
  "nodeType": "YulAssignment",
9928
- "src": "12948:27:134",
10390
+ "src": "13764:27:134",
9929
10391
  "value": {
9930
10392
  "arguments": [
9931
10393
  {
9932
10394
  "name": "headStart",
9933
10395
  "nodeType": "YulIdentifier",
9934
- "src": "12960:9:134"
10396
+ "src": "13776:9:134"
9935
10397
  },
9936
10398
  {
9937
10399
  "kind": "number",
9938
10400
  "nodeType": "YulLiteral",
9939
- "src": "12971:3:134",
10401
+ "src": "13787:3:134",
9940
10402
  "type": "",
9941
10403
  "value": "128"
9942
10404
  }
@@ -9944,16 +10406,16 @@
9944
10406
  "functionName": {
9945
10407
  "name": "add",
9946
10408
  "nodeType": "YulIdentifier",
9947
- "src": "12956:3:134"
10409
+ "src": "13772:3:134"
9948
10410
  },
9949
10411
  "nodeType": "YulFunctionCall",
9950
- "src": "12956:19:134"
10412
+ "src": "13772:19:134"
9951
10413
  },
9952
10414
  "variableNames": [
9953
10415
  {
9954
10416
  "name": "tail",
9955
10417
  "nodeType": "YulIdentifier",
9956
- "src": "12948:4:134"
10418
+ "src": "13764:4:134"
9957
10419
  }
9958
10420
  ]
9959
10421
  }
@@ -9965,7 +10427,7 @@
9965
10427
  {
9966
10428
  "name": "headStart",
9967
10429
  "nodeType": "YulTypedName",
9968
- "src": "12730:9:134",
10430
+ "src": "13546:9:134",
9969
10431
  "type": ""
9970
10432
  }
9971
10433
  ],
@@ -9973,16 +10435,16 @@
9973
10435
  {
9974
10436
  "name": "tail",
9975
10437
  "nodeType": "YulTypedName",
9976
- "src": "12744:4:134",
10438
+ "src": "13560:4:134",
9977
10439
  "type": ""
9978
10440
  }
9979
10441
  ],
9980
- "src": "12579:402:134"
10442
+ "src": "13395:402:134"
9981
10443
  },
9982
10444
  {
9983
10445
  "body": {
9984
10446
  "nodeType": "YulBlock",
9985
- "src": "13160:182:134",
10447
+ "src": "13976:182:134",
9986
10448
  "statements": [
9987
10449
  {
9988
10450
  "expression": {
@@ -9990,12 +10452,12 @@
9990
10452
  {
9991
10453
  "name": "headStart",
9992
10454
  "nodeType": "YulIdentifier",
9993
- "src": "13177:9:134"
10455
+ "src": "13993:9:134"
9994
10456
  },
9995
10457
  {
9996
10458
  "kind": "number",
9997
10459
  "nodeType": "YulLiteral",
9998
- "src": "13188:2:134",
10460
+ "src": "14004:2:134",
9999
10461
  "type": "",
10000
10462
  "value": "32"
10001
10463
  }
@@ -10003,13 +10465,13 @@
10003
10465
  "functionName": {
10004
10466
  "name": "mstore",
10005
10467
  "nodeType": "YulIdentifier",
10006
- "src": "13170:6:134"
10468
+ "src": "13986:6:134"
10007
10469
  },
10008
10470
  "nodeType": "YulFunctionCall",
10009
- "src": "13170:21:134"
10471
+ "src": "13986:21:134"
10010
10472
  },
10011
10473
  "nodeType": "YulExpressionStatement",
10012
- "src": "13170:21:134"
10474
+ "src": "13986:21:134"
10013
10475
  },
10014
10476
  {
10015
10477
  "expression": {
@@ -10019,12 +10481,12 @@
10019
10481
  {
10020
10482
  "name": "headStart",
10021
10483
  "nodeType": "YulIdentifier",
10022
- "src": "13211:9:134"
10484
+ "src": "14027:9:134"
10023
10485
  },
10024
10486
  {
10025
10487
  "kind": "number",
10026
10488
  "nodeType": "YulLiteral",
10027
- "src": "13222:2:134",
10489
+ "src": "14038:2:134",
10028
10490
  "type": "",
10029
10491
  "value": "32"
10030
10492
  }
@@ -10032,15 +10494,15 @@
10032
10494
  "functionName": {
10033
10495
  "name": "add",
10034
10496
  "nodeType": "YulIdentifier",
10035
- "src": "13207:3:134"
10497
+ "src": "14023:3:134"
10036
10498
  },
10037
10499
  "nodeType": "YulFunctionCall",
10038
- "src": "13207:18:134"
10500
+ "src": "14023:18:134"
10039
10501
  },
10040
10502
  {
10041
10503
  "kind": "number",
10042
10504
  "nodeType": "YulLiteral",
10043
- "src": "13227:2:134",
10505
+ "src": "14043:2:134",
10044
10506
  "type": "",
10045
10507
  "value": "32"
10046
10508
  }
@@ -10048,13 +10510,13 @@
10048
10510
  "functionName": {
10049
10511
  "name": "mstore",
10050
10512
  "nodeType": "YulIdentifier",
10051
- "src": "13200:6:134"
10513
+ "src": "14016:6:134"
10052
10514
  },
10053
10515
  "nodeType": "YulFunctionCall",
10054
- "src": "13200:30:134"
10516
+ "src": "14016:30:134"
10055
10517
  },
10056
10518
  "nodeType": "YulExpressionStatement",
10057
- "src": "13200:30:134"
10519
+ "src": "14016:30:134"
10058
10520
  },
10059
10521
  {
10060
10522
  "expression": {
@@ -10064,12 +10526,12 @@
10064
10526
  {
10065
10527
  "name": "headStart",
10066
10528
  "nodeType": "YulIdentifier",
10067
- "src": "13250:9:134"
10529
+ "src": "14066:9:134"
10068
10530
  },
10069
10531
  {
10070
10532
  "kind": "number",
10071
10533
  "nodeType": "YulLiteral",
10072
- "src": "13261:2:134",
10534
+ "src": "14077:2:134",
10073
10535
  "type": "",
10074
10536
  "value": "64"
10075
10537
  }
@@ -10077,16 +10539,16 @@
10077
10539
  "functionName": {
10078
10540
  "name": "add",
10079
10541
  "nodeType": "YulIdentifier",
10080
- "src": "13246:3:134"
10542
+ "src": "14062:3:134"
10081
10543
  },
10082
10544
  "nodeType": "YulFunctionCall",
10083
- "src": "13246:18:134"
10545
+ "src": "14062:18:134"
10084
10546
  },
10085
10547
  {
10086
10548
  "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
10087
10549
  "kind": "string",
10088
10550
  "nodeType": "YulLiteral",
10089
- "src": "13266:34:134",
10551
+ "src": "14082:34:134",
10090
10552
  "type": "",
10091
10553
  "value": "Ownable: caller is not the owner"
10092
10554
  }
@@ -10094,28 +10556,28 @@
10094
10556
  "functionName": {
10095
10557
  "name": "mstore",
10096
10558
  "nodeType": "YulIdentifier",
10097
- "src": "13239:6:134"
10559
+ "src": "14055:6:134"
10098
10560
  },
10099
10561
  "nodeType": "YulFunctionCall",
10100
- "src": "13239:62:134"
10562
+ "src": "14055:62:134"
10101
10563
  },
10102
10564
  "nodeType": "YulExpressionStatement",
10103
- "src": "13239:62:134"
10565
+ "src": "14055:62:134"
10104
10566
  },
10105
10567
  {
10106
10568
  "nodeType": "YulAssignment",
10107
- "src": "13310:26:134",
10569
+ "src": "14126:26:134",
10108
10570
  "value": {
10109
10571
  "arguments": [
10110
10572
  {
10111
10573
  "name": "headStart",
10112
10574
  "nodeType": "YulIdentifier",
10113
- "src": "13322:9:134"
10575
+ "src": "14138:9:134"
10114
10576
  },
10115
10577
  {
10116
10578
  "kind": "number",
10117
10579
  "nodeType": "YulLiteral",
10118
- "src": "13333:2:134",
10580
+ "src": "14149:2:134",
10119
10581
  "type": "",
10120
10582
  "value": "96"
10121
10583
  }
@@ -10123,16 +10585,16 @@
10123
10585
  "functionName": {
10124
10586
  "name": "add",
10125
10587
  "nodeType": "YulIdentifier",
10126
- "src": "13318:3:134"
10588
+ "src": "14134:3:134"
10127
10589
  },
10128
10590
  "nodeType": "YulFunctionCall",
10129
- "src": "13318:18:134"
10591
+ "src": "14134:18:134"
10130
10592
  },
10131
10593
  "variableNames": [
10132
10594
  {
10133
10595
  "name": "tail",
10134
10596
  "nodeType": "YulIdentifier",
10135
- "src": "13310:4:134"
10597
+ "src": "14126:4:134"
10136
10598
  }
10137
10599
  ]
10138
10600
  }
@@ -10144,7 +10606,7 @@
10144
10606
  {
10145
10607
  "name": "headStart",
10146
10608
  "nodeType": "YulTypedName",
10147
- "src": "13137:9:134",
10609
+ "src": "13953:9:134",
10148
10610
  "type": ""
10149
10611
  }
10150
10612
  ],
@@ -10152,16 +10614,16 @@
10152
10614
  {
10153
10615
  "name": "tail",
10154
10616
  "nodeType": "YulTypedName",
10155
- "src": "13151:4:134",
10617
+ "src": "13967:4:134",
10156
10618
  "type": ""
10157
10619
  }
10158
10620
  ],
10159
- "src": "12986:356:134"
10621
+ "src": "13802:356:134"
10160
10622
  },
10161
10623
  {
10162
10624
  "body": {
10163
10625
  "nodeType": "YulBlock",
10164
- "src": "13521:233:134",
10626
+ "src": "14337:233:134",
10165
10627
  "statements": [
10166
10628
  {
10167
10629
  "expression": {
@@ -10169,12 +10631,12 @@
10169
10631
  {
10170
10632
  "name": "headStart",
10171
10633
  "nodeType": "YulIdentifier",
10172
- "src": "13538:9:134"
10634
+ "src": "14354:9:134"
10173
10635
  },
10174
10636
  {
10175
10637
  "kind": "number",
10176
10638
  "nodeType": "YulLiteral",
10177
- "src": "13549:2:134",
10639
+ "src": "14365:2:134",
10178
10640
  "type": "",
10179
10641
  "value": "32"
10180
10642
  }
@@ -10182,13 +10644,13 @@
10182
10644
  "functionName": {
10183
10645
  "name": "mstore",
10184
10646
  "nodeType": "YulIdentifier",
10185
- "src": "13531:6:134"
10647
+ "src": "14347:6:134"
10186
10648
  },
10187
10649
  "nodeType": "YulFunctionCall",
10188
- "src": "13531:21:134"
10650
+ "src": "14347:21:134"
10189
10651
  },
10190
10652
  "nodeType": "YulExpressionStatement",
10191
- "src": "13531:21:134"
10653
+ "src": "14347:21:134"
10192
10654
  },
10193
10655
  {
10194
10656
  "expression": {
@@ -10198,12 +10660,12 @@
10198
10660
  {
10199
10661
  "name": "headStart",
10200
10662
  "nodeType": "YulIdentifier",
10201
- "src": "13572:9:134"
10663
+ "src": "14388:9:134"
10202
10664
  },
10203
10665
  {
10204
10666
  "kind": "number",
10205
10667
  "nodeType": "YulLiteral",
10206
- "src": "13583:2:134",
10668
+ "src": "14399:2:134",
10207
10669
  "type": "",
10208
10670
  "value": "32"
10209
10671
  }
@@ -10211,15 +10673,15 @@
10211
10673
  "functionName": {
10212
10674
  "name": "add",
10213
10675
  "nodeType": "YulIdentifier",
10214
- "src": "13568:3:134"
10676
+ "src": "14384:3:134"
10215
10677
  },
10216
10678
  "nodeType": "YulFunctionCall",
10217
- "src": "13568:18:134"
10679
+ "src": "14384:18:134"
10218
10680
  },
10219
10681
  {
10220
10682
  "kind": "number",
10221
10683
  "nodeType": "YulLiteral",
10222
- "src": "13588:2:134",
10684
+ "src": "14404:2:134",
10223
10685
  "type": "",
10224
10686
  "value": "43"
10225
10687
  }
@@ -10227,13 +10689,13 @@
10227
10689
  "functionName": {
10228
10690
  "name": "mstore",
10229
10691
  "nodeType": "YulIdentifier",
10230
- "src": "13561:6:134"
10692
+ "src": "14377:6:134"
10231
10693
  },
10232
10694
  "nodeType": "YulFunctionCall",
10233
- "src": "13561:30:134"
10695
+ "src": "14377:30:134"
10234
10696
  },
10235
10697
  "nodeType": "YulExpressionStatement",
10236
- "src": "13561:30:134"
10698
+ "src": "14377:30:134"
10237
10699
  },
10238
10700
  {
10239
10701
  "expression": {
@@ -10243,12 +10705,12 @@
10243
10705
  {
10244
10706
  "name": "headStart",
10245
10707
  "nodeType": "YulIdentifier",
10246
- "src": "13611:9:134"
10708
+ "src": "14427:9:134"
10247
10709
  },
10248
10710
  {
10249
10711
  "kind": "number",
10250
10712
  "nodeType": "YulLiteral",
10251
- "src": "13622:2:134",
10713
+ "src": "14438:2:134",
10252
10714
  "type": "",
10253
10715
  "value": "64"
10254
10716
  }
@@ -10256,16 +10718,16 @@
10256
10718
  "functionName": {
10257
10719
  "name": "add",
10258
10720
  "nodeType": "YulIdentifier",
10259
- "src": "13607:3:134"
10721
+ "src": "14423:3:134"
10260
10722
  },
10261
10723
  "nodeType": "YulFunctionCall",
10262
- "src": "13607:18:134"
10724
+ "src": "14423:18:134"
10263
10725
  },
10264
10726
  {
10265
10727
  "hexValue": "496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
10266
10728
  "kind": "string",
10267
10729
  "nodeType": "YulLiteral",
10268
- "src": "13627:34:134",
10730
+ "src": "14443:34:134",
10269
10731
  "type": "",
10270
10732
  "value": "Initializable: contract is not i"
10271
10733
  }
@@ -10273,13 +10735,13 @@
10273
10735
  "functionName": {
10274
10736
  "name": "mstore",
10275
10737
  "nodeType": "YulIdentifier",
10276
- "src": "13600:6:134"
10738
+ "src": "14416:6:134"
10277
10739
  },
10278
10740
  "nodeType": "YulFunctionCall",
10279
- "src": "13600:62:134"
10741
+ "src": "14416:62:134"
10280
10742
  },
10281
10743
  "nodeType": "YulExpressionStatement",
10282
- "src": "13600:62:134"
10744
+ "src": "14416:62:134"
10283
10745
  },
10284
10746
  {
10285
10747
  "expression": {
@@ -10289,12 +10751,12 @@
10289
10751
  {
10290
10752
  "name": "headStart",
10291
10753
  "nodeType": "YulIdentifier",
10292
- "src": "13682:9:134"
10754
+ "src": "14498:9:134"
10293
10755
  },
10294
10756
  {
10295
10757
  "kind": "number",
10296
10758
  "nodeType": "YulLiteral",
10297
- "src": "13693:2:134",
10759
+ "src": "14509:2:134",
10298
10760
  "type": "",
10299
10761
  "value": "96"
10300
10762
  }
@@ -10302,16 +10764,16 @@
10302
10764
  "functionName": {
10303
10765
  "name": "add",
10304
10766
  "nodeType": "YulIdentifier",
10305
- "src": "13678:3:134"
10767
+ "src": "14494:3:134"
10306
10768
  },
10307
10769
  "nodeType": "YulFunctionCall",
10308
- "src": "13678:18:134"
10770
+ "src": "14494:18:134"
10309
10771
  },
10310
10772
  {
10311
10773
  "hexValue": "6e697469616c697a696e67",
10312
10774
  "kind": "string",
10313
10775
  "nodeType": "YulLiteral",
10314
- "src": "13698:13:134",
10776
+ "src": "14514:13:134",
10315
10777
  "type": "",
10316
10778
  "value": "nitializing"
10317
10779
  }
@@ -10319,28 +10781,28 @@
10319
10781
  "functionName": {
10320
10782
  "name": "mstore",
10321
10783
  "nodeType": "YulIdentifier",
10322
- "src": "13671:6:134"
10784
+ "src": "14487:6:134"
10323
10785
  },
10324
10786
  "nodeType": "YulFunctionCall",
10325
- "src": "13671:41:134"
10787
+ "src": "14487:41:134"
10326
10788
  },
10327
10789
  "nodeType": "YulExpressionStatement",
10328
- "src": "13671:41:134"
10790
+ "src": "14487:41:134"
10329
10791
  },
10330
10792
  {
10331
10793
  "nodeType": "YulAssignment",
10332
- "src": "13721:27:134",
10794
+ "src": "14537:27:134",
10333
10795
  "value": {
10334
10796
  "arguments": [
10335
10797
  {
10336
10798
  "name": "headStart",
10337
10799
  "nodeType": "YulIdentifier",
10338
- "src": "13733:9:134"
10800
+ "src": "14549:9:134"
10339
10801
  },
10340
10802
  {
10341
10803
  "kind": "number",
10342
10804
  "nodeType": "YulLiteral",
10343
- "src": "13744:3:134",
10805
+ "src": "14560:3:134",
10344
10806
  "type": "",
10345
10807
  "value": "128"
10346
10808
  }
@@ -10348,16 +10810,16 @@
10348
10810
  "functionName": {
10349
10811
  "name": "add",
10350
10812
  "nodeType": "YulIdentifier",
10351
- "src": "13729:3:134"
10813
+ "src": "14545:3:134"
10352
10814
  },
10353
10815
  "nodeType": "YulFunctionCall",
10354
- "src": "13729:19:134"
10816
+ "src": "14545:19:134"
10355
10817
  },
10356
10818
  "variableNames": [
10357
10819
  {
10358
10820
  "name": "tail",
10359
10821
  "nodeType": "YulIdentifier",
10360
- "src": "13721:4:134"
10822
+ "src": "14537:4:134"
10361
10823
  }
10362
10824
  ]
10363
10825
  }
@@ -10369,7 +10831,7 @@
10369
10831
  {
10370
10832
  "name": "headStart",
10371
10833
  "nodeType": "YulTypedName",
10372
- "src": "13498:9:134",
10834
+ "src": "14314:9:134",
10373
10835
  "type": ""
10374
10836
  }
10375
10837
  ],
@@ -10377,15 +10839,15 @@
10377
10839
  {
10378
10840
  "name": "tail",
10379
10841
  "nodeType": "YulTypedName",
10380
- "src": "13512:4:134",
10842
+ "src": "14328:4:134",
10381
10843
  "type": ""
10382
10844
  }
10383
10845
  ],
10384
- "src": "13347:407:134"
10846
+ "src": "14163:407:134"
10385
10847
  }
10386
10848
  ]
10387
10849
  },
10388
- "contents": "{\n { }\n function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffff))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n let array_1 := allocate_memory(add(and(add(_1, 0x1f), not(31)), 0x20))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), 0)\n array := array_1\n }\n function abi_decode_uint16(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_bytes32t_uint16t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n let _2 := 32\n let offset_1 := calldataload(add(headStart, _2))\n if gt(offset_1, _1) { revert(0, 0) }\n let _3 := add(headStart, offset_1)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n let _4 := calldataload(_3)\n if gt(_4, _1) { panic_error_0x41() }\n let _5 := shl(5, _4)\n let dst := allocate_memory(add(_5, _2))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _2)\n let srcEnd := add(add(_3, _5), _2)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_3, _2)\n for { } lt(src, srcEnd) { src := add(src, _2) }\n {\n let innerOffset := calldataload(src)\n if gt(innerOffset, _1)\n {\n let _6 := 0\n revert(_6, _6)\n }\n mstore(dst, abi_decode_bytes(add(add(_3, innerOffset), _2), dataEnd))\n dst := add(dst, _2)\n }\n value1 := dst_1\n value2 := calldataload(add(headStart, 64))\n value3 := abi_decode_uint16(add(headStart, 96))\n value4 := calldataload(add(headStart, 128))\n }\n function abi_decode_tuple_t_struct$_BitcoinTxInfo_$38550_calldata_ptrt_struct$_DepositRevealInfo_$38563_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2\n {\n let _1 := sub(dataEnd, headStart)\n if slt(_1, 256) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 128) { revert(0, 0) }\n value0 := _2\n if slt(add(_1, not(31)), 192) { revert(0, 0) }\n value1 := add(headStart, 32)\n value2 := abi_decode_address(add(headStart, 224))\n }\n function abi_decode_tuple_t_addresst_addresst_uint16(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := abi_decode_uint16(add(headStart, 64))\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_contract$_IL2WormholeGateway_$39435__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_contract$_IWormholeRelayer_$40602__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_22c5c232cca5af2150c4190478117f5e21582e07c41825cebb58edfb110c95b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"L1 Bitcoin Depositor already set\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_efa883159a648ceb141d8c1f6658f0ac26f0a02d46bd1bd2cfa474c4ec020314__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"L1 Bitcoin Depositor must not be\")\n mstore(add(headStart, 96), \" 0x0\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b339e39aab18a476dde5bc1f98bdf861de4c95cbdb129860a839c6efcd4ab1f3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 30)\n mstore(add(headStart, 64), \"Caller is not Wormhole Relayer\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_31e68c34abf5f8298cae4cb7597757bd5ec8bed715334d5547f30b6a46583f92__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"Source chain is not the expected\")\n mstore(add(headStart, 96), \" L1 chain\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_296a535db463aff7e476a7b7232ab4cdff8aaf854ae2ede035dcd5d5307d6967__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"Source address is not the expect\")\n mstore(add(headStart, 96), \"ed L1 Bitcoin depositor\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b5ebee155a5a952498acd4009e72445946ec51247980210888d82e319324c6ae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 48)\n mstore(add(headStart, 64), \"Expected 1 additional VAA key fo\")\n mstore(add(headStart, 96), \"r token transfer\")\n tail := add(headStart, 128)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_decode_bytes4(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n }\n function abi_encode_bytes4(value, pos)\n {\n mstore(pos, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function calldata_access_bytes_calldata(base_ref, ptr) -> value, length\n {\n let rel_offset_of_tail := calldataload(ptr)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n let value_1 := add(rel_offset_of_tail, base_ref)\n length := calldataload(value_1)\n value := add(value_1, 0x20)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n if sgt(value, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function abi_encode_bytes_calldata(start, length, pos) -> end\n {\n mstore(pos, length)\n calldatacopy(add(pos, 0x20), start, length)\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_bytes8(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffff000000000000000000000000000000000000000000000000))\n }\n function abi_decode_bytes20(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, not(0xffffffffffffffffffffffff)))) { revert(0, 0) }\n }\n function abi_encode_bytes20(value, pos)\n {\n mstore(pos, and(value, not(0xffffffffffffffffffffffff)))\n }\n function abi_encode_tuple_t_struct$_BitcoinTxInfo_$38550_calldata_ptr_t_struct$_DepositRevealInfo_$38563_calldata_ptr__to_t_struct$_BitcoinTxInfo_$38550_memory_ptr_t_struct$_DepositRevealInfo_$38563_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 224)\n let _1 := 0xffffffff00000000000000000000000000000000000000000000000000000000\n mstore(add(headStart, 224), and(abi_decode_bytes4(value0), _1))\n let memberValue0, memberValue1 := calldata_access_bytes_calldata(value0, add(value0, 0x20))\n mstore(add(headStart, 256), 0x80)\n let tail_1 := abi_encode_bytes_calldata(memberValue0, memberValue1, add(headStart, 352))\n let memberValue0_1, memberValue1_1 := calldata_access_bytes_calldata(value0, add(value0, 0x40))\n mstore(add(headStart, 288), add(sub(tail_1, headStart), not(223)))\n let tail_2 := abi_encode_bytes_calldata(memberValue0_1, memberValue1_1, tail_1)\n mstore(add(headStart, 320), and(abi_decode_bytes4(add(value0, 0x60)), _1))\n tail := tail_2\n let value := calldataload(value1)\n let _2 := and(value, 0xffffffff)\n if iszero(eq(value, _2)) { revert(0, 0) }\n mstore(add(headStart, 0x20), _2)\n let value_1 := calldataload(add(value1, 0x20))\n if iszero(eq(value_1, and(value_1, 0xffffffffffffffff000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n abi_encode_bytes8(value_1, add(headStart, 0x40))\n let memberValue0_2 := abi_decode_bytes20(add(value1, 0x40))\n abi_encode_bytes20(memberValue0_2, add(headStart, 0x60))\n let memberValue0_3 := abi_decode_bytes20(add(value1, 0x60))\n abi_encode_bytes20(memberValue0_3, add(headStart, 0x80))\n let memberValue0_4 := abi_decode_bytes4(add(value1, 0x80))\n abi_encode_bytes4(memberValue0_4, add(headStart, 160))\n let memberValue0_5 := abi_decode_address(add(value1, 160))\n abi_encode_address(memberValue0_5, add(headStart, 192))\n }\n function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n mstore(add(headStart, 96), \"dy initialized\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"Initializable: contract is not i\")\n mstore(add(headStart, 96), \"nitializing\")\n tail := add(headStart, 128)\n }\n}",
10850
+ "contents": "{\n { }\n function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffff))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n let array_1 := allocate_memory(add(and(add(_1, 0x1f), not(31)), 0x20))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), 0)\n array := array_1\n }\n function abi_decode_uint16(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_bytes32t_uint16t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n let _2 := 32\n let offset_1 := calldataload(add(headStart, _2))\n if gt(offset_1, _1) { revert(0, 0) }\n let _3 := add(headStart, offset_1)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n let _4 := calldataload(_3)\n if gt(_4, _1) { panic_error_0x41() }\n let _5 := shl(5, _4)\n let dst := allocate_memory(add(_5, _2))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _2)\n let srcEnd := add(add(_3, _5), _2)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_3, _2)\n for { } lt(src, srcEnd) { src := add(src, _2) }\n {\n let innerOffset := calldataload(src)\n if gt(innerOffset, _1)\n {\n let _6 := 0\n revert(_6, _6)\n }\n mstore(dst, abi_decode_bytes(add(add(_3, innerOffset), _2), dataEnd))\n dst := add(dst, _2)\n }\n value1 := dst_1\n value2 := calldataload(add(headStart, 64))\n value3 := abi_decode_uint16(add(headStart, 96))\n value4 := calldataload(add(headStart, 128))\n }\n function abi_decode_tuple_t_struct$_BitcoinTxInfo_$38550_calldata_ptrt_struct$_DepositRevealInfo_$38563_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2\n {\n let _1 := sub(dataEnd, headStart)\n if slt(_1, 256) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 128) { revert(0, 0) }\n value0 := _2\n if slt(add(_1, not(31)), 192) { revert(0, 0) }\n value1 := add(headStart, 32)\n value2 := abi_decode_address(add(headStart, 224))\n }\n function abi_decode_tuple_t_addresst_addresst_uint16(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := abi_decode_uint16(add(headStart, 64))\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_contract$_IL2WormholeGateway_$39475__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_contract$_IWormholeRelayer_$40662__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_22c5c232cca5af2150c4190478117f5e21582e07c41825cebb58edfb110c95b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"L1 Bitcoin Depositor already set\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_efa883159a648ceb141d8c1f6658f0ac26f0a02d46bd1bd2cfa474c4ec020314__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"L1 Bitcoin Depositor must not be\")\n mstore(add(headStart, 96), \" 0x0\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b339e39aab18a476dde5bc1f98bdf861de4c95cbdb129860a839c6efcd4ab1f3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 30)\n mstore(add(headStart, 64), \"Caller is not Wormhole Relayer\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_31e68c34abf5f8298cae4cb7597757bd5ec8bed715334d5547f30b6a46583f92__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"Source chain is not the expected\")\n mstore(add(headStart, 96), \" L1 chain\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_296a535db463aff7e476a7b7232ab4cdff8aaf854ae2ede035dcd5d5307d6967__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"Source address is not the expect\")\n mstore(add(headStart, 96), \"ed L1 Bitcoin depositor\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b5ebee155a5a952498acd4009e72445946ec51247980210888d82e319324c6ae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 48)\n mstore(add(headStart, 64), \"Expected 1 additional VAA key fo\")\n mstore(add(headStart, 96), \"r token transfer\")\n tail := add(headStart, 128)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_decode_bytes4(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n }\n function abi_encode_bytes4(value, pos)\n {\n mstore(pos, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function calldata_access_bytes_calldata(base_ref, ptr) -> value, length\n {\n let rel_offset_of_tail := calldataload(ptr)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n let value_1 := add(rel_offset_of_tail, base_ref)\n length := calldataload(value_1)\n value := add(value_1, 0x20)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n if sgt(value, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function abi_encode_bytes_calldata(start, length, pos) -> end\n {\n mstore(pos, length)\n calldatacopy(add(pos, 0x20), start, length)\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_bytes8(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffff000000000000000000000000000000000000000000000000))\n }\n function abi_decode_bytes20(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, not(0xffffffffffffffffffffffff)))) { revert(0, 0) }\n }\n function abi_encode_bytes20(value, pos)\n {\n mstore(pos, and(value, not(0xffffffffffffffffffffffff)))\n }\n function abi_encode_tuple_t_struct$_BitcoinTxInfo_$38550_calldata_ptr_t_struct$_DepositRevealInfo_$38563_calldata_ptr__to_t_struct$_BitcoinTxInfo_$38550_memory_ptr_t_struct$_DepositRevealInfo_$38563_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 224)\n let _1 := 0xffffffff00000000000000000000000000000000000000000000000000000000\n mstore(add(headStart, 224), and(abi_decode_bytes4(value0), _1))\n let memberValue0, memberValue1 := calldata_access_bytes_calldata(value0, add(value0, 0x20))\n mstore(add(headStart, 256), 0x80)\n let tail_1 := abi_encode_bytes_calldata(memberValue0, memberValue1, add(headStart, 352))\n let memberValue0_1, memberValue1_1 := calldata_access_bytes_calldata(value0, add(value0, 0x40))\n mstore(add(headStart, 288), add(sub(tail_1, headStart), not(223)))\n let tail_2 := abi_encode_bytes_calldata(memberValue0_1, memberValue1_1, tail_1)\n mstore(add(headStart, 320), and(abi_decode_bytes4(add(value0, 0x60)), _1))\n tail := tail_2\n let value := calldataload(value1)\n let _2 := and(value, 0xffffffff)\n if iszero(eq(value, _2)) { revert(0, 0) }\n mstore(add(headStart, 0x20), _2)\n let value_1 := calldataload(add(value1, 0x20))\n if iszero(eq(value_1, and(value_1, 0xffffffffffffffff000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n abi_encode_bytes8(value_1, add(headStart, 0x40))\n let memberValue0_2 := abi_decode_bytes20(add(value1, 0x40))\n abi_encode_bytes20(memberValue0_2, add(headStart, 0x60))\n let memberValue0_3 := abi_decode_bytes20(add(value1, 0x60))\n abi_encode_bytes20(memberValue0_3, add(headStart, 0x80))\n let memberValue0_4 := abi_decode_bytes4(add(value1, 0x80))\n abi_encode_bytes4(memberValue0_4, add(headStart, 160))\n let memberValue0_5 := abi_decode_address(add(value1, 160))\n abi_encode_address(memberValue0_5, add(headStart, 192))\n }\n function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n mstore(add(headStart, 96), \"dy initialized\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_9d9f10b27fa5e238dfe3a8d53141c129e62f02b37c632d47c322e5de35aa66e0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"WormholeRelayer address cannot b\")\n mstore(add(headStart, 96), \"e zero\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_fd2cd1607e5cd6d3be51dd7074e5e42195d6bf9aadf9522b20c8c82fbc61b349__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 40)\n mstore(add(headStart, 64), \"L2WormholeGateway address cannot\")\n mstore(add(headStart, 96), \" be zero\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"Initializable: contract is not i\")\n mstore(add(headStart, 96), \"nitializing\")\n tail := add(headStart, 128)\n }\n}",
10389
10851
  "id": 134,
10390
10852
  "language": "Yul",
10391
10853
  "name": "#utility.yul"
@@ -10393,14 +10855,14 @@
10393
10855
  ],
10394
10856
  "immutableReferences": {},
10395
10857
  "linkReferences": {},
10396
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7EBEF529 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xDA25B725 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xDA25B725 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0xE1551FC9 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7EBEF529 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xAA82E33B EQ PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x529DCA32 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x529DCA32 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x642DC033 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12622E5B EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x31446C46 EQ PUSH2 0xFB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0xE3 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x237 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11B PUSH2 0x12B CALLDATASIZE PUSH1 0x4 PUSH2 0xAD0 JUMP JUMPDEST PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xBD9 JUMP JUMPDEST PUSH2 0x5AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x5FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x180 CALLDATASIZE PUSH1 0x4 PUSH2 0xC49 JUMP JUMPDEST PUSH2 0x611 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x65 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x67 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x232 CALLDATASIZE PUSH1 0x4 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x79E JUMP JUMPDEST PUSH2 0x23F PUSH2 0x82E JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x29D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F7220616C726561647920736574 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x318 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F72206D757374206E6F74206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2030783000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F7420576F726D686F6C652052656C617965720000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD PUSH2 0xFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV AND EQ PUSH2 0x426 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F7572636520636861696E206973206E6F7420746865206578706563746564 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x204C3120636861696E0000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F757263652061646472657373206973206E6F742074686520657870656374 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6564204C3120426974636F696E206465706F7369746F72000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 EQ PUSH2 0x526 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45787065637465642031206164646974696F6E616C20564141206B657920666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7220746F6B656E207472616E7366657200000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5D21A596 SWAP1 DUP7 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x54E JUMPI PUSH2 0x54E PUSH2 0xC83 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x572 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x69A2A6D267E87F99180657174CA85389598D457BA949435EE4940F621BB849CF DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x5F0 SWAP3 SWAP2 SWAP1 PUSH2 0xDAA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x605 PUSH2 0x82E JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 PUSH2 0x888 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x631 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x64B JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x64B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x6BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x647920696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x6E0 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x6E8 PUSH2 0x8E7 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x66 DUP1 SLOAD SWAP2 DUP6 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL PUSH2 0xFFFF DUP6 AND MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x798 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x7A6 PUSH2 0x82E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x822 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x82B DUP2 PUSH2 0x888 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x60F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x952 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x9C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F CALLER PUSH2 0x888 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA00 DUP3 PUSH2 0x9C9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xA46 JUMPI PUSH2 0xA46 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA79 JUMPI PUSH2 0xA79 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0xA8C PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xA1D JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xAA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xAE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xB00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0C DUP10 DUP4 DUP11 ADD PUSH2 0xA4E JUMP JUMPDEST SWAP7 POP PUSH1 0x20 SWAP2 POP DUP2 DUP9 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xB23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 ADD PUSH1 0x1F DUP2 ADD DUP11 SGT PUSH2 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xB46 JUMPI PUSH2 0xB46 PUSH2 0xA07 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH2 0xB55 DUP6 DUP3 ADD PUSH2 0xA1D JUMP JUMPDEST SWAP2 DUP3 MSTORE DUP3 DUP2 ADD DUP6 ADD SWAP2 DUP6 DUP2 ADD SWAP1 DUP14 DUP5 GT ISZERO PUSH2 0xB6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 DUP6 ADD SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0xBAB JUMPI DUP3 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0xB8D JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xB9B DUP16 DUP10 DUP4 DUP10 ADD ADD PUSH2 0xA4E JUMP JUMPDEST DUP4 MSTORE POP SWAP2 DUP7 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0xB75 JUMP JUMPDEST DUP1 SWAP11 POP POP POP POP POP POP POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0xBC8 PUSH1 0x60 DUP8 ADD PUSH2 0xABE JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0xBF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 ADD PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0xC19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 POP PUSH1 0xC0 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0xC2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH2 0xC40 PUSH1 0xE0 DUP6 ADD PUSH2 0x9C9 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC67 DUP5 PUSH2 0x9C9 JUMP JUMPDEST SWAP3 POP PUSH2 0xC75 PUSH1 0x20 DUP6 ADD PUSH2 0x9C9 JUMP JUMPDEST SWAP2 POP PUSH2 0xC40 PUSH1 0x40 DUP6 ADD PUSH2 0xABE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCC6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xCAA JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0xD2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0xD5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND DUP2 EQ PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xE0 DUP2 MSTORE PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 PUSH2 0xDDB DUP7 PUSH2 0xCE7 JUMP JUMPDEST AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0xDEE PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0xD17 JUMP JUMPDEST PUSH1 0x80 PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0xE05 PUSH2 0x160 DUP7 ADD DUP3 DUP5 PUSH2 0xD64 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xE15 PUSH1 0x40 DUP8 ADD DUP8 PUSH2 0xD17 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xDF NOT ADD PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0xE2D DUP4 DUP3 DUP5 PUSH2 0xD64 JUMP JUMPDEST SWAP3 POP POP POP DUP2 PUSH2 0xE3E PUSH1 0x60 DUP9 ADD PUSH2 0xCE7 JUMP JUMPDEST AND PUSH2 0x140 DUP6 ADD MSTORE SWAP2 POP POP DUP3 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 DUP3 EQ PUSH2 0xE5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP6 ADD MSTORE POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xE98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH2 0xECD PUSH1 0x40 DUP5 ADD PUSH2 0xD8D JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH2 0xEEF PUSH1 0x60 DUP5 ADD PUSH2 0xD8D JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH2 0xF11 PUSH1 0x80 DUP5 ADD PUSH2 0xCE7 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH2 0xF46 PUSH1 0xA0 DUP5 ADD PUSH2 0x9C9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP PUSH22 0xD5D0301414DB765C71CC0277BFFAFF34AE10A741350 0x5E BLOCKHASH 0x2A DUP7 0x4E ISZERO MUL SWAP6 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ",
10397
- "sourceMap": "2095:6068:109:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2436:23;;;;;;;;;;-1:-1:-1;2436:23:109;;;;-1:-1:-1;;;2436:23:109;;;;;;;;;188:6:134;176:19;;;158:38;;146:2;131:18;2436:23:109;;;;;;;;3814:406;;;;;;;;;;-1:-1:-1;3814:406:109;;;;;:::i;:::-;;:::i;:::-;;7323:838;;;;;;:::i;:::-;;:::i;5700:272::-;;;;;;;;;;-1:-1:-1;5700:272:109;;;;;:::i;:::-;;:::i;2071:101:28:-;;;;;;;;;;;;;:::i;2903:340:109:-;;;;;;;;;;-1:-1:-1;2903:340:109;;;;;:::i;:::-;;:::i;1441:85:28:-;;;;;;;;;;-1:-1:-1;1513:6:28;;-1:-1:-1;;;;;1513:6:28;1441:85;;;-1:-1:-1;;;;;4621:55:134;;;4603:74;;4591:2;4576:18;1441:85:28;4457:226:134;2322:43:109;;;;;;;;;;-1:-1:-1;2322:43:109;;;;-1:-1:-1;;;;;2322:43:109;;;2220:39;;;;;;;;;;-1:-1:-1;2220:39:109;;;;-1:-1:-1;;;;;2220:39:109;;;2547:33;;;;;;;;;;-1:-1:-1;2547:33:109;;;;-1:-1:-1;;;;;2547:33:109;;;2321:198:28;;;;;;;;;;-1:-1:-1;2321:198:28;;;;;:::i;:::-;;:::i;3814:406:109:-;1334:13:28;:11;:13::i;:::-;3947:18:109::1;::::0;-1:-1:-1;;;;;3947:18:109::1;:32:::0;3926:111:::1;;;::::0;-1:-1:-1;;;3926:111:109;;5406:2:134;3926:111:109::1;::::0;::::1;5388:21:134::0;;;5425:18;;;5418:30;5484:34;5464:18;;;5457:62;5536:18;;3926:111:109::1;;;;;;;;;-1:-1:-1::0;;;;;4068:33:109;::::1;4047:116;;;::::0;-1:-1:-1;;;4047:116:109;;5767:2:134;4047:116:109::1;::::0;::::1;5749:21:134::0;5806:2;5786:18;;;5779:30;5845:34;5825:18;;;5818:62;5916:6;5896:18;;;5889:34;5940:19;;4047:116:109::1;5565:400:134::0;4047:116:109::1;4173:18;:40:::0;;-1:-1:-1;;4173:40:109::1;-1:-1:-1::0;;;;;4173:40:109;;;::::1;::::0;;;::::1;::::0;;3814:406::o;7323:838::-;7569:15;;-1:-1:-1;;;;;7569:15:109;7547:10;:38;7526:115;;;;-1:-1:-1;;;7526:115:109;;6172:2:134;7526:115:109;;;6154:21:134;6211:2;6191:18;;;6184:30;6250:32;6230:18;;;6223:60;6300:18;;7526:115:109;5970:354:134;7526:115:109;7688:9;;;7673:24;;;-1:-1:-1;;;7688:9:109;;;;7673:24;7652:112;;;;-1:-1:-1;;;7652:112:109;;6531:2:134;7652:112:109;;;6513:21:134;6570:2;6550:18;;;6543:30;6609:34;6589:18;;;6582:62;6680:11;6660:18;;;6653:39;6709:19;;7652:112:109;6329:405:134;7652:112:109;7864:18;;-1:-1:-1;;;;;7864:18:109;7830:13;-1:-1:-1;;;;;7796:86:109;;7775:188;;;;-1:-1:-1;;;7775:188:109;;6941:2:134;7775:188:109;;;6923:21:134;6980:2;6960:18;;;6953:30;7019:34;6999:18;;;6992:62;7090:25;7070:18;;;7063:53;7133:19;;7775:188:109;6739:419:134;7775:188:109;7995:14;:21;8020:1;7995:26;7974:121;;;;-1:-1:-1;;;7974:121:109;;7365:2:134;7974:121:109;;;7347:21:134;7404:2;7384:18;;;7377:30;7443:34;7423:18;;;7416:62;7514:18;7494;;;7487:46;7550:19;;7974:121:109;7163:412:134;7974:121:109;8106:17;;8136;;-1:-1:-1;;;;;8106:17:109;;;;:29;;8136:14;;8106:17;;8136;;;;:::i;:::-;;;;;;;8106:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7323:838;;;;;:::o;5700:272::-;5954:10;-1:-1:-1;;;;;5900:65:109;5938:14;-1:-1:-1;;;;;5900:65:109;;5919:9;5930:6;5900:65;;;;;;;:::i;:::-;;;;;;;;5700:272;;;:::o;2071:101:28:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;2903:340:109:-;3268:19:29;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:29;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:29;1476:19:40;:23;;;3376:66:29;;-1:-1:-1;3425:12:29;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:29;;12167:2:134;3314:201:29;;;12149:21:134;12206:2;12186:18;;;12179:30;12245:34;12225:18;;;12218:62;12316:16;12296:18;;;12289:44;12350:19;;3314:201:29;11965:410:134;3314:201:29;3525:12;:16;;-1:-1:-1;;3525:16:29;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:29;;;;;3551:65;3057:16:109::1;:14;:16::i;:::-;3084:15;:52:::0;;-1:-1:-1;;3084:52:109::1;-1:-1:-1::0;;;;;3084:52:109;;::::1;::::0;;;::::1;::::0;;;3146:17:::1;:58:::0;;;;::::1;3214:22:::0;;;;;;;;-1:-1:-1;;;3214:22:109::1;::::0;::::1;;;::::0;;3636:99:29;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:29;;;3710:14;;-1:-1:-1;12532:36:134;;3710:14:29;;12520:2:134;12505:18;3710:14:29;;;;;;;3636:99;3258:483;2903:340:109;;;:::o;2321:198:28:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:28;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:28;;12781:2:134;2401:73:28::1;::::0;::::1;12763:21:134::0;12820:2;12800:18;;;12793:30;12859:34;12839:18;;;12832:62;12930:8;12910:18;;;12903:36;12956:19;;2401:73:28::1;12579:402:134::0;2401:73:28::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;1599:130::-;1513:6;;-1:-1:-1;;;;;1513:6:28;929:10:41;1662:23:28;1654:68;;;;-1:-1:-1;;;1654:68:28;;13188:2:134;1654:68:28;;;13170:21:134;;;13207:18;;;13200:30;13266:34;13246:18;;;13239:62;13318:18;;1654:68:28;12986:356:134;2673:187:28;2765:6;;;-1:-1:-1;;;;;2781:17:28;;;-1:-1:-1;;2781:17:28;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;13549:2:134;5355:69:29;;;13531:21:134;13588:2;13568:18;;;13561:30;13627:34;13607:18;;;13600:62;-1:-1:-1;;;13678:18:134;;;13671:41;13729:19;;5355:69:29;13347:407:134;5355:69:29;1065:26:28::1;5363:13:29::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;13549:2:134;5355:69:29;;;13531:21:134;13588:2;13568:18;;;13561:30;13627:34;13607:18;;;13600:62;-1:-1:-1;;;13678:18:134;;;13671:41;13729:19;;5355:69:29;13347:407:134;5355:69:29;1176:32:28::1;929:10:41::0;1176:18:28::1;:32::i;207:196:134:-:0;275:20;;-1:-1:-1;;;;;324:54:134;;314:65;;304:93;;393:1;390;383:12;304:93;207:196;;;:::o;408:186::-;467:6;520:2;508:9;499:7;495:23;491:32;488:52;;;536:1;533;526:12;488:52;559:29;578:9;559:29;:::i;:::-;549:39;408:186;-1:-1:-1;;;408:186:134:o;599:184::-;-1:-1:-1;;;648:1:134;641:88;748:4;745:1;738:15;772:4;769:1;762:15;788:275;859:2;853:9;924:2;905:13;;-1:-1:-1;;901:27:134;889:40;;959:18;944:34;;980:22;;;941:62;938:88;;;1006:18;;:::i;:::-;1042:2;1035:22;788:275;;-1:-1:-1;788:275:134:o;1068:530::-;1110:5;1163:3;1156:4;1148:6;1144:17;1140:27;1130:55;;1181:1;1178;1171:12;1130:55;1217:6;1204:20;1243:18;1239:2;1236:26;1233:52;;;1265:18;;:::i;:::-;1309:55;1352:2;1333:13;;-1:-1:-1;;1329:27:134;1358:4;1325:38;1309:55;:::i;:::-;1389:2;1380:7;1373:19;1435:3;1428:4;1423:2;1415:6;1411:15;1407:26;1404:35;1401:55;;;1452:1;1449;1442:12;1401:55;1517:2;1510:4;1502:6;1498:17;1491:4;1482:7;1478:18;1465:55;1565:1;1540:16;;;1558:4;1536:27;1529:38;;;;1544:7;1068:530;-1:-1:-1;;;1068:530:134:o;1603:159::-;1670:20;;1730:6;1719:18;;1709:29;;1699:57;;1752:1;1749;1742:12;1767:1573;1904:6;1912;1920;1928;1936;1989:3;1977:9;1968:7;1964:23;1960:33;1957:53;;;2006:1;2003;1996:12;1957:53;2046:9;2033:23;2075:18;2116:2;2108:6;2105:14;2102:34;;;2132:1;2129;2122:12;2102:34;2155:49;2196:7;2187:6;2176:9;2172:22;2155:49;:::i;:::-;2145:59;;2223:2;2213:12;;2278:2;2267:9;2263:18;2250:32;2307:2;2297:8;2294:16;2291:36;;;2323:1;2320;2313:12;2291:36;2346:24;;2401:4;2393:13;;2389:27;-1:-1:-1;2379:55:134;;2430:1;2427;2420:12;2379:55;2466:2;2453:16;2488:2;2484;2481:10;2478:36;;;2494:18;;:::i;:::-;2540:2;2537:1;2533:10;2563:28;2587:2;2583;2579:11;2563:28;:::i;:::-;2625:15;;;2695:11;;;2691:20;;;2656:12;;;;2723:19;;;2720:39;;;2755:1;2752;2745:12;2720:39;2787:2;2783;2779:11;2768:22;;2799:352;2815:6;2810:3;2807:15;2799:352;;;2901:3;2888:17;2937:2;2924:11;2921:19;2918:109;;;2981:1;3010:2;3006;2999:14;2918:109;3052:56;3100:7;3095:2;3081:11;3077:2;3073:20;3069:29;3052:56;:::i;:::-;3040:69;;-1:-1:-1;2832:12:134;;;;3129;;;;2799:352;;;3170:5;3160:15;;;;;;;;;3222:2;3211:9;3207:18;3194:32;3184:42;;3245:37;3278:2;3267:9;3263:18;3245:37;:::i;:::-;1767:1573;;;;-1:-1:-1;1767:1573:134;;3329:3;3314:19;3301:33;;1767:1573;-1:-1:-1;;1767:1573:134:o;3345:638::-;3494:6;3502;3510;3554:9;3545:7;3541:23;3584:3;3580:2;3576:12;3573:32;;;3601:1;3598;3591:12;3573:32;3641:9;3628:23;3674:18;3666:6;3663:30;3660:50;;;3706:1;3703;3696:12;3660:50;3729:22;;3785:3;3767:16;;;3763:26;3760:46;;;3802:1;3799;3792:12;3760:46;3825:2;-1:-1:-1;3861:3:134;-1:-1:-1;;3843:16:134;;3839:26;3836:46;;;3878:1;3875;3868:12;3836:46;;3916:2;3905:9;3901:18;3891:28;;3938:39;3972:3;3961:9;3957:19;3938:39;:::i;:::-;3928:49;;3345:638;;;;;:::o;3988:332::-;4064:6;4072;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4172:29;4191:9;4172:29;:::i;:::-;4162:39;;4220:38;4254:2;4243:9;4239:18;4220:38;:::i;:::-;4210:48;;4277:37;4310:2;4299:9;4295:18;4277:37;:::i;7580:184::-;-1:-1:-1;;;7629:1:134;7622:88;7729:4;7726:1;7719:15;7753:4;7750:1;7743:15;7769:546;7879:4;7908:2;7937;7926:9;7919:21;7969:6;7963:13;8012:6;8007:2;7996:9;7992:18;7985:34;8037:1;8047:140;8061:6;8058:1;8055:13;8047:140;;;8156:14;;;8152:23;;8146:30;8122:17;;;8141:2;8118:26;8111:66;8076:10;;8047:140;;;8051:3;8236:1;8231:2;8222:6;8211:9;8207:22;8203:31;8196:42;8306:2;8299;8295:7;8290:2;8282:6;8278:15;8274:29;8263:9;8259:45;8255:54;8247:62;;;;7769:546;;;;:::o;8320:219::-;8387:20;;8447:66;8436:78;;8426:89;;8416:117;;8529:1;8526;8519:12;8699:500;8757:5;8764:6;8824:3;8811:17;8910:2;8906:7;8895:8;8879:14;8875:29;8871:43;8851:18;8847:68;8837:96;;8929:1;8926;8919:12;8837:96;8957:33;;9061:4;9048:18;;;-1:-1:-1;9009:21:134;;-1:-1:-1;9089:18:134;9078:30;;9075:50;;;9121:1;9118;9111:12;9075:50;9168:6;9152:14;9148:27;9141:5;9137:39;9134:59;;;9189:1;9186;9179:12;9134:59;8699:500;;;;;:::o;9204:266::-;9292:6;9287:3;9280:19;9344:6;9337:5;9330:4;9325:3;9321:14;9308:43;-1:-1:-1;9396:1:134;9371:16;;;9389:4;9367:27;;;9360:38;;;;9452:2;9431:15;;;-1:-1:-1;;9427:29:134;9418:39;;;9414:50;;9204:266::o;9630:185::-;9698:20;;-1:-1:-1;;9747:43:134;;9737:54;;9727:82;;9805:1;9802;9795:12;9941:2019;10238:3;10227:9;10220:22;10201:4;10261:66;10395:2;10368:25;10386:6;10368:25;:::i;:::-;10364:34;10358:3;10347:9;10343:19;10336:63;10442:57;10493:4;10485:6;10481:17;10473:6;10442:57;:::i;:::-;10536:4;10530:3;10519:9;10515:19;10508:33;10564:74;10633:3;10622:9;10618:19;10604:12;10590;10564:74;:::i;:::-;10550:88;;;10685:57;10736:4;10728:6;10724:17;10716:6;10685:57;:::i;:::-;10783:22;;;-1:-1:-1;;10779:37:134;10773:3;10758:19;;10751:66;10840:65;10787:6;10882:14;10866;10840:65;:::i;:::-;10826:79;;;;10984:2;10946:36;10976:4;10968:6;10964:17;10946:36;:::i;:::-;10942:45;10936:3;10921:19;;10914:74;11005:6;-1:-1:-1;;11033:20:134;;11083:10;11072:22;;11113:13;;;11103:41;;11140:1;11137;11130:12;11103:41;11182:2;11175:4;11164:9;11160:20;11153:32;;;11234:4;11226:6;11222:17;11209:31;11284:66;11275:7;11271:80;11262:7;11259:93;11249:121;;11366:1;11363;11356:12;11249:121;9551:66;9540:78;;11421:4;11406:20;;9528:91;11379:48;11458:37;11489:4;11481:6;11477:17;11458:37;:::i;:::-;-1:-1:-1;;9886:43:134;;11554:4;11539:20;;9874:56;11504;11591:37;11622:4;11614:6;11610:17;11591:37;:::i;:::-;-1:-1:-1;;9886:43:134;;11687:4;11672:20;;9874:56;11637;11724:36;11754:4;11746:6;11742:17;11724:36;:::i;:::-;8620:66;8609:78;;11818:3;11803:19;;8597:91;11769:54;11854:36;11885:3;11877:6;11873:16;11854:36;:::i;:::-;-1:-1:-1;;;;;4391:54:134;;11949:3;11934:19;;4379:67;11899:55;9941:2019;;;;;:::o"
10858
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7EBEF529 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xDA25B725 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xDA25B725 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0xE1551FC9 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7EBEF529 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xAA82E33B EQ PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x529DCA32 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x529DCA32 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x642DC033 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12622E5B EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x31446C46 EQ PUSH2 0xFB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0xE3 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0xADD JUMP JUMPDEST PUSH2 0x237 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11B PUSH2 0x12B CALLDATASIZE PUSH1 0x4 PUSH2 0xBC8 JUMP JUMPDEST PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xCD1 JUMP JUMPDEST PUSH2 0x5AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x5FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x180 CALLDATASIZE PUSH1 0x4 PUSH2 0xD41 JUMP JUMPDEST PUSH2 0x611 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x66 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x65 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x67 SLOAD PUSH2 0x19F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH2 0x232 CALLDATASIZE PUSH1 0x4 PUSH2 0xADD JUMP JUMPDEST PUSH2 0x896 JUMP JUMPDEST PUSH2 0x23F PUSH2 0x926 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x29D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F7220616C726561647920736574 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x318 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4C3120426974636F696E204465706F7369746F72206D757374206E6F74206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2030783000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F7420576F726D686F6C652052656C617965720000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD PUSH2 0xFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV AND EQ PUSH2 0x426 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F7572636520636861696E206973206E6F7420746865206578706563746564 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x204C3120636861696E0000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536F757263652061646472657373206973206E6F742074686520657870656374 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6564204C3120426974636F696E206465706F7369746F72000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 EQ PUSH2 0x526 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45787065637465642031206164646974696F6E616C20564141206B657920666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7220746F6B656E207472616E7366657200000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x66 SLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5D21A596 SWAP1 DUP7 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x54E JUMPI PUSH2 0x54E PUSH2 0xD7B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x572 SWAP2 SWAP1 PUSH2 0xD91 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x69A2A6D267E87F99180657174CA85389598D457BA949435EE4940F621BB849CF DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x5F0 SWAP3 SWAP2 SWAP1 PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x605 PUSH2 0x926 JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 PUSH2 0x980 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x631 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x64B JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x64B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x6BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x647920696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x6E0 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x6E8 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x764 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x576F726D686F6C6552656C6179657220616464726573732063616E6E6F742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x65207A65726F0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x7E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C32576F726D686F6C654761746577617920616464726573732063616E6E6F74 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x206265207A65726F000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x66 DUP1 SLOAD SWAP2 DUP6 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL PUSH2 0xFFFF DUP6 AND MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x89E PUSH2 0x926 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x923 DUP2 PUSH2 0x980 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x60F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x294 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xA4A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xAB8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x294 JUMP JUMPDEST PUSH2 0x60F CALLER PUSH2 0x980 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF8 DUP3 PUSH2 0xAC1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xB3E JUMPI PUSH2 0xB3E PUSH2 0xAFF JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB71 JUMPI PUSH2 0xB71 PUSH2 0xAFF JUMP JUMPDEST PUSH2 0xB84 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xB15 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xB99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xBE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC04 DUP10 DUP4 DUP11 ADD PUSH2 0xB46 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 SWAP2 POP DUP2 DUP9 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 ADD PUSH1 0x1F DUP2 ADD DUP11 SGT PUSH2 0xC2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xC3E JUMPI PUSH2 0xC3E PUSH2 0xAFF JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH2 0xC4D DUP6 DUP3 ADD PUSH2 0xB15 JUMP JUMPDEST SWAP2 DUP3 MSTORE DUP3 DUP2 ADD DUP6 ADD SWAP2 DUP6 DUP2 ADD SWAP1 DUP14 DUP5 GT ISZERO PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 DUP6 ADD SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0xCA3 JUMPI DUP3 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0xC85 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC93 DUP16 DUP10 DUP4 DUP10 ADD ADD PUSH2 0xB46 JUMP JUMPDEST DUP4 MSTORE POP SWAP2 DUP7 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0xC6D JUMP JUMPDEST DUP1 SWAP11 POP POP POP POP POP POP POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0xCC0 PUSH1 0x60 DUP8 ADD PUSH2 0xBB6 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0xCE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 ADD PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0xD11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 POP PUSH1 0xC0 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0xD25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH2 0xD38 PUSH1 0xE0 DUP6 ADD PUSH2 0xAC1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD5F DUP5 PUSH2 0xAC1 JUMP JUMPDEST SWAP3 POP PUSH2 0xD6D PUSH1 0x20 DUP6 ADD PUSH2 0xAC1 JUMP JUMPDEST SWAP2 POP PUSH2 0xD38 PUSH1 0x40 DUP6 ADD PUSH2 0xBB6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDBE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xDA2 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0xE26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0xE55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND DUP2 EQ PUSH2 0xAD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xE0 DUP2 MSTORE PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 PUSH2 0xED3 DUP7 PUSH2 0xDDF JUMP JUMPDEST AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0xEE6 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0xE0F JUMP JUMPDEST PUSH1 0x80 PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0xEFD PUSH2 0x160 DUP7 ADD DUP3 DUP5 PUSH2 0xE5C JUMP JUMPDEST SWAP2 POP POP PUSH2 0xF0D PUSH1 0x40 DUP8 ADD DUP8 PUSH2 0xE0F JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xDF NOT ADD PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0xF25 DUP4 DUP3 DUP5 PUSH2 0xE5C JUMP JUMPDEST SWAP3 POP POP POP DUP2 PUSH2 0xF36 PUSH1 0x60 DUP9 ADD PUSH2 0xDDF JUMP JUMPDEST AND PUSH2 0x140 DUP6 ADD MSTORE SWAP2 POP POP DUP3 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 DUP3 EQ PUSH2 0xF55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP6 ADD MSTORE POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xF90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH2 0xFC5 PUSH1 0x40 DUP5 ADD PUSH2 0xE85 JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH2 0xFE7 PUSH1 0x60 DUP5 ADD PUSH2 0xE85 JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH2 0x1009 PUSH1 0x80 DUP5 ADD PUSH2 0xDDF JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH2 0x103E PUSH1 0xA0 DUP5 ADD PUSH2 0xAC1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 0xD8 0x1F PUSH30 0x1BBC764B66D23B7C75909404CEE086841AE0060C8FDED3DD05814B6D6473 PUSH16 0x6C634300081100330000000000000000 ",
10859
+ "sourceMap": "2094:6323:109:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:23;;;;;;;;;;-1:-1:-1;2435:23:109;;;;-1:-1:-1;;;2435:23:109;;;;;;;;;188:6:134;176:19;;;158:38;;146:2;131:18;2435:23:109;;;;;;;;4068:406;;;;;;;;;;-1:-1:-1;4068:406:109;;;;;:::i;:::-;;:::i;:::-;;7577:838;;;;;;:::i;:::-;;:::i;5954:272::-;;;;;;;;;;-1:-1:-1;5954:272:109;;;;;:::i;:::-;;:::i;2071:101:28:-;;;;;;;;;;;;;:::i;2902:595:109:-;;;;;;;;;;-1:-1:-1;2902:595:109;;;;;:::i;:::-;;:::i;1441:85:28:-;;;;;;;;;;-1:-1:-1;1513:6:28;;-1:-1:-1;;;;;1513:6:28;1441:85;;;-1:-1:-1;;;;;4621:55:134;;;4603:74;;4591:2;4576:18;1441:85:28;4457:226:134;2321:43:109;;;;;;;;;;-1:-1:-1;2321:43:109;;;;-1:-1:-1;;;;;2321:43:109;;;2219:39;;;;;;;;;;-1:-1:-1;2219:39:109;;;;-1:-1:-1;;;;;2219:39:109;;;2546:33;;;;;;;;;;-1:-1:-1;2546:33:109;;;;-1:-1:-1;;;;;2546:33:109;;;2321:198:28;;;;;;;;;;-1:-1:-1;2321:198:28;;;;;:::i;:::-;;:::i;4068:406:109:-;1334:13:28;:11;:13::i;:::-;4201:18:109::1;::::0;-1:-1:-1;;;;;4201:18:109::1;:32:::0;4180:111:::1;;;::::0;-1:-1:-1;;;4180:111:109;;5406:2:134;4180:111:109::1;::::0;::::1;5388:21:134::0;;;5425:18;;;5418:30;5484:34;5464:18;;;5457:62;5536:18;;4180:111:109::1;;;;;;;;;-1:-1:-1::0;;;;;4322:33:109;::::1;4301:116;;;::::0;-1:-1:-1;;;4301:116:109;;5767:2:134;4301:116:109::1;::::0;::::1;5749:21:134::0;5806:2;5786:18;;;5779:30;5845:34;5825:18;;;5818:62;5916:6;5896:18;;;5889:34;5940:19;;4301:116:109::1;5565:400:134::0;4301:116:109::1;4427:18;:40:::0;;-1:-1:-1;;4427:40:109::1;-1:-1:-1::0;;;;;4427:40:109;;;::::1;::::0;;;::::1;::::0;;4068:406::o;7577:838::-;7823:15;;-1:-1:-1;;;;;7823:15:109;7801:10;:38;7780:115;;;;-1:-1:-1;;;7780:115:109;;6172:2:134;7780:115:109;;;6154:21:134;6211:2;6191:18;;;6184:30;6250:32;6230:18;;;6223:60;6300:18;;7780:115:109;5970:354:134;7780:115:109;7942:9;;;7927:24;;;-1:-1:-1;;;7942:9:109;;;;7927:24;7906:112;;;;-1:-1:-1;;;7906:112:109;;6531:2:134;7906:112:109;;;6513:21:134;6570:2;6550:18;;;6543:30;6609:34;6589:18;;;6582:62;6680:11;6660:18;;;6653:39;6709:19;;7906:112:109;6329:405:134;7906:112:109;8118:18;;-1:-1:-1;;;;;8118:18:109;8084:13;-1:-1:-1;;;;;8050:86:109;;8029:188;;;;-1:-1:-1;;;8029:188:109;;6941:2:134;8029:188:109;;;6923:21:134;6980:2;6960:18;;;6953:30;7019:34;6999:18;;;6992:62;7090:25;7070:18;;;7063:53;7133:19;;8029:188:109;6739:419:134;8029:188:109;8249:14;:21;8274:1;8249:26;8228:121;;;;-1:-1:-1;;;8228:121:109;;7365:2:134;8228:121:109;;;7347:21:134;7404:2;7384:18;;;7377:30;7443:34;7423:18;;;7416:62;7514:18;7494;;;7487:46;7550:19;;8228:121:109;7163:412:134;8228:121:109;8360:17;;8390;;-1:-1:-1;;;;;8360:17:109;;;;:29;;8390:14;;8360:17;;8390;;;;:::i;:::-;;;;;;;8360:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:838;;;;;:::o;5954:272::-;6208:10;-1:-1:-1;;;;;6154:65:109;6192:14;-1:-1:-1;;;;;6154:65:109;;6173:9;6184:6;6154:65;;;;;;;:::i;:::-;;;;;;;;5954:272;;;:::o;2071:101:28:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;2902:595:109:-;3268:19:29;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:29;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:29;1476:19:40;:23;;;3376:66:29;;-1:-1:-1;3425:12:29;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:29;;12167:2:134;3314:201:29;;;12149:21:134;12206:2;12186:18;;;12179:30;12245:34;12225:18;;;12218:62;12316:16;12296:18;;;12289:44;12350:19;;3314:201:29;11965:410:134;3314:201:29;3525:12;:16;;-1:-1:-1;;3525:16:29;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:29;;;;;3551:65;3056:16:109::1;:14;:16::i;:::-;-1:-1:-1::0;;;;;3104:30:109;::::1;3083:115;;;::::0;-1:-1:-1;;;3083:115:109;;12582:2:134;3083:115:109::1;::::0;::::1;12564:21:134::0;12621:2;12601:18;;;12594:30;12660:34;12640:18;;;12633:62;12731:8;12711:18;;;12704:36;12757:19;;3083:115:109::1;12380:402:134::0;3083:115:109::1;-1:-1:-1::0;;;;;3229:32:109;::::1;3208:119;;;::::0;-1:-1:-1;;;3208:119:109;;12989:2:134;3208:119:109::1;::::0;::::1;12971:21:134::0;13028:2;13008:18;;;13001:30;13067:34;13047:18;;;13040:62;13138:10;13118:18;;;13111:38;13166:19;;3208:119:109::1;12787:404:134::0;3208:119:109::1;3338:15;:52:::0;;-1:-1:-1;;3338:52:109::1;-1:-1:-1::0;;;;;3338:52:109;;::::1;::::0;;;::::1;::::0;;;3400:17:::1;:58:::0;;;;::::1;3468:22:::0;;;;;;;;-1:-1:-1;;;3468:22:109::1;::::0;::::1;;;::::0;;3636:99:29;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:29;;;3710:14;;-1:-1:-1;13348:36:134;;3710:14:29;;13336:2:134;13321:18;3710:14:29;;;;;;;3636:99;3258:483;2902:595:109;;;:::o;2321:198:28:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:28;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:28;;13597:2:134;2401:73:28::1;::::0;::::1;13579:21:134::0;13636:2;13616:18;;;13609:30;13675:34;13655:18;;;13648:62;13746:8;13726:18;;;13719:36;13772:19;;2401:73:28::1;13395:402:134::0;2401:73:28::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;1599:130::-;1513:6;;-1:-1:-1;;;;;1513:6:28;929:10:41;1662:23:28;1654:68;;;;-1:-1:-1;;;1654:68:28;;14004:2:134;1654:68:28;;;13986:21:134;;;14023:18;;;14016:30;14082:34;14062:18;;;14055:62;14134:18;;1654:68:28;13802:356:134;2673:187:28;2765:6;;;-1:-1:-1;;;;;2781:17:28;;;-1:-1:-1;;2781:17:28;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;14365:2:134;5355:69:29;;;14347:21:134;14404:2;14384:18;;;14377:30;14443:34;14423:18;;;14416:62;-1:-1:-1;;;14494:18:134;;;14487:41;14545:19;;5355:69:29;14163:407:134;5355:69:29;1065:26:28::1;5363:13:29::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;14365:2:134;5355:69:29;;;14347:21:134;14404:2;14384:18;;;14377:30;14443:34;14423:18;;;14416:62;-1:-1:-1;;;14494:18:134;;;14487:41;14545:19;;5355:69:29;14163:407:134;5355:69:29;1176:32:28::1;929:10:41::0;1176:18:28::1;:32::i;207:196:134:-:0;275:20;;-1:-1:-1;;;;;324:54:134;;314:65;;304:93;;393:1;390;383:12;304:93;207:196;;;:::o;408:186::-;467:6;520:2;508:9;499:7;495:23;491:32;488:52;;;536:1;533;526:12;488:52;559:29;578:9;559:29;:::i;:::-;549:39;408:186;-1:-1:-1;;;408:186:134:o;599:184::-;-1:-1:-1;;;648:1:134;641:88;748:4;745:1;738:15;772:4;769:1;762:15;788:275;859:2;853:9;924:2;905:13;;-1:-1:-1;;901:27:134;889:40;;959:18;944:34;;980:22;;;941:62;938:88;;;1006:18;;:::i;:::-;1042:2;1035:22;788:275;;-1:-1:-1;788:275:134:o;1068:530::-;1110:5;1163:3;1156:4;1148:6;1144:17;1140:27;1130:55;;1181:1;1178;1171:12;1130:55;1217:6;1204:20;1243:18;1239:2;1236:26;1233:52;;;1265:18;;:::i;:::-;1309:55;1352:2;1333:13;;-1:-1:-1;;1329:27:134;1358:4;1325:38;1309:55;:::i;:::-;1389:2;1380:7;1373:19;1435:3;1428:4;1423:2;1415:6;1411:15;1407:26;1404:35;1401:55;;;1452:1;1449;1442:12;1401:55;1517:2;1510:4;1502:6;1498:17;1491:4;1482:7;1478:18;1465:55;1565:1;1540:16;;;1558:4;1536:27;1529:38;;;;1544:7;1068:530;-1:-1:-1;;;1068:530:134:o;1603:159::-;1670:20;;1730:6;1719:18;;1709:29;;1699:57;;1752:1;1749;1742:12;1767:1573;1904:6;1912;1920;1928;1936;1989:3;1977:9;1968:7;1964:23;1960:33;1957:53;;;2006:1;2003;1996:12;1957:53;2046:9;2033:23;2075:18;2116:2;2108:6;2105:14;2102:34;;;2132:1;2129;2122:12;2102:34;2155:49;2196:7;2187:6;2176:9;2172:22;2155:49;:::i;:::-;2145:59;;2223:2;2213:12;;2278:2;2267:9;2263:18;2250:32;2307:2;2297:8;2294:16;2291:36;;;2323:1;2320;2313:12;2291:36;2346:24;;2401:4;2393:13;;2389:27;-1:-1:-1;2379:55:134;;2430:1;2427;2420:12;2379:55;2466:2;2453:16;2488:2;2484;2481:10;2478:36;;;2494:18;;:::i;:::-;2540:2;2537:1;2533:10;2563:28;2587:2;2583;2579:11;2563:28;:::i;:::-;2625:15;;;2695:11;;;2691:20;;;2656:12;;;;2723:19;;;2720:39;;;2755:1;2752;2745:12;2720:39;2787:2;2783;2779:11;2768:22;;2799:352;2815:6;2810:3;2807:15;2799:352;;;2901:3;2888:17;2937:2;2924:11;2921:19;2918:109;;;2981:1;3010:2;3006;2999:14;2918:109;3052:56;3100:7;3095:2;3081:11;3077:2;3073:20;3069:29;3052:56;:::i;:::-;3040:69;;-1:-1:-1;2832:12:134;;;;3129;;;;2799:352;;;3170:5;3160:15;;;;;;;;;3222:2;3211:9;3207:18;3194:32;3184:42;;3245:37;3278:2;3267:9;3263:18;3245:37;:::i;:::-;1767:1573;;;;-1:-1:-1;1767:1573:134;;3329:3;3314:19;3301:33;;1767:1573;-1:-1:-1;;1767:1573:134:o;3345:638::-;3494:6;3502;3510;3554:9;3545:7;3541:23;3584:3;3580:2;3576:12;3573:32;;;3601:1;3598;3591:12;3573:32;3641:9;3628:23;3674:18;3666:6;3663:30;3660:50;;;3706:1;3703;3696:12;3660:50;3729:22;;3785:3;3767:16;;;3763:26;3760:46;;;3802:1;3799;3792:12;3760:46;3825:2;-1:-1:-1;3861:3:134;-1:-1:-1;;3843:16:134;;3839:26;3836:46;;;3878:1;3875;3868:12;3836:46;;3916:2;3905:9;3901:18;3891:28;;3938:39;3972:3;3961:9;3957:19;3938:39;:::i;:::-;3928:49;;3345:638;;;;;:::o;3988:332::-;4064:6;4072;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4172:29;4191:9;4172:29;:::i;:::-;4162:39;;4220:38;4254:2;4243:9;4239:18;4220:38;:::i;:::-;4210:48;;4277:37;4310:2;4299:9;4295:18;4277:37;:::i;7580:184::-;-1:-1:-1;;;7629:1:134;7622:88;7729:4;7726:1;7719:15;7753:4;7750:1;7743:15;7769:546;7879:4;7908:2;7937;7926:9;7919:21;7969:6;7963:13;8012:6;8007:2;7996:9;7992:18;7985:34;8037:1;8047:140;8061:6;8058:1;8055:13;8047:140;;;8156:14;;;8152:23;;8146:30;8122:17;;;8141:2;8118:26;8111:66;8076:10;;8047:140;;;8051:3;8236:1;8231:2;8222:6;8211:9;8207:22;8203:31;8196:42;8306:2;8299;8295:7;8290:2;8282:6;8278:15;8274:29;8263:9;8259:45;8255:54;8247:62;;;;7769:546;;;;:::o;8320:219::-;8387:20;;8447:66;8436:78;;8426:89;;8416:117;;8529:1;8526;8519:12;8699:500;8757:5;8764:6;8824:3;8811:17;8910:2;8906:7;8895:8;8879:14;8875:29;8871:43;8851:18;8847:68;8837:96;;8929:1;8926;8919:12;8837:96;8957:33;;9061:4;9048:18;;;-1:-1:-1;9009:21:134;;-1:-1:-1;9089:18:134;9078:30;;9075:50;;;9121:1;9118;9111:12;9075:50;9168:6;9152:14;9148:27;9141:5;9137:39;9134:59;;;9189:1;9186;9179:12;9134:59;8699:500;;;;;:::o;9204:266::-;9292:6;9287:3;9280:19;9344:6;9337:5;9330:4;9325:3;9321:14;9308:43;-1:-1:-1;9396:1:134;9371:16;;;9389:4;9367:27;;;9360:38;;;;9452:2;9431:15;;;-1:-1:-1;;9427:29:134;9418:39;;;9414:50;;9204:266::o;9630:185::-;9698:20;;-1:-1:-1;;9747:43:134;;9737:54;;9727:82;;9805:1;9802;9795:12;9941:2019;10238:3;10227:9;10220:22;10201:4;10261:66;10395:2;10368:25;10386:6;10368:25;:::i;:::-;10364:34;10358:3;10347:9;10343:19;10336:63;10442:57;10493:4;10485:6;10481:17;10473:6;10442:57;:::i;:::-;10536:4;10530:3;10519:9;10515:19;10508:33;10564:74;10633:3;10622:9;10618:19;10604:12;10590;10564:74;:::i;:::-;10550:88;;;10685:57;10736:4;10728:6;10724:17;10716:6;10685:57;:::i;:::-;10783:22;;;-1:-1:-1;;10779:37:134;10773:3;10758:19;;10751:66;10840:65;10787:6;10882:14;10866;10840:65;:::i;:::-;10826:79;;;;10984:2;10946:36;10976:4;10968:6;10964:17;10946:36;:::i;:::-;10942:45;10936:3;10921:19;;10914:74;11005:6;-1:-1:-1;;11033:20:134;;11083:10;11072:22;;11113:13;;;11103:41;;11140:1;11137;11130:12;11103:41;11182:2;11175:4;11164:9;11160:20;11153:32;;;11234:4;11226:6;11222:17;11209:31;11284:66;11275:7;11271:80;11262:7;11259:93;11249:121;;11366:1;11363;11356:12;11249:121;9551:66;9540:78;;11421:4;11406:20;;9528:91;11379:48;11458:37;11489:4;11481:6;11477:17;11458:37;:::i;:::-;-1:-1:-1;;9886:43:134;;11554:4;11539:20;;9874:56;11504;11591:37;11622:4;11614:6;11610:17;11591:37;:::i;:::-;-1:-1:-1;;9886:43:134;;11687:4;11672:20;;9874:56;11637;11724:36;11754:4;11746:6;11742:17;11724:36;:::i;:::-;8620:66;8609:78;;11818:3;11803:19;;8597:91;11769:54;11854:36;11885:3;11877:6;11873:16;11854:36;:::i;:::-;-1:-1:-1;;;;;4391:54:134;;11949:3;11934:19;;4379:67;11899:55;9941:2019;;;;;:::o"
10398
10860
  },
10399
10861
  "gasEstimates": {
10400
10862
  "creation": {
10401
- "codeDepositCost": "797400",
10402
- "executionCost": "30423",
10403
- "totalCost": "827823"
10863
+ "codeDepositCost": "847000",
10864
+ "executionCost": "30475",
10865
+ "totalCost": "877475"
10404
10866
  },
10405
10867
  "external": {
10406
10868
  "attachL1BitcoinDepositor(address)": "28942",
@@ -10430,7 +10892,7 @@
10430
10892
  "wormholeRelayer()": "da25b725"
10431
10893
  }
10432
10894
  },
10433
- "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"inputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"outputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"struct IBridgeTypes.BitcoinTxInfo\",\"name\":\"fundingTx\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fundingOutputIndex\",\"type\":\"uint32\"},{\"internalType\":\"bytes8\",\"name\":\"blindingFactor\",\"type\":\"bytes8\"},{\"internalType\":\"bytes20\",\"name\":\"walletPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes20\",\"name\":\"refundPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes4\",\"name\":\"refundLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct IBridgeTypes.DepositRevealInfo\",\"name\":\"reveal\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2DepositOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"}],\"name\":\"DepositInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1BitcoinDepositor\",\"type\":\"address\"}],\"name\":\"attachL1BitcoinDepositor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wormholeRelayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2WormholeGateway\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_l1ChainId\",\"type\":\"uint16\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"inputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"outputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"}],\"internalType\":\"struct IBridgeTypes.BitcoinTxInfo\",\"name\":\"fundingTx\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fundingOutputIndex\",\"type\":\"uint32\"},{\"internalType\":\"bytes8\",\"name\":\"blindingFactor\",\"type\":\"bytes8\"},{\"internalType\":\"bytes20\",\"name\":\"walletPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes20\",\"name\":\"refundPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes4\",\"name\":\"refundLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"internalType\":\"struct IBridgeTypes.DepositRevealInfo\",\"name\":\"reveal\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"l2DepositOwner\",\"type\":\"address\"}],\"name\":\"initializeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BitcoinDepositor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ChainId\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2WormholeGateway\",\"outputs\":[{\"internalType\":\"contract IL2WormholeGateway\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"additionalVaas\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"sourceAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"sourceChain\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"receiveWormholeMessages\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wormholeRelayer\",\"outputs\":[{\"internalType\":\"contract IWormholeRelayer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"attachL1BitcoinDepositor(address)\":{\"details\":\"Requirements: - Can be called only by the contract owner, - The address must not be set yet, - The new address must not be 0x0.\",\"params\":{\"_l1BitcoinDepositor\":\"Address of the `L1BitcoinDepositor` contract.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initializeDeposit((bytes4,bytes,bytes,bytes4),(uint32,bytes8,bytes20,bytes20,bytes4,address),address)\":{\"details\":\"The alternative approach of using Wormhole Relayer to send the deposit data to L1 was considered. However, it turned out to be too expensive. For example, relying deposit data from Base L2 to Ethereum L1 costs around ~0.045 ETH (~170 USD at the moment of writing). Moreover, the next iteration of the direct bridging mechanism assumes that no L2 transaction will be required to initialize the deposit and the relayer should obtain the deposit data off-chain. There is a high chance this function will be removed then. That said, there was no sense to explore another cross-chain messaging solutions. Relying on simple on-chain event and custom off-chain relayer seems to be the most reasonable way to go. It also aligns with the future direction of the direct bridging mechanism.\",\"params\":{\"fundingTx\":\"Bitcoin funding transaction data.\",\"l2DepositOwner\":\"Address of the L2 deposit owner.\",\"reveal\":\"Deposit reveal data.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"receiveWormholeMessages(bytes,bytes[],bytes32,uint16,bytes32)\":{\"details\":\"Requirements: - Can be called only by the Wormhole Relayer contract, - The source chain must be the expected L1 chain, - The source address must be the corresponding `L1BitcoinDepositor` contract, - The message must carry exactly 1 additional VAA key representing the token transfer.\",\"params\":{\"additionalVaas\":\"Additional VAAs that are part of the Wormhole message.\",\"sourceAddress\":\"Address of the source of the message (in Wormhole format).\",\"sourceChain\":\"Wormhole chain ID of the source chain.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"L2BitcoinDepositor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attachL1BitcoinDepositor(address)\":{\"notice\":\"Sets the address of the `L1BitcoinDepositor` contract on the corresponding L1 chain. This function solves the chicken-and-egg problem of setting the `L1BitcoinDepositor` contract address on the `L2BitcoinDepositor` contract and vice versa.\"},\"initializeDeposit((bytes4,bytes,bytes,bytes4),(uint32,bytes8,bytes20,bytes20,bytes4,address),address)\":{\"notice\":\"Initializes the deposit process on L2 by emitting an event containing the deposit data (funding transaction and components of the P2(W)SH deposit address). The event is supposed to be picked up by the relayer and used to initialize the deposit on L1 through the `L1BitcoinDepositor` contract.\"},\"l1BitcoinDepositor()\":{\"notice\":\"tBTC `L1BitcoinDepositor` contract on the corresponding L1 chain.\"},\"l1ChainId()\":{\"notice\":\"Wormhole chain ID of the corresponding L1 chain.\"},\"l2WormholeGateway()\":{\"notice\":\"tBTC `L2WormholeGateway` contract on L2.\"},\"receiveWormholeMessages(bytes,bytes[],bytes32,uint16,bytes32)\":{\"notice\":\"Receives Wormhole messages originating from the corresponding `L1BitcoinDepositor` contract that lives on the L1 chain. Messages are issued upon deposit finalization on L1 and are supposed to carry the VAA of the Wormhole token transfer of ERC20 L1 TBTC to the L2 chain. This contract performs some basic checks and forwards the VAA to the `L2WormholeGateway` contract that is authorized to withdraw the Wormhole-wrapped L2 TBTC from the Wormhole Token Bridge (representing the ERC20 TBTC locked on L1) and use it to mint the canonical L2 TBTC for the deposit owner.\"},\"wormholeRelayer()\":{\"notice\":\"`WormholeRelayer` contract on L2.\"}},\"notice\":\"This contract is part of the direct bridging mechanism allowing users to obtain ERC20 TBTC on supported L2 chains, without the need to interact with the L1 tBTC ledger chain where minting occurs. `L2BitcoinDepositor` is deployed on the L2 chain and interacts with their L1 counterpart, the `L1BitcoinDepositor`, deployed on the L1 tBTC ledger chain. Each `L1BitcoinDepositor` & `L2BitcoinDepositor` pair is responsible for a specific L2 chain. Please consult the `L1BitcoinDepositor` docstring for an outline of the direct bridging mechanism\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/l2/L2BitcoinDepositor.sol\":\"L2BitcoinDepositor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"contracts/integrator/IBridge.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\n\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n\\npragma solidity ^0.8.0;\\n\\n/// @notice Namespace which groups all types relevant to the IBridge interface.\\n/// @dev This is a mirror of the real types used in the Bridge contract.\\n/// This way, the `integrator` subpackage does not need to import\\n/// anything from the `bridge` subpackage and explicitly depend on it.\\n/// This simplifies the dependency graph for integrators.\\nlibrary IBridgeTypes {\\n /// @dev See bridge/BitcoinTx.sol#Info\\n struct BitcoinTxInfo {\\n bytes4 version;\\n bytes inputVector;\\n bytes outputVector;\\n bytes4 locktime;\\n }\\n\\n /// @dev See bridge/Deposit.sol#DepositRevealInfo\\n struct DepositRevealInfo {\\n uint32 fundingOutputIndex;\\n bytes8 blindingFactor;\\n bytes20 walletPubKeyHash;\\n bytes20 refundPubKeyHash;\\n bytes4 refundLocktime;\\n address vault;\\n }\\n\\n /// @dev See bridge/Deposit.sol#DepositRequest\\n struct DepositRequest {\\n address depositor;\\n uint64 amount;\\n uint32 revealedAt;\\n address vault;\\n uint64 treasuryFee;\\n uint32 sweptAt;\\n bytes32 extraData;\\n }\\n}\\n\\n/// @notice Interface of the Bridge contract.\\n/// @dev See bridge/Bridge.sol\\ninterface IBridge {\\n /// @dev See {Bridge#revealDepositWithExtraData}\\n function revealDepositWithExtraData(\\n IBridgeTypes.BitcoinTxInfo calldata fundingTx,\\n IBridgeTypes.DepositRevealInfo calldata reveal,\\n bytes32 extraData\\n ) external;\\n\\n /// @dev See {Bridge#deposits}\\n function deposits(uint256 depositKey)\\n external\\n view\\n returns (IBridgeTypes.DepositRequest memory);\\n\\n /// @dev See {Bridge#depositParameters}\\n function depositParameters()\\n external\\n view\\n returns (\\n uint64 depositDustThreshold,\\n uint64 depositTreasuryFeeDivisor,\\n uint64 depositTxMaxFee,\\n uint32 depositRevealAheadPeriod\\n );\\n}\\n\",\"keccak256\":\"0x4e598d96404a19609f511f10503e80f457602ad694d081df739571f67f6e0c4e\",\"license\":\"GPL-3.0-only\"},\"contracts/l2/L2BitcoinDepositor.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\n\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n\\npragma solidity ^0.8.17;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"../integrator/IBridge.sol\\\";\\nimport \\\"./Wormhole.sol\\\";\\n\\n/// @title IL2WormholeGateway\\n/// @notice Interface to the `L2WormholeGateway` contract.\\ninterface IL2WormholeGateway {\\n /// @dev See ./L2WormholeGateway.sol#receiveTbtc\\n function receiveTbtc(bytes memory vaa) external;\\n}\\n\\n/// @title L2BitcoinDepositor\\n/// @notice This contract is part of the direct bridging mechanism allowing\\n/// users to obtain ERC20 TBTC on supported L2 chains, without the need\\n/// to interact with the L1 tBTC ledger chain where minting occurs.\\n///\\n/// `L2BitcoinDepositor` is deployed on the L2 chain and interacts with\\n/// their L1 counterpart, the `L1BitcoinDepositor`, deployed on the\\n/// L1 tBTC ledger chain. Each `L1BitcoinDepositor` & `L2BitcoinDepositor`\\n/// pair is responsible for a specific L2 chain.\\n///\\n/// Please consult the `L1BitcoinDepositor` docstring for an\\n/// outline of the direct bridging mechanism\\n// slither-disable-next-line locked-ether\\ncontract L2BitcoinDepositor is IWormholeReceiver, OwnableUpgradeable {\\n /// @notice `WormholeRelayer` contract on L2.\\n IWormholeRelayer public wormholeRelayer;\\n /// @notice tBTC `L2WormholeGateway` contract on L2.\\n IL2WormholeGateway public l2WormholeGateway;\\n /// @notice Wormhole chain ID of the corresponding L1 chain.\\n uint16 public l1ChainId;\\n /// @notice tBTC `L1BitcoinDepositor` contract on the corresponding L1 chain.\\n address public l1BitcoinDepositor;\\n\\n event DepositInitialized(\\n IBridgeTypes.BitcoinTxInfo fundingTx,\\n IBridgeTypes.DepositRevealInfo reveal,\\n address indexed l2DepositOwner,\\n address indexed l2Sender\\n );\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address _wormholeRelayer,\\n address _l2WormholeGateway,\\n uint16 _l1ChainId\\n ) external initializer {\\n __Ownable_init();\\n\\n wormholeRelayer = IWormholeRelayer(_wormholeRelayer);\\n l2WormholeGateway = IL2WormholeGateway(_l2WormholeGateway);\\n l1ChainId = _l1ChainId;\\n }\\n\\n /// @notice Sets the address of the `L1BitcoinDepositor` contract on the\\n /// corresponding L1 chain. This function solves the chicken-and-egg\\n /// problem of setting the `L1BitcoinDepositor` contract address\\n /// on the `L2BitcoinDepositor` contract and vice versa.\\n /// @param _l1BitcoinDepositor Address of the `L1BitcoinDepositor` contract.\\n /// @dev Requirements:\\n /// - Can be called only by the contract owner,\\n /// - The address must not be set yet,\\n /// - The new address must not be 0x0.\\n function attachL1BitcoinDepositor(address _l1BitcoinDepositor)\\n external\\n onlyOwner\\n {\\n require(\\n l1BitcoinDepositor == address(0),\\n \\\"L1 Bitcoin Depositor already set\\\"\\n );\\n require(\\n _l1BitcoinDepositor != address(0),\\n \\\"L1 Bitcoin Depositor must not be 0x0\\\"\\n );\\n l1BitcoinDepositor = _l1BitcoinDepositor;\\n }\\n\\n /// @notice Initializes the deposit process on L2 by emitting an event\\n /// containing the deposit data (funding transaction and\\n /// components of the P2(W)SH deposit address). The event is\\n /// supposed to be picked up by the relayer and used to initialize\\n /// the deposit on L1 through the `L1BitcoinDepositor` contract.\\n /// @param fundingTx Bitcoin funding transaction data.\\n /// @param reveal Deposit reveal data.\\n /// @param l2DepositOwner Address of the L2 deposit owner.\\n /// @dev The alternative approach of using Wormhole Relayer to send the\\n /// deposit data to L1 was considered. However, it turned out to be\\n /// too expensive. For example, relying deposit data from Base L2 to\\n /// Ethereum L1 costs around ~0.045 ETH (~170 USD at the moment of writing).\\n /// Moreover, the next iteration of the direct bridging mechanism\\n /// assumes that no L2 transaction will be required to initialize the\\n /// deposit and the relayer should obtain the deposit data off-chain.\\n /// There is a high chance this function will be removed then.\\n /// That said, there was no sense to explore another cross-chain\\n /// messaging solutions. Relying on simple on-chain event and custom\\n /// off-chain relayer seems to be the most reasonable way to go. It\\n /// also aligns with the future direction of the direct bridging mechanism.\\n function initializeDeposit(\\n IBridgeTypes.BitcoinTxInfo calldata fundingTx,\\n IBridgeTypes.DepositRevealInfo calldata reveal,\\n address l2DepositOwner\\n ) external {\\n emit DepositInitialized(fundingTx, reveal, l2DepositOwner, msg.sender);\\n }\\n\\n /// @notice Receives Wormhole messages originating from the corresponding\\n /// `L1BitcoinDepositor` contract that lives on the L1 chain.\\n /// Messages are issued upon deposit finalization on L1 and\\n /// are supposed to carry the VAA of the Wormhole token transfer of\\n /// ERC20 L1 TBTC to the L2 chain. This contract performs some basic\\n /// checks and forwards the VAA to the `L2WormholeGateway` contract\\n /// that is authorized to withdraw the Wormhole-wrapped L2 TBTC\\n /// from the Wormhole Token Bridge (representing the ERC20 TBTC\\n /// locked on L1) and use it to mint the canonical L2 TBTC for the\\n /// deposit owner.\\n /// @param additionalVaas Additional VAAs that are part of the Wormhole message.\\n /// @param sourceAddress Address of the source of the message (in Wormhole format).\\n /// @param sourceChain Wormhole chain ID of the source chain.\\n /// @dev Requirements:\\n /// - Can be called only by the Wormhole Relayer contract,\\n /// - The source chain must be the expected L1 chain,\\n /// - The source address must be the corresponding\\n /// `L1BitcoinDepositor` contract,\\n /// - The message must carry exactly 1 additional VAA key representing\\n /// the token transfer.\\n function receiveWormholeMessages(\\n bytes memory,\\n bytes[] memory additionalVaas,\\n bytes32 sourceAddress,\\n uint16 sourceChain,\\n bytes32\\n ) external payable {\\n require(\\n msg.sender == address(wormholeRelayer),\\n \\\"Caller is not Wormhole Relayer\\\"\\n );\\n\\n require(\\n sourceChain == l1ChainId,\\n \\\"Source chain is not the expected L1 chain\\\"\\n );\\n\\n require(\\n WormholeUtils.fromWormholeAddress(sourceAddress) ==\\n l1BitcoinDepositor,\\n \\\"Source address is not the expected L1 Bitcoin depositor\\\"\\n );\\n\\n require(\\n additionalVaas.length == 1,\\n \\\"Expected 1 additional VAA key for token transfer\\\"\\n );\\n\\n l2WormholeGateway.receiveTbtc(additionalVaas[0]);\\n }\\n}\\n\",\"keccak256\":\"0x2a8ef13b4ff713f15f5c99d88b3c7f5b29fa36850ad005f7c9f2f1ecc36fe8ae\",\"license\":\"GPL-3.0-only\"},\"contracts/l2/Wormhole.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\n\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n\\npragma solidity ^0.8.17;\\n\\n/// @title WormholeTypes\\n/// @notice Namespace which groups all types relevant to Wormhole interfaces.\\nlibrary WormholeTypes {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L22\\n struct VaaKey {\\n uint16 chainId;\\n bytes32 emitterAddress;\\n uint64 sequence;\\n }\\n}\\n\\n/// @title IWormhole\\n/// @notice Wormhole interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormhole.sol#L6\\ninterface IWormhole {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormhole.sol#L109\\n function chainId() external view returns (uint16);\\n\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormhole.sol#L117\\n function messageFee() external view returns (uint256);\\n}\\n\\n/// @title IWormholeRelayer\\n/// @notice Wormhole Relayer interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L74\\ninterface IWormholeRelayer {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L442\\n function quoteEVMDeliveryPrice(\\n uint16 targetChain,\\n uint256 receiverValue,\\n uint256 gasLimit\\n )\\n external\\n view\\n returns (\\n uint256 nativePriceQuote,\\n uint256 targetChainRefundPerGasUnused\\n );\\n\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L182\\n function sendVaasToEvm(\\n uint16 targetChain,\\n address targetAddress,\\n bytes memory payload,\\n uint256 receiverValue,\\n uint256 gasLimit,\\n WormholeTypes.VaaKey[] memory vaaKeys,\\n uint16 refundChain,\\n address refundAddress\\n ) external payable returns (uint64 sequence);\\n}\\n\\n/// @title IWormholeReceiver\\n/// @notice Wormhole Receiver interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeReceiver.sol#L8\\ninterface IWormholeReceiver {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeReceiver.sol#L44\\n function receiveWormholeMessages(\\n bytes memory payload,\\n bytes[] memory additionalVaas,\\n bytes32 sourceAddress,\\n uint16 sourceChain,\\n bytes32 deliveryHash\\n ) external payable;\\n}\\n\\n/// @title IWormholeTokenBridge\\n/// @notice Wormhole Token Bridge interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/ITokenBridge.sol#L9\\ninterface IWormholeTokenBridge {\\n function completeTransferWithPayload(bytes memory encodedVm)\\n external\\n returns (bytes memory);\\n\\n function parseTransferWithPayload(bytes memory encoded)\\n external\\n pure\\n returns (TransferWithPayload memory transfer);\\n\\n function transferTokens(\\n address token,\\n uint256 amount,\\n uint16 recipientChain,\\n bytes32 recipient,\\n uint256 arbiterFee,\\n uint32 nonce\\n ) external payable returns (uint64 sequence);\\n\\n function transferTokensWithPayload(\\n address token,\\n uint256 amount,\\n uint16 recipientChain,\\n bytes32 recipient,\\n uint32 nonce,\\n bytes memory payload\\n ) external payable returns (uint64 sequence);\\n\\n struct TransferWithPayload {\\n uint8 payloadID;\\n uint256 amount;\\n bytes32 tokenAddress;\\n uint16 tokenChain;\\n bytes32 to;\\n uint16 toChain;\\n bytes32 fromAddress;\\n bytes payload;\\n }\\n}\\n\\n/// @title WormholeUtils\\n/// @notice Library for Wormhole utilities.\\nlibrary WormholeUtils {\\n /// @notice Converts Ethereum address into Wormhole format.\\n /// @param _address The address to convert.\\n function toWormholeAddress(address _address)\\n internal\\n pure\\n returns (bytes32)\\n {\\n return bytes32(uint256(uint160(_address)));\\n }\\n\\n /// @notice Converts Wormhole address into Ethereum format.\\n /// @param _address The address to convert.\\n function fromWormholeAddress(bytes32 _address)\\n internal\\n pure\\n returns (address)\\n {\\n return address(uint160(uint256(_address)));\\n }\\n\\n /// @dev Eliminates the dust that cannot be bridged with Wormhole\\n /// due to the decimal shift in the Wormhole Bridge contract.\\n /// See https://github.com/wormhole-foundation/wormhole/blob/96682bdbeb7c87bfa110eade0554b3d8cbf788d2/ethereum/contracts/bridge/Bridge.sol#L276-L288\\n function normalize(uint256 amount) internal pure returns (uint256) {\\n // slither-disable-next-line divide-before-multiply\\n amount /= 10**10;\\n amount *= 10**10;\\n return amount;\\n }\\n}\\n\",\"keccak256\":\"0xe862dd230cac5f6521582ca8deffec70ac8405c059de24a945e0f57dae0a52ef\",\"license\":\"GPL-3.0-only\"}},\"version\":1}",
10895
+ "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"inputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"outputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"struct IBridgeTypes.BitcoinTxInfo\",\"name\":\"fundingTx\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fundingOutputIndex\",\"type\":\"uint32\"},{\"internalType\":\"bytes8\",\"name\":\"blindingFactor\",\"type\":\"bytes8\"},{\"internalType\":\"bytes20\",\"name\":\"walletPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes20\",\"name\":\"refundPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes4\",\"name\":\"refundLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct IBridgeTypes.DepositRevealInfo\",\"name\":\"reveal\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2DepositOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"}],\"name\":\"DepositInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1BitcoinDepositor\",\"type\":\"address\"}],\"name\":\"attachL1BitcoinDepositor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wormholeRelayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2WormholeGateway\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_l1ChainId\",\"type\":\"uint16\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"inputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"outputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"}],\"internalType\":\"struct IBridgeTypes.BitcoinTxInfo\",\"name\":\"fundingTx\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fundingOutputIndex\",\"type\":\"uint32\"},{\"internalType\":\"bytes8\",\"name\":\"blindingFactor\",\"type\":\"bytes8\"},{\"internalType\":\"bytes20\",\"name\":\"walletPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes20\",\"name\":\"refundPubKeyHash\",\"type\":\"bytes20\"},{\"internalType\":\"bytes4\",\"name\":\"refundLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"internalType\":\"struct IBridgeTypes.DepositRevealInfo\",\"name\":\"reveal\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"l2DepositOwner\",\"type\":\"address\"}],\"name\":\"initializeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BitcoinDepositor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ChainId\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2WormholeGateway\",\"outputs\":[{\"internalType\":\"contract IL2WormholeGateway\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"additionalVaas\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"sourceAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"sourceChain\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"receiveWormholeMessages\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wormholeRelayer\",\"outputs\":[{\"internalType\":\"contract IWormholeRelayer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"attachL1BitcoinDepositor(address)\":{\"details\":\"Requirements: - Can be called only by the contract owner, - The address must not be set yet, - The new address must not be 0x0.\",\"params\":{\"_l1BitcoinDepositor\":\"Address of the `L1BitcoinDepositor` contract.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initializeDeposit((bytes4,bytes,bytes,bytes4),(uint32,bytes8,bytes20,bytes20,bytes4,address),address)\":{\"details\":\"The alternative approach of using Wormhole Relayer to send the deposit data to L1 was considered. However, it turned out to be too expensive. For example, relying deposit data from Base L2 to Ethereum L1 costs around ~0.045 ETH (~170 USD at the moment of writing). Moreover, the next iteration of the direct bridging mechanism assumes that no L2 transaction will be required to initialize the deposit and the relayer should obtain the deposit data off-chain. There is a high chance this function will be removed then. That said, there was no sense to explore another cross-chain messaging solutions. Relying on simple on-chain event and custom off-chain relayer seems to be the most reasonable way to go. It also aligns with the future direction of the direct bridging mechanism.\",\"params\":{\"fundingTx\":\"Bitcoin funding transaction data.\",\"l2DepositOwner\":\"Address of the L2 deposit owner.\",\"reveal\":\"Deposit reveal data.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"receiveWormholeMessages(bytes,bytes[],bytes32,uint16,bytes32)\":{\"details\":\"Requirements: - Can be called only by the Wormhole Relayer contract, - The source chain must be the expected L1 chain, - The source address must be the corresponding `L1BitcoinDepositor` contract, - The message must carry exactly 1 additional VAA key representing the token transfer.\",\"params\":{\"additionalVaas\":\"Additional VAAs that are part of the Wormhole message.\",\"sourceAddress\":\"Address of the source of the message (in Wormhole format).\",\"sourceChain\":\"Wormhole chain ID of the source chain.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"L2BitcoinDepositor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attachL1BitcoinDepositor(address)\":{\"notice\":\"Sets the address of the `L1BitcoinDepositor` contract on the corresponding L1 chain. This function solves the chicken-and-egg problem of setting the `L1BitcoinDepositor` contract address on the `L2BitcoinDepositor` contract and vice versa.\"},\"initializeDeposit((bytes4,bytes,bytes,bytes4),(uint32,bytes8,bytes20,bytes20,bytes4,address),address)\":{\"notice\":\"Initializes the deposit process on L2 by emitting an event containing the deposit data (funding transaction and components of the P2(W)SH deposit address). The event is supposed to be picked up by the relayer and used to initialize the deposit on L1 through the `L1BitcoinDepositor` contract.\"},\"l1BitcoinDepositor()\":{\"notice\":\"tBTC `L1BitcoinDepositor` contract on the corresponding L1 chain.\"},\"l1ChainId()\":{\"notice\":\"Wormhole chain ID of the corresponding L1 chain.\"},\"l2WormholeGateway()\":{\"notice\":\"tBTC `L2WormholeGateway` contract on L2.\"},\"receiveWormholeMessages(bytes,bytes[],bytes32,uint16,bytes32)\":{\"notice\":\"Receives Wormhole messages originating from the corresponding `L1BitcoinDepositor` contract that lives on the L1 chain. Messages are issued upon deposit finalization on L1 and are supposed to carry the VAA of the Wormhole token transfer of ERC20 L1 TBTC to the L2 chain. This contract performs some basic checks and forwards the VAA to the `L2WormholeGateway` contract that is authorized to withdraw the Wormhole-wrapped L2 TBTC from the Wormhole Token Bridge (representing the ERC20 TBTC locked on L1) and use it to mint the canonical L2 TBTC for the deposit owner.\"},\"wormholeRelayer()\":{\"notice\":\"`WormholeRelayer` contract on L2.\"}},\"notice\":\"This contract is part of the direct bridging mechanism allowing users to obtain ERC20 TBTC on supported L2 chains, without the need to interact with the L1 tBTC ledger chain where minting occurs. `L2BitcoinDepositor` is deployed on the L2 chain and interacts with their L1 counterpart, the `L1BitcoinDepositor`, deployed on the L1 tBTC ledger chain. Each `L1BitcoinDepositor` & `L2BitcoinDepositor` pair is responsible for a specific L2 chain. Please consult the `L1BitcoinDepositor` docstring for an outline of the direct bridging mechanism\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/l2/L2BitcoinDepositor.sol\":\"L2BitcoinDepositor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"contracts/integrator/IBridge.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\n\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n\\npragma solidity ^0.8.0;\\n\\n/// @notice Namespace which groups all types relevant to the IBridge interface.\\n/// @dev This is a mirror of the real types used in the Bridge contract.\\n/// This way, the `integrator` subpackage does not need to import\\n/// anything from the `bridge` subpackage and explicitly depend on it.\\n/// This simplifies the dependency graph for integrators.\\nlibrary IBridgeTypes {\\n /// @dev See bridge/BitcoinTx.sol#Info\\n struct BitcoinTxInfo {\\n bytes4 version;\\n bytes inputVector;\\n bytes outputVector;\\n bytes4 locktime;\\n }\\n\\n /// @dev See bridge/Deposit.sol#DepositRevealInfo\\n struct DepositRevealInfo {\\n uint32 fundingOutputIndex;\\n bytes8 blindingFactor;\\n bytes20 walletPubKeyHash;\\n bytes20 refundPubKeyHash;\\n bytes4 refundLocktime;\\n address vault;\\n }\\n\\n /// @dev See bridge/Deposit.sol#DepositRequest\\n struct DepositRequest {\\n address depositor;\\n uint64 amount;\\n uint32 revealedAt;\\n address vault;\\n uint64 treasuryFee;\\n uint32 sweptAt;\\n bytes32 extraData;\\n }\\n}\\n\\n/// @notice Interface of the Bridge contract.\\n/// @dev See bridge/Bridge.sol\\ninterface IBridge {\\n /// @dev See {Bridge#revealDepositWithExtraData}\\n function revealDepositWithExtraData(\\n IBridgeTypes.BitcoinTxInfo calldata fundingTx,\\n IBridgeTypes.DepositRevealInfo calldata reveal,\\n bytes32 extraData\\n ) external;\\n\\n /// @dev See {Bridge#deposits}\\n function deposits(uint256 depositKey)\\n external\\n view\\n returns (IBridgeTypes.DepositRequest memory);\\n\\n /// @dev See {Bridge#depositParameters}\\n function depositParameters()\\n external\\n view\\n returns (\\n uint64 depositDustThreshold,\\n uint64 depositTreasuryFeeDivisor,\\n uint64 depositTxMaxFee,\\n uint32 depositRevealAheadPeriod\\n );\\n}\\n\",\"keccak256\":\"0x4e598d96404a19609f511f10503e80f457602ad694d081df739571f67f6e0c4e\",\"license\":\"GPL-3.0-only\"},\"contracts/l2/L2BitcoinDepositor.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\n\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n\\npragma solidity 0.8.17;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"../integrator/IBridge.sol\\\";\\nimport \\\"./Wormhole.sol\\\";\\n\\n/// @title IL2WormholeGateway\\n/// @notice Interface to the `L2WormholeGateway` contract.\\ninterface IL2WormholeGateway {\\n /// @dev See ./L2WormholeGateway.sol#receiveTbtc\\n function receiveTbtc(bytes memory vaa) external;\\n}\\n\\n/// @title L2BitcoinDepositor\\n/// @notice This contract is part of the direct bridging mechanism allowing\\n/// users to obtain ERC20 TBTC on supported L2 chains, without the need\\n/// to interact with the L1 tBTC ledger chain where minting occurs.\\n///\\n/// `L2BitcoinDepositor` is deployed on the L2 chain and interacts with\\n/// their L1 counterpart, the `L1BitcoinDepositor`, deployed on the\\n/// L1 tBTC ledger chain. Each `L1BitcoinDepositor` & `L2BitcoinDepositor`\\n/// pair is responsible for a specific L2 chain.\\n///\\n/// Please consult the `L1BitcoinDepositor` docstring for an\\n/// outline of the direct bridging mechanism\\n// slither-disable-next-line locked-ether\\ncontract L2BitcoinDepositor is IWormholeReceiver, OwnableUpgradeable {\\n /// @notice `WormholeRelayer` contract on L2.\\n IWormholeRelayer public wormholeRelayer;\\n /// @notice tBTC `L2WormholeGateway` contract on L2.\\n IL2WormholeGateway public l2WormholeGateway;\\n /// @notice Wormhole chain ID of the corresponding L1 chain.\\n uint16 public l1ChainId;\\n /// @notice tBTC `L1BitcoinDepositor` contract on the corresponding L1 chain.\\n address public l1BitcoinDepositor;\\n\\n event DepositInitialized(\\n IBridgeTypes.BitcoinTxInfo fundingTx,\\n IBridgeTypes.DepositRevealInfo reveal,\\n address indexed l2DepositOwner,\\n address indexed l2Sender\\n );\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address _wormholeRelayer,\\n address _l2WormholeGateway,\\n uint16 _l1ChainId\\n ) external initializer {\\n __Ownable_init();\\n\\n require(\\n _wormholeRelayer != address(0),\\n \\\"WormholeRelayer address cannot be zero\\\"\\n );\\n require(\\n _l2WormholeGateway != address(0),\\n \\\"L2WormholeGateway address cannot be zero\\\"\\n );\\n\\n wormholeRelayer = IWormholeRelayer(_wormholeRelayer);\\n l2WormholeGateway = IL2WormholeGateway(_l2WormholeGateway);\\n l1ChainId = _l1ChainId;\\n }\\n\\n /// @notice Sets the address of the `L1BitcoinDepositor` contract on the\\n /// corresponding L1 chain. This function solves the chicken-and-egg\\n /// problem of setting the `L1BitcoinDepositor` contract address\\n /// on the `L2BitcoinDepositor` contract and vice versa.\\n /// @param _l1BitcoinDepositor Address of the `L1BitcoinDepositor` contract.\\n /// @dev Requirements:\\n /// - Can be called only by the contract owner,\\n /// - The address must not be set yet,\\n /// - The new address must not be 0x0.\\n function attachL1BitcoinDepositor(address _l1BitcoinDepositor)\\n external\\n onlyOwner\\n {\\n require(\\n l1BitcoinDepositor == address(0),\\n \\\"L1 Bitcoin Depositor already set\\\"\\n );\\n require(\\n _l1BitcoinDepositor != address(0),\\n \\\"L1 Bitcoin Depositor must not be 0x0\\\"\\n );\\n l1BitcoinDepositor = _l1BitcoinDepositor;\\n }\\n\\n /// @notice Initializes the deposit process on L2 by emitting an event\\n /// containing the deposit data (funding transaction and\\n /// components of the P2(W)SH deposit address). The event is\\n /// supposed to be picked up by the relayer and used to initialize\\n /// the deposit on L1 through the `L1BitcoinDepositor` contract.\\n /// @param fundingTx Bitcoin funding transaction data.\\n /// @param reveal Deposit reveal data.\\n /// @param l2DepositOwner Address of the L2 deposit owner.\\n /// @dev The alternative approach of using Wormhole Relayer to send the\\n /// deposit data to L1 was considered. However, it turned out to be\\n /// too expensive. For example, relying deposit data from Base L2 to\\n /// Ethereum L1 costs around ~0.045 ETH (~170 USD at the moment of writing).\\n /// Moreover, the next iteration of the direct bridging mechanism\\n /// assumes that no L2 transaction will be required to initialize the\\n /// deposit and the relayer should obtain the deposit data off-chain.\\n /// There is a high chance this function will be removed then.\\n /// That said, there was no sense to explore another cross-chain\\n /// messaging solutions. Relying on simple on-chain event and custom\\n /// off-chain relayer seems to be the most reasonable way to go. It\\n /// also aligns with the future direction of the direct bridging mechanism.\\n function initializeDeposit(\\n IBridgeTypes.BitcoinTxInfo calldata fundingTx,\\n IBridgeTypes.DepositRevealInfo calldata reveal,\\n address l2DepositOwner\\n ) external {\\n emit DepositInitialized(fundingTx, reveal, l2DepositOwner, msg.sender);\\n }\\n\\n /// @notice Receives Wormhole messages originating from the corresponding\\n /// `L1BitcoinDepositor` contract that lives on the L1 chain.\\n /// Messages are issued upon deposit finalization on L1 and\\n /// are supposed to carry the VAA of the Wormhole token transfer of\\n /// ERC20 L1 TBTC to the L2 chain. This contract performs some basic\\n /// checks and forwards the VAA to the `L2WormholeGateway` contract\\n /// that is authorized to withdraw the Wormhole-wrapped L2 TBTC\\n /// from the Wormhole Token Bridge (representing the ERC20 TBTC\\n /// locked on L1) and use it to mint the canonical L2 TBTC for the\\n /// deposit owner.\\n /// @param additionalVaas Additional VAAs that are part of the Wormhole message.\\n /// @param sourceAddress Address of the source of the message (in Wormhole format).\\n /// @param sourceChain Wormhole chain ID of the source chain.\\n /// @dev Requirements:\\n /// - Can be called only by the Wormhole Relayer contract,\\n /// - The source chain must be the expected L1 chain,\\n /// - The source address must be the corresponding\\n /// `L1BitcoinDepositor` contract,\\n /// - The message must carry exactly 1 additional VAA key representing\\n /// the token transfer.\\n function receiveWormholeMessages(\\n bytes memory,\\n bytes[] memory additionalVaas,\\n bytes32 sourceAddress,\\n uint16 sourceChain,\\n bytes32\\n ) external payable {\\n require(\\n msg.sender == address(wormholeRelayer),\\n \\\"Caller is not Wormhole Relayer\\\"\\n );\\n\\n require(\\n sourceChain == l1ChainId,\\n \\\"Source chain is not the expected L1 chain\\\"\\n );\\n\\n require(\\n WormholeUtils.fromWormholeAddress(sourceAddress) ==\\n l1BitcoinDepositor,\\n \\\"Source address is not the expected L1 Bitcoin depositor\\\"\\n );\\n\\n require(\\n additionalVaas.length == 1,\\n \\\"Expected 1 additional VAA key for token transfer\\\"\\n );\\n\\n l2WormholeGateway.receiveTbtc(additionalVaas[0]);\\n }\\n}\\n\",\"keccak256\":\"0xcdca450675748cbcbd948ccdca051bd1bf361d75b658fc516eab327837324ce6\",\"license\":\"GPL-3.0-only\"},\"contracts/l2/Wormhole.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\n\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588 \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n// \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c \\u2590\\u2588\\u2588\\u2588\\u2588\\u258c\\n\\npragma solidity ^0.8.17;\\n\\n/// @title WormholeTypes\\n/// @notice Namespace which groups all types relevant to Wormhole interfaces.\\nlibrary WormholeTypes {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L22\\n struct VaaKey {\\n uint16 chainId;\\n bytes32 emitterAddress;\\n uint64 sequence;\\n }\\n}\\n\\n/// @title IWormhole\\n/// @notice Wormhole interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormhole.sol#L6\\ninterface IWormhole {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormhole.sol#L109\\n function chainId() external view returns (uint16);\\n\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormhole.sol#L117\\n function messageFee() external view returns (uint256);\\n}\\n\\n/// @title IWormholeRelayer\\n/// @notice Wormhole Relayer interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L74\\ninterface IWormholeRelayer {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L442\\n function quoteEVMDeliveryPrice(\\n uint16 targetChain,\\n uint256 receiverValue,\\n uint256 gasLimit\\n )\\n external\\n view\\n returns (\\n uint256 nativePriceQuote,\\n uint256 targetChainRefundPerGasUnused\\n );\\n\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeRelayer.sol#L182\\n function sendVaasToEvm(\\n uint16 targetChain,\\n address targetAddress,\\n bytes memory payload,\\n uint256 receiverValue,\\n uint256 gasLimit,\\n WormholeTypes.VaaKey[] memory vaaKeys,\\n uint16 refundChain,\\n address refundAddress\\n ) external payable returns (uint64 sequence);\\n}\\n\\n/// @title IWormholeReceiver\\n/// @notice Wormhole Receiver interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeReceiver.sol#L8\\ninterface IWormholeReceiver {\\n /// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/IWormholeReceiver.sol#L44\\n function receiveWormholeMessages(\\n bytes memory payload,\\n bytes[] memory additionalVaas,\\n bytes32 sourceAddress,\\n uint16 sourceChain,\\n bytes32 deliveryHash\\n ) external payable;\\n}\\n\\n/// @title IWormholeTokenBridge\\n/// @notice Wormhole Token Bridge interface.\\n/// @dev See: https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/2b7db51f99b49eda99b44f4a044e751cb0b2e8ea/src/interfaces/ITokenBridge.sol#L9\\ninterface IWormholeTokenBridge {\\n function completeTransferWithPayload(bytes memory encodedVm)\\n external\\n returns (bytes memory);\\n\\n function parseTransferWithPayload(bytes memory encoded)\\n external\\n pure\\n returns (TransferWithPayload memory transfer);\\n\\n function transferTokens(\\n address token,\\n uint256 amount,\\n uint16 recipientChain,\\n bytes32 recipient,\\n uint256 arbiterFee,\\n uint32 nonce\\n ) external payable returns (uint64 sequence);\\n\\n function transferTokensWithPayload(\\n address token,\\n uint256 amount,\\n uint16 recipientChain,\\n bytes32 recipient,\\n uint32 nonce,\\n bytes memory payload\\n ) external payable returns (uint64 sequence);\\n\\n struct TransferWithPayload {\\n uint8 payloadID;\\n uint256 amount;\\n bytes32 tokenAddress;\\n uint16 tokenChain;\\n bytes32 to;\\n uint16 toChain;\\n bytes32 fromAddress;\\n bytes payload;\\n }\\n}\\n\\n/// @title WormholeUtils\\n/// @notice Library for Wormhole utilities.\\nlibrary WormholeUtils {\\n /// @notice Converts Ethereum address into Wormhole format.\\n /// @param _address The address to convert.\\n function toWormholeAddress(address _address)\\n internal\\n pure\\n returns (bytes32)\\n {\\n return bytes32(uint256(uint160(_address)));\\n }\\n\\n /// @notice Converts Wormhole address into Ethereum format.\\n /// @param _address The address to convert.\\n function fromWormholeAddress(bytes32 _address)\\n internal\\n pure\\n returns (address)\\n {\\n return address(uint160(uint256(_address)));\\n }\\n\\n /// @dev Eliminates the dust that cannot be bridged with Wormhole\\n /// due to the decimal shift in the Wormhole Bridge contract.\\n /// See https://github.com/wormhole-foundation/wormhole/blob/96682bdbeb7c87bfa110eade0554b3d8cbf788d2/ethereum/contracts/bridge/Bridge.sol#L276-L288\\n function normalize(uint256 amount) internal pure returns (uint256) {\\n // slither-disable-next-line divide-before-multiply\\n amount /= 10**10;\\n amount *= 10**10;\\n return amount;\\n }\\n}\\n\",\"keccak256\":\"0xe862dd230cac5f6521582ca8deffec70ac8405c059de24a945e0f57dae0a52ef\",\"license\":\"GPL-3.0-only\"}},\"version\":1}",
10434
10896
  "storageLayout": {
10435
10897
  "storage": [
10436
10898
  {
@@ -10474,23 +10936,23 @@
10474
10936
  "type": "t_array(t_uint256)49_storage"
10475
10937
  },
10476
10938
  {
10477
- "astId": 39444,
10939
+ "astId": 39484,
10478
10940
  "contract": "contracts/l2/L2BitcoinDepositor.sol:L2BitcoinDepositor",
10479
10941
  "label": "wormholeRelayer",
10480
10942
  "offset": 0,
10481
10943
  "slot": "101",
10482
- "type": "t_contract(IWormholeRelayer)40602"
10944
+ "type": "t_contract(IWormholeRelayer)40662"
10483
10945
  },
10484
10946
  {
10485
- "astId": 39448,
10947
+ "astId": 39488,
10486
10948
  "contract": "contracts/l2/L2BitcoinDepositor.sol:L2BitcoinDepositor",
10487
10949
  "label": "l2WormholeGateway",
10488
10950
  "offset": 0,
10489
10951
  "slot": "102",
10490
- "type": "t_contract(IL2WormholeGateway)39435"
10952
+ "type": "t_contract(IL2WormholeGateway)39475"
10491
10953
  },
10492
10954
  {
10493
- "astId": 39451,
10955
+ "astId": 39491,
10494
10956
  "contract": "contracts/l2/L2BitcoinDepositor.sol:L2BitcoinDepositor",
10495
10957
  "label": "l1ChainId",
10496
10958
  "offset": 20,
@@ -10498,7 +10960,7 @@
10498
10960
  "type": "t_uint16"
10499
10961
  },
10500
10962
  {
10501
- "astId": 39454,
10963
+ "astId": 39494,
10502
10964
  "contract": "contracts/l2/L2BitcoinDepositor.sol:L2BitcoinDepositor",
10503
10965
  "label": "l1BitcoinDepositor",
10504
10966
  "offset": 0,
@@ -10529,12 +10991,12 @@
10529
10991
  "label": "bool",
10530
10992
  "numberOfBytes": "1"
10531
10993
  },
10532
- "t_contract(IL2WormholeGateway)39435": {
10994
+ "t_contract(IL2WormholeGateway)39475": {
10533
10995
  "encoding": "inplace",
10534
10996
  "label": "contract IL2WormholeGateway",
10535
10997
  "numberOfBytes": "20"
10536
10998
  },
10537
- "t_contract(IWormholeRelayer)40602": {
10999
+ "t_contract(IWormholeRelayer)40662": {
10538
11000
  "encoding": "inplace",
10539
11001
  "label": "contract IWormholeRelayer",
10540
11002
  "numberOfBytes": "20"