@keep-network/tbtc-v2 1.5.0-goerli.0 → 1.5.1

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 (110) hide show
  1. package/artifacts/.chainId +1 -1
  2. package/artifacts/Bank.json +23 -23
  3. package/artifacts/Bridge.json +26 -39
  4. package/artifacts/BridgeGovernance.json +25 -25
  5. package/artifacts/BridgeGovernanceParameters.json +10 -10
  6. package/artifacts/Deposit.json +14 -14
  7. package/artifacts/DepositSweep.json +13 -13
  8. package/artifacts/DonationVault.json +14 -14
  9. package/artifacts/Fraud.json +13 -13
  10. package/artifacts/LightRelay.json +52 -70
  11. package/artifacts/LightRelayMaintainerProxy.json +28 -28
  12. package/artifacts/MaintainerProxy.json +47 -47
  13. package/artifacts/MovingFunds.json +13 -13
  14. package/artifacts/Redemption.json +13 -13
  15. package/artifacts/TBTC.json +36 -37
  16. package/artifacts/TBTCVault.json +47 -47
  17. package/artifacts/VendingMachine.json +34 -35
  18. package/artifacts/VendingMachineV2.json +360 -0
  19. package/artifacts/VendingMachineV3.json +405 -0
  20. package/artifacts/WalletCoordinator.json +58 -20
  21. package/artifacts/Wallets.json +13 -13
  22. package/artifacts/solcInputs/7cc3eda3cb3ff2522d18b5e7b31ea228.json +102 -0
  23. package/artifacts/solcInputs/802132f7da69a8a4226cb9424480847b.json +218 -0
  24. package/artifacts/solcInputs/{f862bd134ddc06352fa5be0644481600.json → 887fad6b16575ba42183543c324eeb0e.json} +6 -6
  25. package/artifacts/solcInputs/{037e4828b80945fc4739f966d98aa575.json → b0025f1f7efe4824592ac0c9793776c3.json} +3 -18
  26. package/artifacts/solcInputs/{bd85e9d9f3c6834572e1a00ba6963ba0.json → d71d4b4434e6669852eaf643ebd2a7bc.json} +2 -2
  27. package/artifacts/solcInputs/{deff85fc9ae9b5be07226c67809262df.json → fccb130292c8c7cc958ab4fa31a3e180.json} +3 -3
  28. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  29. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  30. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  31. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  32. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  33. package/build/contracts/bridge/BridgeGovernanceParameters.sol/BridgeGovernanceParameters.dbg.json +1 -1
  34. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  35. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  36. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  37. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  38. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  39. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  40. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  41. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  42. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  43. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  44. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  45. package/build/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.dbg.json +1 -1
  46. package/build/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.dbg.json +1 -1
  47. package/build/contracts/bridge/WalletCoordinator.sol/WalletCoordinator.dbg.json +1 -1
  48. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  49. package/build/contracts/l2/L2TBTC.sol/L2TBTC.dbg.json +1 -1
  50. package/build/contracts/l2/L2WormholeGateway.sol/IWormholeTokenBridge.dbg.json +1 -1
  51. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.dbg.json +1 -1
  52. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +2 -15
  53. package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.dbg.json +1 -1
  54. package/build/contracts/relay/LightRelay.sol/ILightRelay.dbg.json +1 -1
  55. package/build/contracts/relay/LightRelay.sol/LightRelay.dbg.json +1 -1
  56. package/build/contracts/relay/LightRelay.sol/RelayUtils.dbg.json +1 -1
  57. package/build/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.dbg.json +1 -1
  58. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  59. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  60. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  61. package/build/contracts/vault/TBTCOptimisticMinting.sol/TBTCOptimisticMinting.dbg.json +1 -1
  62. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  63. package/contracts/l2/L2WormholeGateway.sol +7 -27
  64. package/deploy/81_upgrade_wallet_coordinator_v2.ts +99 -0
  65. package/export/artifacts/@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol/BTCUtils.json +20 -20
  66. package/export/artifacts/@keep-network/ecdsa/contracts/EcdsaDkgValidator.sol/EcdsaDkgValidator.json +2010 -2010
  67. package/export/artifacts/@keep-network/ecdsa/contracts/WalletRegistry.sol/WalletRegistry.json +383 -383
  68. package/export/artifacts/@keep-network/ecdsa/contracts/libraries/EcdsaDkg.sol/EcdsaDkg.json +22 -22
  69. package/export/artifacts/@keep-network/ecdsa/contracts/libraries/EcdsaInactivity.sol/EcdsaInactivity.json +1859 -1859
  70. package/export/artifacts/@keep-network/random-beacon/contracts/ReimbursementPool.sol/ReimbursementPool.json +598 -598
  71. package/export/artifacts/contracts/bridge/Bridge.sol/Bridge.json +7381 -7381
  72. package/export/artifacts/contracts/bridge/VendingMachine.sol/VendingMachine.json +6 -6
  73. package/export/artifacts/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.json +6 -6
  74. package/export/artifacts/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.json +6 -6
  75. package/export/artifacts/contracts/bridge/WalletCoordinator.sol/WalletCoordinator.json +5563 -5563
  76. package/export/artifacts/contracts/l2/L2TBTC.sol/L2TBTC.json +40 -40
  77. package/export/artifacts/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +3064 -3532
  78. package/export/artifacts/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +2454 -2454
  79. package/export/artifacts/contracts/relay/LightRelay.sol/LightRelay.json +1941 -1941
  80. package/export/artifacts/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.json +1044 -1044
  81. package/export/artifacts/contracts/test/BankStub.sol/BankStub.json +2 -2
  82. package/export/artifacts/contracts/test/BridgeStub.sol/BridgeStub.json +8422 -8422
  83. package/export/artifacts/contracts/test/GoerliLightRelay.sol/GoerliLightRelay.json +1943 -1943
  84. package/export/artifacts/contracts/test/HeartbeatStub.sol/HeartbeatStub.json +2 -2
  85. package/export/artifacts/contracts/test/LightRelayStub.sol/LightRelayStub.json +2066 -2066
  86. package/export/artifacts/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.json +7 -7
  87. package/export/artifacts/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +568 -568
  88. package/export/artifacts/contracts/test/TestERC20.sol/TestERC20.json +6 -6
  89. package/export/artifacts/contracts/test/TestERC721.sol/TestERC721.json +8 -8
  90. package/export/artifacts/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.json +2 -2
  91. package/export/artifacts/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.json +42 -42
  92. package/export/artifacts/contracts/token/TBTC.sol/TBTC.json +2 -2
  93. package/export/artifacts/contracts/vault/DonationVault.sol/DonationVault.json +11 -11
  94. package/export/artifacts/contracts/vault/TBTCVault.sol/TBTCVault.json +3525 -3525
  95. package/export/deploy/81_upgrade_wallet_coordinator_v2.js +140 -0
  96. package/export/hardhat.config.js +7 -0
  97. package/export/typechain/factories/EcdsaAuthorization__factory.js +1 -1
  98. package/export/typechain/factories/IStaking__factory.js +13 -0
  99. package/export/typechain/factories/L2WormholeGateway__factory.js +1 -14
  100. package/export/typechain/factories/WalletRegistry__factory.js +1 -1
  101. package/export/typechain/factories/WormholeBridgeStub__factory.js +1 -1
  102. package/export.json +267 -0
  103. package/package.json +5 -4
  104. package/artifacts/.DS_Store +0 -0
  105. package/export/deploy/35_transfer_wallet_coordinator_ownership.js +0 -60
  106. package/export/deploy/36_deploy_light_relay_maintainer_proxy.js +0 -86
  107. package/export/deploy/37_authorize_maintainer_in_light_relay_maintainer_proxy.js +0 -65
  108. package/export/deploy/38_transfer_light_relay_maintainer_proxy_ownership.js +0 -60
  109. package/export/deploy/39_authorize_light_relay_maintainer_proxy_in_reimbursement_pool.js +0 -70
  110. package/export/deploy/40_authorize_light_relay_maintainer_proxy_in_light_relay.js +0 -66
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/fec0c03aaf92c587701b382c1c21fdd1.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -174,19 +174,6 @@
174
174
  "stateMutability": "view",
175
175
  "type": "function"
176
176
  },
177
- {
178
- "inputs": [
179
- {
180
- "internalType": "uint256",
181
- "name": "amount",
182
- "type": "uint256"
183
- }
184
- ],
185
- "name": "depositWormholeTbtc",
186
- "outputs": [],
187
- "stateMutability": "nonpayable",
188
- "type": "function"
189
- },
190
177
  {
191
178
  "inputs": [
192
179
  {
@@ -423,8 +410,8 @@
423
410
  "type": "function"
424
411
  }
425
412
  ],
426
- "bytecode": "0x608060405234801561001057600080fd5b50611e6d806100206000396000f3fe60806040526004361061010e5760003560e01c80638da5cb5b116100a5578063e1308b3311610074578063f2fde38b11610059578063f2fde38b146102f1578063f4734b0c14610311578063f69785f31461033157600080fd5b8063e1308b33146102b1578063e78cea92146102d157600080fd5b80638da5cb5b1461021f578063b4ccd8681461023d578063c0c53b8b1461026a578063ca05f9851461028a57600080fd5b806349072f12116100e157806349072f12146101b45780635d21a596146101ca578063715018a6146101ea57806375b1beaa146101ff57600080fd5b80630b575fe6146101135780632d3802421461014e578063363da98e1461017257806344949c9214610194575b600080fd5b34801561011f57600080fd5b5061013161012e36600461188a565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561015a57600080fd5b50610164609c5481565b604051908152602001610145565b34801561017e57600080fd5b5061019261018d36600461188a565b61035d565b005b3480156101a057600080fd5b506101926101af36600461188a565b6103a0565b3480156101c057600080fd5b50610164609b5481565b3480156101d657600080fd5b506101926101e53660046118a3565b6104d3565b3480156101f657600080fd5b506101926108a0565b34801561020b57600080fd5b5061019261021a366004611925565b6108b4565b34801561022b57600080fd5b506033546001600160a01b0316610131565b34801561024957600080fd5b50610164610258366004611951565b609a6020526000908152604090205481565b34801561027657600080fd5b5061019261028536600461198a565b61090f565b34801561029657600080fd5b506101646102a53660046119d5565b6001600160a01b031690565b3480156102bd57600080fd5b50609954610131906001600160a01b031681565b3480156102dd57600080fd5b50609754610131906001600160a01b031681565b3480156102fd57600080fd5b5061019261030c3660046119d5565b610bca565b34801561031d57600080fd5b50609854610131906001600160a01b031681565b61034461033f3660046119f2565b610c5a565b60405167ffffffffffffffff9091168152602001610145565b6103656110ab565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b609b5481609c546103b19190611a67565b11156104045760405162461bcd60e51b815260206004820152601660248201527f4d696e74696e67206c696d69742065786365656465640000000000000000000060448201526064015b60405180910390fd5b60408051338152602081018390527ff7f6725b273ddbe730c152e645cb3a946dd37dbc34344ba45f20975ff85aeb92910160405180910390a180609c600082825461044f9190611a67565b909155505060985461046c906001600160a01b0316333084611105565b6099546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156104b857600080fd5b505af11580156104cc573d6000803e3d6000fd5b5050505050565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561051c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105409190611a7a565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c1906105919087908790600401611a93565b6000604051808303816000875af11580156105b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d89190810190611bae565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611a7a565b905060006106588483611be3565b9050600081116106aa5760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064016103fb565b6097546040517fea63738d00000000000000000000000000000000000000000000000000000000815260009161074c916001600160a01b039091169063ea63738d906106fa908890600401611c22565b600060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261073f9190810190611c56565b60e0015161012e90611d1f565b90506001600160a01b0381166107a45760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f776564000000000000000060448201526064016103fb565b609b5482609c546107b59190611a67565b11156107d7576098546107d2906001600160a01b031682846111b6565b610855565b81609c60008282546107e99190611a67565b90915550506099546040516340c10f1960e01b81526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b15801561083c57600080fd5b505af1158015610850573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a150505050505050565b6108a86110ab565b6108b26000611204565b565b6108bc6110ab565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff161580801561092f5750600054600160ff909116105b806109495750303b158015610949575060005460ff166001145b6109bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103fb565b6000805460ff1916600117905580156109de576000805461ff0019166101001790555b6109e6611263565b6109ee6112d6565b6001600160a01b038416610a6a5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f206265203078300000000000000000000000000000000000000000000000000060648201526084016103fb565b6001600160a01b038316610acc5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b6001600160a01b038216610b2e5760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610bc4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610bd26110ab565b6001600160a01b038116610c4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103fb565b610c5781611204565b50565b6000610c64611349565b83610cb15760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f7765640000000000000060448201526064016103fb565b85600003610d015760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f74206265203000000000000000000000000060448201526064016103fb565b610d0a866113a2565b955085600003610d5c5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f20627269646765000000000000000060448201526064016103fb565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190611a7a565b1015610e3c5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f2062726964676500000000000000000000000000000060648201526084016103fb565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610ebf9190611be3565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610f2957600080fd5b505af1158015610f3d573d6000803e3d6000fd5b5050609754609854610f5e93506001600160a01b03908116925016896113ca565b80611024576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610ff7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061101c9190611d46565b915050611098565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610fd99392909116918d918d9189918c91604401611d70565b6110a26001606555565b95945050505050565b6033546001600160a01b031633146108b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fb565b6040516001600160a01b0380851660248301528316604482015260648101829052610bc49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261151f565b6040516001600160a01b0383166024820152604481018290526111ff9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611152565b505050565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166112ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611604565b600054610100900460ff166113415760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611678565b60026065540361139b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103fb565b6002606555565b60006113b36402540be40083611dc0565b91506113c46402540be40083611de2565b92915050565b80158061145d57506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b9190611a7a565b155b6114cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103fb565b6040516001600160a01b0383166024820152604481018290526111ff9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611152565b6001606555565b6000611574826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116e39092919063ffffffff16565b8051909150156111ff57808060200190518101906115929190611df9565b6111ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103fb565b600054610100900460ff1661166f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b233611204565b600054610100900460ff166115185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b60606116f284846000856116fa565b949350505050565b6060824710156117725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103fb565b600080866001600160a01b0316858760405161178e9190611e1b565b60006040518083038185875af1925050503d80600081146117cb576040519150601f19603f3d011682016040523d82523d6000602084013e6117d0565b606091505b50915091506117e1878383876117ec565b979650505050505050565b6060831561185b578251600003611854576001600160a01b0385163b6118545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103fb565b50816116f2565b6116f283838151156118705781518083602001fd5b8060405162461bcd60e51b81526004016103fb9190611c22565b60006020828403121561189c57600080fd5b5035919050565b600080602083850312156118b657600080fd5b823567ffffffffffffffff808211156118ce57600080fd5b818501915085601f8301126118e257600080fd5b8135818111156118f157600080fd5b86602082850101111561190357600080fd5b60209290920196919550909350505050565b61ffff81168114610c5757600080fd5b6000806040838503121561193857600080fd5b823561194381611915565b946020939093013593505050565b60006020828403121561196357600080fd5b813561196e81611915565b9392505050565b6001600160a01b0381168114610c5757600080fd5b60008060006060848603121561199f57600080fd5b83356119aa81611975565b925060208401356119ba81611975565b915060408401356119ca81611975565b809150509250925092565b6000602082840312156119e757600080fd5b813561196e81611975565b600080600080600060a08688031215611a0a57600080fd5b853594506020860135611a1c81611915565b93506040860135925060608601359150608086013563ffffffff81168114611a4357600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b808201808211156113c4576113c4611a51565b600060208284031215611a8c57600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611afc57611afc611ac2565b60405290565b60005b83811015611b1d578181015183820152602001611b05565b50506000910152565b600082601f830112611b3757600080fd5b815167ffffffffffffffff80821115611b5257611b52611ac2565b604051601f8301601f19908116603f01168101908282118183101715611b7a57611b7a611ac2565b81604052838152866020858801011115611b9357600080fd5b611ba4846020830160208901611b02565b9695505050505050565b600060208284031215611bc057600080fd5b815167ffffffffffffffff811115611bd757600080fd5b6116f284828501611b26565b818103818111156113c4576113c4611a51565b60008151808452611c0e816020860160208601611b02565b601f01601f19169290920160200192915050565b60208152600061196e6020830184611bf6565b805160ff81168114611c4657600080fd5b919050565b8051611c4681611915565b600060208284031215611c6857600080fd5b815167ffffffffffffffff80821115611c8057600080fd5b908301906101008286031215611c9557600080fd5b611c9d611ad8565b611ca683611c35565b81526020830151602082015260408301516040820152611cc860608401611c4b565b606082015260808301516080820152611ce360a08401611c4b565b60a082015260c083015160c082015260e083015182811115611d0457600080fd5b611d1087828601611b26565b60e08301525095945050505050565b80516020808301519190811015611d40576000198160200360031b1b821691505b50919050565b600060208284031215611d5857600080fd5b815167ffffffffffffffff8116811461196e57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611db460c0830184611bf6565b98975050505050505050565b600082611ddd57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176113c4576113c4611a51565b600060208284031215611e0b57600080fd5b8151801515811461196e57600080fd5b60008251611e2d818460208701611b02565b919091019291505056fea26469706673582212203fcf6da3edc8eecb75051e8952eff919f1a9ccbf1e1cb6683ec8af46d847e39a64736f6c63430008110033",
427
- "deployedBytecode": "0x60806040526004361061010e5760003560e01c80638da5cb5b116100a5578063e1308b3311610074578063f2fde38b11610059578063f2fde38b146102f1578063f4734b0c14610311578063f69785f31461033157600080fd5b8063e1308b33146102b1578063e78cea92146102d157600080fd5b80638da5cb5b1461021f578063b4ccd8681461023d578063c0c53b8b1461026a578063ca05f9851461028a57600080fd5b806349072f12116100e157806349072f12146101b45780635d21a596146101ca578063715018a6146101ea57806375b1beaa146101ff57600080fd5b80630b575fe6146101135780632d3802421461014e578063363da98e1461017257806344949c9214610194575b600080fd5b34801561011f57600080fd5b5061013161012e36600461188a565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561015a57600080fd5b50610164609c5481565b604051908152602001610145565b34801561017e57600080fd5b5061019261018d36600461188a565b61035d565b005b3480156101a057600080fd5b506101926101af36600461188a565b6103a0565b3480156101c057600080fd5b50610164609b5481565b3480156101d657600080fd5b506101926101e53660046118a3565b6104d3565b3480156101f657600080fd5b506101926108a0565b34801561020b57600080fd5b5061019261021a366004611925565b6108b4565b34801561022b57600080fd5b506033546001600160a01b0316610131565b34801561024957600080fd5b50610164610258366004611951565b609a6020526000908152604090205481565b34801561027657600080fd5b5061019261028536600461198a565b61090f565b34801561029657600080fd5b506101646102a53660046119d5565b6001600160a01b031690565b3480156102bd57600080fd5b50609954610131906001600160a01b031681565b3480156102dd57600080fd5b50609754610131906001600160a01b031681565b3480156102fd57600080fd5b5061019261030c3660046119d5565b610bca565b34801561031d57600080fd5b50609854610131906001600160a01b031681565b61034461033f3660046119f2565b610c5a565b60405167ffffffffffffffff9091168152602001610145565b6103656110ab565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b609b5481609c546103b19190611a67565b11156104045760405162461bcd60e51b815260206004820152601660248201527f4d696e74696e67206c696d69742065786365656465640000000000000000000060448201526064015b60405180910390fd5b60408051338152602081018390527ff7f6725b273ddbe730c152e645cb3a946dd37dbc34344ba45f20975ff85aeb92910160405180910390a180609c600082825461044f9190611a67565b909155505060985461046c906001600160a01b0316333084611105565b6099546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156104b857600080fd5b505af11580156104cc573d6000803e3d6000fd5b5050505050565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561051c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105409190611a7a565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c1906105919087908790600401611a93565b6000604051808303816000875af11580156105b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d89190810190611bae565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611a7a565b905060006106588483611be3565b9050600081116106aa5760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064016103fb565b6097546040517fea63738d00000000000000000000000000000000000000000000000000000000815260009161074c916001600160a01b039091169063ea63738d906106fa908890600401611c22565b600060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261073f9190810190611c56565b60e0015161012e90611d1f565b90506001600160a01b0381166107a45760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f776564000000000000000060448201526064016103fb565b609b5482609c546107b59190611a67565b11156107d7576098546107d2906001600160a01b031682846111b6565b610855565b81609c60008282546107e99190611a67565b90915550506099546040516340c10f1960e01b81526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b15801561083c57600080fd5b505af1158015610850573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a150505050505050565b6108a86110ab565b6108b26000611204565b565b6108bc6110ab565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff161580801561092f5750600054600160ff909116105b806109495750303b158015610949575060005460ff166001145b6109bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103fb565b6000805460ff1916600117905580156109de576000805461ff0019166101001790555b6109e6611263565b6109ee6112d6565b6001600160a01b038416610a6a5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f206265203078300000000000000000000000000000000000000000000000000060648201526084016103fb565b6001600160a01b038316610acc5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b6001600160a01b038216610b2e5760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610bc4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610bd26110ab565b6001600160a01b038116610c4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103fb565b610c5781611204565b50565b6000610c64611349565b83610cb15760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f7765640000000000000060448201526064016103fb565b85600003610d015760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f74206265203000000000000000000000000060448201526064016103fb565b610d0a866113a2565b955085600003610d5c5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f20627269646765000000000000000060448201526064016103fb565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190611a7a565b1015610e3c5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f2062726964676500000000000000000000000000000060648201526084016103fb565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610ebf9190611be3565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610f2957600080fd5b505af1158015610f3d573d6000803e3d6000fd5b5050609754609854610f5e93506001600160a01b03908116925016896113ca565b80611024576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610ff7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061101c9190611d46565b915050611098565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610fd99392909116918d918d9189918c91604401611d70565b6110a26001606555565b95945050505050565b6033546001600160a01b031633146108b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fb565b6040516001600160a01b0380851660248301528316604482015260648101829052610bc49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261151f565b6040516001600160a01b0383166024820152604481018290526111ff9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611152565b505050565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166112ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611604565b600054610100900460ff166113415760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611678565b60026065540361139b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103fb565b6002606555565b60006113b36402540be40083611dc0565b91506113c46402540be40083611de2565b92915050565b80158061145d57506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b9190611a7a565b155b6114cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103fb565b6040516001600160a01b0383166024820152604481018290526111ff9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611152565b6001606555565b6000611574826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116e39092919063ffffffff16565b8051909150156111ff57808060200190518101906115929190611df9565b6111ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103fb565b600054610100900460ff1661166f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b233611204565b600054610100900460ff166115185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b60606116f284846000856116fa565b949350505050565b6060824710156117725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103fb565b600080866001600160a01b0316858760405161178e9190611e1b565b60006040518083038185875af1925050503d80600081146117cb576040519150601f19603f3d011682016040523d82523d6000602084013e6117d0565b606091505b50915091506117e1878383876117ec565b979650505050505050565b6060831561185b578251600003611854576001600160a01b0385163b6118545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103fb565b50816116f2565b6116f283838151156118705781518083602001fd5b8060405162461bcd60e51b81526004016103fb9190611c22565b60006020828403121561189c57600080fd5b5035919050565b600080602083850312156118b657600080fd5b823567ffffffffffffffff808211156118ce57600080fd5b818501915085601f8301126118e257600080fd5b8135818111156118f157600080fd5b86602082850101111561190357600080fd5b60209290920196919550909350505050565b61ffff81168114610c5757600080fd5b6000806040838503121561193857600080fd5b823561194381611915565b946020939093013593505050565b60006020828403121561196357600080fd5b813561196e81611915565b9392505050565b6001600160a01b0381168114610c5757600080fd5b60008060006060848603121561199f57600080fd5b83356119aa81611975565b925060208401356119ba81611975565b915060408401356119ca81611975565b809150509250925092565b6000602082840312156119e757600080fd5b813561196e81611975565b600080600080600060a08688031215611a0a57600080fd5b853594506020860135611a1c81611915565b93506040860135925060608601359150608086013563ffffffff81168114611a4357600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b808201808211156113c4576113c4611a51565b600060208284031215611a8c57600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611afc57611afc611ac2565b60405290565b60005b83811015611b1d578181015183820152602001611b05565b50506000910152565b600082601f830112611b3757600080fd5b815167ffffffffffffffff80821115611b5257611b52611ac2565b604051601f8301601f19908116603f01168101908282118183101715611b7a57611b7a611ac2565b81604052838152866020858801011115611b9357600080fd5b611ba4846020830160208901611b02565b9695505050505050565b600060208284031215611bc057600080fd5b815167ffffffffffffffff811115611bd757600080fd5b6116f284828501611b26565b818103818111156113c4576113c4611a51565b60008151808452611c0e816020860160208601611b02565b601f01601f19169290920160200192915050565b60208152600061196e6020830184611bf6565b805160ff81168114611c4657600080fd5b919050565b8051611c4681611915565b600060208284031215611c6857600080fd5b815167ffffffffffffffff80821115611c8057600080fd5b908301906101008286031215611c9557600080fd5b611c9d611ad8565b611ca683611c35565b81526020830151602082015260408301516040820152611cc860608401611c4b565b606082015260808301516080820152611ce360a08401611c4b565b60a082015260c083015160c082015260e083015182811115611d0457600080fd5b611d1087828601611b26565b60e08301525095945050505050565b80516020808301519190811015611d40576000198160200360031b1b821691505b50919050565b600060208284031215611d5857600080fd5b815167ffffffffffffffff8116811461196e57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611db460c0830184611bf6565b98975050505050505050565b600082611ddd57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176113c4576113c4611a51565b600060208284031215611e0b57600080fd5b8151801515811461196e57600080fd5b60008251611e2d818460208701611b02565b919091019291505056fea26469706673582212203fcf6da3edc8eecb75051e8952eff919f1a9ccbf1e1cb6683ec8af46d847e39a64736f6c63430008110033",
413
+ "bytecode": "0x608060405234801561001057600080fd5b50611cde806100206000396000f3fe6080604052600436106100f35760003560e01c8063b4ccd8681161008a578063e78cea9211610059578063e78cea9214610296578063f2fde38b146102b6578063f4734b0c146102d6578063f69785f3146102f657600080fd5b8063b4ccd86814610202578063c0c53b8b1461022f578063ca05f9851461024f578063e1308b331461027657600080fd5b80635d21a596116100c65780635d21a5961461018f578063715018a6146101af57806375b1beaa146101c45780638da5cb5b146101e457600080fd5b80630b575fe6146100f85780632d38024214610133578063363da98e1461015757806349072f1214610179575b600080fd5b34801561010457600080fd5b506101166101133660046116fb565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013f57600080fd5b50610149609c5481565b60405190815260200161012a565b34801561016357600080fd5b506101776101723660046116fb565b610322565b005b34801561018557600080fd5b50610149609b5481565b34801561019b57600080fd5b506101776101aa366004611714565b610365565b3480156101bb57600080fd5b50610177610762565b3480156101d057600080fd5b506101776101df366004611796565b610776565b3480156101f057600080fd5b506033546001600160a01b0316610116565b34801561020e57600080fd5b5061014961021d3660046117c2565b609a6020526000908152604090205481565b34801561023b57600080fd5b5061017761024a3660046117fb565b6107d1565b34801561025b57600080fd5b5061014961026a366004611846565b6001600160a01b031690565b34801561028257600080fd5b50609954610116906001600160a01b031681565b3480156102a257600080fd5b50609754610116906001600160a01b031681565b3480156102c257600080fd5b506101776102d1366004611846565b610a8c565b3480156102e257600080fd5b50609854610116906001600160a01b031681565b610309610304366004611863565b610b1c565b60405167ffffffffffffffff909116815260200161012a565b61032a610f6d565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b61036d610fc7565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156103b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103da91906118c2565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c19061042b90879087906004016118db565b6000604051808303816000875af115801561044a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047291908101906119f6565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e491906118c2565b905060006104f28483611a41565b9050600081116105495760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064015b60405180910390fd5b6097546040517fea63738d0000000000000000000000000000000000000000000000000000000081526000916105eb916001600160a01b039091169063ea63738d90610599908890600401611a80565b600060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105de9190810190611ab4565b60e0015161011390611b7d565b90506001600160a01b0381166106435760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f77656400000000000000006044820152606401610540565b609b5482609c546106549190611ba4565b111561067657609854610671906001600160a01b03168284611020565b61070d565b81609c60008282546106889190611ba4565b90915550506099546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a1505050505061075e6001606555565b5050565b61076a610f6d565b61077460006110d5565b565b61077e610f6d565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff16158080156107f15750600054600160ff909116105b8061080b5750303b15801561080b575060005460ff166001145b61087d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610540565b6000805460ff1916600117905580156108a0576000805461ff0019166101001790555b6108a8611134565b6108b06111a7565b6001600160a01b03841661092c5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f20626520307830000000000000000000000000000000000000000000000000006064820152608401610540565b6001600160a01b03831661098e5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b6001600160a01b0382166109f05760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610a86576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610a94610f6d565b6001600160a01b038116610b105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610540565b610b19816110d5565b50565b6000610b26610fc7565b83610b735760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f776564000000000000006044820152606401610540565b85600003610bc35760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f7420626520300000000000000000000000006044820152606401610540565b610bcc8661121a565b955085600003610c1e5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f2062726964676500000000000000006044820152606401610540565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906118c2565b1015610cfe5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f206272696467650000000000000000000000000000006064820152608401610540565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610d819190611a41565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050609754609854610e2093506001600160a01b0390811692501689611242565b80610ee6576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610eb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ede9190611bb7565b915050610f5a565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610e9b9392909116918d918d9189918c91604401611be1565b610f646001606555565b95945050505050565b6033546001600160a01b031633146107745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610540565b6002606554036110195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610540565b6002606555565b6040516001600160a01b0383166024820152604481018290526110c99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611390565b505050565b6001606555565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661119f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774611475565b600054610100900460ff166112125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6107746114e9565b600061122b6402540be40083611c31565b915061123c6402540be40083611c53565b92915050565b8015806112d557506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d391906118c2565b155b6113475760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610540565b6040516001600160a01b0383166024820152604481018290526110c99084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611065565b60006113e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115549092919063ffffffff16565b8051909150156110c957808060200190518101906114039190611c6a565b6110c95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610540565b600054610100900460ff166114e05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774336110d5565b600054610100900460ff166110ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6060611563848460008561156b565b949350505050565b6060824710156115e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610540565b600080866001600160a01b031685876040516115ff9190611c8c565b60006040518083038185875af1925050503d806000811461163c576040519150601f19603f3d011682016040523d82523d6000602084013e611641565b606091505b50915091506116528783838761165d565b979650505050505050565b606083156116cc5782516000036116c5576001600160a01b0385163b6116c55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610540565b5081611563565b61156383838151156116e15781518083602001fd5b8060405162461bcd60e51b81526004016105409190611a80565b60006020828403121561170d57600080fd5b5035919050565b6000806020838503121561172757600080fd5b823567ffffffffffffffff8082111561173f57600080fd5b818501915085601f83011261175357600080fd5b81358181111561176257600080fd5b86602082850101111561177457600080fd5b60209290920196919550909350505050565b61ffff81168114610b1957600080fd5b600080604083850312156117a957600080fd5b82356117b481611786565b946020939093013593505050565b6000602082840312156117d457600080fd5b81356117df81611786565b9392505050565b6001600160a01b0381168114610b1957600080fd5b60008060006060848603121561181057600080fd5b833561181b816117e6565b9250602084013561182b816117e6565b9150604084013561183b816117e6565b809150509250925092565b60006020828403121561185857600080fd5b81356117df816117e6565b600080600080600060a0868803121561187b57600080fd5b85359450602086013561188d81611786565b93506040860135925060608601359150608086013563ffffffff811681146118b457600080fd5b809150509295509295909350565b6000602082840312156118d457600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156119445761194461190a565b60405290565b60005b8381101561196557818101518382015260200161194d565b50506000910152565b600082601f83011261197f57600080fd5b815167ffffffffffffffff8082111561199a5761199a61190a565b604051601f8301601f19908116603f011681019082821181831017156119c2576119c261190a565b816040528381528660208588010111156119db57600080fd5b6119ec84602083016020890161194a565b9695505050505050565b600060208284031215611a0857600080fd5b815167ffffffffffffffff811115611a1f57600080fd5b6115638482850161196e565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123c5761123c611a2b565b60008151808452611a6c81602086016020860161194a565b601f01601f19169290920160200192915050565b6020815260006117df6020830184611a54565b805160ff81168114611aa457600080fd5b919050565b8051611aa481611786565b600060208284031215611ac657600080fd5b815167ffffffffffffffff80821115611ade57600080fd5b908301906101008286031215611af357600080fd5b611afb611920565b611b0483611a93565b81526020830151602082015260408301516040820152611b2660608401611aa9565b606082015260808301516080820152611b4160a08401611aa9565b60a082015260c083015160c082015260e083015182811115611b6257600080fd5b611b6e8782860161196e565b60e08301525095945050505050565b80516020808301519190811015611b9e576000198160200360031b1b821691505b50919050565b8082018082111561123c5761123c611a2b565b600060208284031215611bc957600080fd5b815167ffffffffffffffff811681146117df57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611c2560c0830184611a54565b98975050505050505050565b600082611c4e57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761123c5761123c611a2b565b600060208284031215611c7c57600080fd5b815180151581146117df57600080fd5b60008251611c9e81846020870161194a565b919091019291505056fea2646970667358221220b291d4f116eaee9a0315797c6438d633227d2a991caa1d3985922e37d89cae9964736f6c63430008110033",
414
+ "deployedBytecode": "0x6080604052600436106100f35760003560e01c8063b4ccd8681161008a578063e78cea9211610059578063e78cea9214610296578063f2fde38b146102b6578063f4734b0c146102d6578063f69785f3146102f657600080fd5b8063b4ccd86814610202578063c0c53b8b1461022f578063ca05f9851461024f578063e1308b331461027657600080fd5b80635d21a596116100c65780635d21a5961461018f578063715018a6146101af57806375b1beaa146101c45780638da5cb5b146101e457600080fd5b80630b575fe6146100f85780632d38024214610133578063363da98e1461015757806349072f1214610179575b600080fd5b34801561010457600080fd5b506101166101133660046116fb565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013f57600080fd5b50610149609c5481565b60405190815260200161012a565b34801561016357600080fd5b506101776101723660046116fb565b610322565b005b34801561018557600080fd5b50610149609b5481565b34801561019b57600080fd5b506101776101aa366004611714565b610365565b3480156101bb57600080fd5b50610177610762565b3480156101d057600080fd5b506101776101df366004611796565b610776565b3480156101f057600080fd5b506033546001600160a01b0316610116565b34801561020e57600080fd5b5061014961021d3660046117c2565b609a6020526000908152604090205481565b34801561023b57600080fd5b5061017761024a3660046117fb565b6107d1565b34801561025b57600080fd5b5061014961026a366004611846565b6001600160a01b031690565b34801561028257600080fd5b50609954610116906001600160a01b031681565b3480156102a257600080fd5b50609754610116906001600160a01b031681565b3480156102c257600080fd5b506101776102d1366004611846565b610a8c565b3480156102e257600080fd5b50609854610116906001600160a01b031681565b610309610304366004611863565b610b1c565b60405167ffffffffffffffff909116815260200161012a565b61032a610f6d565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b61036d610fc7565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156103b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103da91906118c2565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c19061042b90879087906004016118db565b6000604051808303816000875af115801561044a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047291908101906119f6565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e491906118c2565b905060006104f28483611a41565b9050600081116105495760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064015b60405180910390fd5b6097546040517fea63738d0000000000000000000000000000000000000000000000000000000081526000916105eb916001600160a01b039091169063ea63738d90610599908890600401611a80565b600060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105de9190810190611ab4565b60e0015161011390611b7d565b90506001600160a01b0381166106435760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f77656400000000000000006044820152606401610540565b609b5482609c546106549190611ba4565b111561067657609854610671906001600160a01b03168284611020565b61070d565b81609c60008282546106889190611ba4565b90915550506099546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a1505050505061075e6001606555565b5050565b61076a610f6d565b61077460006110d5565b565b61077e610f6d565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff16158080156107f15750600054600160ff909116105b8061080b5750303b15801561080b575060005460ff166001145b61087d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610540565b6000805460ff1916600117905580156108a0576000805461ff0019166101001790555b6108a8611134565b6108b06111a7565b6001600160a01b03841661092c5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f20626520307830000000000000000000000000000000000000000000000000006064820152608401610540565b6001600160a01b03831661098e5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b6001600160a01b0382166109f05760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610a86576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610a94610f6d565b6001600160a01b038116610b105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610540565b610b19816110d5565b50565b6000610b26610fc7565b83610b735760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f776564000000000000006044820152606401610540565b85600003610bc35760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f7420626520300000000000000000000000006044820152606401610540565b610bcc8661121a565b955085600003610c1e5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f2062726964676500000000000000006044820152606401610540565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906118c2565b1015610cfe5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f206272696467650000000000000000000000000000006064820152608401610540565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610d819190611a41565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050609754609854610e2093506001600160a01b0390811692501689611242565b80610ee6576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610eb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ede9190611bb7565b915050610f5a565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610e9b9392909116918d918d9189918c91604401611be1565b610f646001606555565b95945050505050565b6033546001600160a01b031633146107745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610540565b6002606554036110195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610540565b6002606555565b6040516001600160a01b0383166024820152604481018290526110c99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611390565b505050565b6001606555565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661119f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774611475565b600054610100900460ff166112125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6107746114e9565b600061122b6402540be40083611c31565b915061123c6402540be40083611c53565b92915050565b8015806112d557506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d391906118c2565b155b6113475760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610540565b6040516001600160a01b0383166024820152604481018290526110c99084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611065565b60006113e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115549092919063ffffffff16565b8051909150156110c957808060200190518101906114039190611c6a565b6110c95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610540565b600054610100900460ff166114e05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774336110d5565b600054610100900460ff166110ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6060611563848460008561156b565b949350505050565b6060824710156115e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610540565b600080866001600160a01b031685876040516115ff9190611c8c565b60006040518083038185875af1925050503d806000811461163c576040519150601f19603f3d011682016040523d82523d6000602084013e611641565b606091505b50915091506116528783838761165d565b979650505050505050565b606083156116cc5782516000036116c5576001600160a01b0385163b6116c55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610540565b5081611563565b61156383838151156116e15781518083602001fd5b8060405162461bcd60e51b81526004016105409190611a80565b60006020828403121561170d57600080fd5b5035919050565b6000806020838503121561172757600080fd5b823567ffffffffffffffff8082111561173f57600080fd5b818501915085601f83011261175357600080fd5b81358181111561176257600080fd5b86602082850101111561177457600080fd5b60209290920196919550909350505050565b61ffff81168114610b1957600080fd5b600080604083850312156117a957600080fd5b82356117b481611786565b946020939093013593505050565b6000602082840312156117d457600080fd5b81356117df81611786565b9392505050565b6001600160a01b0381168114610b1957600080fd5b60008060006060848603121561181057600080fd5b833561181b816117e6565b9250602084013561182b816117e6565b9150604084013561183b816117e6565b809150509250925092565b60006020828403121561185857600080fd5b81356117df816117e6565b600080600080600060a0868803121561187b57600080fd5b85359450602086013561188d81611786565b93506040860135925060608601359150608086013563ffffffff811681146118b457600080fd5b809150509295509295909350565b6000602082840312156118d457600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156119445761194461190a565b60405290565b60005b8381101561196557818101518382015260200161194d565b50506000910152565b600082601f83011261197f57600080fd5b815167ffffffffffffffff8082111561199a5761199a61190a565b604051601f8301601f19908116603f011681019082821181831017156119c2576119c261190a565b816040528381528660208588010111156119db57600080fd5b6119ec84602083016020890161194a565b9695505050505050565b600060208284031215611a0857600080fd5b815167ffffffffffffffff811115611a1f57600080fd5b6115638482850161196e565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123c5761123c611a2b565b60008151808452611a6c81602086016020860161194a565b601f01601f19169290920160200192915050565b6020815260006117df6020830184611a54565b805160ff81168114611aa457600080fd5b919050565b8051611aa481611786565b600060208284031215611ac657600080fd5b815167ffffffffffffffff80821115611ade57600080fd5b908301906101008286031215611af357600080fd5b611afb611920565b611b0483611a93565b81526020830151602082015260408301516040820152611b2660608401611aa9565b606082015260808301516080820152611b4160a08401611aa9565b60a082015260c083015160c082015260e083015182811115611b6257600080fd5b611b6e8782860161196e565b60e08301525095945050505050565b80516020808301519190811015611b9e576000198160200360031b1b821691505b50919050565b8082018082111561123c5761123c611a2b565b600060208284031215611bc957600080fd5b815167ffffffffffffffff811681146117df57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611c2560c0830184611a54565b98975050505050505050565b600082611c4e57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761123c5761123c611a2b565b600060208284031215611c7c57600080fd5b815180151581146117df57600080fd5b60008251611c9e81846020870161194a565b919091019291505056fea2646970667358221220b291d4f116eaee9a0315797c6438d633227d2a991caa1d3985922e37d89cae9964736f6c63430008110033",
428
415
  "linkReferences": {},
429
416
  "deployedLinkReferences": {}
430
417
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/863363ae5ef1816b1c5cc49184d3946e.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/863363ae5ef1816b1c5cc49184d3946e.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/863363ae5ef1816b1c5cc49184d3946e.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/863363ae5ef1816b1c5cc49184d3946e.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/a88566d5d0b7d87876db404e15ca877f.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/c4c29a9cc776ff45cd0998e62eef5536.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -281,14 +281,17 @@ contract L2WormholeGateway is
281
281
  /// - The receiver of the canonical tBTC should be abi-encoded in the
282
282
  /// payload.
283
283
  /// - The receiver of the canonical tBTC must not be the zero address.
284
+ ///
284
285
  /// The Wormhole Token Bridge contract has protection against redeeming
285
286
  /// the same VAA again. When a Token Bridge VAA is redeemed, its
286
287
  /// message body hash is stored in a map. This map is used to check
287
288
  /// whether the hash has already been set in this map. For this reason,
288
- /// this function does not have to be nonReentrant.
289
+ /// this function does not have to be nonReentrant in theory. However,
290
+ /// to make this function non-dependent on Wormhole Bridge implementation,
291
+ /// we are making it nonReentrant anyway.
289
292
  /// @param encodedVm A byte array containing a Wormhole VAA signed by the
290
293
  /// guardians.
291
- function receiveTbtc(bytes calldata encodedVm) external {
294
+ function receiveTbtc(bytes calldata encodedVm) external nonReentrant {
292
295
  // ITokenBridge.completeTransferWithPayload completes a contract-controlled
293
296
  // transfer of an ERC20 token. Calling this function is not enough to
294
297
  // ensure L2WormholeGateway received Wormhole tBTC representation.
@@ -318,40 +321,17 @@ contract L2WormholeGateway is
318
321
  if (mintedAmount + amount > mintingLimit) {
319
322
  bridgeToken.safeTransfer(receiver, amount);
320
323
  } else {
321
- // The function is non-reentrant given bridge.completeTransferWithPayload
322
- // call that does not allow to use the same VAA again.
324
+ // The function is non-reentrant.
323
325
  // slither-disable-next-line reentrancy-benign
324
326
  mintedAmount += amount;
325
327
  tbtc.mint(receiver, amount);
326
328
  }
327
329
 
328
- // The function is non-reentrant given bridge.completeTransferWithPayload
329
- // call that does not allow to use the same VAA again.
330
+ // The function is non-reentrant.
330
331
  // slither-disable-next-line reentrancy-events
331
332
  emit WormholeTbtcReceived(receiver, amount);
332
333
  }
333
334
 
334
- /// @notice Allows to deposit Wormhole tBTC token in exchange for canonical
335
- /// tBTC. Useful in a situation when user received wormhole tBTC
336
- /// instead of canonical tBTC. One example of such situation is
337
- /// when the minting limit was exceeded but the user minted anyway.
338
- /// @dev Requirements:
339
- /// - The sender must have at least `amount` of the Wormhole tBTC and
340
- /// it has to be approved for L2WormholeGateway.
341
- /// - The minting limit must allow for minting the given amount.
342
- /// @param amount The amount of Wormhole tBTC to deposit.
343
- function depositWormholeTbtc(uint256 amount) external {
344
- require(
345
- mintedAmount + amount <= mintingLimit,
346
- "Minting limit exceeded"
347
- );
348
-
349
- emit WormholeTbtcDeposited(msg.sender, amount);
350
- mintedAmount += amount;
351
- bridgeToken.safeTransferFrom(msg.sender, address(this), amount);
352
- tbtc.mint(msg.sender, amount);
353
- }
354
-
355
335
  /// @notice Lets the governance to update the tBTC gateway address on the
356
336
  /// chain with the given Wormhole ID.
357
337
  /// @dev Use toWormholeAddress function to convert between Ethereum and
@@ -0,0 +1,99 @@
1
+ import { Artifact, HardhatRuntimeEnvironment } from "hardhat/types"
2
+ import { DeployFunction, Deployment } from "hardhat-deploy/types"
3
+ import { ContractFactory } from "ethers"
4
+ import { ProxyAdmin, WalletCoordinator } from "../typechain"
5
+
6
+ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
7
+ const { ethers, helpers, deployments } = hre
8
+
9
+ const { deployer } = await helpers.signers.getNamedSigners()
10
+
11
+ const proxyDeployment: Deployment = await deployments.get("WalletCoordinator")
12
+ const implementationContractFactory: ContractFactory =
13
+ await ethers.getContractFactory("WalletCoordinator", {
14
+ signer: deployer,
15
+ })
16
+
17
+ // Deploy new implementation contract
18
+ const newImplementationAddress: string = (await hre.upgrades.prepareUpgrade(
19
+ proxyDeployment,
20
+ implementationContractFactory,
21
+ {
22
+ kind: "transparent",
23
+ }
24
+ )) as string
25
+
26
+ deployments.log(
27
+ `new implementation contract deployed at: ${newImplementationAddress}`
28
+ )
29
+
30
+ // Assemble proxy upgrade transaction.
31
+ const proxyAdmin: ProxyAdmin =
32
+ (await hre.upgrades.admin.getInstance()) as ProxyAdmin
33
+ const proxyAdminOwner = await proxyAdmin.owner()
34
+
35
+ const upgradeTxData = await proxyAdmin.interface.encodeFunctionData(
36
+ "upgrade",
37
+ [proxyDeployment.address, newImplementationAddress]
38
+ )
39
+
40
+ deployments.log(
41
+ `proxy admin owner ${proxyAdminOwner} is required to upgrade proxy implementation with transaction:\n` +
42
+ `\t\tfrom: ${proxyAdminOwner}\n` +
43
+ `\t\tto: ${proxyAdmin.address}\n` +
44
+ `\t\tdata: ${upgradeTxData}`
45
+ )
46
+
47
+ // Update Deployment Artifact
48
+ const walletCoordinatorArtifact: Artifact =
49
+ hre.artifacts.readArtifactSync("WalletCoordinator")
50
+
51
+ await deployments.save("WalletCoordinator", {
52
+ ...proxyDeployment,
53
+ abi: walletCoordinatorArtifact.abi,
54
+ implementation: newImplementationAddress,
55
+ })
56
+
57
+ // Assemble parameters upgrade transaction.
58
+ const walletCoordinator: WalletCoordinator =
59
+ await helpers.contracts.getContract("WalletCoordinator")
60
+
61
+ const walletCoordinatorOwner = await walletCoordinator.owner()
62
+
63
+ const updateRedemptionProposalParametersTxData =
64
+ walletCoordinator.interface.encodeFunctionData(
65
+ "updateRedemptionProposalParameters",
66
+ [7200, 600, 7200, 20, 20000]
67
+ )
68
+
69
+ deployments.log(
70
+ `WalletCoordinator owner ${walletCoordinatorOwner} is required to update redemption proposal parameters with transaction:\n` +
71
+ `\t\tfrom: ${walletCoordinatorOwner}\n` +
72
+ `\t\tto: ${walletCoordinator.address}\n` +
73
+ `\t\tdata: ${updateRedemptionProposalParametersTxData}`
74
+ )
75
+
76
+ if (hre.network.tags.etherscan) {
77
+ // We use `verify` instead of `verify:verify` as the `verify` task is defined
78
+ // in "@openzeppelin/hardhat-upgrades" to perform Etherscan verification
79
+ // of Proxy and Implementation contracts.
80
+ await hre.run("verify", {
81
+ address: newImplementationAddress,
82
+ constructorArgsParams: proxyDeployment.args,
83
+ })
84
+ }
85
+
86
+ if (hre.network.tags.tenderly) {
87
+ await hre.tenderly.verify({
88
+ name: "WalletCoordinator",
89
+ address: newImplementationAddress,
90
+ })
91
+ }
92
+ }
93
+
94
+ export default func
95
+
96
+ func.tags = ["UpgradeWalletCoordinator"]
97
+ // When running an upgrade uncomment the skip below and run the command:
98
+ // yarn deploy --tags UpgradeWalletCoordinator --network <NETWORK>
99
+ func.skip = async () => true